Simple cobol benchmark

This is a simple cobol benchmark for evaluate the compiler performance.

These results with Opencobol 1.1 binary package on a Intel(R) Core(TM)2 Duo CPU E7500 @2.93.Ghz 3,24 GB RAM XP Pro Service pack 3

Opencobol GCC 3.4.5 Gary’s version (It was built using Berkeley Database V5.0.26, GMP V5.0.1 and PDCurses V4.3.

Elapsed time 00 min:00 sec: 00 hundredths 27 for COMPUTE
Elapsed time 00 min:00 sec: 00 hundredths 83 for UNSTRING
Elapsed time 00 min:00 sec: 00 hundredths 39 for STRING
Elapsed time 00 min:00 sec: 00 hundredths 37 for WRITE
Elapsed time 00 min:00 sec: 00 hundredths 03 for READ
Elapsed time 00 min:00 sec: 00 hundredths 30 for DELETE
Elapsed time 00 min:00 sec: 02 hundredths 19 for COMPLETE TEST

Opencobol  Microsoft Visual Express C++ 2008 (built from me using the opencobol.org tarball with VISAM BMP and PDCurses kindly received from Human.

Elapsed time 00 min:00 sec: 00 hundredths 32 for COMPUTE
Elapsed time 00 min:00 sec: 00 hundredths 42 for UNSTRING
Elapsed time 00 min:00 sec: 00 hundredths 29 for STRING
Elapsed time 00 min:00 sec: 00 hundredths 18 for WRITE
Elapsed time 00 min:00 sec: 00 hundredths 06 for READ
Elapsed time 00 min:00 sec: 00 hundredths 28 for DELETE
Elapsed time 00 min:00 sec: 01 hundredths 55 for COMPLETE TEST

Feel free to use it with your cobol compiler and Opencobol then upload here the results !.


000000 IDENTIFICATION DIVISION.
000000 PROGRAM-ID. BENCH01.
000000*
000000* BENCHMARK for COBOL ...
000000*
000000* Copyright (C) 2010-2021 Federico Priolo TP ONE SRL
000000*                         federico.priolo@tp-one.it
000000*
000000* This program is free software; you can redistribute it and/or modify
000000* it under the terms of the GNU General Public License as published by
000000* the Free Software Foundation; either version 2, or (at your option)
000000* any later version.
000000*
000000* This program is distributed in the hope that it will be useful,
000000* but WITHOUT ANY WARRANTY; without even the implied warranty of
000000* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
000000* GNU General Public License for more details.
000000*
000000* You should have received a copy of the GNU General Public License
000000* along with this software; see the file COPYING.  If not, write to
000000* the Free Software Foundation, 51 Franklin Street, Fifth Floor
000000* Boston, MA 02110-1301 USA
000000*
000000*
000000*---------------------------------------------------------------------
000000 ENVIRONMENT DIVISION.
000000 CONFIGURATION SECTION.
000000 SOURCE-COMPUTER.        PC-IBM.
000000 OBJECT-COMPUTER.        PC-IBM.
000000 SPECIAL-NAMES.
000000
000000     DECIMAL-POINT IS COMMA.
000000
000000 INPUT-OUTPUT SECTION.
000000 FILE-CONTROL.
000000
000000          SELECT ARK-BENCH ASSIGN TO "bench01.dat"
000000           ORGANIZATION IS INDEXED
000000           ACCESS MODE  IS  DYNAMIC
000000           RECORD KEY   IS  CHIAVE-BENCH
000000           FILE STATUS  IS STATUS-BENCH.
000000
000000 DATA DIVISION.
000000
000000 FILE SECTION.
000000
000000 FD ARK-BENCH.
000000 01 REC-BENCH.
000000   02 CHIAVE-BENCH.
000000    05 KEY-BENCH              PIC 9(9).
000000   02 DATI-BENCH              PIC X(119).
000000
000000*
000000 WORKING-STORAGE SECTION.
000000 01 STATUS-BENCH              PIC XX   VALUE "00".
000000 01 XTIMES                    PIC 9(7) VALUE 1000000.
000000 01 XRECORD                   PIC 9(7) VALUE 10000.
000000 01 NUMTEST                   PIC 99   VALUE ZEROS.
000000 01 MAXTEST                   PIC 99   VALUE 6.
000000 01 ORARIO-TIME.
000000         02 ORA-TIME          PIC 99.
000000         02 MIN-TIME          PIC 99.
000000         02 SEC-TIME          PIC 99.
000000         02 CEN-TIME          PIC 99.
000000
000000*-----------------------------------------------------------------
000000 77 INIZIO                    PIC 9(9)V99 VALUE ZEROS.
000000 77 FINE                      PIC 9(9)V99 VALUE ZEROS.
000000 77 ORARIO                    PIC 9(9)V99 VALUE ZEROS.
000000 77 INIZIO1                   PIC 9(9)V99 VALUE ZEROS.
000000 77 FINE1                     PIC 9(9)V99 VALUE ZEROS.
000000 77 SECONDI                   PIC 9(9)    VALUE ZEROS.
000000 77 CENTESIMI                 PIC 9(9)V99 VALUE ZEROS.
000000 77 MINUTI                    PIC 9(9)    VALUE ZEROS.
000000 77 ORE                       PIC 9(9)    VALUE ZEROS.
000000 77 INSTRUCTION               PIC X(30)   VALUE SPACE.
000000
000000 01 BIG                       PIC S9(9)V9(7)
000000                              VALUE 987654321,8554469.
000000
000000 01 STRING1   PIC X(512) VALUE ALL "FEDERICO PRIOLO".
000000 01 STRING2                  PIC X(512) VALUE SPACES.
000000 01 STRING3                  PIC X(512) VALUE SPACES.
000000
000000*-----------------------------------------------------------------
000000 PROCEDURE DIVISION.
000000*-----------------------------------------------------------------
000000*MAIN SECTION.
000000
000000         PERFORM VARYING NUMTEST FROM 1 BY 1
000000           UNTIL NUMTEST > MAXTEST
000000
000000          PERFORM GET-TIME       THRU EX-GET-TIME
000000          MOVE ORARIO            TO INIZIO
000000
000000          IF INIZIO1 = ZEROS
000000          MOVE ORARIO            TO INIZIO1
000000          END-IF
000000
000000**** single test here
000000
000000          EVALUATE NUMTEST
000000            WHEN 4 MOVE "WRITE "  TO INSTRUCTION
000000            PERFORM WRITE-TEST    THRU EX-WRITE-TEST
000000            WHEN 5 MOVE "READ  "  TO INSTRUCTION
000000            PERFORM READ-TEST     THRU EX-READ-TEST
000000            WHEN 6 MOVE "DELETE"  TO INSTRUCTION
000000            PERFORM DELETE-TEST   THRU EX-DELETE-TEST
000000          END-EVALUATE
000000
000000**** multiply test here
000000
000000          PERFORM XTIMES         TIMES
000000
000000           EVALUATE NUMTEST
000000            WHEN 1 MOVE "COMPUTE" TO INSTRUCTION
000000            PERFORM COMPUTE-TEST  THRU EX-COMPUTE-TEST
000000            WHEN 2 MOVE "UNSTRING" TO INSTRUCTION
000000            PERFORM UNSTRING-TEST THRU EX-UNSTRING-TEST
000000            WHEN 3 MOVE "STRING"  TO INSTRUCTION
000000            PERFORM STRING-TEST   THRU EX-STRING-TEST
000000           END-EVALUATE
000000
000000
000000           END-PERFORM
000000
000000           PERFORM GET-TIME       THRU EX-GET-TIME
000000           MOVE    ORARIO         TO FINE1
000000           PERFORM DO-RESULT      THRU EX-DO-RESULT
000000
000000          END-PERFORM.
000000
000000          MOVE INIZIO1           TO INIZIO
000000          MOVE FINE1             TO ORARIO
000000          MOVE "COMPLETE TEST"   TO INSTRUCTION
000000
000000          PERFORM DO-RESULT      THRU EX-DO-RESULT
000000
000000
000000          STOP RUN.
000000
000000 COMPUTE-TEST.
000000
000000          COMPUTE BIG = BIG / 123456,78.
000000
000000 EX-COMPUTE-TEST.
000000           exit.
000000
000000 UNSTRING-TEST.
000000
000000          MOVE SPACES            TO STRING2.
000000          MOVE SPACES            TO STRING3.
000000
000000          UNSTRING STRING1 DELIMITED BY "RICO"
000000           INTO STRING2 STRING3.
000000
000000 EX-UNSTRING-TEST.
000000          EXIT.
000000
000000 WRITE-TEST.
000000
000000          OPEN OUTPUT ARK-BENCH.
000000
000000          PERFORM VARYING KEY-BENCH FROM 1 BY 1 UNTIL
000000           KEY-BENCH > XRECORD
000000
000000             ACCEPT ORARIO-TIME FROM TIME
000000
000000             MOVE ORARIO-TIME TO DATI-BENCH
000000
000000              WRITE REC-BENCH
000000               INVALID KEY CONTINUE
000000              END-WRITE
000000
000000          END-PERFORM.
000000
000000          CLOSE ARK-BENCH.
000000
000000
000000 EX-WRITE-TEST.
000000          EXIT.
000000
000000 READ-TEST.
000000
000000          OPEN INPUT ARK-BENCH.
000000
000000          PERFORM VARYING KEY-BENCH FROM 1 BY 1 UNTIL
000000           KEY-BENCH > XRECORD
000000
000000              READ ARK-BENCH KEY IS CHIAVE-BENCH
000000               INVALID KEY CONTINUE
000000              END-READ
000000
000000          END-PERFORM.
000000
000000          CLOSE ARK-BENCH.
000000
000000 EX-READ-TEST.
000000          EXIT.
000000
000000 DELETE-TEST.
000000
000000          OPEN I-O   ARK-BENCH.
000000
000000          PERFORM VARYING KEY-BENCH FROM 1 BY 1 UNTIL
000000           KEY-BENCH > XRECORD
000000
000000              DELETE ARK-BENCH
000000               INVALID KEY CONTINUE
000000              END-DELETE
000000
000000          END-PERFORM.
000000
000000          CLOSE ARK-BENCH.
000000
000000 EX-DELETE-TEST.
000000          EXIT.
000000
000000 STRING-TEST.
000000
000000          MOVE "FEDERICO"        TO STRING2.
000000          MOVE "PRIOLO"          TO STRING3.
000000
000000          STRING STRING2 DELIMITED BY "RICO"
000000           STRING3 DELIMITED BY SIZE INTO STRING1.
000000
000000 EX-STRING-TEST.
000000          EXIT.
000000
000000 GET-TIME.
000000
000000          ACCEPT ORARIO-TIME FROM TIME.
000000
000000          COMPUTE ORARIO ROUNDED  = ( ORA-TIME * 3600 )  +
000000                                    ( MIN-TIME * 60   )  +
000000                                      SEC-TIME           +
000000                                    ( CEN-TIME / 100  ).
000000
000000 EX-GET-TIME.
000000          EXIT.
000000
000000 SET-TIME.
000000
000000          MOVE ORARIO TO SECONDI.
000000          MOVE ZEROS  TO MINUTI ORE.
000000
000000          DIVIDE SECONDI BY 60
000000           GIVING MINUTI REMAINDER SECONDI.
000000
000000          IF MINUTI > 60
000000           DIVIDE MINUTI BY 60
000000            GIVING MINUTI REMAINDER ORE.
000000
000000          COMPUTE CENTESIMI = SECONDI - ORARIO
000000
000000          COMPUTE CENTESIMI = CENTESIMI * 100
000000
000000          MOVE CENTESIMI         TO CEN-TIME.
000000          MOVE ORE               TO ORA-TIME.
000000          MOVE MINUTI            TO MIN-TIME.
000000          MOVE SECONDI           TO SEC-TIME.
000000
000000 EX-SET-TIME.
000000          EXIT.
000000
000000 DO-RESULT.
000000
000000          MOVE ORARIO            TO FINE.
000000
000000          COMPUTE ORARIO =  FINE - INIZIO.
000000
000000          PERFORM SET-TIME       THRU EX-SET-TIME.
000000
000000          DISPLAY "Elapsed time " ORA-TIME " min:"  MIN-TIME
000000           " sec: " SEC-TIME " hundredths " CEN-TIME
000000            " for " INSTRUCTION.
000000
000000
000000 EX-DO-RESULT.
000000          EXIT.