CUDA并行程序設(shè)計(jì):GPU編程指南(CUDA社區(qū)技術(shù)總監(jiān)撰寫,英偉達(dá)官方認(rèn)證工程師翻譯)
定 價(jià):99 元
叢書名:高性能計(jì)算系列叢書
- 作者:(美)Shane Cook 著
- 出版時(shí)間:2014/1/1
- ISBN:9787111448617
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP391.41
- 頁(yè)碼:522
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書是CUDA并行程序設(shè)計(jì)領(lǐng)域最全面、最詳實(shí)和最具權(quán)威性的著作之一,由CUDA開發(fā)者社區(qū)技術(shù)總監(jiān)親自撰寫,英偉達(dá)中國(guó)首批CUDA官方認(rèn)證工程師翻譯,詳實(shí)地講解了CUDA并行程序設(shè)計(jì)的技術(shù)知識(shí)點(diǎn)(平臺(tái)、架構(gòu)、硬件知識(shí)、開發(fā)工具和熱點(diǎn)技術(shù))和編程方法,包含大量實(shí)用代碼示例,實(shí)踐性非常強(qiáng)。
全書共分為12章。第1章從宏觀上介紹流處理器演變歷史。第2章詳解GPU并行機(jī)制,深入理解串行與并行程序,以辯證地求解問題。第3章講解CUDA設(shè)備及相關(guān)的硬件和體系結(jié)構(gòu),以實(shí)現(xiàn)最優(yōu)CUDA程序性能。第4章介紹CUDA開發(fā)環(huán)境搭建和可用調(diào)試環(huán)境。第5章介紹與CUDA編程緊密相關(guān)的核心概念——網(wǎng)格、線程塊與線程,并通過示例說明線程模型與性能的關(guān)系。第6章借助實(shí)例詳細(xì)講解了不同類型內(nèi)存的工作機(jī)制,并指出實(shí)踐中容易出現(xiàn)的誤區(qū)。第7章細(xì)述多任務(wù)的CPU和GPU協(xié)同,并介紹多個(gè)CPU/GPU編程秘技。第8章介紹如何在應(yīng)用程序中編寫和使用多GPU。第9章詳述CUDA編程性能限制因素、分析CUDA代碼的工具和技術(shù)。第10章介紹編程實(shí)踐中的庫(kù)與軟件開發(fā)工具包。第11章講解如何設(shè)計(jì)基于GPU的系統(tǒng)。第12章總結(jié)CUDA應(yīng)用中易犯錯(cuò)誤以及應(yīng)對(duì)建議。
CUDA開發(fā)者社區(qū)技術(shù)總監(jiān)親自撰寫,英偉達(dá)中國(guó)首批CUDA官方認(rèn)證工程師翻譯,譯著雙馨 全面、詳實(shí)地講解了CUDA并行程序設(shè)計(jì)的技術(shù)知識(shí)點(diǎn)和編程方法,包含大量實(shí)用代碼示例,是目前學(xué)習(xí)CUDA編程最權(quán)威的著作之一
Shane Cook CUDA開發(fā)者社區(qū)技術(shù)總監(jiān),有20余年行業(yè)經(jīng)驗(yàn)。當(dāng)認(rèn)識(shí)到異構(gòu)系統(tǒng)以及CUDA對(duì)于已有串行和并行編程技術(shù)的革命性沖擊時(shí),創(chuàng)立了CUDA開發(fā)者社區(qū)(歐洲的咨詢公司,專門幫助企業(yè)重構(gòu)代碼以充分利用GPU硬件的威力)。他專注于高性能軟件開發(fā)、GPU利用、嵌入式系統(tǒng),并參與了多個(gè)C語(yǔ)言編程標(biāo)準(zhǔn)的建設(shè),包括廣泛應(yīng)用于汽車軟件行業(yè)的汽車工業(yè)軟件MISRA Safer C。他常為德國(guó)汽車行業(yè)、國(guó)防承包行業(yè)、北電網(wǎng)絡(luò)以及福特汽車公司等機(jī)構(gòu)或藍(lán)籌股公司提供專業(yè)咨詢服務(wù)和軟件定制開發(fā)。
譯者簡(jiǎn)介
蘇統(tǒng)華 博士,英偉達(dá)中國(guó)首批CUDA官方認(rèn)證工程師,主要研究領(lǐng)域包括大規(guī)模并行計(jì)算、模式識(shí)別、物聯(lián)網(wǎng)智能信息處理、智能媒體交互與計(jì)算等。2013年,其所開發(fā)的CUDA識(shí)別算法,在文檔分析和識(shí)別國(guó)際會(huì)議(ICDAR’ 2013)上獲得手寫漢字識(shí)別競(jìng)賽的雙料冠軍。另外,他在手寫漢字識(shí)別領(lǐng)域建立了里程碑式的工作,論文他引300余次;他所建立的HIT-MW庫(kù),為全世界100多家科研院所采用;目前負(fù)責(zé)國(guó)家自然科學(xué)基金項(xiàng)目2項(xiàng)。著有英文專著《Chinese Handwriting Recognition: An Algorithmic Perspective》(德國(guó)施普林格出版社),CUDA相關(guān)譯作2本(機(jī)械工業(yè)出版社)。現(xiàn)任哈爾濱工業(yè)大學(xué)軟件學(xué)院高級(jí)講師、碩士生導(dǎo)師。
致中國(guó)讀者
譯者序
前 言
第1章 超級(jí)計(jì)算簡(jiǎn)史
1.1 簡(jiǎn)介
1.2 馮?諾依曼計(jì)算機(jī)架構(gòu)
1.3 克雷
1.4 連接機(jī)
1.5 Cell處理器
1.6 多點(diǎn)計(jì)算
1.7 早期的GPGPU編程
1.8 單核解決方案的消亡
1.9 英偉達(dá)和CUDA
1.10 GPU硬件
1.11 CUDA的替代選擇
致中國(guó)讀者
譯者序
前 言
第1章 超級(jí)計(jì)算簡(jiǎn)史
1.1 簡(jiǎn)介
1.2 馮?諾依曼計(jì)算機(jī)架構(gòu)
1.3 克雷
1.4 連接機(jī)
1.5 Cell處理器
1.6 多點(diǎn)計(jì)算
1.7 早期的GPGPU編程
1.8 單核解決方案的消亡
1.9 英偉達(dá)和CUDA
1.10 GPU硬件
1.11 CUDA的替代選擇
1.11.1 OpenCL
1.11.2 DirectCompute
1.11.3 CPU的替代選擇
1.11.4 編譯指令和庫(kù)
1.12 本章小結(jié)
第2章 使用GPU理解并行計(jì)算
2.1 簡(jiǎn)介
2.2 傳統(tǒng)的串行代碼
2.3 串行/并行問題
2.4 并發(fā)性
2.5 并行處理的類型
2.5.1 基于任務(wù)的并行處理
2.5.2 基于數(shù)據(jù)的并行處理
2.6 弗林分類法
2.7 常用的并行模式
2.7.1 基于循環(huán)的模式
2.7.2 派生/匯集模式
2.7.3 分條/分塊
2.7.4 分而治之
2.8 本章小結(jié)
第3章 CUDA硬件概述
3.1 PC架構(gòu)
3.2 GPU硬件結(jié)構(gòu)
3.3 CPU與GPU
3.4 GPU計(jì)算能力
3.4.1 計(jì)算能力1.0
3.4.2 計(jì)算能力1.1
3.4.3 計(jì)算能力1.2
3.4.4 計(jì)算能力1.3
3.4.5 計(jì)算能力2.0
3.4.6 計(jì)算能力2.1
第4章 CUDA環(huán)境搭建
4.1 簡(jiǎn)介
4.2 在Windows下安裝軟件開發(fā)工具包
4.3 Visual Studio
4.3.1 工程
4.3.2 64位用戶
4.3.3 創(chuàng)建工程
4.4 Linux
4.5 Mac
4.6 安裝調(diào)試器
4.7 編譯模型
4.8 錯(cuò)誤處理
4.9 本章小結(jié)
第5章 線程網(wǎng)格、線程塊以及線程
5.1 簡(jiǎn)介
5.2 線程
5.2.1 問題分解
5.2.2 CPU與GPU的不同
5.2.3 任務(wù)執(zhí)行模式
5.2.4 GPU線程
5.2.5 硬件初窺
5.2.6 CUDA內(nèi)核
5.3 線程塊
5.4 線程網(wǎng)格
5.4.1 跨幅與偏移
5.4.2 X與Y方向的線程索引
5.5 線程束
5.5.1 分支
5.5.2 GPU的利用率
5.6 線程塊的調(diào)度
5.7 一個(gè)實(shí)例——統(tǒng)計(jì)直方圖
5.8 本章小結(jié)
第6章 CUDA內(nèi)存處理
6.1 簡(jiǎn)介
6.2 高速緩存
6.3 寄存器的用法
6.4 共享內(nèi)存
6.4.1 使用共享內(nèi)存排序
6.4.2 基數(shù)排序
6.4.3 合并列表
6.4.4 并行合并
6.4.5 并行歸約
6.4.6 混合算法
6.4.7 不同GPU上的共享內(nèi)存
6.4.8 共享內(nèi)存小結(jié)
6.5 常量?jī)?nèi)存
6.5.1 常量?jī)?nèi)存高速緩存
6.5.2 常量?jī)?nèi)存廣播機(jī)制
6.5.3 運(yùn)行時(shí)進(jìn)行常量?jī)?nèi)存更新
6.6 全局內(nèi)存
6.6.1 記分牌
6.6.2 全局內(nèi)存排序
6.6.3 樣本排序
6.7 紋理內(nèi)存
6.7.1 紋理緩存
6.7.2 基于硬件的內(nèi)存獲取操作
6.7.3 使用紋理的限制
6.8 本章小結(jié)
第7章 CUDA實(shí)踐之道
7.1 簡(jiǎn)介
7.2 串行編碼與并行編碼
7.2.1 CPU與GPU的設(shè)計(jì)目標(biāo)
7.2.2 CPU與GPU上的最佳算法對(duì)比
7.3 數(shù)據(jù)集處理
7.4 性能分析
7.5 一個(gè)使用AES的示例
7.5.1 算法
7.5.2 AES的串行實(shí)現(xiàn)
7.5.3 初始內(nèi)核函數(shù)
7.5.4 內(nèi)核函數(shù)性能
7.5.5 傳輸性能
7.5.6 單個(gè)執(zhí)行流版本
7.5.7 如何與CPU比較
7.5.8 考慮在其他GPU上運(yùn)行
7.5.9 使用多個(gè)流
7.5.10 AES總結(jié)
7.6 本章小結(jié)
第8章 多CPU和多GPU解決方案
8.1 簡(jiǎn)介
8.2 局部性
8.3 多CPU系統(tǒng)
8.4 多GPU系統(tǒng)
8.5 多GPU算法
8.6 按需選用GPU
8.7 單節(jié)點(diǎn)系統(tǒng)
8.8 流
8.9 多節(jié)點(diǎn)系統(tǒng)
8.10 本章小結(jié)
第9章 應(yīng)用程序性能優(yōu)化
9.1 策略1:并行/串行在GPU/CPU上的問題分解
9.1.1 分析問題
9.1.2 時(shí)間
9.1.3 問題分解
9.1.4 依賴性
9.1.5 數(shù)據(jù)集大小
9.1.6 分辨率
9.1.7 識(shí)別瓶頸
9.1.8 CPU和GPU的任務(wù)分組
9.1.9 本節(jié)小結(jié)
9.2 策略2:內(nèi)存因素
9.2.1 內(nèi)存帶寬
9.2.2 限制的來源
9.2.3 內(nèi)存組織
9.2.4 內(nèi)存訪問以計(jì)算比率
9.2.5 循環(huán)融合和內(nèi)核融合
9.2.6 共享內(nèi)存和高速緩存的使用
9.2.7 本節(jié)小結(jié)
9.3 策略3:傳輸
9.3.1 鎖頁(yè)內(nèi)存
9.3.2 零復(fù)制內(nèi)存
9.3.3 帶寬限制
9.3.4 GPU計(jì)時(shí)
9.3.5 重疊GPU傳輸
9.3.6 本節(jié)小結(jié)
9.4 策略4:線程使用、計(jì)算和分支
9.4.1 線程內(nèi)存模式
9.4.2 非活動(dòng)線程
9.4.3 算術(shù)運(yùn)算密度
9.4.4 一些常見的編譯器優(yōu)化
9.4.5 分支
9.4.6 理解底層匯編代碼
9.4.7 寄存器的使用
9.4.8 本節(jié)小結(jié)
9.5 策略5:算法
9.5.1 排序
9.5.2 歸約
9.5.3 本節(jié)小結(jié)
9.6 策略6:資源競(jìng)爭(zhēng)
9.6.1 識(shí)別瓶頸
9.6.2 解析瓶頸
9.6.3 本節(jié)小結(jié)
9.7 策略7:自調(diào)優(yōu)應(yīng)用程序
9.7.1 識(shí)別硬件
9.7.2 設(shè)備的利用
9.7.3 性能采樣
9.7.4 本節(jié)小結(jié)
9.8 本章小結(jié)
第10章 函數(shù)庫(kù)和SDK
10.1 簡(jiǎn)介
10.2 函數(shù)庫(kù)
10.2.1 函數(shù)庫(kù)通用規(guī)范
10.2.2 NPP
10.2.3 Thrust
10.2.4 CuRAND
10.2.5 CuBLAS庫(kù)
10.3 CUDA運(yùn)算SDK
10.3.1 設(shè)備查詢
10.3.2 帶寬測(cè)試
10.3.3 SimpleP2P
10.3.4 asyncAPI和cudaOpenMP
10.3.5 對(duì)齊類型
10.4 基于指令的編程
10.5 編寫自己的內(nèi)核
10.6 本章小結(jié)
第11章 規(guī)劃GPU硬件系統(tǒng)
11.1 簡(jiǎn)介
11.2 CPU處理器
11.3 GPU設(shè)備
11.3.1 大容量?jī)?nèi)存的支持
11.3.2 ECC內(nèi)存的支持
11.3.3 Tesla計(jì)算集群驅(qū)動(dòng)程序
11.3.4 更高雙精度數(shù)學(xué)運(yùn)算
11.3.5 大內(nèi)存總線帶寬
11.3.6 系統(tǒng)管理中斷
11.3.7 狀態(tài)指示燈
11.4 PCI-E總線
11.5 GeForce板卡
11.6 CPU內(nèi)存
11.7 風(fēng)冷
11.8 液冷
11.9 機(jī)箱與主板
11.10 大容量存儲(chǔ)
11.10.1 主板上的輸入/輸出接口
11.10.2 專用RAID控制器
11.10.3 HDSL
11.10.4 大容量存儲(chǔ)需求
11.10.5 聯(lián)網(wǎng)
11.11 電源選擇
11.12 操作系統(tǒng)
11.12.1 Windows
11.12.2 Linux
11.13 本章小結(jié)
第12章 常見問題、原因及解決方案
12.1 簡(jiǎn)介
12.2 CUDA指令錯(cuò)誤
12.2.1 CUDA錯(cuò)誤處理
12.2.2 內(nèi)核啟動(dòng)和邊界檢查
12.2.3 無效的設(shè)備操作
12.2.4 volatile限定符
12.2.5 計(jì)算能力依賴函數(shù)
12.2.6 設(shè)備函數(shù)、全局函數(shù)和主機(jī)函數(shù)
12.2.7 內(nèi)核中的流
12.3 并行編程問題
12.3.1 競(jìng)爭(zhēng)冒險(xiǎn)
12.3.2 同步
12.3.3 原子操作
12.4 算法問題
12.4.1 對(duì)比測(cè)試
12.4.2 內(nèi)存泄漏
12.4.3 耗時(shí)的內(nèi)核程序
12.5 查找并避免錯(cuò)誤
12.5.1 你的GPU程序有多少錯(cuò)誤
12.5.2 分而治之
12.5.3 斷言和防御型編程
12.5.4 調(diào)試級(jí)別和打印
12.5.5 版本控制
12.6 為未來的GPU進(jìn)行開發(fā)
12.6.1 開普勒架構(gòu)
12.6.2 思考
12.7 后續(xù)學(xué)習(xí)資源
12.7.1 介紹
12.7.2 在線課程
12.7.3 教學(xué)課程
12.7.4 書籍
12.7.5 英偉達(dá)CUDA資格認(rèn)證
12.8 本章小結(jié)
第1章
超級(jí)計(jì)算簡(jiǎn)史
1.1?簡(jiǎn)介
為什么我們會(huì)在一本關(guān)于CUDA的書籍中談?wù)摮?jí)計(jì)算機(jī)呢?超級(jí)計(jì)算機(jī)通常走在技術(shù)發(fā)展的最前沿。我們?cè)谶@里看到的技術(shù),在未來的5~10年內(nèi),將是桌面計(jì)算機(jī)中很普通的技術(shù)。2010年,在德國(guó)漢堡舉行的一年一度的國(guó)際超級(jí)計(jì)算機(jī)大會(huì)上宣布,根據(jù)500強(qiáng)名單(http://www.top500.org),英偉達(dá)基于GPU的機(jī)器在世界最強(qiáng)大的計(jì)算機(jī)列表中位列第二。從理論上講,它的峰值性能比強(qiáng)大的IBM Roadrunner和當(dāng)時(shí)的第一名Cray Jaguar的性能還要高。當(dāng)時(shí)Cray Jaguar的性能峰值接近3千萬億次。2011年,采用CUDA技術(shù)的英偉達(dá)GPU仍然是世界上最快的超級(jí)計(jì)算機(jī)。這時(shí)大家突然清楚地認(rèn)識(shí)到,與簡(jiǎn)陋的桌面PC一起,GPU已經(jīng)在高性能計(jì)算領(lǐng)域達(dá)到了很高的地位。
超級(jí)計(jì)算是我們?cè)诂F(xiàn)代處理器中看到的許多技術(shù)的發(fā)展動(dòng)力。由于對(duì)用更快的處理器來處理更大數(shù)據(jù)集的需求,工業(yè)界不斷生產(chǎn)出更快的計(jì)算機(jī)。正是在這些發(fā)展變化中,GPU的CUDA技術(shù)走到了今天。
超級(jí)計(jì)算機(jī)和桌面計(jì)算正在向著異構(gòu)計(jì)算發(fā)展——人們?cè)噲D通過將中央處理器(Central Processor Unit,CPU)和圖形處理器(Graphics Processor Unit,GPU)技術(shù)混合在一起來實(shí)現(xiàn)更高的性能。使用GPU的兩個(gè)最大的國(guó)際項(xiàng)目是BOINC和Folding @ Home,它們都是分布式計(jì)算的項(xiàng)目。這兩個(gè)項(xiàng)目使得普通人也能為具體的科學(xué)項(xiàng)目做出真正的貢獻(xiàn)。在項(xiàng)目中,采用GPU加速器的CPU/GPU主機(jī)的貢獻(xiàn)遠(yuǎn)遠(yuǎn)超過了僅裝備CPU主機(jī)的貢獻(xiàn)。截至2011年11月,大約550萬臺(tái)主機(jī)提供了約5.3千萬億次的計(jì)算性能,這將近是2011年世界上最快的超級(jí)計(jì)算機(jī)(日本富士通的“京(K)計(jì)算機(jī)”)計(jì)算性能的一半。
作為美國(guó)最快的超級(jí)計(jì)算機(jī)Jaguar的升級(jí)換代產(chǎn)品,命名為Titan的超級(jí)計(jì)算機(jī)計(jì)劃于2013年問世。它將用近30萬個(gè)CPU核和高達(dá)18?000個(gè)GPU板卡達(dá)到每秒10~20千萬億次的性能。正是由于有像Titan這樣的來自世界各地的大力支持,無論是在HPC(高性能計(jì)算)行業(yè),還是在桌面電腦領(lǐng)域,GPU編程已經(jīng)成為主流。
現(xiàn)在,你可以自己“攢”或者購(gòu)買一臺(tái)具有數(shù)萬億次運(yùn)算性能的桌面超級(jí)計(jì)算機(jī)了。在21世紀(jì)初期,這將會(huì)使你躋身500強(qiáng)的首位,擊敗擁有9632奔騰處理器的IBM ASCI Red。這不僅部分地展現(xiàn)了過去十幾年計(jì)算機(jī)技術(shù)取得的巨大進(jìn)步,更向我們提出了從現(xiàn)在開始的未來十幾年,計(jì)算機(jī)技術(shù)將發(fā)展到何種水平這個(gè)問題。你可以完全相信在未來一段時(shí)間內(nèi),GPU將位于技術(shù)發(fā)展的前沿。因此,掌握GPU編程將是任何一個(gè)優(yōu)秀開發(fā)人員必備的重要技能。