- 假設定義了全局變量 __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;
}