本书是分布式并行计算的算法设计和消息传递并行编程的入门教程。书中详细介绍了包括MPI基础知识、求解线性代数方程组的共轭梯度法的并行算法实现、并行程序的效率和可扩展性、进程组和通信器操作、求解三对角线性代数方程组的追赶法、求解偏微分方程的算法并行化方法等相关内容;还分析了并行程序可扩展性差的主要原因,为读者提供了全面的并行计算知识体系和解决方案。本书提供了典型科学计算问题的并行算法与程序设计实例,并介绍了国际上流行的科学计算软件、工具及平台。内容从简到繁、循序渐进,可帮助读者逐步掌握并行计算技能,解决学习和工作中的问题。
更多科学出版社服务,请扫码获取。
北京理工大学教授、博士生导师,深圳北理莫斯科大学双聘教授。国家高层次青年人才计划获得者、德国洪堡学者。2014年获得莫斯科国立大学数学物理副博士。主要研究领域是数学物理反问题的数学建模、数学理论和科学计算。在应用数学和统计学的国际顶级杂志发表高水平论文20多篇。
目录
前言
第1章 MPI 简介I 1
1.1 矩阵向量乘法的顺序实现 2
1.2 矩阵向量乘法的并行算法 4
1.3 矩阵向量乘法并行算法的程序实现 4
1.3.1 并行编程的模型和技术 4
1.3.2 MPI基础——一个简单的测试程序 5
1.3.3 从文件读取输入参数并分配至各个进程 6
1.3.4 进程间消息发送与接收的基本函数:Send和Recv 8
1.3.5 集体通信函数:Bcast.12
1.3.6 从文件读取矩阵并分配至各个进程 13
1.3.7 从文件读取向量并分配至各个进程 15
1.3.8 矩阵与向量的并行乘法 16
1.3.9 将不同进程中的数组片段汇集成完整数组 17
1.3.10 使用Probe函数优化信息收集 18
1.3.11 集体通信函数Gather和Scatter 21
1.4 适用于任意数量进程的推广程序 23
1.5 优化程序实现的可能方法 28
1.5.1 一个优化程序的例子 28
1.5.2 消息传递函数:Bsend和Rsend 29
第2章 MPI简介II 30
2.1 向量标量积计算的顺序程序 30
2.2 计算向量标量积的并行算法 31
2.3 向量标量积并行算法的编程实现 32
2.3.1 基本代码的实现 32
2.3.2 集体通信函数:Reduce和Allreduce 36
2.4 转置矩阵与向量相乘的并行算法 37
2.5 转置矩阵与向量相乘的并行算法的程序实现 38
2.5.1 其他集体通信函数 41
2.6 阶段总结 42
第3章 求解线性代数方程组的共轭梯度法的并行算法实现 43
3.1 共轭梯度法的顺序实现 44
3.2 共轭梯度法的并行实现 46
3.2.1 进程中计算数据的准备 46
3.2.2 计算部分 52
3.2.3 本章并行算法实现的优缺点分析 55
3.3 共轭梯度法的简化并行实现 56
第4章 并行程序的效率和可扩展性 60
4.1 阿姆达尔定律 60
4.1.1 第3章中并行算法的理论分析 61
4.2 第3章中并行算法在程序实现中的实际加速 63
4.2.1 测量并行程序运行时间的方法 63
4.2.2 测试并行程序所用多处理器系统的特性 64
4.2.3 测试计算结果 65
4.3 并行程序的效率和扩展性分析 67
4.4 提高效率和扩展性的策略 69
第5章 使用进程组和通信器进行操作.71
5.1 基于二维块划分的矩阵与向量相乘的并行算法 71
5.2 基于二维块划分的转置矩阵与向量相乘的并行算法 74
5.3 进程组和通信器 75
5.3.1 进程组操作 75
5.3.2 通信器操作 77
5.4 基于二维块划分的共轭梯度法的高级并行实现 81
5.4.1 进程中计算数据的准备 81
5.4.2 计算部分 94
5.5 并行程序的效率和可扩展性评估 98
5.6 本章并行程序实现的优缺点分析 100
第6章 虚拟拓扑 101
6.1 虚拟拓扑结构 101
6.1.1 基于笛卡儿拓扑的基本函数 101
6.1.2 进程间消息传递函数:Sendrecv和Sendrecv_replace 106
6.2 基于二维环形虚拟拓扑的共轭梯度法并行实现.109
6.2.1 进程中计算数据的准备 110
6.2.2 计算部分 116
6.3 并行程序的效率和可扩展性评估 121
6.4 本章并行程序实现的优缺点分析 123
第7章 求解三对角线性代数方程组的追赶法 124
7.1 追赶法的顺序实现 124
7.2 追赶法的并行版本 126
7.2.1 并行算法的理论分析 131
7.3 追赶法的并行实现 132
7.3.1 进程中计算数据的准备 132
7.3.2 计算部分 135
第8章 求解偏微分方程的算法并行化方法:I 140
8.1 基于显式格式的偏微分方程解的顺序算法 140
8.2 顺序算法的程序实现.142
8.3 基于显式格式的并行算法 144
8.4 并行算法的代码实现 146
8.5 并行程序的效率和可扩展性评估 152
8.6 改进方案的实施 154
第9章 求解偏微分方程的算法并行化方法:II 155
9.1 基于隐式格式的偏微分方程问题的顺序算法 155
9.2 顺序算法的程序实现 158
9.3 基于隐式格式的并行算法 162
9.4 并行算法的程序实现 165
9.5 并行程序的效率和可扩展性评估 173
第10章 求解偏微分方程的算法并行化方法:III 175
10.1 基于二维空间显式格式的偏微分方程问题的顺序算法 175
10.2 顺序算法的程序实现 178
10.3 基于显式格式的并行算法 181
10.4 并行算法的程序实现 184
10.5 并行程序的效率与可扩展性评估 194
10.6 关于程序实现的改进方法的讨论 195
第11章 异步操作 197
11.1 死锁问题与顺序消息交换替代同步交换 197
11.2 进程间非阻塞消息传递函数:Isend和Irecv 201
11.3 在计算过程中进行消息传递 204
第12章 延迟的交互请求 209
12.1 结构相同的数据的多次转移 209
12.2 延迟请求函数:Send_init和Recv_init 211
12.3 求解偏微分方程问题的程序实现的改进 214
12.4 优化共轭梯度法的一个程序实现 217
12.5 标准MPI-4的功能:集体延迟的交互请求 219
第13章 混合并行编程技术 220
13.1 现代计算系统的典型配置 220
13.2 测试示例 223
13.3 使用OpenMP技术修改示例 224
13.4 使用CUDA技术修改示例 225
13.5 本章程序实现的效率和可扩展性评估 227
第14章 对并行程序可扩展性差的分析与建议 230
14.1 并行程序可扩展性差的主要原因 230
14.1.1 接收数据的确切顺序 231
14.1.2 大量数据的同时传输 233
14.1.3 计数和消息传递阶段的分离 234
14.1.4 计算拓扑和网络拓扑之间的不匹配 235
14.1.5 PCI带宽不足,无法与GPU配合使用 236
14.1.6 运行混合程序时的错误系统设置 237
14.2 综合建议 237
参考文献 238