
David.B Kirk自1997年1月以来担任NVIDIA的首席科学家。他的贡献包括领导了NVIDIA图形技术开发,使其成为当今最流行的大众娱乐平台。2006年,由于将高性能图形带入个人计算机领域的贡献,Kirk被选为美国国家工程院 ?穴NAE?雪 院士。NAE院士是工程领域的最高专业成就荣誉。2002年,Kirk博士获得SIGGRAPH计算机图形成就奖,此奖用以表彰他在把高性能计算机图形系统推向大众市场方面所做出的贡献。
一个月之前,笔者曾经撰文《GPU,未来包办一切?》,对未来GPU的发展和CUDA进行了分析。近日,NVIDIA首席科学家David.B Kirk访华,针对GPU的发展和并行计算的未来,我们对David.B Kirk进行了访问,并针对CUDA的未来,和他展开了交流。
问:IBM和SONY在高性能计算机领域共同推出一款Cell的处理器,里面有八个协处理器,CUDA和GPU整合后,和Cell相比有什么样的优势?NVIDIA如何为CUDA和GPU二者做更加贴近的整合?
David.B Kirk:其中有一个优势,我们的G80和Cell处理器相比,处理器个数要比后者多120个。当然,我觉得Cell是一个非常创新的东西,它希望在一个芯片上把不同性质的处理器集成上去,但是它没有推出相应编程的模型,把很多工作交给了程序员,因为它本身并没有办法决定到底把多少工作分配给Cell处理器。
所以,就由程序员自己分配八个处理器的工作。对于CUDA来说,到底有多少个处理器并不重要。程序员只需要理清自己的问题,组织好需要处理的任务,剩余的问题都将由硬件本身来完成。
Cell本身是一个计算芯片,而CUDA是一种运算模型,或者是一种编程的环境,CUDA也可以用在Cell处理器上面。对于Cell来说,接下来一个问题是你到底拿它来干什么?它不需要更快的运行,只需要更便宜。对于CUDA来说,因为是一个编程环境,是运算的模式,所以同样的程序,GPU加速了一倍(每年速度都会加速一倍),同样的程序,随着硬件本身的加速,运行速度会倍增。
CUDA正是这样一种编程环境,所以它独立于硬件设备,这也是它们之间的差异。Cell和多核的CPU一样,编程之前需要知道到底有多少个核在里面。
问:CUDA相比以前NVIDIA曾经推出的CG主要改变在哪里?它的定位有什么不同?
David.B Kirk:在API和OpenGL相关程序中,CG是写着色器的一种方法。
对于CUDA来说编程语言是C语言,除了控制线程以外,任何C语言写的程序都可以在CUDA里面运行,实现并行运算。所以说,它们主要的差别在体现在运算方式上,CG主要是写着色器的程序,而CUDA基本上是一个C程序。
问:从现在来看,CUDA大部分的应用还是在使用GPU的运算能力。未来有没有可能连同显卡一起应用?比如显卡的内存和系统的内存共用?CUDA有没有可能往更远的地方发展?
比如整体结构的概念,或者某些部分再进一步地整合在一起?GPU是逻辑控制指令的,CUDA本身也会自动生成并行运算的多个线程。在多线程的情况下,怎么解决同步和死锁问题?
David.B Kirk:刚才并没有谈到CUDA具体技术方面的东西,在CUDA有一些相应的机制进行线程相互之间的通讯等等。实际上,CUDA是非常完善的环境。
问:传统方式下,程序员要做很多工作来解决这个问题,CUDA可以自动解决这些问题吗?
David.B Kirk:CPU并不是特别的适用于并行计算的处理器,要对它进行并行编程和线程编程是非常危险、非常困难的,容易在程序运行过程中出现各种各样的问题。
但是利用CUDA和GPU都是可以控制的,而且硬件有相应的参数,比如管理同步的问题,以及出现预测的问题之后有什么样的规则进行处理等等。CPU完全没有可预测性,对并行线程的运算也没有任何支持,没有任何的硬件功能管理。

G80核心架构图
所以,GPU在并行运算中具有多线程的天生优势;而对CPU进行编程,对于程序员来说,他们需要一些多线程编程的支持,但是这些支持并不多。就像现在的很多应用软件难以支持四线程,主要还是程序员很难获得更好的多线程编程支持。
CUDA未来应用的讨论
通过访问我们了解到,NVIDIA CUDA统一计算设备架构的真正意义在于利用GPU流处理器可编程、可模拟的特性,将GPU的流处理器模拟成为逻辑处理器,这些流处理器就能够实现对于程序的并行运算了。GPU和CUDA的组合,优势在于GPU的流处理器数量较多,CUDA能够将程序员从为流处理器分配任务的烦恼中解脱出来,二者的结合能够实现更高效的并行运算。
CUDA目前还处于起步阶段,主要应用案例还未进入民用市场。但我们了解到,CUDA在民用级的应用,将首先出现在各种各样压缩或者编码软件中。举例来说,WinRAR通过多线程的并行运算,大幅度提升了压缩/解压缩的速度。这一应用实例正符合GPU并行运算的特性——如果搭配G80图形显示卡,那么未来的压缩软件可以实现128个线程同时运作,能够有效提升处理能力以及处理速度。
至于编解码软件,更有可能成为CUDA在民用领域的排头兵。文件的编解码,尤其是视频文件的编解码,对微处理器来说是一项典型的并行化任务。目前进行视频文件的编解码,主要由CPU进行,CPU虽然具备了多个核心能够同时工作,但对于完全平行化运算的视频文件编解码来说,其处理能力还是远远不够的。GPU则不同,能够将流处理器模拟成一个个的工作线程,每个线程都分担起一部分的工作,最后再将每个流处理器处理完毕的数据合并在一起。
无论是民用还是商用,GPU的浮点运算能力和并行化特点都能够获得发挥的空间。尤其是GPU具备上百个流处理器,在应用灵活度上的优势更是不言而喻——通过CUDA,GPU每个流处理器都能够模拟成一个独立的线程,或将八个流处理器模拟成一个运算单元,可以处理一个或多个线程的任务。这就使得GPU在保持并行化运算优势的同时,也提升了单线程运算能力,在平行运算或是单线程运算中都能够获得更广阔的应用前景。
当GPU不再只是进行3D图形渲染,当GPU不再只是被游戏玩家追逐,当CUDA能够让GPU进行更多的工作,可编程性更高的GPU能否进行更多种类的工作?同样,GPU和CUDA组合的出现,对CPU来说并不是什么好事——没人知道,在不久的将来CPU是否被GPU篡权,失去家用PC中的主导地位;而在商用、科学领域中,CPU是否会被完全取代?因为,GPU才是并行运算的未来
|