CUDA 編程:基礎與實踐( 簡體 字) | |
作者:樊哲勇 | 類別:1. -> 程式設計 -> 綜合 |
出版社:清華大學出版社 | 3dWoo書號: 53746 詢問書籍請說出此書號! 有庫存 NT售價: 345 元 |
出版日:10/1/2020 | |
頁數:183 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787302564607 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章GPU硬件與CUDA程序開發工具 1
1.1GPU硬件簡介 1 1.2CUDA程序開發工具 4 1.3CUDA開發環境搭建示例 6 1.4用nvidia-smi檢查與設置設備 7 1.5其他學習資料 8 第2章CUDA中的線程組織 10 2.1C++語言中的HelloWorld程序 10 2.2CUDA中的HelloWorld程序 11 2.2.1只有主機函數的CUDA程序 11 2.2.2使用核函數的CUDA程序 12 2.3CUDA中的線程組織 14 2.3.1使用多個線程的核函數 14 2.3.2使用線程索引 15 2.3.3推廣至多維網格 17 2.3.4網格與線程塊大小的限制 21 2.4CUDA中的頭文件 21 2.5用nvcc編譯CUDA程序 22 第3章簡單CUDA程序的基本框架 25 3.1例子:數組相加 25 3.2CUDA程序的基本框架 27 3.2.1隱形的設備初始化 29 3.2.2設備內存的分配與釋放 29 3.2.3主機與設備之間數據的傳遞 31 3.2.4核函數中數據與線程的對應 32 3.2.5核函數的要求 33 3.2.6核函數中if語句的必要性 34 3.3自定義設備函數 35 3.3.1函數執行空間標識符 35 3.3.2例子:為數組相加的核函數定義一個設備函數 36 第4章CUDA程序的錯誤檢測 38 4.1一個檢測CUDA運行時錯誤的宏函數 38 4.1.1檢查運行時API函數 40 4.1.2檢查核函數 42 4.2用CUDA-MEMCHECK檢查內存錯誤 44 第5章獲得GPU加速的關鍵 46 5.1用CUDA事件計時 46 5.1.1為C++程序計時 47 5.1.2為CUDA程序計時 48 5.2幾個影響GPU加速的關鍵因素 50 5.2.1數據傳輸的比例 50 5.2.2算術強度 51 5.2.3并行規模 54 5.2.4總結 55 5.3CUDA中的數學函數庫 55 第6章CUDA的內存組織 57 6.1CUDA的內存組織簡介 57 6.2CUDA中不同類型的內存 58 6.2.1全局內存 58 6.2.2常量內存 61 6.2.3紋理內存和表面內存 62 6.2.4寄存器 62 6.2.5局部內存 63 6.2.6共享內存 63 6.2.7L1和L2緩存 64 6.3SM及其占有率 65 6.3.1SM的構成 65 6.3.2SM的占有率 65 6.4用CUDA運行時API函數查詢設備 67 第7章全局內存的合理使用 70 7.1全局內存的合并與非合并訪問 70 7.2例子:矩陣轉置 73 7.2.1矩陣復制 73 7.2.2使用全局內存進行矩陣轉置 75 第8章共享內存的合理使用 78 8.1例子:數組歸約計算 78 8.1.1僅使用全局內存 79 8.1.2使用共享內存 82 8.1.3使用動態共享內存 84 8.2使用共享內存進行矩陣轉置 85 8.3避免共享內存的bank沖突 86 第9章原子函數的合理使用 90 9.1完全在GPU中進行歸約 90 9.2原子函數 93 9.3例子:鄰居列表的建立 95 9.3.1C++版本的開發 96 9.3.2利用原子操作的CUDA版本 98 9.3.3不用原子操作的CUDA版本 101 第10章線程束基本函數與協作組 104 10.1單指令-多線程執行模式 104 10.2線程束內的線程同步函數 106 10.3更多線程束內的基本函數 109 10.3.1介紹 109 10.3.2利用線程束洗牌函數進行歸約計算 114 10.4協作組 116 10.4.1線程塊級別的協作組 116 10.4.2利用協作組進行歸約計算 118 10.5數組歸約程序的進一步優化 119 10.5.1提高線程利用率 119 10.5.2避免反復分配與釋放設備內存 122 第11章CUDA流 124 11.1CUDA流概述 124 11.2在默認流中重疊主機和設備計算 125 11.3用非默認CUDA流重疊多個核函數的執行 128 11.3.1核函數執行配置中的流參數 128 11.3.2重疊多個核函數的例子 129 11.4用非默認CUDA流重疊核函數的執行與數據傳遞 131 11.4.1不可分頁主機內存與異步的數據傳輸函數 131 11.4.2重疊核函數執行與數據傳輸的例子 133 第12章使用統一內存編程 136 12.1統一內存簡介 136 12.1.1統一內存的基本概念 136 12.1.2使用統一內存對硬件的要求 137 12.1.3統一內存編程的優勢 137 12.2統一內存的基本使用方法 137 12.2.1動態統一內存 138 12.2.2靜態統一內存 139 12.3使用統一內存申請超量的內存 140 12.3.1第一個測試 140 12.3.2第二個測試 142 12.3.3第三個測試 143 12.4優化使用統一內存的程序 144 第13章分子動力學模擬的CUDA程序開發 147 13.1分子動力學模擬的基本算法和C++實現 147 13.1.1程序的整體結構 147 13.1.2分子動力學模擬的基本流程 148 13.1.3初始條件 149 13.1.4邊界條件 150 13.1.5相互作用 152 13.1.6運動方程的數值積分 156 13.1.7程序中使用的單位制 157 13.1.8程序的編譯與運行 158 13.1.9能量守恒的測試 159 13.1.10C++版本程序運行速度的測試 160 13.2CUDA版本的分子動力學模擬程序開發 161 13.2.1僅加速求力和能量的部分 161 13.2.2加速全部計算 165 第14章CUDA標準庫的使用 167 14.1CUDA標準庫簡介 167 14.2Thrust庫 168 14.2.1簡介 168 14.2.2數據結構 168 14.2.3算法 168 14.2.4例子:前綴和 169 14.3cuBLAS庫 171 14.3.1簡介 171 14.3.2例子:矩陣乘法 172 14.4cuSolver庫 176 14.4.1簡介 176 14.4.2例子:矩陣本征值 177 14.5cuRAND庫 181 14.5.1簡介 181 14.5.2例子 182 本書是一本理想的學習 CUDA 編程的入門書籍。本書分兩部分,第一部分(前十章)循序漸進地介紹 CUDA 編程的基礎,第二部分(后五章)通過一個具體的計算物理應用實例——分子動力學模擬——來介紹如何從頭開發一個大型的、高效的 CUDA 程序。
基于CPU(central processing unit,中央處理器)和GPU(graphics processing unit,圖形處理器)的異構計算(heterogeneous computing)已逐步發展為高性能計算(high performance computing)領域的主流模式。很多超級計算機大量使用了GPU。CUDA(compute unified device architecture)作為GPU高性能計算的主要開發工具之一,已經在計算機、物理、化學、生物、材料等眾多領域發揮了重要作用。掌握CUDA編程也就意味著開辟了一條通往高性能計算的新道路。
本書通過大量實例循序漸進地介紹CUDA編程的語法知識、優化策略及程序開發實踐。本書所有源代碼都可以通過作者為本書創建的GitHub倉庫(https:// github.com/brucefan1983/CUDA-Programming)獲得。讀者也可以針對該倉庫提出問題(issues)與作者進行交流。渤海大學由琪同學的GitHub倉庫https://github.com/ YouQixiaowu/CUDA-Programming-with-Python還給出了本書部分程序的py-CUDA版本。本書中的所有程序都在Linux平臺通過測試,其中大部分程序也能在Windows平臺通過測試。我們會在適當的地方指出哪些程序無法在(作者的)Windows平臺通過測試。 本書是一本較理想的學習CUDA編程的入門讀物。在計算機方面,讀者需要掌握初步的Linux或Windows命令行操作技能,并具有一定的C++語言編程基礎。第13章的內容要求讀者具有大學物理或普通物理的知識基礎。第14章的部分內容要求讀者熟悉大學本科理工科的線性代數知識。本書前12章需順序閱讀,后兩章可選讀,而且可以按任意次序閱讀。最后要強調的是,本書不假定讀者有并行編程的經驗。 本書不是一本CUDA編程手冊,不追求面面俱到,但力求做到由淺入深、循序漸進。截至作者交稿之日,最新版本(10.2)的《CUDA C++ Programming Guide》和《CUDA C++ Best Practices Guide》加起來有400多頁,再加上CUDA工具箱中各種應用程序庫和編程開發工具的文檔,總頁數可能上萬。在本書100多頁的篇幅中想要做到面面俱到是不可能的。明確地說: ● 本書只涉及CUDA C++編程,不涉及其他異構編程語言,如OpenCL、OpenACC和CUDA Fortran。 ● 關于CUDA C++編程,本書不涉及動態并行(dynamic parallelism)、CUDA Graph、CUDA與OpenGL和Direct3D的交互、紋理和表面內存的使用。 ● 本書不涉及多GPU編程,只討論單GPU編程,并且不涉及OpenMP和MPI。 ● 在眾多性能分析器(profiler)中,我們將僅偶爾使用nvprof,不使用其他可視化性能分析器。 本書彩圖請掃描右側二維碼觀看。 本書的出版受到國家自然科學基金的支持,項目編號為11974059,名稱為《基于石墨烯及其他兩維材料的柔性熱電材料的多尺度模擬》。本書中相關程序的開發和測試使用了由Aalto Science-IT project和Finland’s IT Center for Science(CSC)提供的計算資源與技術支持。 復旦大學的周麟祥教授于2011年在廈門大學開設的CUDA編程講座讓作者有幸較早地接觸CUDA編程。廈門大學的博士后導師鄭金成和王惠瓊教授及芬蘭Aalto大學的博士后導師Ari Harju博士和Tapio Ala-Nissila教授在作者學習與使用CUDA的過程中給予了很大的支持。在此對以上老師表示由衷的感謝! 特別感謝蘇州吉浦訊科技有限公司的技術團隊。該團隊的工程師們為本書的初稿指出了300多個問題,并為作者解答了很多有關CUDA編程的問題。如果沒有該團隊的幫助,本書一定有很多錯誤。廈門大學的徐克同學和渤海大學的由琪同學先后為本書制作了若干插圖。中國科學技術大學的黃翔同學、濰坊學院高性能計算中心的李延龍同學及西安理工大學的范亞東同學幫助審閱了全部書稿。在此對以上同學一并表示感謝。 本書從構思到完成大概花了一年半的時間。在這一年半的時間里,此書的寫作占用了我很多本應該陪伴家人的時間。所以,我將此書獻給我的妻子秦海霞、大女兒樊懷瑾和小女兒樊婉瑜,以及我的父親樊明營與母親張珍艷。 |