英特尔® 编译器英特尔® SSE 与英特尔® AVX 生成(SSE2、SSE3、SSE3_ATOM、SSSE3、SSE4.1、SSE4.2、AVX、AVX2)选项和特定处理器优化选项

在 11.1、12.0 和 12.1 编译器中哪些是 IA-32 和英特尔® 64 处理器的目标选项?
特定处理器优化选项主要有三类:

  1. 格式为 /arch:<code>(Windows*)(Linux* 或 Mac OS* X 上为 -m<code>)的特定处理器选项生成由 <code> 指定的专门的处理器代码。这些特定处理器选项生成的可执行文件,可以在支持此指令集的指定或较新的英特尔® 处理器和兼容的非英特尔® 处理器上运行。可执行文件可能具有这些处理器特有的优化特性,使用特定版本的英特尔® SIMD 流指令扩展 (SSE) 指令集和/或英特尔® 高级矢量扩展 (AVX) 指令集;在不支持相应指令集的较早处理器上,可能出现非法指令或类似错误。
  2. <code> 值可能的位置:

    AVX 可能生成英特尔® AVX、英特尔® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。
    SSE4.2 可能生成英特尔® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。
    SSE4.1 可能生成英特尔® SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。
    SSSE3 可能生成英特尔® SSSE3、SSE3、SSE2 和 SSE 指令。
    SSE3 可能生成英特尔® SSSE3、SSE2 和 SSE 指令。
    SSE2 可能生成英特尔® SSE2 和 SSE 指令。/arch:SSE2 是 Windows* 的默认值,-msse2 是 Linux* 的默认值。
    IA32 生成通用的 IA-32 兼容代码。只能与 /arch: 或 -m 交换结合使用。(仅 IA-32 编译器)。

  3. 格式为 /Qx<code>(Windows*)(Linux* 或 Mac OS* X 上为 -x<code>)的特定处理器选项生成由 <code> 指定的专门的处理器代码。由于特定处理器选项生成的可执行文件可能具有这些处理器特有的优化特性,且使用特定版本的 SIMD 流指令扩展 (SSE) 指令集和/或英特尔® 高级矢量扩展 (AVX) 指令集,因而只能在指定或较新的英特尔® 处理器上运行。此交换使某些优化无法在相应的交换 /arch:x<code> 或 -m<code> 中实现。运行时检查将被插入到生成的可执行文件中,如果在不兼容的处理器上运行,此文件将停止该应用。这将帮助您快速发现不用于所运行的处理器的程序,有可能避免出现非法指令错误。为使这一检查行为有效,包含主程序或动态库主函数的的源文件应该使用此选项进行编译。

  4. <code> 值可能的位置:

    CORE-AVX2 可能为英特尔® 处理器生成英特尔® AVX2、英特尔® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。面向未来的英特尔处理器进行优化。
    CORE-AVX-I
    core-avx-i
    可能为英特尔® 处理器生成英特尔® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令,包括针对第三代英特尔® 酷睿™ 处理器的指令。针对第三代英特尔® 酷睿™ 处理器进行优化。
    AVX 可能为英特尔® 处理器生成英特尔® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。针对第二代英特尔® 酷睿™ i7、i5 和 i3 处理器家族,以及英特尔® 至强® 处理器 E5 和 E3 家族进行优化。
    SSE4.2 可能为英特尔® 处理器生成英特尔® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。针对第二代英特尔® 酷睿™ i7、i5 和 i3 处理器家族,英特尔® 至强® 55XX、56XX 和 75XX 系列,以及英特尔® 至强® 处理器 E7 家族进行优化。
    SSE4.1 可能为英特尔® 处理器生成英特尔® SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。针对 45 纳米高-k 新一代英特尔® 酷睿™ 微架构进行优化。
    SSSE3 可能为英特尔® 处理器生成英特尔® SSSE3、SSE3、SSE2 和 SSE 指令。针对英特尔® 酷睿™ 微架构进行优化。-xssse3 是 Mac OS* X 上英特尔® 64 编译器的默认值。
    SSE3_ATOM 可能为英特尔® 处理器生成英特尔® SSSE3、SSE3、SSE2 和 SSE 指令。针对英特尔® 凌动™ 处理器家族和英特尔® 迅驰® 凌动™ 处理器技术进行优化。
    SSE3 可能生成英特尔® SSSE3、SSE2 和 SSE 指令。针对增强的奔腾 M 处理器微架构和英特尔® Netburst 微架构进行优化。-xssse3 是 Mac OS* X 上 IA-32 编译器的默认值。
    SSE2 可能生成英特尔® SSE2 和 SSE 指令。针对英特尔® Netburst 微架构而优化。

  5. 格式为 /Qax<code>(Windows*)(Linux* 或 Mac OS* X 上为 -ax<code>)的处理器调度选项允许生成多个英特尔® 处理器代码路径。处理器调度技术执行执行时间检查,以确定应用运行的处理器,并针对该处理器使用最适合的代码路径。兼容的非英特尔处理器将使用经过优化的默认代码路径。上述第 1. 和 2. 条介绍的交换可用于修改经过优化的默认代码路径。

  6. <code> 值可能的位置:

    CORE-AVX2 可能为英特尔® 处理器生成英特尔® AVX2、英特尔® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。
    CORE-AVX-I
    core-avx-i
    可能为英特尔® 处理器生成英特尔® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令,包括针对第三代英特尔® 酷睿™ 处理器的指令。
    AVX 可能为英特尔® 处理器生成英特尔® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。
    SSE4.2 可能为英特尔® 处理器生成英特尔® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。
    SSE4.1 可能为英特尔® 处理器生成英特尔® SSE4.1、SSSE3、SSE3、SSE2 和 SSE 指令。
    SSSE3 可能为英特尔® 处理器生成英特尔® SSSE3、SSE3、SSE2 和 SSE 指令。
    SSE3 可能为英特尔® 处理器生成英特尔® SSE3、SSE2 和 SSE 指令。
    SSE2 可能为英特尔® 处理器生成英特尔® SSE2 和 SSE 指令。

