(* * LANGUAGE : ANS Forth * PROJECT : Forth Environments * DESCRIPTION : Estimate LINPACK rating ( CLINPACK ) * CATEGORY : Benchmark * AUTHOR : Marcel Hendrix * LAST CHANGE : January 13, 2001, Marcel Hendrix * LAST CHANGE : January 31, 2001, Marcel Hendrix, it works. *) NEEDS -miscutil NEEDS -fsl_util REVISION -4linpack "ÄÄÄ 4LINPACK rating Version 0.02 ÄÄÄ" DOC (* Available in the iForth BLAS ---------------------------- IDAMAX ( 'a inca n -- index ) DSCAL ( 'x incx n -- ) ( F: a -- ) DAXPY ( 'x incx 'y incy n -- ) ( F: a -- ) DDOT ( 'x incx 'y incy n -- ) ( F: -- r ) *) ENDDOC [UNDEFINED] DF@+ [IF] : DF@+ ( addr -- addr' ) ( F: -- r ) DUP DF@ DFLOAT+ ; [THEN] [UNDEFINED] DF!+ [IF] : DF!+ ( addr -- addr' ) ( F: r -- ) DUP DF! DFLOAT+ ; [THEN] [UNDEFINED] DF+!+ [IF] : DF+!+ ( addr -- addr' ) ( F: r -- ) DUP DF@ F+ DF!+ ; [THEN] [UNDEFINED] DFLOAT[] [IF] : DFLOAT[] ( addr ix -- addr' ) DFLOATS + ; [THEN] [UNDEFINED] DSCAL ( untested ) [IF] : DSCAL ( 'x incx n -- ) ( F: a -- ) SWAP DFLOATS LOCALS| incx n | n incx * BOUNDS ?DO I DUP DF@ FOVER F* DF! incx +LOOP FDROP ; [THEN] [UNDEFINED] DDOT [IF] : DDOT ( addr1 inc1 addr2 inc2 count -- ) ( F: -- n ) SWAP DFLOATS >R ROT DFLOATS R> LOCALS| inc2 inc1 | 0e 0 ?DO SWAP DUP DF@ inc1 + SWAP DUP DF@ inc2 + F* F+ LOOP 2DROP ; [THEN] [UNDEFINED] DAXPY [IF] : DAXPY ( addr1 inc1 addr2 inc2 count -- ) ( F: a -- ) SWAP DFLOATS >R ROT DFLOATS R> LOCALS| inc2 inc1 | 0 ?DO FDUP SWAP DUP DF@ F* inc1 + SWAP DUP DF+! inc2 + LOOP 2DROP FDROP ; [THEN] [UNDEFINED] IDAMAX [IF] \ Finds the index of element having max. absolute value. \ Jack Dongarra, LINPACK, 3/11/78. : IDAMAX ( 'x incx n -- ix ) 0 1 LOCALS| itemp ix n incx 'x | 0e FLOCAL dmax n 1 < IF -1 EXIT ENDIF n 0= IF 0 EXIT ENDIF incx 1 <> IF 'x DF@ FABS TO dmax incx TO ix n 1 ?DO 'x ix DFLOAT[] DF@ FABS FDUP dmax F> IF TO dmax I TO itemp ELSE FDROP ENDIF incx +TO ix LOOP ELSE 'x DF@ FABS TO dmax n 1 ?DO 'x I DFLOAT[] DF@ FABS FDUP dmax F> IF TO dmax I TO itemp ELSE FDROP ENDIF LOOP ENDIF itemp ; [THEN] : >FMS ( n -- ) ( F: -- time ) S>F 1e-3 F* ; : FMS? ( F: -- time ) MS? >FMS ; 0e FCONSTANT ZERO 1e FCONSTANT ONE 0.056e FCONSTANT CRAY #100 =: #TIMES #100 =: n #200 =: ldaa ldaa 1+ =: lda 6 8 DOUBLE MATRIX st{{ ldaa lda DOUBLE MATRIX a{{ ldaa ldaa DOUBLE MATRIX aa{{ ldaa DOUBLE ARRAY b{ ldaa DOUBLE ARRAY x{ ldaa INTEGER ARRAY ipvt{ : FVALUES 0 ?DO 0e FVALUE LOOP ; 3 FVALUES total norma normx 5 FVALUES resid residn eps kf tm2 0 VALUE ntimes 0 VALUE info 0 VALUE ops 0 VALUE kflops : #F.R ( F: r -- ) ( field prec -- ) PRECISION >R SET-PRECISION F.R R> SET-PRECISION ; : #E.R ( F: r -- ) ( field prec -- ) PRECISION >R SET-PRECISION E.R R> SET-PRECISION ; : print_time ( column -- ) >S CR st{{ 0 S }} DF@ #11 3 #F.R st{{ 1 S }} DF@ #11 3 #F.R st{{ 2 S }} DF@ #11 3 #F.R st{{ 3 S }} DF@ F>S #12 .R st{{ 4 S }} DF@ #11 3 #F.R st{{ 5 S> }} DF@ #11 3 #F.R ; -- a[i][j] == a[lda*i+j] : MATGEN ( 'a lda n b{ 'norma -- ) #1325 LOCALS| init 'norma 'b n lda 'a | 0e ( norma ) n 0 ?DO 'a lda I * DFLOAT[] n 0 ?DO init #3125 * $FFFF AND TO init init S>F 32768e F- 16384e F/ FDUP DF!+ FMAX LOOP DROP LOOP 'norma F! 'b n 0 ?DO 0e DF!+ LOOP DROP n 0 ?DO 'a lda I * DFLOAT[] 'b n 0 ?DO SWAP DF@+ SWAP DF+!+ LOOP 2DROP LOOP ; DOC (* DGEFA factors a double precision matrix by gaussian elimination. DGEFA is usually called by DGECO, but it can be called directly with a saving in time if RCOND is not needed. (time for dgeco) = (1 + 9/n)*(time for dgefa) . On entry a DOUBLE [lda][n] The matrix to be factored. lda integer The leading dimension of the array a . n integer The order of the matrix a . On return a An upper triangular matrix and the multipliers which were used to obtain it. the factorization can be written a = l*u where l is a product of permutation and unit lower triangular matrices and u is upper triangular. ipvt integer[n] An integer vector of pivot indices. info integer = 0 normal value. = k if u[k][k] .eq. 0.0 . This is not an error condition for this subroutine, but it does indicate that DGESL or DGEDI will divide by zero if called. Use RCOND in DGECO for a reliable indication of singularity. LINPACK. This version dated 08/14/78 . Cleve Moler, University of New Mexico, Argonne National Lab. *) ENDDOC -- a[i][j] == a[lda*i+j] : DGEFA ( 'a lda n 'ipvt 'info -- ) 0 0 0 0 LOCALS| ptr ptr2 ll nm1 'info 'ipvt n lda 'a | 0e FLOCAL t \ gaussian elimination with partial pivoting 0 'info ! n 1- TO nm1 n 0= IF 0 'ipvt ! 'a DF@ ZERO F= IF 0 'info ! ENDIF EXIT ENDIF nm1 0 ?DO 'a lda I * DFLOAT[] TO ptr ptr I DFLOAT[] 1 n I - IDAMAX I + TO ll \ find l = pivot index ll 'ipvt I CELL[] ! \ zero pivot implies this column already triangularized ptr ll DFLOAT[] DF@ ZERO F<> IF ll I <> IF ptr ll DFLOAT[] DUP DF@ ptr I DFLOAT[] DUP DF@ SWAP DF! DF! ENDIF \ compute multipliers ONE ptr I DFLOAT[] DF@ F/ FNEGATE TO t t ptr I 1+ DFLOAT[] 1 n I 1+ - DSCAL \ row elimination with column indexing \ row elimination with column indexing n I 1+ ?DO 'a lda I * DFLOAT[] TO ptr2 ptr2 ll DFLOAT[] DF@ TO t ll J <> IF ptr2 ll DFLOAT[] DUP DF@ ptr2 J DFLOAT[] DUP DF@ SWAP DF! DF! ENDIF t ptr J 1+ DFLOAT[] 1 ptr2 J 1+ DFLOAT[] 1 n J 1+ - DAXPY LOOP ELSE I 'info ! ENDIF LOOP nm1 'ipvt nm1 CELL[] ! 'a lda nm1 * nm1 + DFLOAT[] DF@ ZERO F= IF nm1 'info ! ENDIF ; DOC (* DGESL solves the double precision system a * x = b or trans(a) * x = b Using the factors computed by DGECO or DGEFA. On entry a double [lda][n] The output from DGECO or DGEFA. lda integer The leading dimension of the array a . n integer The order of the matrix a . ipvt integer[n] The pivot vector from DGECO or DGEFA. b double [n] The right hand side vector. job integer = 0 to solve a*x = b , = nonzero to solve trans(a)*x = b where trans(a) is the transpose. On return b the solution vector x . Error condition A division by zero will occur if the input factor contains a zero on the diagonal. Technically this indicates singularity but it is often caused by improper arguments or improper setting of lda . It will not occur if the subroutines are called correctly and if DGECO has set rcond .gt. 0.0 or DGEFA has set info .eq. 0 . To compute inverse(a) * c where c is a matrix with p columns DGECO (a,lda,n,ipvt,rcond,z) if (!rcond is too small) for (j=0,j
IF nm1 0 ?DO 'ipvt I CELL[] @ TO ll 'b ll DFLOAT[] DF@ TO t ll I <> IF 'b ll DFLOAT[] DUP DF@ 'b I DFLOAT[] DUP DF@ SWAP DF! DF! ENDIF t 'a lda I * I + 1+ DFLOAT[] 1 'b I 1+ DFLOAT[] 1 n I 1+ - DAXPY LOOP ENDIF \ now solve u*x = y n 0 ?DO n I 1+ - TO kk 'b kk DFLOAT[] DUP DF@ 'a lda kk * kk + DFLOAT[] DF@ F/ FDUP DF! FNEGATE ( t) ( t) 'a lda kk * DFLOAT[] 1 'b 1 kk DAXPY LOOP ; \ Solve trans(a) * x = b. \ First solve trans(u)*y = b : TRANS-DGESL ( 'a lda n 'ipvt 'b -- ) 0 0 0 LOCALS| kk ll nm1 'b 'ipvt n lda 'a | 0e FLOCAL t n 1- TO nm1 n 0 ?DO 'a lda I * DFLOAT[] 1 'b 1 I DDOT TO t 'b I DFLOAT[] DUP DF@ t F- 'a lda I * I + DFLOAT[] DF@ F/ DF! LOOP n 2 < IF EXIT ENDIF \ now solve trans(l)*x = y nm1 1 ?DO n I 1+ - TO kk 'a lda kk * kk + 1+ DFLOAT[] 1 'b kk 1+ DFLOAT[] 1 n kk 1+ - DDOT 'b I DFLOAT[] DF+! 'ipvt kk CELL[] @ TO ll ll kk <> IF 'b ll DFLOAT[] DUP DF@ 'b kk DFLOAT[] DUP DF@ SWAP DF! DF! ENDIF LOOP ; -- a[i][j] == a[lda*i+j]. : DGESL ( 'a lda n 'ipvt 'b job -- ) IF TRANS-DGESL ELSE NORMAL-DGESL ENDIF ; DOC (* Estimate unit roundoff in quantities of size x. This program should function properly on all systems satisfying the following two assumptions, 1. The base used in representing dfloating point numbers is not a power of three. 2. The quantity a in statement 10 is represented to the accuracy used in dfloating point variables that are stored in memory. Under these assumptions, it should be true that, a is not exactly equal to four-thirds, b has a zero for its last bit or digit, c is not exactly equal to one, eps measures the separation of 1.0 from the next larger dfloating point number. the developers of eispack would appreciate being informed about any systems where these assumptions do not hold. ***************************************************************** this routine is one of the auxiliary routines used by eispack iii to avoid machine dependencies. ***************************************************************** This version dated 4/6/83. *) ENDDOC : epslon ( F: x -- r ) ZERO 4e 3e F/ FLOCALS| a eps | BEGIN eps ZERO F= WHILE a ONE F- FDUP FDUP F+ F+ ( c ) ( c ) ONE F- FABS TO eps REPEAT ( x ) FABS eps F* ; DOC (* Purpose: Multiply matrix m times vector x and add the result to vector y. Parameters: n1 integer number of elements in vector y, and number of rows in matrix m y double [n1] vector of length n1 to which is added the product m*x n2 integer number of elements in vector x, and number of columns in matrix m ldm integer leading dimension of array m x double [n2] vector of length n2 m double [ldm][n2] matrix of n1 rows and n2 columns *) ENDDOC -- m[i][j] == m[ldm*i+j] : DMXPY ( n1 'y n2 ldm 'x 'm -- ) 0 0 0 LOCALS| ptr jj jmin 'm 'x ldm n2 'y n1 | \ cleanup odd vector n2 1 AND DUP 1- TO jj 1 = IF 'x jj DFLOAT[] TO ptr 'm ldm jj * DFLOAT[] n1 0 ?DO DF@+ ptr DF@ F* 'y I DFLOAT[] DF+! LOOP DROP ENDIF \ cleanup odd group of two vectors n2 3 AND DUP 1- TO jj 1 > IF n1 0 ?DO 'x jj 1- DFLOAT[] DF@ 'm ldm jj 1- * I + DFLOAT[] DF@ F* 'x jj DFLOAT[] DF@ 'm ldm jj * I + DFLOAT[] DF@ F* F+ 'y I DFLOAT[] DF+! LOOP ENDIF \ cleanup odd group of four vectors n2 7 AND DUP 1- TO jj 3 > IF n1 0 ?DO 'x jj 3 - DFLOAT[] DF@ 'm ldm jj 3 - * I + DFLOAT[] DF@ F* 'x jj 2- DFLOAT[] DF@ 'm ldm jj 2- * I + DFLOAT[] DF@ F* F+ 'x jj 1- DFLOAT[] DF@ 'm ldm jj 1- * I + DFLOAT[] DF@ F* F+ 'x jj DFLOAT[] DF@ 'm ldm jj * I + DFLOAT[] DF@ F* F+ 'y I DFLOAT[] DF+! LOOP ENDIF \ cleanup odd group of eight vectors n2 #15 AND DUP 1- TO jj 7 > IF n1 0 ?DO 'x jj 7 - DFLOAT[] DF@ 'm ldm jj 7 - * I + DFLOAT[] DF@ F* 'x jj 6 - DFLOAT[] DF@ 'm ldm jj 6 - * I + DFLOAT[] DF@ F* F+ 'x jj 5 - DFLOAT[] DF@ 'm ldm jj 5 - * I + DFLOAT[] DF@ F* F+ 'x jj 4 - DFLOAT[] DF@ 'm ldm jj 4 - * I + DFLOAT[] DF@ F* F+ 'x jj 3 - DFLOAT[] DF@ 'm ldm jj 3 - * I + DFLOAT[] DF@ F* F+ 'x jj 2- DFLOAT[] DF@ 'm ldm jj 2- * I + DFLOAT[] DF@ F* F+ 'x jj 1- DFLOAT[] DF@ 'm ldm jj 1- * I + DFLOAT[] DF@ F* F+ 'x jj DFLOAT[] DF@ 'm ldm jj * I + DFLOAT[] DF@ F* F+ 'y I DFLOAT[] DF+! LOOP ENDIF \ main loop - groups of sixteen vectors n2 #16 MOD #15 + n2 SWAP ?DO n1 0 ?DO 'x J #15 - DFLOAT[] DF@ 'm ldm J #15 - * I + DFLOAT[] DF@ F* 'x J #14 - DFLOAT[] DF@ 'm ldm J #14 - * I + DFLOAT[] DF@ F* F+ 'x J #13 - DFLOAT[] DF@ 'm ldm J #13 - * I + DFLOAT[] DF@ F* F+ 'x J #12 - DFLOAT[] DF@ 'm ldm J #12 - * I + DFLOAT[] DF@ F* F+ 'x J #11 - DFLOAT[] DF@ 'm ldm J #11 - * I + DFLOAT[] DF@ F* F+ 'x J #10 - DFLOAT[] DF@ 'm ldm J #10 - * I + DFLOAT[] DF@ F* F+ 'x J 9 - DFLOAT[] DF@ 'm ldm J 9 - * I + DFLOAT[] DF@ F* F+ 'x J 8 - DFLOAT[] DF@ 'm ldm J 8 - * I + DFLOAT[] DF@ F* F+ 'x J 7 - DFLOAT[] DF@ 'm ldm J 7 - * I + DFLOAT[] DF@ F* F+ 'x J 6 - DFLOAT[] DF@ 'm ldm J 6 - * I + DFLOAT[] DF@ F* F+ 'x J 5 - DFLOAT[] DF@ 'm ldm J 5 - * I + DFLOAT[] DF@ F* F+ 'x J 4 - DFLOAT[] DF@ 'm ldm J 4 - * I + DFLOAT[] DF@ F* F+ 'x J 3 - DFLOAT[] DF@ 'm ldm J 3 - * I + DFLOAT[] DF@ F* F+ 'x J 2- DFLOAT[] DF@ 'm ldm J 2- * I + DFLOAT[] DF@ F* F+ 'x J 1- DFLOAT[] DF@ 'm ldm J 1- * I + DFLOAT[] DF@ F* F+ 'x J DFLOAT[] DF@ 'm ldm J * I + DFLOAT[] DF@ F* F+ 'y I DFLOAT[] DF+! LOOP #16 +LOOP ; : MAIN ( -- ) CR ." Unrolled DP precision LINPACK" CR CR n n * DUP n * 2 3 */ SWAP 2* + TO ops a{{ DADDR lda n b{ DADDR 'OF norma MATGEN ?MS a{{ DADDR lda n ipvt{ DADDR 'OF info DGEFA ?MS SWAP - >FMS FDUP st{{ 0 0 }} DF! ?MS a{{ DADDR lda n ipvt{ DADDR b{ DADDR 0 DGESL ?MS SWAP - >FMS FDUP st{{ 1 0 }} DF! F+ TO total \ compute a residual to verify results. n 0 ?DO b{ I } DF@ x{ I } DF! LOOP a{{ DADDR lda n b{ DADDR 'OF norma MATGEN n 0 ?DO b{ I } DUP DF@ FNEGATE DF! LOOP n b{ DADDR n lda x{ DADDR a{{ DADDR DMXPY 0e TO resid 0e TO normx n 0 ?DO b{ I } DF@ FABS resid FMAX TO resid x{ I } DF@ FABS normx FMAX TO normx LOOP ONE epslon TO eps n S>F norma F* normx F* eps F* resid FSWAP F/ TO residn CR ." norm. resid resid machep x[0]-1 x[n-1]-1" CR residn F>S 8 .R 6 SPACES resid #16 8 #E.R eps #16 8 #E.R x{ 0 } DF@ F1- #16 8 #E.R x{ n 1- } DF@ F1- #16 8 #E.R CR ." times are reported for matrices of order " n DEC. CR ." dgefa dgesl total kflops unit ratio" total st{{ 2 0 }} DF! ops S>F total 1e3 F* F/ FDUP st{{ 3 0 }} DF! 2e3 FSWAP F/ st{{ 4 0 }} DF! total CRAY F/ st{{ 5 0 }} DF! CR ." times for array with leading dimension of " lda DEC. 0 print_time a{{ DADDR lda n b{ DADDR 'OF norma MATGEN ?MS a{{ DADDR lda n ipvt{ DADDR 'OF info DGEFA ?MS SWAP - >FMS FDUP st{{ 0 1 }} DF! ?MS a{{ DADDR lda n ipvt{ DADDR b{ DADDR 0 DGESL ?MS SWAP - >FMS FDUP st{{ 1 1 }} DF! F+ FDUP TO total st{{ 2 1 }} DF! ops S>F total 1e3 F* F/ FDUP st{{ 3 1 }} DF! 2e3 FSWAP F/ st{{ 4 1 }} DF! total CRAY F/ st{{ 5 1 }} DF! a{{ DADDR lda n b{ DADDR 'OF norma MATGEN ?MS a{{ DADDR lda n ipvt{ DADDR 'OF info DGEFA ?MS SWAP - >FMS FDUP st{{ 0 2 }} DF! ?MS a{{ DADDR lda n ipvt{ DADDR b{ DADDR 0 DGESL ?MS SWAP - >FMS FDUP st{{ 1 2 }} DF! F+ FDUP TO total st{{ 2 2 }} DF! ops S>F total 1e3 F* F/ FDUP st{{ 3 2 }} DF! 2e3 FSWAP F/ st{{ 4 2 }} DF! total CRAY F/ st{{ 5 2 }} DF! #TIMES TO ntimes 0e TO tm2 ?MS ntimes 0 ?DO ?MS a{{ DADDR lda n b{ DADDR 'OF norma MATGEN ?MS SWAP - >FMS +TO tm2 a{{ DADDR lda n ipvt{ DADDR 'OF info DGEFA LOOP ?MS SWAP - >FMS tm2 F- ntimes S>F F/ FDUP st{{ 0 3 }} DF! ?MS ntimes 0 ?DO a{{ DADDR lda n ipvt{ DADDR b{ DADDR 0 DGESL LOOP ?MS SWAP - >FMS ntimes S>F F/ FDUP st{{ 1 3 }} DF! F+ FDUP TO total st{{ 2 3 }} DF! ops S>F total 1e3 F* F/ FDUP st{{ 3 3 }} DF! 2e3 FSWAP F/ st{{ 4 3 }} DF! total CRAY F/ st{{ 5 3 }} DF! 1 print_time 2 print_time 3 print_time aa{{ DADDR ldaa n b{ DADDR 'OF norma MATGEN ?MS aa{{ DADDR ldaa n ipvt{ DADDR 'OF info DGEFA ?MS SWAP - >FMS FDUP st{{ 0 4 }} DF! ?MS aa{{ DADDR ldaa n ipvt{ DADDR b{ DADDR 0 DGESL ?MS SWAP - >FMS FDUP st{{ 1 4 }} DF! F+ FDUP TO total st{{ 2 4 }} DF! ops S>F 1e3 total F* F/ FDUP st{{ 3 4 }} DF! 2e3 FSWAP F/ st{{ 4 4 }} DF! total CRAY F/ st{{ 5 4 }} DF! aa{{ DADDR ldaa n b{ DADDR 'OF norma MATGEN ?MS aa{{ DADDR ldaa n ipvt{ DADDR 'OF info DGEFA ?MS SWAP - >FMS FDUP st{{ 0 5 }} DF! ?MS aa{{ DADDR ldaa n ipvt{ DADDR b{ DADDR 0 DGESL ?MS SWAP - >FMS FDUP st{{ 1 5 }} DF! F+ FDUP TO total st{{ 2 5 }} DF! ops S>F 1e3 total F* F/ FDUP st{{ 3 5 }} DF! 2e3 FSWAP F/ st{{ 4 5 }} DF! total CRAY F/ st{{ 5 5 }} DF! aa{{ DADDR ldaa n b{ DADDR 'OF norma MATGEN ?MS aa{{ DADDR ldaa n ipvt{ DADDR 'OF info DGEFA ?MS SWAP - >FMS FDUP st{{ 0 6 }} DF! ?MS aa{{ DADDR ldaa n ipvt{ DADDR b{ DADDR 0 DGESL ?MS SWAP - >FMS FDUP st{{ 1 6 }} DF! F+ FDUP TO total st{{ 2 6 }} DF! ops S>F 1e3 total F* F/ FDUP st{{ 3 6 }} DF! 2e3 FSWAP F/ st{{ 4 6 }} DF! total CRAY F/ st{{ 5 6 }} DF! #TIMES TO ntimes 0e TO tm2 ?MS ntimes 0 ?DO ?MS aa{{ DADDR ldaa n b{ DADDR 'OF norma MATGEN ?MS SWAP - >FMS +TO tm2 aa{{ DADDR ldaa n ipvt{ DADDR 'OF info DGEFA LOOP ?MS SWAP - >FMS tm2 F- ntimes S>F F/ FDUP st{{ 0 7 }} DF! ?MS ntimes 0 ?DO aa{{ DADDR ldaa n ipvt{ DADDR b{ DADDR 0 DGESL LOOP ?MS SWAP - >FMS ntimes S>F F/ FDUP st{{ 1 7 }} DF! F+ FDUP TO total st{{ 2 7 }} DF! ops S>F total 1e3 F* F/ FDUP st{{ 3 7 }} DF! 2e3 FSWAP F/ st{{ 4 7 }} DF! total CRAY F/ st{{ 5 7 }} DF! st{{ 3 3 }} DF@ ZERO FMAX FDUP st{{ 3 3 }} DF! st{{ 3 7 }} DF@ ZERO FMAX FMIN FDUP st{{ 3 7 }} DF! ( kf ) 0.5e F+ F>S TO kflops CR ." times for array with leading dimension of " ldaa DEC. 4 print_time 5 print_time 6 print_time 7 print_time CR ." Unrolled, DP Precision, " kflops DEC. ." Kflops; " #TIMES DEC. ." Reps" ; DOC (* 166 MHz P54C 48 MB, NT 4.0 -------------------------- norm. resid resid machep x[0]-1 x[n-1]-1 1 8.39914076E-14 2.22044605E-16 -6.22835117E-14 -4.16333634E-14 times are reported for matrices of order 100 dgefa dgesl total kflops unit ratio times for array with leading dimension of 201 0.031 0.001 0.032 21458 0.093 0.571 0.031 0.001 0.032 21458 0.093 0.571 0.031 0.001 0.032 21458 0.093 0.571 0.030 8.000E-4 0.031 22008 0.091 0.557 times for array with leading dimension of 200 0.031 0.001 0.032 21458 0.093 0.571 0.031 0.001 0.032 21458 0.093 0.571 0.030 0.001 0.031 22150 0.090 0.554 0.030 9.000E-4 0.031 21938 0.091 0.559 Unrolled, DP Precision, 21938 Kflops; 100 Reps ok 900 MHz AMD K7 128 MB, W2K -------------------------- norm. resid resid machep x[0]-1 x[n-1]-1 3 2.58238634E-13 2.22044605E-16 7.77156117E-15 -2.17603713E-14 times are reported for matrices of order 180 dgefa dgesl total kflops unit ratio times for array with leading dimension of 301 0.013 0.001 0.014 282342 0.007 0.250 0.013 0.000 0.013 304061 0.007 0.232 0.013 0.000 0.013 304061 0.007 0.232 0.013 2.200E-4 0.013 300821 0.007 0.235 times for array with leading dimension of 300 0.013 0.000 0.013 304061 0.007 0.232 0.013 0.000 0.013 304061 0.007 0.232 0.012 0.001 0.013 304061 0.007 0.232 0.013 2.200E-4 0.013 300821 0.007 0.230 Unrolled, DP Precision, 300822 Kflops; 100 Reps *) ENDDOC :ABOUT CR ." Try: MAIN " ; .ABOUT -4linpack CR (* End of Source *)