设备内存冲洗cuda

时间:2012-03-01 14:46:54

标签: cuda gpu

我正在运行一个C程序,我在那里调用了两次cuda主机功能。我想在这两个电话之间清理设备内存。有没有办法可以刷新GPU设备内存?我使用的是Tesla M2050,计算能力为2.0

2 个答案:

答案 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 */ );