Beispiele für die Optimizer-Verwendung

#### Search Results

Search

# Beispiele für die Optimizer-Verwendung

Die folgenden Beispiele zeigen, wann der Natural Optimizer Compiler am besten eingesetzt werden kann, und geben einen Hinweis auf seine Leistungsfähigkeit:

Folgende Themen werden behandelt:

- Beispiel 1 - Keine Verbesserung

- Beispiel 2 - Beträchtliche Verbesserung

- Beispiele 3 und 4 - CPU-Nutzung

## Beispiel 1 - Keine Verbesserung

Es wäre nichts gewonnen, wenn Sie den Natural Optimizer Compiler für das folgende Programm benutzen, da es ein Statement, das einen Datenbankzugriff durchführt, und ein Ein-/Ausgabe-Statement enthält (siehe Statements die nicht kompiliert werden):

    DEFINE DATA LOCAL
      1 EMPLOYEES VIEW OF EMPLOYEES
        2 JOB-TITLE
        2 BIRTH
        2 NAME
      END-DEFINE
      FIND EMPLOYEES WITH JOB-TITLE = 'PROGRAMMER' OR = 'ANALYST'
                                 OR = 'PROGRAMMER/ANALYST'
                                 OR = 'SYSTEM ANALYST'
        DISPLAY JOB-TITLE BIRTH NAME
      END-FIND
      END

## Beispiel 2 - Beträchtliche Verbesserung

Wird das folgende Programm mit dem Natural Optimizer Compiler kompiliert, dann sieht man eine Leistungsverbesserung von ca. 30 % (das bedeutet eine Verringerung der CPU-Belastung um 30 %). Das gezeigte Beispiel-Programm führt eine statistische Analyse des Alters von IT-Mitarbeitern durch. Optimierte Statements sind in Fettschrift angegeben.

In diesem Beispiel erhöht der Natural Optimizer Compiler die Größe des Objekts um 20,5 % aufgrund von 952 Bytes an zusätzlichem Maschinencode.

