如果只是变量,如下即可实现全局变量-
两种方法:
1.
__device__ float devData;
float value = 3.14f;
cudaMemcpyToSymbol(devData,&value,sizeof(float));
cudaMemcpyFromSymbol(&value,devData,sizeof(float));
2.
__device__ float myData;
float * dptr;
cudaGetSymbolAddress((void **)&dptr,myData);
cudaMemcpy(dptr,&value,sizeof(float),cudaMemcpyHostToDevice);
cudaMemcpyFromSymbol(&value,myData,sizeof(float));
如果是数组方式的话,
__device__ float * Data2;
float * myptr,* h_ptr;
h_ptr = (float*)malloc(sizeof(float)*10);
cudaError_t ret =cudaMalloc((void **)&myptr,sizeof(float)*10);
ret = cudaMemcpyToSymbol(Data2,&myptr,sizeof(float *));
cudaMemcpy(h_ptr,Data2,sizeof(float)*10,cudaMemcpyDeviceToHost);
for(int i=0;i<10;i++){
printf("%f --- \n",h_ptr[i]);
}
也就是说,貌似暂时来看,只能通过先申请一个设备内存块,然后拷贝到全局内存,计算完成后,然后再把全局内存拷贝到设备内存块,然后再从设备内存块中拷贝的主机内存,非常麻烦。。。。