我在these slides中红色表示GPU通常具有比CPU更深的流水线。
GPU拥有更深层次的管道(数千个阶段,而10-20个阶段) CPU)的
我想找到更多的数字,但尝试使用Google搜索并且无法找到任何数字。我注意到这个wikipedia article注意到Pentium 4 prescott是深度流水线的。
从定性上讲,流水线怎么能有3个以上的水平?考虑到获取/解码/执行周期,这只有3件事情?是否存在多个功能单元,例如,有多个解码器,因此一次可以解码多于1条指令?一次超过一件东西怎么能从记忆中变红?
请记住在答案中加入管道流水线的数字。
答案 0 :(得分:2)
好吧,让我们从最后开始:
如何一次从内存中读取多于一件事?
一直都是。具有64位数据总线的处理器一次不从存储器读取一个字节,它一次读取8个字节。此外,解码指令不仅限于一次存储器读取。
是否有多个功能单元,例如有 超过1个解码器,因此可以在a处解码多于1个指令 时间?
某些处理器可能会对此进行一些并行处理,但并非必须如此。处理器在存储器读取之间有这么多时间,它可以在时间内解码几条指令,直到可以完成下一次存储器读取。
处理器中管道的限制因素实际上是执行在代码中来回跳转。如果代码总是按顺序运行,那么管道可能会很长。处理器试图预测执行的进度,但任何错误的预测都会使管道中的其余工作无效。
图形处理器执行的代码是更多的数学运算,并且可以减少数量,因此他们可以使用更长的管道。
答案 1 :(得分:1)
我不知道Crawfis教授如何为GPU获取数千个流水线阶段。虽然GPU通常具有高依赖性操作的延迟(大约22个周期),但这部分是由于一旦计算它们就没有使结果可用(即,没有结果转发),并且部分是由于处理了一个块的类似SIMD的操作在一系列子操作中(通常是四个子操作,因此每个子操作只需要四分之一)。不幸的是,很难找到有关GPU微体系结构的详细信息。
中等长度管道的示例可能有助于明确管道如何比几个阶段更长。 MIPS R4000(在20世纪90年代早期推出)具有用于简单整数运算的八级流水线:
在理论中,就像装配线一样,每个工作单元可以分成较小的工作单元。然而,就像在装配线中一样,即使工人数量增加,更精细的划分也会降低吞吐量。 (想象一下一条装配线,其中每个平台旋转一圈螺丝。虽然这将允许许多螺丝车在单个螺丝上工作,插入和取下螺丝刀的开销会使这效率非常低。闩锁和其他开销有在处理器流水线中也有类似的效果。)与传统的工业装配线不同,处理器流水线也必须处理变化,分支机构错误预测可能模糊类似于装配程序的变化,这种变化不正确地传达给工人;在质量控制检查员发现问题并且需要停止整个装配线,拆除所有有缺陷的部分装配产品,并使用适当的程序重新启动生产线之前,可能无法识别问题。
有关更现代的示例,请考虑以下事项:
请注意,所有这些现代微体系结构都在某些阶段之间进行缓冲,因此指令不会像简单的管道设计那样简单地流过管道或停止。此外,某些操作需要执行多个周期,而某些操作可能无法完全流水线化。
答案 2 :(得分:0)
从内存中获取一个时钟周期reporting otherwise assumes access from core需要更长的时间。
例如,NVIDIA CUDA(特斯拉)GPU数据是使用32个线程的进程,称为warp,you will see that
当warp中的线程发出器件存储器操作时,由于存储器延迟时间过长,该指令将花费很长时间,可能需要数百个时钟周期。
因此,如果内存提取需要数百个周期,那么流水线操作可以使处理器忙于执行。