バージョン 4.2.5
 —  Natural Optimizer Compiler  —

Optimizer オプション

Natural Optimizer がアクティブ化されると、このセクションで説明するオプションを設定して、チェックを指定できます。

最適化されるステートメントを指定するためにオプションを使用することはできません。

このドキュメントでは、次のトピックについて説明します。


オプションのリスト

以下の表は、NOC オプションのリストおよび説明です。 デフォルト値には下線が引かれています。これは、オプションが存在しない場合に想定される値です。

1 つの NOC オプションはカッコまたは一重引用符で囲まれた文字列で構成され(Natural OPTIONS ステートメント内を除く)、複数のオプションはコンマで区切られます。 一部のオプションには値がありますが、一部のオプションはオプション文字列内に存在するだけで環境を変更できます。

以下のルールが適用されます。

オプション 説明
ABEND コンパイル中に Natural Optimizer Compiler が ABEND オプションを検出したときに、Natural Optimizer Compiler によって Natural を直ちに異常終了させるコードが生成されるようにします。 このオプションは単独で使用する必要があり、そうでない場合は無視されます。 他のパラメータはこのオプションによって変更またはリセットされません。 このオプションはデバッグに役立ちます。
CACHE[={ON| OFF |Y|N}] 変数のキャッシュをオンまたはオフに切り替えます。 「パフォーマンスの考慮事項」セクションの「変数のキャッシュ」も参照してください。
CPU= /370 対象となるアーキテクチャを指定します。 /370 オプションは IBM および Siemens に有効です。
DIGTCHCK[={ON| OFF |Y|N}] 同じ型および精度の別の変数に移動するときに、パック型およびアンパック型の数値フィールド(フォーマット P および N)の桁をチェックするかどうかを指定します。 例えば、DIGTCHCKON で、アンパック型の数値変数(フォーマット N)に X'FA' などの無効な桁が含まれている場合、同じ精度の別のアンパック型の数値変数に移動すると S0C7(または NAT0954)エラーが発生します。 DIGTCHCKOFF の場合は、エラーは発生しませんが、生成されるコードは高速になります。
ERRDUMP[={ON| OFF |Y|N}] コンパイルフェーズでエラー条件が検出された場合に NOC がアベンドするかどうかを指定します。 これは、Natural Optimizer Compiler 自体のデバッグに役立ちます。
INDEX[={ON| OFF |Y|N}] 最適化されたコードで配列の添字について範囲外の値がチェックされるかどうかを指定します。 下記の「警告」も参照してください。
INDX[={ON| OFF |Y|N}] 最適化されたコードで配列の添字について範囲外の値がチェックされるかどうかを指定します。

さらに、RANGE が設定されます。 したがって、このオプションは INDEX=ON,RANGE=ON と同じです。

下記の「警告」も参照してください。
IO[={ON| OFF|Y|N}] 予約済み(将来的に使用される予定)です。
LOOPS[={ON| OFF |Y|N}]

互換性保持の目的でのみ提供されています。 有効ではありません。

MIX[={ON| OFF |Y|N}] 互換性保持の目的でのみ提供されています。 有効ではありません。
NODBG[={ON| OFF|Y|N}]

NODBG=OFF/N(デフォルト)を設定していない場合、最適化されたコードをデバッグするために Natural デバッガを使用できません。これは、最適化されたステートメントの制御を Natural デバッガが受け取らないためです。 追加コードは生成されず、プログラムの実行は遅くならず、CPU 時間がさらに使用されることもありません。

NODBG=ON/Y を設定していない場合、追加コードが生成され、TEST モードがオンに設定されていて Natural デバッガの機能が制限されないかどうかがチェックされます。

パフォーマンスの考慮事項」セクションの「NODBG」も参照してください。

NOSGNTR[={ON| OFF |Y|N}] パック型数値のみに適用されます。

NOSGNTR=OFF(デフォルト)の場合、算術演算の結果または割り当ての対象である正のパック型数値の記号は、COMPOPT パラメータ PSIGNF に従って設定されます。 NOSGNTR=ON の場合、生成された機械命令の実行結果の記号はそのまま変更されません。 「他の Natural パラメータの影響」セクションも参照してください。

ON 最適化をオンに切り替えます。 追加のオプションを指定しない場合、各オプションに定義されているデフォルト値が有効です。 下記の「警告」で示すように、このために意図しない結果が発生する場合があります。特に、オプション INDEX、INDX、OVFLW、および RANGE に該当します。
OFF 最適化をオフに切り替えます。
OPTLEV={ 2|3} 最適化レベルを指定します。プログラムを通過するパスの数とほぼ同じです。

