【问题标题】:Do all 64 bit intel architectures support SSSE3/SSE4.1/SSE4.2 instructions?所有 64 位英特尔架构都支持 SSSE3/SSE4.1/SSE4.2 指令吗?
【发布时间】:2015-03-26 23:23:32
【问题描述】:

我确实在网上搜索过 intel Software manual 。但我无法确认所有英特尔 64 架构是否支持最高 SSSE3 或最高 SSE4.1 或最高 SSE4.2 或 AVX 等。这样我就可以在我的程序中使用最少的 SIMD 支持指令。请帮忙。

【问题讨论】:

  • 我认为这可能是正确的(仅适用于 SSSE3),但要注意 AMD64,它通常没有 SSSE3。
  • 英特尔第一代 Core2(merom/conroe 来自 2006 年)具有 SSSE3。 AMD PhenomII (k10) 是最新的没有 SSE3 / SSSE3 的微架构。如果您正在执行运行时 CPU 检测以启用矢量化函数,您可能不会费心手写带有内部函数的 SSE2 版本,例如,可能只有 SSSE3 和 AVX 版本。如果 SSE4.1 中的任何内容对您的代码有很大帮助(例如 32 位整数),您也可以为没有 AVX 的 SSE4.1 制作一个版本(用于 Penryn/Nehalem/Silvermont 和残缺的 Pentium/Celeron SnB 系列 CPU(AVX 已禁用) ).)

标签: x86-64 intel cpu-architecture simd


【解决方案1】:

x64 本机(AMD64 或 Intel 64)处理器仅被强制要求支持 SSE 和 SSE2。

英特尔奔腾 4 处理器(“Prescott”)、AMD Athlon 64(“修订版 E”)、AMD Phenom 和更高版本的处理器支持 SSE3。这意味着大多数(但不是全部)支持 x64 的 CPU 应该支持 SSE3。

Intel Core 2 Duo、Intel Core i7/i5/i3、Intel Atom、AMD Bulldozer、AMD Bobcat 和更高版本的处理器支持补充 SSE3 (SSSE3)。

英特尔酷睿 2(“Penryn”)、英特尔酷睿 i7(“Nehalem”)、英特尔凌动(Silvermont 核心)、AMD Bulldozer、AMD Jaguar 和更高版本的处理器支持 SSE4.1。

英特尔酷睿 i7(“Nehalem”)、英特尔凌动(Silvermont 核心)、AMD Bulldozer、AMD Jaguar 和更高版本的处理器支持 SSE 4.1 和 SSE4.2。

英特尔“Sandy Bridge”、AMD Bulldozer、AMD Jaguar 和更高版本的处理器支持 AVX。

this blog series

具有 x64 本机支持但不支持 SSE3 的 CPU 将是“第一代”64 位,由于 CMPXCHG16b、PrefetchW 和 LAHF/SAHF 的要求,Windows 8.1 x64 本机不支持该 CPU;所以在实践中,SSE3 很可能出现在较新的机器上。 SSSE3 或更高版本的限制性更强,具体取决于您的目标对象。例如,Valve Hardware Survey 使 SSE4.1 为 77%,SSE 4.2 为 72%(AMD 或 Intel 的任何具有 SSE4.1 的产品也将具有 SSE3 和 SSSE3)。

更新:根据下面的评论,根据 Valve 调查,PC 游戏玩家对 SSE3 的支持现在是 100%。 SSSE3、SSE4.1 和 SSE4.2 都在 97-98% 范围内。 AVX 约占 92%——索尼和微软的当前一代游戏机通过 AVX 支持。 AVX 的主要价值是您可以使用/arch:AVX 开关,它允许all SSE 代码生成使用3 操作数VEX 前缀,这使得寄存器调度更有效。见this blog post

AVX2 接近 75%,这非常好,但仍可能成为游戏依赖而没有后备路径的阻碍。英特尔“Haswell”、AMD Excavator 和更高版本的处理器支持 AVX2。见this blog post

ARM 上的 Windows:请注意,ARM64 上的 Windows 的 x86 仿真仅支持最高 SSE4.1,而 Windows 11 中的 x64 仿真仅支持最高 SSE 4.2。这些平台不支持 AVX/AVX2。

【讨论】:

  • Sandy Bridge 和 Haswell 的 Celeron 和 Pentium 处理器不支持 AVX(或 AVX2)。我认为 Atom 处理器也不支持 AVX
  • 这个答案至今已有 5 年的历史。当前的 Steam 硬件调查列出 SSE3 为 100%、补充 SSE3 为 98.61%、SSE4.1 为 97.94% 和 SSE4.2 为 97.25%。
  • 请注意,不幸的是,全新的奔腾和赛扬 CPU 仍然不支持 AVX(或 BMI1 / BMI2,因为(?)它们还包括 VEX 编码指令),因此 8% 不仅仅是旧机器。例如Pentium® Gold G6600(于 2020 年第二季度推出,Comet Lake uarch)只有 SSE4.2。一些预算有限的游戏玩家可能会购买非常便宜的 CPU,并在 GPU 上花费更多。
  • SSE4.2-without-AVX 的另一部分是老旧的 Nehalem 机器,可能还有一些低功耗的 Silvermont 系列上网本或微型台式机。 TL:DR: 要求 AVX 可以排除一些全新的机器,这会让一些人不高兴,因为他们可能不是 CPU 架构专家,并且会责怪你,而不是英特尔向他们出售残缺的 CPU .
【解决方案2】:

我一直试图解决这个问题,因为未能使用 SSE 编译第三方软件。我发现这可能会有所帮助:

cat /proc/cpuinfo

然后注意flags部分

标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpu dtes64监视ds_cpl VMX SMX EST TM2 SSSE3 SDBG FMA CX16 xtpr PDCM PCID DCA sse4_1 sse4_2 x2apic movbe POPCNT tsc_deadline_timer AES XSAVE AVX F16C rdrand lahf_lm ABM cpuid_fault EPB invpcid_single PTI intel_ppin SSBD IBRS ibpb stibp tpr_shadow vnmi FlexPriority可EPT VPID ept_ad fsgsbase tsc_adjust BMI1 AVX2 SMEP bmi2 ERMS invpcid cqm xsaveopt cqm_llc cqm_occup_llc dtherm ida arat pln pts md_clear flush_l1d

我可以看到:

sse4_1 sse4_2

如果您尝试编写一些代码来自动检测这一点,以下可能会很有用:

cat /proc/cpuinfo | grep flags | uniq | sed 's/.\+: //' | tr ' ' '\n' | grep -o "sse.*"
sse
sse2
sse3
sse4_1
sse4_2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 2020-06-30
    • 2019-11-12
    • 2018-08-15
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多