関数順序リストの生成

関数順序リストは、リンカーがプログラムの非スタティック関数をリンクする際の順序を指定するテキストです。このリストにより、ページングが減少し、コードのアクセス性が高まるため、プログラムのパフォーマンスが向上します。プロファイルに基づく最適化では、リンカーで使用する関数順序リストの生成をサポートしています。コンパイラーはプロファイル情報を使用して、順序を判定します。

関数順序リストを生成するには、profmerge および proforder ユーティリティーを使用します。

関数順序リスト使用のガイドライン (Windows*)

関数順序リストを作成するには、次のガイドラインに従ってください。

関数順序リストと IPO コードレイアウトの比較

インテル(R) コンパイラーは、次の 2 つの方法で、実行ファイル内の関数のレイアウトを最適化します。

2 つの方法にはそれぞれ長所があります。proforder によって作成される関数順序リストを使用すると、非スタティック関数 (すなわち、リンカーに対して関数名を公開する外部関数およびライブラリー関数) のレイアウトを最適化できます。

スタティック関数の名前はオブジェクト・ファイルで利用できないため、リンカーは、これらの関数のレイアウト順序を直接操作できません。

コンパイラーは、他のコンパイラーでコンパイルされた関数 (ライブラリー関数など) のレイアウト順序を操作できません。IPO がアクティブな場合、関数レイアウトの最適化は自動的に実行されます。

代わりに、-ipo (Linux) または /Qipo (Windows) オプションを使用して、インテル(R) C++ コンパイラーでコンパイルされたすべての static または extern 関数のレイアウトを最適化できます。コンパイラーは、他のコンパイラーでコンパイルされた関数 (ライブラリー関数など) のレイアウト順序を操作できません。IPO がアクティブな場合、関数レイアウトの最適化は自動的に実行されます。

関数順序リストの影響

関数の型

/Qipo による
コードレイアウト

proforder による
関数順序

スタティック

X

影響なし

外部関数

X

X

ライブラリー関数

影響なし

X

関数順序リスト生成の例

このセクションでは、関数順序リストを生成する一般的なプロセスの例を説明します。次のファイルからなる C++ プログラムがあると仮定します。

また、profdata という名前でプロファイル・データ・ファイル用のディレクトリーを作成したと仮定します。アプリケーションの関数順リストを生成して使用するには、次のようなコマンドを入力します。

  1. -prof-genx (Linux) または /Qprof-genx (Windows) オプションを使用してプログラムをコンパイルします。

プラットフォーム

コマンドの例

Linux

icpc -o myprog -prof-genx -prof-dir ./profdata file1.cpp file2.cpp

Windows

icl /Femyprog /Qprof-genx /Qprof-dir c:\profdata file1.cpp file2.cpp

このステップでは、インストルメント済み実行ファイルを作成します。

  1. 1 つ以上の入力データセットを使用してインストルメント済みプログラムを実行します。現在のディレクトリー以外の場所を指定した場合、実行ファイルが含まれているディレクトリーに変更してください。

プラットフォーム

コマンドの例

Linux

./myprog

Windows

myprog.exe

プログラムが実行されるたびに、.dyn ファイルが作成されます。指定されたオプションによっては、このプロセスは時間がかかる場合もあります。

  1. インストルメント済みプログラムを 1 回以上実行して、得られたデータを profmerge ユーティリティーを使用してマージし、pgopti.dpi ファイルを生成します。-prof-dir (Linux) または /Qprof-dir (Windows) オプションを使用して .dyn ファイルの場所を指定します。

プラットフォーム

コマンドの例

Linux

profmerge -prof-dir ./profdat

Windows

profmerge /prof-dir c:\profdata

  1. proforder ユーティリティーを使用して、関数順序リストを生成します。(デフォルトでは、関数順序リストは proford.txt ファイルに生成されます。)

プラットフォーム

コマンドの例

Linux

proforder -prof-dir ./profdata -o myprog.txt

Windows

proforder -prof-dir c:\profdata -o myprog.txt

  1. リンカーに ORDER オプションを指定し、生成されたプロファイル・フィードバックを使用してアプリケーションをコンパイルします。再び、-prof-dir (Linux) または /Qprof-dir (Windows) オプションを使用してプロファイル・ファイルの場所を指定します。

プラットフォーム

コマンドの例

Linux

icpc -o myprog -prof-dir ./profdata file1.cpp file2.cpp -Xlinker -ORDER:@myprog.txt

Windows

icl /Femyprog /Qprof-dir c:\profdata file1.cpp file2.cpp /link -ORDER:@myprog.txt