高性能CUDA應用設計與開發(fā)

出版時間:2013-1-1  出版社:機械工業(yè)出版社華章公司  作者:Rob Farber  頁數(shù):271  譯者:于玉龍,唐堃  
Tag標簽:無  

前言

譯者序序言作為一種革新性的技術,GPU近年來在科學計算領域備受關注。這項技術已有大量的科學應用,并在性能與能效方面取得了顯著提升。這些應用大多由那些致力于使用GPU的先驅者開發(fā)和使用。最近,這項技術面臨一個關鍵問題:它能否普遍適用于科學計算領域中各種各樣的算法,以及能否為更廣泛的人群而不僅是那些先驅者使用。軟件開發(fā)是阻礙這項技術得以廣泛應用的關鍵,其中包括大規(guī)模并行CUDA代碼的編寫與優(yōu)化、新的性能與正確性分析工具的使用、CUDA支持庫的使用以及對GPU硬件架構的理解。通過書籍、教程等方式,專家們可以將他們在此領域掌握的知識和方法與其他使用者分享,這在一定程度上解決了CUDA廣泛應用的難題。本書就是這樣的一本書。在這本書中,作者詳盡地解釋了重要算法的實現(xiàn)方法,如量子化學、機器學習以及計算機視覺等。本書不僅講述了GPU編程的基本方法,還介紹了如何改寫算法以便從GPU架構中最大化獲益。此外,這本書提供了許多案例研究用以解釋與充實GPU的重要概念,如CUDA線程、GPU存儲層次結構以及多GPU的擴展性(書中使用一個MPI示例例證了其擴展性可以近似線性地增至使用500個GPU)。最后,任何一種編程語言都不能獨立存在??梢哉f,任何一個成功的編程語言,都伴隨由強大的編譯器、性能與正確性分析工具以及優(yōu)化的支持庫組成的整套系統(tǒng)環(huán)境。這些軟件開發(fā)中的實用工具是快速開發(fā)應用程序的關鍵。本書的諸章節(jié)描述了如何使用CUDA編譯器、調試器、性能分析工具、庫以及與其他語言的互操作,本書在這些方面沒有令人失望。我享受從這本書中學到的一切,我確信您也會。Jeffrey S.Vetter美國橡樹嶺國家實驗室杰出研究員佐治亞理工學院教授

內容概要

  本書是廣受推崇的系統(tǒng)學習高性能CUDA應用開發(fā)與設計的經(jīng)典著作,是美國國家安全實驗室資深高性能編程專家多年工作經(jīng)驗結晶,橡樹嶺國家實驗室資深專家鼎力推薦!本書不僅從硬件角度深入解讀了CUDA的設計理念和GPGPU硬件的體系結構,而且從軟件角度系統(tǒng)講解了CUDA應用設計與開發(fā)的思想、方法、技巧、準則、注意事項和最佳實踐。
第1章首先介紹了CUDA的核心概念和編程思想,以及構建與調試CUDA應用所需的工具和方法,然后講解了有效提高程序性能的CPU編程準則;第2章講解了CUDA在機器學習與優(yōu)化中的核心概念與應用,并給出了完整的通用框架;第3章介紹了CUDA的性能分析工具套件以及性能分析的方法,同時討論了PCA和NLPCA兩種數(shù)據(jù)挖掘方法;第4章講解了CUDA的執(zhí)行模型,深刻揭示了GPU的工作方式和原理;第5章介紹了CUDA提供的多種GPU內存,以及各種內存的優(yōu)缺點;第6章講解了高效利用內存的技術;第7章介紹了GPU提供的多種并行方式及其應用;第8章首先討論了多種CUDA后端設備,以及CUDA如何與Python、Java、R等高級語言交互;第9章講解了CUDA與圖形渲染混合編程;第10章講解了在云計算和集群環(huán)境中使用CUDA的方法和技術細節(jié);第11章介紹了CUDA在高維數(shù)據(jù)處理、力導向圖、交互式工作流、量子化學等現(xiàn)實問題中的應用;第12章為學習CUDA設計了一個綜合性的針對實時視頻流的應用案例。

