最適化レベルの変更

システム上での実行のために、生成コードを最適化するレベルを変更することができます。 コンパイラーがコードを最適化する場合、同じ出力でも、必要なシステム・リソースの量が少なくなるように、 処理がより簡略に実行されるショートカットを探します。 次に、ショートカットをマシン・コードに変換します。

たとえば、

a = (x + y) + (x + y) + 10

a の解決において、コンパイラーは 2 つの式 (x + y) が同じものであることを認識し、2 番目の式にはすでに計算済みの値を使用します。

最適化をさらに進めると、プログラム・オブジェクトのシステム上での実行効率がそれだけ良くなります。 しかし、最適化をさらに進めると、コンパイル時間が増え、最適化された変数を見られない場合もでてきます。 モジュール・オブジェクトの最適化レベルを変更して、プログラム・オブジェクトのデバッグ時の変数を正確に表示し、 それからプログラム・オブジェクトが実行用に準備ができた段階で、最適化レベルを変更することができます。

ILE コンパイラーでは、一連の最適化レベルをサポートしています。 現在 4 つの最適化レベルがあり、ILE COBOL のユーザーが使用できるのはそのうちの 3 つです。 その 3 つの最適化レベルとは、以下のとおりです。

*NONE または 10
生成されたコードに対して付加的な最適化は実行されません。 この最適化レベルでは、プログラム・オブジェクトのデバッグ時に、変数を表示して変更することができます。 この値により、実行時のパフォーマンスは最低レベルとなります。
*BASIC または 20
生成されるコードについて、ローカル・ブロック・レベルだけの一部の最適化が実行されます。 プログラム・オブジェクトのデバッグ時には、変数の表示はできますが、変更することはできません。 この最適化レベルでは、実行時のパフォーマンスが少し向上します。
*FULL または 30
生成されたコードに対して、完全な最適化 (グローバル・レベル) が実施されます。 プログラム・オブジェクトのデバッグ中は、変数を変更することはできませんが、表示することはできます。 しかし、デバッグ中に表示される変数の値は、その現行値でない場合があります。

実行時のパフォーマンスを最適化する効果は、アプリケーション・プログラムのタイプによって変わります。 たとえば、数値計算のアプリケーション・プログラムの場合、 最適化は実行時パフォーマンスをかなり向上させることがありますが、 入出力を主とするアプリケーション・プログラムの場合、 最適化を行っても実行時パフォーマンスはほんのわずかしか向上しない場合があります。

プログラム・オブジェクト内のモジュール・オブジェクトの最適化レベルを変更するには、 モジュール処理 (WRKMOD) コマンドを使用してください。 コマンド行に WRKMOD と入力すると、「モジュールの処理」画面が表示されます。 「モジュールの処理」画面でオプション 5 (表示) を選択し、変更の必要がある属性値を表示します。 「モジュール情報の表示」画面は、図 26 に示されています。

図 26. 「モジュール情報の表示」画面の最初の画面
                             
                             モジュール情報の表示
                                                                 画面 7 の 1
 モジュール . . . . . . . . . . :   COPYPROC
   ライブラリー . . . . . . . . :     TESTLIB
 詳細 . . . . . . . . . . . . . :   *BASIC
 モジュール属性 . . . . . . . . :   CBLLE
 モジュール情報 :
   モジュール作成日 / 時刻 . . . . . . . . . . . . . . . :   98/08/25  12:57:17
   ソース・ファイル  . . . . . . . . . . . . . . . . . . :   QCBLLESRC
     ライブラリー. . . . . . . . . . . . . . . . . . . . :     TESTLIB
   ソース・メンバー  . . . . . . . . . . . . . . . . . . :   COPYPROC
   ソース・ファイル変更日 / 時刻 . . . . . . . . . . . . :   98/08/19  12:04:57
   所有者. . . . . . . . . . . . . . . . . . . . . . . . :   TESTLIB
   コード化文字セット識別コード. . . . . . . . . . . . . :   37
   テキスト記述  . . . . . . . . . . . . . . . . . . . . :   PG - COPY WITHIN PR
OCESS STATEMENT EXAMPLE
   作成データ  . . . . . . . . . . . . . . . . . . . . . :   *YES
   中間言語データ  . . . . . . . . . . . . . . . . . . . :   *NO
                                                                        続く...
 続行するには、実行キーを押してください。
F3= 終了   F12= 取り消し

まず、作成データ の値が *YES になっているか調べてください。 これは、最適化レベル 値が変更されても、モジュール・オブジェクトを変換できることを意味しています。 値が *NO の場合、最適化レベルを変更するためには、モジュール・オブジェクトを再作成し、 マシン・インストラクション・テンプレートを含めなければなりません。

次に、次ページ・キーを押すと、モジュール・オブジェクトの情報がさらに表示されます。

