Subject: | |
From: | |
Reply To: | |
Date: | Fri, 11 Jun 2004 10:40:25 -0400 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
Below are two versions of the same COBOL Prime number program.
The first version took 28,051 CPU Milliseconds, the final version took 4,654 Milliseconds.
Friday's trivia question is: What changes resulted in the largest performance gains, and why?
Mike Hornsby Co-founder/Chief Technical Officer
Beechglen Development Inc. (beechglen.com)
513-922-0509 [log in to unmask]
00014 001000 IDENTIFICATION DIVISION.
00015 001100 PROGRAM-ID. PRIME.
00016 001200 DATA DIVISION.
00017 001300 WORKING-STORAGE SECTION.
00018 001400 01 PRIME-FLAG PIC X .
00019 001500 01 CALC-NO PIC 9(6) VALUE ZERO.
00020 001600 01 DIV-NO PIC 9(6) VALUE ZERO.
00021 001700 01 R PIC 9(9) VALUE ZERO.
00022 001800 01 N PIC 9(9) VALUE ZERO.
00023 001900 01 PRIME-COUNT PIC 9(5) VALUE 2.
00024 002000 01 RUN-TIME PIC 9(9) COMP.
00025 002100
00026 002200 PROCEDURE DIVISION.
00027 002300 000-MAIN.
00028 002400 PERFORM 100-CHECK-NUM THRU 100-EXIT
00029 002500 VARYING CALC-NO FROM 3 BY 2
00030 002600 UNTIL CALC-NO > 10000.
00031 002700
00032 002800 DISPLAY 'PRIMES= ' PRIME-COUNT.
00033 002900 CALL INTRINSIC "PROCTIME" GIVING RUN-TIME.
00034 003000 DISPLAY 'TOTAL CPU MSECS=' RUN-TIME.
00035 003100 STOP RUN.
00036 003200
00037 003300 000-EXIT.
00038 003400
00039 003500 100-CHECK-NUM.
00040 003600 MOVE "Y" TO PRIME-FLAG
00041 003700 PERFORM 110-CALC-NUM THRU 110-EXIT
00042 003800 VARYING DIV-NO FROM 3 BY 1
00043 003900 UNTIL (DIV-NO > ((CALC-NO + 1) / 2)) OR
00044 004000 PRIME-FLAG = "N".
00045 004100 IF PRIME-FLAG = "Y" THEN
00046 004200 ADD +1 TO PRIME-COUNT.
00047 004300 100-EXIT. EXIT.
00048 004400
00049 004500 110-CALC-NUM.
00050 004600 DIVIDE CALC-NO BY DIV-NO GIVING N REMAINDER R.
00051 004700 IF R = 0 THEN MOVE 'N' TO PRIME-FLAG.
00052 004800 110-EXIT. EXIT.
...
PRIMES= 01230
TOTAL CPU MSECS=000028051
00014 001000$CONTROL OPTIMIZE=1,SYNC32,POST85
00015 001100 IDENTIFICATION DIVISION.
00016 001200 PROGRAM-ID. PRIME.
00017 001300 DATA DIVISION.
00018 001400 WORKING-STORAGE SECTION.
00019 001500 01 PRIME-FLAG PIC X .
00020 001600 01 CALC-NO PIC 9(6) COMP VALUE ZERO.
00021 001700 01 DIV-NO PIC 9(6) COMP VALUE ZERO.
00022 001800 01 R PIC 9(9) COMP VALUE ZERO.
00023 001900 01 N PIC 9(9) COMP VALUE ZERO.
00024 002000 01 PRIME-COUNT PIC 9(5) COMP VALUE 2.
00025 002100 01 RUN-TIME PIC 9(9) COMP.
00026 002200
00027 002300 PROCEDURE DIVISION.
00028 002400 000-MAIN.
00029 002500 PERFORM 100-CHECK-NUM THRU 100-EXIT
00030 002600 VARYING CALC-NO FROM 3 BY 2
00031 002700 UNTIL CALC-NO > 10000.
00032 002800
00033 002900 DISPLAY 'PRIMES= ' PRIME-COUNT.
00034 003000 CALL INTRINSIC "PROCTIME" GIVING RUN-TIME.
00035 003100 DISPLAY 'TOTAL CPU MSECS=' RUN-TIME.
00036 003200 STOP RUN.
00037 003300
00038 003400 000-EXIT.
00039 003500
00040 003600 100-CHECK-NUM.
00041 003700 MOVE "Y" TO PRIME-FLAG
00042 003800 PERFORM 110-CALC-NUM THRU 110-EXIT
00043 003900 VARYING DIV-NO FROM 3 BY 1
00044 004000 UNTIL (DIV-NO > ((CALC-NO + 1) / 2)) OR
00045 004100 PRIME-FLAG = "N".
00046 004200 IF PRIME-FLAG = "Y" THEN
00047 004300 ADD +1 TO PRIME-COUNT.
00048 004400 100-EXIT. EXIT.
00049 004500
00050 004600 110-CALC-NUM.
00051 004700 COMPUTE R = FUNCTION REM(CALC-NO DIV-NO).
00052 004800 IF R = 0 THEN MOVE 'N' TO PRIME-FLAG.
00053 004900 110-EXIT. EXIT.
...
PRIMES= 01230
TOTAL CPU MSECS=000004654
* To join/leave the list, search archives, change list settings, *
* etc., please visit http://raven.utc.edu/archives/hp3000-l.html *
|
|
|