CPU+GPU异构计算完全解析
原文鏈接:http://bj.beareyes.com.cn//2/lib/201106/20/20110620416_1.htm
工欲善其事,必先利其器。有一個(gè)好的計(jì)算工具是必須的!
并行計(jì)算:讓處理的速度變得更快
????? 相對于串行計(jì)算,并行計(jì)算可以劃分成時(shí)間并行和空間并行。時(shí)間并行即流水線技術(shù),空間并行使用多個(gè)處理器執(zhí)行并發(fā)計(jì)算,當(dāng)前研究的主要是空間的并行問題。以程序和算法設(shè)計(jì)人員的角度看,并行計(jì)算又可分為數(shù)據(jù)并行和任務(wù)并行。數(shù)據(jù)并行把大的任務(wù)化解成若干個(gè)相同的子任務(wù),處理起來比任務(wù)并行簡單。
并行計(jì)算,解放不堪重負(fù)的處理器
? 空間上的并行導(dǎo)致兩類并行機(jī)的產(chǎn)生,按照麥克·弗萊因(Michael Flynn)的說法分為單指令流多數(shù)據(jù)流(SIMD)和多指令流多數(shù)據(jù)流(MIMD),而常用的串行機(jī)也稱為單指令流單數(shù)據(jù)流(SISD)。MIMD類的機(jī)器又可分為常見的五類:并行向量處理機(jī)(PVP)、對稱多處理機(jī)(SMP)、大規(guī)模并行處理機(jī)(MPP)、工作站機(jī)群(COW)、分布式共享存儲處理機(jī)(DSM)。
? ? 從自然哲學(xué)層面上來講:任何最為復(fù)雜的事情,都可以被拆分成若干個(gè)小問題去解決。分而治之:這就是當(dāng)今并行計(jì)算的哲學(xué)理論依據(jù)。然而在當(dāng)今的雙路、四路、八路甚至多路處理器系統(tǒng)中,并行計(jì)算的概念早已得到廣泛應(yīng)用。目前業(yè)界最為普及的并行計(jì)算規(guī)范就是OpenMP。
OpenMP:同構(gòu)計(jì)算最為普及的標(biāo)準(zhǔn)
OpenMP(Open Multi-Processing)是由OpenMP Architecture Review Board牽頭提出的,并已被廣泛接受的,用于共享內(nèi)存并行系統(tǒng)的多線程程序設(shè)計(jì)的一套指導(dǎo)性注釋(Compiler Directive)。OpenMP支持的編程語言包括C語言、C++和Fortran;而支持OpenMP的編譯器包括Sun Studio和Intel Compiler,以及開放源碼的GCC和Open64編譯器。OpenMP提供了對并行算法的高層的抽象描述,程序員通過在源代碼中加入專用的pragma來指明自己的意圖,由此編譯器可以自動將程序進(jìn)行并行化,并在必要之處加入同步互斥以及通信。當(dāng)選擇忽略這些pragma,或者編譯器不支持OpenMP時(shí),程序又可退化為通常的程序(一般為串行),代碼仍然可以正常運(yùn)作,只是不能利用多線程來加速程序執(zhí)行。
OpenMP的特色
OpenMP提供的這種對于并行描述的高層抽象降低了并行編程的難度和復(fù)雜度,這樣程序員可以把更多的精力投入到并行算法本身,而非其具體實(shí)現(xiàn)細(xì)節(jié)。對基于數(shù)據(jù)分集的多線程程序設(shè)計(jì),OpenMP是一個(gè)很好的選擇。同時(shí),使用OpenMP也提供了更強(qiáng)的靈活性,可以較容易的適應(yīng)不同的并行系統(tǒng)配置。線程粒度和負(fù)載平衡等是傳統(tǒng)多線程程序設(shè)計(jì)中的難題,但在OpenMP中,OpenMP庫從程序員手中接管了部分這兩方面的工作。
OpenMP的缺點(diǎn)
作為高層抽象,OpenMP并不適合需要復(fù)雜的線程間同步和互斥的場合。OpenMP的另一個(gè)缺點(diǎn)是不能在非共享內(nèi)存系統(tǒng)(如計(jì)算機(jī)集群)上使用。由此如果我們想將不同類型的計(jì)算器、計(jì)算機(jī)聯(lián)和起來,協(xié)同工作。我們就需要使用異構(gòu)計(jì)算技術(shù)。
雙劍豈可合璧:什么是異構(gòu)計(jì)算?
異構(gòu)計(jì)算(Heterogeneous computing)主要是指使用不同類型指令集和體系架構(gòu)的計(jì)算單元組成系統(tǒng)的計(jì)算方式。常見的計(jì)算單元類別包括CPU、GPU等協(xié)處理器、DSP、ASIC、FPGA等。
異構(gòu)計(jì)算近年來得到更多關(guān)注,主要是因?yàn)橥ㄟ^提升CPU時(shí)鐘頻率和內(nèi)核數(shù)量而提高計(jì)算能力的傳統(tǒng)方式遇到了散熱和能耗瓶頸。而與此同時(shí),GPU等專用計(jì)算單元雖然工作頻率較低,具有更多的內(nèi)核數(shù)和并行計(jì)算能力,總體性能-芯片面積比和性能-功耗比都很高,卻遠(yuǎn)遠(yuǎn)沒有得到充分利用。
廣義上,不同計(jì)算平臺的各個(gè)層次上都存在異構(gòu)現(xiàn)象,除硬件層的指令集、互聯(lián)方式、內(nèi)存層次之外,軟件層中應(yīng)用二進(jìn)制接口、API、語言特性底層實(shí)現(xiàn)等的不同,對于上層應(yīng)用和服務(wù)而言,都是異構(gòu)的。
從實(shí)現(xiàn)的角度來說,異構(gòu)計(jì)算就是制定出一系列的軟件與硬件的標(biāo)準(zhǔn),讓不同類型的計(jì)算設(shè)備能夠共享計(jì)算的過程和結(jié)果。同時(shí)不斷優(yōu)化和加速計(jì)算的過程,使其具備更高的計(jì)算效能。
計(jì)算的發(fā)展歷程:從32bit到異構(gòu)計(jì)算(上)
2003年以前,是32bit的時(shí)代。處理器制造廠商,不斷提升制造工藝技術(shù),使用更精細(xì)的制程來制造處理器。同時(shí)也不斷提高處理器的時(shí)脈,如133MHz、166MHz、200MHz、300MHz……最終頻率提升到了3GHz后,就難作寸進(jìn)了。到目前為止我們也未曾見到Intel和AMD發(fā)布高于4GHz主頻的處理器產(chǎn)品。
2003年出現(xiàn)了x86-64,有時(shí)會簡稱為“x64”,是64位微處理器架構(gòu)及其相應(yīng)指令集的一種,也是Intel x86架構(gòu)的延伸產(chǎn)品。“x86-64”1999由AMD設(shè)計(jì),AMD首次公開64位集以擴(kuò)充給IA-32,稱為x86-64(后來改名為AMD64)。其后也為英特爾所采用,現(xiàn)時(shí)英特爾稱之為“Intel 64”,在之前曾使用過Clackamas Technology (CT)、IA-32e及EM64T。外界多使用"x86-64"或"x64"去稱呼此64位架構(gòu),從而保持中立,不偏袒任何廠商。
AMD64代表AMD放棄了跟隨Intel標(biāo)準(zhǔn)的一貫作風(fēng),選擇了像把16位的Intel 8086擴(kuò)充成32位的80386般,去把x86架構(gòu)擴(kuò)充成64位版本,且兼容原有標(biāo)準(zhǔn)。
AMD64架構(gòu)在IA-32上新增了64位暫存器,并兼容早期的16位和32位軟件,可使現(xiàn)有以x86為對象的編譯器容易轉(zhuǎn)為AMD64版本。除此之外,NX bit也是引人注目的特色之一。
不少人認(rèn)為,像DEC Alpha般的64位RISC芯片,最終會取代現(xiàn)有過時(shí)及多變的x86架構(gòu)。但事實(shí)上,為x86系統(tǒng)而設(shè)的應(yīng)用軟件實(shí)在太龐大,成為Alpha不能取代x86的主要原因,AMD64能有效地把x86架構(gòu)移至64位的環(huán)境,并且能兼容原有的x86應(yīng)用程序。
計(jì)算的發(fā)展歷程:從32bit到異構(gòu)計(jì)算(下)
2006年出現(xiàn)了雙核心多核心。多核心,也叫多微處理器核心是將兩個(gè)或更多的獨(dú)立處理器封裝在一起的方案,通常在一個(gè)集成電路(IC)中。雙核心設(shè)備只有兩個(gè)獨(dú)立的微處理器。一般說來,多核心微處理器允許一個(gè)計(jì)算設(shè)備在不需要將多核心包括在獨(dú)立物理封裝時(shí)執(zhí)行某些形式的線程級并發(fā)處理(Thread-Level Parallelism,TLP)這種形式的TLP通常被認(rèn)為是芯片級多處理。在游戲中你必須要使用驅(qū)動程序來利用第二顆核心。
此后處理器制造廠商發(fā)現(xiàn),利用多核心架構(gòu)可以在不提升處理器頻率的情況下,繼續(xù)不斷提升處理器的效能。
2008年通用計(jì)算GPGPU
通用圖形處理器(General-purpose computing on graphics processing units,簡稱GPGPU),是一種利用處理圖形任務(wù)的圖形處理器來計(jì)算原本由中央處理器處理的通用計(jì)算任務(wù)。這些通用計(jì)算常常與圖形處理沒有任何關(guān)系。由于現(xiàn)代圖形處理器強(qiáng)大的并行處理能力和可編程流水線,令流處理器可以處理非圖形數(shù)據(jù)。特別在面對單指令流多數(shù)據(jù)流(SIMD),且數(shù)據(jù)處理的運(yùn)算量遠(yuǎn)大于數(shù)據(jù)調(diào)度和傳輸?shù)男枰獣r(shí),通用圖形處理器在性能上大大超越了傳統(tǒng)的中央處理器應(yīng)用程序。
3D顯示卡的性能從NVIDIA的GeForce256時(shí)代就頗受矚目,時(shí)間到了2008年,顯示卡的計(jì)算能力開始被用在實(shí)際的計(jì)算當(dāng)中。并且其處理的速度也遠(yuǎn)遠(yuǎn)超越了傳統(tǒng)的x86處理器。
2010年CPU+GPU異構(gòu)計(jì)算
對于GPGPU表現(xiàn)出的驚人計(jì)算能力叫人為之折服,但是在顯卡進(jìn)行計(jì)算的同時(shí),處理器處于閑置狀態(tài)。由此處理器廠商也想?yún)⑴c到計(jì)算中來,他們希望CPU和GPU能夠協(xié)同運(yùn)算,完成那些對計(jì)算量有著苛刻要求的應(yīng)用。同時(shí)也希望將計(jì)算機(jī)的處理能力再推上一個(gè)新的高峰。
異構(gòu)計(jì)算要求CPU和GPU協(xié)同運(yùn)算
天河星云:異構(gòu)計(jì)算大顯神威
國際TOP500組織TOP500.org在網(wǎng)站上公布了最新全球超級計(jì)算機(jī)TOP500強(qiáng)排行榜,由國防科學(xué)技術(shù)大學(xué)研制,部署在國家超級計(jì)算天津中心,中國千萬億次超級計(jì)算機(jī)“天河一號”位居第一位,實(shí)測運(yùn)算速度可以達(dá)到每秒2570萬億次。
“天河一號”耗資6億元,連接了上萬個(gè)美國英特爾和Nvidia公司制造的CPU和GPU,屬異構(gòu)混合架構(gòu)。在過去一年里,天河一號進(jìn)行了大升級,目前的配置是14336顆英特爾六核至強(qiáng)X5670 2.93GHz CPU和7168顆Nvidia Tesla M2050 GPU和2048顆自主研發(fā)的八核飛騰FT-1000 CPU。處理內(nèi)核數(shù)突破20萬顆,是去年24576顆的8.25倍。
排名第三的是曙光公司研制的“星云”高性能計(jì)算機(jī),其實(shí)測運(yùn)算速度達(dá)到每秒1270萬億次。petaflop/s,千萬億次計(jì)算單位。星云系統(tǒng)峰值為每秒3000萬億次(3PFlops),實(shí)測Linpack值每秒1271萬億次(1.271PFlops),是中國第一臺、世界第三臺實(shí)測雙精度浮點(diǎn)計(jì)算超千萬億次的超級計(jì)算機(jī)。
星云超級計(jì)算機(jī)采用自主設(shè)計(jì)的HPP體系結(jié)構(gòu),處理器是32nm工藝的六核至強(qiáng)X5650,并且采用了Nvidia Tesla C2050 GPU做協(xié)處理,由4640個(gè)計(jì)算單元組成。它采用了高效異構(gòu)協(xié)同計(jì)算技術(shù),系統(tǒng)包括了9280顆通用CPU和4640顆專用GPGPU組成。計(jì)算網(wǎng)絡(luò)采用了單向40Gbps QDR Infiniband技術(shù),核心存儲采用了自主設(shè)計(jì)的Parastor高速I/O系統(tǒng)。
美國橡樹嶺國家實(shí)驗(yàn)室的“美洲虎”超級計(jì)算機(jī)此前排名第一,在新榜單中,其排名下滑一位。“美洲虎”的實(shí)測運(yùn)算速度可達(dá)每秒1750萬億次。有趣的是中國的兩套系統(tǒng)和東京工業(yè)大學(xué)的系統(tǒng),所使用的都是NVIDIA的GPU通用計(jì)算加速方案。事實(shí)上,在Top 500強(qiáng)超級計(jì)算機(jī)榜單中,有28套系統(tǒng)采用的是圖形處理器作為通用計(jì)算加速。有16套系統(tǒng)采用的是Cell處理器,其中有10套采用的是NVIDIA的芯片,有2套采用的是AMD的Radeon芯片。目前的Top 500強(qiáng)中有10大系統(tǒng)超越了千萬億次大關(guān)。這些超級計(jì)算機(jī)中有五套來自美國,而其他則來自中國,日本,法國,德國。
迥異:不同計(jì)算架構(gòu)的特點(diǎn)
上文提到的采用的異構(gòu)計(jì)算架構(gòu)都屬于大型計(jì)算機(jī)的范疇。對于個(gè)人計(jì)算機(jī)而言,尤其是x86架構(gòu)的計(jì)算機(jī),異構(gòu)計(jì)算的步伐則要慢許多。這是因?yàn)?#xff0c;無論是處理器還是顯示卡,又或者其他運(yùn)算部件,都有其自身的架構(gòu)和特性。他們是針對不同領(lǐng)域,面向不同應(yīng)用所設(shè)計(jì)的芯片。所以他們在功能性方面千差萬別。要想將他們都統(tǒng)一起來,除了需要制定共同的規(guī)范和標(biāo)準(zhǔn)之外,還要針對其計(jì)算的特點(diǎn)設(shè)計(jì)軟件。
舉例來說,CPU和GPU在進(jìn)行計(jì)算時(shí),就有許多不同。對于處理器來說,它是一顆通用處理器。它要應(yīng)對各種類型的計(jì)算應(yīng)用。無論是數(shù)學(xué)方面的,還是邏輯方面的運(yùn)算。我們可以看到,一顆比較常規(guī)的處理器其中的ALU計(jì)算單元僅僅占據(jù)整個(gè)核心面積的25%以內(nèi)。在處理器中,超過50%的核心面積用來制作Cache高速緩存,無論是L1、L2還是片上的L3。而另外還有25%的核心面積用來作為控制器。它控制著處理管線的運(yùn)作,控制著各種分支預(yù)測,讓多核心處理器可以更有效率。
而我們再反觀GPU,其結(jié)構(gòu)要簡單的多。GPU的任務(wù)是加速3D像素的計(jì)算。因此我們在顯卡中可以看到數(shù)以百計(jì)的流處理器單元或者是CUDA核心。而在整個(gè)計(jì)算過程中,GPU承擔(dān)的邏輯計(jì)算任務(wù)非常小。同時(shí)它有著更寬的顯存帶寬,有著更高速的顯存。所以在GPU芯片中,也就無需更大容量的片上緩存機(jī)制。
通過上文的分析,我們可以看到CPU的在處理時(shí),適合作所有工作,各個(gè)方面都比較平均。邏輯處理能力要比GPU快,但是對于數(shù)學(xué)計(jì)算方面,其速度不如具有海量處理核心的GPU快。而GPU方面,數(shù)學(xué)計(jì)算性能強(qiáng)大,大規(guī)模并行處理機(jī)制強(qiáng)大,但是邏輯處理能力不足,僅僅能在某些計(jì)算領(lǐng)域應(yīng)用。
Llano核心解析:一個(gè)真正的異構(gòu)計(jì)算芯片
AMD前不久發(fā)布的新一代Llano處理器,是一顆真正意義上的異構(gòu)計(jì)算處理器。從這張這新架構(gòu)圖中,我們可以看到Llano具備四個(gè)處理核心,每一顆核心具有不同類型的L1高速緩存。同時(shí)每一個(gè)處理核心具備512KB X 2的容量為1MB的L2高速緩存。由此在處理器的部分,構(gòu)成了4MB的二級緩存。
在整個(gè)芯片接近50%的面積上,是GPU的部分。一顆處理芯片同時(shí)包含了CPU和GPU的部分,這可以說是非常典型的異構(gòu)計(jì)算架構(gòu)。同時(shí),在芯片的兩邊我們也可以看到高度集成的4個(gè)PCIe總線控制器,還有一個(gè)128bit位寬的DDR3內(nèi)存控制器。
這樣的異構(gòu)計(jì)算芯片可以充分發(fā)揮不同計(jì)算部件的優(yōu)勢。當(dāng)需要進(jìn)行較多邏輯計(jì)算時(shí),可以使用CPU部分完成。當(dāng)需要大量的浮點(diǎn)運(yùn)算時(shí),可以借用GPU的浮點(diǎn)運(yùn)算處理管線來完成。同時(shí)如果處理器的某些核心正處于空閑,也可以讓其加入到計(jì)算中來。由此可見異構(gòu)計(jì)算不僅僅是需要統(tǒng)一起不同類型的計(jì)算部件,同時(shí)也需要有針對性的讓更適合的硬件作適用的計(jì)算工作。
新的計(jì)算架構(gòu)需要全新的軟件標(biāo)準(zhǔn)
對于異構(gòu)計(jì)算來說,更重要的軟件。雖然現(xiàn)在我們看到許多計(jì)算機(jī)中都應(yīng)用了GPGPU的通用計(jì)算,使用顯卡來進(jìn)行大規(guī)模的并行計(jì)算任務(wù),但是在這個(gè)過程中,處理器就被閑置了。例如許多轉(zhuǎn)碼程序在運(yùn)行的時(shí)候,僅僅是顯卡在跑,而處理器并未參與到轉(zhuǎn)碼加速中來。將異構(gòu)的運(yùn)算部件,全部有效的調(diào)用起來,這是一件困難的編程工作。
如下圖所示,傳統(tǒng)意義上的多路處理器計(jì)算時(shí),僅僅使用的是處理器的并行計(jì)算。并未讓GPU加入到其中。而現(xiàn)在我們常說的GPGPU通用計(jì)算,包括NVIDIA的CUDA和AMD的Stream在計(jì)算的時(shí)候,也僅僅是GPU在跑,處理器是閑置的。
?除了應(yīng)用軟件之外,曾經(jīng)我們耳熟能詳?shù)脑u測軟件,也并未對異構(gòu)計(jì)算作出優(yōu)化。無論是PCmark還是3Dmark,在這些軟體進(jìn)行測試的時(shí)候,會將CPU和GPU利用不同的測試項(xiàng)目分別進(jìn)行測試。并沒有將它們合并在一起,進(jìn)行有效的異構(gòu)計(jì)算。
Sysmark僅僅是建立許多計(jì)算任務(wù),然后讓系統(tǒng)來跑,這僅僅是針對的是處理器的部分。而Chinebench系列的軟體,僅僅是考察的CPU的渲染性能。對于多核心和超線程雖然有很好的支持,但是并未讓GPU加入測試。如你所見,目前針對x86或者臺式機(jī)平臺的異構(gòu)計(jì)算軟件少之甚少,甚至連一款像樣的異構(gòu)計(jì)算評測軟件都無有。
CUDA:在夾縫中掙扎求存
CUDA(Compute Unified Device Architecture,統(tǒng)一計(jì)算架構(gòu))是由NVIDIA所推出的一種集成技術(shù),是該公司對于GPGPU的正式名稱。通過這個(gè)技術(shù),用戶可利用NVIDIA的GeForce 8以后的GPU和較新的Quadro GPU進(jìn)行計(jì)算。亦是首次可以利用GPU作為C-編譯器的開發(fā)環(huán)境。NVIDIA營銷的時(shí)候,往往將編譯器與架構(gòu)混合推廣,造成混亂。實(shí)際上,CUDA架構(gòu)可以兼容OpenCL或者自家的C-編譯器。無論是CUDA C-語言或是OpenCL,指令最終都會被驅(qū)動程序轉(zhuǎn)換成PTX代碼,交由顯示核心計(jì)算。
以GeForce 8800 GTX為例,其核心擁有128個(gè)內(nèi)處理器。利用CUDA技術(shù),就可以將那些內(nèi)處理器串通起來,成為線程處理器去解決數(shù)據(jù)密集的計(jì)算。而各個(gè)內(nèi)處理器能夠交換、同步和共享數(shù)據(jù)。利用NVIDIA的C-編譯器,通過驅(qū)動程序,就能利用這些功能。亦能成為流處理器,讓應(yīng)用程序利用進(jìn)行運(yùn)算。GeForce 8800 GTX顯示卡的運(yùn)算能力可達(dá)到520GFlops,如果建設(shè)SLI系統(tǒng),就可以達(dá)到1TFlops。
利用CUDA技術(shù),配合適當(dāng)?shù)能浖?例如MediaCoder),就可以利用顯示核心進(jìn)行高清視頻編碼加速。視頻解碼方面,同樣可以利用CUDA技術(shù)實(shí)現(xiàn)。此前,NVIDIA的顯示核心本身已集成PureVideo單元??墒?#xff0c;實(shí)現(xiàn)相關(guān)加速功能的一個(gè)微軟API-DXVA,偶爾會有加速失效問題。所以利用CoreAVC配合CUDA,變相在顯示核心上實(shí)現(xiàn)軟件解碼,解決兼容性問題。另外,配合適當(dāng)?shù)囊?#xff0c;顯示核心就可以計(jì)算光線跟蹤。NVIDIA就放出了自家的Optix實(shí)時(shí)光線跟蹤引擎,通過CUDA技術(shù)利用GPU計(jì)算光線跟蹤。
FireStream:慢慢淡出我們的視野
Firestream,是AMD旗下的品牌系列之一。與Radeon(用于消費(fèi)級顯卡)和FirePro(用于專業(yè)顯卡)不同,FireStream主要用于AMD的高性能計(jì)算卡系列。FireStream產(chǎn)品中的GPU不是用來作3D加速用途,而是利用GPU內(nèi)置的流處理器變成一群并行處理器,作為浮點(diǎn)運(yùn)算協(xié)處理器,協(xié)助中央處理器計(jì)算復(fù)雜的浮點(diǎn)運(yùn)算程序,例如復(fù)雜的科學(xué)運(yùn)算。Firestream的競爭對手是nVIDIA的Tesla系列高性能計(jì)算卡。
早在數(shù)年前,人們就意識到GPU不但可以處理圖形數(shù)據(jù),還可以處理其他數(shù)據(jù)。BionicFX就試過利用GeForce 6800處理音頻數(shù)據(jù),ATI亦做過同樣的試驗(yàn)。而且史丹佛大學(xué)的Folding@Home研究項(xiàng)目亦可利用Radeon X1900作運(yùn)算加速;通過GPU來模擬蛋白質(zhì)合成,進(jìn)而找尋有關(guān)蛋白質(zhì)的疾病。
第一個(gè)產(chǎn)品,FireStream 580,是建基于R580圖形芯片。它將是一塊采用R580顯核的特殊顯示卡,R580顯示核心中的48個(gè)獨(dú)立的像素處理器能帶來強(qiáng)大的浮點(diǎn)運(yùn)算性能。該產(chǎn)品采用PCI Express x16作為接口,流處理器的頻率是600 MHz,可以同時(shí)運(yùn)行512線程,并配備了1GB GDDR3存儲器,頻率是1300 MHz。并有可能使用多個(gè)核心并發(fā)處理數(shù)據(jù)。這個(gè)流處理器的功耗為165瓦特。
FireStream 580
NVIDIA PhysX:最出色的GPGPU應(yīng)用實(shí)例
PPU (Physics Processing Unit)
物理處理單元,即 PPU,是一種特別為減輕 CPU 計(jì)算,尤其是物理運(yùn)算部分的處理器。這概念類似于對上10年間GPU。在現(xiàn)代 計(jì)算機(jī)中,GPU用于處理 矢量圖形,并且延伸到3D圖形。但GPU對物理處理無能為力,故目前大部分物理處理都交給CPU處理,這無疑是加重了CPU本來就不輕的負(fù)擔(dān)。
NVIDIA PhysX
PhysX 是一套由 AGEIA 設(shè)計(jì)的執(zhí)行復(fù)雜的物理運(yùn)算的PPU,又可以代表一款物理引擎。AGEIA 聲稱,PhysX 將會使設(shè)計(jì)師在開發(fā)游戲的過程中,使用復(fù)雜的物理效果,而不需要像以往那樣,耗費(fèi)漫長的時(shí)間開發(fā)一套物理引擎。以往使用了物理引擎,還會使一些配置較低的電腦,無法流暢運(yùn)行游戲。AGEIA 更宣稱 PhysX 執(zhí)行物理運(yùn)算的效率,比當(dāng)前的 CPU 與物理處理軟件的組合高出 100 倍。游戲設(shè)計(jì)語言 Dark Basic Pro 將會支持 PhysX,并允許其用戶利用 PhysX 執(zhí)行物理運(yùn)算。在 2005年7月20日,索尼同意在即將發(fā)售的 PlayStation 3 中使用 AGEIA 的 PhysX 和它的 SDK —— NovodeX。現(xiàn)時(shí),AGEIA公司己被NVIDIA收購,相關(guān)的顯卡亦可以加速該物理引擎。
NVIDIA PhysX是一種功能強(qiáng)大的物理加速引擎,可在頂級PC和游戲中實(shí)現(xiàn)實(shí)時(shí)的物理學(xué)計(jì)算。PhysX軟件被廣泛應(yīng)用于數(shù)百個(gè)游戲中,軟件注冊用戶數(shù)量已超過20,000名。索尼的Playstation 3、微軟的Xbox 360、任天堂的Wii以及個(gè)人計(jì)算機(jī)均支持PhysX。
PhysX設(shè)計(jì)用途是利用具備數(shù)百個(gè)內(nèi)核的強(qiáng)大處理器來進(jìn)行硬件加速。加上GPU超強(qiáng)的并行處理能力,PhysX將使物理加速處理能力呈指數(shù)倍增長并將您的游戲體驗(yàn)提升至一個(gè)全新的水平,在游戲中呈現(xiàn)豐富多彩、身臨其境的物理學(xué)游戲環(huán)境。
OpenCL:無人能模仿 很難被超越
2008年6月的WWDC大會上,蘋果提出了OpenCL規(guī)范,旨在提供一個(gè)通用的開放API,在此基礎(chǔ)上開發(fā)GPU通用計(jì)算軟件。隨后,Khronos Group宣布成立GPU通用計(jì)算開放行業(yè)標(biāo)準(zhǔn)工作組,以蘋果的提案為基礎(chǔ)創(chuàng)立OpenCL行業(yè)規(guī)范。
OpenCL (Open Computing Language,開放計(jì)算語言) 是一個(gè)為異構(gòu)平臺編寫程序的框架,此異構(gòu)平臺可由CPU,GPU或其他類型的處理器組成。OpenCL由一門用于編寫kernels(在OpenCL設(shè)備上運(yùn)行的函數(shù))的語言(基于C99)和一組用于定義并控制平臺的API組成。OpenCL提供了基于任務(wù)分區(qū)和數(shù)據(jù)分區(qū)的并行計(jì)算機(jī)制。
? OpenCL類似于另外兩個(gè)開放的工業(yè)標(biāo)準(zhǔn)OpenGL和OpenAL,這兩個(gè)標(biāo)準(zhǔn)分別用于三維圖形和計(jì)算機(jī)音頻方面。OpenCL擴(kuò)展了GPU用于圖形生成之外的能力。OpenCL由非盈利性技術(shù)組織Khronos Group掌管。
OpenCL最初蘋果公司開發(fā),擁有其商標(biāo)權(quán),并在與AMD,IBM,英特爾和nVIDIA技術(shù)團(tuán)隊(duì)的合作之下初步完善。隨后,蘋果將這一草案提交至Khronos Group。2010年6月14日,OpenCL 1.1 發(fā)布。
OpenCL:奠定了異構(gòu)計(jì)算的基礎(chǔ)
雖然蘋果制定OpenCL的私心路人皆知,希望通過OpenGL來讓自家的Mac電腦可以順利的使用兩個(gè)顯卡巨頭的產(chǎn)品做GPGPU運(yùn)算。但是蘋果的這一舉措?yún)s為未來的x86平臺異構(gòu)計(jì)算奠定了堅(jiān)實(shí)的基礎(chǔ)。因?yàn)闊o論是CUDA還是FireStream,無論是CUDA核心還是流處理器,軟件開發(fā)人員都可以通過OpenCL來支持。
中國用戶可以登錄英偉達(dá)中文官方網(wǎng)站上下載到最新的驅(qū)動程序,只要您下載的驅(qū)動是195.62版本或更高,就可以在Geforce 8系列或更高級的顯卡中開啟OpenCL,在安裝好新版本的顯卡驅(qū)動程序并重新啟動后,OpenCL就自動開啟了。當(dāng)有需要使用CPU來完成的工作如轉(zhuǎn)換視頻時(shí),GPU代替CPU進(jìn)行運(yùn)算,以提高轉(zhuǎn)換速度。但是在3D游戲中應(yīng)該是不會調(diào)用OpenCL的,因?yàn)轱@卡有自己的硬件加速功能以及物理引擎。
當(dāng)然同樣,在NVIDIA的Quadro系列專業(yè)顯卡中,同樣能夠使用OpenCL技術(shù)。只要您的顯卡能夠達(dá)到CUDA的要求,就能夠正常使用OpenCL,以獲得優(yōu)異的CPU運(yùn)算效率。
在AMD-ATI的Stream技術(shù)中,已經(jīng)為日常使用、辦公、游戲等提供物理加速。原理與OpenCL基本相同,但是,目前AMD-ATI還沒有進(jìn)行推廣,但是官方承諾,在日后會逐漸增多Stream支持的游戲。但是Stream使用的顯卡平臺還是比較高,而性能非常優(yōu)異的顯卡無疑帶來更高昂的價(jià)格,我們也同樣希望AMD能夠做到像NVIDIA那樣,只需要支持DirectX10的顯卡就能開啟OpenCL,以方便更多的AMD-ATI用戶。Geforce 8系列以上的顯卡能完美支持DirectX10,所以官方將開啟OpenCL的顯卡最低定為8系列。
DirectCompute:立足DX11,應(yīng)用廣泛
Microsoft DirectCompute是一個(gè)應(yīng)用程序接口(API),允許Windows Vista或Windows 7平臺上運(yùn)行的程序利用圖形處理器(GPU)進(jìn)行通用計(jì)算,DirectCompute是Microsoft DirectX的一部分。雖然DirectCompute最初在DirectX 11 API中得以實(shí)現(xiàn),但支持DX10的GPU可以利用此API的一個(gè)子集進(jìn)行通用計(jì)算,支持DX11的GPU則可以使用完整的DirectCompute功能。
顯卡對DirectX的支持程度影響可用的DirectCompute版本:
DirectX 10:DirectCompute 4.0
DirectX 10.1:DirectCompute 4.1
DirectX 11:DirectCompute 5.0
AMD開始全面支持異構(gòu)計(jì)算
相比OpenGL豐富的功能和體系化的SDK來說,DirectCompute僅僅是以一個(gè)簡單的API存于世上,顯然不能贏得更多廠商的關(guān)注。由此微軟又醞釀了C++ AMP……且看下文分解。
Llano:融聚今宵 真正的異構(gòu)計(jì)算平臺
這是AMD近期發(fā)布的最強(qiáng)Llano處理器,具有劃時(shí)代的意義,具備真正的異構(gòu)計(jì)算架構(gòu)。AMD A8-3850配備了四個(gè)主頻2.9GHz的CPU核心,不過遺憾的是A8-3850并不支持Turbo Core自動超頻。在GPU方面,A8-3850配備的是一顆完整功能的Radeon HD 6550D,該GPU核心配備了400個(gè)流處理器,核心頻率為600MHz。
A8-3850 APU處理器,采用Llano核心
實(shí)際上A8-3850 APU處理器的集成GPU核心性能平均要比Core i5 2500K快58%左右。如果我們只考慮在游戲里的峰值性能的話,在類似于《現(xiàn)代戰(zhàn)爭2》這樣的游戲里,最新Llano桌面APU的GPU在幀頻表現(xiàn)上是可以達(dá)到Sandy Bridge兩倍的,這也再次證明了英特爾集成GPU在游戲領(lǐng)域的尷尬。至于Llano的GPU性能,相信這才是玩家們最喜聞樂見的。
雖然我們也認(rèn)為Sandy Bridge在集成GPU性能方面是不錯的入門選擇,但是至少在2011年,Llano桌面APU仍然是懂行玩家最該做出的選擇。值得注意的在這些測試?yán)?#xff0c;測試方隨后還為Core i5 2500K GPU安裝了最新的2372驅(qū)動程序,結(jié)果證明大部分的結(jié)果仍然沒有改變,不過在少數(shù)領(lǐng)域英特爾發(fā)掘出了更多的潛力。無論如何,在GPU測試?yán)?#xff0c;AMD的Llano桌面APU A8-3850發(fā)揮出了令人印象深刻的性能。
Socket-FM1接口
C++ AMP:微軟發(fā)布異構(gòu)計(jì)算編程語言
自從AMD發(fā)布了Llano處理器,異構(gòu)計(jì)算就真正進(jìn)入了尋常百姓的家中。雖然OpenCL作為通用大規(guī)模并行計(jì)算的行業(yè)領(lǐng)軍標(biāo)準(zhǔn),得到了AMD、Intel、NVIDIA等芯片業(yè)巨頭和大量行業(yè)廠商的支持,但唯獨(dú)缺少了微軟。
近日在AMD Fusion開發(fā)者峰會上,微軟終于拿出了自己的異構(gòu)計(jì)算編程語言:“C++ AMP”,其中AMP三個(gè)字母是“accelerated massive parallelism”的縮寫,也就是加速大規(guī)模并行的意思。
微軟的“異構(gòu)并行計(jì)算”
C++ AMP是微軟Visual Studio和C++編程語言的新擴(kuò)展包,用于輔助開發(fā)人員充分適應(yīng)現(xiàn)在和未來的高度并行和異構(gòu)計(jì)算環(huán)境。它使用C++語言的句法,將捆綁在下個(gè)版本的Visual Studio中發(fā)布,預(yù)計(jì)會在今年晚些時(shí)候放出測試版本。
為了與OpenCL相抗衡,微軟宣布C++ AMP標(biāo)準(zhǔn)將是一種開放的規(guī)范,允許其它編譯器集成和支持。這無疑是對OpenCL的最直接挑戰(zhàn)。
C++ AMP的威力:剛體模擬性能綻放(上)
為了展示了C++ AMP的威力,微軟現(xiàn)場運(yùn)行了一個(gè)“剛體模擬”程序。一個(gè)可執(zhí)行文件能夠在多臺計(jì)算機(jī)和設(shè)備上同時(shí)運(yùn)行。這里我們可以看到,Llano APU x86處理器可以貢獻(xiàn)出3GFlops的計(jì)算量。Llano APU的顯示核心與處理核心協(xié)同工作,可以提供500GFlops的計(jì)算量。另外,Llano APU和Radeon HD 5800可以提供1000多GFlops的計(jì)算量,模擬4萬多個(gè)粒子。即使是AMD的E-350這樣的僅有18W的低功耗筆記本處理器也可以提供16GFlops的計(jì)算量,能夠模擬16000多個(gè)粒子。
E-350的CPU部分,可以得到3.2GFlops的計(jì)算量
僅僅可以模擬4096多個(gè)剛體粒子
請注意這里鼠標(biāo)所指示的運(yùn)算量
C++ AMP的威力:剛體模擬性能綻放(中)
模擬的剛體粒子數(shù)量增加到5120個(gè)
CPU與GPU核心,聯(lián)合運(yùn)算,可以提供60GFlops的運(yùn)算量
下面加入更多剛體粒子
小貼士:什么是剛體?
在任何力的作用下,體積和形狀都不發(fā)生改變的物體叫做剛體(Rigid body)。在物理學(xué)內(nèi),理想的剛體是一個(gè)固體的,尺寸值有限的,形變情況可以被忽略的物體。不論有否受力,在剛體內(nèi)任意兩點(diǎn)的距離都不會改變。在運(yùn)動中,剛體上任意一條直線在各個(gè)時(shí)刻的位置都保持平行。
C++ AMP的威力:剛體模擬性能綻放(下)
加入更多剛體粒子,模擬20160個(gè)
Llano APU可以貢獻(xiàn)出500GFlops的計(jì)算量,這與AMD之前宣稱的個(gè)人超級計(jì)算機(jī)的口號屬實(shí)
? 剛體的模擬數(shù)量達(dá)到了40960個(gè)的時(shí)候,就需要極大的計(jì)算量才能保證穩(wěn)定輸出30fps的幀率。下面這張圖,你可以看到在聯(lián)合了兩臺臺式機(jī)之后,計(jì)算量接近1TFlops。
一觸即發(fā):異構(gòu)計(jì)算行業(yè)標(biāo)準(zhǔn)大戰(zhàn)
NVIDIA并未獲得Intel關(guān)于x86架構(gòu)的授權(quán),就連開發(fā)x86的模擬器的自由都被封殺。無奈之下CUDA也僅僅是GPGPU的單獨(dú)運(yùn)算。OpenCL是免費(fèi)開放的,也是目前異構(gòu)計(jì)算的唯一選擇。
而微軟的C++ AMP會與Windows緊密貼合起來。雖然也屬于開放性的標(biāo)準(zhǔn),但是微軟對其未來方向的掌控,其執(zhí)行應(yīng)該更有效力。OpenCL有多家主力廠商支持,技術(shù)紛爭不斷,為了自家產(chǎn)品的利益難免在新版本制定方面出現(xiàn)歧路。現(xiàn)在的局面就有點(diǎn)類似曾經(jīng)OpenGL對決DirectX的時(shí)代,不知道這次微軟是否還能夠全面勝出。
上面這張圖表明,如果你的計(jì)算量僅有630GFlops的話,你的幀數(shù)僅僅能維持在19fps左右。
轉(zhuǎn)自wikipedia:物理處理器(Physics ProcessingUnit,PPU)是電腦專門用來處理物理運(yùn)算的微型處理器,尤其應(yīng)用在電子游戲上。物理學(xué)上的剛體動力學(xué)、碰撞偵測、流體力學(xué)、頭發(fā)模擬、衣物模擬和對象破壞等效果,均可以這種處理器進(jìn)行運(yùn)算。這個(gè)概念源自于減輕中央處理器(CPU)的負(fù)擔(dān),和使用顯示核心取代CPU進(jìn)行繪圖運(yùn)算的原理一樣。有關(guān)物理數(shù)據(jù)也可以單純以一般的CPU去計(jì)算,但在速度方面會比PPU慢得多。
總結(jié)
以上是生活随笔為你收集整理的CPU+GPU异构计算完全解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宽带无线的趋势已来-无线网络技术发展趋势
- 下一篇: OpenCV中GPU模块使用