Subject: | |
From: | |
Reply To: | |
Date: | Fri, 11 Jun 2004 10:16:25 -0500 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
At 10:40 AM 6/11/2004 -0400, Mike Hornsby wrote:
>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?
The use of 'comp' in defining the variables in the compilation. The reason
why is
without that, the default storage is 'character' or ASCII mode and the code
generated continuously converts the values from character to binary and
back when calculations are
performed using variables defined in this manner. This makes the code path
quite a
bit longer with all the conversion steps involved, resulting in longer
execution times.
>
>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 *
* To join/leave the list, search archives, change list settings, *
* etc., please visit http://raven.utc.edu/archives/hp3000-l.html *
|
|
|