序
随着计算机科学技术的飞速发展,作为计算机的核心——处理器的体系结构也经历了从单核、多核到众核的革命性跨越。如今,“异构+众核”已成为超级计算机主流的体系结构,并将引领未来E级计
算的进一步发展。
然而,这种较为“前卫”的结构设计,也给编程者带来了很大的挑战:他们不得不面对更为复杂的底层结构和更多的存储层次,以往的算法设计和程序代码也不得不随之调整。在这种情况下,诸如
CUDA、OpenCL、OpenACC等新的异构并行编程语言应运而生。其中,OpenACC是一种极具发展前景的编程模型,其具有使用方便、代码改动小、平台适用范围广的特性,将为新时代的编程者们带来极大
的帮助。
OpenACC虽然有着易学易用的特点,但是要想全面掌握其丰富的语法特性和使用技巧,以编写高效的程序,还是需要一本有权威性、实用性的技术书籍来指导。本书作者何沧平博士是华为高级系统设
计工程师,也是OpenACC QQ群的群主,具有多年的程序开发经验,一直致力于OpenACC的发展与推广,在并行计算应用领域有着很深的造诣和独到的见解。
对于想要掌握OpenACC使用技巧和编程精髓的读者来说,本书是一本非常具有参考价值的学习教程。与传统的技术书籍相比,本书更加注重内容的可读性和易用性,逻辑清晰,内容全面准确,且更加
注重编程实践,有大量C/C++/Fortran的完整代码实例,便于读者学习和实践。作为第一本中文的OpenACC技术书籍,可谓为国内的编程学习者带来了福音。
特别值得一提的是,本书首次引入了OpenACC在“神威·太湖之光”超级计算机上应用情况的章节。神威·太湖之光是2016年全球TOP500排名第一的超级计算机,配备了完全由国人自主研发的异构
众核处理器。其超强的计算速度成为了高性能计算应用的强力助推。结合应用的特点和处理器独特的结构设计,系统对OpenACC进行了扩展。目前,该系统完成了气候气象、航空航天、船舶工程、药物设
计等十多个领域的大型应用课题,其中三个高性能计算应用入围“戈登贝尔奖”。这是我国近30年来首次入围该奖项。在这些应用的开发过程中,OpenACC起到了关键作用。
漆锋滨
国家并行计算机工程技术研究中心
前言
2010年以来,中国超级计算机建设突飞猛进,欣欣向荣。一个原因是国力强盛,大力投资高新科技;另一个原因是整体科技水平提高,需求旺盛。天气预报、石油物探、工程仿真、基因测序等传统应
用对计算资源的需求持续增长,以深度学习为代表的人工智能大爆发,资金雄厚的互联网公司对计算能力极度渴求。超级计算机的建设、应用主战场正在从教育科研单位转向科技企业。
为什么要写这本书
面对浩如烟海的数据,CPU已经力不从心,因此世界领先的超级计算机都装备大量的加速器或者众核处理器。
目前主流加速器产品是NVIDIA GPU、AMD GPU和Intel至强Phi协处理器。三种加速器使用的编程语言分别为CUDA C/CUDA Fortran、OpenCL和MIC导语。加速器计算有4个困难。
一是CUDA/OpenCL等低级语言编程难度大,且需要深入了解加速器的硬件结构。而大部分的用户不是专业编程人员,学习一门新的编程技术将耗费大量时间。
二是加速器的计算模型与CPU差别很大,移植旧程序需要几乎完全重写。大量的旧程序在性能优化上已经千锤百炼,稳定性上也久经考验,完全重写是不可完成的任务。
三是低级编程语言开发的程序与硬件结构密切相关,硬件升级时必须升级软件,否则将损失性能。而硬件每隔两三年就升级一次,频繁的软件升级将给用户带来巨大负担。
四是投资方向难以选择。三种加速器均有自己独特的编程语言,且互不兼容。用户在投资建设硬件平台、选择软件开发语言时就会陷入困境,不知三种设备中哪个会在竞争中胜出。如果所选加速器将
来落败,将会带来巨大损失;而犹豫不决又将错过技术变革的历史机遇。
OpenACC应运而生,可以克服这4个困难。OpenACC的编程机制是,程序员只在原程序中添加少量编译标识,编译器根据作者的意图自动产生低级语言代码。无须学习新的编程语言和加速器硬件知
识,便能迅速掌握。只添加少量编译标识,不破坏原代码,开发速度快,既可并行执行又可恢复串行执行。在硬件更新时,重新编译一次代码即可,不必手工修改代码。OpenACC标准制定时就考虑了目前
及将来的多种加速器产品,同一份代码可以在多种加速器设备上编译、运行,无成本切换硬件平台。掌握OpenACC后,编写程序省时、省力、省心。
本书特色
笔者学习超算技术时有过苦泪:教材一上来就讲技术细节,只能机械地学习,不清楚这些算法、语法要解决什么问题,花费巨大精力后却发现解决不了自己的难题;新技术的资料往往是英文的,而且
零碎,还不一定准确,收集、学习成本很高,求助无门;科学计算领域的祖师语言Fortran现在有点小众,新技术资料更少。为节省读者时间,本书特别重视易读性、易用性,具体有如下特点。
·第一本中文OpenACC技术书籍,方便国内读者系统阅读,快速掌握。
·全面、准确:本书覆盖OpenACC的所有特性,重要特性结合例子详细讲解,不常用的特性列出标准定义,方便查找。对特性、功能的描述均来自OpenACC规范,并用实例验证,确保准确。
·大量的例子:书中的示例代码超过160个,不是代码片断,而是完整代码,拿来即用。全部由笔者编写、测试,运行无报错。
·兼顾C/C++和Fortran:以C/C++为主来讲解,但所有的例子都有Fortran版的代码,Fortran专用特性会详细讲解。物理、气象等领域积累的优秀Fortran代码可以借此移植到新硬件上,重焕生机。
·阅读轻松:按照并行程序的编写、调优顺序,先交代各阶段面临的问题,然后自然引入OpenACC提供的解决办法,最后实测验证效果。一切顺理成章,读者不会有云里雾里的感觉。
读者对象
·科学家:迅速改造旧程序,快速编写新的原型程序验证算法、理论,将更多的时间投入到高价值的科研创新中去。
·企业程序员:一套程序适配多种运行平台,维护简单;性能敏感的部分用CUDA等低层语言编写,性能不敏感部分用OpenACC编写,相互配合,兼得程序性能和开发效率。
·本科生、研究生:花最少的时间掌握一门计算工具,省出时间学习更多的知识。
如何阅读本书
评论