首页>参考读物>计算机科学与技术>软件与程序设计

OpenACC高性能并行编程:概念与策略
作者 : [美] 苏妮塔·钱德拉塞克兰(Sunita Chandrasekaran) [德]吉多· 杰克兰德(Guido Juckeland) 编
译者 : 闫林 关志光 朱明星 等译
出版日期 : 2019-04-15
ISBN : 978-7-111-62323-6
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 244
开本 : 16
原书名 : OpenACC for Programmers: Concepts and Strategies
原出版社: Pearson Education Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书是介绍大规模并行编程OpenACC的综合实践性书籍之一。书中前3章介绍了OpenACC背后的概念和OpenACC开发工具;第4章至第7章带你了解第一个真实世界的OpenACC程序,并揭示OpenACC程序编译背后的魔力,从而引入更多概念;第8章至第10章涵盖高级主题,例如OpenACC的替代方案、底层设备交互、多设备编程和任务并行性;第11章和第12章探讨了OpenACC实现潜在新语言特性的各种研究领域。

图书特色

OpenACC for Programmers: Concepts and Strategies
OpenACC
高性能并行编程
概念与策略
[美]   苏妮塔·钱德拉塞克兰(Sunita Chandrasekaran)
          [德]   吉多· 杰克兰德(Guido Juckeland)       编
闫林 关志光 朱明星  等译

图书前言

欢迎阅读本书。这本书汇聚了来自学术界、公共研究和工业界的19位资深作者的前沿观点。作者的共同目标是汇编一系列章节,对使用OpenACC进行并行编程做系统介绍。我们设计这些章节是为了提供借鉴,以便在课堂中使用。因此,亲爱的读者,你也许是一名报名参加这个可能令人生畏的并行编程课程学习的学生。请放心,这门课你选对了。计算机设备不再属于非并行类型,并行编程比以往更加重要。
本书的组织结构
我们的目标是循序渐进地介绍OpenACC是如何表达并行性的,以避免让你承受过多的学习压力。以下是本书的组织方式。
前3章介绍了OpenACC背后的概念和OpenACC开发工具。
第4~7章带你了解第一个真实世界的OpenACC程序,并揭示OpenACC程序编译背后的魔力,从而引入更多概念。
第8~10章涵盖高级主题,例如OpenACC的替代方案、底层设备交互、多设备编程和任务并行性。
第11章和第12章探讨了OpenACC实现潜在新语言特性的各种研究领域。
大多数章节在最后包含一些练习来回顾章节内容。这些解决方案以及章节中使用的代码示例可在https://github.com/OpenACCUserGroup/openacc_concept_strategies_book在线获得。此URL还提供了每章的幻灯片,供授课教师参考。

专家评论

作为新一代的信息技术,高性能计算、云计算、物联网、新型网络等已经成为数字经济的重要支撑。OpenACC自2011年推出以来,在高性能计算领域得到了广泛应用。本书由业内多名专家从各个方面对OpenACC进行了阐述,不仅讲述了应该怎么做,而且还深入探讨了这么做的原因。无论是对于初学者还是专业人士,本书都具有很好的参考价值。
张载龙教授
南京邮电大学

本书是介绍大规模并行编程OpenACC的经典书籍之一。书中阐述了OpenACC的基本原理、重要概念、关键技术,教授了如何使用OpenACC开发工具和性能检测工具。书中有基于多种场景的、完整的代码示例,也有许多案例练习。无论您是已经掌握OpenACC基础知识、需要提升OpenACC能力的专业人员,还是OpenACC的初学者,本书由浅入深的教学,以及它的全面性和实践性都能让您受益匪浅。
孙振鹏
最佳国际实践联盟主席
EXIN国际信息科学考试学会亚太区总经理

本书将异构大规模并行编程的复杂机制用严谨而通俗的语言阐述出来,读者无须学习新的编程语言和加速器硬件知识,就能迅速掌握OpenACC,能够实现快速开发且不会破坏原代码。本书还能帮助读者克服常见的性能、互操作性和可移植性的挑战,助力大家在多个处理器之间高效从容地分配任务。本书值得编程人员拥有!
边江
美国计算机行业协会(ComTIA)中国区首席代表
在云计算和大数据时代,掌握异构环境下的大规模并行编程将成为程序员必备的能力之一。本书系统介绍了OpenACC编程的设计思路、方法、过程、步骤、产出物和注意事项,既有理论,又有实践演练,可帮助广大读者方便地学习OpenACC程序是如何编译的,并系统地掌握OpenACC编程的最佳实践,以从容应对时代的挑战!
盛国军
海尔电器集团首席信息官

