假设定义了全局变量 __device__ int *a;
我需要一个数组,动态分配,那么直接调用cudaMalloc来为a分配内存的话,是不行的。
具体做法如下
int *tmp;
cudaMalloc((void **)&tmp, sizeof(int) * num);
cudaMemcpyToSymbol(a, &tmp, sizeof(int *),size_t(0), cudaMemcpyHostToDevice);
使用cudaMemcpyToSymbol来把一个动态分配的设备指针写入一个静态的符号。所以是sizeof(int *),只是把指针写给a。