CUDA加速——基于规约思想的数组元素求和

介绍规约求和原理及CUDA并行实现,通过对比CPU与GPU计算结果验证算法正确性。

数组元素求和,顾名思义就是求数组中所有元素的和,比如有数组X:

f6b5e71cbf2f3718d26dae92e0748ce4.png

X的所有元素和就是:

498c2d8329738d018328e78db5ba6ae1.png

如果按串行顺序求上式还是很好理解的,就是一个逐渐累加的过程,如下图,按照step1~stepn的步骤,依次计算S0,S1,S2,...,Sn-1,最后得到的Sn-1即是所有元素的和:

24bbc149c3f56ffe46cbaf7157d5115b.png


01

规约求和思想

以上串行顺序计算的step1~stepn是按照先后顺序依次执行的,那么如果是并行顺序求和呢?也即将多个求和步骤并行执行,而不是按照先后顺序执行,这时该怎么办?

0dbb85c1dadcb93d81c7894b14f21f34.png

由于step1~stepn中后步骤的计算结果依赖于前步骤的结果,必须等待前步骤计算结果出来之后才能开始后步骤的计算,如果直接对step1~stepn这n个步骤并行执行,显然是不能得到正确结果的,因为前步骤的结果还没出来后步骤就开始计算了。

为解上述问题,通常采用规约思想来并行计算。下面我们举一个简单的例子来说明规约思想,假设数组X有8个元素,现要使用规约思想求其元素和:

f916d6a6b7f1fbe955c22b23ec73cd61.png

步骤如下:

  • 将x0~x7两两分组:(x0,x1)、(x2,x3)、(x4,x5)、(x6,x7)。然后使用4个线程并行计算每组的

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌萌哒程序猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值