作者簡介

  Rob
Farber,資深高性能編程專家,是Irish高端計算中心和美國國家實驗室等權威機構的高性能編程技術顧問,同時為多家《財富》世界500強企業(yè)提供咨詢服務,經(jīng)驗十分豐富,在該領域頗具權威和影響力。他還是一位技術作家,任職于Santa
Fe學院,在《Dr. Dobb’s Journal》、《Scientific
Computing》等媒體上發(fā)表了多篇關于高性能編程的經(jīng)典技術文章,深受讀者喜愛。此外,他還是《財富》排名前100名的兩家公司的合伙創(chuàng)始人。

書籍目錄

譯者序
序言
前言
第1章 CUDA入門與編程思想
 1.1 源代碼與維基
 1.2 一個用以區(qū)別CUDA與傳統(tǒng)程序開發(fā)的示例
 1.3 選擇合適的CUDA API
 1.4 CUDA的一些基本概念
 1.5 理解首個Runtime Kernel
 1.6 GPGPU編程的三條法則
  1.6.1 法則1:將數(shù)據(jù)放入并始終存儲于GPU
  1.6.2 法則2:交給GPGPU足夠多的任務
  1.6.3 法則3:注重GPGPU上的數(shù)據(jù)重用,以避免帶寬限制
 1.7 大O記號的思想與數(shù)據(jù)傳輸
 1.8 CUDA和Amdahl定律
 1.9 數(shù)據(jù)并行與任務并行
 1.10 混合執(zhí)行:同時使用CPU和GPU資源
 1.11 回歸測試與正確性
 1.12 靜默錯誤
 1.13 調試簡介
 1.14 UNIX調試方法
  1.14.1 NVIDIA cuda-gdb調試器
  1.14.2 CUDA內存檢查器
  1.14.3 通過UNIX ddd界面使用cuda-gdb
 1.15 使用Parallel Nsight進行Windows調試
 1.16 本章小結
第2章 CUDA在機器學習與優(yōu)化中的應用
 2.1 建模與模擬
  2.1.1 擬合參數(shù)化模型
  2.1.2 Nelder-Mead方法
  2.1.3 Levenberg-Marquardt方法
  2.1.4 算法加速
 2.2 機器學習與神經(jīng)網(wǎng)絡
 2.3 異或邏輯:一個重要的非線性機器學習問題
  2.3.1 目標函數(shù)示例
  2.3.2 針對多GPU設備、多CPU處理器的完整仿函數(shù)
  2.3.3 完整Nelder-Mead優(yōu)化代碼的簡要討論
 2.4 異或邏輯的性能結果
 2.5 性能討論
 2.6 本章小結
 2.7 C++ NELDER-MEAD代碼模板
第3章 CUDA工具套件:對PCA、NLPCA進行性能分析
 3.1 PCA和NLPCA
  3.1.1 自編碼網(wǎng)絡
  3.1.2 用于PCA分析的仿函數(shù)示例
  3.1.3 用于NLPCA分析的示例仿函數(shù)
 3.2 獲得基礎性能分析數(shù)據(jù)
 3.3 gprof:通用UNIX性能分析器
 3.4 NVIDIA可視化性能分析器:computeprof
 3.5 Microsoft Visual Studio中的Parallel Nsight
  3.5.1 Nsight時間表分析
  3.5.2 NVTX跟蹤支持庫
  3.5.3 CUDA API的可擴展性表現(xiàn)
 3.6 性能調節(jié)與分析實用工具(TAU)
 3.7 本章小結
