我正在运行一个C程序,在其中调用了两次cuda主机函数。我想在这两个调用之间清理设备内存。有没有一种方法可以刷新GPU设备内存??我使用的是计算能力为2.0的Tesla M2050。
如果您只想将内存清零,那么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内核以分配值。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 */ );