服务器 频道

新趋势:GPU如何推动HPC向前发展

不一样的GPU

    GPU本质上与常规CPU有所区别。GPU主要是被设计用来执行图形任务,比如建立3D场景模型然后将其基于渲染的光栅化,最后显示图像。为了提升显示图像进程的效率,现代GPU的设计很着重于传输数据。光栅化过程中,各种数据由GPU和代码片段连续的处理。

    而不在光栅化的时候,例如计算的时候,GPU可以被理解为流处理器。流处理器可以接受一系列的计算密集型操作(kernel),然后将操作用于称作流stream的数据中。这里多解释一下流的概念,经 GPU存储和操作的数据被形象地比喻成流stream。总的来说,GPU一次将一个kernel用于处理一个特定的流,而由于GPU的kernel很多,因此一次可以同时处理多个流。当然kernel并不是程序的全部,也只是算法的一部分。现在有很多工作,GPU也无法完成,比如CPU可以做到的同时读写。

    现在,我们大体知道了CPU和GPU的不同。GPU的kernel处理流的算法,对于所有流都是一样的。这样,所有的kernel连接起来,就可以同时运行一系列的操作。除此以外,每个kernel也都比较独立,不会误处理同一个流。因此,总的来看,GPU流处理的潜力是巨大的,具体而言有以下几点:

*数据和任务有清晰的并行结构。
*数据流元素之间没有通讯,简化了操作。
*Kernel不能写入流。
*流元素是独立的。
*并行隐藏了memory存取。

    可能,读者对于上述概念还有点模糊,其实上述几点已经说明了GPU的高效性。如果你的程序是根据GPU流模型编写,它的确可以给你巨大的性能提升。但天下没有免费的午餐,其缺点是,你的程序也只能受困于流计算模型。

    附属/协处理器,这个也不是什么全新的概念。早在大型HPC中,就有一些专业设备称为“队列处理”(array processors),这些配件连接在HPC系统上,发挥着协处理作用。队列处理器就很像今天的显卡市场中的GPU,辅助CPU将效能发挥到最大。

    可GPU毕竟不是CPU,GPU有很多优点,但也有很多明显的缺点:

*没有堆栈
*没有整数或bit-wise操作能力
*没有分散操作(scatter operation)。(a[i] = b)
*没有reduction操作。(max, min, sum)

    GPU不具备这些基本的能力,主要是因为游戏界面显示根本不需要显卡完成这些工作。因此GPU虽然已经有了极好的并行计算能力,但是跟CPU的全面性相比还是有差距。GPU在GPGPU (General Purpose Graphic Processor Unit) 阶段的确如此。可是我们设想,如果GPU弥补了自身功能的缺陷,而又保持了并行计算的优势,那么GPU将势不可挡。
 

0
相关文章