0
內存指針我聲明瞭兩個GPU內存指針,以及分配的GPU內存,傳輸數據,並在主啓動內核:我怎麼能寫在CUDA
// declare GPU memory pointers
char * gpuIn;
char * gpuOut;
// allocate GPU memory
cudaMalloc(&gpuIn, ARRAY_BYTES);
cudaMalloc(&gpuOut, ARRAY_BYTES);
// transfer the array to the GPU
cudaMemcpy(gpuIn, currIn, ARRAY_BYTES, cudaMemcpyHostToDevice);
// launch the kernel
role<<<dim3(1),dim3(40,20)>>>(gpuOut, gpuIn);
// copy back the result array to the CPU
cudaMemcpy(currOut, gpuOut, ARRAY_BYTES, cudaMemcpyDeviceToHost);
cudaFree(gpuIn);
cudaFree(gpuOut);
這是我在內核內部代碼:
__global__ void role(char * gpuOut, char * gpuIn){
int idx = threadIdx.x;
int idy = threadIdx.y;
char live = '0';
char dead = '.';
char f = gpuIn[idx][idy];
if(f==live){
gpuOut[idx][idy]=dead;
}
else{
gpuOut[idx][idy]=live;
}
}
但是,這裏有一些錯誤,我認爲這裏有一些錯誤的指針。任何機構都可以提供幫助?
「有些錯誤」:具體是什麼樣的錯誤?什麼是確切的錯誤信息?如果您向CUDA API調用添加適當的錯誤檢查,會發生什麼情況? – njuffa
錯誤1.「表達式必須具有指針對象類型」,符合char f = gpuIn [idx] [idy]; ,gpuOut [idx] [idy] =死亡;和gpuOut [idx] [idy] = live;在內核裏面。錯誤2.「類型」char *「的參數與我在主角色中啓動內核的行上的」char「類型參數不兼容<<< dim3(1),dim3(40,20)>>> (gpuOut,gpuIn); –
那麼,因爲你的內核中的'gpuIn'是一個指向'char'的指針,所以你不能像'gpuIn [idx] [idy]'那樣對它進行雙重引用。這在普通的C或C++代碼中不起作用,所以在CUDA中不起作用也就不足爲奇了。你應該提供[mcve]。你可以編輯你的問題,你不需要把這些東西塞進評論中。 –