X86 支持SSE4的处理器是否支持SSSE3指令?

X86 支持SSE4的处理器是否支持SSSE3指令?,x86,sse,instruction-set,sse4,X86,Sse,Instruction Set,Sse4,我正在开发一个需要SSSE3指令集的硬件平台。当查看诸如Intel Atom x5-Z8350之类的处理器时,会发现它支持SSE4.1和SSE4.2。这是否允许为SSSE3指令编写的软件正常工作 我相信这个问题和这个问题略有不同,因为它从来没有明确地说SSE4是SSSE3的超集。它只是说AVX是一个超集。这个答案只适用于英特尔处理器 首先,从最早的到最近的所有Intel Atom处理器都支持SSSE3。《英特尔手册》第1.2.14节规定: 最初的Intel Atom处理器系列和包括Intel A

我正在开发一个需要SSSE3指令集的硬件平台。当查看诸如Intel Atom x5-Z8350之类的处理器时,会发现它支持SSE4.1和SSE4.2。这是否允许为SSSE3指令编写的软件正常工作


我相信这个问题和这个问题略有不同,因为它从来没有明确地说SSE4是SSSE3的超集。它只是说AVX是一个超集。

这个答案只适用于英特尔处理器

首先,从最早的到最近的所有Intel Atom处理器都支持SSSE3。《英特尔手册》第1.2.14节规定:

最初的Intel Atom处理器系列和包括Intel Atom在内的后续各代处理器 处理器D2000、N2000、E2000、Z2000、C1000系列提供 以下特点:

  • 支持指令集扩展,包括补充数据流单指令多数据扩展指令集3(SSSE3)
手册的表5-1也说明:

SSSE3扩展:英特尔至强处理器3xxx、5100、5200、5300、5400、, 5500560073007400 7500系列英特尔酷睿2极限处理器 QX6000系列,英特尔酷睿2双核处理器,英特尔酷睿2四处理器,英特尔 奔腾双核处理器,英特尔Atom处理器

这也符合我的看法

我不确定手册是否明确指出,如果支持SSE4,则支持SSSE3,但我们可以推导出这一点

第12.7.3节讨论了如何检查SSSE3支持:

在应用程序尝试使用SSSE3扩展之前 应用程序应遵循第11.6.2节中说明的步骤, “检查SSE/SSE2支持。”接下来,使用附加步骤 提供如下:

  • 检查处理器是否支持SSSE3(如果CPUID.01H:ECX.SSSE3[位9]=1)
第12.12.2节还讨论了如何检查SSE4.1支持:

检查处理器是否支持SSE4.1(如果CPUID.01H:ECX.SSE4_1[位 19] =1)、SSE3(如果CPUID.01H:ECX.SSE3[位0]=1)、和SSSE3(如果 CPUID.01H:ECX.SSSE3[位9]=1)

最后,第12.12.3节讨论了如何检查SSE4.2支持:

检查处理器是否支持SSE4.2(如果CPUID.01H:ECX.SSE4_2[bit 20] =1)、SSE4.1(如果CPUID.01H:ECX.SSE4_1[位19]=1)、和SSSE3(如果 CPUID.01H:ECX.SSSE3[位9]=1)

如您所见,SSE4.1和SSE4.1都需要对SSSE3的支持。我们还可以得出结论,SSSE3需要对SSE2的支持

警告:这很可能会在未来继续保持,尽管很难确定100%。

然而,一个有趣的观察结果是,当将支持SSSE3的处理器列表与支持SSE4.1和SSE4.2的处理器列表(表5-1和表5-2)进行比较时,只有一个处理器,即Intel Core i7 965处理器,在SSE4.2列表中,但不在SSSE3列表中,而该处理器实际上支持SSSE3。不确定这是否是手册中的错误,或者更可怕的是,它是不完整的

另一个有趣的观察结果是,对于Atom以外的处理器(参见上文第1.2.14节中的引用),似乎支持SSSE3、SSE4.1或SSE4.2并不一定意味着支持SSE3。我在手册中找不到任何能让我得出这个结论的东西。同时,我不知道有哪个处理器支持SSSE3、SSE4.1或SSE4.2,但不支持SSE3

第12.1.1节规定了SSSE3中可用的寄存器:

在兼容模式下,SSE3、SSSE3和SSE4的功能与中的相同 保护模式。在64位模式下,需要另外八个XMM寄存器 可到达的使用REX前缀访问寄存器XMM8-XMM15

第12.7.1节讨论了操作系统对SSSE3的支持:

确保您的操作系统支持SSE/SSE2/SSE3/SSSE3 扩展。(对SSE扩展的操作系统支持意味着 对SSE2、SSE3和SSSE3的充分支持。


因此,任何需要SSE的操作系统都会自动支持SSSE3。

我认为,在新处理器中,“支持”意味着“新”的东西,而向后兼容性是强制性的,至少在英特尔领域是如此——AMD的情况可能很少有不同,然后,在操作系统代码中使用最低公分母,只有低级别的内核变体/路径可以优化,如果它真的值得的话。特殊/科学/实验/媒体软件可能会说明处理器需要ISA(视频渲染、音频DSP FX等)

是………有任何来源或参考资料吗?我认为对所有英特尔CPU都是如此,但也有AMD例外。我脑子里没有任何参考资料。但就曾经存在的实际处理器而言:SSE4.1意味着从MMX到SSSE3的一切。(除了SSE3中AMD没有实现的几个例外)SSE4a是AMD的东西,它只意味着通过SSE3向上。IIRC,第一个使用SSE4a的AMD处理器不支持SSSE3。