【IT168 專稿】一個大任務通常可能被分解成許多可以一起處理的小任務,以便創建一個解決方案,這和粉刷房子的道理是一樣的,在粉刷之前,假設你需要買5公升油漆和5把刷子,你可以自己一個人干完采購和粉刷的活,也可以請朋友或職業粉刷工人幫忙。
▲圖 開始使用CUDA C
你可能想請人幫忙,為了節約時間,你出去購買油漆,另一個人去買刷子,然后你在4個人的幫助下,每人刷一面墻,這樣并行進行,到任務完成時,你算一下,應該節省了大量的時間。
這個方法對計算機也適用,假設你想添加兩個向量v(x,y,z)和u(x,y,z),這里v=(1,2,3),u=(4,5,6),那么v+u=(1,2,3)+(4,5,6)=(1+4,2+5,3+6)=(5,7,9),你自己可以算一下,一次計算一個,但正如你可能看到的,這個問題可以分解成多個更小的問題,你可以讓一個“人”將x分向量一起加起來,另一個“人”將y分向量一起加起來,第三個“人”將z分向量一起加起來,如下表所示:
表中的每個人所有的工作都是一樣的:a+b=c,但每個人使用的數字不一樣,結果也不一樣。
這并不是什么新概念,并行計算已經存在多年,PC使用多個CPU并行處理任務,提高不同應用程序的執行速度,你可以將上面提到的“人”看作一個進程或一個線程,計算機可以將每個進程分配給不同的處理器,接收到任務的所有處理器并行執行一個任務(計算)。
現在,大多數計算機擁有多顆可以處理多任務的處理器,大型應用程序使用計算機上的可用資源運行可以獲得更好的性能,但如果應用程序需要增加功能會怎么樣呢?你應該增加處理器,還是以某種方式升級系統?這取決于你應用程序的需求和采用的解決方案,其中一個可行的解決方案是使用GPU。
GPU是什么?GPU是圖形處理單元(Graphics Processing Unit)的縮寫,它處理所有桌面上或游戲中的圖形,分擔一些CPU負載,在游戲中,CPU要執行人工智能計算和沖突檢測,任務非常繁重,因此任何幫助都是歡迎的,GPU本身采用了良好的并行架構,使算術運算和計算真正有效,它是CPU的好朋友。
▲圖 CPU+GPU,讓程序運行更高效
本文的目的是幫助你開始使用CUDA C語言在GPU上實現并行計算,CUDA C由nVidia創建,它是一種與C類似的編程語言,但它是專門為創建使用GPU執行并行計算的應用程序設計的,與之類似的還有OpenCL和DirectCompute(DirectX 11),但CUDA C是我懂得的唯一語言,因此本系列文章就選擇了它。它們都基于相同的原則,因此你任意選擇一種學習都可以。
先決條件
在開始寫代碼之前,我們先啟動計算機,把CUDA運行起來先!你需要一個新的啟用CUDA的GPU(2007年以后,帶有256MB顯存的應該都可以,如果你不確定,請移步到www.nvidia.com/cuda檢查一下)。我使用的是Nvidia Geforce 480GTX,但最新的500系列看起來更好。
重要:確定也安裝了最新的驅動!!
安裝
在下載頁面,找到CUDA工具包,根據你平臺的實際情況選擇下載32位或64位,下載完畢后,安裝它。
可選步驟,但真的會給你帶來方便:下載完軟件后,再從CUDA工具包頁面下載并安裝GPU計算SDK代碼示例。
▲ 圖 安裝GPU計算SDK
GPU計算SDK帶有許多優秀的代碼示例和文檔,它們可以幫助你提高GPU計算技能。
CUDA工具包安裝好后,你就可以使用你熟悉的文本編輯器編寫CUDA C應用程序了,我使用的是記事本,如果要編譯應用程序,你可以使用Visual Studio 2008命令提示符,或nvcc.exe編譯。
▲圖 Visual Studio 2008命令提示符
▲圖 nvcc.exe
測試安裝是否成功
讓我們嘗試一下吧,一個真正超級簡單的CUDA應用程序,看起來和其它C代碼沒什么差別:
#include
int main( void )
{
printf( “Hello, World!” );
return 0;
}
這段代碼可能會給你帶來驚喜,實際上,你可以使用CUDA編寫任何C應用程序,當我們開始決定在CPU上執行什么功能,在GPU上執行什么功能時,真正的奇跡發生了。
在你熟悉的文本編輯器中敲入上面的代碼,然后將其保存為TestCUDA.cu。
接下來,我們開始編譯和生成我們的應用程序,仍然是在控制臺窗口,在你保存TestCUDA.cu相同的路徑下,敲入下面的命令:
nvcc –o test.exe TestCUDA.cu
按下回車鍵,將創建一個test.exe可執行文件。
▲圖 創建test.exe文件
現在如果你敲入test.exe,你的第一個CUDA C應用程序將會運行,并在屏幕上輸出“Hello,World”,如下圖所示:
▲圖 運行test.exe
如果你在編譯時遇到了問題,拷貝錯誤消息,在搜索引擎中搜索一下,可以獲得大部分常見失誤和錯誤的解決辦法,祝你好運!(如果你下載的是64位CUDA工具包,試試將其卸載,然后換為32位版本測試一下)