SIMD(单个指令多个数据)和VLIW(非常长的指令词)到底有什么区别?一个是另一个子集吗?还是它们是两个完全不同的事情?
完全无关,正交。 一台机器可以具有一个或两者,也可以两者都有。 可以将SIMD指令添加到VLIW ISA中作为扩展名。 (但是VLIW被烘烤到机器代码格式和ISA。)
VLIW是一个块中的多个说明,要一起解码,并执行没有检查它们之间的危害 /依赖项:需要编译器来执行此操作,因此VLIW的想法是卸载一些查找指令级别的工作编译器的并行性(ILP)。
最著名的例子之一是Intel/HP的Itanium Isa。
https://www.realworldtech.com/mckinley/涵盖了一些有关它的细节,以及第一基督的Merced Microharchitection(这不是很好)。 https://www.realworldtech.com/ev8-mckinley/5/5有更多有关第二基因微体系结构的详细信息,麦金莱。
VLIW是提供一些MIMD功能的一种方法(多个数据上的多个指令,对不同的数据做不同的事情。)
(例如,使用多个累加器创建单独的依赖链(ILP)的矩阵乘或点乘积,其中每个蓄能器是4、8或16浮子的向量(SIMD)。因此,您可以在Skylake或Zen2上获得每个时钟的2x 8 FMA。)
SIMD和VLIW是两个不同的并行计算体系结构。 这是细节:
SIMD(单个指令多个数据):vliw(非常长的指令词):
vliw允许在单个长指令词中对多个独立操作进行编码。编译器决定可以并行执行哪些操作。用于数字信号处理器(DSP)和一些通用处理器,以改善指导级并行性。 例如:VLIW处理器可以通过将它们编码为一个长指令来在单个时钟周期中执行多个算术和内存操作。它们是平行计算的两种不同的方法,每个方法都具有其优点和劣势,而不是彼此的子集。