開啟主選單

求真百科

並行編程原理與程序設計

來自 孔夫子網 的圖片

並行編程原理與程序設計》,何兵壽,宋鵬,劉穎 著,出版社: 科學出版社(中國)。

書籍是全世界的營養品。生活里沒有書籍,就好像沒有陽光;智慧[1]里沒有書籍,就好像鳥兒沒有翅膀。——莎士比亞[2]

目錄

內容簡介

本書主要介紹目前#常用的幾種並行程序設計思路與方法,主要內容包括並行計算基礎、OpenMP並行程序設計簡介、MPI並行程序設計、CUDA並行程序設計及求解聲波方程的並行程序五個部分。其中OpenMP對應共享內存的CPU並行編程,MPI對應消息傳遞的CPU並行編程,CUDA對應GPU編程。因此,通過對本書的學,可以掌握目前#常用的幾種並行編程方法。

目錄

前言

一篇 並行計算基礎

第1章 並行計算機硬件基礎 3

1.1 並行計算 3

1.1.1 並行計算的概念 3

1.1.2 並行計算與計算科學 3

1.1.3 當代科學與工程問題的計算需求 4

1.2 並行計算機硬件簡介 4

1.2.1 並行計算機的發展歷史 4

1.2.2 並行計算機的分類 8

1.2.3 並行計算機的體系結構 9

1.3 當代並行計算機系統簡介 14

1.3.1 共享存儲多處理機系統 15

1.3.2 分布存儲多處理機系統 15

1.3.3 集群系統 17

1.4 並行計算機的一些基本性能指標 24

1.4.1 CPU和存儲器的某些性能指標 24

1.4.2 通信開銷 25

1.4.3 機器的成本、價格與性#價比 26

第2章 並行程序設計基礎 28

2.1 並行算法的基礎知識 28

2.1.1 並行算法領域的一些基本概念 28

2.1.2 並行程序開發策略與並行算法的描述方法 30

2.1.3 並行算法中的同步與通信 31

2.2 並行程序設計模型 32

2.2.1 計算π的樣本程序 32

2.2.2 數據並行模型 33

2.2.3 消息傳遞模型 34

2.2.4 共享變量模型 36

2.3 並行程序設計方法 38

2.3.1 PCAM並行程序設計思路 38

2.3.2 並行編程語言 41

第二篇 OpenMP並行程序設計簡介

第3章 OpenMP介紹 55

3.1 什麼是OpenMP 55

3.2 共享內存式並行計算 55

3.3 OpenMP的發展歷程 56

3.4 Windowsping台下OpenMP環境搭建 56

第4章 OpenMP指令結構 59

4.1 編譯指導語句的一般形式 59

4.2 主要指令 60

4.3 主要子句 61

4.4 常用庫函數 62

第5章 OpenMP常用指令的用法 63

5.1 數據管理 63

5.1.1 Private子句 63

5.1.2 Firstprivate/Lastprivate子句 64

5.1.3 Shared子句 65

5.1.4 Default子句 66

5.1.5 Threadprivate子句 67

5.1.6 Copyin、copyprivate子句 68

5.1.7 Reduction子句 69

5.2 並行控制 70

5.2.1 Parallel指令 70

5.2.2 For指令 75

5.2.3 Schedule子句 76

5.2.4 Sections指令 80

5.2.5 Single指令 82

5.3 同步管理 82

5.3.1 Critical指令 83

5.3.2 Atomic指令 84

5.3.3 Barrier指令 85

5.3.4 Ordered指令 86

5.3.5 Master指令 86

5.3.6 Flush指令 87

5.4 常用庫函數 87

5.4.1 運行時庫函數 87

5.4.2 鎖管理 88

5.4.3 環境變量 90

第6章 OpenMP實例 91

6.1 循環實例 91

6.2 並行程序的優化 93

6.2.1 臨界區實現 93

6.2.2 原子操作實現 95

6.2.3 歸約實現 95

6.3 快速排序並行算法 96

第三篇 MPI並行程序設計

第7章 MPI編程基礎 103

7.1 MPI簡介 103

7.1.1 MPI的含義 103

7.1.2 MPI的目標 103

7.1.3 MPI的產生 103

