PROGRAM MULTI C C MULTIPLE MEMORY BANK PROBLEM SOLVER C C B. Z. Lederman I.T.T. World Communications C C This program solves for throughput when one or more C processors shares one or more memory banks. C INTEGER N, M, A1, FIRST BYTE ANS C FIRST=.TRUE. C 5 WRITE (5,10) 10 FORMAT(1X/'$ Enter the number of processors: ') READ (5,15) A1 15 FORMAT(I3) IF (FIRST) N = A1 IF ((.NOT.FIRST).AND.(A1.GE.1)) N = A1 IF (N.LE.1) STOP ' BAD N' WRITE (5,20) 20 FORMAT('$ Enter the number of parallel memory banks: ') READ (5,15) A1 IF (FIRST) M = A1 IF ((.NOT.FIRST).AND.(A1.GE.1)) M = A1 IF (M.LT.1) STOP ' BAD M' WRITE (5,30) 30 FORMAT('$ Enter fraction of time that memory is busy (0-1): ') READ (5,40) A2 40 FORMAT(F7.3) IF (FIRST) R = A2 IF ((.NOT.FIRST).AND.(A2.GT.0).AND.(A2.LE.1)) R = A2 IF ((R.LE.0).OR.(R.GT.1)) STOP ' BAD R' C C FIRST GUESS, T = 1 C FIRST=.FALSE. TRY = 1.0 T = 1. C 100 TEMP1 = 1. - R TEMP2 = (T/FLOAT(N)) * TEMP1 TEMP1 = 1. - TEMP2 TEMP2 = (1./FLOAT(M)) * TEMP1 TEMP1 = 1. - TEMP2 TEMP2 = TEMP1**N TEMP1 = 1. - TEMP2 TEMP2 = (FLOAT(M)/R) * TEMP1 C IF (ABS(TEMP2-T) .LE. 0.003) GO TO 300 IF (TEMP2 .LT. T) GO TO 250 220 T = T + TRY GO TO 100 250 T = T - TRY TRY = TRY * 0.5 GO TO 220 C 300 WRITE (5,310) T 310 FORMAT(' Throughput = ',F6.2 / 1X) WRITE (5,320) 320 FORMAT('$ Enter Y to solve another problem: ') READ (5,330) ANS 330 FORMAT(A1) IF (ANS .NE. 'Y') GO TO 400 WRITE (5,340) 340 FORMAT(' To leave a value unchanged, hit return.') GO TO 5 C 400 STOP END