随着大数据和人工智能的场景应用日益广泛,并展示出清晰明了的价值,如何实现技术能力的高效获取变得越来越重要。建立已广泛存在的异构系统和计算能力的协同机制,最大化共享和复用价值,成为一种关键能力。本书为我们打开了一扇大门,感谢19位专家和中国译者们的辛勤努力,让我们有机会快速学习和实践,快速构建异构系统的大规模海量计算能力,从而更快更好地实现场景价值。
徐斌
碧桂园集团首席信息官

在计算需求几何级增长的背景下,由传统编程向大规模并行编程的转型是一个漫长、充满风险的艰辛过程。本书用浅显的语言,帮助大家掌握异构环境下的大规模并行编程原理、方法和技巧,帮助我们主动防范并降低各种风险,少走弯路。本书还通过各种编程练习,帮助大家成为真正的OpenACC专家。
史震
东旭集团副总裁兼首席信息官
本书是并行编程领域的一部力作。19位非常优秀的OpenACC专家基于自己丰富的理论和实践经验,系统地讲授了OpenACC代码编程的原理、原则、语法结构和实战应用技巧及方法,帮助大家掌握编辑器、编译器、调试器和性能分析工具以提高效率。本书是本领域不可多得的佳作,值得拥有和学习!
朱怀敏
37互娱首席技术官

本书是OpenACC领域影响力巨大的专著。书中对OpenACC 是什么、为什么需要OpenACC以及OpenACC能够用来做什么都有翔实的介绍。19位顶尖专家的真知灼见在书中随处可见。相信本书的出版将成为国内 OpenACC 生态圈中的一件盛事,并为众多OpenACC 爱好者、研究者以及其他圈内人士提供巨大帮助。
王津银
优维科技CEO,互联网技术专家

使用OpenACC无缝对接CUDA Fortran、CUDA C/C++、cuBLAS等成熟生态资源,可以大幅提升大规模并行编程效率,提高移植性和性能。本书对编程人员很有参考和学习价值!
熊普江
腾讯布道师

十几年前,我在攻读高性能计算博士学位的时候就已经接触和使用了OpenMP,今天再回顾这个领域,很高兴看到过去几年中多个编程工具和框架百花齐放。特别是在当前大数据和人工智能开发应用需求非常旺盛的情况下,在如何更高效便捷和更稳定地使用GPU等硬件资源方面,本书深入浅出地给出了介绍,并详细阐述了使用OpenACC的实战经验。本人最感兴趣的部分是底层设备如何交互,在如何开发多任务并行方面,本书也有所涵盖,读后受益良多!
左鑫博士
埃森哲企业内部大数据人工智能分析专家

随着人工智能的普及,越来越多的人开始认识到利用GPU的大型并行计算能力是提高AI计算的有效方式。然而,如何让自己的代码能够有效地在GPU上进行并行运算,却使很多数据科学家等非计算机专业人员望而却步。OpenACC是由克雷公司、CAPS公司、英伟达公司和PGI公司共同开发的并行计算编程标准。它可大大简化并行计算的复杂度,真正使并行计算“平民化”。
本书译者非常准确地将原书内容呈现给国内广大读者,这必将对并行计算在中国的数据科学家、科研工作者、软件工程师等广大从业人员中的普及起到重要作用。
王晓光
埃森哲新技术总管

上架指导

计算机\程序设计

封底文字

本书由业内多名专家从各个方面对OpenACC进行了阐述,不仅讲述了应该怎么做,而且还深入探讨了这么做的原因。无论是对于初学者还是专业人士,本书都具有很好的参考价值。
——张载龙教授,南京邮电大学

本书是介绍大规模并行编程OpenACC的经典书籍之一。书中阐述了OpenACC的基本原理、重要概念、关键技术,教授了如何使用OpenACC开发工具和性能检测工具。
——孙振鹏,最佳国际实践联盟主席,EXIN国际信息科学考试学会亚太区总经理

本书将异构大规模并行编程的复杂机制用严谨而通俗的语言阐述出来,读者无须学习新的编程语言和加速器硬件知识,就能迅速掌握OpenACC,能够实现快速开发且不会破坏原代码。
——边江,美国计算机行业协会(ComTIA)中国区首席代表

