CUDA经验:NVCC编译器过度优化(Reduce算法)

  在GPU中Reduce算法是一种快速归约数据的方法,具体内容单击此处跳转。在CUDA实现的过程中,如果处理不当,会导致Debug版本与Release版本结果不一致的现象,这是由于Debug下不会对代码做优化,而Release下“过度优化”了代码,导致程序并没有按照我们的原意执行,最终结果错误。

这里写图片描述

  简单的讲,如上图所示,若要对8个元素求最小值,那么只需要先做对(4,5)、(6,2)、(3,7)、(1,8)四对数求最小值,再折半地对(4,3)、(2,1)求最小值,最后对(3,1)求最小值,总计3次并行的操作即可得到对8个数归约(求最小值)的结果。

运行环境
系统 Windows 10
IDE VS 2013
CUDA版本 9.0
GPU TITAN X (Pascal)


  实验:对输入数组data中从0到255共256个数统计其中奇数的个数,主函数部分:(由CPU完成显存内存的分配、数据的初始化、调用CUDA核函数、得到数据后释放显存)

int main(int main_argc, char ** main_argv)
{
    // 初始化CUDA设备
    init_CUDA(main_argc, main_argv);
    int data[256], *dev_data;
    int result, * dev_result;

    // 分配 CUDA 显存
    checkCudaErrors(cudaMalloc(&dev_data, 25
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值