these slides中,GPU通常具有比CPU更深的流水线。
GPU具有更深层次的流水线(数千个阶段与10-20个阶段相比,CPU)
我想查找更多数字,但尝试使用Google谷歌搜索,但找不到任何数字。我注意到wikipedia article指出奔腾4的prescott已深入流水线。
定性地说,流水线可以具有三个以上级别?考虑到获取/解码/执行周期,这仅仅是三件事?是否存在多个功能单元,例如解码器多于1个,因此一次可解码多于1条指令?如何一次从内存中将超过红色的事物变成红色?
请记住在回答中包括有关流水线级别的数字。
嗯,让我们从结尾开始:
如何一次从内存中读取多于一件的东西?
总是如此。具有64位数据总线的处理器不会一次从内存中读取一个字节,而是一次读取八个字节。此外,解码指令不仅限于读取一个存储器。
是否有多个功能单元,例如超过1个解码器,因此可以在一个解码器上解码超过1条指令时间?
某些处理器可能对此进行了一些并行处理,但不是必须的。两次内存读取之间的处理器时间非常长,以至于在可以进行下一次内存读取之前,它可以解码几条指令。
处理器中流水线的限制因素实际上是执行在代码中来回跳跃。如果代码始终按顺序运行,则管道可能会很长。处理器试图预测执行将去向何方,但是任何错误的预测都会使管道中完成的其余工作无效。
图形处理器执行的代码具有更多的数学功能,并且跳动的次数也少得多,因此它们可以利用更长的管道。
我不知道Crawfis教授如何获得数千个GPU的流水线阶段。尽管GPU通常对相关操作具有较高的延迟(大约22个周期),但这部分是由于在计算结果后即刻不提供结果(即没有结果转发),部分是由于处理了一组一系列子操作中的类SIMD操作(通常是四个子操作,因此每个子操作只需要宽度的四分之一)。不幸的是,关于GPU微体系结构的细节很难找到。
中等长度管道的示例可能有助于弄清管道的长度可以比几个阶段更长。 MIPS R4000(于1990年代初期推出)具有用于简单整数运算的八级流水线:
在theory中,就像装配线一样,每个工作单元可以分为多个较小的工作单元。但是,就像装配线一样,即使工人数量增加,更精细的划分也会降低吞吐量。 (想象一下一条装配线,其中的每一级旋转一圈螺丝。虽然这将允许许多螺丝刀在一个螺丝上工作,但是插入和卸下螺丝起子的开销却使效率非常低。闩锁和其他开销有与传统的工业装配线不同,处理器管线也必须处理变更,分支错误预测可能会[类似于]类似于组装程序的变更,而该变更会不正确地传达给工人。只有在质量控制检查员发现问题并且需要停止整个组装线,移除所有有缺陷的部分组装产品,并按照适当的程序重新启动生产线后,才能识别出该问题。有关更现代的示例,请考虑以下内容:
例如,NVIDIA CUDA(Tesla)GPU数据是使用32个线程的进程,称为扭曲,you will see that
当扭曲中的线程发出设备存储操作时,由于较长的存储等待时间,该指令将花费很长时间,可能需要数百个时钟周期。因此,如果内存获取需要数百个周期,则流水线处理可以使处理器保持繁忙状态。