哪个特定处理器选项最适合我的处理器?

CORE-AVX2 未来的英特尔处理器
CORE-AVX-I 第三代英特尔® 酷睿™ i7 处理器
第三代英特尔® 酷睿™ i5 处理器
AVX 第二代英特尔® 酷睿™ i7 处理器
第二代英特尔® 酷睿™ i5 处理器
第二代英特尔® 酷睿™ i3 处理器
英特尔® 至强® 处理器 E5 家族
英特尔® 至强® 处理器 E3 家族
SSE4.2 上一代英特尔® 酷睿™ i7 处理器
上一代英特尔® 酷睿™ i5 处理器
上一代英特尔® 酷睿™ i3 处理器
英特尔® 至强® 55XX 系列
英特尔® 至强® 56XX 系列
英特尔® 至强® 75XX 系列
英特尔® 至强® 处理器 E7 家族
SSE4.1 英特尔® 至强® 74XX 系列
四核英特尔® 至强 54XX、33XX 系列
双核英特尔® 至强 52XX、31XX 系列
英特尔® 酷睿™ 2 至尊 9XXX 系列
英特尔® 酷睿™ 2 四核 9XXX 系列
英特尔® 酷睿™ 2 双核 8XXX 系列
英特尔® 酷睿™ 2 双核 E7200
SSSE3 四核英特尔® 至强® 73XX、53XX、32XX 系列
双核英特尔® 至强® 72XX、53XX、51XX、30XX 系列
英特尔® 酷睿™ 2 至尊 7XXX、6XXX 系列
英特尔® 酷睿™ 2 四核 6XXX 系列
英特尔® 酷睿™ 2 双核 7XXX(不包括 E7200)、6XXX、5XXX、4XXX 系列
英特尔® 酷睿™ 2 单核 2XXX 系列
英特尔® 奔腾® 双核处理器 E2XXX、T23XX 系列
SSE3_ATOM 英特尔® 凌动™ 处理器
SSE3 双核英特尔® 至强® 70XX、71XX、50XX 系列
双核英特尔® 至强® 处理器(ULV 和 LV)1.66、2.0、2.16
双核英特尔® 至强® 2.8
支持 SSE3 指令集的英特尔® 至强® 处理器
英特尔® 酷睿™ 双核
英特尔® 酷睿™ 单核
英特尔® 奔腾® 双核处理器 T21XX、T20XX 系列
英特尔® 奔腾® 处理器至尊版
英特尔® 奔腾® D
支持 SSE3 指令集的英特尔® 奔腾® 4 处理器
SSE2(default) 英特尔® 至强® 处理器
英特尔® 奔腾® 4 处理器
英特尔® 奔腾® M
IA32 英特尔® 奔腾® III 处理器
英特尔® 奔腾® II 处理器
英特尔® 奔腾® 处理器


默认定位的是哪路处理器?

  • 在运行 Windows* 的 IA-32 系统上,默认开启 /arch:SSE2。在运行 Linux* 的 IA-32 系统上,默认开启 -msse2。生成的代码路径应在以下服务器上运行:支持 SSE2 的英特尔奔腾 4 和英特尔至强处理器,以及其他支持 SSE2 的较新版本英特尔处理器或兼容的非英特尔处理器。
  • 在运行 Mac OS* X 的 IA-32 系统上,默认开启 -xSSE3。编译器可能生成 SSE3、SSE2 和 SSE 指令,代码针对增强的奔腾 M 处理器微架构进行优化。
  • 在运行 Mac OS* X 的英特尔 64 系统上,默认开启 -xSSE3。编译器可能生成 SSSE3、SSE3、SSE2 和 SSE 指令,代码针对英特尔® 酷睿™ 微架构进行优化。

要定位不支持 SSE2 指令的较早 IA-32 系统(如基于英特尔® 奔腾® III 处理器系统),请使用交换 /arch:ia32 (Windows*) 或 -mia32 (Linux*)。

有关其他较早版本处理器定位选项的信息,以及这些选项与上述推荐的选项的关系,请参阅
/en-us/articles/ia-32-and-intel64-processor-targeting-overview


其他常见问题
(后续文章)

 

优化声明

英特尔编译器针对非英特尔微处理器的优化程度可能与英特尔微处理器相同(或不同)。这些优化包括 SSE2、SSE3 和 SSSE3 指令集以及其它优化。对于在非英特尔制造的微处理器上进行的优化,英特尔不对相应的可用性、功能或有效性提供担保。该产品中依赖于处理器的优化仅适用于英特尔微处理器。部分非针对英特尔微体系架构的优化也为英特尔微处理器保留了下来。如欲了解更多有关本声明所涉及的特定指令集的信息,请参阅适用产品的“用户和参考指南”。

声明版本 #20110804

Para obter informações mais completas sobre otimizações do compilador, consulte nosso aviso de otimização.