关于__device__全局变量--变量于数组的问题

如果只是变量,如下即可实现全局变量-

两种方法:

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]);
}

也就是说,貌似暂时来看,只能通过先申请一个设备内存块,然后拷贝到全局内存,计算完成后,然后再把全局内存拷贝到设备内存块,然后再从设备内存块中拷贝的主机内存,非常麻烦。。。。

猜你喜欢

转载自blog.csdn.net/czw0723/article/details/88983059