本书系统介绍了OpenACC编程的设计思路、方法、过程、步骤、产出物和注意事项,既有理论,又有实践演练,可帮助广大读者方便地学习OpenACC程序是如何编译的,并系统地掌握OpenACC编程的最佳实践,以从容应对时代的挑战!
——盛国军,海尔电器集团首席信息官
本书为我们打开了一扇大门,感谢19位专家和中国译者们的辛勤努力,让我们有机会快速学习和实践,快速构建异构系统的大规模海量计算能力,从而更快更好地实现场景价值。
——徐斌,碧桂园集团首席信息官


本书译者非常准确地将原书内容呈现给国内广大读者,这必将对并行计算在中国的数据科学家、科研工作者、软件工程师等广大从业人员中的普及起到重要作用。
——王晓光,埃森哲新技术总管




译者序

随着大数据和人工智能时代的到来,云计算成为基础设施,会像水和电一样无处不在。目前支持异构、众核的超级计算机架构已成为云计算的主流发展方向,多种支持异构并行编程的模型也应运而生,而OpenACC无疑是其中的佼佼者。
OpenACC是一种由用户驱动的、基于指令的、性能可移植的高级并行编程模型。它可以方便快捷地将代码移植到各种异构HPC硬件平台上。OpenACC支持C/C++/Fortran等多种编程语言,以及x86、POWERCPU、XeonKNL和NVIDIA GPU等多种硬件架构。OpenACC一经问世便广受好评,在全球范围内得到快速推广。
国内许多科研单位和研发组织都在积极引入、学习和实践OpenACC,遗憾的是目前国内相关权威书籍较少。在亚马逊网站热卖的、五星级评价的《OpenACC for Programmers: Concepts and Strategies》(即本书英文版),无疑是OpenACC领域最具权威的专著之一。本书汇聚了全球学术界、公共研究机构和产业界的19位资深专家的前沿观点,有理论、有经验教训分享、有实践案例演练、有前沿探索并且在大多数章节的结尾都提供了有针对性的练习,通过演练帮助读者深入理解对应的知识点。本书内容深入浅出,易学易懂。我们希望通过翻译此书,将OpenACC最先进的理念、方法、策略和技术推广给更多中国读者,包括大规模编程领域的科学家、科研工作者、软件工程师,也包括刚刚入行的大学生、研究生。
除了我之外,参与本书翻译的人员还有关志光、朱明星、赵艳华、杨晓晨、徐志国、雷娟、范璟玮、李艳文。我们都在软件研发领域有着多年理论研究和编程实践经验。为了确保译稿质量,我们追根溯源,查阅了大量国内外相关资料,译者们亲密合作,反复审校译稿,付出了极大努力!此书大部分工作都是译者们利用个人休息时间完成的,大家得到了家人的理解和无微不至的支持,向我们的家人表示由衷的感谢!
在本书翻译的过程中我们得到了中兴通讯有限公司袁飞老师和王渊老师的鼎力帮助,在此深表感谢!同时也非常感谢机械工业出版社华章分社关敏编辑的协调与支持!
我们的水平有限,错疏难免,读者可通过邮箱33zzqq@163.com反馈意见。

闫林
2018年12月10日

推荐序

