英伟达测试Tesla K20 GPU协处理器
英伟达对绝对性能一直没有给出明确的态度,但是我们预计,GK110在处理器核心上,以1GHz的时钟频率,有望提供每秒近2万亿次浮点运算的原始双精度浮点性能,而在单精度下可能达到每秒3.5万亿次浮点运算。这性能大概是特斯拉M20系列GPU协处理器所用的现有Fermi GF110 GPU的三倍,也就是说相当于每瓦散热性能高出三倍。
早在今年5月英伟达透露其高端GK110图形芯片的一部分新功能时,这家公司声称,这款GPU即图形处理器的两项新功能:Hyper-Q和动态并行处理(Dynamic Parallelism)有望帮助GPU更高效地运行,而CPU即处理器不会一直干预。如今英伟达在逐步透露用于服务器的特斯拉(Tesla)K20 GPU协处理器的一些基准测试结果,GK110预计会在今年晚些时候交付。
GK110 GPU芯片有时称为Kepler2,绝对是功能超强的怪兽:芯片代工厂台积电公司(TSMC)采用了非常热门的28纳米工艺,在一块晶片上蚀刻了超过71亿个晶体管。它采用了15个极致流式多处理器(SMX)处理单元,每个单元又有192个单精度CUDA(计算统一设备架构)核心,为每三个一组的CUDA核心添加了64个双精度浮点单元。这为你在GK110芯片上的最多2880个CUDA核心上提供了960个双精度浮点单元。
英伟达对绝对性能一直没有给出明确的态度,但是我们预计,GK110在处理器核心上,以1GHz的时钟频率,有望提供每秒近2万亿次浮点运算的原始双精度浮点性能,而在单精度下可能达到每秒3.5万亿次浮点运算。这性能大概是特斯拉M20系列GPU协处理器所用的现有Fermi GF110 GPU的三倍,也就是说相当于每瓦散热性能高出三倍。
仅仅拥有更多的处理器核心提升不了性能。你还得更高效地利用这些核心;这时候,Hyper-Q和动态并行处理这两项功能正好可以派得上用场。
值得关注的是,这两项功能并未出现在GK104 GPU芯片上,这款芯片用在了英伟达已经交付给需要单精度浮点运算处理的客户的特斯拉K10协处理器上。特斯拉K10 GPU协处理器把两块GK104芯片放到一块PCI-Express卡上,在225瓦散热范围内提供了每秒4.58万亿次浮点的单精度运算能力——这个性能是Fermi M2090协处理器的整整3.5倍。
许多超级计算机应用程序运行消息传递接口(MPI)协议,将工作调度分派到并行机器上,而Hyper-Q让GPU得以在处理MPI工作分配时,以一种更合作的方式与CPU协同运行。如果使用Fermi卡,GPU每次只有一个MPI任务由CPU调度分配,然后卸载给GPU。这显然是个瓶颈。
英伟达为Kepler GPU增添的Hyper-Q功能
借助Hyper-Q,英伟达为GPU本身添加了一个队列,现在处理器可以同时把最多32个不同的MPI任务调度分派给GPU。没必要改动一行MPI代码,就可以充分利用Hyper-Q;CPU与GPU进行联系时,这项功能完全是自动发挥作用。
为了表明Hyper-Q的效果有多好(以及那些数千个CUDA核心不会无所事事),英伟达的高级开发工程师Peter Messmer拿来了名为CP2K的一些分子模拟代码。他在博客中表示,这种代码“对GPU来说向来一向很难处理的代码”,测试了在Hyper-Q功能先关闭,后开启的特斯拉K20协处理器上运行起来有多好。
正如Messmer解释的那样,当MPI进程被CPU限制于少量的工作时,MPI应用程序“出现了打折扣的性能提升”。CPU频繁接到任务,而GPU在许多时候处于闲置状态。而混合系统中的GPU提速幅度也不是很明显,你从这个基准测试中可以看出。这项测试把特斯拉K20协处理器放到配备16核心皓龙6200处理器的未来版克雷XK7超级计算机节点里面。
Hyper-Q为运行CP2K分子模拟的节点将性能提升了2.5倍。
就这个模拟864个水分子的特定数据集而言,增添CPU和GPU节点组合其实提升性能的幅度不是很大。如果是Hyper-Q功能没有开启的16个节点,你能获得12倍的性能(由于某种原因,英伟达的Y轴代表较之两个CPU+GPU节点的相对提速)。但在拥有16个CPU+GPU节点、Hyper-Q功能开启的同一系统上,性能高达2.5倍。你要知道,英伟达并没有承诺:启用Hyper-Q功能后,所有代码都会类似的提速效果。
我们询问英伟达特斯拉事业部的高级主管Sumit Gupta,为什么CP2K测试不对Fermi GPU和Kepler GPU进行横向比较。他开玩笑说,英伟达总得为今年11月在盐湖城召开的SC12超级计算大会保留压箱之作。
借助GK110 GPU的另一项功能:动态并行处理,GPU就能够根据需要在GPU里面调度分派工作,受制于由CPU分派给它的运算任务。如果是Fermi GPU,系统中的CPU把工作分派给一个或多个CUDA核心,工作的处理结果会被送回到CPU。如果进一步的运算必不可少,CPU就把这部分数据和算法分派到GPU,然后GPU把处理结果发回给CPU,依次往返,直至运算计算完毕。
动态并行处理:让GPU调度处理自己的工作
如果使用现有的Fermi GPU,会有大量的往返操作。动态并行处理功能让GPU可以处理自己的工作。但是更重要的是,它还可以让模拟的精细度实现动态变化:处理值得关注的任务时,获得更精细的粒度,而在什么都没进行的模拟方面,基本上什么都不做。
通过调整模拟的精细度和数据的精细度,你就能获得更好的结果,(在更短的时间内)处理更少的工作,不然在所有区域和时间片处理细粒度的模拟时效果差强人意。
GK110 GPU来自动态并行处理的性能提升
动态并行处理方面最重要的一点是,GPU会针对运算的粗粒度自动作出决策;根据需要,对数据作出响应、启动新的线程。
为了展示动态并行处理的早期测试结果,英伟达没有进行流体力学模拟或者诸如此类的模拟,而是在另一篇博文中,英伟达工程师Steven Jones对动态并行处理功能先开启、后关闭的K20 GPU协处理器进行了Quicksort基准测试。
如果你忘了以前学的计算机学入门课程,Jones在博文中添加了他在测试中所用的Quicksort代码。值得关注的是,在动态并行处理功能开启并使用的GPU上编写Quicksort例程只用了一半的代码,那是由于你没必要控制CPU与GPU之间的来回操作。
从上面那张图中可以看出,如果你为由CPU排序的每一段数据处理所有的运行工作——Fermi GPU就需要这么处理,那么它要花更长的时间来排序。在K20 GPU上,动态并行处理功能把Quicksort的性能提升了两倍,几乎能够随数据集的大小灵活扩展。值得关注的是,这个K20在处理Quicksort方面与实际的Fermi GPU相比到底好多少,以及其他工作负载和模拟如何处理这种GPU自主性