図 27. 「モジュール情報の表示」画面の 2 番目の画面
                           
                           モジュール情報の表示
                                                                 画面 7 の 1
 モジュール . . . . . . . . . . :   COPYPROC
   ライブラリー . . . . . . . . :     TESTLIB
 詳細 . . . . . . . . . . . . . :   *BASIC
 モジュール属性 . . . . . . . . :   CBLLE
   分類順序テーブル  . . . . . . . . . . . . . . . . . . :   *HEX
   言語識別コード  . . . . . . . . . . . . . . . . . . . :   *JOBRUN
   最適化レベル  . . . . . . . . . . . . . . . . . . . . :   *NONE
   最大最適化レベル  . . . . . . . . . . . . . . . . . . :   *FULL
   デバッグ・データ. . . . . . . . . . . . . . . . . . . :   *YES
   圧縮  . . . . . . . . . . . . . . . . . . . . . . . . :   *NO
   プログラム入り口プロシージャー名. . . . . . . . . . . :   _Qln_pep
   パラメーターの数  . . . . . . . . . . . . . . . . . . :   0
   モジュールの状態. . . . . . . . . . . . . . . . . . . :   *USER
   モジュール定義域  . . . . . . . . . . . . . . . . . . :   *SYSTEM
   エクスポートされた定義済み記号の数. . . . . . . . . . :   2
   インポートされた (未解決) 記号の数. . . . . . . . . . :   14
                                                                        続く...
 続行するには、実行キーを押してください。
F3= 終了   F12= 取り消し

最適化レベル 値を調べてください。 最適化レベル値がすでに希望するレベルになっている場合もあります。

モジュールにマシン・インストラクション・テンプレートがあり、 最適化レベルを変更したい場合には、F12 (取り消し) を押します。 「モジュールの処理」画面が表示されます。 最適化レベルを変更するモジュール・オブジェクトの場合には、オプション 2 (変更) を選択します。 図 29 に示されているとおりに、CHGMOD コマンド・プロンプトが表示されます。 モジュールの最適化 プロンプトに指定されている値を上書き入力してください。

次に、次ページ・キーを押すと、モジュール・オブジェクトの情報の最後のものが表示されます。

図 28. 「モジュール情報の表示」画面の 3 番目の画面
                           
                           モジュール情報の表示
                                                                 画面 7 の 1
 モジュール . . . . . . . . . . :   COPYPROC
   ライブラリー . . . . . . . . :     TESTLIB
 詳細 . . . . . . . . . . . . . :   *BASIC
 モジュール属性 . . . . . . . . :   CBLLE
   プロファイル・データ. . . . . . . . . . . . . . . . . :   *NOCOL
   パフォーマンス収集使用可能  . . . . . . . . . . . . . :   *PEP

   テラスペース記憶域使用可能化. . . . . . . . . . . . . :   *YES
   ストレージ・モデル. . . . . . . . . . . . . . . . . . :   *SNGLVL
   ライセンス内部コード・オプション. . . . . . . . . . . :   *NONE

 モジュールの互換性 :
   モジュールの作成時期. . . . . . . . . . . . . . . . . :   V5R1M0
   モジュールの作成目的. . . . . . . . . . . . . . . . . :   V5R1M0
   モジュールを復元できる最も初期のリリース  . . . . . . :   V5R1M0
   必要な変換  . . . . . . . . . . . . . . . . . . . . . :   *NO



                                                                         終わり
 続行するには、実行キーを押してください。
F3= 終了   F12= 取り消し

パフォーマンス収集使用可能 プロンプトは、 そのモジュールがプログラム入り口点への入り口とそこからの出口だけについてのパフォーマンス測定コードで作成されていることを示します。 モジュールの互換性プロンプトは、そのモジュールと互換性のあるオペレーティング・システムのリリースおよびバージョンを示します。

図 29. CHGMOD コマンドのプロンプト
                             
                            モジュールの変更 (CHGMOD)

 選択項目を入力して、実行キーを押してください。
 モジュール . . . . . . . . . . .   COPYPROC      名前, 総称*, *ALL
   ライブラリー . . . . . . . . .     TESTLIB_    名前, *USRLIBL, *LIBL
 モジュールの最適化 . . . . . . .   *NONE_        *SAME, *FULL, *BASIC...
 識別情報の除去 . . . . . . . . .   *DBGDTA       *SAME, *NONE, *ALL...
                値の続きは +
 パフォーマンス収集使用可能 :
   収集レベル   . . . . . . . . .   *PEP          *SAME, *NONE, *PEP, *FULL...
   プロシージャー   . . . . . . .                 *ALLPRC, *NONLEAF
 プロファイリング・データ   . . .   *COL          *SAME, *NOCOL, *COL
 モジュールの強制再作成   . . . .   *NO           *NO, *YES
 テキスト '記述'  . . . . . . . .   'PG - COPY WITHIN PROCESS STATEMENT EXAMPLE
           '____________________________


                                                                         終わり
 F3= 終了    F4= プロンプト  F5= 最新表示  F10= 追加のパラメーター
 F12= 取り消し  F13= この画面の使用法  F24= キーの続き

モジュール・オブジェクトを低いレベルの最適化に変更すると、デバッグ中に変数の値を表示して、 場合によっては変更することができるようになります。

最適化を変更する追加モジュール・オブジェクトのプロセスを繰り返します。 同じプログラム・オブジェクト内で変更するモジュール・オブジェクトが 1 つであっても複数であっても、 システムがそれらのモジュール・オブジェクトを検出すると、 すべてのインポートが解決されるので、プログラム作成時間は同じです。

プログラム・オブジェクト内でモジュール・オブジェクトの最適化レベルの変更を終了したら、CRTPGM コマンドを使用してプログラム・オブジェクトを再作成するか、 または UPDPGM コマンドを使用して、新しいモジュール・オブジェクトによって既存のプログラム・オブジェクトを更新してください。