在20世纪,用于科学和技术编程的大多数计算机都由一个或多个通用处理器(通常称为CPU)组成。从工资单处理到工程和科学计算,处理器都能轻松应对。处理器能够高效地执行算术运算、在内存中移动数据以及在各种操作之间自由切换。处理器是桌面和个人计算机、便携式计算机的计算引擎,它们处理各种工作负载的能力同样适用于处理文字、计算π的近似值、在Web上搜索和访问文档、播放音频文件以及维护许多不同类型的数据。计算机处理器的发展,就是一部不断追求更快速度的传奇史:为了构建能够在任何给定时间内执行更多数据操作的系统,计算机硬件制造商设计了越来越复杂的处理器。典型CPU的组件包括:执行简单算术和逻辑运算的算术逻辑单元(ALU),管理各种计算机组件并向ALU发送指令的控制单元(CU),以及运算时用于存储程序指令和数据的缓存和高速存储器。目前大多数计算机都具有多级缓存,包括少量的快速存储器到大量的慢速存储器。
应用程序开发人员和用户不断要求更强的计算能力,不管他们的目标是更真实地建立对象模型、在更短的时间内分析更多的数据,还是更快地实现高分辨率显示。例如,计算能力的增强使得天气预报取得长足进步,预报员能够预测未来几天甚至几周的天气,汽车制造商能够生产节能汽车。为了满足这一需求,计算机供应商努力缩小处理器各种组件的尺寸,以便配置更多的晶体管,晶体管是实际负责执行计算的微型设备。但是随着晶体管变得更小更密集,它们也变得越来越热。在某些时候,很明显,如果要获得更快的处理速度,就需要采用新的方法。
由此多核处理系统诞生了!在多核处理系统中,处理器的实际计算逻辑(或核)被复制成多份。每个核通常拥有自己的ALU和CU,但可能与其他核共享一个或多个级别的缓存和其他内存。核与核之间能够以各种不同的方式连接,通常会共享一些硬件资源,尤其是内存。时至今日,几乎所有的便携式计算机、桌面计算机和集群都是基于多核处理器构建的。
多核处理器中的每个核都能够独立执行传统单核处理器执行的所有指令(比如加法、乘法和分支指令)。因此,可以使用各个核同时运行不同的程序,或者将各个核协同起来提升单个应用程序的性能。在多核上并行运行的应用程序要取得实际的性能提升,取决于应用程序如何充分利用各个核的能力,以及如何有效管理核与核之间的协同。对于创建多核程序的应用程序开发人员来说,挑战层出不穷。理想的状态是,每个核都会不断地为整体结果做出贡献。为了(接近)实现这一点,工作负载需要在多个核之间均匀分配,并且可能由于一个核需要另外一个核产生的数据,因此要对工作负载进行组织,以尽量减少每个核的等待时间。最重要的是,程序员必须尽量避免大量的顺序代码,或只让一个核处于活动状态的区域。这个观点在阿姆达尔定律(Amdahl’s law)中得以证实。该定律指出,无论程序的并行部分有多快,总体计算的速度提升受到顺序代码部分的限制。为了实现这一点,在某些情况下可能需要从头开始重新设计应用程序。
其他许多计算机被嵌入在电话系统、玩具、打印机和其他电子设备中,并越来越多地用于从洗衣机到冰箱等家电中。这些专用计算芯片通常用来执行某个特定功能或一组功能,并且刚好具有完成该工作所需要的硬件。一般来说,它们所能执行的也只有这些任务了。随着对实现更复杂操作的需求的不断增长,如今这些设备中有一部分也采用了专用多核处理器,使其计算能力得以增强,适用范围得以扩大。
虽然计算机游戏的概念自20世纪60年代就已出现,但家用游戏机十年之后才首次推出,直到20世纪80年代才开始普及。家用游戏机所采用的专用芯片,也是特别为它们设计的。不管是过去还是现在,游戏机设备市场都非常巨大,为此技术人员投入了大量的精力来研发处理器,这些处理器特别擅长快速构建显示在屏幕或其他输出设备上的图像。与此同时,图形处理单元(GPU)顺应游戏机市场而生,并发展成为非常强大的计算设备。游戏机专用处理器和GPU在满足特定用途方面,即支持计算机游戏方面,表现得非常专业,它们能够运行各种内容千差万别的游戏。换言之,它们虽然不是通用计算机,但并没有被高度优化为只能执行某个非常特殊的指令序列。尤其是GPU,它被设计为尽可能平滑且真实地呈现一系列图像。当一个游戏场景因游戏玩家的输入而产生(高速生成并显示一系列图像)时,会涉及大量的物理知识。例如,可以模拟草的运动以确定各个叶柄在(虚拟的)风中如何摆动,并可以计算阴影效果以提供逼真的体验。因此,为游戏设计的硬件可能适用于某些类型的技术计算并不足为奇。我们很快就会看到,事实的确如此。
一些超大规模应用,例如天气预报、化学及药物、经济及金融、航空和数字电影,需要大量的计算能力。新的对硬件速度有特别要求的计算用途层出不穷。所构建的用于支持超大规模应用的系统,被称为高性能计算(High-Performance Computing,HPC)集群。高性能计算集群由一组被称为节点的计算机组成,节点之间通过高速网络连接。此类系统中的许多节点(并非所有节点)使用与桌面系统基本相同的技术构建而成。当多核处理器进入桌面和PC市场后,它们也被配置为HPC平台的节点。目前几乎所有的HPC平台都具有多核节点。
几十年来,HPC系统的开发人员和运营人员一直站在硬件革新的最前沿,他们在这一领域取得的进步构成了本书主题的背景和动机。IBM的Roadrunner超级计算机(2008年安装在美国能源部洛斯阿拉莫斯国家实验室,LANL)是首个在基准测试(Linpack TOP500,广泛用于评估运行科学应用程序代码的系统的速度)中持续性能可以达到1 petaflop/s(每秒1千万亿次浮点计算)的计算系统。它的节点就是通常所说的混合架构:它们不仅在节点中引入双核处理器,还将Cell处理器连接到多核处理器。如此设计的理念是,Cell处理器可以比多核更快地执行代码的某些部分。但是要在Cell上执行,必须专门为它编写代码,还必须将数据从多核内存传输到Cell内存,然后返回计算结果。由于Cell的可用内存非常少,这一切被证实很难完成。
工业和公共机构大型数据中心不断增长的计算服务成本,尤其是计算机的电力消耗成本,已经引起人们的关注。像Cell这样的专用核,有望以非常合理的运营成本为适当的应用程序代码提供更高的计算效率。具有这些特性的核越来越多地被称为加速器。在美国能源部洛斯阿拉莫斯国家实验室,实验人员遇到一个在混合节点中部署加速器的重大挑战。应用程序代码必须经过重大修改才能充分利用Cell技术。此外,数据和代码的传输成本必须通过代码速度提升来分摊。
Titan(2013年安装在美国能源部橡树岭国家实验室)是一个具有里程碑意义的计算系统,运行速度高达20 pflop/s(峰值每秒2亿亿次计算),拥有超过18000个节点,它比Roadrunner更强大。它的每个混合节点本身就是一个强大的计算系统,配置有16核AMD处理器和一个NVIDIA Tesla K20 GPU。由此可见,图形处理单元已经进入高性能计算领域,通常是科学和技术计算领域。设备市场一直关注其产品功耗,GPU能够以相对低的功耗提供特别高的性能。然而,与Cell处理器一样,应用程序也需要修改才能够从GPU中受益。因此,提供适当的编程模型以帮助进行必要的适配至关重要。为支持Titan用户而开发的编程模型是本书的主题。
今天,我们正处于HPC系统节点设计创新的时代。地球上许多最快的机器都采用了Titan开创的理念,因此GPU是最常用的硬件加速器。一些新兴系统在每个节点中使用多个GPU,它们之间有时具有非常快的数据传输能力。在其他的研究成果中,所实施的技术能使多核CPU在不进行数据传输的情况下,直接与GPU共享内存和数据。尽管在有效使用内存方面仍然存在许多挑战,这一进步将减少一些最大、最严重的编程难题。也许更重要的是,很多小型HPC系统,以及桌面和便携式计算机系统,现在都配备有GPU,用户可以成功地将它们用于科学和技术计算。GPU当然是为服务游戏行业而设计的,如果没有在Titan中的成功应用,很难想象GPU还能成功地用于科学和技术计算。反过来,如果没有能满足科学应用开发社区需求的可用编程模型,在科学和技术计算领域也不可能使用GPU。
其他类型的节点架构也陆续被设计出来,它们具有类似的性能、可编程性和能源效率。特别是众核(manycore)处理的思想得到了很大的推崇。众核处理器本身就是为并行计算而设计的。换句话说,与多核平台不同,众核处理器并非用于满足通用的顺序计算需求。因此,每个核可能无法提供特别高的性能:它们提供的总体计算能力,是通过聚合大量的核并协同部署它们以解决问题。为实现这一目标,抛弃了多核硬件的一些复杂架构。这样就可以释放空间,以添加更多更简单的核。根据这个定义,GPU实际上是基于众核思想设计的,尽管它通常以其初始目的为特征。其他硬件开发人员正在将设计背后的基本思想(大量旨在协同工作的核,同时并不期望支持应用程序的整体通用性)用于创建其他类型的众核硬件。基于不同类型的核,可能采用不同的机制来聚合众多的核。HPC领域已经出现大量类似的系统,关于这方面的创新还在继续。
Titan及其后续平台和其他众核系统的用户面临的最大问题都与内存有关。在GPU和其他众核系统中,每个核的内存容量相对较小,在大多数现有平台中,存储在多核主机平台上的数据和代码必须通过相对较慢的通信网络拷贝到GPU。更糟糕的是,数据移动消耗大量电力,因此需要尽量减少数据移动。如上所述,最近的创新解决了这个问题,降低了创建代码的复杂性,这些代码在执行速度和功耗方面都非常高效。当前的趋势表明,HPC中的计算节点会越来越强,并行桌面和便携式计算机也因此可能会越来越强。伴随着这个趋势的是,在配置的核类型、新型内存和内存组织以及集成组件的新策略方面,会体现出更多的异构性。尽管这些进步不会降低硬件的复杂度,但有望降低使用加速器创建高效代码的难度。它们还将增加OpenACC适用的系统范围。

