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

Does a processor that supports SSE4 support SSSE3 instructions?

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

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

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

首先,所有 Intel Atom 处理器,从最早的到最新的都支持 SSSE3。英特尔手册第 1.2.14 节指出:

The initial Intel Atom Processor family and subsequent generations including Intel Atom processor D2000, N2000, E2000, Z2000, C1000 series provide the following features:

  • ...
  • Support for instruction set extensions up to and including Supplemental Streaming SIMD Extensions 3 (SSSE3).
  • ...

还有 Table 手册中的 5-1:

SSSE3 Extensions: Intel Xeon processor 3xxx, 5100, 5200, 5300, 5400, 5500, 5600, 7300, 7400, 7500 series, Intel Core 2 Extreme processors QX6000 series, Intel Core 2 Duo, Intel Core 2 Quad processors, Intel Pentium Dual-Core processors, Intel Atom processors.

这也符合Wikipedia

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

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

Before an application attempts to use the SSSE3 extensions, the application should follow the steps illustrated in Section 11.6.2, “Checking for SSE/SSE2 Support.” Next, use the additional step provided below:

  • Check that the processor supports SSSE3 (if CPUID.01H:ECX.SSSE3[bit 9] = 1).

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

Check that the processor supports SSE4.1 (if CPUID.01H:ECX.SSE4_1[bit 19] = 1), SSE3 (if CPUID.01H:ECX.SSE3[bit 0] = 1), and SSSE3 (if CPUID.01H:ECX.SSSE3[bit 9] = 1).

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

Check that the processor supports SSE4.2 (if CPUID.01H:ECX.SSE4_2[bit 20] = 1), SSE4.1 (if CPUID.01H:ECX.SSE4_1[bit 19] = 1), and SSSE3 (if CPUID.01H:ECX.SSSE3[bit 9] = 1).

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

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

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

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

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

In compatibility mode, SSE3, SSSE3, and SSE4 function like they do in protected mode. In 64-bit mode, eight additional XMM registers are accessible. Registers XMM8-XMM15 are accessed by using REX prefixes.

第 12.7.1 节讨论了 OS 对 SSSE3 的支持:

Ensure that your operating system supports SSE/SSE2/SSE3/SSSE3 extensions. (Operating system support for the SSE extensions implies sufficient support for SSE2, SSE3, and SSSE3.)

所以任何需要 SSE 的 OS 自动支持 SSSE3。

我认为 "supports" 在新处理器中意味着 "the new" 的东西,而向后兼容性是强制性的,至少在 Intel 领域 - 对于 AMD 来说几乎没有什么不同,那么最小的公分母是在 OS 代码中使用,只有低级内核 variants/paths 可以优化,如果它真的值得的话。 Special/scientific/experimental/media 软件可能声明需要处理器 ISA(视频渲染、音频 DSP FX 等)