[分享] CUDA 程式設計(1) -- 簡介
※ [本文轉錄自 VideoCard 看板]
作者: a5000ml (咖啡裡的海洋藍) 看板: VideoCard
標題: [分享] CUDA 程式設計(1) -- 簡介
時間: Thu Sep 25 08:32:26 2008
剛好老師最近要我為 group 撰寫中文的教學文件,準備下學期教學弟妹們CUDA程式設計,所以順便 po 上來和大家分享,有什麼
疏漏之處,請各位大大不吝指正。
※ 引言 ※
從軟體設計角度來看,CUDA 寫作並不困難,困難之處在於如何最佳化,它需要了解不少硬體的細節。一般而言未最佳化的程式
在 GPGPU 上面執行,可以比傳統的 CPU 快上 5~10 倍,而最佳化過的程式,往往還能再增速 5~10 倍,達到 25~100 倍的效能。
CUDA 和傳統 C++ 最大的差異在於「平行化的程式設計」vs.「序列化的程式設計」,例如傳統上透過迴圈執行數千次的程式碼,
在 CUDA 上就可以將它拆解成數百個同時執行的執行緒,每個執行緒只執行十幾次而己,因此產生數十到數百倍的效能。
CUDA 是在傳統 C++ 的基礎上,加入一些延伸語法,以及輔助的函式庫,而形成的一種程式語言,一般而言只要熟悉 C 或 C++,
就很容易上手 (可能比 Java 容易上手,因為傳統 C/C++ 的函式庫都可以用),編譯好的程式碼,也可以跟其它語言做不錯的聯結。
在接下來幾篇文章中,我們從簡單的軟體設計角度開始,介紹 CUDA 如何寫作,逐漸帶出硬體細節,然後介紹最佳化的一些技術。
※ 第一章CUDA程式如何執行 ※
◆ 名詞 ◆
主機 (host) :插顯示卡那台PC。
裝置 (device):顯示卡。
核心 (kernel):在顯示卡上執行的程式碼區段。
◆ 執行流程 ◆
因為 GPGPU 屬於外部裝置(device),其機器指令有別於傳統 CPU,所以程式核心(kernel) 必須經過特殊編譯後,在執行時期和所需的
資料由主機(host)送到裝置中,並在執行完成後,將結果資料傳回主機,流程如下。
主機(host) PC 裝置(device) 顯示卡
傳送資料到顯示卡記憶體中
(1) 主機記憶體 ------------------------------------------>> 顯示卡記憶體
傳送程式碼(kernel)到顯示卡
(2) 主機記憶體 ------------------------------------------>> 顯示卡記憶體
(3) 主機做其它的事 or 閒置 執行顯示卡中的程式(kernel)
傳回執行結果
(4) 主機記憶體 <<------------------------------------------ 顯示卡記憶體
實際上,CUDA 提供了很多 API 簡化這些流程,包括記憶體在兩者間的搬移,顯示卡記憶體的配置與釋放,kernel 設定、啟動與同步
等,所以上面的每一個步驟其實就是去叫用CUDA的函式而已。
◆ 編譯流程 ◆
簡易的編譯流程如下,只要先準備好副檔名為 .cu 的 CUDA 程式碼檔案,然後使用CUDA的編譯器 (nvcc) 來編譯即可,進階的編譯流程
以後再介紹。
nvcc
.cu 檔案 ----------> 可執行檔 or 目的檔
其中 .cu 檔案可以同時包含在 host 中執行的傳統 C++ 程式碼,以及在 GPGPU 中執行的 kernel 程式碼。
※ 後續章節 ※
◆ 第二章 CUDA 安裝 ◆
◆ 第三章 簡易 kernel 寫作 ◆
◆ 第四章 CUDA 的記憶體分類 ◆
◆ 第五章 CUDA 的函式種類 ◆
... (可能還會調整)
※ 名詞解釋 ※
(1) GPGPU (General purpose graphics processing units) 泛用圖形處理晶片
(2) host 主機:指插上顯示卡的那台機器。
(3) device 裝置:主機之外的其它單元,在這裡指顯示卡。
(4) kernel 核心:在GPGPU中執行的程式碼區段。
(5) API (Application Programming Interface) 程式設計介面,就是一組函式庫。
(6) nvcc : CUDA 的compiler,可到 nVidia 的官網免費下載 http://www.nvidia.com/object/cuda_get.html。
(7) .cu 檔案:CUDA的程式碼檔案,基本上是 .cpp 檔案的延伸,除了傳統C++程式碼之外,亦可包含kernel程式碼,透過 nvcc 編譯
成目的檔或可執行檔。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.212.98
※ 編輯: a5000ml 來自: 114.45.212.98 (09/25 09:38)
推
09/25 09:06,
09/25 09:06
推
09/25 09:12,
09/25 09:12
推
09/25 09:34,
09/25 09:34
推
09/25 09:39,
09/25 09:39
※ 編輯: a5000ml 來自: 114.45.212.98 (09/25 09:44)
推
09/25 09:41,
09/25 09:41
推
09/25 10:17,
09/25 10:17
推
09/25 11:07,
09/25 11:07
推
09/25 12:05,
09/25 12:05
推
09/25 12:08,
09/25 12:08
推
09/25 12:54,
09/25 12:54
推
09/25 13:09,
09/25 13:09
推
09/25 13:18,
09/25 13:18
→
09/25 13:18,
09/25 13:18
推
09/25 13:25,
09/25 13:25
→
09/25 13:33,
09/25 13:33
推
09/25 13:40,
09/25 13:40
推
09/25 13:59,
09/25 13:59
→
09/25 13:59,
09/25 13:59
推
09/25 14:03,
09/25 14:03
推
09/25 14:11,
09/25 14:11
→
09/25 14:12,
09/25 14:12
推
09/25 15:12,
09/25 15:12
推
09/25 18:56,
09/25 18:56
→
09/25 18:57,
09/25 18:57
→
09/25 18:58,
09/25 18:58
推
09/25 19:11,
09/25 19:11
推
09/25 19:37,
09/25 19:37
→
09/25 19:37,
09/25 19:37
推
09/25 22:53,
09/25 22:53
推
09/26 00:38,
09/26 00:38
→
09/26 00:39,
09/26 00:39
推
09/26 07:32,
09/26 07:32
推
09/26 09:48,
09/26 09:48
推
09/26 11:47,
09/26 11:47
→
09/26 11:47,
09/26 11:47
→
09/26 11:48,
09/26 11:48
推
09/26 12:01,
09/26 12:01
→
09/26 12:02,
09/26 12:02
推
09/26 12:05,
09/26 12:05
推
09/26 12:59,
09/26 12:59
推
09/26 19:09,
09/26 19:09
→
09/26 19:09,
09/26 19:09
推
09/26 20:23,
09/26 20:23
推
09/27 02:40,
09/27 02:40
推
09/27 17:37,
09/27 17:37
推
09/28 23:31,
09/28 23:31
推
10/01 18:58,
10/01 18:58
→
10/01 18:58,
10/01 18:58
→
10/01 19:00,
10/01 19:00
→
10/01 19:01,
10/01 19:01
推
10/02 15:53,
10/02 15:53
※ AE2001:轉錄至看板 NTUT_MMRE86 10/05 01:05
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.209.219
推
10/15 21:00, , 1F
10/15 21:00, 1F
推
10/15 21:08, , 2F
10/15 21:08, 2F
推
10/15 23:05, , 3F
10/15 23:05, 3F
推
10/15 23:22, , 4F
10/15 23:22, 4F
推
10/15 23:24, , 5F
10/15 23:24, 5F
推
10/16 11:44, , 6F
10/16 11:44, 6F
推
07/01 15:08, , 7F
07/01 15:08, 7F
推
07/22 16:53, , 8F
07/22 16:53, 8F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-1
12