1\ .( Loading Matrix Multiplication benchmark...) cr 2\ NOTE: This version needs 0.5MB data space 3 4\ A classical benchmark of an O(n**3) algorithm; Matrix Multiplication 5\ 6\ Part of the programs gathered by John Hennessy for the MIPS 7\ RISC project at Stanford. Translated to forth by Marty Fraeman, 8\ Johns Hopkins University/Applied Physics Laboratory. 9 10\ MM forth2c doesn't have it ! 11: mybounds over + swap ; 12 13variable seed 14 15: initiate-seed ( -- ) 74755 seed ! ; 16: random ( -- n ) seed @ 1309 * 13849 + 65535 and dup seed ! ; 17 18200 constant row-size 19row-size cells constant row-byte-size 20 21row-size row-size * constant mat-size 22mat-size cells constant mat-byte-size 23 24align create ima mat-byte-size allot 25align create imb mat-byte-size allot 26align create imr mat-byte-size allot 27 28: initiate-matrix ( m[row-size][row-size] -- ) 29 mat-byte-size mybounds do 30 random dup 120 / 120 * - 60 - i ! 31 cell +loop 32; 33 34: innerproduct ( a[row][*] b[*][column] -- int) 35 0 row-size 0 do 36 >r over @ over @ * r> + >r 37 swap cell+ swap row-byte-size + 38 r> 39 loop 40 >r 2drop r> 41; 42 43: main ( -- ) 44 initiate-seed 45 ima initiate-matrix 46 imb initiate-matrix 47 imr ima mat-byte-size mybounds do 48 imb row-byte-size mybounds do 49 j i innerproduct over ! cell+ 50 cell +loop 51 row-size cells +loop 52 drop 53; 54 55 56