如何优化CPU与GPU之间的数据传输

p3vsea2002 2012-01-10 11:22:21
我的显卡为GTX570。传输总线为 PCI-E x16.使用下面的方法传输40M整形数据消耗的时间为35ms.不知道有没有什么方法可以优化?

代码如下:
#define TOTAL_NUM 40*1024*1024
int *keys;
cudaMallocHost((void**)&keys,sizeof(int)*TOTAL_NUM);//分配 pinned-memory
generateNumbers(keys,TOTAL_NUM);//生成随机整数
int *dev_keys;
cudaMalloc((void**)&dev_keys,sizeof(int)*TOTAL_NUM);//在global memory中分配存储空间
unsigned int copy_timer;
cudaFree(0);
cutCreateTimer(©_timer);
cutStartTimer(copy_timer);
cudaMemcpy(dev_keys,keys,sizeof(int)*TOTAL_NUM,cudaMemcpyHostToDevice);//拷贝pinned-memory 中的数组到global memory
cutStopTimer(copy_timer);
float copyTime = cutGetTimerValue(copy_timer);
printf("Time to copy: %f ms\n",copyTime);

实验结果: copyTime=35.1ms

请问有什么好的方法可以优化吗?多谢!
...全文
616 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
boywang 2012-02-01
  • 打赏
  • 举报
回复
直接在device上生成随机数不行吗?
alpha.5 2012-01-11
  • 打赏
  • 举报
回复
好像这个传输的问题是 PCI-E的事情,我们不能改变吧。
所以你只有接受它了,在其他地方做优化了.
比如传的时候不一下都传过去,先一部分,一边传一边计算,因为异步的原因,这样也是一种并行——和流水线相似,或者直接用流..
方法是有很多的..

p3vsea2002 2012-01-11
  • 打赏
  • 举报
回复
没有人能告诉我吗?

581

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