为什么英特尔不以更兼容或通用的方式设计其SIMD ISA?

thi*_*rry 6 intel simd avx avx2 avx512

英特尔拥有多个SIMD ISA,如Xeon Phi上的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位上.有些口味没有得到广泛支持.例如,Xeon Phi无法处理打包的8位值.然而,Skylake将拥有此功能.

为什么英特尔以这种不一致的方式改变其SIMD内在函数?

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

hay*_*sti 9

我看到三倍的原因.

(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指令不适用于PC的常规SkyLake处理器,只有用于服务器的SkyLake Xeon处理器以及用于HPC的Xeon Phi.我可以理解这一点,因为CD扩展的目标是并行直方图生成; 这种情况更可能是服务器/ HPC中的关键热点,而不是通用PC.

我确实同意这有点乱.英特尔正在开始看到了光明和规划额外的扩展更好; 据推测,AVX-512可以在下一代中扩展到1024位.不幸的是,它仍然不够好,Agner Fog 在英特尔论坛上对此进行了讨论.

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

  • @PeterCordes他们中的许多都有复杂的管道,例如Alpha EV8,Cray BlackWidow和NEX SX-ACE CPU.我知道Alpha矢量扩展的设计者之一和英特尔Larrabee(Roger Espasa)仍然认为采用类似矢量的支持是增长SIMD扩展的唯一可持续方式.他一直在争论矢量扩展代替多媒体扩展[相当长一段时间](http://goo.gl/sz6xR8).当然,矢量方法会继承其自身的一系列问题,但如果英特尔在其ISA添加中有更多意外情况,则可以减轻其中的许多问题. (3认同)
  • [SkyLake PC处理器甚至不会有AVX512](http://www.kitguru.net/components/cpu/anton-shilov/intel-skylake-processors-for-pcs-will-not-support-avx-512-指令/) (2认同)
  • 也许他们想给 AMD 一个追赶的机会。 (2认同)
  • @PeterCordes KNL上的一些粗略延迟数字已经出局.看起来单操作数置换是1 /循环,而双操作数置换是0.5 /循环.KNL有两个VPU,似乎只有其中一个有shuffle支持.并且双操作数置换为2 uops.但不能说这对Skylake来说意味着什么.桌面系列总是有3个VPU.(第三个拥有所有的权利) - 无论如何,看到消费者获得KNL是多么困难,可能需要一段时间才能让Agner获得他的数据. (2认同)