7.1.4 MPI的語言綁定 104

7.1.5 目前MPI的主要實現 104

7.2 一個簡單的MPI程序 105

7.2.1 MPI實現的「Hello World!」 105

7.2.2 MPI程序的框架結構 109

7.2.3 MPI程序的一些慣例 109

7.3 6個基本函數組成的MPI子集 109

7.3.1 子集介紹 109

7.3.2 MPI預定義的數據類型 114

7.3.3 MPI數據類型匹配 115

7.3.4 MPI消息 117

7.4 簡單的MPI程序示例 118

7.4.1 求二維數據中各元素絕#對值的#大值 119

7.4.2 用MPI實現計時功能 121

7.4.3 獲取機器名字與MPI版本號 123

7.4.4 是否初始化及錯誤退出 124

7.4.5 環形消息傳遞 125

7.4.6 所有進程相互問候 126

7.4.7 任意源和任意標識的使用 128

7.4.8 編寫安全的MPI程序 129

第8章 MPI的安裝與並行編程環境的設置 132

8.1 Linux環境下的MPICH2安裝與設置 132

8.2 Windows環境下MPICH2的安裝與設置 133

8.2.1 安裝 133

8.2.2 編譯運行C+MPI程序 134

8.2.3 編譯運行Fortran+MPI程序 138

第9章 對等模式與主從模式的MPI程序設計 141

9.1 對等模式MPI程序設計 141

9.1.1 問題描述——雅可比迭代 141

9.1.2 用MPI程序實現雅可比迭代 142

9.1.3 採用捆綁發送接收實現雅可比迭代 146

9.1.4 引入虛擬進程後雅可比迭代的實現 151

9.2 主從模式MPI程序設計 155

9.2.1 矩陣向量乘 155

9.2.2 主進程打印各從進程的消息 159

第10章 MPI的四種通信模式 162

10.1 標準通信模式 162

10.2 緩存通信模式 163

10.3 同步通信模式 165

10.4 就緒通信模式 167

第11章 MPI的非阻塞通信 170

11.1 非阻塞通信簡介 170

11.1.1 阻塞通信 170

11.1.2 非阻塞通信 171

11.2 非阻塞標準發送與接收 173

11.3 非阻塞通信與其他三種通信模式的結合 174

11.4 非阻塞通信的完成與檢測 175

11.4.1 單個非阻塞通信的完成與檢測 175

11.4.2 多個非阻塞通信的完成與檢測 176

11.5 非阻塞通信對象 178

11.5.1 非阻塞通信的取消 179

11.5.2 非阻塞通信對象的釋放 180

11.5.3 消息到達的檢查 181

11.5.4 用非阻塞通信來實現雅可比迭代 182

11.6 重複非阻塞通信 185

第12章 MPI的組通信調用 190

12.1 組通信概述 190

12.2 組通信的通信功能 191

12.2.1 廣播 191

12.2.2 收集 192

12.2.3 散發 196

12.2.4 組收集 199

12.2.5 全互換 201

12.3 組通信的同步功能 204

12.4 組通信的計算功能 205

12.4.1 歸約 205

12.4.2 MPI的內置歸約算符 206

12.4.3 程序舉例 207

12.4.4 組歸約 209

12.4.5 歸約並散發 211

12.4.6 掃描 212

12.4.7 不同類型歸約操作的對比 213

12.4.8 MINLOC和MAXLOC 215

12.4.9 用戶自定義的歸約操作 216

第13章 MPI的派生數據類型 220

13.1 類型圖 220

13.2 新數據類型的定義 221

13.2.1 MPI提供的數據類型生成器 221

13.2.2 新類型遞交和釋放 226

13.2.3 地址函數 227

13.2.4 與數據類型有關的調用 228

13.2.5 下界類型和上界類型 231

13.3 例題 232

13.4 打包與解包 236

第14章 MPI的進程組和通信域 239

14.1 簡介 239

14.2 進程組和通信域的管理 239

14.2.1 MPI的進程組管理接口 240

14.2.2 通信域的管理 245

14.3 組間通信域 250

第15章 MPI擴展 255

15.1 MPI的動態進程管理 255

15.1.1 組間通信域 255

