- 假设定义了全局变量 __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。
拷贝数组:
__device__ double d_a[2];
int main()
{
double h_a[2];
h_a[0]=0.1;
h_a[1]=0.2;
cudaMemcpyToSymbol(d_a, h_a, 2*sizeof(double));
return 0;
}
拷贝变量:
__device__ double d_a;
int main()
{
double h_a;
h_a=0.1;;
cudaMemcpyToSymbol(d_a, &h_a, sizeof(double));
return 0;
}