(* Peter Su 1991 *) SYSTEM scan; CONST d = 4; n = 16; CONFIGURATION hyper [2], [2], [2], [2]; CONNECTION go(4) : hyper[i,j,k,l] -> hyper [(i+1) mod 2,j,k,l].go(4); go(3) : hyper[i,j,k,l] -> hyper [i,(j+1) mod 2,k,l].go(3); go(2) : hyper[i,j,k,l] -> hyper [i,j,(k+1) mod 2,l].go(2); go(1) : hyper[i,j,k,l] -> hyper [i,j,k,(l+1) mod 2].go(1); SCALAR k: integer; a: ARRAY[1..n] OF integer; VECTOR val: integer; PROCEDURE plus_scan (VECTOR VAR x: integer); SCALAR i : integer; m : integer; VECTOR temp1 : integer; temp2 : integer; res : integer; BEGIN m := 1; PARALLEL res := x; temp1 := x; ENDPARALLEL; FOR i := 1 TO d DO PARALLEL PROPAGATE.go(i) (temp1,temp2); IF (odd((id_no-1) div m)) THEN res := res + temp2; END; temp1 := temp1 + temp2; ENDPARALLEL; m := m * 2; END (* for *); PARALLEL x := res; ENDPARALLEL; END plus_scan; BEGIN WriteString("Enter "); WriteInt(n,3); WriteString(" numbers."); WriteLn; FOR k:=1 TO n DO readint(a[k]) END; load(val,a); plus_scan(val); WriteInt(val,4); END scan.