并行算法计算前缀和

时间:2012-04-08 04:19:04

标签: algorithm prefix-sum

我遇到了实现并行计算前缀和算法的问题。即使这个算法有3个步骤,我也无法编写代码,因为没有给出伪代码。

我浏览了网上的各种资料以及堆栈溢出,但我没有得到wiki上给出的算法的确切实现。维基提到以下内容:

  

前缀和可以通过以下步骤并行计算::

     
      
  1. 计算该对中第一项具有偶数索引的连续项对的总和:z0 = x0 + x1,z1 = x2 + x3等
  2.   
  3. 递归计算序列z0,z1,z2,...的前缀sum w0,w1,w2,...
  4.   
  5. 将序列w0,w1,w2,...的每个项扩展为总前缀和的两个项:y0 = x0,y1 = w0,y2 = w0 + x2,y3 = w1等。值,每个连续数字yi要么从w序列的一半位置复制,要么是前一个值加到x序列中的一个值
  6.   

有人可以为我建议一个伪代码实现来检查和实现吗?

2 个答案:

答案 0 :(得分:5)

我认为提供的答案还不足以理解算法,所以我在这里提供了一个更全面的伪代码的实际答案:https://stackoverflow.com/a/12874227/697862基于http://http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html这是一篇描述最佳并行算法的完整文章根据:

  

Blelloch,Guy E. 1990.“前缀和及其应用。”技术   报告CMU-CS-90-190,计算机科学学院,卡内基梅隆大学   大学。

答案 1 :(得分:1)

你所写的内容本身就是伪代码,但我希望这会有所帮助。

prefix_sum(List x):List
begin
   //This step is split in multiple tasks that are running in paralell
   //build z, be careful around the end
   w = prefix_sum(z)

   //This step should also be split in multiple tasks
   //build y, using w and x
   return y
end

编辑:y i 是我们想要的总和,y i = w i / 2 ,如果i%2 == 1,w i / 2-1 + x ,否则。这里我们假设w -1 = 0