● 全新Scheduling过程
除了SMX单元的出现之外,在整个Kepler构架中产生影响最为深远的改进来自任务调度以及仲裁过程的变化。
GPU的逻辑结构决定了它并不适合被用来执行关联度过高过深的条件分支过程,因此对于任务的关联性检查是整个GPU任务队列执行过程中一个非常重要的步骤。在以Fermi为代表的传统仲裁体系中,任务会在解码过程之后完成指令的关联性检查,如果指令存在超过一定限度的关联性,为了规避条件分支对性能产生的影响,这些指令会被重新打包以便ALU团簇进行吞吐。在完成这些关联性检查之后,明确执行方向的指令才会被送入流水线中进行执行。为了加快这一过程的速度,Fermi构架为这个过程提供了Multiport Post decode Queue以及对应Register的硬件支持。
Kepler构架与Fermi构架执行Scheduling过程的差异
在Kepler构架中,这一传统的过程发生了很大的变化,NVIDIA®称在Kepler中任务会在解码之前根据Sched.info进行选择,然后直接进行解码并被送入流水线中完成后续处理。整个关联性检查以及指令重组等过程被一个简单的Sched.info-select所取代。在该过程下,指令从解码到执行几乎没有延迟,整个流水线因此获得了更高的执行效率。
Kepler与Fermi架构对处理器依赖性测试
由于新的Scheduling过程在CPU中基于软件形式完成,因此传统Logic controller中与Pre-Scheduling相关的硬件,比如Fermi中的Multiport Post decode Queue(解码后队列)以及对应的Register(寄存器)等等DCA(Dependency check Architecture,负责依赖性检查的逻辑结构)也就没有了存在的必要,它们所占用的晶体管资源可以被释放出来,Logic controller的规模也因此得以大幅削减。尽管目前的Pre-Scheduling只涉及中等以下关联性的延迟可预期指令的检查,并没有完全取代全部的Scheduling动作,关联度较深的指令依旧需要传统的硬件DCA来快速执行,但这一改进还是促使NVIDIA®将SMX中Warp Scheduler的密度削减到了Fermi的1/3。
Fermi架构SM单元内部的Scheduler以及Dispatch Unit比例
除此之外,Pre-Scheduling让指令从解码到执行之间的过程变得更加简洁,从线程进入SMX到抵达ALU进行执行这一过程的延迟也被降低。延迟的缩短缓解了线程派发效率带来的负担,让硬件不再需要配备大量的分派资源来提升任务分派的效率,以便抵充前面延迟所带来的性能损失,因此SMX单元中的Dispatch Unit密度也随之得以降低。在SMX中,NVIDIA®配给的Dispatch Unit密度只有Fermi的66%。
DCA的大量削减以及Warp Scheduler和Dispatch Unit密度的下降促成了Logic controller的的最终瘦身,这不仅直接导致了NVIDIA®可以放心大胆的扩张SMX单元的规模,将更多ALU资源纳入到GPU体系中去,更成功的将传统DCA硬件运行过程的功耗转移到了CPU当中。有了更多直接运算资源带来的性能,同时功耗矛盾也得到了缓解,GK104超过Fermi以及Tahiti的性能功耗比也就不是什么奇怪的事情了。
Kepler构架Pre-Scheduling过程变化(图片修改自后藤弘茂先生博客)
Kepler的表现非常直观地反映了NVIDIA®解决问题的哲学,不论Pre-Scheduling还是GPU Boost,它们都具有将某些内部无法解决的矛盾转移到外部环境中并寻求适当的方式加以解决的特征。拥有这种弹性的思维模式的NVIDIA®显然没有进入僵化以及固步自封的状态,这让NVIDIA®最终得以克服了大量的困难,为我们奉上了一款性能功耗比以及绝对性能均十分出色的图形架构。
推荐经销商