● GPU效率再提升——Dynamic Parallelism
2013年首先到来的前两个技术革新均与云计算有关,那么对于个人节点上的GPU来说,进步会因为未来的云计算图景而放缓么?显然不会。GPU目前是,将来相当长一段时间内也将依旧是PC娱乐及显示呈现手段的首选和基础,所以在GPU端出现的技术进步仍将是我们所关注的焦点。2013年第一个到来的同时也是最精彩的新GPU技术,来自GK110架构的Dynamic Parallelism,亦即动态分支。
在GK110架构中,NVIDIA在传统的二级仲裁机制CWD(CUDA Work Distributor,CUDA分配器)之外加入了全新的GMU(Grid Management Unit,Grid管理单元),GMU可以对CWD收到的Grid进行启停管理、回收、判断、挂起以及重排序等操作,令其以更加灵活的方式在必要时进入执行单元,这避免了Grid像过去那样以缺乏排序的顺序模式被送入SM,而且一旦进入SM之后就只能等到全部执行结束才能出来。
Dynamic Parallelism特性
GMU的引入为动态片上创建Kernel提供了条件,所以NVIDIA在GK110中引入了全新的Dynamic Parallelism(动态并行)特性,该特性允许GPU根据需要直接对Grid的结果进行判断并在本地创建新的Kernel,这与传统的Kernel执行完毕之后由CPU进行回收判断并创建新的Kernel再行发放有了很大的不同。
Dynamic Parallelism带来的变化(传统模式 VS 动态并行)
Dynamic Parallelism减少了GPU同CPU之间的通讯需求,减轻了与CPU频繁通讯所带来的等待周期产生的延迟影响,提升了GPU内部的Kernel密度和执行连贯度,对于低负载高密集任务中单元复用率改善有不小的帮助。它与已经先期在GK104及其后的所有Kepler架构中出现的新Scheduling过程一起为我们带来了Kepler区别于以往架构的最大特点,那就是“送出去,请进来”。
Kepler构架与Fermi构架执行Scheduling过程的差异
通常来讲,可重复性较低且需要运算过程的判断性工作并不适合固定单元来执行,更加灵活的具有可编程性的通用运算单元来完成这类工作会比较得心应手。而那些具有较高可重复性,过程相对固定且基本具备可预期性的控制类工作,则更加适合具有特定针对性功能的电路来完成。如果我们以可编程的通用处理单元来完成判断性工作,让控制工作更多地被特定功能电路所执行,就可以达到最高效率的利用不同单元,以最低的能耗来完成最多工作的目的。
但是很遗憾,Kepler之前的GPU并没有这样的获得最高性能功耗比的幸运。传统结构的GPU会在芯片本地以固定电路自行处理绝大部分具有判断性特征的Scheduling过程,而Kernel的启停和发放则完全依赖CPU,这实际上等于是通过通用处理单元来完成本该由更高效的特定功能电路或者说专用单元来完成的工作。这种让专用电路干通用电路的事,让通用处理器做专用单元的事的局面,与性能功耗比的诉求完全是相反的。
Pre-Scheduling过程变化(图片修改自后藤弘茂先生博客)
在Kepler中,NVIDIA实际上完成了一个“送出去,请进来”的过程——把一部分Scheduling过程从本地“送出去”,也就是转移到了CPU中以运算的形式来完成,同时通过引入GMU单元以及添加Dynamic Parallelism特性来降低CPU控制对任务的介入和影响,将原本由CPU遂行的控制工作更多地“请进来”,亦即移动到本地的GMU完成。这种执行位置和执行对象的互换扭转了过去“满拧”的局面,将适合通用处理单元的工作从GPU中拿出来交给了通用处理单元,也将不适合通用处理单元完成的工作交还给了GPU中的固定单元来完成,从而达到了各种单元均可以以更合适的功耗完成更多工作的目的。
Dynamic Parallelism的片上Kernel创建特性减小了CPU对控制的介入
关于将Scheduling移交给通用处理器完成的目的和意义,我们在过去的一年里已经进行了详尽的分析和解读,这是一个与NVIDIA未来架构发展息息相关的系列过程,我们在这里不再赘述,有兴趣的朋友可以点击这里阅读。而与之相对应的,引入Dynamic Parallelism带来了更多显而易见的好处,无论是计算任务还是图形处理任务,Kernel现在都无需亦步亦趋的频繁与CPU进行交换,GPU本地的任务密度将会得到进一步的提升,在此基础上,Hyper-Q的出现让更多的CPU线程可以向GPU发送Kernel,这进一步减少了GPU等待前端发放任务的周期并提高了任务密度。两者的共同作用导致了必然的结局——GK110架构的单元任务密度将进一步提升,单元复用率也将会因此而获益,这对于GPU的图形执行效率和运算执行效率是同样有益的。
推荐经销商