大規(guī)模并行計算一定會成為趨勢
但是,隨著制造工藝技術(shù)的制約以及CPU架構(gòu)本身設(shè)計目標(biāo)的局限,這種時鐘頻率的提升很快就碰到了壁壘。從2001年至2003年,Pentium 4處理器的時鐘頻率從最初的1.5GHz提升到了3GHz。然而從2003年到2005年,整整2年的時間里,處理器的時鐘頻率提升的速度驟然放緩,只是從3GHz增加到3.8GHz。處理器的速度增長宛若已經(jīng)到了強弩之末。
盡管如此,Intel等處理器廠商仍然不肯放棄。他們充分的優(yōu)化了處理器的架構(gòu),使之可以運行在更高的頻率上,Prescott核心就是這種造神運動的產(chǎn)物。不過Intel所面對的問題已不僅僅是工業(yè)制造技術(shù)的問題,而是最簡單最基本的物理定律的壁壘,關(guān)于摩爾定律從此失效的言論也甚囂塵上。
GPU計算能力的使用,以及GPU在通用計算領(lǐng)域表現(xiàn)出來的能力,注定會成為芯片計算歷史的拐點,通用GPU仿佛成了天將降大任的角色。在GPGPU一路高歌猛進的過程作,NVIDIA公司憑借其cuda架構(gòu),站到了這個歷史舞臺上。
Cuda能否改變企業(yè)計算的格局?CUDA程序究竟如何編寫?CUDA架構(gòu)是怎樣的?……帶著對cuda架構(gòu)的種種疑問,IT168技術(shù)開發(fā)頻道記者專訪了NVIDIA公司亞太區(qū)技術(shù)市場經(jīng)理鄧培智先生。
Cuda的最終目的是簡化GPU計算的編程
CUDA的根本目的就是簡化GPU計算的編程,使得人們更為快捷地開發(fā)基于GPU計算的應(yīng)用。 鄧培智談到,歷史上來看,GPU從計算角度來說,性能提升比CPU性能提升快很多。GPU計算能力這么強,除了做圖形處理之外,很多人還打算利用GPU強有力的計算能力進行其他應(yīng)用,就是通用計算。盡管傳統(tǒng)意義上的通用用途的GPU(GPGPU)能夠參與通用計算和處理,但使用GPU計算很麻煩,過去的GPU完全是為圖形進行設(shè)計的,它是一個非常專用的處理器,你要使用GPU 來做計算的話,你需要透過圖形API進行,通過這種圖形的API來訪問GPU計算核心,你必須要把你的計算所需要的數(shù)據(jù),通過API假設(shè)這種計算是3D的計算,然后你要走過一遍圖形處理過程,才能得到計算結(jié)果。第一,編程非常復(fù)雜,第二,效率也不會達到很高。因為中間必須要走過渲染的過程。
“但是對于真正需要并行計算的人,比如說科學(xué)家,不可能讓他們再學(xué)習(xí)圖形編程的技術(shù),普通開發(fā)者大部分也沒有圖形編程的經(jīng)驗。在這種情況下,NVIDIA認(rèn)為可以把并行計算和圖形結(jié)合起來,所以就催生和開發(fā)了CUDA。”
據(jù)了解,CUDA的項目和NVIDIA的GeForce 8系列架構(gòu)的開發(fā)時間差不多。NVIDIA GeForce8系列是花了4年多時間開發(fā),CUDA也是那個時候開發(fā)的。NVIDIA GeForce 8 GPU開發(fā)的時候就考慮到了圖形和并行計算兩方面的需求。所以NVIDIA GeForce 8800系列發(fā)布的時候就宣布了CUDA,這是一種全新的GPU計算開發(fā)環(huán)境。
CUDA對于行業(yè)的價值
低成本地?fù)碛懈咝阅芊?wù)器
鄧培智談?wù)J為,cuda相對于傳統(tǒng)的服務(wù)器集群以及超級計算機在性價比、占地空間、功耗等方面的優(yōu)勢非常明顯。CUDA對于行業(yè)的價值,通過CUDA和支持CUDA GPU,兩者結(jié)合在一起,所有的廠商很容易利用GPU強大的計算能力做各種各樣的并行計算工作,這就是最大的價值。這一切使得每個人都可以低成本的擁有自己的桌面超級計算機成為可能,而不是大家來共享一臺大型的超級計算機。正如NVIDIA Tesla GPU 計算事業(yè)部高級產(chǎn)品經(jīng)理Sumit Gupta所言,這不是簡單的芯片的性能提升,而是帶來了一種全新的、具有革命性的計算模式。
如何理解CUDA軟硬件架構(gòu)
鄧培智: CUDA是專門針對GPU來進行編程的平臺,它最大的特點是,CUDA如果在GPU計算方面來說,是所謂的異構(gòu)計算系統(tǒng)。它和CPU有很大的不同。CPU我們只是針對一個處理器編程,CUDA是針對GPU計算得的,但是它包含GPU和CPU兩部分的代碼。順序計算和一些數(shù)據(jù)的管理等等代碼在CPU上運行,而核心的并行計算部分在GPU上運行。在編輯的時候編譯器會把CPU代碼和GPU代碼分開,GPU代碼會被編譯成成GPU的目標(biāo)代碼,CPU代碼還是需要其他的C語言編譯系統(tǒng)來編譯(最新的CUDA版本也支持多核CPU)。這可能是最大的不同。CUDA一定是需要CPU來參與的,我們叫異構(gòu)計算環(huán)節(jié)。所謂異構(gòu)計算,就是CPU和GPU兩個架構(gòu)和指令集都是不一樣的,但是他們共同協(xié)同動作來解決同一個問題。 至于說CUDA和DirectX/OpenGL這些3D API的關(guān)系,對于CUDA來說,是不需要3D API的,但是CUDA可以很容易和3D API配合使用。 #p#page_title#e#
Cuda軟件架構(gòu)圖
鄧培智針對這個CUDA的軟件架構(gòu)圖進行了講解, CUDA提供了兩種不同類型的API接口:一種是高級的API:CUDA運行的API,另一種是低級API:CUDA的驅(qū)動API。
高級的API是在低級API之上所執(zhí)行的,每一個調(diào)用的函數(shù)在運行的時候都可以被驅(qū)動API細(xì)分為若干個基本的指令。
驅(qū)動API結(jié)合了更多的管理功能,它會請求GPU做很多處理工作。但它的好處是更加的靈活,它可以給程序員更多額外的控制。無論如何,這兩種API都可以溝通OpenGL和Direct3D的資源。
CUDA的軟件層,目前CUDA的2.0版提供了兩個標(biāo)準(zhǔn)的數(shù)學(xué)運算庫——CUFFT(離散快速傅立葉變換)和CUBLAS(離散基本線性計算)的實現(xiàn)。這兩個數(shù)學(xué)運算庫所解決的是典型的大規(guī)模的并行計算問題,也是在密集數(shù)據(jù)計算中非常常見的計算類型。開發(fā)人員在開發(fā)庫的基礎(chǔ)上可以快速、方便的建立起自己的計算應(yīng)用。此外,開發(fā)人員也可以在CUDA的技術(shù)基礎(chǔ)上實現(xiàn)出更多的開發(fā)庫。
CUBLAS是一套函數(shù)庫,它是基于模塊化的運行在GPU上的線性計算函數(shù)庫。它支持NVIDIA的GPU的計算資源。該庫在API層次上是能夠“自給自足”,即不必與CUDA直接交互。應(yīng)用程序使用CUBLAS庫的基本模型是在GPU內(nèi)存空間中創(chuàng)建矩陣和矢量對象,使用數(shù)據(jù)填充它們,調(diào)用一定順序的CUBLAS函數(shù),最后把結(jié)果從GPU內(nèi)存上載到主機。要實現(xiàn)這個過程,CUBLAS提供了一些幫助函數(shù),用于在GPU空間中創(chuàng)建和銷毀對象,以及對這些對象寫入和讀出數(shù)據(jù)。
對于CUDA內(nèi)部的線程管理原理,鄧培智也進行了相應(yīng)的介紹。GPU線程是非常輕量的,也就是說的創(chuàng)建和線程的切換,基本不需要系統(tǒng)開銷,線程的創(chuàng)建、撤銷和切換幾乎是立刻的。這個和我們硬件設(shè)計是分不開的。 CPU的程序多線程的創(chuàng)建和注銷有很多代碼。這個和CPU程序的線程不太一樣。比如即使是四核CPU,如果跑非常多線程的話,線程的管理就會成為嚴(yán)重的負(fù)擔(dān)。GPU計算的話里面怕你線程不夠多,你需要上千個甚至上萬個線程才可以把GPU填滿,這是非常大的不同。 所以我們認(rèn)為大規(guī)模的并行計算特別適用于CUDA的這種架構(gòu)。
在硬件方面,包含cuda架構(gòu)的顯卡已經(jīng)有多款產(chǎn)品,傳統(tǒng)的OEM廠商會將Tesla產(chǎn)品整合在他們提供的解決方案中,除此以外,NVIDIA也有自己專門的CUDA計算平臺解決方案,如Telsa S1070 1U機架服務(wù)器,共有4個GPU卡,共960個內(nèi)核,性能達到4萬億次每秒,功耗只有700瓦,而如果要達到相同計算性能,需要一個小服務(wù)器集群才能實現(xiàn),而功耗可能達到幾萬瓦;另一款產(chǎn)品是Telsa C1060,可以用到普通的PC和工作站中,性能是957Gflops,功耗只有160瓦。
目前,適合于并行計算的應(yīng)用已經(jīng)越來越多。據(jù)鄧培智介紹,很多在CPU上面做的應(yīng)用,比如說視頻編碼,它的效率非常低。比如說H.264的視頻編碼,把代碼轉(zhuǎn)移到CUDA上面以后,它的性能比在CPU上快十幾倍,這是非常典型的應(yīng)用。還有很多這方面的應(yīng)用,都可以使用CUDA對它進行加速。這樣對于普通用戶來說,他也可以從CUDA里面得到好處。H264編碼強度很高,一是它的編碼效率很高,你相同的碼率,它可以獲得更好的品質(zhì)。二是它需要更多的計算,在這個情況下,過去要用CPU實現(xiàn)實時H264的編碼是很難的,現(xiàn)在使用CUDA可以加快編碼的過程。像IPOD支持H264的格式,你要把一張DVD轉(zhuǎn)換為這個格式,用CPU來做,需要很多小時,用CUDA來做,半個小時時間就可以把DVD轉(zhuǎn)換完。 另外還有一個就是物理加速,我們使用CUDA,GPU通過PhysX物理引擎對物理效果加速,你除了可以看見比較逼真場景以外,你可以讓場景真正逼真地動起來,戰(zhàn)爭中爆炸的場面,人物的衣服動起來非常逼真,現(xiàn)在這個叫動態(tài)逼真,以前叫靜態(tài)逼真。所謂靜態(tài)逼真就是你游戲中截圖都很逼真,但是動起來就不太像了,顯得比較假。有了物理加速引擎就可以獲得動態(tài)逼真,很多東西動起來都很像,包括水流、煙霧等等,這個需要物理的加速。物理的加速如果僅僅靠CPU來做,是非常難的,使用GPU你可以做大規(guī)模的物理的模擬,在游戲里面讓游戲變得非常栩栩如生。 我們馬上會推出很多支持物理加速的游戲,現(xiàn)在有的游戲已經(jīng)直接用了,我們會有更多的游戲推出來。讓大家感受到這種不一樣的效果。 當(dāng)然還有其他的應(yīng)用,包括圖象方面的應(yīng)用,還有視頻方面的應(yīng)用,還在繼續(xù)開發(fā),我們希望不久以后有很多GPU計算方面的應(yīng)用不斷的開發(fā)出來。 #p#page_title#e#
另外的可能的應(yīng)用還有類似像病毒文件的掃描,因為這個也是非常典型的、非常大的數(shù)據(jù)量,需要很大的處理能力,金融里面也有很多的處理,包括數(shù)據(jù)庫的搜索和數(shù)據(jù)分析,很多在CUDA上面都可以獲得很好的加速效果。
對于許多企業(yè)計算領(lǐng)域,GPU計算甚至超過了傳統(tǒng)的計算機,讓許多原來無法解決的問題現(xiàn)在可以通過GPU計算機來輕松實現(xiàn)。比如,針對新型流行性疾病如非典禽流感等,人們總是希望新藥物研制的時間越短越好;在天氣預(yù)報方面,人們希望預(yù)報的精度和準(zhǔn)確度越高越好;在金融股票價格分析方面,人們在決定買賣股票時總是希望越快越好。GPU計算的出現(xiàn),使得超級計算機在挑戰(zhàn)這些領(lǐng)域極限方面又進了一步。比如,美國國家癌癥研究所通過GPU計算將模擬速度提升了12倍,等待結(jié)果的時間從原來的2個小時縮短到了10分鐘;美國國家大氣研究中心的氣象研究和預(yù)報模型(WRF)盡管僅僅將1%通過CUDA來實現(xiàn),但其總體速度卻提升了20%,節(jié)省了一個星期的分析時間;在評估整個美國期權(quán)市場時,Hanweck原來計劃用價值26.2萬美元的600 CPU集群來處理,而實際采用三臺nvidia Telsa S870后,機架空間節(jié)省了9倍,硬件成本節(jié)省了6倍。這就是GPU加速帶來的魅力!
CUDA編程并不難,難在并行計算本身
很多人認(rèn)為,學(xué)習(xí)CUDA編程很難,其實并不是這樣,鄧培智談到。一個C語言編程者幾乎2天就能學(xué)會簡單的CUDA編程的基本語法和方法,難度還在并行計算本身。比如,我們該如何判斷,哪些應(yīng)用是可以并行化的,該如何切分任務(wù)等等這些并行計算本身的問題。
其實CUDA的語法很簡單,實際上就是一個標(biāo)準(zhǔn)的C語言的擴展,必須有擴展來支持GPU的運行代碼,必須有一些新的函數(shù)等東西。但是如果一個程序員會C語言,會很容易用CUDA編出第一個程序,但是難就難在解決工作中的問題,用CUDA迅速的解決。這個問題不是在于CUDA本身,而是你要把這個問題并行化進行高效處理得問題,可以說這個是并行計算的普遍性的問題。如果要使用別的并行計算方式,這些問題也同樣存在的。 從語言本身來說,CUDA沒有什么特別難的地方。如果你對你所開發(fā)的東西,如果有很深的了解,要轉(zhuǎn)換起來很快,就像PhysX,它原來是是AGEIA開發(fā)的一個物理引擎,我們收購它以后,工程師一個月內(nèi)就可以把軟件移植到CUDA新的平臺上運行起來了,PhysX是個相當(dāng)復(fù)雜的程序,從這個指令轉(zhuǎn)換到一個完全不同的架構(gòu)上,這是需要很大的工作量。這個例子說明什么呢?說明只要你對你的工作有足夠的了解,就可以很快的移植到CUDA架構(gòu)上面來,CUDA還是很容易學(xué)習(xí)的。
鄧培智,“我希望開發(fā)者對CUDA的算法進一步的了解,看能不能把我的計算并行化。這些確實需要技巧,我相信在某些情況下這不是非常容易的事情,需要開發(fā)者去判斷。但有些地方是很容易看,比如說帶有連續(xù)的邏輯性,一步一步來,這個很難進行大規(guī)模的并行化。但是有些地方很容易并行化,因為需要很多數(shù)據(jù)可以并行來處理,也沒有太多的數(shù)據(jù)相關(guān)情況。但是很多的情況都是有一定難度,這個需要開發(fā)者掌握一些技巧。CUDA入門很容易,但是進去對各種問題進行高效率求解,就需要有很多技巧。 這方面我了解到的國內(nèi)的情況來看,對并行編程特別熟悉,或者特別有經(jīng)驗的開發(fā)者總的數(shù)量不見得是特別多。當(dāng)然這跟國內(nèi)大部分人的開發(fā)環(huán)境有關(guān)系。這個和過去大家很多人可能沒有機會用到常規(guī)的大規(guī)模并行運算的計算機(比如說巨型機,它也是幾千的GPU)有關(guān),大多數(shù)人接觸到的是PC機。在PC機上開發(fā),是和并行計算開發(fā)的思維方式完全不一樣的。我覺得這個需要去培養(yǎng)并行的思維方式,和并行編程的習(xí)慣,如果編程人員對這方面的了解和經(jīng)驗多了,CUDA編程所帶來的回報是非常大的,這也是真正對并行編程的人有經(jīng)驗的那些用戶往往對CUDA報有極大的信心的原因。歸根結(jié)底,很多問題其實都是并行編程本身的問題,而不是CUDA的問題。” #p#page_title#e#
并行計算一定會成為趨勢 CPU和GPU會長期共存 多核的優(yōu)勢值得懷疑
關(guān)于目前流行于業(yè)界的一些爭論和觀點,鄧先生也給出了自己的見解。從效率和成本兩方面看,并行計算一定會成為趨勢,會成為下一代應(yīng)用開發(fā)人員的一種思維方式。
鄧培智說,“對于NVIDIA來說,或者對于業(yè)界來說,我們看到這種趨勢,大家認(rèn)識到,在PC的平臺上,或者在個人計算平臺上,需要有更強的并行計算能力,需要GPU來承擔(dān)更多的工作,這是一種很明顯的趨勢。很多公司都已經(jīng)認(rèn)識到這種趨勢。比如說蘋果公司,蘋果是所有公司里面最注重個人體驗的一家公司,這個每個人都承認(rèn)。他們就認(rèn)為GPU將會在在個人體驗起到最重要的作用。他們非常重視GPU的計算資源。GPU的計算資源非常高,你不充分用起來,確實是很大的浪費。”
關(guān)于CPU和GPU之爭的問題,鄧培智再次強調(diào),這2種計算模式一定會長期存在。這是由他們的設(shè)計目前和主要任務(wù)所決定的,一方取代另一方,短期內(nèi)都是不大可能的。
鄧培智介紹道,現(xiàn)在的CPU最重要的設(shè)計原則其實是要能更快的執(zhí)行各種指令,現(xiàn)在很多程序的結(jié)構(gòu)設(shè)計非常復(fù)雜,這些指令有非常復(fù)雜的邏輯,分支、條件的轉(zhuǎn)移等很多,你要非常高效的來執(zhí)行,你需要設(shè)立很大的緩存,你還需要在指令執(zhí)行上做很多的工作,比如說需要很大的指令緩沖池,對指令進行分析,需要亂序執(zhí)行,把順序打亂以后,沒有數(shù)據(jù)或者存儲相關(guān)的先執(zhí)行,有相關(guān)的后執(zhí)行等等,這就導(dǎo)致每個CPU的core很大,其中真正負(fù)責(zé)計算的占的面積是很小的,大部分晶體管消耗在指令執(zhí)行環(huán)節(jié),計算方面能力相對就弱些。要高效運行現(xiàn)有的很多程序,這樣的設(shè)計也是必須的。而GPU的核心就是計算,運行計算,我們的GPU有很多個核,128甚至240核,這么高的并行度就是要盡可能做到計算吞吐量足夠得大,但是GPU的每個核不可能作得像CPU的核這么復(fù)雜。這兩個設(shè)計理念就有很大的區(qū)別。我不相信把這兩個很快的統(tǒng)一。因為從架構(gòu)設(shè)計的目標(biāo)來看,就是有很大的矛盾。在現(xiàn)有的工藝條件下你很難一個架構(gòu)兩邊都做好。
針對高性能應(yīng)用是選擇多核方式還是GPU并行計算的方式的問題,鄧培智認(rèn)為目前CPU多核的優(yōu)勢是值得懷疑的,而GPU帶來的優(yōu)勢會立竿見影。
鄧培智:“ 但是從某種意義上來說,你要看你的應(yīng)用是什么?說老實話,多核從用戶應(yīng)用來講,優(yōu)勢體現(xiàn)在哪里呢?不管是在游戲,還是在瀏覽,或者做其他方面,四核和雙核比起來,沒有特別明顯的優(yōu)勢體現(xiàn)出來。比如說你有一個四核,你可以自己想象一下,哪些應(yīng)用程序真正能夠充分應(yīng)用到四核功能,實際上是很少的。對于GPU來說,這個是不太一樣,GPU除了做圖形處理,還可以做其他方面的處理,真正四核應(yīng)用有優(yōu)勢的地方,往往也是使用GPU來做更具效率的地方,比如說視頻的編碼,四核比雙核塊,或者是圖形渲染四核相比雙核可以提高很高的性能,雷外還有像物理加速,剛才我說的游戲里面的物理加速,四核比雙核快,但是在所有這些領(lǐng)域里面如果使用GPU的話,會比四核快很多倍!”
我們都知道,未來的IT領(lǐng)域肯定是并行計算的天下。無論是硬件、軟件都會朝著這個方向發(fā)展,這是業(yè)內(nèi)技術(shù)的大趨勢。盡管如此, NVIDIA仍有諸多機遇和挑戰(zhàn)。雖然在技術(shù)方面CUDA有許多先天的優(yōu)勢,但是想要說服系統(tǒng)平臺開發(fā)商,和習(xí)慣了傳統(tǒng)編程思維習(xí)慣的,崇尚兼容性,穩(wěn)定性為首要素的軟件開發(fā)人員來支持CUDA也不是一件容易的事兒。
在人類計算歷史的長河中,各種新技術(shù)肯定會風(fēng)起云涌,你方唱罷我登場,NVIDIA的CUDA架構(gòu)和技術(shù),已經(jīng)被義無反顧地推到了歷史的舞臺上,至于它究竟能夠走多遠(yuǎn),是否能夠上演更精彩的故事,也許一切只有等待時間的檢驗。