本文共 3329 字,大约阅读时间需要 11 分钟。
2010年以来,中国超级计算机建设突飞猛进,欣欣向荣。一个原因是国力强盛,大力投资高新科技;另一个原因是整体科技水平提高,需求旺盛。天气预报、石油物探、工程仿真、基因测序等传统应用对计算资源的需求持续增长,以深度学习为代表的人工智能大爆发,资金雄厚的互联网公司对计算能力极度渴求。超级计算机的建设、应用主战场正在从教育科研单位转向科技企业。
笔者学习超算技术时有过苦泪:教材一上来就讲技术细节,只能机械地学习,不清楚这些算法、语法要解决什么问题,花费巨大精力后却发现解决不了自己的难题;新技术的资料往往是英文的,而且零碎,还不一定准确,收集、学习成本很高,求助无门;科学计算领域的祖师语言Fortran现在有点小众,新技术资料更少。为节省读者时间,本书特别重视易读性、易用性,具体有如下特点。
第一本中文OpenACC技术书籍,方便国内读者系统阅读,快速掌握。全面、准确:本书覆盖OpenACC的所有特性,重要特性结合例子详细讲解,不常用的特性列出标准定义,方便查找。对特性、功能的描述均来自OpenACC规范,并用实例验证,确保准确。 大量的例子:书中的示例代码超过160个,不是代码片断,而是完整代码,拿来即用。全部由笔者编写、测试,运行无报错。 兼顾C/C++和Fortran:以C/C++为主来讲解,但所有的例子都有Fortran版的代码,Fortran专用特性会详细讲解。物理、气象等领域积累的优秀Fortran代码可以借此移植到新硬件上,重焕生机。 阅读轻松:按照并行程序的编写、调优顺序,先交代各阶段面临的问题,然后自然引入OpenACC提供的解决办法,最后实测验证效果。一切顺理成章,读者不会有云里雾里的感觉。第1章介绍超级计算技术的发展趋势和并行编程概况,可以从中了解OpenACC的作用。没有CUDA C基础的读者能够掌握基本概念,便于深入理解OpenACC的并行化技术。第2章介绍OpenACC语言的设计思路。第3~4章是本书的核心,将计算部分并行化,并将数据传递时间减到最少。至此,读者已经能够编写性能良好的OpenACC程序。第5~7章介绍高级并行技术,以进行极致性能优化,以及与CUDA C/CUDA Fortran和各类库的混合编程。第8章给出OpenACC规定的所有运行时例程,不用细读,用到时再参考。第9章指导部署开发环境,以便快速上手。
前言
1.1.1 英伟达GPU1.1.2 英特尔至强融核处理器1.3.1 线程组织方式1.3.2 运行过程1.3.3 内存层级1.3.4 性能优化技术2.1.1 抽象加速器模型2.1.2 存储模型2.1.3 计算执行模型3.3.1 构件内有1个循环3.3.2 构件内2个循环3.3.3 构件内二重嵌套循环3.3.4 kernels构件内三重嵌套循环3.4.1 independent子语3.4.2 reduction归约子语3.4.3 不常用的子语3.5.1 gang单独模式3.5.2 gang分裂模式3.5.3 二重循环3.5.4 三重循环3.7 案例研究:Jacobi迭代3.7.1 CPU上并行化3.7.2 GPU上并行化3.8 原子操作:atomic导语第4章 数据管理4.1 数据属性、数据区域和数据生存期4.2 计算构件的伴随数据区域4.2.1 引用计数4.2.2 present子语4.2.3 copy子语4.2.4 copyin子语4.2.5 copyout子语4.2.6 create子语4.2.7 数据子语内的子数组4.2.8 private私有子语4.2.9 承上私有firstprivate子语4.2.10 带有预置数据属性的变量4.2.11 default默认子语4.2.12 案例研究:Jacobi迭代优化数据传输4.3 data构件4.3.1 数据管理功能4.3.2 deviceptr子语4.3.3 案例研究:data构件迭代优化Jacobi数据传输4.4 enter data导语和exit data导语4.4.1 C++类的数据生存期4.4.2 传递设备数据指针4.5 update导语4.6 declare导语4.6.1 device_resident子语4.6.2 create子语4.6.3 link子语4.6.4 用法举例4.7 特定设备的子语第5章 计算区域内的过程调用5.1 routine导语5.2 seq子语(C版)5.3 seq子语(Fortran版)5.4 routine(名字)5.5 bind子语5.6 用子语指定并行级别5.6.1 vector级别并行5.6.2 worker、worker级别并行5.7 计算圆周率π第6章 高级特性6.1.1 async子语6.1.2 wait子语6.1.3 wait导语6.2 设备计算与主机计算重叠6.3 设备上同时执行多个队列6.4 重叠计算与数据传输6.4.1 步骤0:串行代码6.4.2 步骤1:计算并行化6.4.3 步骤2:分块计算6.4.4 步骤3:数据分块传输6.4.5 步骤4:重叠计算与传输6.5 双向传输6.6 多个设备同时运算6.6.1 环境变量6.6.2 运行过程中选择设备6.6.3 OpenMP调动多个设备第7章 与GPU生态环境互操作7.1 OpenACC调用CUDA C7.2 OpenACC调用CUDA Fortran7.3 CUDA C调用OpenACC7.4 捆绑主机地址与设备地址7.5 CUDA Fortran调用OpenACC7.6 OpenACC(C)调用cuBLAS7.7 OpenACC(Fortran)调用cuBLAS第8章 运行时函数8.1 运行时库的定义8.2 运行时库例程8.2.1 acc_get_num_devices8.2.2 acc_set_device_type8.2.3 acc_get_device_type8.2.4 acc_set_device_num8.2.5 acc_get_device_num8.2.6 acc_init8.2.7 acc_shutdown8.2.8 acc_async_test8.2.9 acc_async_test_all8.2.10 acc_wait8.2.11 acc_wait_async8.2.12 acc_wait_all8.2.13 acc_wait_all _async8.2.14 acc_get_default_async8.2.15 acc_set_default_async8.2.16 acc_on_device8.2.17 acc_malloc8.2.18 acc_free8.2.19 acc_copyin8.2.20 acc_create8.2.21 acc_copyout8.2.22 acc_delete8.2.23 acc_update_device8.2.24 acc_update_self8.2.25 acc_map_data8.2.26 acc_unmap_data8.2.27 acc_deviceptr8.2.28 acc_hostptr8.2.29 acc_is_present8.2.30 acc_memcpy_to_device8.2.31 acc_memcpy_from_device8.2.32 acc_memcpy_device第9章 开发环境搭建9.1 Windows 79.2 Linux(rhel)9.3 编译工具、特性支持度第10章 在神威·太湖之光上使用OpenACC10.1 SW26010众核处理器10.2 存储模型10.3 执行模型10.4 数据管理附录 著名超级计算机后记 码农的悲喜转载地址:http://inoxa.baihongyu.com/