Natural Optimizer Compiler Version 8.3/8.4 - Aktualisierte Dokumentation

Anmerkung:
Dieses Kapitel enthält Informationen zu Änderungen, die nur die Natural Optimizer Compiler Versionen 8.3 und 8.4 betreffen.

Änderungen an der Installation siehe Installing the Natural Optimizer Compiler on z/OS, z/VSE und BS2000 in the Natural Installation documentation.


Optimizer-Optionen unter Natural Optimizer Compiler Version 8.3/8.4

Anmerkung:
Dies ist ein Auszug aus dem Kapitel Optimizer-Optionen. Es werden nur die Änderungen beschrieben, die für Natural Optimizer Compiler Version 8.3 und 8.4 spezifisch sind.

ARCH-Option

Die ARCH-Option dient zur Angabe des IBM Hardware Architecture Level, der zum Generieren von Code für ausführbare Natural-Objekte benutzt werden soll.

Wenn Sie einen ARCH-Wert angeben, generiert der Natural Optimizer Compiler neuere und schnellere Maschineninstruktionen, die die Leistung des generierten Code verbessern können. Der angegebene Wert darf nicht höher sein als der Architecture Level Ihrer aktuellen Maschine. Ein mit einem ARCH-Level katalogisiertes ausführbares Natural-Objekt kann nur auf einer Maschine mit gleichem oder einem höheren Architecture Level laufen. Deshalb empfehlen wir, die ARCH-Option nicht zu verwenden, wenn die katalogisierten Objekte auf einer beliebigen Maschine, insbesondere auf einer Maschine mit niedrigerem Architecture Level (zum Beispiel BS2000), ausgeführt werden sollen.

Ausführliche Informationen zu IBM Hardware Architecture Level siehe IBM-Literatur (z/Architecture, Principles of Operation).

Die folgenden Architecture Levels werden von der ARCH-Option des Natural Optimizer Compiler unterstützt:

IBM Architecture Level Erforderliche IBM Hardware Facility
0 Gibt an, dass kein Architecture Level benutzt wird. Dies ist die Standardeinstellung für alle von Natural unterstützen Großrechnerplattformen.
1 bis 4 Diese Werte werden nicht ausgewertet und wie ARCH=0 behandelt.
5 bis 6
  • z800 oder z900
    Extended-Translation Facility 2

  • z890 oder z990
    HFP Multiply-and-Add/Subtract Facility

7
  • z9 bis z109
    Extended-Immediate Facility

8
  • z10
    General-Instructions-Extension Facility

  • z10
    Execute-Extensions Facility

9
  • zEnterprise 196
    Load/Store-on Condition Facility
    Floating-Point-Extension-Facility
    Distinct-Operands Facility
    High-Word-Facility

10
  • zEnterprise EC12 (zEC12)
    Decimal Floating-Point Facility
    Decimal Floating-Point Zoned-Conversion Facility

11
  • zEnterprise z13
    Decimal Floating-Point Packed-Conversion Facility

Anmerkung:
Bei einem ARCH-Wert größer als Null generiert der Natural Optimizer Compiler Instruktionen bis hin zu dem in obiger Tabelle beschriebenen Facility Level. Ein ARCH-Wert größer als der Architecture Level der zugrunde liegenden Maschine wird bei der Kompilierung abgelehnt. Der Versuch, ein Programm, das mit einem ARCH-Level kompiliert wurde, auf einer Maschine mit einem niedrigeren Architecture Level zu starten, führt zu einem Laufzeitfehler NAT1394. Informationen zu der aktuellen Maschine können Sie sich mit dem Systemkommando TECH anzeigen lassen.

Folgende Themen werden behandelt:

Unterstützung für Architecture Level 10

Bei gesetztem ARCH=10 generiert der Natural Optimizer Compiler Instruktionen, die von der Decimal-Floating-Point (DFP) Zoned-Conversion Facility für die in den folgenden Abschnitten beschriebenen numerischen Operationen zur Verfügung gestellt werden. Dies kann die Ausführungsgeschwindigkeit für Statements, die diese Operationen verwenden, erheblich verbessern.

Operationen optimiert durch ARCH=10

