现代CPU与GPU相比,可以实现多少级别的流水线操作?

时间:2014-03-23 02:38:00

标签: assembly gpu cpu computer-architecture

我在these slides中红色表示GPU通常具有比CPU更深的流水线。

  GPU拥有更深层次的管道(数千个阶段,而10-20个阶段)   CPU)的

我想找到更多的数字,但尝试使用Google搜索并且无法找到任何数字。我注意到这个wikipedia article注意到Pentium 4 prescott是深度流水线的。

从定性上讲,流水线怎么能有3个以上的水平?考虑到获取/解码/执行周期,这只有3件事情?是否存在多个功能单元,例如,有多个解码器,因此一次可以解码多于1条指令?一次超过一件东西怎么能从记忆中变红?

请记住在答案中加入管道流水线的数字。

3 个答案:

答案 0 :(得分:2)

好吧,让我们从最后开始:

  

如何一次从内存中读取多于一件事?

一直都是。具有64位数据总线的处理器一次不从存储器读取一个字节,它一次读取8个字节。此外,解码指令不仅限于一次存储器读取。

  

是否有多个功能单元,例如有   超过1个解码器,因此可以在a处解码多于1个指令   时间?

某些处理器可能会对此进行一些并行处理,但并非必须如此。处理器在存储器读取之间有这么多时间,它可以在时间内解码几条指令,直到可以完成下一次存储器读取。

处理器中管道的限制因素实际上是执行在代码中来回跳转。如果代码总是按顺序运行,那么管道可能会很长。处理器试图预测执行的进度,但任何错误的预测都会使管道中的其余工作无效。

图形处理器执行的代码是更多的数学运算,并且可以减少数量,因此他们可以使用更长的管道。

答案 1 :(得分:1)

我不知道Crawfis教授如何为GPU获取数千个流水线阶段。虽然GPU通常具有高依赖性操作的延迟(大约22个周期),但这部分是由于一旦计算它们就没有使结果可用(即,没有结果转发),并且部分是由于处理了一个块的类似SIMD的操作在一系列子操作中(通常是四个子操作,因此每个子操作只需要四分之一)。不幸的是,很难找到有关GPU微体系结构的详细信息。

中等长度管道的示例可能有助于明确管道如何比几个阶段更长。 MIPS R4000(在20世纪90年代早期推出)具有用于简单整数运算的八级流水线:

  1. 指令(获取)第一阶段:启动对指令缓存的访问
  2. 指令(获取)第二阶段:完成对指令缓存的访问
  3. 寄存器文件访问:解码指令,读取寄存器文件,确认操作数的可用性,并确认指令缓存命中(由于指令缓存是直接映射[只有一个选择],因此可以延迟此操作推测性地假设命中。在指令缓存未命中时,将刷新三个周期的工作[类似于处理分支错误预测]。)
  4. 执行:计算存储器访问的分支目标或地址,评估分支的条件,或者执行计算(或者至少开始计算,乘法和除法需要多个周期;例如,32-的10个周期位乘法)
  5. 数据(访问)第一阶段:启动对数据缓存的访问
  6. 数据(访问)第二阶段:完成对数据缓存的访问
  7. 标记检查:检查数据缓存标记以确认命中。 (因为数据高速缓存也是直接映射的,所以可以推测性地将加载的值转发到执行,这样相关操作只需要等待两个周期而不是三个周期。)
  8. 回写:操作的结果写入寄存器
  9. 理论中,就像装配线一样,每个工作单元可以分成较小的工作单元。然而,就像在装配线中一样,即使工人数量增加,更精细的划分也会降低吞吐量。 (想象一下一条装配线,其中每个平台旋转一圈螺丝。虽然这将允许许多螺丝车在单个螺丝上工作,插入和取下螺丝刀的开销会使这效率非常低。闩锁和其他开销有在处理器流水线中也有类似的效果。)与传统的工业装配线不同,处理器流水线也必须处理变化,分支机构错误预测可能模糊类似于装配程序的变化,这种变化不正确地传达给工人;在质量控制检查员发现问题并且需要停止整个装配线,拆除所有有缺陷的部分装配产品,并使用适当的程序重新启动生产线之前,可能无法识别问题。

    有关更现代的示例,请考虑以下事项:

    • AMD的Jaguar(在Playstation 4和XBox One中)从简单ALU操作的提取开始到写回有14个阶段:Fetch0,Fetch1,Fetch2,Decode0 / Fetch3,Decode1 / Fetch4,Decode2 / Fetch5 ,iDecode,Pack,FDecode,Dispatch,Schedule,RegisterRead,ALU,WriteBack(加载操作用AGU替换ALU并添加Data Cache1和Data Cache2阶段; FP / SIMD操作添加Transit,FPDecode和另外的RegisterRead阶段)(来自David)坎特的Jaguar article
    • 富士通的SPARC64 X有18个存储器操作阶段:4个获取阶段; 4解码和发布阶段; 5调度,寄存器读取和执行阶段; L1 Dcache访问的3个阶段;和2个提交阶段(来自2012年Hot Chips演示文稿的第11页SPARC64 TM X: Fujitsu’s New Generation 16 Core Processor for the next generation UNIX servers
    • 英特尔的Poulson(安腾9500系列)有11个阶段用于简单整数运算和加载(具有直接寄存器寻址的单周期L1缓存):指令指针生成,指令获取,前端解码,寄存器重命名,指令缓冲和分散,指令解码,寄存器访问,指令执行,检测异常,回写提交,回写-2退出(从{2-4}中的图2-4后端流水线控制机制)
    • 英特尔的Silvermont(新Atom)有14个简单整数运算阶段:三个指令获取阶段,三个指令解码阶段,两个分配/重命名阶段,一个调度阶段,一个执行阶段,两个退休阶段,以及两个提交阶段(来自David Kanter' s Intel Itanium Processor 9500 Series Reference Manual: Software Development and Optimization Guide

    请注意,所有这些现代微体系结构都在某些阶段之间进行缓冲,因此指令不会像简单的管道设计那样简单地流过管道或停止。此外,某些操作需要执行多个周期,而某些操作可能无法完全流水线化。

答案 2 :(得分:0)

从内存中获取一个时钟周期reporting otherwise assumes access from core需要更长的时间。

例如,NVIDIA CUDA(特斯拉)GPU数据是使用32个线程的进程,称为warp,you will see that

  

当warp中的线程发出器件存储器操作时,由于存储器延迟时间过长,该指令将花费很长时间,可能需要数百个时钟周期。

因此,如果内存提取需要数百个周期,那么流水线操作可以使处理器忙于执行。