多核與GPU編程:工具、方法及實踐

基本介紹

  • 書名:多核與GPU編程:工具、方法及實踐
  • 作者:[阿聯]傑拉西莫斯·巴拉斯(Gerassimos Barlas) 著
  • ISBN:978-7-111-55768-5
  • 出版社:機械工業出版社 
  • 出版時間:2017-03
基本信息,內容簡介,目錄,

基本信息

作者:[阿聯]傑拉西莫斯·巴拉斯(Gerassimos Barlas) 著
ISBN(書號):978-7-111-55768-5
叢書名:高性能計算技術叢書
出版日期:2017-03
版次:1/1
開本:16
定價:¥129.00

內容簡介

本書涵蓋了當前主要的並行計算關鍵技術,包括多核CPU編程、大規模並行的眾核GPU計算。本書詳細討論了如何使用執行緒、OpenMP、MPI、CUDA和Thrust設計與開發軟體,以充分利用當今異構計算平台上的豐富計算資源。本書凝結了作者十多年來的並行計算教學經驗,不僅充分說明了從串列編程到並行計算的轉變方式,還提供了大量示例和案例研究。通過本書,讀者可以學習如何使用MPI開發運行在分散式記憶體系統上的應用程式,如何使用庫或者指令創建多核套用,如何編寫在可用計算資源間實現負載均衡的最佳化程式,以及如何針對目標多核平台進行程式剖析和調試。

目錄

