首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有多少级别的流水线可以与现代CPU和GPU相结合?

有多少级别的流水线可以与现代CPU和GPU相结合?
EN

Stack Overflow用户
提问于 2014-03-23 02:37:59
回答 3查看 974关注 0票数 4

我在这些幻灯片中表示,GPU通常比CPU具有更深的流水线性。

GPU有更深的管道(对于CPU有几千个阶段和10-20个阶段)

我想找到更多的数字,但尝试谷歌,但找不到任何。我注意到这个维基百科文章注意到奔腾4普雷斯科特是深流水线。

定性地说,流水线怎么会有三个以上的层次呢?考虑到提取/解码/执行周期,这仅仅是3件事?它是有多个功能单元,例如有超过一个解码器,以便一个以上的指令可以在一次解码?一件以上的东西怎么能同时从记忆中变红呢?

请记住在你的答案中包含关于流水线级别的数字。

EN

回答 3

Stack Overflow用户

发布于 2014-03-23 13:50:04

我不知道Crawfis教授是如何为GPU获得数千个流水线级的。虽然GPU通常对依赖操作具有较高的延迟时间(按22个周期计算),但部分原因是在计算结果时没有提供结果(即没有结果转发),部分原因是在子操作序列中处理了类似SIMD的操作块(通常有四个子操作,因此每个子操作只需要四分之一宽)。不幸的是,GPU微体系结构的细节很难找到。

一个中等长度管道的例子可能有助于弄清楚一条管道如何能够超过几个阶段。MIPS R4000 (1990年代初推出)有一个用于简单整数操作的八阶段流水线:

  1. 指令(获取)第一阶段:启动对指令缓存的访问
  2. 指令(获取)第二阶段:完成对指令缓存的访问
  3. 寄存器文件访问:指令被解码,寄存器文件被读取,操作数的可用性被确认,指令缓存命中被确认(这是可能的,因为指令缓存是直接映射的,只有一个选择,并且假设命中是推测的。在指令缓存丢失时,将刷新三个工作周期,类似于处理分支错误预测。)
  4. EXecution:计算内存访问的分支目标或地址,评估分支的条件,或执行计算(或至少开始,乘法和除法需要多个循环;例如,32位乘法的10个循环)。
  5. 数据(访问)第一阶段:启动对数据缓存的访问
  6. 数据(访问)第二阶段:完成对数据缓存的访问
  7. 标记检查:对数据缓存标记进行检查以确认是否命中。(因为数据缓存也是直接映射的,所以可以推测地将加载的值转发到执行中,这样依赖的操作只需要等待两个周期而不是三个周期。)
  8. 回写:将操作的结果写入寄存器。

理论上,就像装配线一样,每一个工作单元都可以分成较小的工作单元。然而,就像在装配线上一样,即使工人的数量增加,精细的部门也可以降低吞吐量。(想象一条装配线,每一阶段都会产生一个螺旋。虽然这将允许许多螺丝刀工作在一个单一的螺丝钉,插入和拆除螺丝刀的开销将使这非常低效。在处理器管道中,闩锁和其他开销具有类似的效果。)与传统的工业装配线不同的是,加工流水线也必须处理变化,一个分支错误预测可能与装配过程中向工人沟通不当的变化大致类似;这个问题可能在质量控制检查员发现问题、整个装配线需要停止、所有有缺陷的部分装配产品被移除、生产线重新启动时才会被发现。

关于更现代的例子,请考虑以下几点:

  • AMD(在Playstation 4和XBox One中)有14个阶段,从抓取到写,用于简单的ALU操作: Fetch0、Fetch1、Fetch2、FDecode 0/Fetch3、FDecode 1/ fetch 4、FDecode 2/Fetch5、iDecode、Pack、FDecode、Dispatch、Schedule、RegisterRead、ALU、WriteBack (用AGU替换ALU并添加数据Cache1和数据Cache2阶段;FP/SIMD操作添加传输、FPDecode和附加RegisterRead阶段)(来自大卫·坎特的捷豹文章)
  • 富士通的SPARC64 X有18个内存操作阶段:4个获取阶段;4个解码和发布阶段;5个分派、注册读取和执行阶段;3个L1 Dcache访问阶段;以及2个提交阶段(来自2012年热片演示SPARC64 TM X:富士通新一代16核心处理器用于下一代UNIX服务器第11页)
  • 英特尔的Poulson (Itanium 9500系列)有11个简单整数操作和加载阶段(具有直接寄存器寻址的单周期L1缓存):指令指针生成、取指令、前端解码、寄存器重命名、指令缓冲和分散、指令解码、寄存器访问、指令执行、检测异常、写回提交、写回-2退出(来自Intel Itanium处理器9500系列参考手册:软件开发和优化指南中的图2-4后端管道控制机制)
  • 英特尔的Silvermont (新Atom)有14个简单整数操作阶段:三个指令获取阶段、三个指令解码阶段、两个分配/重命名阶段、一个计划阶段、一个执行阶段、两个退休阶段和两个提交阶段(来自David的西尔佛蒙特文章)

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

票数 4
EN

Stack Overflow用户

发布于 2014-03-23 03:07:30

好吧,让我们从结尾开始:

怎么能同时从内存中读出一件以上的东西呢?

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

它是有多个功能单元,例如有超过一个解码器,以便一个以上的指令可以在一次解码?

有些处理器可能对此有一些并行处理,但不必这样做。处理器在内存读取之间有这么多时间,以至于它可以在一段时间内解码多个指令,直到下一个内存读取可以完成为止。

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

图形处理器执行的代码是更多的数学和更少的跳跃,所以他们可以使用更长的管道。

票数 3
EN

Stack Overflow用户

发布于 2014-03-23 03:02:00

从内存中提取花费更长的时间,一个时钟周期,否则,报告假定从核心访问。

例如,NVIDIA (Tesla) GPU数据是使用32个线程处理的,称为warp,你会看到的

当翘曲中的线程发出设备内存操作时,由于内存延迟较长,该指令将花费很长的时间,可能会花费数百个时钟周期。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22586394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档