SUBROUTINE PROPTS C C ROUTINE TO PARSE THE OPTIONS FILE C C FILE CONTENTS C C File list file: C Time file: C Initial cache contents file: C Fetch time trace?: C Hit rate trace?: C Transfer rate trace?: C Final cache contents?: C In cache time trace?: C Start time: C End time: C Scale factor: C Trace start time: C Trace end time: C Trace time interval: C B0-miss: C B1-miss: C B2-miss: C Error term variance - miss: C T2-T1 (in seconds): C T4-T3 (in seconds): C B0-hit: C B2-hit: C Error term variance - hit: C Replicates: C $INCLUDE:"UCOM.FOR" C CHARACTER*80 LINE NLIST = 0 NINITCACHE = 0 DO 10 I = 1,5 IS_CACHE(I) = 1 10 CONTINUE C READ(24,FMT="(A80)") LINE DO WHILE(LINE(1:4).NE.'END.') ISTART = INDEX(LINE, ':') + 1 ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 C SELECT CASE (LINE(1:1)) CASE('B') C IF (LINE(4:4).EQ.'m') ISUB = 1 IF (LINE(4:4).EQ.'h') ISUB = 2 IF (VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(107,'F') SELECT CASE(LINE(2:2)) C CASE('0') READ(LINE(ISTART:80),FMT='(F12.0)') B0(ISUB) C CASE('1') READ(LINE(ISTART:80),FMT='(F12.0)') B1(ISUB) C CASE('2') READ(LINE(ISTART:80),FMT='(F12.0)') B2(ISUB) END SELECT C CASE('E') SELECT CASE(LINE(2:2)) C CASE('n') IF (VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(108,'F') READ(LINE(ISTART:80),FMT='(F12.0)') END C CASE('r') IF (LINE(24:24).EQ.'m') ISUB = 1 IF (LINE(24:24).EQ.'h') ISUB = 2 IF 1 (VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ').NE.0) 2 CALL WS_ERROR(109,'F') READ(LINE(ISTART:80),FMT='(F12.0)') VAR(ISUB) END SELECT C CASE('F') C SELECT CASE(LINE(2:2)) CASE('i') C SELECT CASE(LINE(3:3)) CASE ('l') NLIST = NLIST + 1 ICOMMA = INDEX(LINE(ISTART:80),',') IF (ICOMMA.EQ.0) THEN FILES(NLIST) = LINE(ISTART:80) ICACHE(NLIST) = 0 ELSE IEND = ISTART + ICOMMA - 2 FILES(NLIST) = LINE(ISTART:IEND) ISTART = IEND + 2 ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IF (VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ') 1 .NE.0) CALL WS_ERROR(202,'F') READ(LINE(ISTART:80),FMT='(I12)') ICACHE(NLIST) IS_CACHE(ICACHE(NLIST)) = 2 ENDIF C CASE ('n') TRACES(4) = LINE(ISTART:ISTART) END SELECT C CASE('e') TRACES(1) = LINE(ISTART:ISTART) END SELECT C CASE('H') TRACES(2) = LINE(ISTART:ISTART) C CASE('I') SELECT CASE (LINE(3:3)) C CASE('i') NINITCACHE = NINITCACHE + 1 ICOMMA = INDEX(LINE(ISTART:80),',') IF (ICOMMA.EQ.0) THEN INITFILES(NINITCACHE) = LINE(ISTART:80) INITCACHE(NINITCACHE) = 0 ELSE IEND = ISTART + ICOMMA - 2 INITFILES(NINITCACHE) = LINE(ISTART:IEND) ISTART = IEND + 2 ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IF (VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(201,'F') READ(LINE(ISTART:80),FMT='(I12)') 1 INITCACHE(NINITCACHE) ENDIF C CASE(' ') TRACES(5) = LINE(ISTART:ISTART) END SELECT C CASE ('R') IF (VERIFY(LINE(ISTART:ISTART+9),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(110,'F') READ(LINE(ISTART:80),FMT='(I10)') NREP C CASE('S') SELECT CASE(LINE(2:2)) C CASE ('t') IF (VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(111,'F') READ(LINE(ISTART:80),FMT='(F10.0)') START C CASE ('c') IF (VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(112,'F') READ(LINE(ISTART:80),FMT='(F10.0)') SF END SELECT C CASE('T') SELECT CASE(LINE(2:2)) C CASE ('i') FILES(6) = LINE(ISTART:80) C CASE ('r') C SELECT CASE(LINE(8:8)) C CASE ('r') TRACES(3) = LINE(ISTART:ISTART) C CASE ('t') IF ( 1 VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ') 2 .NE.0) CALL WS_ERROR(230,'F') READ(LINE(ISTART:80),FMT='(F10.0)') TRACETIME(1) C CASE ('n') IF ( 1 VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ') 2 .NE.0) CALL WS_ERROR(231,'F') READ(LINE(ISTART:80),FMT='(F10.0)') TRACETIME(2) C CASE ('f') IF ( 1 VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ') 2 .NE.0) CALL WS_ERROR(232,'F') READ(LINE(ISTART:80),FMT='(F10.0)') TRACETIME(3) C END SELECT C CASE ('2') IF ( 1 VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ').NE.0) 2 CALL WS_ERROR(113,'F') READ(LINE(ISTART:80),FMT='(F10.0)') T2T1 C CASE ('4') IF ( 1 VERIFY(LINE(ISTART:ISTART+11),'1234567890.+- ').NE.0) 2 CALL WS_ERROR(114,'F') READ(LINE(ISTART:80),FMT='(F10.0)') T4T3 C END SELECT C END SELECT C READ(24,FMT="(A80)") LINE END DO C RETURN END C SUBROUTINE PREXP (LINE) C C ROUTINE TO PARSE A LINE FROM THE EXPERIMENT C $INCLUDE:"UCOM.FOR" C CHARACTER*80 LINE, CPP C IEND = INDEX(LINE, '<') ISTART = IEND+1 IEND = INDEX(LINE(ISTART:80),',') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(115,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') CACHESIZ(1) C ISTART = ISTART + IEND + 1 IEND = INDEX(LINE(ISTART:80),',') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(215,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') CACHESIZ(2) C ISTART = ISTART + IEND + 1 IEND = INDEX(LINE(ISTART:80),',') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(116,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') FILEMN C ISTART = ISTART + IEND + 1 ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = INDEX(LINE(ISTART:80),',') READ (LINE(ISTART:ISTART), FMT='(A1)') DOMAIN IF (DOMAIN.NE.'Y' .AND. DOMAIN.NE.'N') CALL WS_ERROR(118,'F') C ISTART = ISTART + IEND + 1 ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = INDEX(LINE(ISTART:80),',') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(A10)') CPP DO 10 I = 1, 10 IF (CPP(I:I).EQ.'1'.OR. CPP(I:I).EQ.'0') THEN READ (CPP(I:I), FMT='(I1)') IBITMAP(I) ELSE CALL WS_ERROR(119,'F') ENDIF 10 CONTINUE C ISTART = ISTART + IEND + 1 IEND = INDEX(LINE(ISTART:80),',') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(117,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') PROXY C ISTART = ISTART + IEND + 1 ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = SCAN(LINE(ISTART:80),'(,') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(A15)') POLICY ISOK = 1 C IF (POLICY(1:5).EQ.'LRU ') THEN PP1 = 0.0 PP2 = 0.0 ISOK = 2 END IF C IF (POLICY(1:5).EQ.'LRU-M' .OR. 1 POLICY(1:5).EQ.'LRU-T') THEN ISTART = ISTART + IEND IEND = INDEX(LINE(ISTART:80),')') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(120,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') PP1 PP2 = 0.0 ISOK = 2 ENDIF C IF (POLICY(1:1).EQ.'P') THEN ISTART = ISTART + IEND IEND = INDEX(LINE(ISTART:80),',') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(120,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') PP1 C ISTART = ISTART + IEND IEND = INDEX(LINE(ISTART:80),')') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(121,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') PP2 ISOK = 2 ENDIF C IF (POLICY(1:1).EQ.'S') THEN ISTART = ISTART + IEND ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = INDEX(LINE(ISTART:80),',') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(A1)') CPP PP1 = 0 IF (CPP.EQ.'S') PP1 = 2 IF (CPP.EQ.'E') PP1 = 6 IF (CPP.EQ.'A') PP1 = 7 IF (CPP.EQ.'R') PP1 = 10 IF (CPP.EQ.'D') PP1 = 11 IF (CPP.EQ.'L') PP1 = 12 IF (CPP.EQ.'U') PP1 = 14 IF (PP1.EQ.0.0) CALL WS_ERROR(122,'F') C ISTART = ISTART + IEND ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = INDEX(LINE(ISTART:80),')') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(A1)') CPP PP2 = -1 IF (CPP.EQ.'S') PP2 = 2 IF (CPP.EQ.'E') PP2 = 6 IF (CPP.EQ.'A') PP2 = 7 IF (CPP.EQ.'R') PP2 = 10 IF (CPP.EQ.'D') PP2 = 11 IF (CPP.EQ.'L') PP2 = 12 IF (CPP.EQ.'U') PP2 = 14 IF (CPP.EQ.'N') PP2 = 0 IF (PP2.EQ.-1.0) CALL WS_ERROR(123,'F') ISOK = 2 ENDIF IF (ISOK.EQ.1) CALL WS_ERROR(125,'F') C ISTART = ISTART + IEND + 1 ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = SCAN(LINE(ISTART:80),'(,') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(A15)') POLICY2 ISOK = 1 C IF (POLICY2(1:5).EQ.'LRU ' .OR. 1 POLICY2(1:5).EQ.'NONE ') THEN PP12 = 0.0 PP22 = 0.0 ISOK = 2 END IF C IF (POLICY2(1:5).EQ.'LRU-M' .OR. 1 POLICY2(1:5).EQ.'LRU-T') THEN ISTART = ISTART + IEND IEND = INDEX(LINE(ISTART:80),')') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(220,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') PP12 PP22 = 0.0 ISOK = 2 ENDIF C IF (POLICY2(1:1).EQ.'P') THEN ISTART = ISTART + IEND IEND = INDEX(LINE(ISTART:80),',') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(220,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') PP12 C ISTART = ISTART + IEND IEND = INDEX(LINE(ISTART:80),')') IF (VERIFY(LINE(ISTART:ISTART-1+IEND-1),'1234567890.+- ').NE.0) 1 CALL WS_ERROR(221,'F') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(F10.0)') PP22 ISOK = 2 ENDIF C IF (POLICY2(1:1).EQ.'S') THEN ISTART = ISTART + IEND ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = INDEX(LINE(ISTART:80),',') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(A1)') CPP PP12 = 0 IF (CPP.EQ.'S') PP12 = 2 IF (CPP.EQ.'E') PP12 = 6 IF (CPP.EQ.'A') PP12 = 7 IF (CPP.EQ.'R') PP12 = 10 IF (CPP.EQ.'D') PP12 = 11 IF (CPP.EQ.'L') PP12 = 12 IF (CPP.EQ.'U') PP12 = 14 IF (PP12.EQ.0.0) CALL WS_ERROR(222,'F') C ISTART = ISTART + IEND ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = INDEX(LINE(ISTART:80),')') READ (LINE(ISTART:ISTART-1+IEND-1), FMT='(A1)') CPP PP22 = -1 IF (CPP.EQ.'S') PP22 = 2 IF (CPP.EQ.'E') PP22 = 6 IF (CPP.EQ.'A') PP22 = 7 IF (CPP.EQ.'R') PP22 = 10 IF (CPP.EQ.'D') PP22 = 11 IF (CPP.EQ.'L') PP22 = 12 IF (CPP.EQ.'U') PP22 = 114 IF (CPP.EQ.'N') PP22 = 0 IF (PP2.EQ.-1.0) CALL WS_ERROR(223,'F') ISOK = 2 ENDIF IF (ISOK.EQ.1) CALL WS_ERROR(225,'F') C ISTART = ISTART + IEND + 1 ISTART = VERIFY(LINE(ISTART:80),' ') + ISTART - 1 IEND = INDEX(LINE(ISTART:80),'>') READ (LINE(ISTART:ISTART), FMT='(A1)') HITS IF (HITS.NE.'Y' .AND. HITS.NE.'N') CALL WS_ERROR(124,'F') C RETURN END