《OpenACC并行编程实战》—— 导读

    xiaoxiao2024-04-22  14

    前  言

        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 加速器产品1.1.1 英伟达GPU1.1.2 英特尔至强融核处理器1.2 并行编程语言1.3 CUDA C1.3.1 线程组织方式1.3.2 运行过程1.3.3 内存层级1.3.4 性能优化技术第2章 OpenACC概览2.1 OpenACC规范的内容2.1.1 抽象加速器模型2.1.2 存储模型2.1.3 计算执行模型2.2 OpenACC 2.5规范第3章 OpenACC计算构件3.1 条件编译3.2 导语格式3.3 计算构件kernels3.3.1 构件内有1个循环3.3.2 构件内2个循环3.3.3 构件内二重嵌套循环3.3.4 kernels构件内三重嵌套循环3.4 loop构件3.4.1 independent子语3.4.2 reduction归约子语3.4.3 不常用的子语3.5 计算构件parallel3.5.1 gang单独模式3.5.2 gang分裂模式3.5.3 二重循环3.5.4 三重循环3.6 组合导语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 数据管理附录 著名超级计算机后记 码农的悲喜

    相关资源:OpenACC并行编程实战
    最新回复(0)