近日,GPGPU(General Purpose GPU)计算方面的资深专家、 NVIDIA(英伟达)公司 的GPU计算软件总经理 Ian Buck 接受 The Next Platform网站采访 ,畅谈了GPU计算背后的故事。
Ian Buck对于GPU计算的研究最早起始于2000年。当时,Buck及其在斯坦福大学的一个小团队敏锐观察到了图形处理器在性能方面的优势和发展趋势。在分辨率为1024x768、刷新率为60Hz的情况下,GPU仍然可以很好的实现图像的动态刷新显示。尽管GPU的执行指令只有4-8条,其包含的操作次数却为每秒60兆左右。Buck团队开始思考如何将GPU应用于游戏和图形处理之外的更多领域。
Buck表示,将GPU用于通用计算的想法是从GPU支持可编程开始的。当时,为了更好的提高游戏图像的显示效果,GPU提供了简单的编程接口。而GPU高并行度的计算潜力正好符合矩阵乘和很多线性代数操作的需求。因此,Buck团队开始利用GPU非常有限的可编程能力探索了GPU在游戏图像之外的应用性能。
在最初几年,他们遇到了非常大的困难。尽管初步试验可以证实GPU用于通用计算的巨大潜力,推广这个想法却十分不易。一方面,GPU厂商还没有意识到GPU可编程能力的重要性。因而,GPU提供的图像API非常有限。另外一方面,Buck团队的规模实在比较小。掌握计算机图像学相关知识的同时,又掌握分子动力学等相关应用领域的理论实在困难。
然而,Buck团队开发的GPU 通用计算方面先驱项目——Brook,最终打开了GPGPU的篇章。在2004年,Buck加盟 NVIDIA 并开始集合相关的硬件和软件工程师创造GPGPU 模型——CUDA。 Buck曾表示 ,在CUDA的应用当中,最让其影响深刻的就是,乳腺癌检测和诊断的系统。与传统方法相比,采用支持CUDA编程的Tesla GPU后,医生能够更早、更精确地发现乳腺癌。而美国国家癌症研究所数据显示,基于CUDA的系统在运行蛋白质配体运算(用于研发治疗癌症和老年痴呆症的新药)时只需要原来1/12的时间。
此后,CUDA开始受到越来越多的关注。然而,Buck表示,他之前和来自很多工业界的人士交流发现,他们宁愿牺牲性能,也不愿接受一门新的语言。为了能够给相关编程人员提供很好的入门体验,从而便于CUDA的推广,CUDA采用了已经流行的C语言作为基础。这样,编程人员就不需要去学习特定的显示芯片的指令或是特殊的结构,即可编写GPU上运行的程序。
CUDA的核心设计理念就是计算机中的线程。与传统CPU中的4、8和16个线程不同,GPU中的线程可以多达几万个。Buck表示,看起来这些线程的管理是一件十分复杂的事情。但实际上,编程人员主要的困难在于如何发挥这些线程的优势,而不是管理这些线程。早期,CUDA的性能主要依赖编程人员人工发现代码中可并行计算的部分。目前,随着CUDA库的发展,这方面的工作开始越来越自动化。CUDA团队已经开发了很多石油、天然气和国防等相关产业所使用的科学计算方面的库。最终,2012年发布的Titan超级计算机使用了18688个NVIDIA Tesla K20 GPU作为协处理器,标志着GPGPU在高性能计算方面的成功推广和应用。从2011年开始,Top 500的超级计算机中至少有50台会使用GPU进行加速。而这些机器基本上也都出现在Green 500的列表中。
Buck表示,CUDA在超级计算领域的成功应用也迎来了很好的使用反馈。目前,Buck在NVIDIA的团队就根据用户反馈开始探索GPU内存的管理方式。CUDA6就推出了一个新的软件内存管理特性,支持数据在CPU内存和GPU内存之间的自动转移。计划于明年面世的 NVIDIA Pascal GPU 架构则将配备 NVLink,使 GPU 和 CPU 之间的数据传输速度较现有的 PCI-Express 标准加快5至12倍。
此外,为了进一步减少编程工作,Cray、PGI以及NVIDIA等领先的HPC供应商在2011年推出了 OpenACC 编程标准。该标准定义了一组标准化的、高层次的代码注释,使C/C++和Fortran编程人员可以利用GPU加速代码运行。NVIDIA在今年7月更是发布了全新 OpenACC免费工具套件 ,让相关研究人员能够更多的关注科学本身。Buck也一再强调,OpenACC的初衷就是让用户“首先是个科学家,然后才是一个程序员”。
感谢杜小芳对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 )。