Izz*_*zzo 2 x86 simd instruction-set cpu-architecture vliw
SIMD(单指令多数据)和 VLIW(超长指令字)到底有什么区别?其中一个是另一个的子集吗?或者它们是两个完全不同的东西?
完全不相关且正交。一台机器可以有一个或两个,或者两者都没有。SIMD 指令可以作为扩展添加到 VLIW ISA。(但 VLIW 已融入机器代码格式和 ISA 中。)
VLIW 是一个块中的多个指令,要一起解码,并在不检查它们之间的危险/依赖关系的情况下执行:编译器需要这样做,因此 VLIW 的想法是卸载一些寻找指令级并行性(ILP)的工作) 给编译器。
最知名的例子之一是 Intel/HP 的 Itanium ISA。 https://www.realworldtech.com/mckinley/介绍了有关它的一些详细信息,以及第一代 Merced 微架构(不是很好)。 https://www.realworldtech.com/ev8-mckinley/5/了解有关第二代微架构 McKinley 的更多详细信息。
VLIW 是提供某些 MIMD 功能(对多个数据执行多条指令,对不同数据执行不同操作)的一种方式。
SIMD 是一条指令,对多个数据元素执行相同的操作,因此通过 CPU 管道在每个时钟周期获得更多工作只需要扩大执行单元,而不是整个管道。(单指令,多数据。)大量数据并行性的问题可以同时以 SIMD、ILP 和线程级并行性的形式向 CPU 公开。
(例如,矩阵乘法或点积使用多个累加器创建单独的依赖链 (ILP),其中每个累加器是 4、8 或 16 个浮点数 (SIMD) 的向量。并且您可以将其工作分配到多个内核,因此例如,您可以在 Skylake 或 Zen2 上每个内核的每个时钟上获得 2x 8 个 FMA。)