cuda编程之数据更新小技巧

8 篇文章 0 订阅
6 篇文章 7 订阅
不知道大家有没有遇到这样的情况:

在某个迭代计算过程中,数组new的计算需要old的值,当计算完成后,需要把new的值写入old再下一次迭代?
如果这里使用memcpy的方式,当数据量较大的时候会很耗时的!

解决方法:交换指针

也就是把指向设备内存new和old的指针进行交换,这样就避免了memcpy的时间消耗~当然用过的人无视以上内容~

交换方法:定义一个函数
void pointerExch(void **pt1, void **pt2)
{
    void *tmp;
    tmp = *pt1;
    *pt1 = *pt2;
    *pt2 = tmp;
}

然后调用上面的函数,把保存指向设备的指针传入

pointerExch((void**)&new, (void**)&old);

这样new和old指向的位置就进行了交换,并且以前的代码也不需要修改!这样就代替了

cudaMemcpy(old, new, size, cudaMemcpyDeviceToDevice);

经实际测试,我有大概15个double的数组需要更新,每个都在10W个元素以上,如果用内存拷贝的方式,大概耗时在5ms,而用交换指针,只需要0.000007 s = 0.007ms就完成了! 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值