Die folgenden arithmetischen Operationen auf Variablen der Natural-Datenformate I (ganzzahlig), N (numerisch ungepackt) und P (gepackt numerisch) profitieren von ARCH=10.

  • Wertzuweisungen:

    P:=I

    P:=N

    N:=I

    N:=N

    N:=P nur wenn die Anzahl gepackter Ziffern kleiner gleich 15 ist.

    I:=N

  • Arithmetische Operationen wie zum Beispiel mit den Statements ADD, SUBTRACT, DIVIDE und MULTIPLY, jedoch nur wenn folgende Bedingungen zutreffen:

    • Mindestens einer der verwendeten Operanden ist im Format N oder I.

    • Das Ergebnis der Operation überschreitet nicht 34 (Ganzzahl + Genauigkeit) Ziffern.

  • Vergleiche wie zum Beispiel mit den Statements IF und DECIDE, jedoch nur wenn folgende Bedingungen zutreffen:

    • Mindestens einer der verwendeten Operanden ist im Format N.

    • Die beiden Operanden haben verschiedene Formate.

Unterstützung für Architecture Level 11

Bei gesetztem ARCH=11 verwendet der Natural Optimizer Compiler Maschineninstruktionen, die mit der DFP Packed-Conversion Facility eingeführt wurden. Zusätzlich zu den mit ARCH=10 optimierten numerischen Operationen optimiert ARCH=11 auch Operationen, die nur gepackte Variablen verwenden.

Unterstützung für Architecture Level 12

Gilt nur bei Natural Optimizer Compiler Version 8.4 und höher.

Bei gesetztem ARCH=12 generiert der Natural Optimizer Compiler Maschineninstruktionen, die mit der Vector Packed-Decimal Facility (VPD) eingeführt wurden. Dies kann die Ausführungsgeschwindigkeit bei Zuweisungen, Vergleichen und Berechnungen verbessern, wenn mindestens ein gepackter Operand verwendet wird.

VPD-Maschineninstruktionen werden bei den gleichen Natural-Operationen generiert, die bei Architecture Level 10 und Architecture Level 11 benutzt werden, sie werden jedoch nur bei arithmetischen Operationen verwendet, deren Ergebnisse 31 Stellen (Ganzzahlstellen + Dezimalstellen) nicht übersteigen.

Kompatibilität für Architecture Level 10 und 11

Wenn ARCH=10 benutzt wird, generiert der Natural Optimizer Compiler Maschineninstruktionen, die mit der Decimal-Floating-Point (DFP) Zoned-Conversion Facility oder der DFP Packed-Conversion Facility eingeführt wurden. Diese Instruktionen bewirken eine schnellere Ausführung als die Standard-Maschinencode-Instruktionen für arithmetische Operationen, sie akzeptieren jedoch keine Daten, die in Bezug auf den zonierten numerischen Datentyp (N) unzulässig sind.

Dies kann zu Laufzeitfehlern führen, wenn ein N-Feld innerhalb eines REDEFINE-Abschnitts einer alphanumerischen oder binären Variablen definiert ist und das N-Feld nicht zulässig initialisiert wird, bevor es in einer arithmetischen Operation benutzt wird.

Ein numerisches zoniertes Feld enthält eine Ziffer in einem Byte. Normalerweise enthält jedes Byte x’F’ im linken Halbbyte (Zone Bits) und den Ziffernwert (0-9) im rechten Halbbyte (Numeric Bits). Dies gilt für alle Bytes, außer dem letzten, das (A-F) im linken Halbbyte enthält (Sign Bits).

Ein Vorzeichen-Halbbyte (C,A,F,E) stellt einen positiven Wert dar, während (B,D) für einen negativen Wert steht. Ein anderer Wert als (0-9) innerhalb des numerischen Halbbytes (N) und ein anderer Wert als (A-F) innerhalb des Vorzeichen-Halbbytes (S) wird als ungültig angesehen. Die Daten innerhalb der Zonen-Halbbytes (Z) werden von arithmetischen Konvertierungsanweisungen nicht berücksichtigt und können einen beliebigen Wert (0-F) haben.

Beispiel für eine Variable, die als (N6) definiert ist:

ZN ZN ZN ZN ZN SN Vorzeichen ist Wert ist Funktioniert bei ARCH<=9 Funktioniert bei ARCH>=10
F1 F2 F3 F4 F5 F6 F=positiv 123456, ok ja ja
F3 F2 F6 F3 F3 D2 D=negativ 323662, ok ja ja
40 40 40 40 40 40 4=ungültig 000000, ok ja NAT7024
00 00 00 00 00 00 0=ungültig 000000, ok ja NAT7024
12 13 14 15 16 17 1=ungültig 234567, ok ja NAT7024
51 6B 72 7A 12 F1 F=positiv 1B2A21, ungültig NAT0954 NAT7024

Wenn ARCH=9 (oder niedriger) benutzt wird, werden ungültige Vorzeichen-Halbbytes (0-9) durch den generierten Code automatisch in ein positives Vorzeichen (F) korrigiert. Dadurch werden N-Felder mit leerem Inhalt zu gültigen Daten mit dem Wert Null. Das Gleiche gilt für Hexa-Null-Daten.

