【问题标题】:Parallel algorithm to compute Prefix Sum计算前缀和的并行算法
【发布时间】:2012-04-21 01:36:12
【问题描述】:

我在实现并行计算前缀和的算法时遇到问题。尽管这个算法有 3 个步骤,但我无法编写代码,因为没有给出伪代码。

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

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

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

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

【问题讨论】:

  • 这不是duplicate question吗?你试过什么?
  • 如果您正确阅读,您剪切的文本是伪代码。
  • High Performance Mark::第三步没看明白。

标签: algorithm prefix-sum


【解决方案1】:

我认为提供的答案不足以理解算法,所以我在这里提供了一个更全面的伪代码的实际答案:https://stackoverflow.com/a/12874227/697862 基于Parallel Prefix Sum (Scan) with CUDA,这是一篇描述最佳并行算法的完整文章,根据:

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

【讨论】:

    【解决方案2】:

    你写的几乎都是伪代码,但我希望这会有所帮助。

    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
    

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

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 2021-05-25
      • 2017-07-17
      • 2017-03-13
      • 2013-04-02
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多