为什么英特尔不以更兼容、通用的方式设计其SIMD指令集架构?

6

英特尔有几种SIMD指令集,例如SSE、AVX、AVX2、AVX-512和Xeon Phi上的IMCI。这些指令集适用于不同的处理器。例如,AVX-512 BW、AVX-512 DQ和AVX-512 VL仅支持Skylake处理器,而不支持Xeon Phi。AVX-512F、AVX-512 CDI、AVX-512 ERI和AVX-512 PFI则支持Skylake和Xeon Phi两种处理器。

为什么英特尔不设计一种更通用的SIMD指令集,可以在所有先进的处理器上运行?

此外,在开发指令集时,英特尔会删除一些内部函数并添加新的内部函数。许多内部函数有许多变体。例如,一些内部函数适用于打包的8位,而一些内部函数适用于打包的64位。某些变体得到的支持不广泛。例如,Xeon Phi将无法处理打包的8位值,但Skylake可以。

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

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


例如,AVX-512 BW、AVX-512 DQ和AVX-512 VL只支持Skylake以外的平台。这是错误的,Skylake不支持AVX-512。 - Amiri
1
@Martin:令人困惑的是,AVX-512可用于Skylake Xeon(又称Skylake X,又称Purley),但不适用于原始的Skylake消费级CPU。 - Paul R
@PaulR,是的,SKL Xeon确实支持AVX-512,我也发现了一些支持AVX-512的Core i7和Core i9。但是,我的SKL不支持...corei7 6700hq\ - Amiri
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基于一个名为Larrabee的x86兼容图形卡,该卡使用LRBni指令集。这与AVX-512基本相同,但指令更少,且未与MMX / SSE / AVX等官方兼容。

(3) 他们为不同的人群提供不同的产品。例如,(据我所知)AVX-512 CD指令将不会在普通SkyLake处理器中提供,只会在用于服务器的SkyLake Xeon处理器和用于HPC的Xeon Phi中提供。我可以理解这一点,因为CD扩展针对的是诸如并行直方图生成之类的事情; 这种情况在服务器/HPC中更可能成为关键热点,而不是在通用PC中。

我同意这有点混乱。英特尔开始看到曙光并计划更好地扩展;AVX-512据说已经准备好在未来的一代中扩展到1024位。不幸的是,它仍然不够好,Agner Fog在Intel论坛上讨论了这个问题
对我来说,我希望看到一个可以升级的模型,而不需要用户每次重新编译代码。例如,不要将AVX寄存器定义为ISA中的512位,而应该将其作为存储在微架构中的参数,并在运行时可由程序员检索。用户询问“此机器上可用的最大SIMD宽度是多少?”,架构返回“XYZ”,用户具有通用控制流以处理任何“XYZ”。这比当前技术使用多个可能的SIMD版本的相同函数的方法更清洁和可扩展。:-/

2
Skylake PC处理器甚至不支持AVX512指令。 - Z boson
2
也许他们想给AMD一个追赶的机会。 - Z boson
3
许多处理器都有复杂的流水线,比如Alpha EV8、Cray BlackWidow和NEX SX-ACE CPU。我知道Alpha向量扩展和英特尔Larrabee(Roger Espasa)的其中一位设计师仍然认为采用类似向量的支持是可持续增加SIMD扩展的唯一方式。他已经在相当长的时间里主张使用向量扩展来代替多媒体扩展。当然,向量方法也会面临其自身一系列问题,但如果英特尔在ISA添加方面更具备应变能力,就可以缓解这些问题。 - hayesti
1
@PeterCordes "256字节"洗牌即将在AVX512-VBMI中推出。是的,具有64字节向量的完整双操作数字节粒度洗牌。如果这个东西具有单周期吞吐量,那么我想知道他们需要投入多少面积来容纳那么多的128到1 MUX。我敢打赌,有一个我不知道的更简单的设计,不需要N ^ 2 log(N)个晶体管。 - Mysticial
2
@PeterCordes KNL 的一些粗略延迟数字已经出来了。看起来单操作数的 permute 每个周期可以执行 1 次,而双操作数的 permute 则是每个周期 0.5 次。KNL 有两个 VPUs,似乎只有其中一个支持 shuffle。而双操作数的 permute 是 2 个微操作。不过对于 Skylake 来说还不能确定这意味着什么。桌面系列一直有 3 个 VPUs(第三个拥有所有 permutes)。- 无论如何,考虑到消费者很难获得 KNL,Agner 可能要等一段时间才能得到他的数据。 - Mysticial
显示剩余15条评论

1

Xeon和Xeon Phi之间存在SIMD指令集收敛,最终它们可能会变得相同。我怀疑你永远不会在整个英特尔CPU系列中获得相同的SIMD指令集 - 请记住,它从小型Quark SOC延伸到Xeon Phi。可能需要很长时间,甚至是无限的时间,AVX-1024才能从Xeon Phi迁移到Quark或低端Atom CPU。

为了在不同的CPU系列之间获得更好的可移植性,包括未来的CPU系列,我建议您使用比裸机SIMD指令或Intrinsics更高层次的概念。使用OpenCL、OpenMP、Cilk Plus、C++ AMP和自动向量化编译器。通常情况下,它们会很好地为您生成特定平台的SIMD指令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接