本書是分布式并行計算的算法設(shè)計和消息傳遞并行編程的入門教程。書中詳細(xì)介紹了包括MPI基礎(chǔ)知識、求解線性代數(shù)方程組的共軛梯度法的并行算法實現(xiàn)、并行程序的效率和可擴展性、進(jìn)程組和通信器操作、求解三對角線性代數(shù)方程組的追趕法、求解偏微分方程的算法并行化方法等相關(guān)內(nèi)容;還分析了并行程序可擴展性差的主要原因,為讀者提供了全面的并行計算知識體系和解決方案。本書提供了典型科學(xué)計算問題的并行算法與程序設(shè)計實例,并介紹了國際上流行的科學(xué)計算軟件、工具及平臺。內(nèi)容從簡到繁、循序漸進(jìn),可幫助讀者逐步掌握并行計算技能,解決學(xué)習(xí)和工作中的問題。
更多科學(xué)出版社服務(wù),請掃碼獲取。
北京理工大學(xué)教授、博士生導(dǎo)師,深圳北理莫斯科大學(xué)雙聘教授。國家高層次青年人才計劃獲得者、德國洪堡學(xué)者。2014年獲得莫斯科國立大學(xué)數(shù)學(xué)物理副博士。主要研究領(lǐng)域是數(shù)學(xué)物理反問題的數(shù)學(xué)建模、數(shù)學(xué)理論和科學(xué)計算。在應(yīng)用數(shù)學(xué)和統(tǒng)計學(xué)的國際頂級雜志發(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 并行編程的模型和技術(shù) 4
1.3.2 MPI基礎(chǔ)——一個簡單的測試程序 5
1.3.3 從文件讀取輸入?yún)?shù)并分配至各個進(jìn)程 6
1.3.4 進(jìn)程間消息發(fā)送與接收的基本函數(shù):Send和Recv 8
1.3.5 集體通信函數(shù):Bcast.12
1.3.6 從文件讀取矩陣并分配至各個進(jìn)程 13
1.3.7 從文件讀取向量并分配至各個進(jìn)程 15
1.3.8 矩陣與向量的并行乘法 16
1.3.9 將不同進(jìn)程中的數(shù)組片段匯集成完整數(shù)組 17
1.3.10 使用Probe函數(shù)優(yōu)化信息收集 18
1.3.11 集體通信函數(shù)Gather和Scatter 21
1.4 適用于任意數(shù)量進(jìn)程的推廣程序 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 向量標(biāo)量積計算的順序程序 30
2.2 計算向量標(biāo)量積的并行算法 31
2.3 向量標(biāo)量積并行算法的編程實現(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 階段總結(jié) 42
第3章 求解線性代數(shù)方程組的共軛梯度法的并行算法實現(xiàn) 43
3.1 共軛梯度法的順序?qū)崿F(xiàn) 44
3.2 共軛梯度法的并行實現(xiàn) 46
3.2.1 進(jìn)程中計算數(shù)據(jù)的準(zhǔn)備 46
3.2.2 計算部分 52
3.2.3 本章并行算法實現(xiàn)的優(yōu)缺點分析 55
3.3 共軛梯度法的簡化并行實現(xiàn) 56
第4章 并行程序的效率和可擴展性 60
4.1 阿姆達(dá)爾定律 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 測試計算結(jié)果 65
4.3 并行程序的效率和擴展性分析 67
4.4 提高效率和擴展性的策略 69
第5章 使用進(jìn)程組和通信器進(jìn)行操作.71
5.1 基于二維塊劃分的矩陣與向量相乘的并行算法 71
5.2 基于二維塊劃分的轉(zhuǎn)置矩陣與向量相乘的并行算法 74
5.3 進(jìn)程組和通信器 75
5.3.1 進(jìn)程組操作 75
5.3.2 通信器操作 77
5.4 基于二維塊劃分的共軛梯度法的高級并行實現(xiàn) 81
5.4.1 進(jìn)程中計算數(shù)據(jù)的準(zhǔn)備 81
5.4.2 計算部分 94
5.5 并行程序的效率和可擴展性評估 98
5.6 本章并行程序?qū)崿F(xiàn)的優(yōu)缺點分析 100
第6章 虛擬拓?fù)?101
6.1 虛擬拓?fù)浣Y(jié)構(gòu) 101
6.1.1 基于笛卡兒拓?fù)涞幕竞瘮?shù) 101
6.1.2 進(jìn)程間消息傳遞函數(shù):Sendrecv和Sendrecv_replace 106
6.2 基于二維環(huán)形虛擬拓?fù)涞墓曹椞荻确ú⑿袑崿F(xiàn).109
6.2.1 進(jìn)程中計算數(shù)據(jù)的準(zhǔn)備 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 進(jìn)程中計算數(shù)據(jù)的準(zhǔn)備 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 改進(jìn)方案的實施 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 關(guān)于程序?qū)崿F(xiàn)的改進(jìn)方法的討論 195
第11章 異步操作 197
11.1 死鎖問題與順序消息交換替代同步交換 197
11.2 進(jìn)程間非阻塞消息傳遞函數(shù):Isend和Irecv 201
11.3 在計算過程中進(jìn)行消息傳遞 204
第12章 延遲的交互請求 209
12.1 結(jié)構(gòu)相同的數(shù)據(jù)的多次轉(zhuǎn)移 209
12.2 延遲請求函數(shù):Send_init和Recv_init 211
12.3 求解偏微分方程問題的程序?qū)崿F(xiàn)的改進(jìn) 214
12.4 優(yōu)化共軛梯度法的一個程序?qū)崿F(xiàn) 217
12.5 標(biāo)準(zhǔn)MPI-4的功能:集體延遲的交互請求 219
第13章 混合并行編程技術(shù) 220
13.1 現(xiàn)代計算系統(tǒng)的典型配置 220
13.2 測試示例 223
13.3 使用OpenMP技術(shù)修改示例 224
13.4 使用CUDA技術(shù)修改示例 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 計算拓?fù)浜途W(wǎng)絡(luò)拓?fù)渲g的不匹配 235
14.1.5 PCI帶寬不足,無法與GPU配合使用 236
14.1.6 運行混合程序時的錯誤系統(tǒng)設(shè)置 237
14.2 綜合建議 237
參考文獻(xiàn) 238