Ian Buck 畅谈 GPU 计算背后的故事

阅读数:1026 2015 年 11 月 16 日

话题:语言 & 开发架构

近日,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 内存的管理方式。CUDA

6 就推出了一个新的软件内存管理特性,支持数据在 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 读者交流群)。