SIMD 和 VLIW 指令是一回事吗?

Are SIMD and VLIW instructions the same thing?

SIMD(单指令多数据)和VLIW(超长指令字)到底有什么区别?一个是另一个的子集吗?或者它们是两个完全不同的东西?

完全不相关且正交。一台机器可以有一个或两个,或两者都没有。 SIMD 指令可以作为扩展添加到 VLIW ISA。 (但 VLIW 已融入机器代码格式和 ISA。)

VLIW 是一个块中的多条指令一起解码,并且在不检查它们之间的危险/依赖性的情况下执行:编译器需要这样做,所以 VLIW 的想法是将寻找指令级并行性 (ILP) 的部分工作卸载给编译器。
最著名的例子之一是 Intel/HP 的 Itanium ISA。 https://www.realworldtech.com/mckinley/ covers some details about it, and the first-gen Merced microarchitecture (which wasn't very good). 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。)