サブプログラム呼び出しの最適化

プログラムに多数のサブプログラム呼び出しがある場合、-qipa=inline オプションを使用して、インライン化をオンにすることができます。 これにより、このような呼び出しのオーバーヘッドが削減されます。 gprof-p または -pg オプションを使用して、最も頻繁に呼び出される サブプログラムを判別し、コマンド行にその名前をリストすることを検討してください。

呼び出し側サブプログラムと呼び出し先サブプログラムが異なる有効範囲にある場合にインライン化を呼び出しに適用させるためには、-qipa オプションを組み込みます。

# Let the compiler decide (relatively cautiously) what to inline.
xlf95 -O3 -qipa=inline inline.f
 
# Encourage the compiler to inline particular subprograms.
xlf95 -O3 -qipa=inline=called_100_times,called_1000_times inline.f
 
# Explicity extend the inlining to calls across multiple files.
xlf95 -O3 -qipa=inline=called_100_times,called_1000_times -qipa inline.f
関連情報:
-Q オプションおよび -qipa オプションを参照してください。

インライン化の正しいレベルの見つけ方

特定プログラムに対してインライン化の正しい量を知るには、ユーザー・サイドで行わなければならない作業がいくつかある場合が あります。 コンパイラーには、インライン化を多量に行うことを避けるために多数の安全機能および限界があります。 そうでなければ、コンパイル中のストレージの制約が原因で、コンパイラーが実行する全体にわたる最適化が少なくなったり、 その結果作成されたプログラムが大きくなりすぎて、キャッシュ・ミスおよびページ不在がより頻繁になるために実行スピードが 遅くなります。 ただし、これらの安全機能は、インライン化したいサブプログラムをコンパイラーがインライン化することを妨げることがあります。 この事態が発生した場合、パフォーマンス面の恩恵を得るために、分析または作業のやり直し、またはその両方を行う必要があります。

一般的な規則として、最も頻繁に呼び出されるごく少ないサブプログラムを識別して、それらのサブプログラムだけを インライン化することを考えてください。

-qipa=inline でサブプログラムをインライン化できない一般的な条件は、次のとおりです。

インラインを制御するサイズの限界を変更するために、-qipa=limit=n を使用することが できます。 この n は 0 から 9 です。 値をより大きくすれば、さらにインライン化することができます。

リンク時の最適化で、C/C++ 関数を Fortran プログラムに インライン化する (およびその逆を行う) ことは可能です。 C/C++ コードは、IBM XL C/C++ コンパイラーを使用して、-qipa および XLF コンパイルで使用されたものと互換性のあるオプションを 設定してコンパイルする必要があります。

関連情報:
IBM Copyright 2003