并行计算与程序设计(第二版) / 普通高等院校“十四五”计算机类专业系列教材
¥36.00定价
作者: 刘其成
出版时间:2024-01
出版社:中国铁道出版社
- 中国铁道出版社
- 9787113307080
- 2版
- 519573
- 48256918-3
- 16开
- 2024-01
- 软件工程及相关专业
- 本科
作者简介
内容简介
本书是“普通高等院校‘十四五’计算类专业系列教材”之一,对并行计算的理论知识和并行程序设计方法进行了系统的论述,包括并行计算基本概念、并行计算机基础、并行计算模型、并行算法设计基础、并行计算性能评测、OpenMP多线程并行程序设计、MPI消息传递并行程序设计、Java多线程并行程序设计、Python并行程序设计、大数据分布式计算等内容。
本书集作者多年的教学经验编写而成,在论述并行计算理论知识的基础上,特别注重并行程序设计的实践方法及实用性。书中含有大量精心设计并调试通过的程序实例,以方便读者参考。
本书适合作为普通高等院校计算机科学与技术专业、软件工程专业以及计算机类相关专业本科生和研究生的教材,也可作为社会培训教材或软件开发人员的参考书。
本书集作者多年的教学经验编写而成,在论述并行计算理论知识的基础上,特别注重并行程序设计的实践方法及实用性。书中含有大量精心设计并调试通过的程序实例,以方便读者参考。
本书适合作为普通高等院校计算机科学与技术专业、软件工程专业以及计算机类相关专业本科生和研究生的教材,也可作为社会培训教材或软件开发人员的参考书。
目录
第1章 概述 1
1.1 实例 1
1.1.1 求和 1
1.1.2 泡茶问题 2
1.1.3 图书馆新书上架 2
1.1.4 天气预报 3
1.1.5 HPCC计划 3
1.1.6 教务管理系统 3
1.1.7 地球物理石油勘探数据处理系统 4
1.2 并行计算基础知识 5
1.2.1 并行计算的重要性 5
1.2.2 并行计算的定义、并行计算机系统及软件 6
1.2.3 并行计算的应用分类 6
1.2.4 并行设计的方法 7
1.2.5 应用系统的并行性 8
1.2.6 并行计算的研究内容 8
1.3 并行程序设计策略和模型 9
1.3.1 并行程序设计策略 9
1.3.2 并行程序设计模型 9
1.4 相关概念 10
1.4.1 顺序、并发与并行 10
1.4.2 进程和线程 11
1.4.3 一些基本概念 12
习题 13
第2章 并行计算机基础 14
2.1 并行计算机体系结构 14
2.1.1 结点 15
2.1.2 互联网络 15
2.1.3 并行计算机访存模型 19
2.2 并行计算机的分类 20
2.2.1 并行计算机的控制结构 20
2.2.2 地址空间 21
2.2.3 并行计算机系统结构模型 21
2.3 多核技术 28
2.3.1 多核芯片 28
2.3.2 片上多核处理器体系结构 28
2.3.3 超线程技术 29
2.3.4 基于多核的软件开发 30
2.3.5 虚拟化技术 30
2.4 GPU技术 30
2.4.1 简介 30
2.4.2 GPU与并行计算 31
习题 32
第3章 并行计算模型 33
3.1 并行计算模型概述 33
3.1.1 串行计算模型与并行计算模型 33
3.1.2 并行计算模型与并行算法 33
3.1.3 并行计算模型与并行系统中其他模型的关系 34
3.2 PRAM模型 34
3.2.1 基本PRAM模型 34
3.2.2 实例 35
3.3 BSP模型 36
3.3.1 BSP模型原理 36
3.3.2 实例 37
3.4 LogP模型 38
3.4.1 LogP模型原理 38
3.4.2 实例 38
3.5 并行计算模型比较 39
3.5.1 PRAM模型和LogP模型的比较 39
3.5.2 BSP模型和LogP模型的比较 39
习题 40
第4章 并行算法设计基础 41
4.1 并行算法设计方法 41
4.1.1 基本方法 41
4.1.2 实例 42
4.2 并行算法设计过程 44
4.2.1 PCAM设计方法学 45
4.2.2 划分 45
4.2.3 通信 47
4.2.4 组合 49
4.2.5 映射 51
4.3 并行算法设计技术 52
4.4 求和问题的并行算法设计 53
习题 54
第5章 并行计算性能评测 55
5.1 基本概念 55
5.1.1 运行时间 55
5.1.2 问题规模 56
5.1.3 额外开销函数 56
5.2 并行系统的性能分析 58
5.2.1 加速比 58
5.2.2 效率 62
5.2.3 开销 63
5.2.4 粒度和数据映射对性能的影响 63
5.2.5 实例 64
5.3 并行系统的可扩展性度量 64
5.3.1 可扩展性 64
5.3.2 度量指标 66
5.3.3 实例 68
习题 69
第6章 OpenMP多线程并行程序设计 70
6.1 OpenMP编程基础 70
6.1.1 OpenMP多线程编程模型 70
6.1.2 OpenMP程序结构 71
6.1.3 使用Microsoft Visual Studio.NET编写OpenMP程序 72
6.2 编译指导语句 73
6.2.1 并行域结构——parallel指令 74
6.2.2 共享任务结构 75
6.2.3 同步结构 82
6.2.4 数据处理子句 87
6.3 运行时库函数 96
6.3.1 基本函数 96
6.3.2 运行时库函数的互斥锁支持 97
6.4 环境变量 99
6.5 实例 99
6.5.1 求和 99
6.5.2 数值积分 103
6.6 OpenMP多线程程序性能分析 108
6.6.1 并行额外开销 108
6.6.2 线程同步带来的开销 110
6.6.3 负载均衡 111
6.6.4 OpenMP中的任务调度 113
习题 119
第7章 MPI消息传递并行程序设计 121
7.1 消息传递接口 121
7.1.1 简介 121
7.1.2 MPI程序特点 121
7.2 典型MPI实现——MPICH 123
7.2.1 简介 123
7.2.2 MPICH的安装和配置 123
7.3 MPI编程基础 127
7.3.1 简单的MPI程序示例 127
7.3.2 MPI程序的4个基本函数 128
7.3.3 统计时间 128
7.3.4 错误管理 128
7.4 MPI的点对点通信 129
7.4.1 点对点通信的例子 129
7.4.2 MPI_Send()函数 130
7.4.3 MPI_Recv()函数 130
7.4.4 消息管理七要素 131
7.4.5 非阻塞通信 133
7.5 MPI群集通信 133
7.5.1 一对多群集通信函数 133
7.5.2 多对一群集通信函数 134
7.5.3 多对多群集通信函数 135
7.5.4 同步函数 136
7.6 实例 137
7.6.1 求和 137
7.6.2 数值积分 138
习题 139
第8章 Java多线程并行程序设计 140
8.1 线程 140
8.1.1 基本概念 140
8.1.2 线程的状态与生命周期 141
8.1.3 线程调度与优先级 142
8.2 Runnable接口与Thread类 142
8.2.1 Runnable接口 142
8.2.2 Thread类 142
8.3 多线程的实现 144
8.3.1 创建Thread类的子类 144
8.3.2 实现Runnable接口 147
8.3.3 两种方法的比较 147
8.4 线程的同步与死锁 150
8.4.1 线程同步 150
8.4.2 线程死锁 156
8.5 实例 156
8.5.1 求和 156
8.5.2 数值积分 159
习题 161
第9章 Python并行程序设计 162
9.1 Python多线程 162
9.2 Python多进程并行程序设计 163
9.2.1 Process类实现并行 163
9.2.2 Python多进程的通信 165
9.2.3 Python多进程的数据共享 167
9.2.4 进程间同步 169
9.2.5 进程池 169
9.2.6 实例 171
9.3 Python GPU并行程序设计 174
9.3.1 概述 174
9.3.2 常用函数 175
9.3.3 神经网络概述 179
9.3.4 实例 181
习题 183
第10章 大数据分布式计算 184
10.1 Hadoop分布式计算平台 184
10.2 MapReduce分布式并行编程模型 185
10.2.1 MapReduce模型简介 185
10.2.2 MapReduce工作流程 186
10.2.3 WordCount分析 188
10.2.4 MapReduce实例 189
10.3 Spark分布式计算框架 193
10.3.1 并行程序设计策略 193
10.3.2 Spark RDD基本操作 195
10.3.3 Spark应用程序实例 196
习题 197
参考文献 198
1.1 实例 1
1.1.1 求和 1
1.1.2 泡茶问题 2
1.1.3 图书馆新书上架 2
1.1.4 天气预报 3
1.1.5 HPCC计划 3
1.1.6 教务管理系统 3
1.1.7 地球物理石油勘探数据处理系统 4
1.2 并行计算基础知识 5
1.2.1 并行计算的重要性 5
1.2.2 并行计算的定义、并行计算机系统及软件 6
1.2.3 并行计算的应用分类 6
1.2.4 并行设计的方法 7
1.2.5 应用系统的并行性 8
1.2.6 并行计算的研究内容 8
1.3 并行程序设计策略和模型 9
1.3.1 并行程序设计策略 9
1.3.2 并行程序设计模型 9
1.4 相关概念 10
1.4.1 顺序、并发与并行 10
1.4.2 进程和线程 11
1.4.3 一些基本概念 12
习题 13
第2章 并行计算机基础 14
2.1 并行计算机体系结构 14
2.1.1 结点 15
2.1.2 互联网络 15
2.1.3 并行计算机访存模型 19
2.2 并行计算机的分类 20
2.2.1 并行计算机的控制结构 20
2.2.2 地址空间 21
2.2.3 并行计算机系统结构模型 21
2.3 多核技术 28
2.3.1 多核芯片 28
2.3.2 片上多核处理器体系结构 28
2.3.3 超线程技术 29
2.3.4 基于多核的软件开发 30
2.3.5 虚拟化技术 30
2.4 GPU技术 30
2.4.1 简介 30
2.4.2 GPU与并行计算 31
习题 32
第3章 并行计算模型 33
3.1 并行计算模型概述 33
3.1.1 串行计算模型与并行计算模型 33
3.1.2 并行计算模型与并行算法 33
3.1.3 并行计算模型与并行系统中其他模型的关系 34
3.2 PRAM模型 34
3.2.1 基本PRAM模型 34
3.2.2 实例 35
3.3 BSP模型 36
3.3.1 BSP模型原理 36
3.3.2 实例 37
3.4 LogP模型 38
3.4.1 LogP模型原理 38
3.4.2 实例 38
3.5 并行计算模型比较 39
3.5.1 PRAM模型和LogP模型的比较 39
3.5.2 BSP模型和LogP模型的比较 39
习题 40
第4章 并行算法设计基础 41
4.1 并行算法设计方法 41
4.1.1 基本方法 41
4.1.2 实例 42
4.2 并行算法设计过程 44
4.2.1 PCAM设计方法学 45
4.2.2 划分 45
4.2.3 通信 47
4.2.4 组合 49
4.2.5 映射 51
4.3 并行算法设计技术 52
4.4 求和问题的并行算法设计 53
习题 54
第5章 并行计算性能评测 55
5.1 基本概念 55
5.1.1 运行时间 55
5.1.2 问题规模 56
5.1.3 额外开销函数 56
5.2 并行系统的性能分析 58
5.2.1 加速比 58
5.2.2 效率 62
5.2.3 开销 63
5.2.4 粒度和数据映射对性能的影响 63
5.2.5 实例 64
5.3 并行系统的可扩展性度量 64
5.3.1 可扩展性 64
5.3.2 度量指标 66
5.3.3 实例 68
习题 69
第6章 OpenMP多线程并行程序设计 70
6.1 OpenMP编程基础 70
6.1.1 OpenMP多线程编程模型 70
6.1.2 OpenMP程序结构 71
6.1.3 使用Microsoft Visual Studio.NET编写OpenMP程序 72
6.2 编译指导语句 73
6.2.1 并行域结构——parallel指令 74
6.2.2 共享任务结构 75
6.2.3 同步结构 82
6.2.4 数据处理子句 87
6.3 运行时库函数 96
6.3.1 基本函数 96
6.3.2 运行时库函数的互斥锁支持 97
6.4 环境变量 99
6.5 实例 99
6.5.1 求和 99
6.5.2 数值积分 103
6.6 OpenMP多线程程序性能分析 108
6.6.1 并行额外开销 108
6.6.2 线程同步带来的开销 110
6.6.3 负载均衡 111
6.6.4 OpenMP中的任务调度 113
习题 119
第7章 MPI消息传递并行程序设计 121
7.1 消息传递接口 121
7.1.1 简介 121
7.1.2 MPI程序特点 121
7.2 典型MPI实现——MPICH 123
7.2.1 简介 123
7.2.2 MPICH的安装和配置 123
7.3 MPI编程基础 127
7.3.1 简单的MPI程序示例 127
7.3.2 MPI程序的4个基本函数 128
7.3.3 统计时间 128
7.3.4 错误管理 128
7.4 MPI的点对点通信 129
7.4.1 点对点通信的例子 129
7.4.2 MPI_Send()函数 130
7.4.3 MPI_Recv()函数 130
7.4.4 消息管理七要素 131
7.4.5 非阻塞通信 133
7.5 MPI群集通信 133
7.5.1 一对多群集通信函数 133
7.5.2 多对一群集通信函数 134
7.5.3 多对多群集通信函数 135
7.5.4 同步函数 136
7.6 实例 137
7.6.1 求和 137
7.6.2 数值积分 138
习题 139
第8章 Java多线程并行程序设计 140
8.1 线程 140
8.1.1 基本概念 140
8.1.2 线程的状态与生命周期 141
8.1.3 线程调度与优先级 142
8.2 Runnable接口与Thread类 142
8.2.1 Runnable接口 142
8.2.2 Thread类 142
8.3 多线程的实现 144
8.3.1 创建Thread类的子类 144
8.3.2 实现Runnable接口 147
8.3.3 两种方法的比较 147
8.4 线程的同步与死锁 150
8.4.1 线程同步 150
8.4.2 线程死锁 156
8.5 实例 156
8.5.1 求和 156
8.5.2 数值积分 159
习题 161
第9章 Python并行程序设计 162
9.1 Python多线程 162
9.2 Python多进程并行程序设计 163
9.2.1 Process类实现并行 163
9.2.2 Python多进程的通信 165
9.2.3 Python多进程的数据共享 167
9.2.4 进程间同步 169
9.2.5 进程池 169
9.2.6 实例 171
9.3 Python GPU并行程序设计 174
9.3.1 概述 174
9.3.2 常用函数 175
9.3.3 神经网络概述 179
9.3.4 实例 181
习题 183
第10章 大数据分布式计算 184
10.1 Hadoop分布式计算平台 184
10.2 MapReduce分布式并行编程模型 185
10.2.1 MapReduce模型简介 185
10.2.2 MapReduce工作流程 186
10.2.3 WordCount分析 188
10.2.4 MapReduce实例 189
10.3 Spark分布式计算框架 193
10.3.1 并行程序设计策略 193
10.3.2 Spark RDD基本操作 195
10.3.3 Spark应用程序实例 196
习题 197
参考文献 198