program prefix; // parallel prefix ("add" in this program) const n = 8; sharedvar values : array[1] of word; result : array[1] of word; procedure init; var i : word; begin P := n; // assign PRAM model to use n processors // for i := 1 to n do values[i] := i; // initailize the values // writeln(values[i]); // write the values // end; // for end init; procedure finish; var i :word; begin for i := 1 to n do writeln(result[i]); // write the result // end; //for end finish; var i,save,span,myindex : word; begin // main par i := 1 to n sync do // for every processor does in parallel // span := 1; myindex := i; save := values[myindex]; while (span <= i) do if (myindex-span < 1 ) then values[myindex] := values[myindex]; else values[myindex] := values[myindex-span] + values[myindex]; end; // if span := 2*span; end; // while result[myindex] := values[myindex]; values[myindex] := save; end; // par @CLOCK end prefix.