Profilparameter-Einstellung | Buffer Pool-Größe | Größe des von NOC generierten Maschinencodes
--- | --- | ---
`OPT=NODBG` | 5768 | 952
`OPT=OFF` | 4784 | 0

      DEFINE DATA
      LOCAL
      1 EMPLOY VIEW OF EMPLOYEES
        2 JOB-TITLE     (A25)
        2 BIRTH         (D)
      1 I               (I1)  INIT <1>
      1 CDATE           (D)
      1 NUMB            (N4)
      1 SUMM            (P7.2)
      1 SQUARE          (F8)
      1 DEVI            (F8)
      1 DEVIATION       (N3.4)
      1 MEAN            (P2.3)
      1 AGEDIS          (F8/1:70)
      1 AGEMAX          (F8)
      1 AGEH            (P3)
      1 AGE             (P3)
      1 AGEDAYS         (P15)
      1 LINE            (A71/1:20)
      1 REDEFINE LINE
        2 POINTS        (A1/1:20,0:70)
      END-DEFINE
      *
      MOVE *DATX TO CDATE
      *
      FIND EMPLOY WITH JOB-TITLE = 'PROGRAMMER' OR = 'ANALYST'
        OR = 'PROGRAMMER/ANALYST' OR = 'SYSTEM ANALYST'
     AGEDAYS:= CDATE - BIRTH
        AGE:=AGEDAYS / 365
        ADD 1 TO AGEDIS(AGE)                  /* DISTRIBUTION
        ADD 1 TO NUMB
        ADD AGE TO SUMM
        COMPUTE SQUARE = SQUARE + AGE * AGE
      END-FIND
      *
      *****************************************************************
      * COMPUTE ESTIMATES
      *****************************************************************
      *
      COMPUTE DEVI = NUMB * SQUARE / (SUMM * SUMM) - 1
      COMPUTE DEVIATION = SQRT(DEVI)
      COMPUTE MEAN = SUMM / NUMB
      *
      *****************************************************************
      * GRAPHIC DISPLAY
      *****************************************************************
      *
      FOR I 1 70
        IF AGEDIS(I) > AGEMAX MOVE AGEDIS(I) TO AGEMAX
        END-IF
      END-FOR
      FOR I 1 70
        COMPUTE AGEDIS(I) = AGEDIS(I) * 20 / AGEMAX
      END-FOR
      FOR I 1 70
        COMPUTE AGEH = 21 - AGEDIS(I)
        IF AGEH < 21 MOVE '*' TO POINTS(AGEH:20,I)
        END-IF
      END-FOR
      *
      *****************************************************************
      * COMPLETE GRAPHIC DISPLAY
      *****************************************************************
      *
      MOVE '!' TO POINTS(*,0)
      WRITE TITLE LEFT
       AGEMAX(EM=999)  20X  'DISTRIBUTION OF IT-EMPLOYEES BY AGE'
      WRITE NOTITLE NOHDR
      LINE(*) /
      '0--------10--------20--------30--------40--------50--------60--------'
      /  'MEAN='

## Beispiele 3 und 4 - CPU-Nutzung

Das folgende Programm veranschaulicht den Unterschied in der CPU-Auslastung in Abhängigkeit von den Optionen, die Sie beim Kompilieren des Programms auswählen. Die folgende Tabelle listet die CPU-Auslastung in Sekunden und Prozent auf. Die in der Tabelle angegebenen Zahlen wurden während eines Testlaufs in einer IBM z/OS-Umgebung ermittelt. Sie können nur als allgemeine Orientierung dienen, da die absoluten Werte je nach eingesetzter Hardware variieren.

       DEFINE DATA LOCAL
       1 #I1         (I4) INIT <1>
       1 #I2         (I4) INIT <2>
       1 #J1         (I4) INIT <3>
       1 #J2         (I4) INIT <4>
       1 #F          (I4)
       1 #ARR1       (N7/10,5)
       1 #ARR2       (N5/10,5)
       END-DEFINE
       *
       FOR #F = 1 TO 1000000
         MOVE #ARR1(#I1,#I2) TO #ARR2(#J1,#J2)
       END-FOR
       *
       END

Option | CPU Sekunden | CPU Prozentsatz
--- | --- | ---
`OFF` | 8.78 | 100
`ON` | 0.63 | 7.18
`INDX` | 0.85 | 9.68
`OVFLW` | 1.71 | 19.48
`INDX,OVFLW` | 2.00 | 22.78
`INDX,OVFLW,NODBG` | 1.61 | 18.34
`INDX,OVFLW,NODBG,NOSGNTR` | 1.61 | 18.34
`NODBG` | 0.44 | 5.01
`NOSGNTR` | 0.63 | 7.18
`NODBG,NOSGNTR` | 0.44 | 5.01

       DEFINE DATA LOCAL
       1 #I1         (P7) INIT <1>
       1 #I2         (P7) INIT <2>
       1 #J1         (N7) INIT <3>
       1 #J2         (N7) INIT <4>
       1 #K1         (I4) INIT <5>
       1 #K2         (I4) INIT <6>
       1 #F          (I4)
       1 #FIELD1     (P5)
       1 #FIELD2     (N5)
       1 #FIELD3     (I2)
       END-DEFINE
       *
       FOR #F = 1 TO 500000
       *
         #FIELD1:= #I1 - #I2 + (13 * 10 / 5)
         #FIELD2:= #J1 - #J2 + (13 * 10 / 5)
         #FIELD3:= #K1 - #K2 + (13 * 10 / 5)
       *
       END-FOR
       *
       END

Option | CPU Sekunden | CPU Prozentsatz
--- | --- | ---
`OFF` | 18.61 | 100.00
`ON` | 4.95 | 26.60
`INDX` | 4.95 | 26.60
`OVFLW` | 5.38 | 28.91
`INDX,OVFLW` | 5.38 | 28.91
`INDX,OVFLW,NODBG` | 5.26 | 28.26
`INDX,OVFLW,NODBG,NOSGNTR` | 5.09 | 27.35
`NODBG` | 4.79 | 25.74
`NOSGNTR` | 4.81 | 25.85
`NODBG,NOSGNTR` | 4.63 | 24.88
`NODBG,NOSGNTR,ZD=OFF` | 4.51 | 24.23
`NODBG,NOSGNTR,ZD=OFF,SIGNCHCK=OFF` | 4.41 | 23.70

### On this page

- Beispiel 1 - Keine Verbesserung
- Beispiel 2 - Beträchtliche Verbesserung
- Beispiele 3 und 4 - CPU-Nutzung