-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
并行程序設計導論(原書第2版) 版權信息
- ISBN:9787111743194
- 條形碼:9787111743194 ; 978-7-111-74319-4
- 裝幀:平裝-膠訂
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
并行程序設計導論(原書第2版) 本書特色
·討論如何利用MPI、Pthreads、OpenMP和CUDA這四種廣泛使用的并行編程API來編寫并行程序,其中,關于CUDA的章節是全新的。 ·新增關于GPU編程和異構編程的章節,此外,還新增了與并行程序開發相關的示例和練習。 ·學習曲線友好,從簡單的編程示例開始,逐步構建更具挑戰性的示例,關于四種API的章節相互獨立,便于讀者根據需要選擇閱讀。 ·配有豐富的練習和編程作業,所有源代碼均可從本書網站免費下載。
并行程序設計導論(原書第2版) 內容簡介
本書主要講解如何使用MPI、Pthreads和OpenMP開發有效的并行程序,并在多核和集群架構上編譯運行并行程序。本書第1版已經過廣泛的本科教學實踐,第2版做了細致的更新,清晰地闡釋了如何設計、調試和評估分布式和共享內存程序的性能,并新增關于GPU編程和異構編程的內容,對加速器的討論更加全面。第2版還對習題做了更新,讀者可通過習題進一步熟悉并掌握編譯、運行和修改示例程序的方法。
并行程序設計導論(原書第2版) 目錄
An Introduction to Parallel Programming, Second Edition
譯者序
前言
第1章 為什么需要并行計算 1
1.1 為什么需要不斷提高性能 1
1.2 為什么需要建立并行系統 2
1.3 為什么需要編寫并行程序 2
1.4 如何編寫并行程序 5
1.5 我們將做什么 6
1.6 并發、并行和分布式 7
1.7 本書其余部分 8
1.8 一點警告 8
1.9 排版慣例 9
1.10 小結 9
1.11 練習 10
第2章 并行硬件與并行軟件 12
2.1 背景知識 12
2.1.1 馮·諾依曼體系結構 12
2.1.2 進程、多任務和線程 13
2.2 馮·諾依曼模型的改進 14
2.2.1 緩存基礎 14
2.2.2 緩存映射 16
2.2.3 緩存和程序:示例 17
2.2.4 虛擬內存 18
2.2.5 指令級并行 19
2.2.6 硬件多線程 21
2.3 并行硬件 22
2.3.1 并行計算機的分類 22
2.3.2 SIMD系統 22
2.3.3 MIMD系統 24
2.3.4 互連網絡 26
2.3.5 高速緩存一致性 30
2.3.6 共享內存與分布式內存 32
2.4 并行軟件 33
2.4.1 注意事項 33
2.4.2 協調進程/線程 33
2.4.3 共享內存 34
2.4.4 分布式內存 37
2.4.5 GPU編程 40
2.4.6 混合系統編程 40
2.5 輸入和輸出 41
2.5.1 MIMD系統 41
2.5.2 GPU 41
2.6 性能 42
2.6.1 在MIMD系統中的加速比和
效率 42
2.6.2 阿姆達定律 44
2.6.3 MIMD系統的可擴展性 45
2.6.4 MIMD程序的計時 46
2.6.5 GPU性能 48
2.7 并行程序設計 49
2.7.1 示例 49
2.8 編寫和運行并行程序 53
2.9 假設 53
2.10 小結 54
2.10.1 串行系統 54
2.10.2 并行硬件 55
2.10.3 并行軟件 56
2.10.4 輸入和輸出 57
2.10.5 性能 57
2.10.6 并行程序設計 58
2.10.7 假設 58
2.11 練習 58
第3章 基于MPI的分布式
內存編程 62
3.1 入門 62
3.1.1 編譯和執行 63
3.1.2 MPI程序 64
3.1.3 MPI_Init和
MPI_Finalize 64
3.1.4 通信域、MPI_Comm_size和MPI_Comm_rank 65
3.1.5 SPMD程序 66
3.1.6 通信 66
3.1.7 MPI_Send 66
3.1.8 MPI_Recv 67
3.1.9 消息匹配 68
3.1.10 status_p參數 69
3.1.11 MPI_Send和MPI_Recv的
語義 69
3.1.12 一些潛在的陷阱 70
3.2 MPI中的梯形法則 70
3.2.1 梯形法則 70
3.2.2 梯形法則的并行化 71
3.3 處理I/O 74
3.3.1 輸出 74
3.3.2 輸入 75
3.4 集合通信 76
3.4.1 樹形結構的通信 76
3.4.2 MPI_Reduce 77
3.4.3 集合通信與點對點通信 78
3.4.4 MPI_Allreduce 79
3.4.5 廣播 80
3.4.6 數據分布 82
3.4.7 分散 83
3.4.8 收集 84
3.4.9 綜合實例 85
3.5 MPI派生的數據類型 88
3.6 MPI程序的性能評估 91
3.6.1 計時 91
3.6.2 結果 93
3.6.3 加速比和效率 95
3.6.4 可擴展性 95
3.7 一種并行排序算法 96
3.7.1 一些簡單的串行排序算法 96
3.7.2 并行奇偶移項排序 98
3.7.3 MPI程序中的安全性 100
3.7.4 關于并行奇偶排序的一些
補充細節 102
3.8 小結 103
3.9 練習 106
3.10 編程作業 112
第4章 Pthreads共享內存編程 114
4.1 進程、線程和Pthreads 114
4.2 Hello, world 115
4.2.1 執行 116
4.2.2 預備 117
4.2.3 啟動線程 117
4.2.4 運行線程 119
4.2.5 停止線程 120
4.2.6 錯誤檢查 120
4.2.7 啟動線程的其他方法 120
4.3 矩陣-向量乘法 121
4.4 臨界區 123
4.5 忙等待 126
4.6 互斥鎖 128
4.7 生產者-消費者同步和信號量 131
4.8 柵欄和條件變量 135
4.8.1 忙等待和互斥鎖 135
4.8.2 信號量 136
4.8.3 條件變量 137
4.8.4 Pthreads柵欄 139
4.9 讀寫鎖 139
4.9.1 排序的鏈表函數 140
4.9.2 多線程鏈表 142
4.9.3 Pthreads的讀寫鎖 144
4.9.4 各種實現方案的性能 145
4.9.5 實現讀寫鎖 146
4.10 緩存、緩存一致性和偽共享 147
4.11 線程安全 150
4.11.1 不正確的程序可以產生
正確的輸出 153
4.12 小結 153
4.13 練習 154
4.14 編程作業 159
第5章 OpenMP共享內存編程 161
5.1 入門 162
5.1.1 編譯和運行OpenMP程序 163
5.1.2 程序 163
5.1.3 錯誤檢查 165
5.2 梯形法則 166
5.2.1 **個OpenMP版本 166
5.3 變量的作用域 170
5.4 歸約子句 170
5.5 parallel指令 173
5.5.1 注意事項 174
5.5.2 數據依賴性 175
5.5.3 尋找循環迭代相關 176
5.5.4 估算π 176
5.5.5 關于作用域的更多內容 178
5.6 關于OpenMP中的循環的更多
內容:排序 179
5.6.1 冒泡排序 179
5.6.2 奇偶移項排序 180
5.7 循環的調度 182
5.7.1 schedule子句 183
5.7.2 static調度類型 185
5.7.3 dynamic和guided調度
類型 185
5.7.4 runtime調度類型 186
5.7.5 哪種調度 187
5.8 生產者和消費者 188
5.8.1 隊列 188
5.8.2 消息傳遞 188
5.8.3 發送消息 189
5.8.4 接收消息 189
5.8.5 終止檢測 190
5.8.6 開始 190
5.8.7 atomic指令 191
5.8.8 臨界區和鎖 191
5.8.9 在消息傳遞程序中使用鎖 193
5.8.10 critical指令、atomic
指令或鎖 194
5.8.11 注意事項 194
5.9 緩存、緩存一致性和偽共享 195
5.10 任務化 199
5.11 線程安全 202
5.11.1 不正確的程序可以產生
正確的輸出 204
5.12 小結 204
5.13 練習 208
5.14 編程作業 211
第6章 用CUDA進行GPU編程 215
6.1 GPU和GPGPU 215
6.2 GPU架構 215
6.3 異構計算 217
6.4 CUDA hello 217
6.4.1 源代碼 218
6.4.2 編譯與運行程序 219
6.5 深入了解 219
6.6 線程、線程塊和線程網格 220
6.7 NVIDIA計算能力和設備架構 223
6.8 向量加法 223
6.8.1 核函數 224
6.8.2 Get_args函數 225
6.8.3 Allocate_vectors函數和
托管內存 226
6.8.4 main函數調用的其他函數 227
6.8.5 顯式內存傳輸 229
6.9 從CUDA核函數返回結果 231
6.10 CUDA梯形法則I 233
6.10.1 梯形法則 233
6.10.2 一種CUDA實現 234
6.10.3 初始化、返回值和*后
更新 235
6.10.4 使用正確的線程 236
6.10.5 更新返回值和atomicAdd
函數 236
6.10.6 CUDA梯形法則的性能 237
6.11 CUDA梯形法則II:提升性能 238
6.11.1 樹形通信 238
6.11.2 局部變量、寄存器、共享和
全局內存 239
6.11.3 線程束和線程束洗牌 240
6.11.4 使用線程束洗牌實現樹形
全局求和 241
6.11.5 共享內存和線程束洗牌的
替代方案 242
6.12 用warpSize個線程塊實現
梯形法則 243
6.12.1 主機代碼 244
6.12.2 使用線程束洗牌的核函數 244
6.12.3 使用共享內存的核函數 244
6.12.4 性能 245
6.13 CUDA梯形法則III:使用具有
多個線程束的線程塊 245
6.13.1 __syncthreads函數 246
6.13.2 關于共享內存的更多內容 247
6.13.3 使用共享內存的線程束
求和 247
6.13.4 共享內存庫 248
6.13.5 收尾工作 249
6.13.6 性能 251
6.14 雙調排序 251
6.14.1 串行雙調排序 251
6.14.2 蝶式交換和二進制表示 254
6.14.3 并行雙調排序I 256
6.14.4 并行雙調排序II 258
6.14.5 CUDA雙調排序的性能 259
6.15 小結 260
6.16 練習 264
6.17 編程作業 267
第7章 并行程序開發 269
7.1 兩種n-body問題的解決方案 269
7.1.1 問題描述 269
7.1.2 兩種串行方案 270
7.1.3 并行化n-body求解方案 274
7.1.4 關于I/O的說明 276
7.1.5 使用OpenMP并行化基本
求解方案 277
7.1.6 使用OpenMP并行化簡化
求解方案 279
7.1.7 評估OpenMP代碼 283
7.1.8 使用Pthreads并行化求解
方案 284
7.1.9 使用MPI并行化求解方案 284
7.1.10 使用MPI并行化簡化求解
方案 286
7.1.11 MPI簡化求解的性能 291
7.1.12 使用CUDA并行化基本
求解方案 292
7.1.13 關于CUDA協同組的說明 294
7.1.14 基本CUDA n-body求解
方案的性能 295
7.1.15 提高CUDA n-body求解
方案性能的方法 295
7.1.16 在n-body求解方案中使用
共享內存技術 296
7.2 樣本排序 299
7.2.1 樣本排序和桶排序 299
7.2.2 選擇樣本數據 300
7.2.3 Map函數的簡單實現 301
7.2.4 Map的另一種實現方案 302
7.2.5 并行化樣本排序 305
7.2.6 使用OpenMP實現樣本
排序 308
7.2.7 使用Pthreads實現樣本
排序 312
7.2.8 使用MPI實現樣本排序 314
7.2.9 使用CUDA實現樣本排序 323
7.3 注意事項 331
7.4 使用哪種API 331
7.5 小結 332
7.5.1 MPI 333
7.6 練習 334
7.7 編程作業 340
第8章 下一步該怎么走 343
參考文獻 345
并行程序設計導論(原書第2版) 作者簡介
彼得·S.帕切科(PeterS. Pacheco)舊金山大學計算機科學榮休教授,曾任舊金山大學計算機系主任、數學系主任。之前曾為加州大學洛杉磯分校教授。他的主要研究方向是并行科學計算,包括電路仿真的并行軟件開發、語音識別、模擬大規模神經元網絡等。他擁有佛羅里達州立大學數學博士學位。
馬修·馬倫塞克(Matthew Malensek) 舊金山大學計算機科學系助理教授。他的研究興趣是數據科學的系統方法,重點是可擴展分析、海量數據流的存儲和管理,以及云/邊緣計算,這些項目涵蓋大氣科學、流行病學和地理信息系統等領域。他擁有科羅拉多州立大學計算機科學博士學位。
- >
名家帶你讀魯迅:朝花夕拾
- >
伯納黛特,你要去哪(2021新版)
- >
詩經-先民的歌唱
- >
人文閱讀與收藏·良友文學叢書:一天的工作
- >
龍榆生:詞曲概論/大家小書
- >
我與地壇
- >
名家帶你讀魯迅:故事新編
- >
苦雨齋序跋文-周作人自編集