/arch
(x64)
在 x64 上为代码生成指定体系结构。 有关其他目标体系结构的 /arch
的详细信息,请参阅 /arch
(x86)、/arch
(ARM64) 和 /arch
(ARM)。
语法
/arch:
[SSE2
AVX10.1
|AVX512
|||AVX2
|SSE4.2
AVX
]
参数
/arch:SSE2
启用 Intel 流式处理 SIMD 扩展 2。 如果未 /arch
指定任何选项,则默认指令集为 SSE2。
/arch:SSE4.2
启用 Intel 流式处理 SIMD 扩展 4.2。
/arch:AVX
启用 Intel 高级矢量扩展。
/arch:AVX2
启用 Intel 高级矢量扩展 2。
/arch:AVX512
启用 Intel 高级矢量扩展 512。
/arch:AVX10.1
启用 Intel 高级矢量扩展 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 位矢量,允许使用混合乘加运算 (FMA) 指令。AVX-512
引入了另一种指令编码形式,允许 512 位矢量、掩码、嵌入式舍入/广播和新指令。 默认矢量长度AVX-512
为 512 位,可以使用标志更改为 256 位/vlen
。AVX10.1
在AVX-512
上面添加更多说明。 默认矢量长度AVX10.1
为 256 位,可以使用标志更改为 512 位/vlen
。
每个 /arch
选项还允许使用与该选项关联的其他非矢量指令。 例如,指定 /arch:AVX2
时使用某些 BMI 指令。
__AVX__
指定 、/arch:AVX2
/arch:AVX512
或/arch:AVX10.1
编译器选项时/arch:AVX
,将定义预处理器符号。
__AVX2__
指定或编译器选项时/arch:AVX2
/arch:AVX512
/arch:AVX10.1
定义预处理器符号。
__AVX512F__
指定或/arch:AVX10.1
编译器选项时/arch:AVX512
,定义 、__AVX512CD__
、__AVX512BW__
__AVX512DQ__
和__AVX512VL__
预处理器符号。
__AVX10_VER__
指定编译器选项时/arch:AVX10.1
定义预处理器符号。 它指示编译器面向的 AVX10 版本。 有关详细信息,请参阅预定义宏。
Visual Studio 2013 Update 2 版本 12.0.34567.1 中引入了 /arch:AVX2
选项。
在 Visual Studio 2017 中添加了对 /arch:AVX512
的有限支持,并在 Visual Studio 2019 中对其进行了扩展。
Visual Studio 2022 中添加了对 /arch:AVX10.1
的支持。
在 Visual Studio 中设置 /arch
编译器选项
打开项目的“属性页”对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“C/C++”>“代码生成”属性页面。
修改“启用增强指令集”属性。