CUDA軟硬件環(huán)境簡(jiǎn)介
CUDA是用于GPU計(jì)算的開(kāi)發(fā)環(huán)境,它是一個(gè)全新的軟硬件架構(gòu),可以將GPU視為一個(gè)并行數(shù)據(jù)計(jì)算的設(shè)備,對(duì)所進(jìn)行的計(jì)算進(jìn)行分配和管理。在CUDA的架構(gòu)中,這些計(jì)算不再像過(guò)去所謂的GPGPU架構(gòu)那樣必須將計(jì)算映射到圖形API(OpenGL和Direct 3D)中,因此對(duì)于開(kāi)發(fā)者來(lái)說(shuō),CUDA的開(kāi)發(fā)門(mén)檻大大降低了。CUDA的GPU編程語(yǔ)言基于標(biāo)準(zhǔn)的C語(yǔ)言,因此任何有C語(yǔ)言基礎(chǔ)的用戶都很容易地開(kāi)發(fā)CUDA的應(yīng)用程序。
CUDA支持的GPU
CUDA支持的GPU (CUDA-enabled GPU)包含GeForce、Quadro和Tesla三個(gè)系列。CUDA-enabled GPU的產(chǎn)品線涵蓋了從筆記本電腦到高性能多GPU的系統(tǒng)中。CUDA-enabled GPU支持并行數(shù)據(jù)高速緩沖(Parallel Data Cache)和線程執(zhí)行管理器(Parallel Data Cache),每個(gè)不同的GPU具備8-128個(gè)Stream Processor,具備強(qiáng)大的并行數(shù)據(jù)計(jì)算能力。迄今為止CUDA-enabled GPU詳細(xì)的列表如下:
GeForce是NVIDIA公司面向消費(fèi)市場(chǎng)的GPU產(chǎn)品;
Quadro是面向?qū)I(yè)圖形市場(chǎng)的GPU產(chǎn)品;
而Tesla則是專門(mén)面向GPU計(jì)算的產(chǎn)品,它不具備圖形輸出的功能,因此不能作為圖形卡來(lái)使用。
這三個(gè)產(chǎn)品面向不同的應(yīng)用領(lǐng)域,因此建議在開(kāi)發(fā)和部署CUDA應(yīng)用的時(shí)候需要考慮到產(chǎn)品的應(yīng)用決定采用不同的GPU。NVIDIA的CUDA-enabled GPU具有一個(gè)完整的產(chǎn)品線,各種用戶都可以從中選擇到合適自己的產(chǎn)品。對(duì)于有高密度計(jì)算能力需求的用戶來(lái)說(shuō),Quadro和Tesla則是必須的選擇。諸如Quadro Plex 1000 Model S4和Tesla S870在一個(gè)1U高度的標(biāo)準(zhǔn)服務(wù)器機(jī)架機(jī)箱內(nèi)裝備了四個(gè)GPU,每個(gè)GPU具備128個(gè)stream processor以及1.5GB的存儲(chǔ)器,每個(gè)1U裝置總共具備512個(gè)stream processor和6GB存儲(chǔ)器,非常適合于有高密度、大規(guī)模數(shù)據(jù)計(jì)算需求的用戶。CUDA-enabled GPU的家族還在不斷地?cái)U(kuò)大之中,隨著NVIDIA新一代GPU的發(fā)布,更多的產(chǎn)品也將加入到這個(gè)行列中來(lái)。
CUDA軟件環(huán)境
CUDA的架構(gòu)
如圖所示,在CUDA的軟件層面,NVIDIA C編譯器是其中的核心。CUDA程序是GPU和CPU的混合代碼,它首先由NVIDIA C編譯器進(jìn)行編譯。經(jīng)過(guò)編譯后,GPU和CPU的代碼將被分離,GPU代碼被編譯成GPU計(jì)算的機(jī)器碼,而CPU的C代碼輸出由標(biāo)準(zhǔn)的C編譯器進(jìn)行編譯。因此一個(gè)完整的CUDA軟件開(kāi)發(fā)環(huán)境還需要有一個(gè)面向CPU的C編譯器。CUDA可以支持多種運(yùn)行在Windows XP和Linux操作系統(tǒng)下的C開(kāi)發(fā)系統(tǒng)諸如Microsoft Visual C++等。右圖是NVIDIA C編譯器結(jié)構(gòu)。
其中,EDG將CPU和GPU的代碼分離;Open64生成GPU PTX (Parallel Thread eXecution)匯編碼。CUDA運(yùn)行需要CUDA runtime driver的支持,而Profiler則可以提供GPU和CPU kernel調(diào)用和內(nèi)存拷貝的時(shí)序分析,從而對(duì)性能進(jìn)行評(píng)估并且發(fā)現(xiàn)潛在的性能上的問(wèn)題。
除了編譯器外,NVIDIA提供了一些非常實(shí)用的函數(shù)庫(kù)。目前有兩個(gè)數(shù)字計(jì)算庫(kù)包含在已經(jīng)發(fā)布的軟件包里面,分別是CUDA FFT和CUDA BLAS子程序庫(kù)。CUDA FFT是快速傅立葉變換(Fast Fourier Transform, FFT)的子程序庫(kù),快速傅立葉變換是信號(hào)處理之類應(yīng)用的基本算法。BLAS是基本線性代數(shù)的子程序庫(kù),提供了高效率的線性代數(shù)計(jì)算子程序。CUDA FFT和BLAS都是針對(duì)GPU高度優(yōu)化的高性能數(shù)學(xué)函數(shù)庫(kù),在CUDA程序中可以方便調(diào)用,節(jié)省大量的代碼編寫(xiě)時(shí)間。
CUDA所有軟件包都可以從NVIDIA公司的網(wǎng)站上免費(fèi)下載。NVIDIA建立了一個(gè)專門(mén)針對(duì)CUDA的名為CUDA Zone社區(qū),網(wǎng)址是 http://www.nvidia.com/object/cuda_home.html。它包含各種程序、文檔的下載,并且有幾個(gè)針對(duì)開(kāi)發(fā)者的論壇,里面有專人為各位開(kāi)發(fā)者進(jìn)行服務(wù),解答各種疑問(wèn)。今后中文化的CUDA Zone也將開(kāi)通,可以提供中文的CUDA資料下載服務(wù)并且直接使用中文對(duì)開(kāi)發(fā)者進(jìn)行服務(wù)。 #p#page_title#e#
要使用CUDA進(jìn)行GPU計(jì)算的開(kāi)發(fā)工作,需要下載相應(yīng)的軟件和編程指南。所有CUDA相關(guān)的軟件都包含在兩個(gè)軟件包中,分別是:
● CUDA Toolkit
CUDA Toolkit是CUDA的核心軟件包,它包含有:編譯器 (NVCC C編譯器)、CUDA FFT和BLAS庫(kù)、Profiler(分析器)、Debugger、CUDA runtime driver以及編程的手冊(cè)等。目前CUDA的版本是1.1,支持Linux和Windows XP。在C語(yǔ)言開(kāi)發(fā)工具方面,支持Microsoft Visual C++ 7.1和8.0。未來(lái)的CUDA版本將會(huì)支持Vista、新一代的C語(yǔ)言開(kāi)發(fā)工具以及支持雙精度。
● CUDA SDK
CUDA SDK提供了許多的CUDA實(shí)例,這些實(shí)例包含有源代碼,因此開(kāi)發(fā)者可以從這些事例中獲得CUDA編程的經(jīng)驗(yàn),而且這些實(shí)例的代碼也可以直接用于程序的開(kāi)發(fā)中。SDK里面的實(shí)例涵蓋了CUDA應(yīng)用的許多方面,在源代碼中有詳細(xì)的注釋,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是很有用的參考資料。