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.
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.
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 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
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:
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
undMULTIPLY
, 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
undDECIDE
, jedoch nur wenn folgende Bedingungen zutreffen:
Mindestens einer der verwendeten Operanden ist im Format N.
Die beiden Operanden haben verschiedene Formate.
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.
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.
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).
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.
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
|
|
MOVE
|
Die ARCH -Option muss auf einen Wert
größer gleich 5 gesetzt sein.
|
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 |
FORCE |
Generiert optimierten Code wie bei
ON , aber ohne abzuprüfen, ob COLLATE=OFF gesetzt ist.
Der mit |
OFF |
Es wird kein optimierter Code
generiert.
|