CUDA中如何在設備上分配全局變量

  1. 假設定義了全局變量 __device__ int *a;  

我需要一個數組,動態分配,那麼直接調用cudaMalloc來爲a分配內存的話,是不行的。


具體做法如下


  1. int *tmp;  
  1. cudaMalloc((void **)&tmp, sizeof(int) * num);  
  2.       
  3.   
  4. 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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章