我在尝试弄清楚流水线/超标量CPU是SISD,SIMD,MISD还是MIMD时,最初遇到了这个疑问。我后来读了维基百科(SISD文章):
“根据Michael J. Flynn的说法,SISD可以具有并发处理特性。流水线处理器和超标量处理器是大多数现代SISD计算机中常见的例子。”
同样来自维基百科(MISD文章):
“管道架构属于此[MISD]类型,尽管纯粹主义者可能会说在管道中的每个阶段处理后数据都不同。”
所以,得出结论是正确的:
1)“单指令流”处理的要求是只有一个高级执行线程。
2)仅仅因为线程中的指令级并行被利用,就不能将其视为“多指令流”处理。
“单一数据流”一词怎么样?
有人可以说下面的MIPS汇编代码的数据流是什么:
addi $s1,$s0,4
lw $t0,0($s0)
add $s2,$s0,$s1
它是'单一数据流'吗?如果系统利用指令级并行性,这种情况是否会改变?
答案 0 :(得分:2)
将流视为“东西”数组。如果我们正在查看SISD,那么就会有单个数组指令和单个数据数组。您从指令数组中选择一条指令,然后对数据数组进行操作。如果我们要使用SIMD,那么只有单个指令数组,但是您可以获得多个数据数组。因此,只需查看指令流,如您所提供的那样,我们就无法说出它的SISD还是SIMD。如果底层体系结构具有复制的管道,并且每个管道都具有专用数据流(与我们的数据阵列相同),那么给予该管道的指令将在该管道的专用数据流上运行。所有这些管道都有复制的一切,寄存器等。
因此addi $si,$s0,4
将在每个管道中添加不同的值。
当我们谈论ILP时,我们基本上在单个线程中寻找并行性并且与SISD或SIMD正交,因为我们想在两种情况下都利用ILP。