Annotation of gforth/matrix.fs, revision 1.1
1.1 ! anton 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:
! 13: variable seed
! 14:
! 15: : initiate-seed ( -- ) 74755 seed ! ;
! 16: : random ( -- n ) seed @ 1309 * 13849 + 65535 and dup seed ! ;
! 17:
! 18: 200 constant row-size
! 19: row-size cells constant row-byte-size
! 20:
! 21: row-size row-size * constant mat-size
! 22: mat-size cells constant mat-byte-size
! 23:
! 24: align create ima mat-byte-size allot
! 25: align create imb mat-byte-size allot
! 26: align 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: cell+ swap row-byte-size + swap
! 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:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>