本書是分布式并行計算的算法設計和消息傳遞并行編程的入門教程。書中詳細介紹了包括MPI基礎知識、求解線性代數(shù)方程組的共軛梯度法的并行算法實現(xiàn)、并行程序的效率和可擴展性、進程組和通信器操作、求解三對角線性代數(shù)方程組的追趕法、求解偏微分方程的算法并行化方法等相關內(nèi)容;還分析了并行程序可擴展性差的主要原因,為讀者提供了全面的并行計算知識體系和解決方案。本書提供了典型科學計算問題的并行算法與程序設計實例,并介紹了國際上流行的科學計算軟件、工具及平臺。內(nèi)容從簡到繁、循序漸進,可幫助讀者逐步掌握并行計算技能,解決學習和工作中的問題。
更多科學出版社服務,請掃碼獲取。
北京理工大學教授、博士生導師,深圳北理莫斯科大學雙聘教授。國家高層次青年人才計劃獲得者、德國洪堡學者。2014年獲得莫斯科國立大學數(shù)學物理副博士。主要研究領域是數(shù)學物理反問題的數(shù)學建模、數(shù)學理論和科學計算。在應用數(shù)學和統(tǒng)計學的國際頂級雜志發(fā)表高水平論文20多篇。
目錄
前言
第1章 MPI 簡介I 1
1.1 矩陣向量乘法的順序?qū)崿F(xiàn) 2
1.2 矩陣向量乘法的并行算法 4
1.3 矩陣向量乘法并行算法的程序?qū)崿F(xiàn) 4
1.3.1 并行編程的模型和技術 4
1.3.2 MPI基礎——一個簡單的測試程序 5
1.3.3 從文件讀取輸入?yún)?shù)并分配至各個進程 6
1.3.4 進程間消息發(fā)送與接收的基本函數(shù):Send和Recv 8
1.3.5 集體通信函數(shù):Bcast.12
1.3.6 從文件讀取矩陣并分配至各個進程 13
1.3.7 從文件讀取向量并分配至各個進程 15
1.3.8 矩陣與向量的并行乘法 16
1.3.9 將不同進程中的數(shù)組片段匯集成完整數(shù)組 17
1.3.10 使用Probe函數(shù)優(yōu)化信息收集 18
1.3.11 集體通信函數(shù)Gather和Scatter 21
1.4 適用于任意數(shù)量進程的推廣程序 23
1.5 優(yōu)化程序?qū)崿F(xiàn)的可能方法 28
1.5.1 一個優(yōu)化程序的例子 28
1.5.2 消息傳遞函數(shù):Bsend和Rsend 29
第2章 MPI簡介II 30
2.1 向量標量積計算的順序程序 30
2.2 計算向量標量積的并行算法 31
2.3 向量標量積并行算法的編程實現(xiàn) 32
2.3.1 基本代碼的實現(xiàn) 32
2.3.2 集體通信函數(shù):Reduce和Allreduce 36
2.4 轉(zhuǎn)置矩陣與向量相乘的并行算法 37
2.5 轉(zhuǎn)置矩陣與向量相乘的并行算法的程序?qū)崿F(xiàn) 38
2.5.1 其他集體通信函數(shù) 41
2.6 階段總結 42
第3章 求解線性代數(shù)方程組的共軛梯度法的并行算法實現(xiàn) 43
3.1 共軛梯度法的順序?qū)崿F(xiàn) 44
3.2 共軛梯度法的并行實現(xiàn) 46
3.2.1 進程中計算數(shù)據(jù)的準備 46
3.2.2 計算部分 52
3.2.3 本章并行算法實現(xiàn)的優(yōu)缺點分析 55
3.3 共軛梯度法的簡化并行實現(xiàn) 56
第4章 并行程序的效率和可擴展性 60
4.1 阿姆達爾定律 60
4.1.1 第3章中并行算法的理論分析 61
4.2 第3章中并行算法在程序?qū)崿F(xiàn)中的實際加速 63
4.2.1 測量并行程序運行時間的方法 63
4.2.2 測試并行程序所用多處理器系統(tǒng)的特性 64
4.2.3 測試計算結果 65
4.3 并行程序的效率和擴展性分析 67
4.4 提高效率和擴展性的策略 69
第5章 使用進程組和通信器進行操作.71
5.1 基于二維塊劃分的矩陣與向量相乘的并行算法 71
5.2 基于二維塊劃分的轉(zhuǎn)置矩陣與向量相乘的并行算法 74
5.3 進程組和通信器 75
5.3.1 進程組操作 75
5.3.2 通信器操作 77
5.4 基于二維塊劃分的共軛梯度法的高級并行實現(xiàn) 81
5.4.1 進程中計算數(shù)據(jù)的準備 81
5.4.2 計算部分 94
5.5 并行程序的效率和可擴展性評估 98
5.6 本章并行程序?qū)崿F(xiàn)的優(yōu)缺點分析 100
第6章 虛擬拓撲 101
6.1 虛擬拓撲結構 101
6.1.1 基于笛卡兒拓撲的基本函數(shù) 101
6.1.2 進程間消息傳遞函數(shù):Sendrecv和Sendrecv_replace 106
6.2 基于二維環(huán)形虛擬拓撲的共軛梯度法并行實現(xiàn).109
6.2.1 進程中計算數(shù)據(jù)的準備 110
6.2.2 計算部分 116
6.3 并行程序的效率和可擴展性評估 121
6.4 本章并行程序?qū)崿F(xiàn)的優(yōu)缺點分析 123
第7章 求解三對角線性代數(shù)方程組的追趕法 124
7.1 追趕法的順序?qū)崿F(xiàn) 124
7.2 追趕法的并行版本 126
7.2.1 并行算法的理論分析 131
7.3 追趕法的并行實現(xiàn) 132
7.3.1 進程中計算數(shù)據(jù)的準備 132
7.3.2 計算部分 135
第8章 求解偏微分方程的算法并行化方法:I 140
8.1 基于顯式格式的偏微分方程解的順序算法 140
8.2 順序算法的程序?qū)崿F(xiàn).142
8.3 基于顯式格式的并行算法 144
8.4 并行算法的代碼實現(xiàn) 146
8.5 并行程序的效率和可擴展性評估 152
8.6 改進方案的實施 154
第9章 求解偏微分方程的算法并行化方法:II 155
9.1 基于隱式格式的偏微分方程問題的順序算法 155
9.2 順序算法的程序?qū)崿F(xiàn) 158
9.3 基于隱式格式的并行算法 162
9.4 并行算法的程序?qū)崿F(xiàn) 165
9.5 并行程序的效率和可擴展性評估 173
第10章 求解偏微分方程的算法并行化方法:III 175
10.1 基于二維空間顯式格式的偏微分方程問題的順序算法 175
10.2 順序算法的程序?qū)崿F(xiàn) 178
10.3 基于顯式格式的并行算法 181
10.4 并行算法的程序?qū)崿F(xiàn) 184
10.5 并行程序的效率與可擴展性評估 194
10.6 關于程序?qū)崿F(xiàn)的改進方法的討論 195
第11章 異步操作 197
11.1 死鎖問題與順序消息交換替代同步交換 197
11.2 進程間非阻塞消息傳遞函數(shù):Isend和Irecv 201
11.3 在計算過程中進行消息傳遞 204
第12章 延遲的交互請求 209
12.1 結構相同的數(shù)據(jù)的多次轉(zhuǎn)移 209
12.2 延遲請求函數(shù):Send_init和Recv_init 211
12.3 求解偏微分方程問題的程序?qū)崿F(xiàn)的改進 214
12.4 優(yōu)化共軛梯度法的一個程序?qū)崿F(xiàn) 217
12.5 標準MPI-4的功能:集體延遲的交互請求 219
第13章 混合并行編程技術 220
13.1 現(xiàn)代計算系統(tǒng)的典型配置 220
13.2 測試示例 223
13.3 使用OpenMP技術修改示例 224
13.4 使用CUDA技術修改示例 225
13.5 本章程序?qū)崿F(xiàn)的效率和可擴展性評估 227
第14章 對并行程序可擴展性差的分析與建議 230
14.1 并行程序可擴展性差的主要原因 230
14.1.1 接收數(shù)據(jù)的確切順序 231
14.1.2 大量數(shù)據(jù)的同時傳輸 233
14.1.3 計數(shù)和消息傳遞階段的分離 234
14.1.4 計算拓撲和網(wǎng)絡拓撲之間的不匹配 235
14.1.5 PCI帶寬不足,無法與GPU配合使用 236
14.1.6 運行混合程序時的錯誤系統(tǒng)設置 237
14.2 綜合建議 237
參考文獻 238