《OpenACC并行程序设计:性能优化实践指南》一 导读

简介: 这是一本关于并行编程的书,不仅仅介绍OpenACC语法或从文档中收集的信息,更介绍了如何编写实际的、高性能的以及可移植的程序,这些程序可以运行在从CPU到GPU的大量设备上。具体而言,书中演示了使用PGI、Cray和PathScale等供应商提供的编译器编译示例代码,并在Intel x86处理器、Cavium 96核64位ARMv8处理器芯片集和NVIDIA GPU上运行。

1d724e92f908b6db9b042bcd03aaad69d70129d8

前言

欢迎阅读本书,这是一本由浅入深的书籍,从初学者到高级开发人员,都可以通过本书了解OpenACC的相关知识。本书由世界各地的24位作者共同编著而成,他们在高度并行编程的教学和实践方面分享了自己的专业知识。书中的例子既有时效性又不会过时。每个章节都是自包含的,可用于自学,也可以作为课堂教学的一部分。

这是一本关于并行编程的书,不仅仅介绍OpenACC语法或从文档中收集的信息,更介绍了如何编写实际的、高性能的以及可移植的程序,这些程序可以运行在从CPU到GPU的大量设备上。具体而言,书中演示了使用PGI、Cray和PathScale等供应商提供的编译器编译示例代码,并在Intel x86处理器、Cavium 96核64位ARMv8处理器芯片集和NVIDIA GPU上运行。
性能和分析相辅相成,这也是为什么我们将开源代码和PGI分析器都包含在内。
自从2012年6月11日我第一次在Dr. Dobbs网站上看到“Easy GPU Parallelism with OpenACC”以来,OpenACC标准逐步升级,编译器技术逐渐成熟,发展速度令人惊讶。过去几年的突飞猛进意味着我们现在可以在大多数HPC站点上使用OpenACC,甚至免费提供的GNU编译器工具集也支持OpenACC。我们选择在中级和高级编程章节中提供实际应用示例,以方便读者实践,这是因为程序员需要解决实际问题,而不是解决课堂问题。同时,OpenACC还是一个很新的并行编程标准,书中的几个介绍性章节非常值得一读!

目录

第1章 从串行编程到并行编程
1.1 简单的数据并行循环
1.1.1 OpenACC内核构件与并行构件对比
1.1.2 OpenACC并行的多种形式
1.1.3 accFill_ex2运行时结果
1.2 简单的任务并行示例
1.3 Amdahl定律及其扩展
1.3.1 大O表示法和数据传输
1.3.2 accTask.cpp代码的扩展性
1.4 并行执行和竞争条件
1.5 无锁编程
1.6 控制并行资源
1.7 让生活更简单
1.8 参考文献

第2章 性能导向开发
2.1 测试代码:共轭梯度法
2.1.1 代码编译
2.1.2 初始测试
2.2 描述并行度
2.2.1 加速waxpby
2.2.2 加速dot
2.2.3 加速matvec
2.3 描述数据移动
2.4 优化循环
2.4.1 缩短向量长度
2.4.2 增加并行度
2.5 在多核系统中并行运行
2.6 小结

