我正在运行一个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