楊棟青 褚寶增
[摘要]傳統(tǒng)的視頻壓縮技術(shù)完全依賴于CPU的工作,占用大量的系統(tǒng)資源。而基于CUDA技術(shù)的視頻壓縮軟件不僅減輕系統(tǒng)負(fù)擔(dān),更大大加快視頻處理速度。
[關(guān)鍵詞]CUDA NVIDIA 視頻壓縮 流處理器
中圖分類號:TP2文獻(xiàn)標(biāo)識碼:A文章編號:1671-7597(2009)0910035-01
一、引言
為了能夠在手機(jī),MP4上播放視頻,進(jìn)行視頻壓縮和轉(zhuǎn)換是必要的操作。而完全依賴CPU進(jìn)行視頻處理還會(huì)造成系統(tǒng)資源的緊張,難以進(jìn)行其他方面的操作。NVIDIA公司推出的CUDA技術(shù)則有效地解決了這一問題,不僅讓視頻壓縮的速度成倍提高,而且還極大地降低了CPU的占用率。
二、CUDA技術(shù)簡介
CUDA(Compute Unified Device Architecture),是一種由NVIDIA推出的通用并行計(jì)算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問題。它包含了CUDA指令集架構(gòu)(ISA)以及GPU內(nèi)部的并行計(jì)算引擎。開發(fā)人員現(xiàn)在可以使用C語言來為CUDA架構(gòu)編寫程序,C語言是應(yīng)用最廣泛的一種高級編程語言。所編寫出的程序于是就可以在支持CUDA的處理器上以超高性能運(yùn)行。將來還會(huì)支持其它語言,包括FORTRAN以及C++。
隨著顯卡的發(fā)展,GPU越來越強(qiáng)大,而且GPU為顯示圖像做了優(yōu)化。在計(jì)算上已經(jīng)超越了通用的CPU。如此強(qiáng)大的芯片如果只是作為顯卡就太浪費(fèi)了,因此NVidia推出CUDA,讓顯卡可以用于圖像計(jì)算以外的目的。
CUDA是用于GPU計(jì)算的開發(fā)環(huán)境,它是一個(gè)全新的軟硬件架構(gòu),可以將GPU視為一個(gè)并行數(shù)據(jù)計(jì)算的設(shè)備,對所進(jìn)行的計(jì)算進(jìn)行分配和管理。在CUDA的架構(gòu)中,這些計(jì)算不再像過去所謂的GPGPU架構(gòu)那樣必須將計(jì)算映射到圖形API(OpenGL和Direct 3D)中,因此對于開發(fā)者來說,CUDA的開發(fā)門檻大大降低了。CUDA的GPU編程語言基于標(biāo)準(zhǔn)的C語言,因此任何有C語言基礎(chǔ)的用戶都很容易地開發(fā)CUDA的應(yīng)用程序。
由于GPU的特點(diǎn)是處理密集型數(shù)據(jù)和并行數(shù)據(jù)計(jì)算,因此CUDA非常適合需要大規(guī)模并行計(jì)算的領(lǐng)域。目前CUDA除了可以用C語言開發(fā),也已經(jīng)提供FORTRAN的應(yīng)用接口,未來可以預(yù)計(jì)CUDA會(huì)支持C++、Java、Python等各類語言??蓮V泛的應(yīng)用在圖形動(dòng)畫、科學(xué)計(jì)算、地質(zhì)、生物、物理模擬等領(lǐng)域。
三、CUDA軟硬件環(huán)境
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ì)算能力。目前只有G80、G92、G94和GT200平臺的NVidia顯卡才能使用CUDA,工具集的核心是一個(gè)C語言編譯器。其中G80中擁有128個(gè)單獨(dú)的ALU,因此非常適合并行計(jì)算,而且數(shù)值計(jì)算的速度遠(yuǎn)遠(yuǎn)優(yōu)于CPU。
在CUDA的軟件層面,NVIDIA C編譯器是其中的核心。CUDA程序是GPU和CPU的混合代碼,它首先由NVIDIA C編譯器進(jìn)行編譯。經(jīng)過編譯后,GPU和CPU的代碼將被分離,GPU代碼被編譯成GPU計(jì)算的機(jī)器碼,而CPU的C代碼輸出由標(biāo)準(zhǔn)的C編譯器進(jìn)行編譯。因此一個(gè)完整的CUDA軟件開發(fā)環(huán)境還需要有一個(gè)面向CPU的C編譯器。CUDA可以支持多種運(yùn)行在Windows XP和Linux操作系統(tǒng)下的C開發(fā)系統(tǒng)諸如Microsoft Visual C++等。右圖是NVIDI
A 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í)序分析,從而對性能進(jìn)行評估并且發(fā)現(xiàn)潛在的性能上的問題。
除了編譯器外,NVIDIA提供了一些非常實(shí)用的函數(shù)庫。目前有兩個(gè)數(shù)字計(jì)算庫包含在已經(jīng)發(fā)布的軟件包里面,分別是CUDA FFT和CUDA BLAS子程序庫。CUDA FFT是快速傅立葉變換(Fast Fourier Transform,FFT)的子程序庫,快速傅立葉變換是信號處理之類應(yīng)用的基本算法。
四、基于CUDA技術(shù)視頻壓縮軟件介紹
由于CUDA技術(shù)出現(xiàn)的時(shí)間不長,目前基于這一技術(shù)的視頻壓縮軟件并不多見,比較知名的CUDA視頻壓縮軟件主要有三款,分別是:Badaboom Media Converter、TMPGEnc 4.0 XPress和PowerDirector。而這三款軟件中又以Badaboom Media Converter最著名,推出的時(shí)間也最早。Badaboom
是一款由NVIDIA和Elemental聯(lián)合推出的消費(fèi)級視頻轉(zhuǎn)碼軟件。軟件操作界面簡約直觀,操作方式簡單易懂,用戶很容易上手。BadaBOOM軟件是NVIDIA
CUDA通用計(jì)算技術(shù)的應(yīng)用,這就意味著它是用C語言編寫的,專為NVIDIA GPU而優(yōu)化,確切地說就是GPU來實(shí)現(xiàn)視頻轉(zhuǎn)換加速。Badaboom利用GPU進(jìn)行大部分轉(zhuǎn)碼工作,因此CPU的占用率很低。BadaBOOM的轉(zhuǎn)碼性能基本和GPU流處理器數(shù)量成線性關(guān)系。即使是入門級的只擁有32個(gè)流處理的Geforce 9500GT顯卡,使用BadaBOOM軟件來進(jìn)行編碼也能夠領(lǐng)先目前最高端的四核處理器數(shù)倍。
在國外一個(gè)專業(yè)網(wǎng)站的測試中,用Badaboom和老牌的使用CPU進(jìn)行編碼的Mainconcept H.264 Encoder軟件進(jìn)行了對比測試。對同一段視頻的轉(zhuǎn)換,Badaboom配合Geforce 9500GT顯卡以接近三倍的速度差距毫無疑問的拿下了勝利,差距相當(dāng)明顯??梢钥隙?如果換上擁有128個(gè)GPU流處理器的Geforce 9800GTX,Badaboom的轉(zhuǎn)換速度還會(huì)成倍提高。在測試中我們還注意到Mainconcept H.264 Encoder的CPU平均占用率達(dá)到了90%,而Badaboom的CPU平均占用率僅為33%??梢奀UDA技術(shù)確實(shí)大大減輕了CPU的負(fù)擔(dān)。
參考文獻(xiàn):
[1]Rob Farber,CUDA了解和使用共享內(nèi)存。西北太平洋國家實(shí)驗(yàn)室,2008.
[2]Rob Farber,CUDA用于大量數(shù)據(jù)的超級計(jì)算。西北太平洋國家實(shí)驗(yàn)室,2008.
[3]鄧培智,CUDA編程模型,NVIDIA,2008.
[4]周洪敏、龔建榮,視頻壓縮編碼的新發(fā)展H.264,南京郵電學(xué)院,2006.