譯者序
前 言
第1章 概述 1
1.1 多核計算機時代 1
1.2 並行計算機的分類 3
1.3 現代計算機概覽 4
1.3.1 Cell BE處理器 5
1.3.2 NVIDIA Kepler 6
1.3.3 AMD APU 9
1.3.4 從多核到眾核:Tilera TILE-Gx8072和Intel Xeon Phi 10
1.4 性能指標 12
1.5 並行程式性能的預測與測量 16
1.5.1 Amdahl定律 18
1.5.2 Gustafson-Barsis定律 20
第2章 多核和並行程式設計 23
2.1 引言 23
2.2 PCAM方法學 24
2.3 分解模式 26
2.3.1 任務並行 27
2.3.2 分而治之分解 28
2.3.3 幾何分解 30
2.3.4 遞歸數據分解 32
2.3.5 流水線分解 35
2.3.6 基於事件的合作分解 39
2.4 程式結構模式 39
2.4.1 單程式多數據 40
2.4.2 多程式多數據 40
2.4.3 主/從 41
2.4.4 map-reduce 41
2.4.5 fork/join 42
2.4.6 循環並行 44
2.5 匹配分解模式和程式結構模式 44
第3章 共享記憶體編程:執行緒 46
3.1 引言 46
3.2 執行緒 48
3.2.1 執行緒的定義 48
3.2.2 執行緒的作用 49
3.2.3 執行緒的生成和初始化 49
3.2.4 線上程間共享數據 55
3.3 設計考慮 57
3.4 信號量 58
3.5 經典問題中的信號量 62
3.5.1 生產者–消費者 63
3.5.2 終止處理 66
3.5.3 理髮師問題:引入公平性 75
3.5.4 讀者–寫者問題 80
3.6 monitor 84
3.6.1 設計方法1:monitor內部的關鍵區 87
3.6.2 設計方法2:monitor控制關鍵區的入口 87
3.7 經典問題中的monitor 91
3.7.1 重新考慮生產者–消費者問題 91
3.7.2 重新考慮讀者–寫者問題 95
3.8 動態執行緒管理與靜態執行緒管理 102
3.8.1 Qt執行緒池 102
3.8.2 執行緒池的創建和管理 103
3.9 調試多執行緒套用 111
3.10 高層次結構:無須顯式利用執行緒的多執行緒編程 115
3.10.1 並發map 116
3.10.2 map-reduce 118
3.10.3 並發過濾 120
3.10.4 filter-reduce 121
3.10.5 案例研究:多執行緒存儲 122
3.10.6 案例研究:多執行緒圖像匹配 131
第4章 共享記憶體編程:OpenMP 140
4.1 引言 140
4.2 第一個OpenMP程式 141
4.3 變數作用域 144
4.3.1 定積分OpenMP版本V.0:人工劃分 146
4.3.2 定積分OpenMP版本 V.1:無競爭條件的人工劃分 147
4.3.3 定積分OpenMP V.2:基於鎖的隱式劃分 148
4.3.4 定積分OpenMP V.3:基於歸約的隱式劃分 150
4.3.5 變數作用域總結 151
4.4 循環級並行 152
4.4.1 數據依賴 154
4.4.2 嵌套循環 162
4.4.3 調度 162
4.5 任務並行 166
4.5.1 sections指令 166
4.5.2 task指令 171
4.6 同步結構 177
4.7 正確性與最佳化問題 183
4.7.1 執行緒安全 183
4.7.2 假共享 187
4.8 案例研究:OpenMP中的排序算法 192
4.8.1 自下而上歸併排序算法的OpenMP實現 192
4.8.2 自上而下歸併排序算法的OpenMP實現 195
4.8.3 性能評估 200
第5章 分散式記憶體編程 203
5.1 通信進程 203
5.2 MPI 204
5.3 核心概念 205
5.4 你的第一個MPI程式 206
5.5 程式體系結構 208
5.5.1 SPMD 208
5.5.2 MPMD 209
5.6 點對點通信 210
5.7 可選的點對點通信模式 214
5.8 非阻塞通信 216
5.9 點對點通信小結 220
5.10 錯誤報告與處理 220
5.11 集合通信簡介 222
5.11.1 分發 226
5.11.2 收集 231
5.11.3 歸約 233
5.11.4 多對多收集 237
5.11.5 多對多分發 240
5.11.6 多對多歸約 245
5.11.7 全局同步 245
5.12 通信對象 245
5.12.1 派生數據類型 246
5.12.2 打包/解包 253
5.13 節點管理:通信器和組 254
5.13.1 創建組 255
5.13.2 建立內部通信器 257
5.14 單邊通信 259
5.14.1 RMA通信函式 261
5.14.2 RMA同步函式 262
5.15 I/O注意事項 270
5.16 MPI多進程和多執行緒混合編程 276
5.17 時序和性能測量 279
5.18 調試和分析MPI程式 279
5.19 Boost.MPI庫 283
5.19.1 阻塞和非阻塞通信 285
5.19.2?數據序列化 289
5.19.3?集合通信 292
5.20 案例研究:有限擴散聚合模型 295
5.21 案例研究:暴力加密破解 300
5.21.1 版本1:“基本型”MPI 300
5.21.2 版本2:MPI與OpenMP的結合 305
5.22 案例研究:主/從式並行模型的MPI實現 308
5.22.1 簡單主/從式設定 309
5.22.2 多執行緒主/從式設定 316
第6章 GPU編程 333
6.1 GPU編程簡介 333
6.2 CUDA編程模型:執行緒、執行緒塊、執行緒格線 335
6.3 CUDA執行模型:流多處理器和warp 340
6.4 CUDA程式編譯過程 344
6.5 構建CUDA項目 347
6.6 記憶體層次結構 349
6.6.1 本地記憶體/暫存器 355
6.6.2 共享記憶體 356
6.6.3 常量記憶體 363
6.6.4 texture和surface記憶體 368
6.7 最佳化技術 369
6.7.1 執行緒組織設計 369
6.7.2 kernel結構 378
6.7.3 共享記憶體訪問 382
6.7.4 全局記憶體訪問 388
6.7.5 page-locked與zero-copy記憶體 392
6.7.6 統一記憶體 394
6.7.7 異步執行和流 397
6.8 動態並行 403
6.9 CUDA程式的調試 407
6.10 CUDA程式剖析 410
6.11 CUDA和MPI 412
6.12 案例研究 417
6.12.1 分形集合計算 417
6.12.2 塊加密算法 426
第7章 Thrust模板庫 452
7.1 引言 452
7.2 使用Thrust的第一步 453
7.3 Thrust數據類型 456
7.4 Thrust算法 459
7.4.1 變換算法 460
7.4.2 排序與查詢 463
7.4.3 歸約 468
7.4.4 scan /前綴和 471
7.4.5 數據管理與處理 472
7.5 花式疊代器 475
7.6 交換設備後端 480
7.7 案例研究 481
7.7.1 蒙特卡洛積分 481
7.7.2 DNA序列比對 485
第8章 負載均衡 493
8.1 引言 493
8.2 動態負載均衡:Linda的遺贈 494
8.3 靜態負載均衡:可分負載理論方法 495
8.3.1 建模開銷 496
8.3.2 通信設定 502
8.3.3 分析 503
8.3.4 總結?:簡短的文獻綜述 510
8.4 DLTlib:分割工作負載的庫 513
8.5 案例研究 516
8.5.1 Mandelbrot集“電影”的混合計算:動態負載均衡案例研究 516
8.5.2 分散式塊加密:靜態負載均衡案例研究 526
線上資源
附錄A 編譯Qt程式
附錄B 運行MPI程式:準備與配置步驟
附錄C 測量時間
附錄D Boost.MPI
附錄E CUDA環境搭建
附錄F DLTlib
術語表
參考文獻

相關詞條

熱門詞條

聯絡我們