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

时间:2018-03-07 17:05:06

标签: x86 sse instruction-set sse4

我正在开发一个需要SSSE3指令集的硬件平台。在查看IntelAtom®x5-Z8350等处理器时,datasheet表示它支持SSE4.1和SSE4.2。这是否允许为SSSE3指令编写的软件正常运行?

我认为这个问题与this问题略有不同,因为它从未明确表示SSE4是SSSE3的超集。它只说AVX是一个超集。

2 个答案:

答案 0 :(得分:5)

此答案仅适用于英特尔处理器。

首先,所有英特尔凌动处理器从最早的处理器到最新的处理器都支持SSSE3。英特尔手册第1.2.14节规定:

  

最初的英特尔凌动处理器系列以及后续产品包括英特尔凌动   处理器D2000,N2000,E2000,Z2000,C1000系列提供   以下功能:

     
      
  • ...
  •   
  • 支持指令集扩展,包括Supplemental Streaming SIMD Extensions 3(SSSE3)。
  •   
  • ...
  •   

此手册的表5-1说明:

  

SSSE3扩展程序:Intel Xeon处理器3xxx,5100,5200,5300,5400,   5500,5600,7300,7400,7500系列,Intel Core 2 Extreme处理器   QX6000系列,Intel Core 2 Duo,Intel Core 2 Quad处理器,Intel   奔腾双核处理器, Intel Atom处理器

这也与Wikipedia一致。

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

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

  

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

     
      
  • 检查处理器是否支持SSSE3(如果CPUID.01H:ECX.SSSE3 [bit 9] = 1)。
  •   

第12.12.2节还讨论了如何检查SSE4.1支持:

  

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

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

  

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

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

CAVEAT:尽管很难确定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 < strong>不必然意味着支持SSE3。我在手册中找不到任何能让我得出结论的内容。同时,我不知道任何支持SSSE3,SSE4.1或SSE4.2但不支持SSE3的处理器。

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

  

在兼容模式下,SSE3,SSSE3和SSE4的功能与它们相同   保护模式。在64位模式下,有8个额外的XMM寄存器   无障碍。使用REX前缀访问寄存器XMM8-XMM15。

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

  

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

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

答案 1 :(得分:0)

我认为,新处理器中的“支持”意味着“新”事物,而向后兼容性是强制性的,至少在英特尔领域如此-AMD可能有几处不同,因此OS代码中使用了最低公分母,如果真正有价值,则只能优化低级内核变体/路径。特殊/科学/实验/媒体软件可能会声明所需的处理器ISA(视频渲染,音频DSP FX等)