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