2011-06-06 42 views
-1

如何在CUDA中创建全局变量?CUDA Globel变量

__device__ float *devD; 
cudaMalloc((void**)&devD, s); 
calculateDT_T2B<<<dimGrid, dimBlock>>>(); 
cudaMemcpy(dtr, devD, s, cudaMemcpyDeviceToHost); 
print(dtr); 

它没有给出正确答案(给出一些随机数)。但是当我打电话

calculateDT_T2B<<<dimGrid, dimBlock>>>(devD); instead of 
calculateDT_T2B<<<dimGrid, dimBlock>>>(); 

它给出了正确的答案。为什么?

+0

你能发表整个代码吗?你在哪里宣布devD?它的范围是否真正全球化? – 2011-06-06 16:19:50

+0

这个问题对于同一主题的其他问题有什么不同?为什么不能删除其中的一个呢? – talonmies 2011-06-06 17:51:58

回答

0

您不能直接使用cudaMalloc分配到GPU内存中的__device__符号上。当你这样做时,你只在主机内存中分配。看我的answer到你自己的,几乎相同的question,你在这一分钟内发布的。简短版本将使用cudaMemcpyToSymbol将动态分配的设备指针写入静态声明的符号。