cudaMemcpy函數在這種情況下如何工作?Cudamemcpy函數的用法
我已經聲明如下
float imagen[par->N][par->M];
一個矩陣,我想這樣我也把它複製到CUDA設備這
float *imagen_cuda;
int tam_cuda=par->M*par->N*sizeof(float);
cudaMalloc((void**) &imagen_cuda,tam_cuda);
cudaMemcpy(imagen_cuda,imagen,tam_cuda,cudaMemcpyHostToDevice);
請問這個副本的二維數組爲一維數組罰款?
如何複製到另一個二維數組?我可以改變這一點,它會工作嗎?
float **imagen_cuda;
首先,你爲什麼要爲你的二維數組使用棧?它總是會變小嗎?其次,二維數組存儲在一個連續的內存塊中,所以你可以使用一個'cudaMemcpy()'將數據複製到一維設備數組中。至於2D CUDA陣列,它有點複雜。你可以在Stack Overflow上找到一些信息和例子(例如[here](http://stackoverflow.com/a/9974989/1043187))。 – BenC
另外,在編譯期間是否已知N和M? – BenC
是的,他們是已知的,二維數組可能是1024 * 1024或更大 – Atirag