本書是分布式并行計(jì)算的算法設(shè)計(jì)和消息傳遞并行編程的入門教程。書中詳細(xì)介紹了包括MPI基礎(chǔ)知識(shí)、求解線性代數(shù)方程組的共軛梯度法的并行算法實(shí)現(xiàn)、并行程序的效率和可擴(kuò)展性、進(jìn)程組和通信器操作、求解三對(duì)角線性代數(shù)方程組的追趕法、求解偏微分方程的算法并行化方法等相關(guān)內(nèi)容;還分析了并行程序可擴(kuò)展性差的主要原因,為讀者提供了全面的并行計(jì)算知識(shí)體系和解決方案。本書提供了典型科學(xué)計(jì)算問題的并行算法與程序設(shè)計(jì)實(shí)例,并介紹了國際上流行的科學(xué)計(jì)算軟件、工具及平臺(tái)。內(nèi)容從簡到繁、循序漸進(jìn),可幫助讀者逐步掌握并行計(jì)算技能,解決學(xué)習(xí)和工作中的問題。
更多科學(xué)出版社服務(wù),請(qǐng)掃碼獲取。
北京理工大學(xué)教授、博士生導(dǎo)師,深圳北理莫斯科大學(xué)雙聘教授。國家高層次青年人才計(jì)劃獲得者、德國洪堡學(xué)者。2014年獲得莫斯科國立大學(xué)數(shù)學(xué)物理副博士。主要研究領(lǐng)域是數(shù)學(xué)物理反問題的數(shù)學(xué)建模、數(shù)學(xué)理論和科學(xué)計(jì)算。在應(yīng)用數(shù)學(xué)和統(tǒng)計(jì)學(xué)的國際頂級(jí)雜志發(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ǔ)——一個(gè)簡單的測試程序 5
1.3.3 從文件讀取輸入?yún)?shù)并分配至各個(gè)進(jìn)程 6
1.3.4 進(jìn)程間消息發(fā)送與接收的基本函數(shù):Send和Recv 8
1.3.5 集體通信函數(shù):Bcast.12
1.3.6 從文件讀取矩陣并分配至各個(gè)進(jìn)程 13
1.3.7 從文件讀取向量并分配至各個(gè)進(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 一個(gè)優(yōu)化程序的例子 28
1.5.2 消息傳遞函數(shù):Bsend和Rsend 29
第2章 MPI簡介II 30
2.1 向量標(biāo)量積計(jì)算的順序程序 30
2.2 計(jì)算向量標(biāo)量積的并行算法 31
2.3 向量標(biāo)量積并行算法的編程實(shí)現(xiàn) 32
2.3.1 基本代碼的實(shí)現(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ù)方程組的共軛梯度法的并行算法實(shí)現(xiàn) 43
3.1 共軛梯度法的順序?qū)崿F(xiàn) 44
3.2 共軛梯度法的并行實(shí)現(xiàn) 46
3.2.1 進(jìn)程中計(jì)算數(shù)據(jù)的準(zhǔn)備 46
3.2.2 計(jì)算部分 52
3.2.3 本章并行算法實(shí)現(xiàn)的優(yōu)缺點(diǎn)分析 55
3.3 共軛梯度法的簡化并行實(shí)現(xiàn) 56
第4章 并行程序的效率和可擴(kuò)展性 60
4.1 阿姆達(dá)爾定律 60
4.1.1 第3章中并行算法的理論分析 61
4.2 第3章中并行算法在程序?qū)崿F(xiàn)中的實(shí)際加速 63
4.2.1 測量并行程序運(yùn)行時(shí)間的方法 63
4.2.2 測試并行程序所用多處理器系統(tǒng)的特性 64
4.2.3 測試計(jì)算結(jié)果 65
4.3 并行程序的效率和擴(kuò)展性分析 67
4.4 提高效率和擴(kuò)展性的策略 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 基于二維塊劃分的共軛梯度法的高級(jí)并行實(shí)現(xiàn) 81
5.4.1 進(jìn)程中計(jì)算數(shù)據(jù)的準(zhǔn)備 81
5.4.2 計(jì)算部分 94
5.5 并行程序的效率和可擴(kuò)展性評(píng)估 98
5.6 本章并行程序?qū)崿F(xiàn)的優(yōu)缺點(diǎn)分析 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ù)涞墓曹椞荻确ú⑿袑?shí)現(xiàn).109
6.2.1 進(jìn)程中計(jì)算數(shù)據(jù)的準(zhǔn)備 110
6.2.2 計(jì)算部分 116
6.3 并行程序的效率和可擴(kuò)展性評(píng)估 121
6.4 本章并行程序?qū)崿F(xiàn)的優(yōu)缺點(diǎn)分析 123
第7章 求解三對(duì)角線性代數(shù)方程組的追趕法 124
7.1 追趕法的順序?qū)崿F(xiàn) 124
7.2 追趕法的并行版本 126
7.2.1 并行算法的理論分析 131
7.3 追趕法的并行實(shí)現(xiàn) 132
7.3.1 進(jìn)程中計(jì)算數(shù)據(jù)的準(zhǔn)備 132
7.3.2 計(jì)算部分 135
第8章 求解偏微分方程的算法并行化方法:I 140
8.1 基于顯式格式的偏微分方程解的順序算法 140
8.2 順序算法的程序?qū)崿F(xiàn).142
8.3 基于顯式格式的并行算法 144
8.4 并行算法的代碼實(shí)現(xiàn) 146
8.5 并行程序的效率和可擴(kuò)展性評(píng)估 152
8.6 改進(jìn)方案的實(shí)施 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 并行程序的效率和可擴(kuò)展性評(píng)估 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 并行程序的效率與可擴(kuò)展性評(píng)估 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ì)算過程中進(jìn)行消息傳遞 204
第12章 延遲的交互請(qǐng)求 209
12.1 結(jié)構(gòu)相同的數(shù)據(jù)的多次轉(zhuǎn)移 209
12.2 延遲請(qǐng)求函數(shù):Send_init和Recv_init 211
12.3 求解偏微分方程問題的程序?qū)崿F(xiàn)的改進(jìn) 214
12.4 優(yōu)化共軛梯度法的一個(gè)程序?qū)崿F(xiàn) 217
12.5 標(biāo)準(zhǔn)MPI-4的功能:集體延遲的交互請(qǐng)求 219
第13章 混合并行編程技術(shù) 220
13.1 現(xiàn)代計(jì)算系統(tǒng)的典型配置 220
13.2 測試示例 223
13.3 使用OpenMP技術(shù)修改示例 224
13.4 使用CUDA技術(shù)修改示例 225
13.5 本章程序?qū)崿F(xiàn)的效率和可擴(kuò)展性評(píng)估 227
第14章 對(duì)并行程序可擴(kuò)展性差的分析與建議 230
14.1 并行程序可擴(kuò)展性差的主要原因 230
14.1.1 接收數(shù)據(jù)的確切順序 231
14.1.2 大量數(shù)據(jù)的同時(shí)傳輸 233
14.1.3 計(jì)數(shù)和消息傳遞階段的分離 234
14.1.4 計(jì)算拓?fù)浜途W(wǎng)絡(luò)拓?fù)渲g的不匹配 235
14.1.5 PCI帶寬不足,無法與GPU配合使用 236
14.1.6 運(yùn)行混合程序時(shí)的錯(cuò)誤系統(tǒng)設(shè)置 237
14.2 綜合建議 237
參考文獻(xiàn) 238