出版時(shí)間:2013-1-1 出版社:機(jī)械工業(yè)出版社華章公司 作者:Rob Farber 頁數(shù):271 譯者:于玉龍,唐堃
Tag標(biāo)簽:無
前言
譯者序序言作為一種革新性的技術(shù),GPU近年來在科學(xué)計(jì)算領(lǐng)域備受關(guān)注。這項(xiàng)技術(shù)已有大量的科學(xué)應(yīng)用,并在性能與能效方面取得了顯著提升。這些應(yīng)用大多由那些致力于使用GPU的先驅(qū)者開發(fā)和使用。最近,這項(xiàng)技術(shù)面臨一個(gè)關(guān)鍵問題:它能否普遍適用于科學(xué)計(jì)算領(lǐng)域中各種各樣的算法,以及能否為更廣泛的人群而不僅是那些先驅(qū)者使用。軟件開發(fā)是阻礙這項(xiàng)技術(shù)得以廣泛應(yīng)用的關(guān)鍵,其中包括大規(guī)模并行CUDA代碼的編寫與優(yōu)化、新的性能與正確性分析工具的使用、CUDA支持庫的使用以及對(duì)GPU硬件架構(gòu)的理解。通過書籍、教程等方式,專家們可以將他們?cè)诖祟I(lǐng)域掌握的知識(shí)和方法與其他使用者分享,這在一定程度上解決了CUDA廣泛應(yīng)用的難題。本書就是這樣的一本書。在這本書中,作者詳盡地解釋了重要算法的實(shí)現(xiàn)方法,如量子化學(xué)、機(jī)器學(xué)習(xí)以及計(jì)算機(jī)視覺等。本書不僅講述了GPU編程的基本方法,還介紹了如何改寫算法以便從GPU架構(gòu)中最大化獲益。此外,這本書提供了許多案例研究用以解釋與充實(shí)GPU的重要概念,如CUDA線程、GPU存儲(chǔ)層次結(jié)構(gòu)以及多GPU的擴(kuò)展性(書中使用一個(gè)MPI示例例證了其擴(kuò)展性可以近似線性地增至使用500個(gè)GPU)。最后,任何一種編程語言都不能獨(dú)立存在??梢哉f,任何一個(gè)成功的編程語言,都伴隨由強(qiáng)大的編譯器、性能與正確性分析工具以及優(yōu)化的支持庫組成的整套系統(tǒng)環(huán)境。這些軟件開發(fā)中的實(shí)用工具是快速開發(fā)應(yīng)用程序的關(guān)鍵。本書的諸章節(jié)描述了如何使用CUDA編譯器、調(diào)試器、性能分析工具、庫以及與其他語言的互操作,本書在這些方面沒有令人失望。我享受從這本書中學(xué)到的一切,我確信您也會(huì)。Jeffrey S.Vetter美國(guó)橡樹嶺國(guó)家實(shí)驗(yàn)室杰出研究員佐治亞理工學(xué)院教授
內(nèi)容概要
本書是廣受推崇的系統(tǒng)學(xué)習(xí)高性能CUDA應(yīng)用開發(fā)與設(shè)計(jì)的經(jīng)典著作,是美國(guó)國(guó)家安全實(shí)驗(yàn)室資深高性能編程專家多年工作經(jīng)驗(yàn)結(jié)晶,橡樹嶺國(guó)家實(shí)驗(yàn)室資深專家鼎力推薦!本書不僅從硬件角度深入解讀了CUDA的設(shè)計(jì)理念和GPGPU硬件的體系結(jié)構(gòu),而且從軟件角度系統(tǒng)講解了CUDA應(yīng)用設(shè)計(jì)與開發(fā)的思想、方法、技巧、準(zhǔn)則、注意事項(xiàng)和最佳實(shí)踐。
第1章首先介紹了CUDA的核心概念和編程思想,以及構(gòu)建與調(diào)試CUDA應(yīng)用所需的工具和方法,然后講解了有效提高程序性能的CPU編程準(zhǔn)則;第2章講解了CUDA在機(jī)器學(xué)習(xí)與優(yōu)化中的核心概念與應(yīng)用,并給出了完整的通用框架;第3章介紹了CUDA的性能分析工具套件以及性能分析的方法,同時(shí)討論了PCA和NLPCA兩種數(shù)據(jù)挖掘方法;第4章講解了CUDA的執(zhí)行模型,深刻揭示了GPU的工作方式和原理;第5章介紹了CUDA提供的多種GPU內(nèi)存,以及各種內(nèi)存的優(yōu)缺點(diǎn);第6章講解了高效利用內(nèi)存的技術(shù);第7章介紹了GPU提供的多種并行方式及其應(yīng)用;第8章首先討論了多種CUDA后端設(shè)備,以及CUDA如何與Python、Java、R等高級(jí)語言交互;第9章講解了CUDA與圖形渲染混合編程;第10章講解了在云計(jì)算和集群環(huán)境中使用CUDA的方法和技術(shù)細(xì)節(jié);第11章介紹了CUDA在高維數(shù)據(jù)處理、力導(dǎo)向圖、交互式工作流、量子化學(xué)等現(xiàn)實(shí)問題中的應(yīng)用;第12章為學(xué)習(xí)CUDA設(shè)計(jì)了一個(gè)綜合性的針對(duì)實(shí)時(shí)視頻流的應(yīng)用案例。
作者簡(jiǎn)介
Rob
Farber,資深高性能編程專家,是Irish高端計(jì)算中心和美國(guó)國(guó)家實(shí)驗(yàn)室等權(quán)威機(jī)構(gòu)的高性能編程技術(shù)顧問,同時(shí)為多家《財(cái)富》世界500強(qiáng)企業(yè)提供咨詢服務(wù),經(jīng)驗(yàn)十分豐富,在該領(lǐng)域頗具權(quán)威和影響力。他還是一位技術(shù)作家,任職于Santa
Fe學(xué)院,在《Dr. Dobb’s Journal》、《Scientific
Computing》等媒體上發(fā)表了多篇關(guān)于高性能編程的經(jīng)典技術(shù)文章,深受讀者喜愛。此外,他還是《財(cái)富》排名前100名的兩家公司的合伙創(chuàng)始人。
書籍目錄
譯者序
序言
前言
第1章 CUDA入門與編程思想
1.1 源代碼與維基
1.2 一個(gè)用以區(qū)別CUDA與傳統(tǒng)程序開發(fā)的示例
1.3 選擇合適的CUDA API
1.4 CUDA的一些基本概念
1.5 理解首個(gè)Runtime Kernel
1.6 GPGPU編程的三條法則
1.6.1 法則1:將數(shù)據(jù)放入并始終存儲(chǔ)于GPU
1.6.2 法則2:交給GPGPU足夠多的任務(wù)
1.6.3 法則3:注重GPGPU上的數(shù)據(jù)重用,以避免帶寬限制
1.7 大O記號(hào)的思想與數(shù)據(jù)傳輸
1.8 CUDA和Amdahl定律
1.9 數(shù)據(jù)并行與任務(wù)并行
1.10 混合執(zhí)行:同時(shí)使用CPU和GPU資源
1.11 回歸測(cè)試與正確性
1.12 靜默錯(cuò)誤
1.13 調(diào)試簡(jiǎn)介
1.14 UNIX調(diào)試方法
1.14.1 NVIDIA cuda-gdb調(diào)試器
1.14.2 CUDA內(nèi)存檢查器
1.14.3 通過UNIX ddd界面使用cuda-gdb
1.15 使用Parallel Nsight進(jìn)行Windows調(diào)試
1.16 本章小結(jié)
第2章 CUDA在機(jī)器學(xué)習(xí)與優(yōu)化中的應(yīng)用
2.1 建模與模擬
2.1.1 擬合參數(shù)化模型
2.1.2 Nelder-Mead方法
2.1.3 Levenberg-Marquardt方法
2.1.4 算法加速
2.2 機(jī)器學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)
2.3 異或邏輯:一個(gè)重要的非線性機(jī)器學(xué)習(xí)問題
2.3.1 目標(biāo)函數(shù)示例
2.3.2 針對(duì)多GPU設(shè)備、多CPU處理器的完整仿函數(shù)
2.3.3 完整Nelder-Mead優(yōu)化代碼的簡(jiǎn)要討論
2.4 異或邏輯的性能結(jié)果
2.5 性能討論
2.6 本章小結(jié)
2.7 C++ NELDER-MEAD代碼模板
第3章 CUDA工具套件:對(duì)PCA、NLPCA進(jìn)行性能分析
3.1 PCA和NLPCA
3.1.1 自編碼網(wǎng)絡(luò)
3.1.2 用于PCA分析的仿函數(shù)示例
3.1.3 用于NLPCA分析的示例仿函數(shù)
3.2 獲得基礎(chǔ)性能分析數(shù)據(jù)
3.3 gprof:通用UNIX性能分析器
3.4 NVIDIA可視化性能分析器:computeprof
3.5 Microsoft Visual Studio中的Parallel Nsight
3.5.1 Nsight時(shí)間表分析
3.5.2 NVTX跟蹤支持庫
3.5.3 CUDA API的可擴(kuò)展性表現(xiàn)
3.6 性能調(diào)節(jié)與分析實(shí)用工具(TAU)
3.7 本章小結(jié)
第4章 CUDA執(zhí)行模型
4.1 GPU架構(gòu)綜述
4.1.1 線程調(diào)度:通過執(zhí)行配置統(tǒng)籌性能與并行度
4.1.2 computeprof中Warp相關(guān)值
4.1.3 Warp分歧
4.1.4 關(guān)于Warp分歧的若干準(zhǔn)則
4.1.5 computeprof中Warp分歧相關(guān)值
4.2 Warp調(diào)度與TLP
4.3 ILP:高性能低占用率
4.3.1 ILP隱藏算術(shù)計(jì)算延遲
4.3.2 ILP隱藏?cái)?shù)據(jù)延遲
4.3.3 ILP的未來
4.3.4 computeprof中指令速率相關(guān)值
4.4 Little法則
4.5 檢測(cè)限制因素的CUDA工具
4.5.1 nvcc編譯器
4.5.2 啟動(dòng)約束
4.5.3 反匯編器
4.5.4 PTX Kernel函數(shù)
4.5.5 GPU模擬器
4.6 本章小結(jié)
第5章 CUDA存儲(chǔ)器
5.1 CUDA存儲(chǔ)器層次結(jié)構(gòu)
5.2 GPU存儲(chǔ)器
5.3 L2緩存
5.4 L1緩存
5.5 CUDA內(nèi)存類型
5.5.1 寄存器
5.5.2 局域內(nèi)存
5.5.3 和局域內(nèi)存相關(guān)的computeprof性能分析參數(shù)
5.5.4 共享內(nèi)存
5.5.5 和共享內(nèi)存相關(guān)的computeprof性能分析參數(shù)
5.5.6 常量?jī)?nèi)存
5.5.7 紋理內(nèi)存
5.5.8 和紋理內(nèi)存相關(guān)的computeprof性能分析參數(shù)
5.6 全局內(nèi)存
5.6.1 常見的整合內(nèi)存示例
5.6.2 全局內(nèi)存的申請(qǐng)
5.6.3 全局內(nèi)存設(shè)計(jì)中的限制因素
5.6.4 和全局內(nèi)存相關(guān)的computeprof性能分析參數(shù)
5.7 本章小結(jié)
第6章 高效使用CUDA存儲(chǔ)器
6.1 歸約
6.1.1 歸約模板
6.1.2 functionReduce.h的測(cè)試程序
6.1.3 測(cè)試結(jié)果
6.2 使用非規(guī)則數(shù)據(jù)結(jié)構(gòu)
6.3 稀疏矩陣和CUSP支持庫
6.4 圖論算法
6.5 SoA、AoS以及其他數(shù)據(jù)結(jié)構(gòu)
6.6 分片和分塊
6.7 本章小結(jié)
第7章 提高并行度的技巧
7.1 CUDA上下文環(huán)境對(duì)并行度的擴(kuò)展
7.2 流與上下文環(huán)境
7.2.1 多GPU的使用
7.2.2 顯式同步
7.2.3 隱式同步
7.2.4 統(tǒng)一虛擬地址空間
7.2.5 一個(gè)簡(jiǎn)單的示例
7.2.6 分析結(jié)果
7.3 使用多個(gè)流亂序執(zhí)行
7.3.1 在同一GPU內(nèi)并發(fā)執(zhí)行Kernel函數(shù)的建議
7.3.2 隱式并行Kernel的原子操作
7.4 將數(shù)據(jù)捆綁計(jì)算
7.4.1 手動(dòng)分割數(shù)據(jù)
7.4.2 映射內(nèi)存
7.4.3 映射內(nèi)存的工作機(jī)制
7.5 本章小結(jié)
第8章 CUDA在所有GPU與CPU程序中的應(yīng)用
8.1 從CUDA到多種硬件后端的途徑
8.1.1 PGI CUDA x86編譯器
8.1.2 PGI CUDA x86編譯器
8.1.3 將x86處理器核心用作流多處理器
8.1.4 NVIDIA NVCC編譯器
8.1.5 Ocelot
8.1.6 Swan
8.1.7 MCUDA
8.2 從其他語言訪問CUDA
8.2.1 SWIG
8.2.2 Copperhead
8.2.3 EXCEL
8.2.4 MATLAB
8.3 支持庫
8.3.1 CUBLAS
8.3.2 CUFFT
8.3.3 MAGMA
8.3.4 phiGEMM支持庫
8.3.5 CURAND
8.4 本章小結(jié)
第9章 CUDA與圖形渲染混合編程
9.1 OpenGL
9.1.1 GLUT
9.1.2 通過OpenGL映射GPU內(nèi)存
9.1.3 使用基元重啟提升3D處理性能
9.2 框架內(nèi)各文件的介紹
9.2.1 Kernel與Perlin Kernel演示的示例代碼
9.2.2 simpleGLmain.cpp文件
9.2.3 simpleVBO.cpp文件
9.2.4 callbacksVBO.cpp文件
9.3 本章小結(jié)
第10章 在云計(jì)算和集群環(huán)境中使用CUDA
10.1 消息傳遞接口
10.1.1 MPI編程模型
10.1.2 MPI通信器
10.1.3 MPI進(jìn)程號(hào)
10.1.4 主從模式
10.1.5 點(diǎn)對(duì)點(diǎn)模式基礎(chǔ)
10.2 MPI通信機(jī)制
10.3 帶寬
10.4 平衡率
10.5 運(yùn)行大型MPI程序需要考慮的因素
10.5.1 初始數(shù)據(jù)加載的可擴(kuò)展性
10.5.2 使用MPI進(jìn)行計(jì)算
10.5.3 可擴(kuò)展性檢查
10.6 云計(jì)算
10.7 代碼示例
10.7.1 數(shù)據(jù)的產(chǎn)生
10.7.2 主體代碼部分
10.8 本章小結(jié)
第11章 CUDA在現(xiàn)實(shí)問題中的應(yīng)用
11.1 高維數(shù)據(jù)的處理
11.1.1 PCA/NLPCA
11.1.2 多維尺度分析
11.1.3 K均值聚類算法
11.1.4 期望最大化
11.1.5 支持向量機(jī)
11.1.6 Bayesian網(wǎng)絡(luò)
11.1.7 互信息
11.2 力導(dǎo)向圖
11.3 Monte Carlo方法
11.4 分子建模
11.5 量子化學(xué)
11.6 交互式工作流
11.7 其他眾多的項(xiàng)目
11.8 本章小結(jié)
第12章 針對(duì)現(xiàn)場(chǎng)實(shí)況視頻流的應(yīng)用程序
12.1 機(jī)器視覺話題
12.1.1 3D效果
12.1.2 膚色區(qū)域分割
12.1.3 邊緣檢測(cè)
12.2 FFmpeg
12.3 TCP服務(wù)器
12.4 實(shí)況視頻流應(yīng)用程序
12.4.1 kernelWave():動(dòng)畫Kernel函數(shù)
12.4.2 kernelFlat():在平面渲染圖像
12.4.3 kernelSkin():僅保留膚色區(qū)域
12.4.4 kernelSobel():Sobel邊緣檢測(cè)過濾器
12.4.5 launch_kernel()方法
12.5 simpleVBO.cpp文件
12.6 callbacksVBO.cpp文件
12.7 生成與執(zhí)行代碼
12.8 展望
12.8.1 機(jī)器學(xué)習(xí)
12.8.2 Connectome
12.9 本章小結(jié)
12.10 simpleVBO.cpp文件
參考文獻(xiàn)
術(shù)語表
章節(jié)摘錄
版權(quán)頁: 插圖: 計(jì)算能力為2.0的設(shè)備為每個(gè)流多處理器增加了L1緩存,并且在流多處理器和全局內(nèi)存之間增加了一套所有流多處理器都共享的L2緩存,如圖5.2所示。 5.3 L2緩存 GPU上所有流多處理器都可訪問的L2緩存(二級(jí)緩存)是一種高速數(shù)據(jù)存儲(chǔ)設(shè)備,可極大地降低設(shè)備內(nèi)存子系統(tǒng)的工作壓力。由于L2緩存的存在,許多程序在計(jì)算能力為2.0的設(shè)備上的運(yùn)行速度會(huì)變得很快。這可歸結(jié)為兩個(gè)原因: 在不需要CUDA編程者做任何調(diào)整的情況下,L2緩存可通過LRU方式緩存數(shù)據(jù),這使得很多CUDA Kernel避免了全局內(nèi)存的帶寬瓶頸。 非規(guī)則內(nèi)存訪問會(huì)表現(xiàn)出極差的性能,而L2緩存對(duì)非規(guī)則內(nèi)存訪問具有明顯的加速效果。對(duì)于很多算法,程序自身的特性決定了其能否有效地部署在不具備L2緩存的計(jì)算能力為1.x的設(shè)備上。 Fermi架構(gòu)的GPU提供了768KB共享的L2緩存,并保證了在各流多處理器間的一致性。也就是說,任何線程都可以對(duì)L2緩存中的內(nèi)容進(jìn)行修改。然后,任何其他的GPU線程都可以讀取該地址,得到更新后的正確數(shù)據(jù)。當(dāng)然,必須使用原子操作才能保證當(dāng)前數(shù)據(jù)寫操作完成后再允許其他線程的讀取操作。 因?yàn)樵缙贕PGPU架構(gòu)采用了不同的處理路徑來處理數(shù)據(jù)的讀操作和寫操作,所以即使最普通的讀寫操作也存在執(zhí)行上的風(fēng)險(xiǎn)。特別是只讀的紋理加載路徑和只寫的像素?cái)?shù)據(jù)路徑。為了保證數(shù)據(jù)正確性,在早期GPU架構(gòu)中,如果任何線程修改了一個(gè)被緩存的內(nèi)存區(qū)域的數(shù)據(jù),都將導(dǎo)致讀操作路徑上該內(nèi)存區(qū)域的緩存數(shù)據(jù)無效,并清空已存在的緩存數(shù)據(jù)。在Fermi架構(gòu)中,流多處理器間共享的L2緩存消除了在早期GPU架構(gòu)中紋理和光柵緩存中存在的這一性能瓶頸。 所有的數(shù)據(jù)加載與存儲(chǔ)操作都經(jīng)過L2緩存(包括CPU與GPU之間的數(shù)據(jù)拷貝)。這就解釋了為什么GPU和主機(jī)間的數(shù)據(jù)傳輸居然會(huì)影響緩存命中率和程序性能。顯然,異步的Kernel執(zhí)行也會(huì)造成緩存污染。
媒體關(guān)注與評(píng)論
本書是所有希望系統(tǒng)學(xué)習(xí)和使用CUDA編寫用于科學(xué)計(jì)算或可視化程序等并行應(yīng)用的程序員的必讀書之一。本書通俗易懂,并且提供了便于讀者動(dòng)手實(shí)踐的詳細(xì)操作案例?! ?Jack Dongrra 田納西大學(xué)計(jì)算機(jī)科學(xué)分布式處理器研究院
編輯推薦
《高性能CUDA應(yīng)用設(shè)計(jì)與開發(fā):方法與最佳實(shí)踐》編輯推薦:美國(guó)國(guó)家安全實(shí)驗(yàn)室資深專家撰寫,硬件角度解讀CUDA設(shè)計(jì)理念與體系結(jié)構(gòu),軟件角度講解CUDA應(yīng)用開發(fā)思想、方法、技巧與準(zhǔn)則。
名人推薦
本書是所有希望系統(tǒng)學(xué)習(xí)和使用CUDA編寫用于科學(xué)計(jì)算或可視化程序等并行應(yīng)用的程序員的必讀書之一。本書通俗易懂,并且提供了便于讀者動(dòng)手實(shí)踐的詳細(xì)操作案例。——Jack Dongrra 田納西大學(xué)計(jì)算機(jī)科學(xué)分布式處理器研究院
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載
高性能CUDA應(yīng)用設(shè)計(jì)與開發(fā) PDF格式下載