CUDA的應(yīng)用與案例詳解
曾經(jīng),筆者的一個從事網(wǎng)頁設(shè)計工作的美工朋友給我講過一個笑話,他們單位為了某大型宣傳活動,準備設(shè)計一個巨型的條幅廣告,而條幅廣告的設(shè)計任務(wù)自然是他們美工的責任。不過,具體負責設(shè)計的不是我的朋友,而是他的幾個同事。
根據(jù)我朋友的敘述,兩位同事,同時為這個巨型的條幅廣告進行設(shè)計,并且配備了單位最好的電腦來進行處理,但是,由于巨型的條幅廣告尺寸過大,僅僅一個簡單的渲染過程就要等待半個小時甚至最長長達一上午的時間。導致朋友的同事一天下來,僅僅能夠進行簡單的幾部操作,而剩下的事情幾乎全部是坐在電腦前等待……
可是,不知道讀者是否能夠想象得到,這些漫長的等待,如果使用擁有強大浮點運算能力的GPU來進行這些運算的話,僅僅需要幾分鐘甚至幾秒鐘,更甚至能夠做到所見即所得的形式,這將會大幅度的提高工作時的工作效率。如果剛才我們所說的筆者朋友的同事能夠擁有這樣的設(shè)備的話,有可能這樣一個巨型的條幅廣告僅僅需要一個上午的時間就能夠全部完成了。
◆CUDA,讓你夢想成真:
CUDA,如今這個名詞越來越多的出現(xiàn)在了我們的眼里。雖然說,目前來看,CUDA可能和我們目前的電腦應(yīng)用并沒有太明顯的關(guān)系,不過相信隨著未來越來越多的軟件支持,CUDA最終將會走入我們每個人的電腦應(yīng)用當中。前面我們說的那個例子,雖然現(xiàn)時來看并不太可能實現(xiàn),不過,我們卻很有可能在下一代的PhotoShop當中看到這一功能付諸實踐。
『通過GPU加速,圖像的渲染和處理將大大加快』
在Photoshop Creative Suite Next上通過GPU、物理加速的支持。Photoshop打開一個2GB、4.42億像素的圖像文件將非常簡單,對圖片進行縮放、旋轉(zhuǎn)也不會存在任何延遲。這就是GPU的強大運算能力的體現(xiàn),而想要實現(xiàn)這一功能,則需要借助于一個接口——CUDA。
◆CUDA是什么?
CUDA(Compute Unified Device Architecture)是一個新的基礎(chǔ)架構(gòu),這個架構(gòu)可以使用GPU來解決商業(yè)、工業(yè)以及科學方面的復(fù)雜計算問題。它是一個完整的GPGPU解決方案,提供了硬件的直接訪問接口,而不必像傳統(tǒng)方式一樣必須依賴圖形API接口來實現(xiàn)GPU的訪問。
CUDA誕生的意義以及CUDA的應(yīng)用領(lǐng)域
◆CUDA誕生的意義:
在傳統(tǒng)的發(fā)展路線中,電腦顯示卡一直在為游戲和3D應(yīng)用程序服務(wù),但是競爭的激烈、技術(shù)的飛速前進客觀的成就了GPU的爆炸式發(fā)展。GPU的運算能力已經(jīng)達到了非常高的水平,甚至在浮點運算能力上已經(jīng)大幅度超越最高級別的處理器產(chǎn)品。
研究表明,從1993年開始,GPU的性能以每年2.8倍的速度增長,這個數(shù)字大大超過了PC其他子系統(tǒng)的發(fā)展速度。一塊工作頻率為3.0GHz的Pentium 4處理器,其晶體管數(shù)目為1.25億個,即使算上SSE指令集的SIMD(單指令并發(fā)多數(shù)據(jù)流,這種情況是浮點吞運算下吐能力的最理想狀況),也只有6GFlops的峰值浮點處理能力,而同期的一塊NV40 GPU就有2.22億個晶體管,峰值浮點運算能力很輕易超過40GFlops,而時間發(fā)展的今日,GPU的峰值浮點運算能力已經(jīng)接近甚至超過了TFlops(1000GFlops)級別,GPU的性能可想而知
除此之外,GPU還擁有自己的獨立子存儲系統(tǒng)——顯存,它擁有比系統(tǒng)主內(nèi)存高得多的帶寬。Intel曾經(jīng)為它的Pentium 4 XE系列處理器所擁有的1066MHz前端總線所提供的8.6GB/S的帶寬倍感自豪,而同期一塊普通的GeForce 6800就擁有20GB/S以上的顯存帶寬。
于是,由這個問題就導致了兩方面的考量:一、GPU擁有如此強大的性能,它能否為其它非游戲類的應(yīng)用程序進行加速,發(fā)揮其性能的優(yōu)勢;二、GPU的浮點運算能力雖然強大,但是其架構(gòu)一直是專有的,無法和目前的x86處理器相比擬,通過什么方法去使用GPU,通過什么方法去讓應(yīng)用程序利用GPU加速。
上述所講就是NVIDIA最新的理論構(gòu)想,那就是讓GPU超越游戲,去拓展更為廣闊的空間。而超越游戲,讓GPU為其它應(yīng)用程序服務(wù),NVIDIA很早就進行了嘗試,比如:NVIDIA早就與Adobe公司合作,為其Adobe Acrobat 8及Adobe Reader 8系列產(chǎn)品提供全新的頁面顯示著色技術(shù),利用GPU來加速PDF格式下的繪圖及顯示功能,除了在效能上有所增進外,還可以利用GPU的可編程特性,進一步加強PDF文件中的2D內(nèi)容展示效果,包括平移、卷動、縮放等,實際上Adobe Reader 8每一項運用到GPU的功能都有著顯著的效能增進。使用者過去避免使用的一些應(yīng)用,例如可進行極精細比例縮放的地圖,現(xiàn)在都可以輕易地顯示。
『早在G80時代NVIDIA就已經(jīng)提出了CUDA的概念』
而想要實現(xiàn)這些功能,必然需要顯卡與應(yīng)用程序之間有一個良好的程序接口,這就是CUDA。其時早在G80時代,NVIDIA就提出了CUDA的概念,只不過因為那時候CUDA還未成型,所以沒有公布,而現(xiàn)在,基于CUDA的應(yīng)用程序越來越多,因此到了GTX200系列芯片的發(fā)布,CUDA才同時正式大范圍的推廣并介紹給普通消費者。
◆CUDA的應(yīng)用范圍:
由于GPU的特點是處理密集型數(shù)據(jù)和并行數(shù)據(jù)計算,因此CUDA非常適合需要大規(guī)模并行計算的領(lǐng)域。目前CUDA除了可以用C語言開發(fā),也已經(jīng)提供FORTRAN的應(yīng)用接口,未來可以預(yù)計CUDA會支持C++、Java、Python等各類語言。雖然現(xiàn)在更多的應(yīng)用在游戲、圖形動畫、科學計算、地質(zhì)、生物、物理模擬等領(lǐng)域,但是由于GPU本身的通用特性和CUDA提供的方便的開發(fā)環(huán)境,我們可以放開思維的束縛,想象幾種可能的應(yīng)用場景:
搜索引擎中的排序、文本分類等相關(guān)算法的應(yīng)用
數(shù)據(jù)庫、數(shù)據(jù)挖掘
數(shù)理統(tǒng)計分析
生物醫(yī)藥工程
導航識別
軍事模擬
無線射頻模擬
圖像語音識別
這些領(lǐng)域內(nèi)的計算都是屬于大規(guī)模的數(shù)據(jù)密集型計算,因此我們完全有理由相信,在CUDA的驅(qū)動下,GPU能夠在這些領(lǐng)域建立一個屬于自己的新時代。
應(yīng)用開發(fā)很簡單,CUDA的軟硬件需求
CUDA是一個全新的軟硬件架構(gòu),可以將GPU視為一個并行數(shù)據(jù)計算的設(shè)備(通俗來講,我們可以把它簡單的看做是一個用途專一的CPU陣列),對所進行的計算進行分配和管理。
并且,CUDA最大的優(yōu)勢在于,無需像傳統(tǒng)GPGPU那樣必須將計算映射到API接口上(也就是顯卡名詞當中常見的OpenGL或者Direct 3D),開發(fā)人員只需要懂得C語言,就可以開始對CUDA的軟件進行開發(fā)了。而對于用戶而言,更加簡單,只要安裝好驅(qū)動程序,然后就可以運行基于CUDA開發(fā)的程序了。
◆硬件需求:
首先,我們來看看對于CUDA的卡發(fā)者和用戶群來說,都需要哪些硬件設(shè)施。CUDA支持的GPU (CUDA-enabled GPU)包含GeForce、Quadro和Tesla三個系列:GeForce是NVIDIA公司面向消費市場的GPU產(chǎn)品;Quadro是面向?qū)I(yè)圖形市場的GPU產(chǎn)品;而Tesla則是專門面向GPU計算的產(chǎn)品,它不具備圖形輸出的功能,因此不能作為圖形卡來使用。這三個產(chǎn)品面向不同的應(yīng)用領(lǐng)域,因此建議在開發(fā)和部署CUDA應(yīng)用的時候需要考慮到產(chǎn)品的應(yīng)用決定采用不同的GPU。
NVIDIA的CUDA-enabled GPU具有一個完整的產(chǎn)品線,各種用戶都可以從中選擇到合適自己的產(chǎn)品。對于有高密度計算能力需求的用戶來說,Quadro和Tesla則是必須的選擇。諸如Quadro Plex 1000 Model S4和Tesla S870在一個1U高度的標準服務(wù)器機架機箱內(nèi)裝備了四個GPU,每個GPU具備128個stream processor以及1.5GB的存儲器,每個1U裝置總共具備512個stream processor和6GB存儲器,非常適合于有高密度、大規(guī)模數(shù)據(jù)計算需求的用戶。CUDA-enabled GPU的家族還在不斷地擴大之中,隨著NVIDIA新一代GPU的發(fā)布,更多的產(chǎn)品也將加入到這個行列中來。 #p#page_title#e#
另外,CUDA對于GPU產(chǎn)品線還涵蓋了從筆記本電腦到高性能多GPU的系統(tǒng)中。也就是說,對于普通用戶來講,我們使用的普通筆記本或者臺式電腦,只要擁有一塊NVIDIA的GeForce 8以上級別的顯卡都能夠支持CUDA。
◆軟件需求:
對于普通的應(yīng)用者來說,對于軟件方面,只要安裝了一款能夠支持CUDA的驅(qū)動程序,就可以了。接下來需要做的就是使用那些能夠支持CUDA的軟件。對于目前來說,能夠支持CUDA的軟件還是有些偏少,不過隨著越來越多的軟件開發(fā)者加入CUDA的行列,日后能夠支持CUDA的軟件將會逐漸完善起來。
而對于CUDA的開發(fā)者來說,開發(fā)CUDA的軟件也非常簡單。開發(fā)者只要會運用C語言編程,就能夠順利的學會CUDA。因為CUDA就是基于C語言為基礎(chǔ)的,CUDA可以支持多種運行在Windows XP和Linux操作系統(tǒng)下的C開發(fā)系統(tǒng)諸如Microsoft Visual C++等。CUDA工具集的核其實心是一個C語言編譯器,CUDA開發(fā)環(huán)境的具體內(nèi)容包括:
· nvcc C語言編譯器
· 適用于GPU(圖形處理器)的CUDA FFT和BLAS庫
· 分析器
· 適用于GPU(圖形處理器)的gdb調(diào)試器(在2008年3月推出alpha版)
· CUDA運行時(CUDA runtime)驅(qū)動程序(目前在標準的NVIDIA GPU驅(qū)動中也提供)
· CUDA編程手冊
除了編譯器外,NVIDIA提供了一些非常實用的函數(shù)庫。目前有兩個數(shù)字計算庫包含在已經(jīng)發(fā)布的軟件包里面,分別是CUDA FFT和CUDA BLAS子程序庫。CUDA FFT是快速傅立葉變換(Fast Fourier Transform, FFT)的子程序庫,快速傅立葉變換是信號處理之類應(yīng)用的基本算法。BLAS是基本線性代數(shù)的子程序庫,提供了高效率的線性代數(shù)計算子程序。CUDA FFT和BLAS都是針對GPU高度優(yōu)化的高性能數(shù)學函數(shù)庫,在CUDA程序中可以方便調(diào)用,節(jié)省大量的代碼編寫時間。
另外,CUDA所有軟件包都可以從NVIDIA公司的網(wǎng)站上免費下載。NVIDIA還專門建立了一個針對CUDA的名為CUDA Zone社區(qū),網(wǎng)址是 http://www.nvidia.com/object/cuda_home.html。它包含各種程序、文檔的下載,并且有幾個針對開發(fā)者的論壇,里面有專人為各位開發(fā)者進行服務(wù),解答各種疑問。
除此以外,NVIDIA提供了開發(fā)指南和大量的第三方應(yīng)用實例,所有這些資料均可以從NVIDIA CUDA Zone里面下載。
為何使用CUDA?CUDA都有哪些優(yōu)勢
首先要說明的一點是,CUDA尤其擅長的是某一方面,而并不是面面俱到。CUDA的開發(fā)是基于NVIDIA GPU平臺的,因此發(fā)揮GPU的并行優(yōu)勢才是最主要的目的。
理論上講,CUDA對于非圖形的計算并沒有什么限制,不過它還是相對比較適合高度并行的計算,畢竟這是它的長處。這里所謂的高度并行的數(shù)量級為上千個,相對于CPU來講,雙核的CPU也許幾個線程就能充滿它整個的計算單元,然而CUDA-enabled GPU卻能夠容納上千個線程(也就是GPU中數(shù)百個SP單元的功力),所以常遇到的高性能計算領(lǐng)域的問題就特別適用于CUDA,而之前通常采用計算機集群的方式來進行計算。
而目前GPU已經(jīng)發(fā)展到十分強大的地步,從GeForce6開始,就能夠支持比較復(fù)雜的控制指令,比如條件轉(zhuǎn)移、分支、循環(huán)和子程序調(diào)用等。而到了新一代的顯卡,GPU的程序控制能力又增強了很多,支持的程序長度也得到了更大的擴展,也就是說利用GPU還是可以寫一些比較復(fù)雜的程序。
當然CUDA也有其弱勢的地方,其還是主要去做那些能夠分成很多個獨立線程的數(shù)值計算。比如說矩陣的乘法計算,矩陣相對應(yīng)的元素的計算是沒有什么聯(lián)系的,可以很多個線程同時送入很多個處理器進行并行處理,這就非常適合于用CUDA來解決。當然并不是所有的事情CUDA都能夠很好地解決,比如像操作系統(tǒng)這樣復(fù)雜的指令和紛繁的分支循環(huán)而又用很少的線程來處理,這顯然就不是CUDA的強項了。高度并行的計算是CUDA的技術(shù)特性之一。 #p#page_title#e#
『GPU的架構(gòu)非常合適進行大規(guī)模的并行計算』
CUDA已經(jīng)應(yīng)用在很多領(lǐng)域,包括在通用計算中的一些GPU加速,游戲中的物理模擬等等,而在科學計算中,CUDA可發(fā)揮的功效就更大了。比如有限元的計算、神經(jīng)元的研究計算、地質(zhì)分析等等科學研究的領(lǐng)域;當然目前GPU計算的應(yīng)用還是處于一個早期的階段,大部分CUDA應(yīng)用都是專業(yè)人員和相關(guān)的程序員在開發(fā),隨著CUDA的廣泛推行,以后會有實際的基于CUDA的程序,更多的程序員能夠加入進來,并且開發(fā)一些可以給大家日常應(yīng)用帶來好處的程序,只要有支持CUDA的GPU就能夠利用到GPU計算的好處。
最后來說明一下某些讀者對于CUDA的誤解,可能有人認為“有了GPU之后CPU就不需要了”,這也是不對的。顯然,GPU和CPU還是做不同的工作的,GPU的計算主要集中在高效率低成本的高性能并行計算,所以事實上在一個系統(tǒng)里面,一個高效的GPU配合一個高效的CPU,整體的效率還是會有明顯提升的。
目前能夠支持CUDA的應(yīng)用軟件介紹(一)在我們了解了CUDA的需求之后,對于本文的絕大多數(shù)讀者來說,他們更想要了解的應(yīng)該就是CUDA對于我們普通用戶究竟是否有實際意義,并且,目前真的又能夠支持CUDA的應(yīng)用程序么?這些程序是否如同前面所描述的那么好?下面我們就先來簡單了解一下目前常見的幾款能夠支持CUDA的應(yīng)用軟件:
◆ Google earth需要3D加速
Google earth是一款3D地圖顯示軟件,它能夠?qū)⒌厍蛏夏骋粎^(qū)域的地貌,以3D圖像的形式展現(xiàn)出來。這款軟件讀者都很熟悉,早期的Google earth從2D起步,但是隨著深入發(fā)展和商業(yè)應(yīng)用,這款軟件也進入了3D化,很顯然,這類軟件將會逐漸成為我們今后生活的必備軟件。
在Google earth的設(shè)置界面,如果你擁有一個
當我們以最高畫質(zhì)量為限查找地圖街景時,帶有GPU的PC系統(tǒng)可以流暢地進行地圖縮放。而同樣的場景、同樣的搜索速度、同樣的處理器,在沒有GPU加速時,運轉(zhuǎn)速度簡直無法忍受,在Fraps顯示的速率上,使用GPU加速和不使用GPU加速情況下,速度落差達到了幾十倍之巨,由此可見,GPU的作用和意義絕不僅限于游戲。
◆ 圖片、視頻都是3D的
Cooliris推出的Piclens插件可以讓圖片搜索變?yōu)?D模式,通過用GPU硬件加速來實現(xiàn)圖片瀏覽。但就是這么一個實用的小插件,沒有GPU也是不行的。鼠標滾輪就能讓所有圖片成為一面幕墻,這么有趣的功能沒有GPU加速可是不行的哦。
瀏覽圖片時GPU加速非常有意義,在使用普通集成顯卡時,這個數(shù)值還不到24fp。當我們使用一塊GeForce 9600GT進行GPU加速時,cooliris滿速率運行可達60fps,但換用集成顯卡時,這個數(shù)值還不到24fps,前后的差距至少達到了2.5倍。
目前能夠支持CUDA的應(yīng)用軟件介紹(二)
◆ 連PDF都需要GPU加速
隨著計算機的發(fā)展,圖形、圖像的顯示成為越來越重要的工作?,F(xiàn)在連閱讀傳統(tǒng)的PDF文件,都離不開GPU的加速了。早在2007年,Adobe就與NVIDIA展開合作,推出了支持GPU加速的PDF版本。
同樣一個容量達到50MB的期刊讀物電子版PDF文件,在使用傳統(tǒng)方式打開時,讀取時間為8秒。而使用GPU硬件加速功能時,打開時間不超過3秒,且在瀏覽時不會有拖沓感,PDF文件也變得流暢異常了。
◆ 圖片瀏覽也向3D邁進—Google Picasa2
Google Picasa2是一款可幫助您在計算機上立即找到、修改和共享所有圖片的軟件。在使用NVIDIA顯卡的電腦上使用Picasa軟件,通過GPU加速,圖片的拖放或文件夾切換,圖片生成的速度都非??臁H绻麚Q用沒有GPU加速的平臺,搜索圖片時生成速度可絕非一時一刻,前后對比,數(shù)倍的差異十分明顯。
◆ PICTOMIO,華麗的3D圖片瀏覽
Pictomio是一個類似于Picasa的圖片瀏覽和管理軟件,它提供了極其華麗3D圖片瀏覽效果。如果PC中具備GPU,那么完全可以利用強大的GPU將瀏覽方式變更為3D模式,無縫縮放、漸變式切換,效果十分驚嘆。但如果沒有GPU,平面的交互效果實在是太過讓人失望了。 #p#page_title#e#
GPU加速詳細實例,Google Earth路線導航
下面,我們以目前不少人非常喜愛的Google Earth來舉例,看看CUDA在Google Earth中能夠起到怎樣的作用。Google Earth是大家非常熟悉的三維地圖軟件。通過它您能看到全世界任何角落的三維地圖(數(shù)據(jù)庫中沒有數(shù)據(jù)的地區(qū)當然除外嘍),清晰得能看到街道上的小汽車!它帶來的視覺震撼是絕無僅有的。
以下是一個很有趣的應(yīng)用例子:由于Google Earth可以提供從某地到某地的一個線路查詢,下面是一個從San Francisco的一個叫1 market street街道到San Francisco的線路指引,Google Earth還提供了三維的經(jīng)過路線播放演示:
『線路是:從右上角到左下角』
『這個綠色標志地方是開始點』
『途中經(jīng)過的兩個拐彎點』
『最終到達終點』
整個從起點到終點都是3D顯示周圍的實物,其中包括聳立的建筑物、街道等等,如果有NVIDIA GPU的圖形加速,可以讓這個過程非常流暢。
實際檢驗GPU能力——視頻編碼:Badaboom
進行視頻編碼的操作我們平時經(jīng)常用到,例如我們要將從網(wǎng)絡(luò)上下載或者從DVD上獲得的視頻文件進行重新的編碼壓縮,才能傳到我們手機、IPOD、iPhone以及PSP中觀看。一般情況下視頻編碼完全是由CPU進行計算處理,CPU性能越強,編碼速度越快。
不過在應(yīng)用CUDA技術(shù)的GeForce GTX280上,我們可以使用GPU的強大性能來進行視頻編碼。經(jīng)過實測,其速度要比CPU編碼超出數(shù)倍。下面讓我們來看一下對比測試。
下面我們先使用平時較為常用的Aimersoft iPhone視頻轉(zhuǎn)換器進行一次視頻轉(zhuǎn)換。視頻源是MPEG2格式的720P的電影片段。目標是壓縮成iPhone可用的640x480分辨率的H.264視頻。
『CPU運算編碼,耗時很長』
Aimersoft iPhone視頻轉(zhuǎn)換器進行視頻編碼完全依賴于CPU運算,在整個轉(zhuǎn)換過程中我們花費了2分39秒。這樣計算下來,如果要轉(zhuǎn)換一部一個半小時的電影大約就要花費129分鐘,等待時間相當長。
下面我們就來看看利用GeForce GTX280 GPU來進行硬件視頻編碼的性能。測試中我們使用了一款名為Badaboom的視頻轉(zhuǎn)換軟件,其目前可以支持NVIDIA的GPU視頻編碼加速。
測試軟件:Badaboom
相關(guān)介紹:Badaboom是一款視頻轉(zhuǎn)換軟件,可以把Mpeg2等格式的視頻轉(zhuǎn)換為ipod或者iPhone這樣的所使用的H.264視頻格式。
『GTX280 GPU運算進行視頻編碼,比CPU耗時縮短6倍』
同樣還是剛才那段視頻,整個過程大約只花費了26秒時間,速度提升了6倍多,速度非???。如果您是iPhone的用戶,我想以后就無需再消耗長時間進行視頻的壓縮了。
實際檢驗GPU能力——科學計算:Folding@Home斯坦福大學的分布式計算系統(tǒng)非常有名,其開發(fā)了一套名為Folding@home的客戶端軟件,所有互聯(lián)網(wǎng)電腦都可以通過這套軟件模擬復(fù)雜的蛋白質(zhì)折疊效應(yīng)科學計算。
什么是Folding@home?
Folding@home是一個研究研究蛋白質(zhì)折疊,誤折,聚合及由此引起的相關(guān)疾病的分布式計算工程。我們使用聯(lián)網(wǎng)式的計算方式和大量的分布式計算能力來模擬蛋白質(zhì)折疊的過程,并指引我們近期對由折疊引起的疾病的一系列研究。(摘自Folding@home中文網(wǎng))
安裝上CUDA版本的Folding@home后,我們現(xiàn)在開啟顯示窗口,可以看到當前計算的即時速度。使用GeForce GTX280時,大約顯示的速度為500多ns/day。而如果使用CPU,速度大概只有4ns/day左右,可以看到GTX280的科學運算能力非常強。
我們進行一次完整的計算來看看GeForce GTX280的計算速度,同時我們還同AMD 四核羿龍CPU以及ATI Radeon HD3870進行的對比。
從速度成績中可以看到GeForce GTX280的領(lǐng)先幅度很大。GPU的強大的性能展現(xiàn)出來,CPU完全落后。