我正在运行一个C程序,我在那里调用了两次cuda主机功能。我想在这两个电话之间清理设备内存。有没有办法可以刷新GPU设备内存?我使用的是Tesla M2050,计算能力为2.0
答案 0 :(得分:4)
如果您只想将内存归零,那么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
取是一个 byte 值,指定范围内的所有字节都设置为该值,就像标准C memset
一样。如果您有一个特定的字值,那么您需要编写自己的memset内核来分配值。
答案 1 :(得分:1)
如果您正在使用推力向量,那么您可以使用所需的重置值在要重置的向量上调用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 */ );