GPU高性能運算之CUDA
-
【作 者】主編 張舒 褚艷利
【I S B N 】978-7-5084-6543-2
【責任編輯】宋俊娥
【適用讀者群】科技
【出版時間】2009-10-01
【開 本】16開
【裝幀信息】平裝(光膜)
【版 次】第1版第1次印刷
【頁 數】
【千字數】438
【印 張】17.75
【定 價】¥38
【叢 書】暫無分類
【備注信息】
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
本書是全國第一本全面介紹CUDA軟硬件體系架構的書籍。全面介紹使用CUDA進行通用計算所需要的語法、硬件架構、程序優化技巧等知識,是進行GPU通用計算程序開發的入門教材和參考書。
本書共分5章。第1章介紹GPU通用計算的發展歷程,介紹并行計算的歷史、現狀以及面臨的問題;第2章介紹CUDA的使用方法,幫助讀者理解CUDA的編程模型、存儲器模型和執行模型,掌握CUDA程序的編寫方法;第3章探討CUDA硬件架構,深入分析Tesla GPU架構與CUDA通用計算的相互作用;第4章總結CUDA的高級優化方法,對任務劃分、存儲器訪問、指令流效率等課題進行探討;第5章以豐富的實例展示如何使用CUDA的強大性能解決實際問題。
本書可作為CUDA的學習入門和編程參考書,主要面向從事高性能計算的程序員與工程師,使用GPU加速專業領域計算的科研人員,以及對GPU通用計算感興趣的程序員。開設相關課程的高等院校與科研機構也可選用本書作為教材。
1.精選典型實用例程,詳解CUDA使用細節
2.重視理論結合實際,介紹并行程序設計方法
3.深入分析硬件架構,揭示模型與底層映射關系
4.精心總結優化經驗,解析高性能編程技巧
5.技術支持:論壇http://bbs.hpctech.com
CUDA是NVIDIA公司于2007年推出的GPU通用計算產品。CUDA能夠有效利用GPU強勁的處理能力和巨大的存儲器帶寬進行圖形渲染以外的計算,廣泛應用于圖像處理、視頻播放、信號處理、人工智能、模式識別、金融分析、數值計算、石油勘探、天文計算、流體力學計算、生物計算、分子動力學計算、數據庫管理、編碼加密等領域,并在這些應用中對CPU獲得了一到兩個數量級的加速,取得了令人矚目的成績。CUDA在產業界和學術界引發了巨大反響,目前已有Adobe、Autodesk、HP、聯想、浪潮等國內外著名企業推出了基于CUDA的產品;哈佛、伯克利、清華等大批國內外高校也開設了相關課程,將CUDA作為一種典型的并行系統來幫助學生學習高性能計算的原理與應用。
多核的CPU和眾核的GPU已經成為目前大多數計算機中最重要的兩種處理器。傳統上,GPU只用于處理3D圖像渲染任務,而其他大多數的任務都交給了CPU。作為一種通用處理器,CPU的設計必須兼顧各種任務的需要。因此,CPU中大多數的晶體管都被用于制造龐大的緩存和復雜的控制邏輯,而運算單元占用的面積則并不多。近幾年來,CPU生產廠商已經認識到依靠增加單個核心的緩存尺寸和控制邏輯的復雜程度對提高處理器性能已經沒有太大幫助,因此紛紛在一塊芯片中集成更多的CPU核心。不過,這樣做只是能夠用更多的晶體管制造一個處理器,并沒有提高晶體管的利用率。與此同時,由于圖形渲染的并行特性,GPU與生俱來就是一種擁有大量運算單元的并行處理器。近幾年來的發展經驗表明,一塊高端GPU的單精度浮點處理性能可以達到一塊同時期高端桌面CPU的10倍,其顯存帶寬也達同時期桌面平臺的5倍左右。并且,由GPU提供相同的計算能力,所需要的成本和功耗都要小于基于CPU的系統。
由于傳統GPU硬件架構的限制,很難有效利用其資源進行通用計算。NVIDIA推出的CUDA產品則完全扭轉了這一局面。與傳統GPU通用計算開發方式相比,CUDA編程更簡單,功能更強大,應用領域更廣泛,支持CUDA的硬件性能也更強。CUDA完全改變了PC中的一些游戲規則,使用GPU計算無需投入額外的成本,卻可以在一些應用中獲得一個數量級的加速。在科學計算中,一些過去必須由集群處理的任務,現在也可以由每個研究人員的桌面PC完成了,這使得科研人員能夠更加自由地將時間投入到自己的研究中。在超級計算機與集群中,過去往往拆除“多余的”顯卡以節省功耗,現在的設計卻開始采用大量GPU來獲得更加綠色的計算能力。CUDA的強大性能引發了一場通用計算革命,這場革命將極大地改變計算機的面貌。
我們很幸運地參與了這場GPU通用計算革命。在2007~2009年間,我們看到國內有越來越多的開發者嘗試將CUDA應用到自己感興趣的領域中,在學術和產業領域都取得了令人欣喜的成績。與此同時,我們也注意到很多程序員在由CPU程序開發轉移到CUDA程序開發的過程中遇到了一些問題。特別是由于CUDA程序的性能往往和并行算法以及硬件架構有很大關系,初次接觸GPU的程序員往往需要較長的時間才能完全掌握CUDA程序的編寫與優化。因此,我們結合自己的學習經驗,結合例子對CUDA語法進行講解,將CUDA編程需要的各種知識進行歸納而編寫了本書。本書既可以作為科研人員與程序開發人者學習CUDA的入門指導和編程優化的參考手冊,也可以作為高校相關課程的教材。
本書的編寫過程耗時一年,在這一年中我們也和國內的其他CUDA程序員共同成長,一起經歷了CUDA從稚嫩走向成熟,漸漸發展壯大的過程。國內最開始只有一些高校中的教師學生在進行一些學術研究,漸漸地有更多的公司和研究機構以及編程愛好者加入了這一行列,討論的問題也從基本的語法和使用漸漸深入到對算法、硬件架構和優化技巧的分析。在這一過程中,我們和國內的很多開發者和機構進行合作,并建立了友誼。在此,我們要特別感謝許磊給我們的指導和建議,討論群中的劉偉峰、劉國峰、陳實富、楊常青等活躍的開發人員也提出了很多寶貴建議和意見;我們要感謝NVIDIA公司亞太區技術經理的鄧培智先生,中國區市場總監魏鳴女士,銷售經理謝強先生,以及NVIDIA深圳有限公司的Terence horng,Jerry Zhou,Johnny Qiu,Blues Yu,Jerry Jia,Donovan Chen,Sandy Zou等同事的支持;電子科技大學的竇衡副教授、楊萬麟教授、沈曉峰副教授、況凌博士以及電子工程學院1201教研室的各位同學,西安電子科技大學的劉西洋教授、王黎明老師、高海昌老師以及香港浸會大學的褚曉文教授在本書的幾位作者攻讀學位期間給予的指導和支持;浪潮集團,聯想集團,廈門美亞柏科資訊科技有限公司,廣州明夏陽人工智能有限公司,以及中科院的張楠、王龍、張先軼等對幾位作者在項目上給予了大力支持;感謝CSDN的路宏為我們出版本書四處奔走;感謝中國水利水電出版社的各位為了本書能夠更早出版付出的巨大努力;最后,還要把最誠摯的感謝留給幾位作者的家人。
GPU和CUDA都還在不斷發展中,本書也很難對GPU高性能計算涉及到的所有知識面面俱到,書中難免存在一些錯誤和不足之處,懇請諸位讀者能夠及時指出,給出寶貴的意見和建議。
張 舒
2009年8月于深圳
第1章 GPU通用計算 1
1.1 多核計算的發展 2
1.1.1 CPU多核并行 3
1.1.2 超級計算機、集群與分布式計算 4
1.1.3 CPU+GPU異構并行 5
1.2 GPU發展簡介 8
1.2.1 GPU渲染流水線 8
1.2.2 著色器模型 10
1.2.3 NVIDIA GPU發展簡介 11
1.3 從GPGPU到CUDA 12
1.3.1 傳統GPGPU開發 12
1.3.2 CUDA開發 13
第2章 CUDA基礎 14
2.1 CUDA編程模型 14
2.1.1 主機與設備 14
2.1.2 Kernel函數的定義與調用 15
2.1.3 線程結構 16
2.1.4 硬件映射 20
2.1.5 deviceQuery示例 22
2.1.6 matrixAssign示例 26
2.2 CUDA軟件體系 36
2.2.1 CUDA C語言 37
2.2.2 nvcc編譯器 37
2.2.3 運行時API與驅動API 39
2.2.4 CUDA函數庫 43
2.3 CUDA存儲器模型 44
2.3.1 寄存器 45
2.3.2 局部存儲器 45
2.3.3 共享存儲器 46
2.3.4 全局存儲器 47
2.3.5 主機端內存 52
2.3.6 主機端頁鎖定內存 52
2.3.7 常數存儲器 57
2.3.8 紋理存儲器 58
2.4 CUDA通信機制 68
2.4.1 同步函數 68
2.4.2 Volatile關鍵字 72
2.4.3 ATOM操作 72
2.4.4 VOTE操作 76
2.5 異步并行執行 76
2.5.1 流 79
2.5.2 事件 81
2.6 CUDA與圖形學API互操作 87
2.6.1 CUDA與OpenGL的互操作 87
2.6.2 CUDA與Direct3D互操作 91
2.7 多設備與設備集群 102
2.7.1 CUDA設備控制 102
2.7.2 CUDA與openMP 114
2.7.3 CUDA與集群 117
第3章 CUDA硬件架構 120
3.1 NVIDIA顯卡構造簡介 120
3.1.1 圖形顯卡概覽 120
3.1.2 PCI-E總線 121
3.1.3 顯存 122
3.1.4 GPU芯片 123
3.2 Tesla圖形與計算架構 124
3.2.1 SPA-TPC-SM 126
3.2.2 主流GPU架構 129
3.3 Tesla通用計算模型 131
3.3.1 數據與指令的加載 131
3.3.2 warp指令的發射與執行 133
3.3.3 紋理、渲染和存儲器流水線 137
第4章 CUDA程序的優化 141
4.1 CUDA程序優化概述 141
4.2 測量程序運行時間 144
4.2.1 設備端測時 144
4.2.2 主機端測時 148
4.3 任務劃分 148
4.3.1 任務劃分原則 148
4.3.2 grid和block維度設計 150
4.4 存儲器訪問優化 152
4.4.1 主機-設備通信優化 152
4.4.2 全局存儲器訪問優化 155
4.4.3 共享存儲器訪問優化 160
4.4.4 使用紋理存儲器和常數存儲器加速 163
4.5 指令流優化 163
4.5.1 算術指令 164
4.5.2 控制流指令 166
4.5.3 訪存指令 166
4.5.4 同步指令 167
4.6 CUDA profiler的使用 167
4.6.1 圖形分析 167
4.6.2 圖表分析 167
4.7 優化應用舉例 169
4.7.1 矩陣乘法的優化 169
4.7.2 并行歸約的優化 176
4.7.3 矩陣轉置的優化 184
第5章 綜合應用 190
5.1 基本應用 190
5.1.1 雙調排序網絡 190
5.1.2 Scan 197
5.1.3 CUBLAS簡單應用 206
5.1.4 CUFFT簡單應用 211
5.2 高級應用 217
5.2.1 共軛梯度法的CUBLAS實現 217
5.2.2 AC多模式匹配算法的CUDA實現 227
附錄A 安裝、配置、編譯及調試 237
附錄B 常見問題與解答 247
附錄C 技術規范 249
附錄D C擴展 253
附錄E 數學函數 263
附錄F 紋理拾取 272
附錄G 著色器模型 275