インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
このトピックでは、コマンドラインから IPO を使用する方法を説明します。
IPO を有効にするには、最初に各ソースファイルをコンパイルし、結果として得られたソースファイルをリンクします。
次のように、最初に [Q]ipo コンパイラー・オプションを使用してソースファイルをコンパイルします。
オペレーティング・システム |
コマンド例 |
---|---|
Linux* および macOS* |
icpc -ipo -c a.cpp b.cpp c.cpp |
Windows* |
icl /Qipo /c a.cpp b.cpp c.cpp |
上記のコマンド例では、オペレーティング・システムによって出力が異なります。
Linux* および macOS*: コマンドを実行すると、a.o、b.o および c.o オブジェクト・ファイルが作成されます。
Windows*: コマンドを実行すると、a.obj、b.obj、および c.obj オブジェクト・ファイルが作成されます。
c コンパイラー・オプションを使用して、.o ファイルまたは .obj ファイルを作成した後でコンパイルを停止します。出力ファイルには、コンパイルされたソースファイルに対応するインテル® コンパイラーの中間表現 (IR) が含まれます。
次に、結果ファイルをリンクします。次のコマンド例では、app という名前の実行ファイルが生成されます。
オペレーティング・システム |
コマンド例 |
---|---|
Linux* および macOS* |
icpc -o app a.o b.o c.o |
Windows* |
icl /Feapp a.obj b.obj c.obj |
このコマンドは、IR を含むオブジェクトに対してコンパイラーを実行して、リンクされるオブジェクトの新しい一覧を生成します。また、xild (Linux* および macOS*) ツールまたは xilink (Windows*) ツールを適切なリンクオプションとともに使用できます。
上記の例で使用した複数のコマンドを組み合わせて、1 つのコマンドにすることができます。
オペレーティング・システム |
コマンド例 |
---|---|
Linux* および macOS* |
icpc -ipo -o app a.cpp b.cpp c.cpp |
Windows* |
icl /Qipo /Feapp a.cpp b.cpp c.cpp |
上記の例のように、icl/icpc コマンドは指定されたオブジェクト・ファイルにリンクする GCC ld (Linux* および macOS*) または link.exe (Windows* のみ) を呼び出し、-o オプション (Linux* および macOS*) または /Fe オプション (Windows*) で指定された実行ファイルを生成します。
Linux*: icpc を使用すると、コンパイラーは標準 C++ ライブラリーを自動で使用することができます。icc を指定した場合は、標準 C++ ライブラリーを自動では使用できません。
macOS*: icc/icpc コマンドを使用すると、コンパイラーはデフォルトで libc++ ライブラリーを使用することができます。-stdlib=libstdc++ コンパイラー・オプションを指定して、GNU* 実装の標準 C++ ライブラリーを使用するように切り替えることができます。
インテルのリンクツールは、-O0 オプション (Linux* および macOS*) または /Od オプション (Windows*) でのコンパイル動作をエミュレートします。
一連のオブジェクト・ファイル (擬似オブジェクト・ファイルは含まない) に複数ファイル IPO を適用すると、複数ファイル IPO は実行されません。単にオブジェクト・ファイルがリンカーにリンクされるだけです。
[Q]ipo-c コンパイラー・オプションと [Q]ipo-S コンパイラー・オプションは、複数ファイル IPO の効果を分析したり、あるいは、プログラムを完全には構成しないモジュール間で複数ファイル IPO を検証するのに役立ちます。
複数のファイル全体にわたって最適化を行い、オブジェクト・ファイルを生成するには、[Q]ipo-c コンパイラー・オプションを使用します。このオプションを使用すると、[Q]ipo オプションの解説で述べた最適化処理を行いますが、最後のリンク段階に進む前にその処理は停止し、最適化されたオブジェクト・ファイルはそのまま残ります。このファイルのデフォルト名は、ipo_out.o (Linux* および macOS*) または ipo_out.obj (Windows*) です。
複数のファイル全体にわたって最適化を行い、アセンブリー・ファイルを生成するには、[Q]ipo-S コンパイラー・オプションを使用します。このオプションを使用すると、[Q]ipo オプションの解説で述べた最適化処理を行いますが、最後のリンク段階に進む前にその処理は停止し、最適化されたアセンブリー・ファイルはそのまま残ります。このファイルのデフォルトのファイル名は、ipo_out.s (Linux*) または ipo_out.asm (Windows*) です。
どちらのオプションでも、-o オプション (Linux* および macOS*) または /Fe オプション (Windows*) を使用して、別の名前を指定することができます。
マルチオブジェクト IPO を使用した場合、これらのオプションは、複数の出力を生成します。最初のファイル名は、-o オプション (Linux* および macOS*) または /Fe オプション (Windows*) の値から取得されます。
後続のファイルの名前は、最初のファイルの名前から派生して取得され、ファイル名に数値が追加されます。例えば、最初のオブジェクト・ファイルの名前が foo.o (Linux* および macOS*) または foo.obj (Windows*) の場合、次のオブジェクト・ファイルの名前は foo1.o または foo1.obj となります。
IPO で通常生成される擬似ファイルとは異なり、[Q]ipo-c オプションで生成されたオブジェクト・ファイルを使用できますが、このオプションを指定するとプログラム全体の最適化と同じ効果は得られません。
[Q]ipo-c オプションを使用して作成されるファイルは、実際のオブジェクト・ファイルです。ただし、生成されるオブジェクト・ファイルは擬似オブジェクト・ファイルとは大幅に異なります。プログラム全体の最適化は適用されません。この最適化には、実際のオブジェクトがどのようにほかのファイルとリンクされるか、およびオブジェクトに関する情報が必要です。
コンパイラーは、生成される各オブジェクトまたはアセンブリー・ファイルの名前を示すメッセージを表示します。これらのファイルは、実際のリンク段階で追加することで、最終的なアプリケーションをビルドすることができます。
インテル® 64 アーキテクチャー・ベースの Linux* システムでは、auto-ilp32 オプションは x オプションで SSE3 またはそれ以上を指定しない限り、効果がありません。