首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Cudamemcpy函数用法

Cudamemcpy函数用法
EN

Stack Overflow用户
提问于 2013-05-17 08:17:31
回答 1查看 26.3K关注 0票数 4

在这种情况下,cudaMemcpy函数将如何工作?

我已经声明了一个这样的矩阵

代码语言:javascript
复制
float imagen[par->N][par->M];

我想把它复制到cuda设备上,所以我这样做了

代码语言:javascript
复制
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);

这会很好地将2d数组复制到1d数组吗?

如何才能复制到另一个2d数组?我能改变这一点吗?它能工作吗?

代码语言:javascript
复制
float **imagen_cuda;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-18 03:44:28

在主机和设备之间复制数据时,处理双下标C数组不是一件容易的事。在大多数情况下,cudaMemcpy (包括cudaMemcpy2D)需要源和目标的普通指针,而不是指针到指针。

最简单的方法(我认为)是在主机和设备上“展平”2D数组,并使用索引算法来模拟2D坐标:

代码语言:javascript
复制
float imagen[par->N][par->M];
float *myimagen = &(imagen[0][0]);
float myval = myimagen[(rowsize*row) + col];

然后,您可以使用普通的cudaMemcpy操作来处理传输(使用myimagen指针):

代码语言:javascript
复制
float *d_myimagen;
cudaMalloc((void **)&d_myimagen, (par->N * par->M)*sizeof(float));
cudaMemcpy(d_myimagen, myimagen, (par->N * par->M)*sizeof(float), cudaMemcpyHostToDevice);

如果你真的想处理动态大小的(也就是编译时未知的)双下标数组,你可以查看这个question/answer

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16599501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档