第4章 CUDA執(zhí)行模型
 4.1 GPU架構綜述
  4.1.1 線程調度:通過執(zhí)行配置統(tǒng)籌性能與并行度
  4.1.2 computeprof中Warp相關值
  4.1.3 Warp分歧
  4.1.4 關于Warp分歧的若干準則
  4.1.5 computeprof中Warp分歧相關值
 4.2 Warp調度與TLP
 4.3 ILP:高性能低占用率
  4.3.1 ILP隱藏算術計算延遲
  4.3.2 ILP隱藏數(shù)據(jù)延遲
  4.3.3 ILP的未來
  4.3.4 computeprof中指令速率相關值
 4.4 Little法則
 4.5 檢測限制因素的CUDA工具
  4.5.1 nvcc編譯器
  4.5.2 啟動約束
  4.5.3 反匯編器
  4.5.4 PTX Kernel函數(shù)
  4.5.5 GPU模擬器
 4.6 本章小結
第5章 CUDA存儲器
 5.1 CUDA存儲器層次結構
 5.2 GPU存儲器
 5.3 L2緩存
 5.4 L1緩存
 5.5 CUDA內存類型
  5.5.1 寄存器
  5.5.2 局域內存
  5.5.3 和局域內存相關的computeprof性能分析參數(shù)
  5.5.4 共享內存
  5.5.5 和共享內存相關的computeprof性能分析參數(shù)
  5.5.6 常量內存
  5.5.7 紋理內存
  5.5.8 和紋理內存相關的computeprof性能分析參數(shù)
 5.6 全局內存
  5.6.1 常見的整合內存示例
  5.6.2 全局內存的申請
  5.6.3 全局內存設計中的限制因素
  5.6.4 和全局內存相關的computeprof性能分析參數(shù)
 5.7 本章小結
第6章 高效使用CUDA存儲器
 6.1 歸約
  6.1.1 歸約模板
  6.1.2 functionReduce.h的測試程序
  6.1.3 測試結果
 6.2 使用非規(guī)則數(shù)據(jù)結構
 6.3 稀疏矩陣和CUSP支持庫
 6.4 圖論算法
 6.5 SoA、AoS以及其他數(shù)據(jù)結構
 6.6 分片和分塊
 6.7 本章小結
第7章 提高并行度的技巧
 7.1 CUDA上下文環(huán)境對并行度的擴展
 7.2 流與上下文環(huán)境
  7.2.1 多GPU的使用
  7.2.2 顯式同步
  7.2.3 隱式同步
  7.2.4 統(tǒng)一虛擬地址空間
  7.2.5 一個簡單的示例
  7.2.6 分析結果
 7.3 使用多個流亂序執(zhí)行
  7.3.1 在同一GPU內并發(fā)執(zhí)行Kernel函數(shù)的建議
  7.3.2 隱式并行Kernel的原子操作
 7.4 將數(shù)據(jù)捆綁計算
  7.4.1 手動分割數(shù)據(jù)
  7.4.2 映射內存
  7.4.3 映射內存的工作機制
 7.5 本章小結
第8章 CUDA在所有GPU與CPU程序中的應用
 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 本章小結
第9章 CUDA與圖形渲染混合編程
 9.1 OpenGL
  9.1.1 GLUT
  9.1.2 通過OpenGL映射GPU內存
  9.1.3 使用基元重啟提升3D處理性能
 9.2 框架內各文件的介紹
  9.2.1 Kernel與Perlin Kernel演示的示例代碼
  9.2.2 simpleGLmain.cpp文件
  9.2.3 simpleVBO.cpp文件
  9.2.4 callbacksVBO.cpp文件
 9.3 本章小結
第10章 在云計算和集群環(huán)境中使用CUDA
 10.1 消息傳遞接口
  10.1.1 MPI編程模型
  10.1.2 MPI通信器
  10.1.3 MPI進程號
  10.1.4 主從模式
  10.1.5 點對點模式基礎
 10.2 MPI通信機制
 10.3 帶寬
 10.4 平衡率
 10.5 運行大型MPI程序需要考慮的因素
  10.5.1 初始數(shù)據(jù)加載的可擴展性
  10.5.2 使用MPI進行計算
  10.5.3 可擴展性檢查
 10.6 云計算
 10.7 代碼示例
  10.7.1 數(shù)據(jù)的產生
  10.7.2 主體代碼部分
 10.8 本章小結
