在CUDA中将设备内存中的值作为内核参数传递

时间:2013-10-04 15:48:35

标签: cuda

我正在编写一个CUDA应用程序,该应用程序具有计算某些复值输入数据的方差的步骤,然后该方差用于对数据进行阈值处理。我有一个减少内核来计算我的方差,但是我不确定是否必须将值拉回主机以将其传递给阈值内核。

有没有办法直接从设备内存传递值?

1 个答案:

答案 0 :(得分:4)

您可以使用__device__变量来保存内核调用之间的差异值。

在使用它的内核定义之前加上它:

__device__ float my_variance = 0.0f;
设备上执行的任何内核都可以使用

Variables defined this way(不要求它们作为内核函数参数显式传递)并持续上下文的生命周期,即超出任何单个内核调用的生命周期

您的问题并不完全清楚,但您也可以通过这种方式定义数据数组。

__device__ float my_variance[32] = {0.0f};

同样,cudaMalloc创建的分配在应用程序/上下文的持续时间内(或直到遇到适当的cudaFree)存在,因此不需要“撤回数据”到如果要在连续的内核中使用它,请使用host:

float *d_variance;
cudaMalloc((void **)&d_variance), sizeof(float));
my_reduction_kernel<<<...>>>(..., d_variance, ...);
my_thresholding_kernel<<<...>>>(..., d_variance, ...);

阈值内核将正确观察上面的简化内核在*d_variance中设置的任何值。

相关问题