配列の効率的な使用

ここで説明する配列アクセス手法の多くは、インテル® Fortran のループ変換最適化により自動的に適用されます。配列の使用法によって、ランタイム・パフォーマンスを向上することができます。

配列およびそれらのデータ宣言文については、『Intel ® Fortran Language Reference』(英語) マニュアルを参照してください。

配列引数の効率的な渡し方

Fortran の配列引数には、2 つの一般的な形式があります。

これらの配列は次元数と範囲が固定されており、コンパイル時に認識されます。形状無指定ではないその他の仮引数 (受け取り側) 配列 (大きさ引継ぎ配列など) は、明示形状配列引数の形式に含めることができます。

形状無指定配列の形式には、配列ポインタと割付け配列があります。形状引継ぎ配列引数は通常、形状無指定配列引数の受け渡しについての規則に従います。

配列を引数として渡す場合、配列の開始 (ベース) アドレスか、配列記述子のアドレスを渡します。

形状引継ぎ配列または配列ポインタを明示形状配列に渡すと、ランタイム・パフォーマンスが低下することがあります。これは、コンパイラが配列全体に対して一時的な配列を作成しなければならないためです。一時的な配列が作成されるのは、渡される配列が連続していない可能性があり、受け取り側の (形状明示) 配列が連続した配列を必要とするからです。一時的な配列が作成される場合、渡される配列のサイズによって、ランタイム・パフォーマンスに与える影響の大きさが決まります。

下記の表に、配列型の組み合わせによって行われる処理についての要約を示します。ランタイム・パフォーマンスの非効率性は、配列のサイズに依存します。

実引数配列の形式
(1 つを選択)

実引数配列の形式
(1 つを選択)

明示形状配列

形状無指定と形状引継ぎ配列

明示形状配列

この組み合わせを使用した結果: きわめて効率的。一時的な配列は使用しません。配列記述子は渡しません。インターフェイス・ブロックはオプションです。

この組み合わせを使用した結果: 効率的。形状引継ぎ配列でのみ可能です (形状無指定配列では不可)。一時的な配列は使用しません。配列記述子を渡します。インターフェイス・ブロックは必須です。

形状無指定と形状引継ぎ配列

この組み合わせを使用した結果: 割付け配列の受け渡しでは非常に効率的。一時的な配列は使用しません。配列記述子は渡しません。インターフェイス・ブロックはオプションです。

割付け配列を渡さない場合は、非効率的です。可能な限り、割付け配列を使用するようにしてくださ い。

一時的な配列を使用します。配列記述子は渡しません。インターフェイス・ブロックはオプションです。

この組み合わせを使用した結果: 効率的。仮引数として形状引継ぎまたは配列ポインタが必要です。一時的な配列は使用しません。配列記述子を渡します。インターフェイス・ブロックは必須です。