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

简介: 2010年以来,中国超级计算机建设突飞猛进,欣欣向荣。一个原因是国力强盛,大力投资高新科技;另一个原因是整体科技水平提高,需求旺盛。天气预报、石油物探、工程仿真、基因测序等传统应用对计算资源的需求持续增长,以深度学习为代表的人工智能大爆发,资金雄厚的互联网公司对计算能力极度渴求。

4474998163b01efb42f4d6abe6a4db63fea1611f

前  言

    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 英伟达GPU
1.1.2 英特尔至强融核处理器
1.2 并行编程语言
1.3 CUDA C
1.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 计算构件kernels
3.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 计算构件parallel
3.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 C
7.2 OpenACC调用CUDA Fortran
7.3 CUDA C调用OpenACC
7.4 捆绑主机地址与设备地址
7.5 CUDA Fortran调用OpenACC
7.6 OpenACC(C)调用cuBLAS
7.7 OpenACC(Fortran)调用cuBLAS
第8章 运行时函数
8.1 运行时库的定义
8.2 运行时库例程
8.2.1 acc_get_num_devices
8.2.2 acc_set_device_type
8.2.3 acc_get_device_type
8.2.4 acc_set_device_num
8.2.5 acc_get_device_num
8.2.6 acc_init
8.2.7 acc_shutdown
8.2.8 acc_async_test
8.2.9 acc_async_test_all
8.2.10 acc_wait
8.2.11 acc_wait_async
8.2.12 acc_wait_all
8.2.13 acc_wait_all _async
8.2.14 acc_get_default_async
8.2.15 acc_set_default_async
8.2.16 acc_on_device
8.2.17 acc_malloc
8.2.18 acc_free
8.2.19 acc_copyin
8.2.20 acc_create
8.2.21 acc_copyout
8.2.22 acc_delete
8.2.23 acc_update_device
8.2.24 acc_update_self
8.2.25 acc_map_data
8.2.26 acc_unmap_data
8.2.27 acc_deviceptr
8.2.28 acc_hostptr
8.2.29 acc_is_present
8.2.30 acc_memcpy_to_device
8.2.31 acc_memcpy_from_device
8.2.32 acc_memcpy_device
第9章 开发环境搭建
9.1 Windows 7
9.2 Linux(rhel)
9.3 编译工具、特性支持度
第10章 在神威·太湖之光上使用OpenACC
10.1 SW26010众核处理器
10.2 存储模型
10.3 执行模型
10.4 数据管理
附录 著名超级计算机
后记 码农的悲喜

相关文章
|
10月前
|
人工智能 编解码 测试技术
ViTPose:最小只有100M的身体姿态估计模型,精确识别人体关节、手、脚等关键点
ViTPose 是基于 Transformer 架构的人体姿态估计模型,能够精准定位人体关键点,支持多种规模版本,适用于运动分析、虚拟现实等场景。
434 8
ViTPose:最小只有100M的身体姿态估计模型,精确识别人体关节、手、脚等关键点
|
6月前
|
Kubernetes Cloud Native 调度
《分布式任务调度框架深度对比:Quartz/XXL-JOB/Elastic-Job/PowerJob选型指南》​
根据IDC预测,到2025年全球将有75%的企业任务调度系统需要重构以适应云原生架构。技术雷达监测:定期关注CNCF技术趋势报告渐进式改造:从非核心业务开始验证新框架人才储备:重点培养具备K8s Operator开发能力的调度专家评估现有系统的云原生适配度在测试环境部署PowerJob 4.3.3参与CNCF调度技术社区讨论制定6个月框架迁移路线图(注:本文数据来自各框架官方路线图、CNCF年度报告及笔者压力测试结果,转载请保留出处)
1352 0
|
11月前
|
应用服务中间件 nginx Docker
Docker:WARNING: Published ports are discarded when using host network mode 解决方法
Docker在使用 `host`网络模式时会忽略端口映射,因为此模式下容器已经直接暴露在主机网络上。通过理解并合理选择网络模式,可以有效解决 `WARNING: Published ports are discarded when using host network mode`的警告。根据具体需求,选择适合的网络模式,以便在保证性能的同时确保灵活性和安全性。希望本文提供的方法和分析能帮助您在使用Docker时更好地处理网络配置问题。
2160 12
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
655 3
|
弹性计算 前端开发 Java
通义千问API:让大模型写代码和跑代码
基于前面三章的铺垫,本章我们将展示大模型Agent的强大能力。我们不仅要实现让大模型同时使用多种查询工具,还要实现让大模型能查询天气情况,最后让大模型自己写代码来查询天气情况。
通义千问API:让大模型写代码和跑代码
|
缓存 自然语言处理 并行计算
基于NVIDIA A30 加速卡推理部署通义千问-72B-Chat测试过程
本文介绍了基于阿里云通义千问72B大模型(Qwen-72B-Chat)的性能基准测试,包括测试环境准备、模型部署、API测试等内容。测试环境配置为32核128G内存的ECS云主机,配备8块NVIDIA A30 GPU加速卡。软件环境包括Ubuntu 22.04、CUDA 12.4.0、PyTorch 2.4.0等。详细介绍了模型下载、部署命令及常见问题解决方法,并展示了API测试结果和性能分析。
4526 1
|
Ubuntu NoSQL Linux
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
这篇文章详细介绍了Docker的基本使用,包括Docker的安装、常用命令、架构概念等,并通过图解和实践帮助读者快速掌握Docker的使用方法。
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
|
存储 机器学习/深度学习 人工智能
通义语音AI技术问题之传统的VAD模型的局限性定义如何解决
通义语音AI技术问题之传统的VAD模型的局限性定义如何解决
296 0