関数順序リストの生成

関数順序リストは、リンカーがプログラムの非スタティック関数をリンクする際の順序を指定するテキストです。このリストにより、ページングが減少し、コードのアクセス性が高まるため、プログラムのパフォーマンスが向上します。

プロファイルに基づく最適化では、リンカーで使用する関数順序リストの生成をサポートしています。コンパイラーは、プロファイル情報を使用して順序を特定します。

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

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

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

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

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

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

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

関数順序リストの影響

関数の型

IPO コードレイアウト

proforder による関数の順序設定

スタティック

X

影響なし

外部関数

X

X

ライブラリー関数

影響なし

X

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

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

関数順序リストの生成

このセクションでは、関数順序リストを生成する一般的なプロセスの例を説明します。file1.cppfile2.cpp からなる C++ プログラムがあると仮定します。また、profdata という名前でプロファイル・データ・ファイル用のディレクトリーを作成したと仮定します。アプリケーションの関数順リストを生成して使用するには、次のようなコマンドを入力します。

  1. -prof-genx (Linux および Mac OS) オプションまたは /Qprof-genx (Windows) オプションを使用してプログラムをコンパイルします。(このステップでは、インストルメント済み実行ファイルを作成します。)

プラットフォーム

コマンドの例

Linux および Mac OS

icc -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 つ以上の入力データセットを使用してインストルメント済みプログラムを実行します。現在のディレクトリー以外の場所を指定した場合、実行ファイルが含まれているディレクトリーに変更してください。(プログラムが実行されるたびに、.dyn ファイルが作成されます。) 指定されたオプションによっては、このプロセスは時間がかかる場合もあります。

プラットフォーム

コマンドの例

Linux および Mac OS

./myprog

Windows

myprog.exe

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

プラットフォーム

コマンドの例

Linux および Mac OS

profmerge -prof-dir ./profdat

Windows

profmerge /prof-dir c:\profdata

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

プラットフォーム

コマンドの例

Linux および Mac OS

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

Windows

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

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

プラットフォーム

コマンドの例

Linux および Mac OS

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