单指令多数据( SIMD )和超长指令字( VLIW )究竟有什么区别?其中一个是另一个的子集吗?或者他们是完全不同的东西?
发布于 2021-12-18 01:12:40
完全不相关而且是正交的。一台机器可以有一个或两者都可以,或者两者都不能。SIMD指令可以作为扩展添加到VLIW中。(但VLIW采用的是机器代码格式和ISA。)
VLIW是一个块中的多条指令,在不检查它们之间的危险/依赖的情况下一起解码和执行:编译器需要这样做,所以VLIW的思想是将一些寻找指令级并行性的工作卸载给编译器。
最著名的例子之一是英特尔/惠普的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上每个时钟得到2x8个FMA。)
https://stackoverflow.com/questions/70400206
复制相似问题