多核异构并行计算OpenMP 4.5 C/C++篇 / 普通高等教育十三五规划教材,超算、云计算与大数据技术专业教程
¥49.00定价
作者: 雷洪
出版时间:2018年5月
出版社:冶金工业出版社
- 冶金工业出版社
- 9787502476571
- 1-1
- 86398
- 47188417-1
- 平装
- 16开
- 2018年5月
- 430
- 272
- 工学
- 机械工程
- TH114
- 理工、并行计算
- 本科
内容简介
本书主要介绍了共享内存并行编程语言OpenMP的基本原理,采用实例方式讲解在C/C++语言环境中OpenMP并行程序的编写和运行,介绍了循环、递归的并行,并重点分析了OpenMP的最新标准4.5的特点:向量化、GPU等异构设备的并行计算。本书为理工科学生和广大科技工作者学习使用并行计算的教材。
目录
1 并行计算概论
1.1 并行计算机的种类
1.1.1 多核CPU
1.1.2 GPU
1.1.3 CPU与存储器的连接方式
1.1.4 数据的通信方式
1.1.5 常见的并行计算硬件系统
1.1.6 指令和数据之间的工作方式
1.2 并行计算
1.2.1 并行计算、高性能计算与超级计算
1.2.2 并行处理技术
1.3 高性能并行计算特征
1.4 并行编程模式
1.4.1 共享内存模式
1.4.2 消息传递模式
1.4.3 数据并行模式
1.4.4 异构计算
1.5 OpenMP和MPI的特点
1.6 并行计算中常用概念
1.6.1 并发、并行和并行计算
1.6.2 程序、线程、进程和超线程
1.6.3 单核编程和多核编程
1.6.4 线程绑定
1.6.5 多线程编程和多进程编程
1.6.6 并行算法评价
1.7 OpenMP多核编程
1.7.1 OpenMP历史
1.7.2 OpenMP特点
1.8 Linux系统
1.9 常用编译器与OpenMP
1.9.1 Windows环境下visualStudio2008命令行界面的编译和执行
1.9.2 windows环境下visualStudio2008菜单界面的编译和执行
1.9.3 Windows环境下MinGW—W64的安装
1.9.4 Linux环境下Intelc/C++编译器icc的安装
1.9.5 在windows系统下远程操作服务器端Linux环境下的编译器
1.9.6 windows和Linux环境下常用命令和系统资源检查
1.10 小结
练习题
2 OpenMP编程简介
2.1 编译指导语句
2.2 并行执行模式
2.2.1 编译指导语句格式
2.2.2 主要指令
2.2.3 主要子句
2.2.4 指令的作用域
2.2.5 指令和子句的配套使用
2.3 头文件
2.4 常用库函数
2.5 最简单的并行程序
2.6 小结
练习题
3 数据环境
3.1 子句pIivate、子句shared和子句default
3.2 子句firstplivate和子句lastprivate
3.3 指令threadprivate
3.4 子句copyin和子句copyprivate
3.5 子句reduction
3.6 数据竞争
3.7 伪共享
3.8 小结
练习题
4 并行控制
4.1 指令parallel
4.2 设定线程数量
4.3 默认模式
4.4 静态模式
4.5 动态模式
4.6 嵌套模式与Bum—threads子句
4.7 条件并行子句if
4.8 动态设置并行循环的线程数量
4.9 小结
练习题
5 并行构造
5.1 负载平衡
5.1.1 静态负载平衡
5.1.2 动态负载平衡
5.2 依赖关系
5.2.1 循环依赖
5.2.2 内存依赖
5.2.3 任务依赖
5.3 指令for
5.3.1 单重循环
5.3.2 嵌套循环
5.3.3 循环工作量的划分与调度
5.3.4 子句collapse
5.4 指令sections
5.5 指令single
5.6 合并的并行工作共享结构
5.7 小结
练习题
6 线程同步
6.1 互斥锁机制
6.2 事件同步机制
6.3 指令barrier
6.4 指令nowait.
6.5 指令master
6.6 指令critical
6.7 指令atomic
6.8 指令ordered
6.9 指令flush
6.10 小结
练习题
7 运行环境
7.1 环境变量
7.1.1 UMP—DYNAMIC
7.1.2 OMP—SCHEDUIE
7.1.3 OMP—NUMJHREADS
7.1.4 0MP一NESTED
7.1.5 0MP一STAKSIZE
7.1.6 0MP一WAITPOIICY
7.1.7 0MP_PROC—BIND
7.1.8 环境变量的设置方法
7.1.9 段错误和环境变量的应用
7.2 库函数
7.2.1 运行环境操作函数
7.2.2 OpenMP时间函数
7.2.3 热点分析
7.2.4 锁函数
7.3 小结
练习题
8 任务
8.1 任务简介
8.1.1 任务结构
8.1.2 任务类别
8.2 任务的创建
8.2.1 指令parallel和子句single
8.2.2 指令for
8.2.3 指令sections
8.2.4 包含任务
8.2.5 递归
8.3 任务调度原则
8.3.1 栅障bareier
8.3.2 指令taskwait
8.3.3 指令taskgroup
8.3.4 指令taskyield
8.3.5 子句if
8.4 任务的执行和完成
8.5 任务的数据环境
8.5.1 共享变量和私有变量
8.5.2 任务与对栈数据的引用
8.5.3 全局变量
8.6 任务依赖子句depend
8.7 指令taskloop
8.8 小规模任务
8.8.1 子句final
8.8.2 子句metgeable
8.9 子句prioricy
8.10 小结
练习题
9 向量化SIMD
9.1 SIMD的发展
9.2 代码风格
9.3 循环的串行向量化指令sired
9.3.1 子句aligned
9.3.2 子句safelen
9.3.3 子句simdlen
9.3.4 子句linear
9.4 循环的并行向量化指令forsimd
9.5 函数的向量化指令declaresired
9.5.1 子句inbranch和notinbraneh
9.5.2 子句uniform
9.6 小结
练习题
10 异构计算
10.1 目标设备查询
10.2 控制权的移交指令target
10.2.1 子句device
10.2.2 子句map
10.2.3 子句defaultmap
10.2.4 子句if
10.2.5 指令targetdata
10.2.6 指令targetenterdata和targetexitdata
10.2.7 指令targetupdate
10.2.8 指令declaretarget
10.3 线程组群指令teams
10.4 5工作共享指令distr4bute
10.5 异步执行和依赖性
10.6 OpenMP并行执行模式比较
10.7 小结
练习题
参考文献
1.1 并行计算机的种类
1.1.1 多核CPU
1.1.2 GPU
1.1.3 CPU与存储器的连接方式
1.1.4 数据的通信方式
1.1.5 常见的并行计算硬件系统
1.1.6 指令和数据之间的工作方式
1.2 并行计算
1.2.1 并行计算、高性能计算与超级计算
1.2.2 并行处理技术
1.3 高性能并行计算特征
1.4 并行编程模式
1.4.1 共享内存模式
1.4.2 消息传递模式
1.4.3 数据并行模式
1.4.4 异构计算
1.5 OpenMP和MPI的特点
1.6 并行计算中常用概念
1.6.1 并发、并行和并行计算
1.6.2 程序、线程、进程和超线程
1.6.3 单核编程和多核编程
1.6.4 线程绑定
1.6.5 多线程编程和多进程编程
1.6.6 并行算法评价
1.7 OpenMP多核编程
1.7.1 OpenMP历史
1.7.2 OpenMP特点
1.8 Linux系统
1.9 常用编译器与OpenMP
1.9.1 Windows环境下visualStudio2008命令行界面的编译和执行
1.9.2 windows环境下visualStudio2008菜单界面的编译和执行
1.9.3 Windows环境下MinGW—W64的安装
1.9.4 Linux环境下Intelc/C++编译器icc的安装
1.9.5 在windows系统下远程操作服务器端Linux环境下的编译器
1.9.6 windows和Linux环境下常用命令和系统资源检查
1.10 小结
练习题
2 OpenMP编程简介
2.1 编译指导语句
2.2 并行执行模式
2.2.1 编译指导语句格式
2.2.2 主要指令
2.2.3 主要子句
2.2.4 指令的作用域
2.2.5 指令和子句的配套使用
2.3 头文件
2.4 常用库函数
2.5 最简单的并行程序
2.6 小结
练习题
3 数据环境
3.1 子句pIivate、子句shared和子句default
3.2 子句firstplivate和子句lastprivate
3.3 指令threadprivate
3.4 子句copyin和子句copyprivate
3.5 子句reduction
3.6 数据竞争
3.7 伪共享
3.8 小结
练习题
4 并行控制
4.1 指令parallel
4.2 设定线程数量
4.3 默认模式
4.4 静态模式
4.5 动态模式
4.6 嵌套模式与Bum—threads子句
4.7 条件并行子句if
4.8 动态设置并行循环的线程数量
4.9 小结
练习题
5 并行构造
5.1 负载平衡
5.1.1 静态负载平衡
5.1.2 动态负载平衡
5.2 依赖关系
5.2.1 循环依赖
5.2.2 内存依赖
5.2.3 任务依赖
5.3 指令for
5.3.1 单重循环
5.3.2 嵌套循环
5.3.3 循环工作量的划分与调度
5.3.4 子句collapse
5.4 指令sections
5.5 指令single
5.6 合并的并行工作共享结构
5.7 小结
练习题
6 线程同步
6.1 互斥锁机制
6.2 事件同步机制
6.3 指令barrier
6.4 指令nowait.
6.5 指令master
6.6 指令critical
6.7 指令atomic
6.8 指令ordered
6.9 指令flush
6.10 小结
练习题
7 运行环境
7.1 环境变量
7.1.1 UMP—DYNAMIC
7.1.2 OMP—SCHEDUIE
7.1.3 OMP—NUMJHREADS
7.1.4 0MP一NESTED
7.1.5 0MP一STAKSIZE
7.1.6 0MP一WAITPOIICY
7.1.7 0MP_PROC—BIND
7.1.8 环境变量的设置方法
7.1.9 段错误和环境变量的应用
7.2 库函数
7.2.1 运行环境操作函数
7.2.2 OpenMP时间函数
7.2.3 热点分析
7.2.4 锁函数
7.3 小结
练习题
8 任务
8.1 任务简介
8.1.1 任务结构
8.1.2 任务类别
8.2 任务的创建
8.2.1 指令parallel和子句single
8.2.2 指令for
8.2.3 指令sections
8.2.4 包含任务
8.2.5 递归
8.3 任务调度原则
8.3.1 栅障bareier
8.3.2 指令taskwait
8.3.3 指令taskgroup
8.3.4 指令taskyield
8.3.5 子句if
8.4 任务的执行和完成
8.5 任务的数据环境
8.5.1 共享变量和私有变量
8.5.2 任务与对栈数据的引用
8.5.3 全局变量
8.6 任务依赖子句depend
8.7 指令taskloop
8.8 小规模任务
8.8.1 子句final
8.8.2 子句metgeable
8.9 子句prioricy
8.10 小结
练习题
9 向量化SIMD
9.1 SIMD的发展
9.2 代码风格
9.3 循环的串行向量化指令sired
9.3.1 子句aligned
9.3.2 子句safelen
9.3.3 子句simdlen
9.3.4 子句linear
9.4 循环的并行向量化指令forsimd
9.5 函数的向量化指令declaresired
9.5.1 子句inbranch和notinbraneh
9.5.2 子句uniform
9.6 小结
练习题
10 异构计算
10.1 目标设备查询
10.2 控制权的移交指令target
10.2.1 子句device
10.2.2 子句map
10.2.3 子句defaultmap
10.2.4 子句if
10.2.5 指令targetdata
10.2.6 指令targetenterdata和targetexitdata
10.2.7 指令targetupdate
10.2.8 指令declaretarget
10.3 线程组群指令teams
10.4 5工作共享指令distr4bute
10.5 异步执行和依赖性
10.6 OpenMP并行执行模式比较
10.7 小结
练习题
参考文献