/***************************/ /* The program part */ /***************************/ program matmul; // matrix multiplication for CREW PRAM const n = 10; // the size of the matrix : sharedvar a, b, c : array[1..n, 1..n] of word; // input and output matricis procedure init; // procedure that is run before pram var i, j : word; begin P := n * n; // 1, 2, n, etc would also do for i := 1 to n do for j := 1 to n do a[i, j] := i + j; // "random" values for input matricis b[i, j] := i * j; end; end; end init; procedure finish; // procedure that is run after pram var i, j : word; begin for i := 1 to n do for j := 1 to n do writeln(c[i, j]); end; writeln; end; end finish; var i, j, d, e, f : word; // private variables of the prosessors begin // main par d := 0 to n * n - 1 do i := d mod n + 1; // simulates two nested par-statements j := d div n + 1; f := 0; for e := 1 to n do f := f + a[e, j] * b[i, e]; end; c[i, j] := f; end; // par @CLOCK end matmul. /***************************/ /* The result part */ /***************************/ Script started on Thu Dec 15 19:14:26 1994 conx [emulator] pram -t -c -r 8 matmul CLOCK: 1804 440 495 550 605 660 715 770 825 880 935 880 990 1100 1210 1320 1430 1540 1650 1760 1870 1320 1485 1650 1815 1980 2145 2310 2475 2640 2805 1760 1980 2200 2420 2640 2860 3080 3300 3520 3740 2200 2475 2750 3025 3300 3575 3850 4125 4400 4675 2640 2970 3300 3630 3960 4290 4620 4950 5280 5610 3080 3465 3850 4235 4620 5005 5390 5775 6160 6545 3520 3960 4400 4840 5280 5720 6160 6600 7040 7480 3960 4455 4950 5445 5940 6435 6930 7425 7920 8415 4400 4950 5500 6050 6600 7150 7700 8250 8800 9350 conx [emulator] exit exit script done on Thu Dec 15 19:14:40 1994