Barbara Chapman博士
石溪大学应用数学和统计学、计算机科学教授
布鲁克海文国家实验室数学和计算机科学主管

图书目录

赞誉
推荐序
译者序
前言
致谢
贡献者简介
译者简介
第1章 OpenACC概述 1
1.1 OpenACC语法 2
1.1.1 导语 3
1.1.2 子语 3
1.1.3 API例程与环境变量 4
1.2 计算构件 4
1.2.1 kernels 5
1.2.2 parallel 6
1.2.3 loop 7
1.2.4 routine 7
1.3 数据环境 9
1.3.1 数据导语 9
1.3.2 数据子语 10
1.3.3 cache导语 11
1.3.4 部分数据传输 11
1.4 总结 12
1.5 练习 12
第2章 循环级并行性 14
2.1 kernels循环与parallel循环的比较 15
2.2 并行性的三个级别 18
2.2.1 gang、worker与vector子语 18
2.2.2 将并行性映射到硬件 19
2.3 其他loop构件 20
2.3.1 循环折叠 20
2.3.2 independent子语 21
2.3.3 seq与auto子语 22
2.3.4 reduction子语 23
2.4 总结 25
2.5 练习 26
第3章 OpenACC编程工具 27
3.1 架构的通用特性 27
3.2 编译OpenACC代码 28
3.3 OpenACC应用程序的性能分析 30
3.3.1 性能分析层次和术语 30
3.3.2 性能数据获取 31
3.3.3 性能数据记录和显示 32
3.3.4 OpenACC性能分析接口 32
3.3.5 支持OpenACC的性能工具 33
3.3.6 NVIDIA性能分析工具 34
3.3.7 针对混合应用程序的Score-P工具基础架构 35
3.3.8 TAU性能系统 40
3.4 识别OpenACC程序中的bug 42
3.5 总结 44
3.6 练习 45
第4章 使用OpenACC编写第一个程序 48
4.1 案例研究 48
4.1.1 串行代码 49
4.1.2 编译代码 55
4.2 创建一个原生的并行版本 56
4.2.1 找到热点 56
4.2.2 使用kernels安全吗 56
4.2.3 OpenACC实现 56
4.3 OpenACC程序的性能 59
4.4 优化的并行版本 60
4.4.1 减少数据移动 61
4.4.2 特别聪明的小改动 62
4.4.3 最终的结果 63
4.5 总结 65
4.6 练习 66
第5章 编译OpenACC 67
5.1 并行性的挑战 68
5.1.1 并行硬件 68
5.1.2 映射循环 69
5.1.3 内存层次结构 71
5.1.4 归约 72
5.1.5 应对并行性的OpenACC 72
5.2 重建编译器 73
5.2.1 编译器可以做什么 74
5.2.2 编译器不能做什么 75
5.3 编译OpenACC 76
5.3.1 代码预备工作 77
5.3.2 调度 77
5.3.3 串行代码 78
5.3.4 用户错误 79
5.4 总结 80
5.5 练习 81
第6章 最佳编程实践 83
6.1 通用准则 84
6.1.1 最大化设备计算 84
6.1.2 优化数据局部性 85
6.2 最大化设备计算 86
6.2.1 原子操作 86
6.2.2 kernels构件与parallel构件 87
6.2.3 运行时调优和if子语 88
6.3 优化数据局部性 89
6.3.1 最少化数据传输 89
6.3.2 数据复用和present子语 90
6.3.3 非结构化数据生命周期 91
6.3.4 指定数组形状 92
6.4 典型示例 92
6.4.1 背景知识:热力学报表 92
6.4.2 基线CPU版本的实现 93
6.4.3 性能分析 93
6.4.4 使用OpenACC进行加速 94
6.4.5 优化数据局部性 96
6.4.6 性能研究 97
6.5 总结 98
6.6 练习 98
第7章 OpenACC与性能可移植性 99
7.1 挑战 99
7.2 目标架构 100
7.2.1 特定平台的编译 101
7.2.2 x86_64多核与NVIDIA 101
7.3 OpenACC性能可移植性 101
7.3.1 OpenACC内存模型 102
7.3.2 内存架构 102
7.3.3 代码生成 102
7.3.4 性能可移植性的数据布局 103
7.4 代码重构以实现性能可移植性 103
7.4.1 HACCmk 103
7.4.2 面向多种架构 105
7.4.3 openACC在NVIDIA K20x GPU上的应用 106
7.4.4 openACC在AMD Bulldozer多核上的应用 107
7.5 总结 108
7.6 练习 109
第8章 并行编程的其他方式 111
8.1 编程模型 111
8.1.1 OpenACC 113
8.1.2 OpenMP 113
8.1.3 CUDA 114
8.1.4 OpenCL 114
8.1.5 C++ AMP 115
8.1.6 Kokkos 115
8.1.7 RAJA 116
8.1.8 线程构建模块 116
8.1.9 C++17 116
8.1.10 Fortran 2008 117
8.2 编程模型组件 117
8.2.1 并行循环 118
8.2.2 并行归约 119
8.2.3 紧密嵌套循环 121
8.2.4 分层并行性(非紧密嵌套循环) 122
8.2.5 任务并行性 124
8.2.6 数据分配 125
8.2.7 数据传输 126
8.3 案例研究 127
8.3.1 串行实现 128
8.3.2 OpenACC实现 129
8.3.3 OpenMP实现 130
8.3.4 CUDA实现 131
8.3.5 Kokkos实现 134
8.3.6 TBB实现 136
8.3.7 一些性能数字 138
8.4 总结 140
8.5 练习 140
第9章 OpenACC与互操作性 142
9.1 在OpenACC中调用原生设备代码 142
9.1.1 示例:使用DFT进行图像滤波 143
9.1.2 host_data导语及use_device子语 145
9.1.3 目标平台相关API例程 147
9.2 在原生设备代码中调用OpenACC 149
9.3 OpenACC互操作性高级话题 149
9.3.1 acc_map_data 149
9.3.2 在OpenACC kernel中调用CUDA设备例程 151
9.4 总结 152
9.5 练习 152
第10章 OpenACC高级特性 153
10.1 异步操作 153
10.1.1 OpenACC异步编程 155
10.1.2 软件流水线 160
10.2 多设备编程 168
10.2.1 多设备流水线 169
10.2.2 OpenACC与MPI 172
10.3 总结 176
10.4 练习 176
第11章 使用OpenACC的创新研究思路,第1部分 177
11.1 神威OpenACC 177
11.1.1 SW26010众核处理器 178
11.1.2 神威太湖之光中的内存模型 178
11.1.3 执行模型 180
11.1.4 数据管理 181
11.1.5 总结 183
11.2 针对加速器的嵌套循环编译器转换 184
11.2.1 OpenUH编译器基础架构 185
11.2.2 循环调度转换 187
11.2.3 循环调度的性能评估 190
11.2.4 OpenUH的其他研究课题 193
第12章 使用OpenACC的创新研究思路,第2部分 194
12.1 一个基于导语的高性能可重构计算框架 194
12.1.1 介绍 195
12.1.2 OpenACC到FPGA的基线翻译 196
12.1.3 用于高效FPGA编程的OpenACC扩展和优化 198
12.1.4 评估 203
12.1.5 总结 207
12.2 使用XcalableACC编程加速集群 207
12.2.1 XcalableMP介绍 208
12.2.2 XcalableACC:当XcalableMP遇上OpenACC 211
12.2.3 Omni编译器的实现 213
12.2.4 在HA-PACS上的性能评估 215
12.2.5 总结 220

教学资源推荐
作者: (美)Mary Campione,Kathy Walrath,Alison Huml
作者: 刘海燕 荆涛 主编 王子强 武卉明 杨健康 周睿 编著
作者: Patrick Henry Winston, Sundar Narasimhan
参考读物推荐
作者: (美)Eric Rochester 著
作者: 魏新宇 王洪涛 陈耿 著
作者: (美)Kirk Knoernschild 著
作者: 黄灯桥 徐会生 著