[分享] CUDA 程式設計(1) -- 簡介

看板C_and_CPP (C/C++)作者 (咖啡裡的海洋藍)時間16年前 (2008/10/15 20:58), 編輯推噓8(800)
留言8則, 8人參與, 最新討論串1/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,
PUSH PUSH!!
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,
可以請問是哪間學校在做的cuda研究嗎?
09/25 11:07

09/25 12:05,
目前nVidia的驅動就是CUDA complier出來的嗎?
09/25 12:05

09/25 12:08,
縮起來比較方便 http://0rz.tw/314QO
09/25 12:08

09/25 12:54,
這個可以拿來做專題喔
09/25 12:54

09/25 13:09,
看板長知識
09/25 13:09

09/25 13:18,
CUDA寫的程式歸CUDA,Dirver歸Driver,兩個是不一樣
09/25 13:18

09/25 13:18,
光兩個程式定位就不同了...
09/25 13:18

09/25 13:25,
我一直覺的CUDA很酷~
09/25 13:25

09/25 13:33,
看不懂 end推
09/25 13:33

09/25 13:40,
CUDA似乎偏向video & audio的encode 跟底層的driver不同?
09/25 13:40

09/25 13:59,
有好多美國的名校有研究和教學CUDA 台灣哪所學校有阿?
09/25 13:59

09/25 14:03,
好棒喔....好期待第二章!
09/25 14:03

09/25 14:11,
CUDA是在Application Layer做Compile程式,而Dirver
09/25 14:11

09/25 14:12,
是屬於較底層的程式,還要配合硬體位址做設計
09/25 14:12

09/25 15:12,
Phat~~ f大了解的真多 想必是科班出身的吧^^
09/25 15:12

09/25 18:56,
我們專題本來也是打算做CUDA,不過被另一組搶先一步
09/25 18:56

09/25 18:57,
順便提一下,美國UIUC有把完整的CUDA課程講義放上網
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,
我是清大的. 我們是做大學部專題,用CUDA協助EDA運算
09/25 22:53

09/26 00:38,
那個倍數有點誇張 要看是做什麼運算 差很多阿
09/26 00:38

09/26 00:39,
NV網站上那些很大數字的倍數應該都只記kernel時間而已XD
09/26 00:39

09/26 07:32,
UIUC的CUDA講義連結在哪裡啊?
09/26 07:32

09/26 09:48,
請問是清大資工的嗎?
09/26 09:48

09/26 11:47,
台大今年有開課喔,可惜交大似乎沒有 看有沒有老師有興趣可
09/26 11:47

09/26 11:47,
以去找NV贊助(布過NV最近裁員了說..
09/26 11:47

09/26 11:48,
我比較想知道正確在VS2005開發的設定法 "編譯流程"那步驟..
09/26 11:48

09/26 12:01,
那個編譯要用NV的Compiler吧?,可以用其他的編譯器
09/26 12:01

09/26 12:02,
來編譯嗎?
09/26 12:02

09/26 12:05,
是用NV的compiler阿.只是在VS2005開發CUDA程式要做一些設定
09/26 12:05

09/26 12:59,
不知道南開科技大學會不會輔助
09/26 12:59

09/26 19:09,
我是清大電機的,不過是偏資工走向的 XD
09/26 19:09

09/26 19:09,
09/26 19:09

09/26 20:23,
是許雅三老師的學生嗎XD
09/26 20:23

09/27 02:40,
http://0rz.tw/884Lt Visual Studio設定方式
09/27 02:40

09/27 17:37,
不是耶,我是劉靖家老師的大學專題生
09/27 17:37

09/28 23:31,
好期待下一章喔 >///<
09/28 23:31

10/01 18:58,
我一年半前就試過用CUDA解EDA了..50幾倍..不過懶的寫paper..XD
10/01 18:58

10/01 18:58,
如果對cuda有興趣的or有寫過的..大家可以來交流一下啊~~
10/01 18:58

10/01 19:00,
另外要cuda在windows上有5秒的限制 建議用linux會穩很多
10/01 19:00

10/01 19:01,
(尤其是EDA這種simulation很容易超過5秒...)
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
push
07/01 15:08, 7F

07/22 16:53, , 8F
請問CUDA裡面可以寫除了C++原始程式碼以外的程式嗎?
07/22 16:53, 8F
文章代碼(AID): #18zUaEn9 (C_and_CPP)
文章代碼(AID): #18zUaEn9 (C_and_CPP)