我正在運行一個C程序,在那裏我調用兩次cuda主機函數。我想清除這兩個調用之間的設備內存。有沒有一種方法可以刷新GPU設備內存?我在計算能力爲2.0的特斯拉M2050上設備內存刷新cuda
回答
如果您只想將內存歸零,那麼cudaMemset
可能是最簡單的方法。例如:
const int n = 10000000;
const int sz = sizeof(float) * n;
float *devicemem;
cudaMalloc((void **)&devicemem, sz);
kernel<<<...>>>(devicemem,....);
cudaMemset(devicemem, 0, sz); // zeros all the bytes in devicemem
kernel<<<...>>>(devicemem,....);
注意,值cudaMemset
需要的是一個字節值,並在指定的範圍內的所有字節被設置爲該值,就像標準C memset
。如果您有一個特定的字值,那麼您將需要編寫自己的memset內核來分配值。
要memset 16位和32位值,您可以調用驅動程序API的cuMemset *函數系列,例如cuMemsetD16()或cuMemsetD32(),即使是來自CUDA運行時應用程序。 – ArchaeaSoftware 2012-03-02 12:57:29
@talonmies:感謝您對SO的所有CUDA答案的幫助。你能直接與我聯繫嗎(我的公司Dot Com的第一個姓氏)?我有一個問題給你(抱歉,因此不支持私人消息)。 – harrism 2012-03-04 10:26:10
如果您正在使用推力矢量,那麼您可以使用所需的復位值對要復位的矢量調用thrust::fill()
。
thrust::device_vector<FooType> fooVec(FooSize);
kernelCall1<<< x, y >>>(/* Pass fooVec here */);
// Reset memory of fooVec
thrust::fill(fooVec.begin(), fooVec.end(), FooDefaultValue);
kernelCall2<<< x, y >>>(/* Pass fooVec here */);
- 1. CUDA固定內存從設備中刷新
- 2. 複製到CUDA到設備內存CUDA
- 3. 需要CUDA設備內存交易
- 4. CUDA-GDB:沒有CUDA設備
- 5. cuda程序內核代碼在設備內存空間
- 6. CUDA:重新分配內存時無效的設備指針錯誤
- 7. 從多個cuda文件訪問相同的設備內存
- 8. cuda:爲設備內存使用全局變量
- 9. 在CUDA設備中的內存分配不是預期的
- 10. cuda:需要同步讀取設備內存變量
- 11. 傳遞一個指向CUDA設備內存的指針init init
- 12. 複製到CUDA常量內存時無效的設備符號
- 13. 在CUDA的設備內存上分配二維數組
- 14. CUDA內存分配用於主機和設備
- 15. CUDA常量內存問題:無效的設備符號與cudaGetSymbolAddress
- 16. CUDA主機和使用相同的設備__constant__內存
- 17. CUDA設備到設備轉移昂貴
- 18. CUDA,試圖在設備
- 19. CUDA到設備錯誤
- 20. CUDA指針設備常數
- 21. CUDA設備指針操作
- 22. 設備與CUDA的分裂
- 23. CUDA內核代碼的設備內存:是否明確可管理?
- 24. 內部存儲Android - 設備內存
- 25. 設備旋轉「刷新」視圖
- 26. 內存要求CUDA
- 27. cuda內存合併
- 28. CUDA共享內存
- 29. CUDA內存限制
- 30. UWP設備總內存
您是否更精確地指出「沖洗」或「清理」的含義?你的意思是你想將記憶歸零,還是將它設置爲其他已知的非初始化值,或者你的意思是別的嗎?你是想「沖洗」你已分配的記憶,還是你的意思是整個設備? – talonmies 2012-03-01 14:55:43
我想將我分配的內存歸零,以便「忘記」各種內核存儲在那裏的值。對於問題的含糊不清,請稍等。 – chemeng 2012-03-01 15:03:28