6

英特尔在 Xeon Phi 上有多个 SIMD ISA,例如 SSE、AVX、AVX2、AVX-512 和 IMCI。这些 ISA 在不同的处理器上受支持。例如,AVX-512 BW、AVX-512 DQ 和 AVX-512 VL 仅在 Skylake 上受支持,而在 Xeon Phi 上不支持。Skylake 和 Xeon Phi 均支持 AVX-512F、AVX-512 CDI、AVX-512 ERI 和 AVX-512 PFI。

为什么英特尔不设计一种更通用的 SIMD ISA,可以在其所有高级处理器上运行?

此外,英特尔在开发 ISA 时删除了一些内在函数并添加了新的。很多内在函数有很多风格。例如,有些工作在压缩的 8 位上,而有些工作在压缩的 64 位上。有些口味没有得到广泛支持。例如,至强融核将无法处理压缩的 8 位值。然而,Skylake 将拥有这个。

为什么英特尔会以如此不一致的方式更改其 SIMD 内在函数?

如果 SIMD ISA 彼此更兼容,则现有的 AVX 代码可以更轻松地移植到 AVX-512。

4

2 回答 2

10

我认为原因是三倍。

(1)当他们最初设计MMX 时,他们的工作区域非常小,因此尽可能简单。他们还以与现有 x86 ISA 完全兼容的方式进行操作(精确中断 + 上下文切换时的一些状态保存)。他们没有预料到他们会不断扩大 SIMD 寄存器的宽度并添加如此多的指令。每一代当他们添加更宽的 SIMD 寄存器和更复杂的指令时,他们都必须维护旧的 ISA 以实现兼容性。

(2)您在 AVX-512 上看到的这个奇怪的事情是因为他们试图统一两条不同的产品线。Skylake 来自英特尔的 PC/服务器系列,因此它们的路径可以看作是 MMX -> SSE/2/3/4 -> AVX -> AVX2 -> AVX-512。Xeon Phi 基于使用LRBni指令集的名为 Larrabee 的 x86 兼容显卡。这或多或少与 AVX-512 相同,但指令较少且与 MMX/SSE/AVX/etc 不正式兼容...

(3)他们针对不同的人群有不同的产品。例如,(据我所知)AVX-512 CD 指令在用于 PC 的常规 SkyLake 处理器中不可用,仅在用于服务器的 SkyLake Xeon 处理器以及用于 HPC 的 Xeon Phi 中可用。我可以在一定程度上理解这一点,因为 CD 扩展是针对诸如并行直方图生成之类的东西;这种情况更可能是服务器/HPC 中的关键热点,而不是通用 PC。

我同意这有点混乱。英特尔开始看到曙光,并为进一步的扩张做出了更好的规划据称,AVX-512 已准备好在下一代扩展到 1024 位。不幸的是,它仍然不够好,Agner Fog在英特尔论坛上对此进行了讨论

对我来说,我希望看到一个无需用户每次都重新编译代码即可升级的模型。例如,与其在 ISA 中将 AVX 寄存器定义为 512 位,不如将其作为存储在微体系结构中的参数,并可由程序员在运行时检索。用户问这台机器上可用的最大 SIMD 宽度是多少?,架构返回XYZ,并且用户具有通用控制流来应对任何XYZ情况。这将比当前对每个可能的 SIMD 版本使用相同功能的多个版本的技术更清洁和可扩展。:-/

于 2015-07-13T10:02:58.200 回答
1

Xeon 和 Xeon Phi 之间存在 SIMD ISA 融合,最终它们可能会变得相同。我怀疑你是否会在整个英特尔 CPU 产品线中获得相同的 SIMD ISA - 请记住,它从小型 Quark SOC 延伸到 Xeon Phi。在 AVX-1024 从 Xeon Phi 迁移到 Quark 或低端 Atom CPU 之前,还有很长的时间,可能是无限的。

为了在不同的 CPU 系列(包括未来的系列)之间获得更好的可移植性,我建议您使用比纯 SIMD 指令或内在函数更高级别的概念。使用 OpenCL、OpenMP、Cilk Plus、C++ AMP 和自动矢量化编译器。很多时候,他们会很好地为您生成特定于平台的 SIMD 指令。

于 2015-08-06T01:39:45.460 回答