プロジェクト

全般

プロフィール

Intel Parallel Studio XE Composer Edition for C++ 最適化

コンパイラオプション

最適化

-fast

-xHOST -O3 -ipo -no-perc-div -staticと等価

-xHost

コンパイルマシンのCPUを調べて、最適なベクトル化オプション(-xXXX)を適用

-O3

もっとも高い最適化(-O)レベル(3が最大)。デフォルトは-O2。最適化を無効にする-O0

-ipo

プロシージャ間の最適化。ファイル間にまたがった解析を行い、引数がどう渡されるかを判断し最適化(ベクトル化)します。最適化調整中のときはベクトル化レポートが分かりやすいようにインライン展開を抑制する-Ob0を併用します。
-OXは関数内の最適化に留まります。

-no-prec-div

割り算の演算精度を低くして実行速度を高めます。除算命令はかなり遅いので除数の逆数を計算しそれを被除数に乗じることで高速化するなど、逆数命令は単精度浮動小数点なので倍精度浮動小数点の除算は高速化できない模様。

-static

静的リンクライブラリをリンクする。
但し最近は静的リンクライブラリが提供されない、2GB以上のメモリを使用するプログラムは動的リンクライブラリを使う必要がある、などの制約で-staticを指定してコンパイルするとリンクエラーが発生することがある。
→ -fastを指定せず、-xHOST -O3 -ipo -no-prec-divとすることで回避

CPU機能

-mオプション、-xオプションおよび-axオプションで指定できるCPU機能は次です。

  • SSE2
  • SSE3
  • SSSE3
  • SSE4.1
  • SSE4.2
  • AVX
  • CORE-AVX-I
  • CORE-AVX2
  • MIC-AVX512

64bit Linux版では、-msse2がデフォルトです。

-mオプションは、指定した種類の命令セットをサポートしているインテル製プロセッサーまたは互換プロセッサーで実行可能なコードを生成します。

-xオプションは、指定した種類の命令セットをサポートしているインテル製プロセッサーでのみ実行可能なコードを生成します(互換プロセッサーでは実行できない)。同じ命令セットを指定した場合、-mオプションよりも多くの最適化をします。

-axオプションは、指定した種類の命令セットをサポートしているインテル製プロセッサーでのみ実行可能なコードと、それ以外のプロセッサーで実行可能なコードの両方を生成します。実行時にCPUのチェックを行い最適な方のコードを実行します。

  • AMD製CPUで実行
    -xAVXでコンパイルしたコードを、AVXを持つPiledriverコア(A10-6800K)で実行したところ、エラーとなりました。
    Please verify that both the operating system and the processor support Intel(R) X87, CMOV, MMX, FXSAVE, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, POPCNT and AVX instructions.
    

-vec-report

ベクトル化レポート。数値を0から5まで指定、デフォルト1(ベクトル化ソース行を表示)

-guide

最適化オプションの指定について推奨を提示してくれます。-parallelを併用すると並列化の推奨も提示してくれます。
実行例を次に示します。

$ icc -c -guide -parallel array_loop.c
GAP レポート記録開始 Sat Nov 22 08:27:00 2014

array_loop.c(21): remark #30536: (LOOP) 必要に応じて、-fargument-noalias オプシ
ョンを追加してコンパイラーによる型ベースの一義化解析を向上できます (オプションは
コンパイル全体に適用されます)。これにより、行 21 のループにおいてベクトル化など
の最適化が向上します。
[確認] コンパイル全体でこのオプションのセマンティクスに沿っていることを確認して
ください。
[別の方法] ルーチン "loop2" のすべてのポインター型の引数に "restrict" キーワード
を追加することで同様の効果が得られます。これにより、行 21 のループにおいてベクトル
化などの最適化が向上します。
[確認] "restrict" ポインター修飾子のセマンティクスに沿っていることを確認してください。
ルーチンにおいて、そのポインターによってアクセスされるすべてのデータは、ほかの
ポインターからはアクセスできません。
このコンパイルセッションで出力されたアドバイスメッセージの数: 1。
GAP レポート記録終了
$\

ライブラリ

SVML

インテルコンパイラーに含まれる三角関数などいくつかの算術関数は、SVML(ショート・ベクター・マス・ライブラリ)でベクトル化されたバージョンがあります。使用するときは、mathimf.hをインクルード。

KML

IPP

TBB

MPI

資料

iSUS 公開資料

コンパイラー最適化入門: 第1回 SIMD命令とプロセッサーの関係
コンパイラー最適化入門: 第2回 SIMD命令と伝統的なIA命令
コンパイラー最適化入門: 第3回 インテルコンパイラーのベクトル化レポートを活用する
コンパイラー最適化入門: 第4回 自動ベクトル化はどんな時に行われるか
コンパイラー最適化入門: 第5回 明示的にベクトル化されたコードを記述する
コンパイラー最適化入門: 第6回(最終回) ベクトル化の裏技集
インテルコンパイラーによるAVX最適化入門: 第1回 AVXとは
インテルコンパイラーによるAVX最適化入門: 第2回 AVXへの最適化について(その1)
インテルコンパイラーによるAVX最適化入門: 第3回 AVXへの最適化について(その2)
インテルコンパイラーによるAVX最適化入門: 第4回 AVXへの最適化について(その3)
並列アプリケーションのデータの読み取り/書き込みの最適化

NASA HECC資料

米NASAのHECC (High-End Computing Capability) が提供する技術資料です。

Recommended Compiler Options
Recommended Intel Compiler Debugging Options
How Do I Use the New Sandy Bridge Nodes?

メモ