OPTLEV=3PGEN が指定されている場合に役立ちます。一部のブランチターゲットは最初のパスでは決定できず、最後のパスで PGEN 出力が行われるためです。 そのため、一部の値は誤って表示される場合があります。

OVFLW[={ON| OFF |Y|N}] 算術演算または割り当てでのオーバーフローのチェックが、最適化されたコードに含まれるかどうかを指定します。

下記の「警告」も参照してください。

PGEN[={ON| OFF |Y|N}] 最適化されたコードの逆アセンブリが出力されるかどうかを指定します。 このオプションによって、他のすべてのトレースオプションも有効になります。

下記の「PGEN オプション」も参照してください。

RANGE[={ON| OFF |Y|N}] 配列の操作で範囲チェックが実行されるかどうかを指定します。 これにより、配列の範囲は、すべてのオペランドの対応する次元の要素数と同じになります。

下記の「警告」も参照してください。

SIGNCHCK[={ ON|OFF|Y|N}] パック型またはアンパック型数値乗算器での乗算の結果で、負のゼロがチェックされるかどうかを指定します。 ゼロに負の数を乗算した場合、MP 機械命令によって負のゼロの結果が生成されます。 SIGNCHCK がオンの場合、この負のゼロは正のゼロに変換されます。 負のゼロのチェックは、パック型またはアンパック型数値乗算器でのすべての乗算に対して実行されます。
TRENTRY Software AG での内部使用のためのみ。 このパラメータの設定は変更しないでください。
ZD[={ ON|OFF|Y|N}] 除数のゼロがチェックされるかどうかを指定します。 このオプションを指定した場合、コードが挿入され、プログラムは Natural の ZD プロファイルパラメータに従って動作します。つまり、Natural エラー NAT1302 が発行されるか、結果はゼロです。 このオプションを指定しない場合、除数がゼロの場合は Natural エラー NAT0954 が発生します。

Natural の『パラメータリファレンス』ドキュメントの「ZD - ゼロ割り算のチェック」も参照してください。

注意:
INDEXINDXOVFLW、および RANGE について:
OFF および N の適用に注意してください。 オーバーフローのチェックまたは配列の添字のチェックを抑制すると、不正なプログラムによって、予期しない結果、ストレージ破損、異常終了が発生する場合があります。
下記の「INDEX および OVFLW の例」も参照してください。INDEX および OVFLW の影響について説明しています。

以下に参考情報を示します。

INDEX および OVFLW の例

DEFINE DATA LOCAL
...
1 P1 (P1/9)
...
1 P3 (P3/9)
...
1 I (I4)
1 J (I4)
1 K (I4)
1 L (I4) 
END-DEFINE
...
P1(I:J) := P3(K:L)
...
END

例の説明

INDX=ON または INDEX=ON が設定されると、IJK、および LP1 および P3 それぞれに対して定義された範囲内にあることを確認するコードが生成されます。

INDX=ON または RANGE=ON が設定されると、I:J および K:L が同じ長さの範囲を示すことを確認するコードが生成されます。

OVFLW=ON が設定されると、P3 の値が対応する P1 変数に適合することを確認するコードが生成されます。

例:ここでは、値 100 でオーバーフローが発生します。

エラー状況の例:

P3 のオカレンスの 1 つに値 100 が含まれており、OVFLW=OFF が設定されている場合、対応する P1 のオカレンスに割り当てられる値はゼロになります。 添字変数 I がゼロまたは 9 よりも大きく、INDX=OFF が設定されている場合、配列 P1 に属していないストレージエリアが破損します。 これらのオプション(OVFLW および INDX)が ON に設定されている場合は、標準の Natural ランタイムでの場合と同じように Natural エラーが発生します。

上記で指定されている NOC オプションでは、追加コードが生成されます。 ただし、これはデバッグが困難なエラーを防ぐなど、チェックによってもたらされる利点によって十分に相殺されます。 検出されないエラーによって予期しない結果が発生することがあります。

最適なコード生成

コード生成が最小になり、最適なパフォーマンスが得られるように、以下の設定を使用します。

OPT='NODBG,NOSGNTR,SIGNCHCK=OFF,ZD=OFF'

ただし、この設定は、完全にデバッグされたプログラミングオブジェクトに対してのみ使用してください。「警告」も参照してください。

Top of page

PGEN オプション

PGEN オプションを指定すると、Natural Optimizer Compiler によって、生成されたコードおよび内部 Natural 構造が出力されます。 したがって、バグ修正、パフォーマンスの確認、サポートの問題などのために、コードおよび構造を調べることができます。

PGEN オプションで生成された結果を解釈するには、IBM の /370 アセンブラを理解している必要があります。

このオプションは、担当地域の Software AG のサポートを受けて使用することをお勧めします。

