我正在开发一个需要SSSE3指令集的硬件平台。在查看IntelAtom®x5-Z8350等处理器时,datasheet表示它支持SSE4.1和SSE4.2。这是否允许为SSSE3指令编写的软件正常运行?
我认为这个问题与this问题略有不同,因为它从未明确表示SSE4是SSSE3的超集。它只说AVX是一个超集。
答案 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等)