大規(guī)模并行處理器程序設(shè)計(jì)
定 價(jià):119 元
- 作者:[美]胡文美 [美]大衛(wèi)·B. 柯克 [黎巴嫩]伊扎特·埃爾·哈吉
- 出版時(shí)間:2025/3/1
- ISBN:9787111772767
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP311.11
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
本書(shū)內(nèi)容簡(jiǎn)潔、直觀(guān)、實(shí)用,強(qiáng)調(diào)計(jì)算思維能力和并行編程技巧。本書(shū)主要分為四個(gè)部分:第 一部分介紹異構(gòu)并行計(jì)算編程的基礎(chǔ)概念,包括數(shù)據(jù)并行化、GPU架構(gòu)、CUDA編程及程序性能優(yōu)化方法等內(nèi)容;第二部分介紹并行模式,包括卷積、模板、并行直方圖、歸約、前綴和、歸并等內(nèi)容;第三部分介紹高級(jí)模式及應(yīng)用,包括排序、稀疏矩陣計(jì)算、圖遍歷、深度學(xué)習(xí)、迭代式磁共振成像重建、靜電勢(shì)能圖和計(jì)算思維等內(nèi)容;第四部分介紹高級(jí)編程實(shí)踐,包括異構(gòu)計(jì)算集群編程、CUDA動(dòng)態(tài)并行化等內(nèi)容。本書(shū)不僅適合高等院校計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的學(xué)生學(xué)習(xí),也適合并行計(jì)算領(lǐng)域的技術(shù)人員參考。
第4版重要更新:·增加關(guān)于CUDA的新內(nèi)容,包括較新的庫(kù),如CUDNN!ば略鲫P(guān)于常用并行模式(模板、歸約、排序)的章節(jié),并對(duì)之前的章節(jié)(卷積、直方圖、稀疏矩陣、圖遍歷、深度學(xué)習(xí))進(jìn)行了全面更新。·新增一章專(zhuān)門(mén)討論GPU架構(gòu),包含Ampere等新的架構(gòu)示例!(yōu)化關(guān)于問(wèn)題分解策略和性能方面的討論,增加新的優(yōu)化檢查清單。
前 言
Programming Massively Parallel Processors: A Hands-on Approach, Fourth Edition
我們非常自豪地向你介紹本書(shū)。
融合多核CPU和多線(xiàn)程GPU的大眾市場(chǎng)計(jì)算系統(tǒng)已經(jīng)將萬(wàn)億級(jí)別的計(jì)算能力引入筆記本電腦中,將億億級(jí)別的計(jì)算能力引入計(jì)算集群中。在如此強(qiáng)大的計(jì)算動(dòng)能下,我們正處于科學(xué)、工程、醫(yī)學(xué)以及商業(yè)領(lǐng)域廣泛應(yīng)用計(jì)算實(shí)驗(yàn)的黎明。我們也親歷了GPU計(jì)算在金融、電子商務(wù)、石油與天然氣、制造等關(guān)鍵產(chǎn)業(yè)垂直市場(chǎng)的廣泛滲透。通過(guò)具有前所未有的規(guī)模、精確度、安全性、可控性與可視性的計(jì)算實(shí)驗(yàn),這些領(lǐng)域的突破將得以實(shí)現(xiàn)。本書(shū)為這一愿景提供了關(guān)鍵要素,即將并行編程教授給數(shù)百萬(wàn)研究生和本科生,使得計(jì)算思維和并行編程技能能夠與微積分技能一樣廣泛普及。
本書(shū)的主要讀者是所有需要通過(guò)計(jì)算思維和并行編程技能來(lái)取得科學(xué)與工程學(xué)科上的突破的研究生和本科生。此外,本書(shū)還被業(yè)內(nèi)專(zhuān)業(yè)開(kāi)發(fā)人員廣泛使用,目標(biāo)是在并行計(jì)算領(lǐng)域?qū)W習(xí)新的技能,與技術(shù)的飛速進(jìn)步保持同步。這些專(zhuān)業(yè)開(kāi)發(fā)人員涵蓋機(jī)器學(xué)習(xí)、網(wǎng)絡(luò)安全、自動(dòng)駕駛、計(jì)算金融、數(shù)據(jù)分析、認(rèn)知計(jì)算、機(jī)械工程、土木工程、電氣工程、生物工程、物理學(xué)、化學(xué)、天文學(xué)以及地理學(xué)等領(lǐng)域,他們運(yùn)用計(jì)算推動(dòng)著各自領(lǐng)域前沿技術(shù)的發(fā)展。因此,這些開(kāi)發(fā)人員既需要是領(lǐng)域?qū)<遥瑫r(shí)也必須是編程專(zhuān)家。本書(shū)通過(guò)逐步建立對(duì)技術(shù)的直觀(guān)理解這一方式講授并行編程。我們假設(shè)讀者至少具備基本的C編程經(jīng)驗(yàn)。我們選用了CUDA C這一并行編程環(huán)境,該環(huán)境需要NVIDIA GPU的支持。在大眾消費(fèi)者和專(zhuān)業(yè)人員手中已有超過(guò)10億臺(tái)這樣的處理器,而超過(guò)40萬(wàn)名程序員在積極地運(yùn)用CUDA進(jìn)行開(kāi)發(fā)。你在學(xué)習(xí)過(guò)程中開(kāi)發(fā)出的應(yīng)用程序,將有可能被非常龐大的用戶(hù)社群所使用。
自2016年第3版上市以來(lái),我們收到了許多來(lái)自讀者和教師的寶貴意見(jiàn)。其中,很多人肯定了本書(shū)現(xiàn)有的非常重要的特點(diǎn),其他人則提供了關(guān)于如何擴(kuò)展本書(shū)內(nèi)容以使其更具價(jià)值的建議。與此同時(shí),自2016年以來(lái),用于異構(gòu)并行計(jì)算的硬件和軟件技術(shù)已經(jīng)取得了巨大的進(jìn)步。在硬件領(lǐng)域,GPU計(jì)算架構(gòu)已經(jīng)推出了三代新版本,分別是Volta、Turing和Ampere。在軟件領(lǐng)域,從CUDA 9到CUDA 11的發(fā)展使程序員得以訪(fǎng)問(wèn)新的硬件和系統(tǒng)功能。同時(shí),新的算法也得到了開(kāi)發(fā)。為適應(yīng)這些變化,我們新增了四章,并對(duì)大部分現(xiàn)有章節(jié)進(jìn)行了重寫(xiě)。
新增的四章包括一個(gè)基礎(chǔ)性章節(jié)(第4章),以及三個(gè)關(guān)于并行模式和應(yīng)用的章節(jié)(第8章、第10章和第13章)。我們?cè)黾舆@些章節(jié)的初衷如下:
第4章:在之前的版本中,關(guān)于架構(gòu)和調(diào)度方面的討論分布在多個(gè)章節(jié)中。在這一版中,我們將這些討論集中在一起,以便感興趣的讀者學(xué)習(xí)。
第8章:在之前的版本中,模板模式在關(guān)于卷積的章節(jié)中略有提及,因?yàn)檫@兩種模式有相似之處。在這一版中,第8章對(duì)模板模式進(jìn)行了更為全面的介紹,強(qiáng)調(diào)其背后的數(shù)學(xué)原理,突出其與卷積不同的方面,從而為進(jìn)一步的優(yōu)化提供了可能。這一章還提供了處理三維網(wǎng)格和數(shù)據(jù)的示例。
第10章:在之前的版本中,歸約模式在關(guān)于性能的章節(jié)中略有提及。在這一版中,第10章更為全面地呈現(xiàn)了歸約模式,采用漸進(jìn)的方式應(yīng)用優(yōu)化方法,并更深入地分析了相關(guān)的性能權(quán)衡。
第13章:在之前的版本中,歸并排序在關(guān)于歸并模式的章節(jié)中略有提及。在這一版中,第13章將基數(shù)排序作為一種極其適用于GPU并行化的非比較排序算法進(jìn)行介紹。第13章采用漸進(jìn)的方式進(jìn)行優(yōu)化,并分析了性能權(quán)衡。此外,這一章還對(duì)歸并排序進(jìn)行了探討。
除了新增的章節(jié)外,所有章節(jié)都經(jīng)過(guò)了修訂,部分章節(jié)經(jīng)過(guò)了大幅修改。這些章節(jié)包括:
第6章:之前在本章中的關(guān)于架構(gòu)的內(nèi)容已經(jīng)移到第4章,歸約示例部分則移至第10章。對(duì)于刪改的部分,我們進(jìn)行了重寫(xiě)以更全面地處理線(xiàn)程粒度問(wèn)題,更為重要的是,提供一份常見(jiàn)的性能優(yōu)化策略清單,并討論了每種策略所解決的性能瓶頸。這份清單在本書(shū)的其余部分中被用來(lái)優(yōu)化各種并行模式和應(yīng)用程序的代碼。我們的目標(biāo)是強(qiáng)調(diào)一種用于優(yōu)化并行程序性能的系統(tǒng)且漸進(jìn)的方法。
第7章:在之前的版本中,關(guān)于卷積模式的章節(jié)以一維卷積作為示例,對(duì)二維卷積僅進(jìn)行了簡(jiǎn)要處理。在這一版中,我們對(duì)本章進(jìn)行了重寫(xiě),從一開(kāi)始就更加注重討論二維卷積。這一變化使我們能夠更全面地探討更高維度平鋪的復(fù)雜性和細(xì)節(jié),并為讀者學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)(第16章)提供更好的背景。
第9章:在之前的版本中,關(guān)于直方圖模式的章節(jié)從一開(kāi)始就應(yīng)用了線(xiàn)程粗化優(yōu)化,并將私有化優(yōu)化與共享內(nèi)存的使用相結(jié)合。在這一版中,我們對(duì)本章進(jìn)行了重寫(xiě),采用更漸進(jìn)的方式進(jìn)行性能優(yōu)化,F(xiàn)在介紹的初始實(shí)現(xiàn)不再應(yīng)用線(xiàn)程粗化,并將私有化和在私有bin中使用共享內(nèi)存區(qū)分為兩種獨(dú)立的優(yōu)化方式,前者旨在減少原子操作的爭(zhēng)用,后者旨在減少訪(fǎng)問(wèn)延遲。線(xiàn)程粗化在私有化后應(yīng)用,因?yàn)榇只囊粋(gè)主要優(yōu)點(diǎn)是減少提交到公共副本的私有副本數(shù)量。這種新的章節(jié)組織方式更加貼合本書(shū)始終遵循的系統(tǒng)化和漸進(jìn)化的性能優(yōu)化方法。此外,由于原子操作被用于多塊歸約和單次掃描核函數(shù)中,因此為了更早地引入原
胡文美(Wen-mei W. Hwu)
NVIDIA公司杰出研究科學(xué)家兼高級(jí)研究總監(jiān)。伊利諾伊大學(xué)厄巴納-香檳分校榮休教授,并行計(jì)算研究中心首席科學(xué)家。他在編譯器設(shè)計(jì)、計(jì)算機(jī)體系結(jié)構(gòu)、微體系結(jié)構(gòu)和并行計(jì)算方面做出了卓越貢獻(xiàn),是IEEE Fellow、ACM Fellow,榮獲了包括ACM-IEEE CS Eckert-Mauchly獎(jiǎng)、ACM Grace Murray Hopper獎(jiǎng)、ACM SIGARCH Maurice Wilkes獎(jiǎng)在內(nèi)的眾多獎(jiǎng)項(xiàng)。他擁有加州大學(xué)伯克利分校計(jì)算機(jī)科學(xué)博士學(xué)位。
大衛(wèi)·B. 柯克(David B. Kirk)
美國(guó)國(guó)家工程院院士,NVIDIA Fellow,曾任NVIDIA公司首席科學(xué)家。2002年,他榮獲ACM SIGGRAPH計(jì)算機(jī)圖形學(xué)成就獎(jiǎng),以表彰其在把高性能計(jì)算機(jī)圖形系統(tǒng)推向大眾市場(chǎng)方面做出的杰出貢獻(xiàn)。他擁有加州理工學(xué)院計(jì)算機(jī)科學(xué)博士學(xué)位。
伊扎特·埃爾·哈吉(Izzat El Hajj)
貝魯特美國(guó)大學(xué)計(jì)算機(jī)科學(xué)系助理教授。他的研究方向是針對(duì)新興并行處理器和內(nèi)存技術(shù)的應(yīng)用加速和編程支持,特別是GPU和存算一體。他擁有伊利諾伊大學(xué)厄巴納-香檳分校電氣與計(jì)算機(jī)工程博士學(xué)位。
目 錄
Programming Massively Parallel Processors: A Hands-on Approach, Fourth Edition
譯者序
推薦序
前言
致謝
第1章 引言 1
1.1 異構(gòu)并行計(jì)算 2
1.2 為什么需要速度與并行性 5
1.3 加快實(shí)際應(yīng)用的速度 6
1.4 并行編程中的挑戰(zhàn) 7
1.5 相關(guān)的并行編程接口 8
1.6 本書(shū)的總體目標(biāo) 9
1.7 本書(shū)的章節(jié)安排 10
參考文獻(xiàn) 12
第一部分 基本概念
第2章 異構(gòu)數(shù)據(jù)并行計(jì)算 14
2.1 數(shù)據(jù)并行性 14
2.2 CUDA C程序結(jié)構(gòu) 16
2.3 向量加法核 17
2.4 設(shè)備全局存儲(chǔ)和數(shù)據(jù)傳輸 19
2.5 核函數(shù)和線(xiàn)程 22
2.6 調(diào)用核函數(shù) 25
2.7 編譯 27
2.8 總結(jié) 27
2.8.1 函數(shù)聲明 27
2.8.2 內(nèi)核調(diào)用和網(wǎng)格啟動(dòng) 27
2.8.3 內(nèi)置(預(yù)定義)變量 28
2.8.4 運(yùn)行時(shí)應(yīng)用程序編程接口 28
練習(xí) 28
參考文獻(xiàn) 30
第3章 多維網(wǎng)格和數(shù)據(jù) 31
3.1 多維網(wǎng)格組織 31
3.2 將線(xiàn)程映射到多維數(shù)據(jù) 33
3.3 圖像模糊:更復(fù)雜的內(nèi)核 38
3.4 矩陣乘法 41
3.5 總結(jié) 44
練習(xí) 44
第4章 計(jì)算架構(gòu)和調(diào)度 46
4.1 現(xiàn)代GPU架構(gòu) 46
4.2 塊調(diào)度 47
4.3 同步和透明可擴(kuò)展性 47
4.4 線(xiàn)程束和SIMD硬件 49
4.5 控制發(fā)散 53
4.6 線(xiàn)程束調(diào)度和延遲容忍 55
4.7 資源劃分和占用率 56
4.8 查詢(xún)?cè)O(shè)備屬性 58
4.9 總結(jié) 60
練習(xí) 60
參考文獻(xiàn) 61
第5章 內(nèi)存架構(gòu)和數(shù)據(jù)局部性 62
5.1 內(nèi)存訪(fǎng)問(wèn)效率的重要性 62
5.2 CUDA內(nèi)存類(lèi)型 64
5.3 利用平鋪減少內(nèi)存流量 68
5.4 平鋪的矩陣乘法內(nèi)核 70
5.5 邊界檢查 74
5.6 內(nèi)存使用對(duì)占用率的影響 76
5.7 總結(jié) 78
練習(xí) 78
第6章 性能方面的考慮 81
6.1 內(nèi)存合并 81
6.2 隱藏內(nèi)存延遲 87
6.3 線(xiàn)程粗化 91
6.4 優(yōu)化清單 93
6.5 了解計(jì)算瓶頸 96
6.6 總結(jié) 96
練習(xí) 96
參考文獻(xiàn) 97
第二部分 并行模式
第7章 卷積:常量?jī)?nèi)存和緩存 100
7.1 背景 100
7.2 并行卷積:一種基本算法 103
7.3 常量?jī)?nèi)存和緩存:概念與實(shí)例 105
7.4 邊緣單元平鋪卷積 108
7.5 使用邊緣單元緩存的平鋪卷積 111
7.6 總結(jié) 113
練習(xí) 113
第8章 模板 115
8.1 背景 115
8.2 并行模板:基本算法 118
8.3 用于模板掃描的共享內(nèi)存平鋪 119
8.4 線(xiàn)程粗化 121
8.5 寄存器平鋪 123
8.6 總結(jié) 125
練習(xí) 125
第9章 并行直方圖:原子操作和
私有化 126
9.1 背景 126
9.2 原子操作與基本直方圖內(nèi)核 128
9.3 原子操作的延遲和吞吐量 131
9.4 私有化 132
9.5 粗化 134
9.6 聚合 137
9.7 總結(jié) 138
練習(xí) 138
參考文獻(xiàn) 139
第10章 歸約和最小化發(fā)散 140
10.1 背景 140
10.2 歸約樹(shù) 141
10.3 一個(gè)簡(jiǎn)單的歸約內(nèi)核 143
10.4 最小化控制發(fā)散 145
10.5 最小化內(nèi)存發(fā)散 148
10.6 最小化全局內(nèi)存訪(fǎng)問(wèn) 149
10.7 對(duì)任意輸入長(zhǎng)度進(jìn)行分層歸約 150
10.8 利用線(xiàn)程粗化減少開(kāi)銷(xiāo) 152
10.9 總結(jié) 154
練習(xí) 154
第11章 前綴和(掃描):并行算法的工作效率 156
11.1 背景 156
11.2 基于Kogge-Stone算法的并行
掃描 158
11.3 關(guān)于速度與工作效率的考慮 162
11.4 基于Brent-Kung算法的并行
掃描 163
11.5 利用粗化提高工作效率 167
11.6 任意長(zhǎng)度輸入的分段并行掃描 168
11.7 利用單次掃描提高內(nèi)存訪(fǎng)問(wèn)
效率 171
11.8 總結(jié) 172
練習(xí) 173
參考文獻(xiàn) 173
第12章 歸并:動(dòng)態(tài)輸入數(shù)據(jù)
識(shí)別 175
12.1 背景 175
12.2 串行歸并算法 176
12.3 并行化方法 177
12.4 共秩函數(shù)的實(shí)現(xiàn) 178
12.5 基本并行歸并內(nèi)核 182
12.6 用于改進(jìn)內(nèi)存合并的平鋪歸并
內(nèi)核 183
12.7 循環(huán)緩沖區(qū)歸并內(nèi)核 187
12.8 用于歸并的線(xiàn)程粗化 192
12.9 總結(jié) 192
練習(xí) 193
參考文獻(xiàn) 193
第三部分 高級(jí)模式及應(yīng)用
第13章 排序 196
13.1 背景 196
13.2 基數(shù)排序 197
13.3 并行基數(shù)排序 198
13.4 內(nèi)存合并優(yōu)化 200
13.5 基值的選擇 202
13.6 利用線(xiàn)程粗化改善合并 204
13.7 并行歸并排序 205
13.8 其他并行排序方法 205
13.9 總結(jié) 206
練習(xí) 207
參考文獻(xiàn) 207
第14章 稀疏矩陣計(jì)算 208
14.1 背景 208
14.2 具有COO格式的簡(jiǎn)單SpMV
內(nèi)核 209
14.3 利用CSR格式分組非零行 211