Устройство памяти сброса CUDA - PullRequest
3 голосов
/ 01 марта 2012

Я запускаю программу на Си, где дважды вызываю функцию хоста cuda. Я хочу очистить память устройства между этими 2 вызовами. Есть ли способ очистить память устройства GPU ?? Я на Tesla M2050 с вычислительной способностью 2,0

Ответы [ 2 ]

4 голосов
/ 01 марта 2012

Если вы хотите только обнулить память, то 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. Если у вас есть конкретное значение word , вам потребуется написать собственное ядро ​​memset для назначения значений.

1 голос
/ 02 марта 2012

Если вы используете векторы тяги, то вы можете вызвать 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 */ );
...