● “送出去,请进来”
从去年GK104架构发布之后起,我们在过去接近一年的时间里一直都在尝试着去解析Kepler架构的真实目的和意义。但遗憾的是由于NVIDIA的产品定位以及发布策略的困扰,Kepler架构的特性并没有在GK104中得到完整的阐释,我们的讨论也仅能止步于“黑科技”以及“将寄存器设计水平优势转化成性能功耗比”这样的程度。
伴随着GK110的发布,Kepler架构的完整特性终于全部来到了我们的面前,尤其是Dynamic Parallelism和Hyper-Q的出现,为我们进一步勾勒出了更加丰满的Kepler架构的轮廓。它们与已经先期在GK104及其后的所有Kepler架构中出现的新Scheduling过程一起为我们带来了Kepler区别于以往架构的最大特点,那就是“送出去,请进来”。
Kepler构架与Fermi构架执行Scheduling过程的差异
通常来讲,可重复性较低且需要运算过程的判断性工作并不适合固定单元来执行,更加灵活的具有可编程性的通用运算单元来完成这类工作会比较得心应手。而那些具有较高可重复性,过程相对固定且基本具备可预期性的控制类工作,则更加适合具有特定针对性功能的电路来完成。如果我们以可编程的通用处理单元来完成判断性工作,让控制工作更多地被特定功能电路所执行,就可以达到最高效率的利用不同单元,以最低的能耗来完成最多工作的目的。
但是很遗憾,Kepler之前的GPU并没有这样的获得最高性能功耗比的幸运。传统结构的GPU会在芯片本地以固定电路自行处理绝大部分具有判断性特征的Scheduling过程,而Kernel的启停和发放则完全依赖CPU,这实际上等于是通过通用处理单元来完成本该由更高效的特定功能电路或者说专用单元来完成的工作。这种让专用电路干通用电路的事,让通用处理器做专用单元的事的局面,与性能功耗比的诉求完全是相反的。
Pre-Scheduling过程变化(图片修改自后藤弘茂先生博客)
在Kepler中,NVIDIA实际上完成了一个“送出去,请进来”的过程——把一部分Scheduling过程从本地“送出去”,也就是转移到了CPU中以运算的形式来完成,同时通过引入GMU单元以及添加Dynamic Parallelism特性来降低CPU控制对任务的介入和影响,将控制工作更多地“请进来”,亦即移动到本地的GMU完成。这种执行位置和执行对象的互换扭转了过去“满拧”的局面,将适合通用处理单元的工作从GPU中拿出来交给了通用处理单元,也将不适合通用处理单元完成的工作交还给了GPU中的固定单元来完成,从而达到了各种单元均可以以更合适的功耗完成更多工作的目的。
Dynamic Parallelism的片上直接Kernel创建特性减小了CPU对控制的介入
关于将Scheduling移交给通用处理器完成的目的和意义,我们在过去的一年里已经进行了详尽的分析和解读,这是一个与NVIDIA未来架构发展息息相关的系列过程,在这里不再赘述,有兴趣的朋友可以点击这里阅读。而引入Dynamic Parallelism则带来了更多显而易见的好处,无论是计算任务还是图形处理任务,Kernel现在都无需亦步亦趋的频繁与CPU进行交换,GPU本地的任务密度将会得到进一步的提升,在此基础上,Hyper-Q的出现让更多的CPU线程可以向GPU发送Kernel,这进一步减少了GPU等待前端发放任务的周期并提高了任务密度。两者的共同作用导致了必然的结局——GK110架构的单元任务密度将进一步提升,单元复用率也将会因此而获益,这对于GPU的图形执行效率和运算执行效率是同样有益的。
推荐经销商