关于使用__device__变量

use*_*148 1 memory cuda

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

Jar*_*ock 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;
 }
Run Code Online (Sandbox Code Playgroud)

结果:

$ nvcc -arch=sm_20 test.cu -run
d_myVar is 13
Run Code Online (Sandbox Code Playgroud)