所以我試圖從主機複製鋸齒陣列到設備。首先這裏是我目前對cudaMalloc和cudaMemcpy的理解:CUDA將鋸齒陣列從主機複製到設備
cudaMalloc需要一個指向內存塊的指針。
cudaMemcpy將一個指向內存塊的指針複製到或從中複製。
請糾正我,如果我錯了。
現在,這是我的代碼不能正常工作(編譯罰款,但沒有輸出):
__global__ void kernel(int** arr)
{
for (int i=0; i<3; i++)
printf("%d\n", arr[i][0]);
}
int main()
{
int arr[][3] = {{1},{2},{3}}; // 3 arrays, 1 element each
int **d_arr;
cudaMalloc((void**)(&d_arr), sizeof(int*)*3); // allocate for 3 int pointers
for (int i=0; i<3; i++)
{
cudaMalloc((void**) &(d_arr[i]), sizeof(int) * 1); // allocate for 1 int in each int pointer
cudaMemcpy(d_arr[i], arr[i], sizeof(int) * 1, cudaMemcpyHostToDevice); // copy data
}
kernel<<<1,1>>>(d_arr);
cudaDeviceSynchronize();
cudaDeviceReset();
}
那我錯在這裏做什麼? 乾杯
1-不,你可以在設備上使用'printf()'。 2-你說得對。 3-檢查我的答案。 4-謝謝,我會讀一讀。 –
1.你說得對,從計算能力2 - 實際上是可能的。 2. - 3.「這種方式」並不是指你的答案,而是你的問題。 ;)4.不客氣。 – Pixelchemist