第11章 CUDA在現(xiàn)實問題中的應用
 11.1 高維數(shù)據(jù)的處理
  11.1.1 PCA/NLPCA
  11.1.2 多維尺度分析
  11.1.3 K均值聚類算法
  11.1.4 期望最大化
  11.1.5 支持向量機
  11.1.6 Bayesian網(wǎng)絡
  11.1.7 互信息
 11.2 力導向圖
 11.3 Monte Carlo方法
 11.4 分子建模
 11.5 量子化學
 11.6 交互式工作流
 11.7 其他眾多的項目
 11.8 本章小結
第12章 針對現(xiàn)場實況視頻流的應用程序
 12.1 機器視覺話題
  12.1.1 3D效果
  12.1.2 膚色區(qū)域分割
  12.1.3 邊緣檢測
 12.2 FFmpeg
 12.3 TCP服務器
 12.4 實況視頻流應用程序
  12.4.1 kernelWave():動畫Kernel函數(shù)
  12.4.2 kernelFlat():在平面渲染圖像
  12.4.3 kernelSkin():僅保留膚色區(qū)域
  12.4.4 kernelSobel():Sobel邊緣檢測過濾器
  12.4.5 launch_kernel()方法
 12.5 simpleVBO.cpp文件
 12.6 callbacksVBO.cpp文件
 12.7 生成與執(zhí)行代碼
 12.8 展望
  12.8.1 機器學習
  12.8.2 Connectome
 12.9 本章小結
 12.10 simpleVBO.cpp文件
參考文獻
術語表

章節(jié)摘錄

版權頁:   插圖:   計算能力為2.0的設備為每個流多處理器增加了L1緩存,并且在流多處理器和全局內存之間增加了一套所有流多處理器都共享的L2緩存,如圖5.2所示。 5.3 L2緩存 GPU上所有流多處理器都可訪問的L2緩存(二級緩存)是一種高速數(shù)據(jù)存儲設備,可極大地降低設備內存子系統(tǒng)的工作壓力。由于L2緩存的存在,許多程序在計算能力為2.0的設備上的運行速度會變得很快。這可歸結為兩個原因: 在不需要CUDA編程者做任何調整的情況下,L2緩存可通過LRU方式緩存數(shù)據(jù),這使得很多CUDA Kernel避免了全局內存的帶寬瓶頸。 非規(guī)則內存訪問會表現(xiàn)出極差的性能,而L2緩存對非規(guī)則內存訪問具有明顯的加速效果。對于很多算法,程序自身的特性決定了其能否有效地部署在不具備L2緩存的計算能力為1.x的設備上。 Fermi架構的GPU提供了768KB共享的L2緩存,并保證了在各流多處理器間的一致性。也就是說,任何線程都可以對L2緩存中的內容進行修改。然后,任何其他的GPU線程都可以讀取該地址,得到更新后的正確數(shù)據(jù)。當然,必須使用原子操作才能保證當前數(shù)據(jù)寫操作完成后再允許其他線程的讀取操作。 因為早期GPGPU架構采用了不同的處理路徑來處理數(shù)據(jù)的讀操作和寫操作,所以即使最普通的讀寫操作也存在執(zhí)行上的風險。特別是只讀的紋理加載路徑和只寫的像素數(shù)據(jù)路徑。為了保證數(shù)據(jù)正確性,在早期GPU架構中,如果任何線程修改了一個被緩存的內存區(qū)域的數(shù)據(jù),都將導致讀操作路徑上該內存區(qū)域的緩存數(shù)據(jù)無效,并清空已存在的緩存數(shù)據(jù)。在Fermi架構中,流多處理器間共享的L2緩存消除了在早期GPU架構中紋理和光柵緩存中存在的這一性能瓶頸。 所有的數(shù)據(jù)加載與存儲操作都經(jīng)過L2緩存(包括CPU與GPU之間的數(shù)據(jù)拷貝)。這就解釋了為什么GPU和主機間的數(shù)據(jù)傳輸居然會影響緩存命中率和程序性能。顯然,異步的Kernel執(zhí)行也會造成緩存污染。

