schatte
22-11-14, 14:02
Hallo Leute,
aktuell beschäftige ich mich mit der MI Programmierung. Dabei habe ich gelernt, dass man MI-Funktionen direkt aus ILE Cobol aufrufen kann. Auf diversen Webseiten wird berichtet, dass die MI-Aufrufe schneller sein sollen, als vergleichbare C-Funktionen.
Das habe ich nun auf meiner 170er (2292, V5R2) getestet und bin erstaunt, dass das Programm mit dem MI-Aufruf am meisten CPU benötigt.
Getestet habe ich die C-Funktion pow(), in MI die Funktion _POWER und in Cobol der Operator ** innerhalb einer COMPUTE Anweisung.
Hier die ILE Cobol Test-Sourcen:
IDENTIFICATION DIVISION.
PROGRAM-ID. CLCPOW.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WERT-A COMP-2.
01 WERT-B COMP-2.
LINKAGE SECTION.
PROCEDURE DIVISION.
STEUER SECTION.
ANFANG.
MOVE 50 TO WERT-B.
PERFORM 999999 TIMES
MOVE 5000 TO WERT-A
COMPUTE WERT-A = WERT-A ** WERT-B
END-PERFORM.
ENDE.
GOBACK.
PROCESS NOMONOPRC.
IDENTIFICATION DIVISION.
PROGRAM-ID. CLCPOWC.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WERT-A COMP-2.
01 WERT-B COMP-2.
LINKAGE SECTION.
PROCEDURE DIVISION.
STEUER SECTION.
ANFANG.
MOVE 50 TO WERT-B.
PERFORM 999999 TIMES
MOVE 5000 TO WERT-A
CALL PROCEDURE "pow" USING BY VALUE WERT-A
WERT-B
RETURNING WERT-A
END-CALL
END-PERFORM.
ENDE.
GOBACK.
PROCESS NOMONOPRC.
IDENTIFICATION DIVISION.
PROGRAM-ID. CLCPOWMI.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. LINKAGE TYPE IS SYS FOR "_POWER".
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WERT-A COMP-2.
01 WERT-B COMP-2.
LINKAGE SECTION.
PROCEDURE DIVISION.
STEUER SECTION.
ANFANG.
MOVE 50 TO WERT-B.
PERFORM 999999 TIMES
MOVE 5000 TO WERT-A
CALL "_POWER" USING BY VALUE WERT-A
WERT-B
RETURNING WERT-A
END-CALL
END-PERFORM.
ENDE.
GOBACK.
Hier die Auswertung eines Aufrufes als Batchjob. Verbrauchte CPU und Laufzeit per Accounting Journal QACGJRN ausgewertet:
<tbody>
Programm
CPU Zeit in Sek.
Dauer in Sek.
CLCPOW
2,350
2,582
CLCPOWC
4,145
4,335
CLCPOWMI
8,044
9,872
</tbody>
Kann mir jemand erklären, weshalb der MI Aufruf so langsam ist?
Viele Grüße
Matthias
aktuell beschäftige ich mich mit der MI Programmierung. Dabei habe ich gelernt, dass man MI-Funktionen direkt aus ILE Cobol aufrufen kann. Auf diversen Webseiten wird berichtet, dass die MI-Aufrufe schneller sein sollen, als vergleichbare C-Funktionen.
Das habe ich nun auf meiner 170er (2292, V5R2) getestet und bin erstaunt, dass das Programm mit dem MI-Aufruf am meisten CPU benötigt.
Getestet habe ich die C-Funktion pow(), in MI die Funktion _POWER und in Cobol der Operator ** innerhalb einer COMPUTE Anweisung.
Hier die ILE Cobol Test-Sourcen:
IDENTIFICATION DIVISION.
PROGRAM-ID. CLCPOW.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WERT-A COMP-2.
01 WERT-B COMP-2.
LINKAGE SECTION.
PROCEDURE DIVISION.
STEUER SECTION.
ANFANG.
MOVE 50 TO WERT-B.
PERFORM 999999 TIMES
MOVE 5000 TO WERT-A
COMPUTE WERT-A = WERT-A ** WERT-B
END-PERFORM.
ENDE.
GOBACK.
PROCESS NOMONOPRC.
IDENTIFICATION DIVISION.
PROGRAM-ID. CLCPOWC.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WERT-A COMP-2.
01 WERT-B COMP-2.
LINKAGE SECTION.
PROCEDURE DIVISION.
STEUER SECTION.
ANFANG.
MOVE 50 TO WERT-B.
PERFORM 999999 TIMES
MOVE 5000 TO WERT-A
CALL PROCEDURE "pow" USING BY VALUE WERT-A
WERT-B
RETURNING WERT-A
END-CALL
END-PERFORM.
ENDE.
GOBACK.
PROCESS NOMONOPRC.
IDENTIFICATION DIVISION.
PROGRAM-ID. CLCPOWMI.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. LINKAGE TYPE IS SYS FOR "_POWER".
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WERT-A COMP-2.
01 WERT-B COMP-2.
LINKAGE SECTION.
PROCEDURE DIVISION.
STEUER SECTION.
ANFANG.
MOVE 50 TO WERT-B.
PERFORM 999999 TIMES
MOVE 5000 TO WERT-A
CALL "_POWER" USING BY VALUE WERT-A
WERT-B
RETURNING WERT-A
END-CALL
END-PERFORM.
ENDE.
GOBACK.
Hier die Auswertung eines Aufrufes als Batchjob. Verbrauchte CPU und Laufzeit per Accounting Journal QACGJRN ausgewertet:
<tbody>
Programm
CPU Zeit in Sek.
Dauer in Sek.
CLCPOW
2,350
2,582
CLCPOWC
4,145
4,335
CLCPOWMI
8,044
9,872
</tbody>
Kann mir jemand erklären, weshalb der MI Aufruf so langsam ist?
Viele Grüße
Matthias