/arch (最小限の CPU アーキテクチャ)
ストリーミング SIMD 拡張機能 (SSE)、ストリーミング SIMD 拡張機能 2 (SSE2)、および Advanced Vector Extension (AVX) 命令を使用したコードの生成のアーキテクチャを指定します。
/arch:[SSE|SSE2|AVX]
解説
注意
/arch:SSE および /arch:SSE2 は、x86 プラットフォーム用にコンパイルする場合のみ利用できます。 /arch:AVX は、x86 プラットフォームおよび x64 プラットフォーム用にコンパイルする場合のみ利用できます。 このコンパイラ オプションは、Itanium 用にコンパイルする場合は使用できません。
SSE 命令および SSE2 命令は、さまざまな Intel プロセッサおよび AMD プロセッサに組み込まれています。 AVX 命令は、Intel Sandy Bridge プロセッサおよび AMD Bulldozer プロセッサに組み込まれています。
/arch:SSE を指定すると、コンパイラで SSE 命令を使用できるようになります。 /arch:SSE2 を指定すると、コンパイラで SSE2 命令を使用できるようになります。 /arch:AVX を指定すると、コンパイラで AVX 命令のエンコーディングを使用するようになります。
_M_IX86_FP は、/arch コンパイラ オプションが使用された場合にどれが使用されたかを示します。 詳細については、「Predefined Macros」を参照してください。
/arch を指定した場合、SSE 命令および SSE2 命令をいつどのように利用するかは、オプティマイザーによって選択されます。 SSE 命令と SSE2 命令は、x87 浮動小数点レジスタ スタックよりも SSE/SSE2 命令およびレジスタを使用した方が高速であると判断された場合に、一部のスカラー浮動小数点演算に使用されます。 したがって、実際のコードでは、浮動小数点演算に x87 と SSE/SSE2 の両方を組み合わせて使用します。 また、/arch:SSE2 を指定した場合は、SSE2 を一部の 64 ビット整数演算に使用できます。
コンパイラでは、SSE 命令と SSE2 命令の使用に加え、SSE および SSE2 をサポートするプロセッサ リビジョンに組み込まれているその他の命令も使用します。 例としては、Intel プロセッサの Pentium Pro リビジョンで初めて導入された CMOV 命令が挙げられます。
/clr を指定してコンパイルした場合、/arch はマネージ関数のコード生成に影響しません。 /arch はネイティブ関数のコード生成にのみ影響します。
/arch と /QIfist は、同じコンパイル単位では使用できません。
特に、ユーザーが _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 の使用に依存する機能はすべて無効になります。
SSE または SSE2 のこのコンパイラ オプションを Visual Studio で設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。
[C/C++] フォルダーをクリックします。
[コード生成] プロパティ ページをクリックします。
[拡張命令セットを有効にする] プロパティを変更します。
/arch:AVX コンパイラ オプションを Visual Studio で設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。
[C/C++] フォルダーをクリックします。
[コマンド ライン] プロパティ ページをクリックします。
[追加のオプション] ボックスに、「/arch:AVX」を追加します。
このコンパイラ オプションをコードから設定するには
- 「EnableEnhancedInstructionSet」を参照してください。