CUDA 全局global memory变量

标题有点绕 我想说的是使用CUDA时定义的全局__device__ unsigned char data[64];


在并行化某一类算法时,发现不用每次循环都往GPU上拷贝数据,而是在初始化时,将数据拷贝到GPU上,所以定义一个全局的__device__变量,所有的计算只是为了最后将计算的结果保存到data[]中,但是问题来了,当计算完成之后,data中的值不能从GPU中拷回来,cudaMemcpy函数返回值是11,大意是pitch越界。想了一下可能是cudaMemcpy函数要首先要用&取首地址,这个时候如果再用这个函数拷贝偏移64,可能就不是64字节了,这也就是和用unsigned char* data的区别,后者每偏移一位是一个字节。


以上都是自己的猜想,写出来是为了自己遇到类似的问题不再束手无策,如果有人遇到同样的问题可以交流一下。

你可能感兴趣的:(CUDA)