本書の使い方

このユーザーズ・ガイドでは、インテル® C++ コンパイラの使用方法を説明しています。C++ コンパイラの使用方法を説明します。読者はアプリケーションのパフォーマンスを向上させるための標準的および先進的なコンパイラ最適化手法の使用法を学習できます。

標準的な最適化手法と高度な最適化手法を学べば、アプリケーションのパフォーマンスが最大まで引き出せます。また、ホスト・コンピュータのオペレーティング・システムにも精通している必要があります。

本書では、対象となる各アーキテクチャごとに情報や命令がどのように適用されるかを説明しています。どのアーキテクチャかを明示していない場合、説明は両方のアーキテクチャに適用されます。

どのアーキテクチャかを明示していない場合、説明は両方のアーキテクチャに適用されます。

規則

This type style This type style構文要素、予約語、キーワード、ファイル名、コンピュータ出力、プログラム例の一部分のいずれかを表します。
This type style This type style
This type style This type styleコマンドラインの引数またはオプションの引数を表します。
[ items ] 角括弧で囲まれたアイテムはオプションです。
{ item1 | item2 |... } 中括弧内のitemの中から1つだけを選択します。縦線( | )はアイテムの区切りです。-ax{i|M|K|M}のようにオプションによっては、複数のitemを使用できます。
... (省略記号) 省略符号は、直前のアイテムを複数指定できることを表します。

組込み関数名の表記

ほとんどの組込み関数名は、次の表記規則に従います。

_mm_<intrin_op>_<suffix>

<intrin_op> 組込み関数の基本操作を示します。例えば、加算の場合はadd、減算の場合はsubになります。
<suffix> 命令の操作対象となるデータの型を示します。各サフィックスの最初の1文字または2文字は、データがパックドデータ(p)、拡張パックドデータ(ep)、またはスカラデータ(s)であることを示します。その他の文字は、次のとおりデータ型を示します。
  • __s 単精度浮動小数点値
  • __d 倍精度浮動小数点値
  • __i128 符号付き128ビット整数
  • __i64 符号付き64ビット整数
  • __u64 符号なし64ビット整数
  • __i32 符号付き32ビット整数
  • __u32 符号なし32ビット整数
  • __i16 符号付き16ビット整数
  • __u16 符号なし16ビット整数
  • __i8 符号付き8ビット整数
  • __u8 符号なし8ビット整数

変数名を付加した数字は、パックされたオブジェクトの要素を示します。例えば、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> 要素の個数です。