媒體關注與評論

  本書是所有希望系統(tǒng)學習和使用CUDA編寫用于科學計算或可視化程序等并行應用的程序員的必讀書之一。本書通俗易懂,并且提供了便于讀者動手實踐的詳細操作案例。  —— Jack Dongrra 田納西大學計算機科學分布式處理器研究院

編輯推薦

《高性能CUDA應用設計與開發(fā):方法與最佳實踐》編輯推薦:美國國家安全實驗室資深專家撰寫,硬件角度解讀CUDA設計理念與體系結構,軟件角度講解CUDA應用開發(fā)思想、方法、技巧與準則。

名人推薦

本書是所有希望系統(tǒng)學習和使用CUDA編寫用于科學計算或可視化程序等并行應用的程序員的必讀書之一。本書通俗易懂,并且提供了便于讀者動手實踐的詳細操作案例。——Jack Dongrra 田納西大學計算機科學分布式處理器研究院

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    高性能CUDA應用設計與開發(fā) PDF格式下載


用戶評論 (總計33條)

 
 

  •   剛開始學CUDA,看完《GPU高性能編程CUDA實戰(zhàn)》后看這本非常合適
  •   現(xiàn)在CUDA的書真是太少了 這本還不錯
  •   很實用,講解了很多應用實例
  •   這本書絕不是摘抄官方編程指南,寫出了自己的深度和廣讀。值得收藏!
  •   沒有代碼,提供代碼就更好了。
  •   書挺好,新概念的東西書都貴,哎哎
  •   內容講得挺好的,苦于自己的筆記本不是英偉達的顯卡,沒法上機實踐,目前只能看書了
  •   質量很好,內容豐富,稍微有點偏貴。
  •   書本知識不錯,記得歌德說過一句話,讀一本好書,就是和許多高尚的人談話。這本書就是,不過如果有光盤就好了,還有就是書太貴了!
  •   不錯吧 還沒仔細看,就是有點貴吧
  •   非常不錯哈哈哈哈哈哈哈哈
  •   大致閱覽了下,值得的。不錯
  •   這還沒看,應該還行
  •   書很有用,喜歡。。。。。。。只是書有點薄。
  •   幫朋友買的,他反應不錯。
  •   剛買來,看著還可以,挺好的。。
  •   Good Very Good
  •   寫得全面,但是不詳細,每章都只講一點
  •   原版的英文版太貴,呵呵。這個性價比高,要是能有影印版就更完美了。
  •   書有點薄,但有點貴。
  •   內容比較少,不過感覺很受益
  •   書很貴,紙張卻很一般,不值得
  •   該書將重點放在CUDA在各方面的應用實例及相關性能提升及基礎的并行設計理論。不能夠更快地告訴普通讀者如何更快的使用CUDA技術,不是針對初學者的書,建議初學者看《GPU高性能運算之CUDA》會更好些!盡管如此該書還是提供了很多普通參考書所沒有的內容,從宏觀的角度闡述了CUDA技術。當然如果E文 足夠好,看幫助就可以了!
  •   本書每章都有一個比較深入的實例做為支撐,為深入學習CUDA,希望利用CUDA進行實際項目開發(fā)的讀者非常有幫助
  •   此書并不適合初學者,需要有一定cuda基礎的人閱讀。此書里面有很多有用的參考文獻,值得查閱。
  •   很不錯的書,例子很好,涉及的面比較廣。適合中級讀者和希望比較廣的了解GPU應用的讀者。翻譯的一般,不過不影響閱讀。
  •   紙張一看就知道是正版,內容也不錯,章節(jié)分的很細。
  •   其實很多資料網(wǎng)上都有,買的話用來翻著玩的,不是非有不可
  •   這本書主要是來參考代碼的.一般的項目完全夠用了.
  •   高性能CUDA應用設計與開發(fā):方法與最佳實踐
  •   感覺非常不值
  •   講得很多很概念
  •   CUDA編程必備
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7