/arch (x64)

在 x64 上为代码生成指定体系结构。 有关其他目标体系结构的 /arch 的详细信息,请参阅 /arch (x86)/arch (ARM64)/arch (ARM)

语法

/arch:[AVX|AVX2|AVX512]

参数

/arch:AVX
启用对 Intel 高级矢量扩展指令的使用。

/arch:AVX2
启用对 Intel 高级矢量扩展 2 指令的使用。

/arch:AVX512
启用对 Intel 高级矢量扩展 512 指令的使用。

备注

可以通过 /arch 选项来允许使用某些指令集扩展,尤其是对 Intel 和 AMD 处理器中提供的矢量计算而言。 一般情况下,最近引入的处理器支持的扩展范围可能比旧处理器支持的扩展范围要广,但在使用指令集扩展执行代码之前,应查阅文档来了解特定的处理器,或使用 __cpuid 来测试指令集扩展支持。

/arch 仅影响本机函数的代码生成。 当使用 /clr 进行编译时,/arch 对托管函数的代码生成没有影响。

处理器扩展具有以下特征:

  • 默认模式使用 SSE2 指令进行标量浮点和矢量计算。 这些指令允许使用单精度、双精度和 1、2、4 或 8 字节整数值的 128 位矢量以及单精度和双精度标量浮点值进行计算。

  • AVX 为矢量和浮点标量指令引入了替代指令编码。 它允许 128 位或 256 位的矢量,并将所有矢量结果零扩展到整个矢量大小。 (考虑到旧版兼容性,SSE 样式矢量指令保留第 127 位以外的所有位。)大多数浮点运算扩展到 256 位。

  • AVX2 将大多数整数运算扩展到 256 位矢量,允许使用混合乘加运算 (FMA) 指令。

  • AVX-512 引入了另一种指令编码形式,允许 512 位矢量,外加某些其他可选功能。 还添加了其他运算的说明。

每个 /arch 选项还允许使用与该选项关联的其他非矢量指令。 例如,指定 /arch:AVX2 时使用某些 BMI 指令。

指定 /arch:AVX/arch:AVX2/arch:AVX512 编译器选项时,将定义 __AVX__ 预处理器符号。 指定 /arch:AVX2/arch:AVX512 编译器选项时,将定义 __AVX2__ 预处理器符号。 指定 /arch:AVX512 编译器选项时,将定义 __AVX512F____AVX512CD____AVX512BW____AVX512DQ____AVX512VL__ 预处理器符号。 有关详细信息,请参阅预定义宏。 Visual Studio 2013 Update 2 版本 12.0.34567.1 中引入了 /arch:AVX2 选项。 在 Visual Studio 2017 中添加了对 /arch:AVX512 的有限支持,并在 Visual Studio 2019 中对其进行了扩展。

在 Visual Studio 中设置 /arch:AVX/arch:AVX2/arch:AVX512 编译器选项

  1. 打开项目的“属性页”对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“代码生成”属性页面

  3. 在“启用增强指令集”下拉框中,选择“高级矢量扩展(/arch:AVX)”、“高级矢量扩展 2 (/arch:AVX2)“和“高级矢量扩展 512 (/arch:AVX512)”。

以编程方式设置此编译器选项

另请参阅

/arch(最小 CPU 体系结构)
MSVC 编译器选项
MSVC 编译器命令行语法