15.1.2 動態進程的創建 257

15.1.3 獨立進程間的通信 260

15.1.4 基於socket的通信 263

15.2 MPI的遠程存儲訪問 263

15.2.1 窗口創建與窗口操作 264

15.2.2 窗口同步管理 267

15.3 並行I/O 275

15.3.1 並行文件管理的基本操作 276

15.3.2 顯式指定偏移量的並行文件讀寫 279

15.3.3 多視口的並行文件並行讀寫 283

15.3.4 共享文件指針讀寫 291

第16章 MPI函數調用原型與簡單解釋 297

16.1 MPI-1與C語言的接口 297

16.2 MPI-1與Fortran語言的接口 305

16.3 MPI-2與C語言的接口 314

16.4 MPI-2與Fortran語言的接口 324

第四篇 CUDA並行程序設計

第17章 GPU簡介 339

17.1 NVIDIA GPU發展簡介 339

17.2 GPU硬件架構 340

17.2.1 圖形顯卡概覽 340

17.2.2 PCI-E總線 341

17.2.3 顯存 342

17.2.4 GPU芯片 343

17.3 基於GPU的程序開發 344

17.3.1 傳統GPU開發 344

17.3.2 CUDA開發 344

第18章 CUDA安裝與編譯 346

18.1 CUDA函數庫與CUDA C++語言 346

18.1.1 CUDA API和函數庫 346

18.1.2 CUDA C++語言 347

18.1.3 CUDA C++拓展限定符語法 348

18.2 CUDA的安裝與配置 351

18.2.1 開發環境 351

18.2.2 安裝ping台 354

18.2.3 CUDA安裝與配置 355

18.3 CUDA編譯與驅動 357

18.3.1 Emu調試 357

18.3.2 編譯相關 358

18.3.3 錯誤處理 359

18.3.4 計算模式 359

第19章 CUDA編程基礎 360

19.1 主機與設備 360

19.2 核函數的定義與調用 362

19.3 設備中的空間管理與數據傳輸 363

19.4 線程結構 365

19.5 硬件映射 370

19.5.1 計算單元 370

19.5.2 Warp 372

19.5.3 執行模型 372

19.6 存儲器類型 373

19.6.1 寄存器 374

19.6.2 局部存儲器 375

19.6.3 共享存儲器 376

19.6.4 全局存儲器 377

19.6.5 常數存儲器 380

19.6.6 紋理存儲器 382

19.7 CUDA通信機制 387

19.7.1 Block內通信與同步機制 387

19.7.2 同步函數 389

19.7.3 Volatile關鍵字 393

19.7.4 ATOM操作 394

19.7.5 VOTE操作 395

第20章 CUDA程序優化 396

20.1 任務劃分 396

20.2 Grid和block維度設計 397

20.3 存儲器訪問優化 400

20.3.1 全局存儲器訪問優化 400

20.3.2 共享存儲器訪問優化 402

20.3.3 使用紋理存儲器和常數存儲器加速 405

20.4 異步並行執行 405

20.4.1 簡單異步函數使用 405

20.4.2 基於流的異步並行 406

第21章 CUDA與多設備集群 409

21.1 CUDA的設備控制 409

21.2 多設備並行 410

21.2.1 CUDA與MPI 411

21.2.2 CUDA與OpenMP 413

第五篇 求解聲波方程的並行程序

第22章 聲波方程有限差分正演模擬的並行實現 419

22.1 聲波方程有限差分模擬算法 419

22.1.1 聲波方程及差分格式 419

22.1.2 吸收邊界條件 420

22.1.3 震源設置方法 422

22.1.4 二維聲波方程正演模擬的實現步驟 423

22.2 聲波方程有限差分模擬的串行程序 425

22.3 聲波方程有限差分模擬的OpenMP程序 434

22.4 聲波方程有限差分模擬的MPI程序 445

22.5 聲波方程有限差分模擬的CUDA程序 455

22.6 聲波方程有限差分模擬的MPI+CUDA程序 465

參考文獻 478

參考文獻

  1. 關於智慧的名言,人生屋,2013-07-15
  2. 關於莎士比亞的名言名句(100句),豆丁網,2021-10-01