2011-03-06 93 views
18

我有興趣在一些新技術下開發,我正在考慮嘗試CUDA。現在......他們的文檔技術性太強,不能提供我正在尋找的答案。另外,我想聽聽那些對CUDA有過一些經驗的人的回答。什麼是CUDA?它是爲了什麼?有什麼好處?以及如何開始?

基本上我的問題是那些在標題:

究竟什麼是CUDA? (是框架還是API?什麼?)

這是什麼? (有沒有比GPU編程更多的東西?)

這是什麼感覺?

對CUDA進行編程而不是編程到CPU有什麼好處?

什麼是開始使用CUDA編程的好地方?

回答

22

CUDA彙集了幾件事情:

  • 大規模並行硬件設計運行的通用(非圖形)的代碼,有這樣做相應的驅動程序。
  • 一種基於C編程所述硬件的編程語言,以及其他編程語言可用作目標的彙編語言。
  • 軟件開發工具包,包括庫,各種調試,分析和編譯工具,以及允許CPU端編程語言調用GPU端代碼的綁定。

CUDA的重點在於編寫可在兼容的大規模並行SIMD架構上運行的代碼:這包括幾種GPU類型以及非GPU硬件,如nVidia Tesla。大規模並行硬件每秒可以運行比CPU多得多的操作,財務成本相當類似,在允許的情況下,性能提高50 ×或更高。

CUDA比早期方法的好處之一是可以使用通用語言,而不必使用像素和頂點着色器來模擬通用計算機。該語言基於C語言,並增加了一些額外的關鍵字和概念,這使得非GPU程序員很容易找到。這也標誌着nVidia願意在他們的硬件上支持通用並行化:現在聽起來不像是「剽竊GPU」,更像是「使用供應商支持的技術」,這使得它在非技術性利益相關者面前更容易採用。

要開始使用CUDA,下載SDK,閱讀手冊(嚴重的是,它不是複雜,如果你已經知道C)和購買CUDA兼容的硬件(你可以使用仿真器在第一,但性能這是最好的一點,如果你真的可以嘗試你的代碼更好)

+8

不要忘記,CUDA不能讓每個程序/算法都受益:CPU能夠以相對較小的數量執行復雜/不同的操作(即<10個線程/進程),而GPU的全部功能可以在大量線程/數據點(即> 10.000)上執行簡單/相同的操作時釋放。 這就是爲什麼它在例如視頻解碼/編碼:對於大量像素(在720p中幾乎爲一百萬),這些操作是相同的簡單操作。 – dtech 2011-03-06 17:00:50

+0

@dtech:絕對。 – 2011-03-06 18:24:03

1

(聲明:我只使用了CUDA在2008年一學期的項目,這樣的事情可能從那時起已經改變了。)CUDA是一個用於創建可在NVIDIA GPU上運行的程序的開發工具鏈,以及一個API用於從CPU控制這些程序。

GPU編程與CPU編程的好處在於,對於一​​些高度可並行化的問題,您可以獲得大量的加速(大約快兩個數量級)。但是,許多問題難以或不可能以適合於並行化的方式進行制定。

從某種意義上說,CUDA非常簡單,因爲您可以使用常規C來創建程序。但是,爲了取得良好的性能,必須考慮很多事情,包括許多Tesla GPU架構的低級細節。

相關問題