4
我寫了我這樣的示例代碼。CUDA雙指針內存拷貝
int ** d_ptr;
cudaMalloc((void**)&d_ptr, sizeof(int*)*N);
int* tmp_ptr[N];
for(int i=0; i<N; i++)
cudaMalloc((void**)&tmp_ptr[i], sizeof(int)*SIZE);
cudaMemcpy(d_ptr, tmp_ptr, sizeof(tmp_ptr), cudaMemcpyHostToDevice);
而且這段代碼運行良好,但內核啓動後我無法收到結果。
int* Mtx_on_GPU[N];
cudaMemcpy(Mtx_on_GPU, d_ptr, sizeof(int)*N*SIZE, cudaMemcpyDeviceToHost);
此時發生段錯誤錯誤。但我不知道我錯了什麼。
int* Mtx_on_GPU[N];
for(int i=0; i<N; i++)
cudaMemcpy(Mtx_on_GPU[i], d_ptr[i], sizeof(int)*SIZE, cudaMemcpyDeviceToHost);
此代碼也有同樣的錯誤。
我認爲我的代碼當然有一些錯誤,但在整個白天都找不到它。
給我一些建議。
天啊。它工作得很清楚。謝謝!!但我有一些疑點。 d_ptr和tmp_ptr都使用cudaMalloc,但爲什麼我可以訪問tmp_ptr,但無法訪問d_ptr? – Umbrella
@傘我添加了一個編輯,也許它現在變得更清晰了 – Marco13