关于使用__device__变量

时间:2012-01-03 18:51:38

标签: memory cuda

我正在使用一个全局变量d_myVar,它将在main函数中使用cudaMalloc分配设备内存。我不清楚,在进行全局声明时,我应该在它前面使用__ device __吗?我问这个,因为如果它是主机中的局部变量并被传递给内核,我们就不会在它前面写__ device __。如果我错了,请告诉我。

1 个答案:

答案 0 :(得分:7)

全局范围的__device__变量未与cudaMalloc一起分配。只需使用__device__注释全局范围内的变量:

 #include <stdio.h>

 __device__ int d_myVar;

 __global__ void foo()
 {
   printf("d_myVar is %d\n", d_myVar);
 }

 int main()
 {
   int h_myVar = 13;
   cudaMemcpyToSymbol(d_myVar, &h_myVar, sizeof(int), 0, cudaMemcpyHostToDevice);
   foo<<<1,1>>>();
   cudaThreadSynchronize();
   return 0;
 }

结果:

$ nvcc -arch=sm_20 test.cu -run
d_myVar is 13