Wenn ARCH=10 oder ARCH=11 benutzt wird, bleiben ungültige Vorzeichen-Halbbytes (0-9) unverändert und führen zu einer Programmprüfung (Data Exception), wenn auf sie von einer DFP-Instruktion zugegriffen wird. Wenn ein solcher Abbruchfehler auftritt, gibt Natural anstelle des Fehlers NAT0954 den Fehler NAT7024 aus, um eindeutig anzuzeigen, dass der Fehler durch eine N-Variable verursacht wird, die keine gültigen numerischen Daten enthält.

Wenn ein numerisches Halbbyte (N) nicht den Wert (0-9) enthält, erfolgt unabhängig vom benutzten Architecture Level eine Programmprüfung (Data Exception).

Schlussfolgerung:

Benutzen Sie ARCH=10 oder ARCH=11 nicht mit einem anderen Vorzeichenwert als (A-F), um ein Programm zu katalogisieren, das mit unsauberen numerischen Daten arbeitet.

Beispiel:

OPTIONS MCG=(PGEN,ARCH=9)                                          
DEFINE DATA LOCAL                                                  
1 #A (A6)                                                          
1 REDEFINE #A                                                      
  2 #N (N6)                                                        
END-DEFINE                                     /*  ARCH=9  ARCH=10 
#A := H'F1F2F3F4F5F6'   ADD 1 TO #N  WRITE #N  /*  ok       ok     
#A := H'F3F2F6F3F3D2'   ADD 1 TO #N  WRITE #N  /*  ok       ok     
#A := H'404040404040'   ADD 1 TO #N  WRITE #N  /*  ok       NAT7024
#A := H'000000000000'   ADD 1 TO #N  WRITE #N  /*  ok       NAT7024
#A := H'121314151617'   ADD 1 TO #N  WRITE #N  /*  ok       NAT7024
#A := H'516B727A12F1'   ADD 1 TO #N  WRITE #N  /*  NAT0954  NAT7024
END

Darüber hinaus, wenn ARCH=10 oder ARCH=11 benutzt wird, kann Natural einen Fehler NAT1305 (abgeschnittener numerischer Wert) anstelle eines Fehlers NAT1301 (Zwischenergebnis zu groß) aus folgendem Grund ausgeben: Zur Berechnung von Zwischenergebnissen wird das numerische DFP-Format benutzt und ein Überlauf wird erst am Ende der arithmetischen Operation festgestellt, wenn das DFP in das Format des Ergebnisses umgewandelt wird.

Voraussetzungen für die Code-Generierung mit Unicode-Operanden

Der Natural Optimizer Compiler generiert optimierten Code für Natural-Statements mit Unicode-Zeichenketten, wenn die folgenden Erfordernisse erfüllt sind:

Statement Erforderlich
Alle Statements Alle im Statement benutzten Operanden müssen vom Typ Unicode sein.
EXAMINE Die ARCH-Option muss auf einen Wert größer gleich 6 gesetzt sein.
IF

DECIDE FOR

DECIDE ON

  • Alle Unicode-Zeichenketten müssen normalisiert sein.

  • Die ARCH-Option muss auf einen Wert größer gleich 5 gesetzt sein.

  • Die UNICC-Option muss auf ON oder FORCE gesetzt sein.

  • Die COLLATE-Option des Profilparameters CFICU muss auf OFF gesetzt sein (siehe Parameter-Referenz-Dokumentation).

MOVE

MOVE SUBSTRING

RESET

Die ARCH-Option muss auf einen Wert größer gleich 5 gesetzt sein.

UNICC-Option

Die UNICC-Option steuert die Generierung von optimiertem Code für IF-, DECIDE FOR- und DECIDE ON-Statements, die Unicode-Operanden enthalten.

Gültige Werte für UNICC:

Wert Erklärung
ON Generiert optimierten Code und prüft, ob COLLATE=OFF gesetzt ist (siehe Profilparameter CFICU in der Parameter-Referenz-Dokumentation).

Falls COLLATE=ON gesetzt ist, schlägt die Ausführung des optimierten Code fehl und der Natural-Systemfehler NAT7023 tritt auf.

FORCE Generiert optimierten Code wie bei ON, aber ohne abzuprüfen, ob COLLATE=OFF gesetzt ist.

Der mit FORCE optimierte Code hat eine bessere Leistung als der mit ON optimierte, kann jedoch falsche Ergebnisse verursachen, wenn COLLATE=ON gesetzt ist.

OFF Es wird kein optimierter Code generiert.

OFF ist die Standardeinstellung.