/arch
(x64)
x64 でのコード生成のアーキテクチャを指定します。 他のターゲット アーキテクチャの /arch
の詳細については、「 /arch
(x86)、 /arch
(ARM64)、および /arch
(ARM)」を参照してください。
構文
/arch:
[SSE2
|SSE4.2
|AVX
|AVX2
|AVX512
|AVX10.1
]
引数
/arch:SSE2
Intel Streaming SIMD Extensions 2 を有効にします。 /arch
オプションが指定されていない場合、既定の命令セットは SSE2 です。
/arch:SSE4.2
Intel Streaming SIMD Extensions 4.2 を有効にします。
/arch:AVX
Intel Advanced Vector Extensions を有効にします。
/arch:AVX2
Intel Advanced Vector Extensions 2 を有効にします。
/arch:AVX512
Intel Advanced Vector Extensions 512 を有効にします。
/arch:AVX10.1
Intel Advanced Vector Extensions 10 バージョン 1 を有効にします。
解説
/arch
オプションを使用すると、Intel および AMD のプロセッサで使用できる、特定の命令セット拡張機能 (特にベクター計算用) を使用できます。 一般に、最近導入されたプロセッサでは、以前のプロセッサでサポートされているもの以外の拡張機能がサポートされる場合がありますが、命令セット拡張機能を使用してコードを実行する前に、特定のプロセッサのドキュメントを参照するか、 __cpuid
を使用して命令セット拡張機能のサポートをテストする必要があります。 __check_isa_support
組み込みを使用して、より頻繁に使用される CPU 機能を確認することもできます。
/arch
は、ネイティブ関数のコード生成にのみ影響します。 /clr
を使用してコンパイルする場合、/arch
はマネージド関数のコード生成には影響しません。
プロセッサ拡張機能には、次の特性があります。
既定のモードでは、スカラー浮動小数点とベクトルの計算に SSE2 命令が使用されます。 これらの命令により、単精度、倍精度、1、2、4、または 8 バイトの整数値の 128 ビット ベクトルと、単精度および倍精度スカラー浮動小数点値を使用した計算が可能になります。
SSE4.2
では、浮動小数点スカラー、ベクター、整数ベクトルの計算に SSE 命令の完全なセットが使用されます。AVX
ベクトルおよび浮動小数点スカラー命令の代替命令エンコードが導入されました。 これにより、128 ビットまたは 256 ビットのベクトルが可能になり、すべてのベクター結果が完全なベクター サイズに拡張されます。 (従来の互換性のために、SSE スタイルのベクター命令はビット 127 を超えるすべてのビットを保持します)。ほとんどの浮動小数点演算は、256 ビットに拡張されます。AVX2
は、ほとんどの整数演算を 256 ビット ベクトルに拡張し、Fused Multiply-Add (FMA) 命令を使用できるようにします。AVX-512
では、512 ビット ベクトル、マスク、埋め込み丸め/ブロードキャスト、および新しい命令を可能にする別の命令エンコード フォームが導入されました。AVX-512
の既定のベクトル長は 512 ビットであり、/vlen
フラグを使用して 256 ビットに変更できます。AVX10.1
は、AVX-512
の上にさらに指示を追加します。AVX10.1
の既定のベクトル長は 256 ビットであり、/vlen
フラグを使用して 512 ビットに変更できます。
各 /arch
オプションでは、そのオプションに関連付けられている他の非ベクター命令の使用を有効にすることもできます。 たとえば、 /arch:AVX2
が指定されている場合に、特定の BMI 命令を使用します。
__AVX__
プリプロセッサ シンボルは、/arch:AVX
、/arch:AVX2
、/arch:AVX512
、または/arch:AVX10.1
コンパイラ オプションが指定されたときに定義されます。
__AVX2__
プリプロセッサ シンボルは、/arch:AVX2
、/arch:AVX512
、または/arch:AVX10.1
コンパイラ オプションが指定されたときに定義されます。
__AVX512F__
、__AVX512CD__
、__AVX512BW__
、__AVX512DQ__
、および__AVX512VL__
プリプロセッサ シンボルは、/arch:AVX512
または/arch:AVX10.1
コンパイラ オプションが指定されたときに定義されます。
__AVX10_VER__
プリプロセッサ シンボルは、/arch:AVX10.1
コンパイラ オプションが指定されたときに定義されます。 これは、コンパイラが対象としている AVX10 バージョンを示します。 詳細については、「定義済みマクロ」を参照してください。
/arch:AVX2
オプションは、Visual Studio 2013 Update 2 バージョン 12.0.34567.1 で導入されました。
visual Studio 2017 で /arch:AVX512
の制限付きサポートが追加され、Visual Studio 2019 で拡張されました。
Visual Studio 2022 で /arch:AVX10.1
のサポートが追加されました。
Visual Studio で /arch
コンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳しくは、「Visual Studio で C++ コンパイラとビルド プロパティを設定する」をご覧ください。
[構成プロパティ]>[C/C++]>[コード生成] プロパティ ページを選択します。
[拡張命令セットを有効にする] プロパティを変更します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。EnableEnhancedInstructionSet
関連項目
/arch
(最小 CPU アーキテクチャ)
MSVC コンパイラ オプション
MSVC コンパイラのコマンド ライン構文