我在网上搜索了intel Software manual。但我无法确认所有英特尔64架构是支持SSSE3还是SSE4.1或SSE4.2或AVX等。这样我就能在程序中使用最少的SIMD支持指令。请帮忙。
答案 0 :(得分:22)
x64本机(AMD64或Intel 64)处理器仅被授权支持SSE和SSE2。
SSE3由Intel Pentium 4处理器(“Prescott”),AMD Athlon 64(“版本E”),AMD Phenom和更高版本的处理器提供支持。这意味着大多数(但不是全部)支持x64的CPU应该支持SSE3。
英特尔酷睿2双核,英特尔酷睿i7 / i5 / i3,英特尔凌动,AMD推土机,AMD山猫及后续处理器均支持补充SSE3(SSSE3)。
英特尔酷睿2(“Penryn”),英特尔酷睿i7(“Nehalem”),英特尔凌动(Silvermont核心),AMD推土机,AMD捷豹及后续处理器均支持SSE4.1。
英特尔酷睿i7(“Nehalem”),英特尔凌动(Silvermont核心),AMD推土机,AMD捷豹及其后续处理器均支持SSE 4.1和SSE4.2。
AVX由英特尔“Sandy Bridge”,AMD Bulldozer,AMD Jaguar及其后续处理器提供支持。
请参阅this blog series。
具有x64本机支持但没有SSE3支持的CPU将成为“第一代”64位,由于CMPXCHG16b,PrefetchW和LAHF / SAHF的要求,Windows 8.1 x64本机不支持该版本。所以在实践中SSE3很可能在新机器中使用。 SSSE3或更高版本更具限制性,具体取决于您的目标人群。例如,Valve Hardware Survey使SSE4.1为77%,SSE 4.2为72%(任何来自AMD或Intel的SSE4.1都将具有SSE3和SSSE3)。
答案 1 :(得分:0)
我一直试图解决这个问题,因为未能使用 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 系统调用nx pdpe1gb pdcfctm rdtscpmon 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