Assembly 与GPU相比,现代CPU可以完成多少级别的流水线?

Assembly 与GPU相比,现代CPU可以完成多少级别的流水线?,assembly,gpu,cpu,cpu-architecture,Assembly,Gpu,Cpu,Cpu Architecture,我认为GPU通常比CPU有更深的流水线 GPU有更深层的管道(几千个阶段,而10-20个阶段) CPU) 我想找到更多的数字,但尝试了谷歌搜索,却找不到。我注意到了这一点,即奔腾4普雷斯科特采用了深度流水线 从质量上讲,管道如何可以有3个以上的级别?考虑到获取/解码/执行周期,这仅仅是3件事?是否有多个功能单元,例如有多个解码器,因此一次可以解码多条指令?怎么能一次从记忆中记住一件以上的事情 请记住在您的答案中包含有关管道级别的数字。从内存中提取需要比一个时钟周期更长的时间 例如,英伟达CUDA

我认为GPU通常比CPU有更深的流水线

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

我想找到更多的数字,但尝试了谷歌搜索,却找不到。我注意到了这一点,即奔腾4普雷斯科特采用了深度流水线

从质量上讲,管道如何可以有3个以上的级别?考虑到获取/解码/执行周期,这仅仅是3件事?是否有多个功能单元,例如有多个解码器,因此一次可以解码多条指令?怎么能一次从记忆中记住一件以上的事情


请记住在您的答案中包含有关管道级别的数字。

从内存中提取需要比一个时钟周期更长的时间

例如,英伟达CUDA(TESLA)GPU数据是使用32个称为WARP、

的线程来处理的。 当warp中的线程发出设备内存操作时,由于长内存延迟,该指令将花费很长时间,可能需要数百个时钟周期


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

好吧,让我们从头开始:

如何一次从内存中读取一个以上的内容

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

是否有多个功能单元,例如 多个解码器,因此一次可以解码多条指令 时间

有些处理器可能会为此进行一些并行处理,但不一定要这样。处理器在内存读取之间的时间太长,以至于它可以在下一次内存读取完成之前解码多条指令


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


图形处理器执行的代码更多的是数学运算,更少的跳跃,因此它们可以利用更长的管道。

我不知道Crawfis教授是如何为GPU获得数千个管道级的。虽然GPU通常具有较高的相关操作延迟(大约22个周期),但这部分是由于在计算结果时没有立即提供结果(即,没有结果转发),部分是因为在一系列子操作中处理SIMD类操作块(通常有四个子操作,因此每个操作只需要四分之一宽)。不幸的是,关于GPU微体系结构的详细信息很难找到

一个中等长度管道的示例可能有助于说明管道如何比几个阶段更长。MIPS R4000(在20世纪90年代早期引入)有一个用于简单整数操作的八阶段管道:

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

    对于更现代的例子,考虑如下:

    • AMD的捷豹(在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)