Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算前缀和的并行算法_Algorithm_Prefix Sum - Fatal编程技术网

Algorithm 计算前缀和的并行算法

Algorithm 计算前缀和的并行算法,algorithm,prefix-sum,Algorithm,Prefix Sum,我在实现并行计算前缀和的算法时遇到了问题。尽管这个算法有3个步骤,但我无法编写代码,因为没有给出伪代码 我浏览了web上的各种资料,也浏览了堆栈溢出,但我没有得到上给出的算法的精确实现。维基提到了以下内容: 前缀和可以通过以下步骤并行计算: 计算连续项目对的总和,其中项目对的第一个项目具有偶数索引:z0=x0+x1,z1=x2+x3,等等 递归计算前缀和w0,w1,w2。。。序列z0,z1,z2 展开序列w0,w1,w2。。。分为总前缀和的两项:y0=x0、y1=w0、y2=w0+x2、y3=w

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

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

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

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

  • 有人能给我推荐一个伪代码实现让我检查和实现吗?

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

    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

    我认为提供的答案不足以理解算法,因此我在这里提供了一个更全面的伪代码的实际答案:在此基础上,有一篇完整的文章根据以下内容描述了最佳并行算法:

    布莱洛,盖伊E.1990。“前缀和及其应用”,技术期刊 报告CMU-CS-90-190,卡内基梅隆大学计算机科学学院 大学


    这不是个好主意吗?你试过什么?如果你读得好,你剪下的文本是伪代码。高性能标记::我没有正确理解第三步。