目錄
前言
篇 并行計算基礎
第1章 并行計算機硬件基礎 3
1.1 并行計算 3
1.1.1 并行計算的概念 3
1.1.2 并行計算與計算科學 3
1.1.3 當代科學與工程問題的計算需求 4
1.2 并行計算機硬件簡介 4
1.2.1 并行計算機的發(fā)展歷史 4
1.2.2 并行計算機的分類 8
1.2.3 并行計算機的體系結構 9
1.3 當代并行計算機系統(tǒng)簡介 14
1.3.1 共享存儲多處理機系統(tǒng) 15
1.3.2 分布存儲多處理機系統(tǒng) 15
1.3.3 集群系統(tǒng) 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 并行程序開發(fā)策略與并行算法的描述方法 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的發(fā)展歷程 56
3.4 Windows平臺下OpenMP環(huán)境搭建 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 環(huán)境變量 90
第6章 OpenMP實例 91
6.1 循環(huán)實例 91
6.2 并行程序的優(yōu)化 93
6.2.1 臨界區(qū)實現 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 環(huán)形消息傳遞 125
7.4.6 所有進程相互問候 126
7.4.7 任意源和任意標識的使用 128
7.4.8 編寫安全的MPI程序 129
第8章 MPI的安裝與并行編程環(huán)境的設置 132
8.1 Linux環(huán)境下的MPICH2安裝與設置 132
8.2 Windows環(huán)境下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 采用捆綁發(fā)送接收實現雅可比迭代 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 非阻塞標準發(fā)送與接收 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 散發(fā) 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 歸約并散發(fā) 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的動態(tài)進程管理 255
15.1.1 組間通信域 255
15.1.2 動態(tài)進程的創(chuàng)建 257
15.1.3 獨立進程間的通信 260
15.1.4 基于socket的通信 263
15.2 MPI的遠程存儲訪問 263
15.2.1 窗口創(chuàng)建與窗口操作 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發(fā)展簡介 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的程序開發(fā) 344
17.3.1 傳統(tǒng)GPU開發(fā) 344
17.3.2 CUDA開發(fā) 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 開發(fā)環(huán)境 351
18.2.2 安裝平臺 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 執(zhí)行模型 372
19.6 存儲器類型 373
19.6.1 寄存器 374
19.6.2 局部存儲器 375
19.6.3 共享存儲器 3