以下に参考情報を示します。

PGEN の設定

PGEN 機能を使用するには、Optimizer Compiler をアクティブ化するときに PGEN オプションを設定します。

バッファはメモリ内に保持されるため、ユーザースレッドがトレース情報を保持するのに十分な大きさにならない可能性があります。 この場合は、例えば、プログラムのトレースが必要な部分に対してのみ PGEN をオンに設定してみます。

OPTIONS MCG=(PGEN=ON,TRGPT=ON)
または
OPTIONS MCG=+PGEN,TRGPT
トレースをオンにします。GPT エントリのトレースが含まれます。
OPTIONS MCG=(PGEN=OFF)
または
OPTIONS MCG=-PGEN
トレースをオフにします。

さまざまなオプションが出力の内容に影響します。 基本的な PGEN オプションによって、Natural ソース行および対応するコードの逆アセンブリのフォーマットされたリストが生成され、NOCSHOW ユーティリティによる抽出のためにメモリ内に保持されます。下記の「PGEN オプションの出力」で説明します。

TRSTMTTRGPTTRMPT、および TRVDT オプションによって、各行に関連付けられた内部データ構造の 16 進ダンプが出力されます。

TRBASES および TRCACHE オプションによって、ベースレジスタおよびキャッシュ変数に関する情報が出力されます。 

PGEN オプションのサブオプション

以下の表では、PGEN=ON の場合のオプションについて説明します。 使用される構文については、上記の「オプションのリスト」の説明を参照してください。

オプション 説明
LPP={5|..| 55 |..|255} トレース出力のページごとの行数。TREXT=ON の場合にのみ使用されます。
NOsrcE[={ON| OFF |Y|N}] NOsrcE=OFF の場合、Natural ソースステートメントが出力に含まれます。
TRACELEV={ 0 |..|255} トレースレベルを指定します。 この 1 バイト値の各ビットによって、トレースするバッファタイプが指定されます。これらのビットは、TRxxx オプションを使用して設定することもできます。
TRBASES[={ON| OFF |Y|N}] ベースレジスタ割り当てがトレースされるかどうかを指定します。
TRCACHE[={ON| OFF|Y|N}] CACHE エントリがトレースされるかどうかを指定します。
TREXT[={ON| OFF |Y|N}] TREXT=ON の場合、以下で説明するように、トレースはユーザー出口 NOCPRINT に送られます。
TRGPT[={ON| OFF |Y|N}] GPT エントリがトレースされるかどうかを指定します。
TRMPT[=ON| OFF |Y|N}] MPT エントリがトレースされるかどうかを指定します。
TRSTMT[={ON| OFF |Y|N}] STMT エントリがトレースされるかどうかを指定します。
TRVDT[={ON| OFF |Y|N}] VDT エントリがトレースされるかどうかを指定します。

以下の例も参照してください。

PGEN オプションの出力

Natural Optimizer Compiler では、PGEN の出力を以下の 2 つの場所に送ることができます。

内部バッファ

このバッファの内容は、CHECKCATSTOW、または RUN コマンドが実行されるたびに上書きされます。 システムユーティリティ NOCSHOW が用意されており、このバッファの内容を表示、検索、または印刷できます。

Start of instruction setNOCSHOW ユーティリティを呼び出すには

以下の PF キーを画面で使用できます。

キー 機能
PF2 出力の先頭に位置付けます。
PF4 1 行前に位置付けます。
PF5 1 行後に位置付けます。
PF6 Natural プリンタサポート No.1 に印刷します。
PF7 1 ページ前に位置付けます。
PF8 1 ページ後に位置付けます。
PF10 テキスト文字列をスキャンします。
PF11 スキャンを繰り返します。

ユーザー出口 NOCPRINT

TREXT=ON が指定された場合、Natural Optimizer Compiler によって、すべての出力行はトレースバッファに追加されるのではなく、ユーザー出口 NOCPRINT に渡されます。

NOCPRINT は、通常の OS レジスタ規則に従って呼び出されます。 レジスタ 1 は、81 バイトの印刷行のアドレスを含むフルワードをポイントします。行の位置 1 に ANSI 改行制御文字があります。 レジスタ 13 は、18*4 バイトのエリアをポイントします。このエリアはセーブエリアとして使用できます。 レジスタ 14 にはリターンアドレスが含まれ、レジスタ 15 には NOCPRINT のエントリアドレスが含まれます。

ユーザー出口 NOCPRINT は、上記のレジスタ規則をサポートする任意の言語で書き込むことができます。 Natural Optimizer Compiler ニュークリアスに加え、Natural ニュークリアスにリンクする必要があります。

PGEN 出力の操作

