现代CPU与GPU可以完成多少级流水线操作?

问题描述 投票:2回答:3

these slides中,GPU通常具有比CPU更深的流水线。

GPU具有更深层次的流水线(数千个阶段与10-20个阶段相比,CPU)

我想查找更多数字,但尝试使用Google谷歌搜索,但找不到任何数字。我注意到wikipedia article指出奔腾4的prescott已深入流水线。

定性地说,流水线可以具有三个以上级别?考虑到获取/解码/执行周期,这仅仅是三件事?是否存在多个功能单元,例如解码器多于1个,因此一次可解码多于1条指令?如何一次从内存中将超过红色的事物变成红色?

请记住在回答中包括有关流水线级别的数字。

assembly gpu cpu cpu-architecture
3个回答
2
投票

嗯,让我们从结尾开始:

如何一次从内存中读取多于一件的东西?

总是如此。具有64位数据总线的处理器不会一次从内存中读取一个字节,而是一次读取八个字节。此外,解码指令不仅限于读取一个存储器。

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

某些处理器可能对此进行了一些并行处理,但不是必须的。两次内存读取之间的处理器时间非常长,以至于在可以进行下一次内存读取之前,它可以解码几条指令。

处理器中流水线的限制因素实际上是执行在代码中来回跳跃。如果代码始终按顺序运行,则管道可能会很长。处理器试图预测执行将去向何方,但是任何错误的预测都会使管道中完成的其余工作无效。

图形处理器执行的代码具有更多的数学功能,并且跳动的次数也少得多,因此它们可以利用更长的管道。


2
投票

我不知道Crawfis教授如何获得数千个GPU的流水线阶段。尽管GPU通常对相关操作具有较高的延迟(大约22个周期),但这部分是由于在计算结果后即刻不提供结果(即没有结果转发),部分是由于处理了一组一系列子操作中的类SIMD操作(通常是四个子操作,因此每个子操作只需要宽度的四分之一)。不幸的是,关于GPU微体系结构的细节很难找到。

中等长度管道的示例可能有助于弄清管道的长度可以比​​几个阶段更长。 MIPS R4000(于1990年代初期推出)具有用于简单整数运算的八级流水线:

  1. 指令(获取)第一阶段:开始访问指令缓存
  2. 指令(获取)第二阶段:对指令缓存的访问已完成
  3. [寄存器文件访问:指令已解码,寄存器文件已读取,操作数可用,并确认了指令高速缓存命中(由于指令高速缓存是直接映射的(仅一种选择),因此可以延迟此操作,并且在指令高速缓存未命中时,将清除三个工作周期[类似于处理分支错误预测]。]
  4. 执行:计算用于存储器访问的分支目标或地址,评估分支的条件,或执行计算(或至少开始,乘法和除法需要多个周期;例如,对于32位为10个周期乘法)
  5. 数据(访问)第一阶段:开始访问数据缓存
  6. 数据(访问)第二阶段:对数据缓存的访问已完成
  7. 标签检查:检查数据缓存标签以确认匹配。 (由于数据高速缓存也是直接映射的,因此可以推测性地将加载的值转发给执行,因此从属操作只需要等待两个周期即可,而不是三个。)
  8. 回写:将运算结果写入寄存器

theory中,就像装配线一样,每个工作单元可以分为多个较小的工作单元。但是,就像装配线一样,即使工人数量增加,更精细的划分也会降低吞吐量。 (想象一下一条装配线,其中的每一级旋转一圈螺丝。虽然这将允许许多螺丝刀在一个螺丝上工作,但是插入和卸下螺丝起子的开销却使效率非常低。闩锁和其他开销有与传统的工业装配线不同,处理器管线也必须处理变更,分支错误预测可能会[类似于]类似于组装程序的变更,而该变更会不正确地传达给工人。只有在质量控制检查员发现问题并且需要停止整个组装线,移除所有有缺陷的部分组装产品,并按照适当的程序重新启动生产线后,才能识别出该问题。有关更现代的示例,请考虑以下内容:

    AMD的Jaguar(在Playstation 4和XBox One中)从抓取开始到回写有14个阶段,用于简单的ALU操作:Fetch0,Fetch1,Fetch2,Decode0 / Fetch3,Decode1 / Fetch4,Decode2 / Fetch5,iDecode,Pack, FDecode,Dispatch,Schedule,RegisterRead,ALU,WriteBack(加载操作将ALU替换为AGU并添加了Data Cache1和Data Cache2阶段; FP / SIMD操作添加了Transit,FPDecode和一个附加的RegisterRead阶段)(摘自David Kanter的Jaguar article
  • Fujitsu的SPARC64 X具有18个用于存储器操作的阶段:4个访存阶段; 4个解码和发布阶段; 5个调度,注册读取和执行阶段; L1 Dcache访问分为3个阶段;和2个提交阶段(摘自2012年热门芯片演示SPARC64 TM X: Fujitsu’s New Generation 16 Core Processor for the next generation UNIX servers的第11页)
  • Intel的Poulson(Itanium 9500系列)具有11个阶段,用于简单的整数运算和加载(具有直接寄存器寻址的单周期L1高速缓存):指令指针生成,指令获取,前端解码,寄存器重命名,指令缓冲区和分散,指令解码,寄存器访问,指令执行,检测异常,回写提交,回写2退出(来自图2-4 Intel Itanium Processor 9500 Series Reference Manual: Software Development and Optimization Guide中的后端管道控制机制)
  • Intel的Silvermont(新Atom)具有14个用于简单整数运算的阶段:三个指令提取阶段,三个指令解码阶段,两个分配/重命名阶段,一个调度阶段,一个执行阶段,两个退休阶段和两个提交阶段(从大卫·坎特(David Kanter)的Silvermont article
  • 请注意,所有这些现代微体系结构在某些阶段之间都有缓冲,因此指令不会像在更简单的管线设计中那样简单地流经管线或停滞。另外,某些操作要执行一个以上的周期,并且某些操作可能无法完全流水线化。

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

例如,NVIDIA CUDA(Tesla)GPU数据是使用32个线程的进程,称为扭曲,you will see that

当扭曲中的线程发出设备存储操作时,由于较长的存储等待时间,该指令将花费很长时间,可能需要数百个时钟周期。

因此,如果内存获取需要数百个周期,则流水线处理可以使处理器保持繁忙状态。


0
投票
从内存中获取要花费一个时钟周期reporting otherwise assumes access from core更长的时间。
© www.soinside.com 2019 - 2024. All rights reserved.