コンパイラオプションを指定して高速な実行ファイルを生成する

コンパイラにオプションを指定することで、各種の最適化を行って実行速度の高速なバイナリを生成できます。ここでは、インテル製のコンパイラicc (C言語用)、icpc (C++用)のオプションを紹介します。

      
-xHOST
CPUの拡張命令セットに適した最適化を行います。
      
-O3
レベル3の最適化を行います。インテルコンパイラでは「-O3」が最も高い最適化レベルです。最適化レベルが高くなるほど最適化は進みますが、コンパイルに時間がかかります。デフォルトは「-O2」。「-O0」は最適化を行いません。
      
-ipo
プロシージャ間の最適化を行います。「-O(1,2,3)」はプロシージャ(オブジェクトや関数)単位の最適化を行うのに対し、「-ipo」は更にプロシージャ間の最適化を行います。一度オブジェクトをビルドした後に更に最適化を行うため、コンパイルに時間がかかります。
      
-no-prec-div
「-no-prec-div」は割り算の演算精度を低くし計算スピードを高めるためのオプションです。コンピュータは掛け算に比べ割り算に非常に時間がかかります。このオプションはたいていのプログラムでは計算スピードが向上します。ただし、精度を落としているため、演算結果に違いが出ることがあります。
      
-static
静的(static)ライブラリをリンクして実行モジュールを作成します。インテルコンパイラはデフォルトでは動的(shared)ライブラリを使用します。動的ライブラリをリンクした実行モジュールの場合、実行時にライブラリのオブジェクトを読みに行くため、一般的に計算スピードが遅くなると言われています。インテルコンパイラがリンクするライブラリはインテルコンパイラに付属するものだけでなく、OS標準のライブラリを多く使用します。ところが、2GB以上のメモリを使用するプログラムの場合、動的ライブラリを指定する必要があります。この様な場合に「-fast」オプションを使うと「-static」が含まれるためリンクエラーを起こします。回避するには、以下の様に「-static」を外した「-xHOST -O3 -ipo -no-prec-div」でコンパイルする必要があります。インテルコンパイラにバンドルされるライブラリだけをスタティックリンクする場合は「-static-intel」を使用します。
      
-fast
オプション「-xHOST -O3 -ipo -no-prec-div -static」と「-fast」は同じ働きをします。