このセクションでは、PGEN オプションで作成された出力を解釈する方法について説明します。

サンプルセクション A:

   000000 5880 D354           L     R8,RTADR+4
   000004 5870 D370           L     R7,RTADR+32
   000008 4810 6006           LH    R1,6(,R6)
   00000C 1F60                SLR   R6,R0
   00000E 47F1 A000           BC    15,0(R1,R10)

サンプルセクション B:


    0010 OPTIONS MCG=(PGEN=ON,TRGPT=ON)  
    0020 DEFINE DATA LOCAL
    0030 1 I(I4)
    0040 1 P(P7.2)
    0050 1 T(P7.2)
    0060 END-DEFINE
    0070 *
  
    0080 SETTIME
    0090 *
  
   000012 45E0 B040           BAL   R14,RETH   
   000016 0036                DC    X'0036'
  
    0100 FOR I=1 TO 100000

サンプルセクション C:

000018 059B                BALR  R9,R11
   00001A 003E                DC    X'003E'
   00001C D203 7000 833B      MVC   I,#VAR033B
  
   000022 059B                BALR  R9,R11
   000024 004C                DC    X'004C'
   000026 47F0 A040           BC    15,64(,R10)
  
   00002A 059B                BALR  R9,R11
   00002C 005A                DC    X'005A'
   00002E BFFF 8343           ICM   R15,15,#VAR0343
   000032 BF0F 7000           ICM   R0,15,I
   000036 1A0F                AR    R0,R15
   000038 BE0F 7000           STCM  R0,15,I
  
   00003C 059B                BALR  R9,R11
   00003E 006C                DC    X'006C'
   000040 BFFF 833F           ICM   R15,15,#VAR033F
   000044 BF0F 7000           ICM   R0,15,I
   000048 190F                CR    R0,R15
   00004A 4720 A066           BC    2,102(,R10)
  
    0110   ADD 1.00 TO P
  
   00004E 059B                BALR  R9,R11
   000050 0082                DC    X'0082'
   000052 FA41 7004 8347      AP    P,#VAR0347
   000058 DC00 7008 B488      TR    P+4(1),PSGNTR
  
    0120 END-FOR
    0130 *
  
   00005E 059B                BALR  R9,R11
   000060 0094                DC    X'0094'
   000062 47F0 A02A           BC    15,42(,R10)
  
    0140 T:=*TIMD(0080)
  
   000066 059B                BALR  R9,R11
   000068 009C                DC    X'009C'
   00006A 45E0 B0D8           BAL   R14,SYSFUNC
   00006E 0330 B881           DC    X'0330B881'
  
   000072 F246 7009 8330      PACK  T,#VAR0330
   000078 F040 7009 0002      SRP   T,2,0
   00007E DC00 700D B488      TR    T+4(1),PSGNTR
  
    0150 T:=T / 10
    0160 *
  
   000084 059B                BALR  R9,R11
   000086 00AE                DC    X'00AE'
   000088 F864 D100 7009      ZAP   OP1(7),T
   00008E F811 D130 8349      ZAP   WORK2(2),#VAR0349
   000094 45E0 B104           BAL   R14,ZDCHECK
   000098 F240 7009 B355      PACK  T,ZEROZ
   00009E 47F0 E01C           BC    15,28(,R14)
   0000A2 FD61 D100 8349      DP    OP1(7),#VAR0349
   0000A8 D204 7009 D100      MVC   T,OP1
   0000AE DC00 700D B488      TR    T+4(1),PSGNTR
  
    0170 DISPLAY 'ELAPSED TIME (S)' T
  
   0000B4 45E0 B040           BAL   R14,RETH
   0000B8 00C0                DC    X'00C0'
  
    0180 END

Top of page

他の Natural パラメータの影響

グローバルパラメータ ZD は、NOC コンパイラの動作に影響します。 上記の「オプションのリスト」で説明されている ZD オプションの説明を参照してください。

COMPOPT パラメータ PSIGNF(Natural の『システムコマンド』ドキュメントのシステムコマンド COMPOPT も参照)は、正のパック 10 進数の符号を ON の場合は F、OFF の場合は C にすることによって、動作に影響します。 このパラメータは、NOSGNTR=OFF が指定された場合に適用されます。

パック型データ(フォーマット P)については、以下の図を参照してください。

NOSGNTR=OFF および  PSIGNF=ON すべての符号は F に正規化されます(デフォルト)。
NOSGNTR=OFF および  PSIGNF=OFF すべての符号は C に正規化されます。
NOSGNTR=ON   すべての符号は最後の操作で生成されたままです。

数値データ(フォーマット N)の場合、NOSGNTR および PSIGNF の設定に関係なく、符号は常に F に正規化されます。

Top of page