所有 64 位英特尔架构都支持 SSSE3/SSE4.1/SSE4.2 指令吗?

Do all 64 bit intel architectures support SSSE3/SSE4.1/SSE4.2 instructions?

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

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

SSE3 受 Intel Pentium 4 处理器(“Prescott”)、AMD Athlon 64(“revision E”)、AMD Phenom 和更高版本的处理器支持。这意味着大多数(但不是全部)支持 x64 的 CPUs 应该支持 SSE3。

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

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

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

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

this blog series

具有 x64 本机支持但不支持 SSE3 的 CPU 将是 'first-generation' 64 位,由于以下要求,Windows 8.1 x64 本机不支持CMPXCHG16b、PrefetchW 和 LAHF/SAHF;所以在实践中,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%,这非常好,但仍然可能阻碍游戏在没有后备路径的情况下依赖。 Intel“Haswell”、AMD Excavator 和更高版本的处理器支持 AVX2。参见 this blog post

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

我一直在想办法解决这个问题,因为无法使用 SSE 编译第三方软件。我发现这可能有帮助:

cat /proc/cpuinfo

然后注意标志部分

标志: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 系统调用 nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor 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