PRAM if-then-else CREW / EREW

时间:2014-01-08 11:17:54

标签: algorithm parallel-processing theory prefix-sum

在我的并行算法书中,PRAM模型有以下伪代码:

procedure PrefixSumPRAM( A, n ):
BEGIN
   b := new Array(2*n-1);
   b[1] := SumPRAM(A, n); //this will load A with the computation tree and return the sum
   for i := 1 to ( log2(n) - 1 ) do
   BEGIN
      for all procID where (2^i) <= procID <= ((2^(i+1))-1) do in parallel
      BEGIN
          if odd(procID) then
               b[ procID ] := b[ procID/2 ];
          else
               b[ procID ] := b[ procID/2 ] - a[ procID+1 ];
      END
   END
END

但是...... PRAM指定所有处理器必须对不同的数据执行相同的指令。

所以这个程序只能在CREW PRAM模型上执行吗?

或在EREW模型上可执行,然后具有奇数ID的处理器将执行

b[procID]:=b[procID/2];

当具有偶数id的处理器执行(例如)NOP指令时?

1 个答案:

答案 0 :(得分:1)

在PRAM模型中,有无限数量的处理器和单个内存。虽然处理器通过每个时间步执行一条指令来锁定步进,但每个处理器都保持自己的状态,因此可以根据控制流以任意方式执行程序。

在CREW PRAM中,两个处理器可以在同一时间步读取相同的内存位置,但只有一个处理器可以一步写入任何内存位置。在EREW PRAM中,读取也不会同时发生。