SUBROUTINE R7 ( NUMBUFS, NN, START, LENGTH, OK, IER, NPES, * CSET, WSET, CRUN, WRUN ) c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c Output routine for Benchmark 7. c c This will need to be modified to contain the particular c configuration information requested. c c Parameters: c Provided by calling routine: c NUMBUFS= Number of buffers of the A-stream c where a buffer is 11264000 words = 720 896 000 bits c Default is 100 buffers = 72 089 600 000 bits C NN = The number of solutions found c START = Array of starting locations for each solution c LENGTH = Array of lengths for each solution c OK = Array: =0 if solution(i) agrees w. check values, else 1 c IER = Error flag array c IER(1) = 0, or expected number of sol's if wrong no. found c IER(2) = Number of solutions found that are incorrect c NPES = Number of PEs for this run c CSET = CPU time required to generate the data c WSET = Wallclock time required to generate the data c CRUN = CPU time required to do the benchmark c WRUN = Wallclock time required to do the benchmark c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc #include "bench7.h" c IMPLICIT INTEGER (A-Z) c INTEGER (kind=8) START, ABITS, EBITS c DIMENSION START(MAXANS), LENGTH(MAXANS), OK(MAXANS), IER(2) REAL (kind=8) CSET,WSET,CRUN,WRUN #ifdef CRAY CHARACTER*8 DATE,CLOCK #else CHARACTER*24 FDATE EXTERNAL FDATE #endif c PRINT 5 5 FORMAT(///,'Benchmark #7 -- Bit Twiddle -- MPI Fortran version',/) c #ifdef CRAY PRINT 7, DATE(), CLOCK() 7 FORMAT('Date-time: ',A8, 8X, A8, /) #else PRINT 7, FDATE() 7 FORMAT("Date: ", A24, /) #endif c PRINT 9, NPES 9 FORMAT('Number of processors: ',I3,/) c ABITS = NUMBUFS * BUFSIZE * 64_8 ! need _8 to get 8-byte product EBITS = ABITS * 5 / 11 PRINT 15, NUMBUFS, ABITS, EBITS, NZ 15 FORMAT( 'Length of bit stream A = ', I3, ' buffers', /, * ' = ', I12, ' bits', //, * 'Length of E stream = ', I12, ' bits', //, * 'Length of zero sequence required = ', I6, / ) c PRINT 25, CSET,WSET 25 FORMAT('Time for set up: ',/, $ ' CPU = ',F12.4,' seconds',/, $ ' Wall Clock = ',F12.4,' seconds',/) c PRINT 30,CRUN,WRUN 30 FORMAT('Time to run: ',/, $ ' CPU = ',F12.4,' seconds',/, $ ' Wall Clock = ',F12.4,' seconds',/) c c No errors IF (IER(1) .EQ. 0) THEN PRINT 33, NN 33 FORMAT ('Correct number of solutions found: ',I5,/) ENDIF c c Incorrect number of solutions found IF (IER(1) .NE. 0) THEN PRINT 35, IER(1), NN 35 FORMAT ('Incorrect number of solutions found',/, $ ' Expected ',I5,/,' Found ',I5,//) ENDIF c c Errors in solutions found IF (IER(2) .GT. 0) THEN PRINT 36, IER(2), NN 36 FORMAT (/, I3,' of the ', I3,' solutions are incorrect ',/) ENDIF c c Formats for printing solutions with/without error flag c 37 FORMAT (/,'Starting Position Number of Zeros Error') 99 FORMAT (I15,10X,I6) 88 FORMAT (I15,10X,I6,8X,'***') 77 FORMAT (I15,10X,I6,8X,'???') c c If less than twenty solutions, print out all solutions IF (NN .LE. 20) THEN c PRINT 37 DO 40, I = 1, NN IF (OK(I) .EQ. 0) THEN PRINT 99, START(I), LENGTH(I) ELSE PRINT 88, START(I), LENGTH(I) ENDIF 40 CONTINUE c c Otherwise, print out first five, middle ten, and last five positions ELSE c c Check for too many solutions c IF (NN .GT. MAXCKS) THEN PRINT 60, NN 60 FORMAT(/,'***** WARNING: Too many solutions *****',/, $ ' Number of zero stretches found: ',I8,/, $ ' Only first 1200 were recorded',/, $ ' Only first 1000 were checked',/, $ ' Those not checked are flagged as ???',//) NN = MAXANS ! print below from all saved solutions ENDIF c PRINT 42 42 FORMAT(/, 'First 5, Middle 10, and Last 5 Solutions') PRINT 37 c DO 45, I = 1,5 IF (OK(I) .EQ. 0) THEN PRINT 99, START(I), LENGTH(I) ELSE IF (OK(I) .EQ. 1) THEN PRINT 88, START(I), LENGTH(I) ELSE PRINT 77, START(I), LENGTH(I) ENDIF 45 CONTINUE PRINT * c DO 50, I = NN/2 - 4, NN/2 + 5 IF (OK(I) .EQ. 0) THEN PRINT 99, START(I), LENGTH(I) ELSE IF (OK(I) .EQ. 1) THEN PRINT 88, START(I), LENGTH(I) ELSE PRINT 77, START(I), LENGTH(I) ENDIF 50 CONTINUE PRINT * c DO 55, I = NN - 4, NN IF (OK(I) .EQ. 0) THEN PRINT 99, START(I), LENGTH(I) ELSE IF (OK(I) .EQ. 1) THEN PRINT 88, START(I), LENGTH(I) ELSE PRINT 77, START(I), LENGTH(I) ENDIF 55 CONTINUE ENDIF c PRINT * PRINT * c RETURN END