CUDA——用于大量数据的超级计算:第一部分 (Rob Farber专栏)

您是否有兴趣在使用高级语言(比如C)编程时,通过标准多核处理器将性能提升几个数量级?您是否也希望拥有跨多个设备的伸缩能力?

Rob Farber CUDA使您能够在开发GPU上运行的软件时使用熟悉的编程概念。 Rob Farber是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员。他在多个国家实验室进行大量数据平行计算的研究,并且是好几个新创企业的创始人之一。可以发邮件到 rob.farber@pnl.gov联系他。       您是否有兴趣在使用高级语言(比如C)编程时,通过标准多核处理器将性能提升几个数量级?您是否也希望拥有跨多个设备的伸缩能力?        很多人(包括我自己)都通过使用NVIDIA的CUDA(Compute Unified Device Architecture,即计算统一设备架构的简称)获得了这种高性能和可伸缩性,以编写廉价的多线程GPU程序。我特别强调“编程”是因为CUDA是为您的工作服务的架构,它不会迫使您的工作适应有限的一组性能库。使用CUDA,您可以发挥才能设计软件以便在多线程硬件上获得最佳性能——并从中获得乐趣,因为计算正确的映射是很有意思的,而且软件开发环境十分合理和直观。       本文是这一系列文章的第一篇,介绍了CUDA的功能(通过使用代码)和思维过程,帮助您将应用程序映射到多线程硬件(比如GPU)以获得较大的性能提升。当然,并不是所有问题都可以有效映射到多线程硬件,因此我会介绍哪些可以进行有效映射,哪些不能,而且让您对哪些映射可以运行良好有个常识性的了解。       “CUDA编程”和“GPGPU编程”并不相同(尽管CUDA运行在GPU上)。以前,为GPU编写软件意味着使用GPU语言编程。我的一个朋友曾将这一过程描述为将数据从您的肘部拉到眼前。CUDA允许您使用熟悉的编程概念开发能在GPU上运行的软件。它可以通过将软件直接编译到硬件(例如,GPU汇编语言)避免图形层API的性能开销,这样可以提供更好的性能。 您可以任选一种CUDA设备。图1和图2分别显示了运行在笔记本和台式机的离散GPU上的CUDA 多体模拟(N-body simulation)程序。

          CUDA真的可以将应用程序性能提高一到两个数量级——或者这只是一种与事实不符的夸张?       CUDA是一种相当新的技术,但是在一些书面作品和Internet中已经有很多实例突出介绍了这种技术在使用当前商用GPU硬件时对性能的极大提升。表1和表2显示了NVIDIA和Beckman Institute网站上相关内容的总结。CUDA的核心是让程序员能够使数千线程保持工作状态。目前这一代NVIDIA GPU能够有效地支持大量线程,因此它们可以将应用程序性能提高一到两个数量级。这些图形处理器的价位有高有低,几乎可供任何人使用。较新的主板将通过提供更大的内存带宽、异步数据传输、原子操作和双精度浮点计算等多项硬件技术改进扩展CUDA的功能。随着技术的不断进步,CUDA软件环境将不断扩展,最终GPU和“多核”处理器之间的区别也会逐渐消失。作为开发人员,我们可以预计,具有成千上万活动线程的应用程序将变得很常见而且CUDA将会运行在多个平台上,包括一般用途的处理器。

                在20世纪80年代,作为Los Alamos National Laboratory的科学家,我有幸使用了拥有多达65,536个平行处理器的Thinking Machines超级计算机。CUDA被证明是天生用于现代大量平行(即高线程)环境的框架。它的性能优势非常明显。我的一段生产代码,现在用CUDA编写并且运行在NVIDIA GPU上,与2.6-Ghz四核Opteron系统相比,具有明显的线形伸缩和几乎两个数量级的速度提升。        启用CUDA的图形处理器作为宿主计算机内的联合处理器运行。这意味着每个GPU都被认为有其自己的内存和处理元素,它们是与宿主计算机分开的。要进行有效的工作,数据必须在宿主计算机的内存空间和CUDA设备之间传输。因此,性能结果必须包括IO时间才更有意义。同事们喜欢将其称为“诚实的数据”,因为它们会更准确地反映将要交付生产的性能应用程序。       我认为与现有技术相比,一到两个数量级的性能提升是一个巨变,可以在很大程度上改变计算的某些方面。例如,以前需要一年的计算任务现在只要几天就可以完成,几个小时的计算突然变得可交互了,因为使用新技术它们可以在几秒钟内完成,过去不易处理的实时处理任务现在变得极易处理。最后,它为具有正确技能集和能力的顾问和工程师们提供了良好的机会,使他们可以编写高线程(大量平行)软件。那么,对于您来说,这种计算能力又能给您的职业、应用程序或实时处理需求带来哪些好处呢?       开始不需要任何成本,可以轻松地从CUDA Zone 主页(找到Get CUDA)上下载CUDA。之后,按照用于您特定操作系统的安装说明进行操作。甚至不需要图形处理器,因为可以使用软件模拟器在当前笔记本或工作站上运行,可以立即开始工作。当然,通过启用CUDA的GPU运行可以获得更好的性能。或许您的计算机上已经有了一个启用CUDA的GPU。在CUDA Zone 主页上查看支持CUDA的GPU链接(支持CUDA的GPU包括共享的片上内存和线程管理)。       如果购买新的图形处理卡,我建议您阅读本系列文章,因为我将介绍各种硬件特征(比如内存带宽、注册数量、原子操作等等)如何影响应用程序性能,这将有助您选择适合应用程序的硬件。另外,CUDA Zone论坛提供了关于CUDA各个方面的丰富信息,包括购买哪些硬件。       一旦安装,CUDA Toolkit将提供一个合理的C语言程序开发工具集,它包括:       • nvcc C编译器        • GPU 的CUDA FFT和BLAS库       • 性能分析器       • alpha 版本(截至2008年3月)的GPU的gdb调试器        • CUDA运行时驱动程序(现在还可以在标准的NVIDIA GPU驱动程序中得到)        • CUDA编程手册       nvcc C编译器完成了大部分将C代码转换成将运行在GPU或模拟器上的可执行程序的工作。幸好,汇编语言编程不要求达到很高的性能。今后的文章将介绍从其它高级语言,包括C++、FORTRAN和Python使用CUDA的内容。我假设您熟悉C/C++。不需要有平行编程或CUDA经验。这与现有CUDA文档是一致的。       创建和运行CUDA C语言程序与创建和运行其它C编程环境的工作流是一样的。面向Windows和Linux环境的明确构建和运行说明在CUDA文档中。简言之,这一工作流就是:       1. 使用最喜欢的编辑器创建或编辑CUDA程序。注意:CUDA C 语言程序的后缀为.cu。        2. 使用nvcc编译程序创建可执行程序(NVIDIA提供了带有示例的完整makefiles。通常用于CUDA设备时您只需键入make,用于模拟器时只需键入make emu=1)。       3. 运行可执行程序。       列表1是一个带您入门的简单CUDA程序。它只是一个简单的程序,调用CUDA API将数据移入和移出CUDA设备。并没有添加新内容,以免在学习如何使用工具构建和运行CUDA程序时发生混淆。在下一篇文章中,我将介绍如何开始使用CUDA设备执行一些工作。 请尝试使用这些开发工具。对初学者的一些建议:可以使用printf语句看看在模拟器下运行时(使用make emu=1构建可执行程序)GPU上会发生什么。还可以随意试验调试器的alpha版本。

 相关文章 Microsoft Talks 'Embedded Systems' The ROI of Distributed Development Cat: A Functional Stack-Based Little Language IEEE Introduces Entry-Level Software Developer Certification Getting Wired for Terahertz Computing    排名前5位的文章 Scaling Scrum Interrupt Politely Identifying Top Developers An Interview with Bjarne Stroustrup Optimizing Math-Intensive Applications with Fixed-Point Arithmetic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值