多核與 GPU 編程:工具、方法及實踐 多核与GPU编程:工具、方法及实践

傑拉西莫斯·巴拉斯 (Gerassimos Barlas)

  • 出版商: 機械工業
  • 出版日期: 2017-02-01
  • 售價: $774
  • 貴賓價: 9.5$735
  • 語言: 簡體中文
  • 頁數: 536
  • 裝訂: 平裝
  • ISBN: 7111557689
  • ISBN-13: 9787111557685

立即出貨

買這商品的人也買了...

相關主題

商品描述

本書從並行軟件的實現、調試、優化和剖析四個方面,詳細討論了當前主要的並行計算關鍵技術,主要內容包括:多核和並行程序設計、共享內存編程中的線程與OpenMP、分佈式內存編程、GPU編程、Thrust模板庫、負載均衡等。本書結合具體的代碼和案例分析,揭示瞭如何使用庫或者指令創建多核應用,如何使用MPI開發分佈式應用程序,如何使用CUDA開發高性能GPU程序,如何實現負載均衡,以及如何針對目標多核平臺進行程序剖析和調試等。本書可供從事高性能計算技術研究的專業人員參考,也可作為高校相關專業的教學用書。

作者簡介

Gerassimos Barlas 沙迦美國大學計算機科學與工程系教授。他的研究興趣包括並行算法、開發、分析,以及負載平衡的建模框架,分佈式視頻點播。Barlas教授講授並行編程課程已有12年時間,早在20世紀90年代,他就開始研究並行計算,並積極參與並行和分佈式系統可分負載理論這一新領域的研究工作。

目錄大綱

譯者序
前言
第1章概述1 
1.1多核計算機時代1 
1.2並行計算機的分類3 
1.3現代計算機概覽4 
1.3.1CellBE處理器5 
1.3.2NVIDIA Kepler6 
1.3.3AMD APU9 
1.3.4從多核到眾核:Tilera TILE —Gx8072和Intel Xeon Phi10 
1.4性能指標12 
1.5並行程序性能的預測與測量16 
1.5.1Amdahl定律18 
1.5.2Gustafson—Barsis定律20 

第2章多核和並行程序設計23 
2.1引言23 
2.2PCAM方法學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.4map—reduce41 
2.4.5fork/join42 
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.6monitor84 
3.6.1設計方法1:monitor內部的關鍵區87 
3.6.2設計方法2:monitor控制關鍵區的入口87 
3.7經典問題中的monitor91 
3.7.1重新考慮生產者–消費者問題91 
3.7.2重新考慮讀者–寫者問題95 
3.8動態線程管理與靜態線程管理102 
3.8.1Qt線程池102 
3.8.2線程池的創建和管理103 
3.9調試多線程應用111 
3.10高層次結構:無須顯式利用線程的多線程編程115 
3.10.1並發map116 
3.10.2map—reduce118 
3.10.3並發過濾120 
3.10.4filter—reduce121
3.10.5案例研究:多線程存儲122 
3.10.6案例研究:多線程圖像匹配131 

第4章共享內存編程:OpenMP140 
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.1sections指令166 
4.5.2task指令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.2MPI204 
5.3核心概念205 
5.4你的第一個MPI程序206 
5.5程序體系結構208 
5.5.1SPMD208 
5.5.2MPMD209 
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.1RMA通信函數261 
5.14.2RMA同步函數262 
5.15I/O注意事項270 
5.16MPI多進程和多線程混合編程276 
5.17時序和性能測量279 
5.18調試和分析MPI程序279
5.19Boost.MPI庫283 
5.19.1阻塞和非阻塞通信285 
5.19.2?數據序列化289 
5.19.3?集合通信292 
5.20案例研究:有限擴散聚合模型295 
5.21案例研究:暴力加密破解300 
5.21.1版本1:“基本型”MPI300 
5.21.2版本2:MPI與OpenMP的結合305 
5.22案例研究:主/從式並行模型的MPI實現308 
5.22.1簡單主/從式設置309 
5.22.2多線程主/從式設置316 

第6章GPU編程333 
6.1GPU編程簡介333 
6.2CUDA編程模型:線程、線程塊、線程網格335 
6.3CUDA執行模型:流多處理器和warp340 
6.4CUDA程序編譯過程344 
6.5構建CUDA項目347 
6.6內存層次結構349 
6.6.1本地內存/寄存器355 
6.6.2共享內存356 
6.6.3常量內存363 
6.6.4texture和surface內存368 
6.7優化技術369 
6.7.1線程組織設計369 
6.7.2kernel結構378 
6.7.3共享內存訪問382 
6.7.4全局內存訪問388 
6.7.5page—locked與zero—copy內存392
6.7.6統一內存394 
6.7.7異步執行和流397 
6.8動態並行403 
6.9CUDA程序的調試407 
6.10CUDA程序剖析410 
6.11CUDA和MPI412 
6.12案例研究417 
6.12.1分形集合計算417 
6.12.2塊加密算法426 

第7章Tlarust模板庫452 
7.1引言452 
7.2使用Thrust的第一步453 
7.3Thrust數據類型456 
7.4Thrust算法459 
7.4.1變換算法460 
7.4.2排序與查詢463 
7.4.3歸約468 
7.4.4scan /前綴和471 
7.4.5數據管理與處理472 
7.5花式迭代器475 
7.6交換設備後端480 
7.7案例研究481 
7.7.1蒙特卡洛積分481 
7.7.2DNA序列比對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.4DLTlib:分割工作負載的庫513 
8.5案例研究516 
8.5.1Mandelbrot集“電影”的混合計算:動態負載均衡案例研究516 
8.5.2分佈式塊加密:靜態負載均衡案例研究526 
在線資源
附錄A編譯Qt程序
附錄B運行MPI程序:準備與配置步驟
附錄C測量時間
附錄DBoost.MPI 
附錄ECUDA環境搭建
附錄FDLTlib 
術語表
參考文獻