【发布时间】:2013-05-12 01:24:23
【问题描述】:
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)。 -
另外,你的 N 和 M 在编译过程中是否已知?
-
是的,它们是已知的,二维数组可能是 1024*1024 或更大
-
谢谢你的链接,我去看看
-
看看cudaMemcpy2D函数
标签: cuda