第3章 使用Score-P和Vampir分析混合应用性能
3.1 性能分析技术和术语
3.2 逐步性能提升
3.3 激光驱动电子束的粒子单元模拟
3.4 通过代码插装准备性能测量
3.5 在应用程序执行期间记录性能信息
3.6 第一个并行PIConGPU实现
3.7 释放主机进程
3.8 优化GPU内核
3.9 增加GPU任务并行
3.10 使用Score-P和Vampir记录OpenACC运行时事件
3.11 小结
3.12 参考文献

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
795 2
|
Unix 异构计算 Windows
带你读《基于CUDA的GPU并行程序开发指南》之一:CPU并行编程概述
本书旨在帮助读者了解与基于CUDA的并行编程技术有关的基本概念,并掌握实用c语言进行GPU高性能编程的相关技巧。本书第一部分通过CPU多线程编程解释了并行计算,使得没有太多并行计算基础的读者也能毫无阻碍地进入CUDA天地;第二部分重点介绍了基于CUDA的GPU大规模并行程序的开发与实现,并通过大量的性能分析帮助读者理解如何开发一个好的GPU并行程序以及GPU架构对程序性能的影响;本书的第三部分介绍了一些常用的CUDA库。
|
12月前
|
传感器 算法 定位技术
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
369 2
|
人工智能 开发者
阿里云百炼X支付宝:「AI打赏」功能上线,Agent变现更灵活🎉🎉🎉
阿里云百炼平台联合支付宝,推出业内首个Agent「AI打赏」功能,开发者可为应用一键配置赞赏功能,用户打赏金额将直接转入开发者支付宝账户,助力快速变现。
1279 1
|
11月前
|
机器学习/深度学习 数据采集 算法
【植物疾病的识别】使用叶片图像检测植物疾病研究【图像采集、分割、特征提取】(Matlab代码实现)
【植物疾病的识别】使用叶片图像检测植物疾病研究【图像采集、分割、特征提取】(Matlab代码实现)
419 0
|
机器学习/深度学习 人工智能 并行计算
【AI系统】NVLink 原理剖析
随着AI技术的发展,大模型参数量激增,对底层硬件和网络架构提出新挑战。高效训练这些模型需要大规模GPU集群及高速网络连接,以实现快速数据交换。然而,网络瓶颈限制了GPU性能的充分发挥,表明单纯增加GPU数量不能线性提升算力。因此,算存互连和算力互连技术成为关键,如PCIe、NVLink和NVSwitch等,它们通过提高数据传输速度和效率,支持大规模并行计算,解决了大规模GPU集群中的通信延迟问题,推动了万亿级模型训练的实现。
1496 2
|
资源调度 前端开发 JavaScript
Python学习二:Python包管理器pip
这篇文章介绍了Python包管理器pip的基本概念、基本操作、如何更改下载源为国内镜像以加速下载,以及如何指定安装包的位置。
965 0
Python学习二:Python包管理器pip
|
设计模式 存储 缓存
微服务架构下的数据库设计策略
本文探讨了在微服务架构中进行数据库设计时,如何平衡数据的一致性、独立性与系统整体性能之间的关系。文章首先介绍了微服务架构的基本概念及其对数据库设计的影响,随后深入分析了三种主流的数据库设计模式——集中式、去中心化和混合模式,并结合实际案例讨论了它们的适用场景与优缺点。此外,还提出了一系列最佳实践建议,旨在帮助开发者更好地应对微服务环境下的数据管理挑战。
|
存储 SQL 数据可视化
三维引擎系列(三):BIM数据管理与可视化功能
Ganos三维引擎的BIM数据管理分析解决方案,旨在充分发挥BIM模型价值,满足数字孪生技术发展的高精度需求。该方案通过结构化拆解BIM数据,实现统一管理和联合查询;支持精细化计算BIM模型指标,并与规划红线对比;同时提供高效渲染能力。Ganos内置多种功能,如ST_ImportIFC导入IFC格式数据,ST_As3DTiles生成3D Tiles瓦片数据结构,无需依赖第三方软件即可完成BIM数据的存储、计算与可视化展示。此外,通过简单的后端服务即可实现与渲染引擎的无缝对接,显著提升三维空间计算效率。
557 0
|
存储 缓存 小程序
自己动手之小程序自定义登录态维护
谈起小程序开发,想必大家都不会陌生了。众所周知,小程序开发的官方文档是要求开发者需要自行维护登录态的。那么小程序服务端开发的登录态维护大家是如何做的呢?本文适用微信和QQ小程序的自定义登录态维护。
936 0
自己动手之小程序自定义登录态维护

热门文章

最新文章