CUDA C 程式設計權威指南 學習筆記:第二章 CUDA程式設計模型
詳細細節參考書籍或者這個部落格《CUDA C程式設計權威指南》——第2章 CUDA程式設計模型 2.1 CUDA程式設計模型概述
2.1.1 CUDA程式設計結構
CUDA程式設計模型還利用GPU架構的計算能力提供了以下幾個特有功能。
1. 一種通過層次結構在GPU中組織執行緒的方法
2. 一種通過層次結構在GPU中訪問記憶體的方法
CUDA程式設計模型主要是非同步的,因此在GPU上進行的運算可以與主機-裝置通訊重疊。一個典型的CUDA程式包括由並行程式碼互補的序列程式碼。如圖2-2所示,序列程式碼(及任務並行程式碼)在主機CPU上執行,而並行程式碼在GPU上執行。主機程式碼按照ANSI C標準進行編寫,而裝置程式碼使用CUDA C進行編寫。一個典型的CUDA程式實現流程遵循以下模式。
- 把資料從CPU記憶體拷貝到GPU記憶體。
- 呼叫核函式對儲存在GPU記憶體中的資料進行操作。
- 將資料從GPU記憶體傳送回到CPU記憶體。
2.1.2 記憶體管理
udaMalloc與標準C語言中的malloc函式幾乎一樣,只是此函式在GPU的記憶體裡分配記憶體。通過充分保持與標準C語言執行庫中的介面一致性,可以實現CUDA應用程式的輕鬆接入。
cudaMemcpy函式負責主機和裝置之間的資料傳輸,這個函式以同步方式執行,因為在cudaMemcpy函式返回以及傳輸操作完成之前主機應用程式是阻塞的。
2.1.3 執行緒管理
CUDA明確了執行緒層次抽象的概念以便於你組織執行緒。這是一個兩層的執行緒層次結構,由執行緒塊和執行緒塊網格構成,如圖2-5所示。
- 同步
- 共享記憶體
不同塊內的執行緒不能協作。 執行緒依靠以下兩個座標變數來區分彼此。
- blockIdx(執行緒塊線上程格內的索引)
- threadIdx(塊內的執行緒索引)
網格和塊的維度由下列兩個內建變數指定。
- blockDim(執行緒塊的維度,用每個執行緒塊中的執行緒數來表示)
- gridDim(執行緒格的維度,用每個執行緒格中的執行緒數來表示)
2.1.4 啟動核函式
同一個塊中的執行緒之間可以相互協作,不同塊內的執行緒不能協作。核函式呼叫結束後,控制權立刻返回給主機端。你可以呼叫以下函式來強制主機端程式等待所有的核函式執行結束:cudaDeviceSynchronize(). 一些CUDA執行時API在主機和裝置之間是隱式同步的。當使用cudaMemcpy函式在主機和裝置之間拷貝資料時,主機端隱式同步,即主機端程式必須等待資料拷貝完成後才能繼續執行程式。
2.2 給核函式計時
2.2.1 使用CPU計時
由於GPU的執行是非同步的,所以使用CPU計時就必須要顯示做同步,cudaDeviceSynchronize()
2.2.2 使用nvprof計時
CUDA還提供了一個nvprof命令列分析工具
2.3 組織並行執行緒
從矩陣加法的例子中可以看出:
- 改變執行配置對核心效能有影響
- 傳統的核函式實現一般不能獲得最佳效能
- 對於一個給定的核函式,嘗試使用不同的網格和執行緒塊大小可以獲得更好的效能
相關文章
- CUDA學習筆記-1: CUDA程式設計概覽筆記程式設計
- cuda程式設計與gpu平行計算(四):cuda程式設計模型程式設計GPU模型
- NVIDIA CUDA 程式設計模型之Grid和Block程式設計模型BloC
- CUDA 8的混合精度程式設計程式設計
- CUDA學習指南
- CUDA10.0官方文件的翻譯與學習之程式設計介面程式設計
- GPU高效能程式設計CUDA實戰(二)GPU程式設計
- CUDA程式設計(4.1)—— 宣告符(global、device、host等)程式設計dev
- 四. 文字程式設計--Windows程式設計課程學習筆記程式設計Windows筆記
- 網路程式設計學習筆記程式設計筆記
- Linux學習/TCP程式設計學習筆記LinuxTCP程式設計筆記
- cuda的c++程式C++
- 精通C#學習筆記---C#核心程式設計結構C#筆記程式設計
- spark學習筆記--進階程式設計Spark筆記程式設計
- Javascript高階程式設計 學習筆記JavaScript程式設計筆記
- ROS串列埠程式設計學習筆記ROS串列埠程式設計筆記
- 結構化程式設計--學習筆記程式設計筆記
- Golang 學習筆記——tun/tap 程式設計Golang筆記程式設計
- C++核心程式設計筆記C++程式設計筆記
- Node.js 設計模式 學習筆記 之 流程式設計Node.js設計模式筆記程式設計
- 《HTTPS權威指南》-公鑰基礎設施(PKI)學習筆記HTTP筆記
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- C#設計模式學習筆記:設計原則C#設計模式筆記
- 程式設計師生存指南讀書筆記-第三篇(學習)程式設計師筆記
- Vue學習筆記(九):元件化程式設計Vue筆記元件化程式設計
- python程式設計學習筆記⑦-1函式Python程式設計筆記函式
- 好程式設計師學習筆記:函式程式設計師筆記函式
- C#學習筆記(六)——物件導向程式設計簡介C#筆記物件程式設計
- 程式設計師英語學習指南程式設計師
- Swift程式設計權威指南第2版 讀後收穫Swift程式設計
- c# 程式設計學習(四)C#程式設計
- c# 程式設計學習(二)C#程式設計
- C#程式設計學習(一)C#程式設計
- GPU程式設計(一):Ubuntu下的CUDA8.0環境搭建GPU程式設計Ubuntu
- JavaScript DOM 程式設計藝術 學習筆記01JavaScript程式設計筆記
- JavaScript DOM 程式設計藝術 學習筆記 02JavaScript程式設計筆記
- freeRTOS核心學習筆記(1)-程式設計標準筆記程式設計
- shell指令碼程式設計學習筆記-運算子指令碼程式設計筆記