支持 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 等)
我正在开发一个需要 SSSE3 指令集的硬件平台。在查看 Intel Atom® x5-Z8350 等处理器时,datasheet 表示它支持 SSE4.1 和 SSE4.2。这会允许为 SSSE3 指令编写的软件运行吗?
我认为这个问题与
此答案仅适用于英特尔处理器。
首先,所有 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 等)