home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byteibm.arc / FRIED.ARC / PI.BAS < prev    next >
Encoding:
BASIC Source File  |  1985-07-12  |  6.3 KB  |  126 lines

  1.  
  2. «PG»
  3.     
  4. 10 REM  PI.BAS -- Performance Index Benchmark Program
  5. 20 REM Copyright (C) MicroWay, Inc., 1986
  6. 30 REM MicroWay, Inc.    PO Box 79    Kingston MA 02364    (617) 746-7341
  7. 40 REM
  8. 50 REM Does not use Numeric Coprocessor (8087 or 80287).  See PI87.BAS for
  9. 60 REM a similar program which does use the Numeric Coprocessor.
  10. 70 REM Compiled with IBM BASIC Compiler V2.00 (/O switch).  Linked with
  11. 80 REM assembly language subroutines:
  12. 90 REM DBB4 DBBCACHE DBB16 CB4 CB16 IA XFER TIME100
  13. 100 REM
  14. 110 DEFINT A-Y
  15. 120 DIM NAME$ (11), SECTION$ (11), ZF (11), ZP (11)
  16. 130 DIM DSRC (10249), DDEST (10249)
  17. 140 COMMON DSRC (), DDEST (), SPC1!, SPC2!, SPC3!, SVA!, SVB!
  18. 150 DEF FNS# (X$) = 60# * (60# * VAL (MID$ (X$, 1, 2)) + VAL (MID$ (X$, 4, 2))) + VAL (MID$ (X$, 7, 2)) + .01# * VAL (MID$ (X$, 10, 2))
  19. 160 LINES$ = "" : FOR I = 1 TO 69 : LINES$ = LINES$ + CHR$ (205) : NEXT I
  20. 170 PRINT CHR$ (201); LINES$; CHR$ (187)
  21. 180 PRINT CHR$ (186); " M i c r o W a y   P e r f o r m a n c e   I n d e x   P r o g r a m "; CHR$ (186)
  22. 190 PRINT CHR$ (200); LINES$; CHR$ (188)
  23. 200 PRINT "                   Copyright (C) MicroWay, Inc., 1986."
  24. 210 PRINT "           (This version does not use the Numeric Coprocessor)"
  25. 220 PRINT
  26. 230 DATA 0.6013,0.5607,0.6,0.6,0.595,0.589,0.62,0.6,0.6,0.6064,0.6064
  27. 240 DATA " 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10","11"
  28. 250 DATA "Floating point -- arithmetic                 "
  29. 260 DATA "Floating point -- Savage (transcendentals)   "
  30. 270 DATA "Data bus bound -- 4K bytes of instructions   "
  31. 280 DATA "Data bus bound -- 4K bytes of register moves "
  32. 290 DATA "Data bus bound -- 16K bytes of instructions  "
  33. 300 DATA "Clock bound -- 4K byte block moves           "
  34. 310 DATA "Clock bound -- 16K byte block moves          "
  35. 320 DATA "Integer multiply and divide                  "
  36. 330 DATA "Subroutine calls and stack operations        "
  37. 340 DATA "Disk I/O -- sequential read from random file "
  38. 350 DATA "Disk I/O -- sequential write to random file  "
  39. 360 DATA 25,25,11.111111,11.111111,11.111111,8.333333,8.333333,0,0,0,0
  40. 370 CALL TIME100
  41. 380 FIRSTTIME = 1
  42. 390 FOR I = 1 TO 11 : READ ZF (I)       : NEXT I
  43. 400 FOR I = 1 TO 11 : READ SECTION$ (I) : NEXT I
  44. 410 FOR I = 1 TO 11 : READ NAME$ (I)    : NEXT I
  45. 420 FOR I = 1 TO 11 : READ ZP (I)       : NEXT I
  46. 430 MAXWRITES = 20 : MAXREADS = 20
  47. 440 GOTO 570
  48. 450 REM *** Create file so that reads will have something to work on
  49. 460 REM *** and so that writes will not have to create new records.
  50. 470 IF MAXWRITES > MAXREADS THEN MPUT = MAXWRITES : ELSE MPUT = MAXREADS
  51. 480 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
  52. 490 FIELD #1, 2048 AS S$
  53. 500 T$ = "" : FOR I=0 TO 1023 : T$ = T$ + MKI$ (256 * RND (I)) : NEXT I
  54. 510 LSET S$ = T$
  55. 520 FOR I = 1 TO MPUT : PUT #1, I : NEXT I : CLOSE #1
  56. 530 PRINT "Please enter percentage of benchmark devoted to each operation."
  57. 540 FOR I = 1 TO 11
  58. 550 PRINT "Section ";SECTION$ (I);"   ";NAME$ (I);": "; : INPUT "", ZP (I)
  59. 560 NEXT I
  60. 570 ZT = 0 : FOR I = 1 TO 11 : ZT = ZT + ZP (I) : NEXT I
  61. 580 IF ZT > 99.5 AND ZT < 100.5 THEN GOTO 640
  62. 590 PRINT : PRINT "Caution: percentages total "; ZT;
  63. 600 INPUT " Adjust to 100% ? ", ADJ$ : PRINT : ADJ$ = LEFT$ (ADJ$, 1)
  64. 610 IF ADJ$ = "Y" OR ADJ$ = "y" THEN GOTO 630
  65. 620 IF ADJ$ = "N" OR ADJ$ = "n" THEN GOTO 660 : ELSE GOTO 600
  66. 630 IF ZT = 0! THEN GOTO 840
  67. 640 Z100 = 1# / ZT : FOR I = 1 TO 11 : ZP (I) = ZP (I) * Z100 : NEXT I
  68. 650 ZT = 100# : GOTO 670
  69. 660 FOR I = 1 TO 11 : ZP (I) = .01 * ZP (I) : NEXT I
  70. 670 PRINT "Section                  Description                  Performance Index"
  71. 680 PRINT "======= ============================================= ================="
  72. 690 ZTET = 0# : FOR J = 1 TO 11
  73. 700 ZITER = 60# * ZP (J) / ZF (J)
  74. 710 ITER = INT (ZITER) : IF ZITER - ITER > .1 THEN ITER = ITER + 1
  75. 720 REM         1   2   3   4   5   6   7   8   9   10  11
  76. 730 ON J GOSUB 930,970,1000,1010,1020,1030,1040,1050,1060,1070,1140
  77. 740 ZET = FNS# (B$) - FNS# (A$)
  78. 750 IF ITER <> 0 THEN ZET = ZET * ZITER / ITER : ELSE ZET = 0#
  79. 760 PRINT "  ";SECTION$ (J);"    ";NAME$ (J);"      ";
  80. 770 IF ZET = 0 THEN PRINT "  ----" : GOTO 790
  81. 780 PRINT USING "###.##"; ZF (J) * ZITER / ZET
  82. 790 ZTET = ZTET + ZET
  83. 800 NEXT J
  84. 810 PRINT : PRINT "Performance index for entire benchmark is ";
  85. 820 IF ZTET = 0 THEN PRINT "not meaningful." : GOTO 840
  86. 830 PRINT USING "###.##"; .6# * ZT / ZTET
  87. 840 PRINT
  88. 850 INPUT "Would you like to run again, specifying the section weights yourself? ", MORE$ : MORE$ = LEFT$ (MORE$, 1)
  89. 860 IF MORE$ = "Y" OR MORE$ = "y" THEN GOTO 900
  90. 870 IF MORE$ = "N" OR MORE$ = "n" THEN GOTO 880 : ELSE GOTO 840
  91. 880 IF FIRSTTIME > 1 THEN KILL "TEMP.TMP"
  92. 890 END
  93. 900 PRINT : FIRSTTIME = FIRSTTIME + 1
  94. 910 IF FIRSTTIME = 2 THEN GOTO 450 : ELSE GOTO 530
  95. 920 REM *** Arithmetic (common subexpressions)
  96. 930 A$ = TIME$ : FOR I = 1 TO ITER : ZA# = 0# : FOR K = 1 TO 114
  97. 940 ZB# = (ZA# + 1#) * (ZA# + 2#) / (ZA# + 3#) + (ZA# + 2#) * (ZA# + 3#) / (ZA# + 1#) + (ZA# + 3#) * (ZA# + 1#) / (ZA# + 2#)
  98. 950 NEXT K : NEXT I : B$ = TIME$ : RETURN
  99. 960 REM *** Savage (transcendentals and trigonometrics)
  100. 970 A$ = TIME$ : FOR I = 1 TO ITER : ZA# = 1# : FOR K = 1 TO 9
  101. 980 ZA# = TAN (ATN (EXP (LOG (SQR (ZA# * ZA#))))) + 1#
  102. 990 NEXT K : NEXT I : B$ = TIME$ : RETURN
  103. 1000 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBB4  : NEXT I : B$ = TIME$ : RETURN
  104. 1010 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBBCACHE:NEXT I: B$ = TIME$ : RETURN
  105. 1020 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBB16 : NEXT I : B$ = TIME$ : RETURN
  106. 1030 A$ = TIME$ : FOR I = 1 TO ITER : CALL CB4   : NEXT I : B$ = TIME$ : RETURN
  107. 1040 A$ = TIME$ : FOR I = 1 TO ITER : CALL CB16  : NEXT I : B$ = TIME$ : RETURN
  108. 1050 A$ = TIME$ : FOR I = 1 TO ITER : CALL IA    : NEXT I : B$ = TIME$ : RETURN
  109. 1060 A$ = TIME$ : FOR I = 1 TO ITER : CALL XFER  : NEXT I : B$ = TIME$ : RETURN
  110. 1070 REM *** Random reads
  111. 1080 IF ITER = 0 THEN A$=TIME$ : B$=A$ : RETURN
  112. 1090 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
  113. 1100 FIELD #1, 2048 AS S$
  114. 1110 A$ = TIME$
  115. 1120 FOR K = 1 TO ITER : FOR I = 1 TO MAXREADS : GET #1, I : NEXT I : NEXT K
  116. 1130 B$ = TIME$ : CLOSE #1 : RETURN
  117. 1140 REM *** Random writes
  118. 1150 IF ITER = 0 THEN A$=TIME$ : B$=A$ : RETURN
  119. 1160 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
  120. 1170 FIELD #1, 2048 AS S$ : LSET S$ = T$
  121. 1180 A$ = TIME$
  122. 1190 FOR K = 1 TO ITER : FOR I = 1 TO MAXWRITES : PUT #1, I : NEXT I : NEXT K
  123. 1200 B$ = TIME$ : CLOSE #1 : RETURN
  124.  
  125. «PG»
  126.