このユーザーズ・ガイドでは、インテル® C++ コンパイラの使用方法を説明します。インテル C++ コンパイラの入門、動作内容、そして高いパーフォーマンスを実現する能力に関する情報を提供します。読者はアプリケーションのパフォーマンスを向上させるための標準的および先進的なコンパイラ最適化手法の使用法を学習できます。
標準的な最適化手法と高度な最適化手法を学べば、アプリケーションのパフォーマンスが最大まで引き出せます。また、ホスト・コンピュータのオペレーティング・システムにも精通している必要があります。
注
本書では、対象となる各アーキテクチャごとに情報や命令がどのように適用されるかを説明しています。どのアーキテクチャかを明示していない場合、説明は両方のアーキテクチャに適用されます。
本書では、次の表記法を使用しています:
This type style | 構文要素、予約語、キーワード、ファイル名、コンピュータ出力、プログラム例の一部分のいずれかを表します。テキストは、大文字に意味がない限り小文字で表記します。 |
This type style | キーボードから入力する文字を表します。 |
This type style | 識別子、式、文字列、シンボル、または値のプレースホルダを表します。プレースホルダの代わりにこれらの項目の 1 つを使用してください。 |
[ items ] | 角括弧で囲まれたアイテムはオプションです。 |
{ item1 | item2 |... } | オプションのバージョンに使用されます。例えば、オプション -x{K|W|N|B|P} にはバージョン -xK、-xW、-xN、-xB、および -xP があります。 |
... (省略記号) | 省略記号は、直前のアイテムを複数指定できることを表します。 |
ほとんどの組込み関数名は、次の表記法に従います:
_mm_<intrin_op>_<suffix>
<intrin_op> | 組込み関数の基本操作を示します。例えば、加算の場合は add、減算の場合は sub になります。 |
<suffix> | 命令の操作対象となるデータの型を示します。各サフィックスの最初の 1 文字または 2 文字は、データがパックドデータ (p)、拡張パックドデータ
(ep)、またはスカラデータ (s) であることを示します。その他の文字は、データ型を示します:
|
変数名を付加した数字は、パックされたオブジェクトの要素を示します。例えば、r0 は r の最下位ワードです。一部の組込み関数は、2 つ以上の命令で実行するため、"複合組込み関数" と呼ばれます。
パックされた値は、右から左の順序で表現し、最下位の値がスカラ操作に使用されます。次の操作の例について考えます:
double a[2] = {1.0, 2.0}; __m128d t = _mm_load_pd(a);
上の操作の結果は、次のそれぞれの操作と同じになります:
__m128d t = _mm_set_pd(2.0, 1.0); __m128d t = _mm_setr_pd(1.0, 2.0);
つまり、値 t を保持する xmm レジスタは、次のようになります:
"スカラ" 要素は 1. 0 です。一部の組込み関数では、命令の性質上、引数として即値 (定数整数リテラル) を指定しなければなりません。
組込み関数については、「命名と使用する構文」も参照してください。
クラス名は、データ型、符号の有無、ビットサイズ、要素数を表現したものです。一般的な形式で表すと次のようになります:
<type><signedness><bits>vec<elements>
{ F | I } { s | u } { 64 | 32 | 16 | 8 } vec { 8 | 4 | 2 | 1 }
各アイテムの意味は次のとおりです:
<type> | 浮動小数点 ( F ) または整数 ( I ) を示します。 |
<signedness> | 符号付き ( s ) または符号なし ( u ) を示します。Ivec クラスの場合は、このフィールドが空のままだと中間クラスを表します。符号なしの Fvec クラスはないため、Fvec クラスの場合、このフィールドは空です。 |
<bits> | 要素あたりのビット数です。 |
<elements> | 要素の個数です。 |