/arch(最小 CPU 体系结构)

使用流式处理 SIMD 扩展 (SSE) 和流式处理 SIMD 扩展 2 (SSE2) 以及高级矢量扩展 (AVX) 指令指定生成代码的结构。

/arch:[SSE|SSE2|AVX]

备注

提示

/arch:SSE/arch:SSE2 仅在为 x86 平台编译时可用. /arch:AVX 仅能用于 x86 和 x64 平台。 为 Itanium 进行编译时,此编译器选项不可用。

SSE 和 SSE2 指令在各种 Intel 和 AMD 处理器中均存在。 Intel 浅桥处理器和 AMD Bulldozer 处理器上存在 AVX 说明。

/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 控制字,然后运行启动代码将为 53 位设置 x 的 87 FPU 控制字精度控制字段。 因此,在表达式中发生的每个浮点型和双运算具有 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 中设置 SSE 或 SSE2 的此编译器选项

  1. 打开项目的**“属性页”**对话框。 有关更多信息,请参见 如何:打开项目属性页

  2. 单击**“C/C++”**文件夹。

  3. 单击**“代码生成”**属性页。

  4. 修改**“启用增强指令集”**属性。

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

  1. 打开项目的**“属性页”**对话框。 有关更多信息,请参见 如何:打开项目属性页

  2. 单击**“C/C++”**文件夹。

  3. 单击**“命令行”**属性页。

  4. 在**“附加选项”**框中添加 /arch:AVX。

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

请参见

参考

编译器选项

设置编译器选项