Rational Developer for System z
COBOL for Windows バージョン 7.5 プログラミング・ガイド


テーブル参照の最適化

COBOL コンパイラーは、いくつかの方法でテーブル参照を最適化します。

テーブル・エレメント参照 ELEMENT(S1 S2 S3) (ここで、S1S2、および S3 は添え字です) の場合、コンパイラーは以下の式を評価します。

comp_s1 * d1 + comp_s2 * d2 + comp_s3 * d3 + base_address

ここで、comp_s1 は 2 進数に変換された後の S1 の値であり、comp-s2 は 2 進数に 変換された後の S2 の値です。以下同様です。 それぞれの次元のストライドは d1d2、および d3 です。ある特定次元のストライド は、その次元での出現番号が 1 だけ違い、かつ他の出現番号が等しいようなテーブル・エレメント相互間の距離 (バイト単位) です。例えば、上記の例の 2 次元のストライド d2 は、ELEMENT(S1 1 S3) と ELEMENT(S1 2 S3) との間の距離 (バイト単位) です。

指標計算は添え字計算に類似していますが、指標値ではそれらの中にストライドを含めているので、 乗算をする必要がないという点が異なります。指標計算には、指標をレジスターに ロードすることも含まれます。これらのデータ転送は、個々の添え字計算の項を最適化する場合とほぼ同様に、最適化することができます。

コンパイラーは式を左から右へと評価していくので、定数または重複する添え字が左端にあると、最適化プログラムが計算を除去する可能性が最も高くなります。

定数項目と変数項目の最適化

C1C2、. . . . . は、定数データ項目であり、V1V2、. . . . . は変数データ項目です。したがって、テーブル・エレメント参照 ELEMENT(V1 C1 C2) の場合、コンパイラーは個々の項 comp_c1 * d2 および comp_c2 * d3 だけしか、式から定数として除去できません。

comp_v1 * d1 + comp_c1 * d2 + comp_c2 * d3 + base_address

しかし、テーブル・エレメント参照 ELEMENT(C1 C2 V1) の場合、コンパイラーは、副次式 comp_c1 * d1 + comp_c2 * d2 全体を、式から定数として除去することができます。

comp_c1 * d1 + comp_c2 * d2 + comp_v1 * d3 + base_address

テーブル・エレメント参照 ELEMENT(C1 C2 C3) では、添え字はすべて定数なので、実行時に添え字計算は行われません。式は次のとおりです。

comp_c1 * d1 + comp_c2 * d2 + comp_c3 * d3 + base_address

最適化プログラムを使用すると、この参照は、スカラー (テーブルでない) 項目への参照と同じくらい効率的になります。

重複項目の最適化

テーブル・エレメント参照 ELEMENT(V1 V3 V4) および ELEMENT(V2 V3 V4) では、個々の項 comp_v3 * d2 および comp_v4 * d3 だけが、テーブル・エレメントの参照に必要な式における共通副次式です。

comp_v1 * d1 + comp_v3 * d2 + comp_v4 * d3 + base_address
comp_v2 * d1 + comp_v3 * d2 + comp_v4 * d3 + base_address

しかし、2 つのテーブル・エレメント参照 ELEMENT(V1 V2 V3) および ELEMENT(V1 V2 V4) の場合は、副次式 comp_v1 * d1 + comp_v2 * d2 全体が、テーブル・エレメントの参照に必要な 2 つの式間で共通となります。

comp_v1 * d1 + comp_v2 * d2 + comp_v3 * d3 + base_address
comp_v1 * d1 + comp_v2 * d2 + comp_v4 * d3 + base_address

2 つの参照 ELEMENT(V1 V2 V3) および ELEMENT(V1 V2 V3) では、式は同じです。

comp_v1 * d1 + comp_v2 * d2 + comp_v3 * d3 + base_address
comp_v1 * d1 + comp_v2 * d2 + comp_v3 * d3 + base_address

最適化プログラムを使用すると、同じエレメントへの 2 度目 (およびそれ以降) の参照は、スカラー (テーブルでない) 項目への参照と同じ効率になります。

可変長項目の最適化

従属 OCCURS DEPENDING ON データ項目の入っているグループ項目は可変長です。プログラムは、可変長データ項目が参照されるたびに特殊コードを実行しなければなりません。

このコードはライン外のものなので、最適化の妨げになる可能性があります。さらに、可変長データ項目を処理するためのコードは、固定サイズ・データ項目を処理するコードよりかなり効率が下がり、処理時間も大幅に増加することがあります。例えば、可変長データ項目を比較したり移動したりするためのコードには、ライブラリー・ルーチンの呼び出しが必要なため、固定長データ項目の場合の同じコードよりかなり低速になります。

直接指標付けと間接指標付けの比較

相対指標参照は、直接指標参照と同じくらい迅速に実行されます。

ELEMENT (I5, J3, K2) の直接索引付けには、次のプリプロセスが必要になります。

SET I5 TO I 
SET I5 UP BY 5
SET J3 TO J 
SET J3 DOWN BY 3
SET K2 TO K 
SET K2 UP BY 2

この処理のため、直接索引付けは、ELEMENT (I + 5, J - 3, K + 2) の相対索引付けよりも効率が悪くなります。

関連概念
最適化

関連タスク
テーブルの効率的処理


ご利用条件 | フィードバック

Copyright IBM Corporation 1996, 2008.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)