/arch (最小限の CPU アーキテクチャ)

更新 : 2007 年 11 月

ストリーミング SIMD 拡張命令 (SSE) およびストリーミング SIMD 拡張命令 2 (SSE2) を使用したコードの生成のアーキテクチャを指定します。

/arch:[SSE|SSE2]

解説

7t5yh4fd.alert_note(ja-jp,VS.90).gifメモ :

/arch は、x86 プラットフォーム用にコンパイルするときだけ利用できます。このコンパイラ オプションは、x64 または Itanium 用にコンパイルするときは使用できません。

SSE は、さまざまな Pentium プロセッサおよび AMD Athlon プロセッサに組み込まれています。SSE2 は、Pentium 4 プロセッサだけに使用されています。

コンパイラは、/arch:SSE を指定すると SSE を使用でき、/arch:SSE2 を指定すると SSE2 を使用できます。

_M_IX86_FP は、/arch コンパイラ オプションがある場合はどれが使用されたかを示します。詳細については、「Predefined Macros」を参照してください。

/arch を指定した場合、SSE および SSE2 をいつどのように利用するかは、オプティマイザによって選択されます。SSE と SSE2 は、SSE/SSE2 命令およびレジスタを使用する方が x87 浮動小数点レジスタ スタックを使用するよりも高速であると判断された場合に、一部のスカラ浮動小数点演算に使用されます。したがって、実際のコードでは、浮動小数点演算に x87 と SSE/SSE2 の両方を組み合わせて使用します。また、/arch:SSE2 を指定した場合は、SSE2 を一部の 64 ビット整数演算に使用できます。

コンパイラは、SSE と SSE2 の使用に加え、SSE および SSE2 をサポートするプロセッサ リビジョンに組み込まれているその他の命令も使用します。例としては、Intel プロセッサの Pentium Pro リビジョンで初めて導入された CMOV 命令が挙げられます。

/clr (共通言語ランタイムのコンパイル) を指定してコンパイルした場合、/arch はマネージ関数のコード生成に影響しません。/arch はネイティブ関数のコード生成にだけ影響します。

/arch/QIfist (_ftol を呼び出さない) は、同じコンパイル単位では使用できません。

特に、ユーザーが _controlfp を使用して FP 制御ワードを変更しない場合、ランタイム スタートアップ コードでは x87 FPU 制御ワードの精度制御フィールドが 53 ビットに設定されるため、式内のすべての浮動小数点演算と倍精度浮動小数点演算は、53 ビットの有効桁と 15 ビットの指数部によって行われます。ただし、すべての SSE 単精度浮動小数点演算では、24 ビットの有効桁と 8 ビットの指数部が使用され、SSE2 倍精度浮動小数点演算は、53 ビットの有効桁と 11 ビットの指数部が使用されます。詳細については、「_control87、_controlfp、__control87_2」を参照してください。

これらの差異は、次の例のように、ユーザーの代入が各部分式の後に行われる場合ではなく、単一の式ツリー内で発生する可能性があります。

r = f1 * f2 + d;  // Different results are possible on SSE/SSE2.

以下と比較してください。

   t = f1 * f2;   // Do f1 * f2, round to the type of t.
   r = t + d;     // This should produce the same overall result 
                  // regardless whether x87 stack or SSE/SSE2 is used.

controlfp は、MXCSR 制御ビットを変更しないため、/arch:SSE2 を指定した場合、controlfp の使用に依存する機能はすべて無効になります。

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。

  2. [C/C++] フォルダをクリックします。

  3. [コード生成] プロパティ ページをクリックします。

  4. [拡張命令セットを有効にする] プロパティを変更します。

このコンパイラ オプションをコードから設定するには

参照

参照

コンパイラ オプション

コンパイラ オプションの設定