program sum; // compute the sum of N mumber in o(logN) time (EREW) const n = 8; sharedvar values : array[1] of word; procedure init; var i : word; begin P := n; for i := 1 to n do // initialize the values // values[i] := i; writeln(values[i]); end; // for end init; procedure finish; begin writeln(values[1]); // write the result // end finish; var i,j,k,limit : word; begin // main // the algorithm to sum in lon(n) time for j := 1 to log(n) do limit := 1; for k := 1 to j do limit := 2*limit; end; // for par i := 1 to (n/limit) sync do values[i] := values[2*i-1] + values[2*i]; end; // par end; // for @CLOCK end sum.