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

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

配列を引数として渡すときには,配列の開始 (ベース) アドレスか,配列記述子のアドレスを渡します。

形状引継ぎ配列または配列ポインタを形状明示配列に渡すと,コンパイラが配列全体用に一時的な配列を作成しなければならないため,実行時性能が低下します。一時的な配列が作成されるのは,渡される配列が連続していない可能性があり,受け取り側の (形状明示) 配列が連続した配列を必要とするからです。一時的な配列が作成されるときには,渡される配列の大きさによって,実行時性能に対する影響が大きいかどうかが決まります。

次表に,各種の配列形式の組み合わせで行われる処理を要約して示します。実行時性能がどの程度非効率的かは,配列の大きさに依存します。

  出力引数配列の形式
入力引数配列の形式 形状明示配列 形状無指定と形状引継ぎ配列
形状明示配列 きわめて効率的。一時的な配列を使用しません。配列記述子を渡しません。インタフェース宣言は省略可能です。 効率的。形状引継ぎ配列でのみ可能 (形状無指定配列では不可能)。一時的な配列を使用しません。配列記述子を渡します。インタフェース宣言は必須です。
形状無指定と形状引継ぎ配列 割付け配列を渡す場合,きわめて効率的です。一時的な配列を使用しません。配列記述子を渡しません。インタフェース宣言は省略可能です。

割付け配列を渡さない場合,非効率的です。可能な限り,割付け配列を使用するようにしてください。一時的な配列を使用します。配列記述子を渡しません。インタフェース宣言は省略可能です。

効率的。仮引数として形状引継ぎまたは配列ポインタが必要です。一時的な配列を使用しません。配列記述子を渡します。インタフェース宣言は必須です。