抗衡GPU LARRABEE視覺(jué)計(jì)算有何期待
作為GP-GPU規(guī)范制定者之一的Intel,雖然目前在傳統(tǒng)的GPU領(lǐng)域并不是領(lǐng)袖,但傳統(tǒng)GPU已經(jīng)依靠其現(xiàn)有的結(jié)構(gòu)特長(zhǎng),在高度并行浮點(diǎn)運(yùn)算速度上趕超CPU。Intel提出視覺(jué)計(jì)算的概念,讓技術(shù)和產(chǎn)業(yè)方向更為明確,也是Intel對(duì)現(xiàn)有GPU產(chǎn)業(yè)在多領(lǐng)域發(fā)揮作用現(xiàn)狀的認(rèn)可。這不等于顯卡產(chǎn)業(yè),GPU的應(yīng)用與整合技術(shù)的發(fā)展也不等于顯卡產(chǎn)業(yè)的滅亡,更應(yīng)該理解為基于視覺(jué)系統(tǒng)整體化應(yīng)用形式的改變。
視覺(jué)計(jì)算是什么,Intel幾乎是從另一個(gè)角度向我們提出萬(wàn)億次計(jì)算、千萬(wàn)億次計(jì)算要帶給大家什么?從為萬(wàn)億次運(yùn)算準(zhǔn)備的Tera-Scale軟件開(kāi)發(fā)平臺(tái),到現(xiàn)在256核心的Nehalem,以及今后的Larrabee GPU。萬(wàn)億次運(yùn)算將指的不僅僅是多核心的CPU,而更早達(dá)到這一數(shù)字指標(biāo)的很可能是GPU;更完整展現(xiàn)萬(wàn)億次運(yùn)算成果的很可能是“視覺(jué)計(jì)算”。
Larrabee——INTEL涉足視覺(jué)計(jì)算的結(jié)晶
隨著近年GPU踏足通用計(jì)算,data re-use的場(chǎng)合越來(lái)越多,即使是現(xiàn)在游戲圖形運(yùn)算中時(shí)常遇到的post processing,data re-use也是司空見(jiàn)慣的事情,為此GPU廠商也都往GPU里加入可讀寫(xiě)的軟件管理cache。象最早引入該概念的產(chǎn)品 NVIDIA的G80,它有16個(gè)內(nèi)核(稱(chēng)之為 Streaming Multiprocessor,或者簡(jiǎn)稱(chēng)SM),每個(gè)內(nèi)核內(nèi)都有一塊16KB大小、時(shí)延為1個(gè)時(shí)鐘周期、具備16個(gè)bank的SRAM,開(kāi)發(fā)人員透過(guò)CUDA或者未來(lái)的Compute Shader、OpenCL實(shí)現(xiàn)對(duì)這塊SRAM控制,而內(nèi)核執(zhí)行的線程結(jié)果可以在這里暫存實(shí)現(xiàn)高效的data re-use。
到這里大家應(yīng)該都很清楚從技術(shù)的角度而言,CPU和GPU的發(fā)展都正面臨著一個(gè)交叉點(diǎn),前者因?yàn)楦鞣N原因不得不延緩“ILP/頻率”這個(gè)免費(fèi)午餐而轉(zhuǎn)向多核技術(shù),而后者因?yàn)橹圃旒夹g(shù)的發(fā)展所新加入的晶體管構(gòu)成的功能模塊不僅僅限于可以在圖形渲染上使用,包括不少可以并行化的運(yùn)算也都能拿到GPU上高效的執(zhí)行。這也就連帶產(chǎn)生了市場(chǎng)爭(zhēng)奪的問(wèn)題——因?yàn)樵诤荛L(zhǎng)的一段時(shí)間里,超級(jí)計(jì)算機(jī)、服務(wù)器這類(lèi)被稱(chēng)作現(xiàn)金奶牛的市場(chǎng)都是由傳統(tǒng)的CPU廠商提供運(yùn)算部件,現(xiàn)在GPU廠商也要插一腳進(jìn)來(lái),而且他們?cè)谛阅苌系母?jìng)爭(zhēng)力實(shí)在不容小瞥。
除了專(zhuān)業(yè)高性能科學(xué)運(yùn)算領(lǐng)域外,在市場(chǎng)覆蓋面更大的桌面領(lǐng)域,GPU涉足的通用計(jì)算也越來(lái)越讓CPU廠商感到不少的隱憂,例如物理加速、視頻處理、三維成品級(jí)渲染這類(lèi)以往需要大量運(yùn)算資源來(lái)完成的任務(wù),GPU也都開(kāi)始提供解決方案。目前的 PC市場(chǎng)普遍被認(rèn)為進(jìn)入了成熟階段,這意味著市場(chǎng)容量在短時(shí)間內(nèi)爆發(fā)性增長(zhǎng)的可能性不大,所以GPU侵略桌面領(lǐng)域傳統(tǒng)通用計(jì)算地位的結(jié)果,將只會(huì)是CPU的份額受到擠壓。
對(duì)于一般的design house(設(shè)計(jì)公司)類(lèi)型CPU廠商來(lái)說(shuō),這似乎不是什么大的問(wèn)題,因?yàn)樗麄冊(cè)跔I(yíng)運(yùn)上的成本主要是研發(fā),而對(duì)于垂直型CPU廠商(IDM)來(lái)說(shuō),CPU份額的下降意味著自己的最強(qiáng)優(yōu)勢(shì)——產(chǎn)能將變成非常沉重的負(fù)資產(chǎn)。要避免這個(gè)問(wèn)題的發(fā)生,最好的辦法就是自己也推出類(lèi)似的產(chǎn)品,而Larrabee就是Intel涉足視覺(jué)計(jì)算的答案#p#page_title#e#
Larrabee背后的設(shè)計(jì)思想其實(shí)是既要搶占到GPU編程的前沿陣地,又要提供一款可以廣泛適用于高吞吐性應(yīng)用領(lǐng)域的X86矢量處理器。而且,除可視化計(jì)算領(lǐng)域之外,這一架構(gòu)在在高性能計(jì)算應(yīng)用領(lǐng)域也有不錯(cuò)的前景。
實(shí)際上,英特爾把Larrabee看作是一種高吞吐的處理器,而不僅僅是一款GPU。負(fù)責(zé)該項(xiàng)目的高級(jí)工程師Larry Seiler強(qiáng)調(diào)了英特爾設(shè)計(jì)這種新架構(gòu)的意圖,他說(shuō),“Larrabee會(huì)對(duì)圖形處理和超級(jí)計(jì)算領(lǐng)域產(chǎn)生革命性的影響。”不過(guò),此次英特爾沒(méi)有提及具體的核心數(shù)量、時(shí)鐘頻率和功耗,產(chǎn)品的發(fā)布時(shí)間也沒(méi)有明確,大概會(huì)在2009年或2010年。
Larrabee最初的目標(biāo)是推出一款PC用的高端GPU。通過(guò)進(jìn)入高端圖形處理器市場(chǎng),英特爾希望把其在移動(dòng)GPU市場(chǎng)中的優(yōu)勢(shì)延展到桌面游戲領(lǐng)域。
假如英特爾能夠?qū)崿F(xiàn)這一目標(biāo),我們相信它還會(huì)進(jìn)一步把這個(gè)平臺(tái)推向HPC市場(chǎng)。憑借其矢量性能和X86兼容性,Larrabee會(huì)成為其他高端加速器產(chǎn)品的重要競(jìng)爭(zhēng)對(duì)手,這些產(chǎn)品包括NVIDIA的Tesla(以及其他支持CUDA編程開(kāi)發(fā)環(huán)境的GPU),AMD的FireStream GPU, Cell處理器系統(tǒng),ClearSpeed協(xié)處理器以及FPGA加速器等等。跟其他產(chǎn)品不同,Larrabee由于把CPU的邏輯部件已經(jīng)整合在了芯片上面,所以不再需要外部的主處理器(host processor )。
跟今天一般的GPU相比,Larrabee采用了不同的設(shè)計(jì)架構(gòu)。該芯片將一些X86內(nèi)核通過(guò)一條高速的環(huán)總線(ring bus)相互連接在一起,在每個(gè)方向都是512位寬。這些核心源自于英特爾的奔騰(Pentium)處理器,帶有較短、順序的執(zhí)行流水線(execution pipelines)。每個(gè)內(nèi)核可以同時(shí)執(zhí)行多達(dá)四個(gè)線程,同時(shí)包含一個(gè)標(biāo)量(scalar )和矢量單元( vector unit),后者每一個(gè)時(shí)鐘周期可以執(zhí)行16條32位運(yùn)算。由于Larrabee從根本上來(lái)說(shuō)是一種CPU架構(gòu),所有很多特性如context switching, preemptive multitasking, virtual memory和page swapping都已經(jīng)集成在里面。而且由于線程管理是在軟件中完成的,通過(guò)傳統(tǒng)的并行化技術(shù),延遲就很小了。
每一個(gè)內(nèi)核包含一級(jí)指令緩存和數(shù)據(jù)緩存,同時(shí)芯片上也有二級(jí)緩存。二級(jí)緩存是由多個(gè)內(nèi)核進(jìn)行共享的,每個(gè)內(nèi)核可以分派到256KB。跟GPU不同,緩存的一致性會(huì)在整個(gè)緩存體系中得到保持,因此,在處理器間通信( inter-processor communication )方面,可以讓軟件通過(guò)一個(gè)有效的機(jī)制來(lái)在應(yīng)用線程之間共享數(shù)據(jù)。內(nèi)存控制器(或者是控制器)也是在芯片上的,針對(duì)特定應(yīng)用的功能單元也一樣。
總的來(lái)看,一顆用于圖形處理的Larrabee會(huì)用到很少的特定功能硬件。幾乎所有的處理都是在X86內(nèi)核上通過(guò)軟件來(lái)完成的。在某些情況下,最明顯的是圖像紋理陰影處理上,英特爾增加了特定的功能硬件來(lái)增強(qiáng)性能。而且根據(jù)應(yīng)用不同,如vertex shading, rasterization, pixel shading等,會(huì)采用不同的功能單元。因此,跟專(zhuān)用的硬件不同,通過(guò)通用芯片和軟件,負(fù)載均衡會(huì)更容易實(shí)現(xiàn),這也意味著當(dāng)在晶圓上放置新的內(nèi)核時(shí),應(yīng)用性能可以實(shí)現(xiàn)更加均衡地增長(zhǎng)和擴(kuò)展。
為了順利進(jìn)行圖形領(lǐng)域,英特爾將支持DirectX和OpenGL ,以支持現(xiàn)有的應(yīng)用。對(duì)于那些喜歡創(chuàng)新冒險(xiǎn)的程序員來(lái)說(shuō),英特爾也會(huì)提供專(zhuān)門(mén)針對(duì)Larrabee的API ,這樣,軟件開(kāi)發(fā)人員可以充分利用這一處理器的所有功能特性。對(duì)矢量指令集的訪問(wèn)也會(huì)通過(guò)C語(yǔ)言來(lái)實(shí)現(xiàn)。矢量單元會(huì)支持IEEE單精度和雙精度浮點(diǎn)運(yùn)算,同時(shí)也支持32位整數(shù)運(yùn)算#p#page_title#e#
雖然Larrabee被定義為是一款眾核芯片,但其第一個(gè)版本可能只有幾十個(gè)內(nèi)核,而不是象NVIDIA和AMD (ATI) 的GPU那樣擁有好幾百個(gè)核心。而且,就主頻來(lái)說(shuō),Larrabee的性能可能還要低于傳統(tǒng)的GPU產(chǎn)品。比如,即便每時(shí)鐘周期(每核)可以執(zhí)行多達(dá)16次單精度運(yùn)算,一顆1.0 GHz 的Larrabee芯片需要62個(gè)內(nèi)核,其性能才能相當(dāng)于 NVIDIA和AMD 今年會(huì)發(fā)布的最新的萬(wàn)億次(teraflop)GPU產(chǎn)品。相信英特爾會(huì)找到辦法讓Larrabee至少達(dá)到與競(jìng)爭(zhēng)對(duì)手相當(dāng)?shù)男阅芩?。不過(guò),除了性能,Larrabee在編程方面的優(yōu)勢(shì)會(huì)為其掙回不少分,特別是對(duì)于軟件開(kāi)發(fā)商來(lái)說(shuō),它們希望在開(kāi)發(fā)新應(yīng)用時(shí)有更多的靈活性。
在一個(gè)成熟的市場(chǎng)中引入一種全新的架構(gòu),是需要冒很大風(fēng)險(xiǎn)的,這一點(diǎn)相信英特爾在其安騰產(chǎn)品上已經(jīng)體會(huì)到了。當(dāng)然,英特爾在行業(yè)中確實(shí)擁有很強(qiáng)大的推動(dòng)力量,在推動(dòng)ISV和OEM支持Larrabee方面英特爾已經(jīng)運(yùn)作了一年多。筆者認(rèn)為,其在圖形領(lǐng)域取得成功的關(guān)鍵在于能否打入HPC市場(chǎng)。在某種程度上來(lái)看,Larrabee在高端科學(xué)計(jì)算方面可能比在更狹窄的可視化計(jì)算上更有價(jià)值。不管怎樣,英特爾、AMD和NVIDIA之間的競(jìng)爭(zhēng)會(huì)越來(lái)越有看頭。
Larrabee Native編程模式類(lèi)似于x86多核心架構(gòu)。Larrabee Native編程中心是一個(gè)完整的C/C++編譯程序,這種編譯程序可以在在靜止?fàn)顟B(tài)下向Larrabee x86指令集里收集程序。很多C/C++應(yīng)用可以被重新編譯成Larrabee可以識(shí)別的語(yǔ)言程序,而且可以在不加修飾的情況下正確執(zhí)行這些應(yīng)用。這無(wú)疑大大提升了程序開(kāi)發(fā)人員在編寫(xiě)Larrabee程序時(shí)的效率,特別是在編寫(xiě)那些類(lèi)似于常常出現(xiàn)在高性能運(yùn)算環(huán)境中的x86代碼。
目前Larrabee的兩個(gè)局限:1.有些系統(tǒng)call porting的應(yīng)用不能有效支持;2.目前的驅(qū)動(dòng)架構(gòu)仍然需要再編譯。我們將會(huì)著重介紹Larrabee Native應(yīng)用編程的三個(gè)重要方面:software threading(軟件渲染)、SIMD vectorization以及主機(jī)與Larrabee之間的通訊。
Larrabee Native可以提供一種靈活的軟件線程功能。這種架構(gòu)層次的線程能力也就是我們常常提到的POSIX Threads API (P-threads)。我們已經(jīng)將API進(jìn)行了擴(kuò)展,可以允許編程人員與某個(gè)特定的HW線程或者核心指定線程。
盡管P線程是一種非常強(qiáng)大的線程編程API,但是對(duì)于某些應(yīng)用而言,P線程的creation以及switching成本代價(jià)通常情況下卻非常高。為了緩解這種成本壓力,Larrabee Native提供了一種基于分布式任務(wù)stealing scheduler的任務(wù)安排API,這種API非常輕。這種任務(wù)編程API的實(shí)際執(zhí)行可以在Intel的Thread Building Blocks中看到。最終,Larrabee Native可以通過(guò)Larrabee Native C/C++編譯程序中的OpenMP pragmas提供額外的線程編程支持。
對(duì)于Larrabee Native應(yīng)用編程人員而言,所有的Larrabee SIMD矢量單元都是完全可編程的。Larrabee Native C/C++編譯程序包括Larrabee版的Intel自動(dòng)矢量化編程技術(shù)。需要編寫(xiě)Larrabee矢量單元的編程人員可以僅通過(guò)C++矢量intrinsics或者inline Larrabee集合代碼輕而易舉的編寫(xiě)這種程序。
在一種基于包括Larrabee的平臺(tái)的CPU中,對(duì)于這個(gè)平臺(tái),Larrabee將會(huì)被OS驅(qū)動(dòng)程序控制管理。Larrabee的library可以提供非??斓臄?shù)據(jù)/信息傳輸協(xié)議,從而更好的在binaries間管理所有的存儲(chǔ)數(shù)據(jù)傳輸和通訊。此外,某些從Larrabee應(yīng)用binaries中訪問(wèn)的C/C++標(biāo)準(zhǔn)library功能的執(zhí)行必須與主操作系統(tǒng)共享數(shù)據(jù),特別是諸如read/write/open/close等在內(nèi)的文件I/O功能。
除了非常高的吞吐量應(yīng)用程序外,我們預(yù)測(cè)編程人員還將會(huì)利用Larrabee Native執(zhí)行更高層次的編程模式,這種編程模式可能讓平行編程的某些方面自動(dòng)執(zhí)行。比如說(shuō),Ct風(fēng)格的編程模式、諸如Intel Math Kernel Library的高層次library API、physics API等等。目前的GPGPU編程模式同樣可以通過(guò)Larrabee Native被重新執(zhí)行。#p#page_title#e#
圖形渲染管線本身就是一個(gè)Larrabee原生應(yīng)用。由于Larrabee是一個(gè)以高級(jí)語(yǔ)言和工具寫(xiě)入的軟件,Larrabee可以輕易擴(kuò)展并增加極具創(chuàng)新的渲染能力。這里我們將會(huì)著重討論三個(gè)圖形管線的擴(kuò)展實(shí)例。
渲染目標(biāo)的讀?。≧ender Target Read):由于Larrabee的圖形渲染管線采用了軟件frame buffer(幀緩沖),所以我們可以讓其他一些程序員使用這些數(shù)據(jù)結(jié)構(gòu)。而且值得一提的是,Larrabee渲染管線的某個(gè)無(wú)價(jià)值的擴(kuò)展將會(huì)允許像素shader在被存儲(chǔ)價(jià)值之前直接讀取出來(lái)。這種能力可以用于各種各樣的渲染,包括程序人員界定混合操作(programmer defined blending operations)、單通道基頻模式映射(single-pass tone mapping)以及相關(guān)功能。
無(wú)規(guī)則透明度(Order Independent Transparency):這兩種方法均不允許post-rendering area(粘貼渲染)效果,這種效果可能是不透明模式。下圖描述的是如果這種效果在出現(xiàn)透明表面之后再被應(yīng)用的話就會(huì)出現(xiàn)偽影(artifact)。
上圖具有pre-resolve效果和不具有這種效果的透明性:上面的圖像在應(yīng)用霧補(bǔ)?。╢og patch)之前把幾何和解析進(jìn)行了分類(lèi)處理;下邊的圖像應(yīng)用霧補(bǔ)丁,使得圖像表面透明,然后再解析圖像。透過(guò)翅膀,右圖中的霧是可見(jiàn)的,但是在左圖中卻看不到霧。
即使沒(méi)有額外的專(zhuān)門(mén)邏輯單元,Larrabee一樣可以通過(guò)將多透明表面存儲(chǔ)到一個(gè)per-pixel spatial數(shù)據(jù)結(jié)構(gòu)中的方式來(lái)支持無(wú)規(guī)則透明度(order independent transparency,OIT)。幾何渲染之后,我們可以在透明表明執(zhí)行效果,因?yàn)樵诜诸?lèi)以及解析圖像片段之前,每個(gè)表面都保留這各自的深度(depth)和顏色(color)。
不規(guī)則陰影映射(Irregular Shadow Mapping):陰影映射(Shadow mapping)是一種非常流行的適時(shí)陰影接近技術(shù)(shadow approximation technique),不過(guò)大部分執(zhí)行卻通常會(huì)帶來(lái)令人厭煩的鋸齒偽影。過(guò)去人們就一直在探求一種可以消除偽影的辦法。不規(guī)則陰影映射 (Irregular shadow mapping,ISM)為我們提供了一個(gè)非常好的解決辦法,而且不會(huì)給應(yīng)用編程帶來(lái)任何額外的負(fù)重。
為了執(zhí)行ISM,我們首先用可以用camera view模式捕捉到的深度樣品并建立一個(gè)燈光視圖(light view)模式三維數(shù)據(jù)結(jié)構(gòu)。然后通過(guò)增加某個(gè)渲染階段來(lái)制定化Larrabee的所有軟件圖形管線,這些渲染階段可以執(zhí)行l(wèi)ight view ISM光柵。由于陰影映射是在某個(gè)準(zhǔn)確位置被捕捉到的,所以被捕捉到的陰影映射是完全自由的。這種技術(shù)可以被用于操作適時(shí)硬陰影效果,正如上圖所示。#p#page_title#e#
Larrabee也適合執(zhí)行大量基于非光柵化的吞吐量應(yīng)用。以下是一個(gè)關(guān)于某些采樣可擴(kuò)性和特性的簡(jiǎn)要說(shuō)明。
游戲物理可擴(kuò)性性能(Game Physics Scalability Performance):上圖說(shuō)明Larrabee架構(gòu)是可以滿足互動(dòng)式硬體(interactive rigid body)、流體(fluid)以及布料模擬運(yùn)算法(cloth simulation algorithms)對(duì)性能的不斷提升的要求。
游戲物理(Game Physics):我們已經(jīng)了解了Larrabee在不同數(shù)量核心下的幾款游戲物理工作量的可擴(kuò)性模擬分析。上圖表明某些游戲物理的硬體(rigid body)、流體(fluid)以及布料(cloth)基準(zhǔn)和運(yùn)算法則是可以被測(cè)量的。采用64核心設(shè)計(jì)的Larrabee可以取得高于50%的資源利用,而且在某些情況下,Larrabee達(dá)到了接近線性平行運(yùn)算速度。游戲的rigid body模擬基于流行的10K大小的“城堡(castle)”破壞場(chǎng)景。游戲fluid模擬基于平滑粒子流體力學(xué)(smoothed particle hydrodynamics,SPH)運(yùn)算法則。
上圖描述的是Larrabee的適時(shí)光線追蹤:一幅需要4M光線的1Kx1K樣品圖像。光線追蹤器采用C++語(yǔ)言執(zhí)行,某些手工編寫(xiě)(hand-coded)的集合代碼可以用來(lái)執(zhí)行諸如光線交叉(ray intersection)之類(lèi)的重要操作。Kd-trees(線段樹(shù))一共為25MB,是由一幀一幀的圖像組成的。一開(kāi)始從視點(diǎn)發(fā)出的光線(primary rays)以及反射光線(reflection rays)被16光束測(cè)試。幾乎所有的234K三角形圖像對(duì)于一開(kāi)始從視點(diǎn)發(fā)出的光線(primary rays)以及反射光線(reflection rays)的光線都是可見(jiàn)的。#p#page_title#e#
Larrabee的推出是大勢(shì)所趨,在它問(wèn)世之前,英特爾已經(jīng)推出過(guò)多款顯示芯片,最早期的包括本文中提到的i860以及在此之后的i740和各種整合圖形芯片組。雖然Intel強(qiáng)調(diào)Larrabee是基于x86,但事實(shí)上LRBni(Larrabee的新指令集)和x86的差別相當(dāng)大,只是這個(gè)套指令集在設(shè)計(jì)的時(shí)候就被設(shè)計(jì)為依賴(lài)于現(xiàn)有x86上而已。不過(guò)在英特爾公布LRBni的微代碼編碼方式之前,這個(gè)問(wèn)題還真的不好弄清楚。
按照 heise.de的報(bào)道,英特爾的副總裁Joseph D. Schutz表示Larrabee會(huì)在2010年上半年推出,擁有低端到高端的完整產(chǎn)品線,但是具體的時(shí)間暫時(shí)不能確定,原因是這中間需要進(jìn)行步進(jìn)修改以及除錯(cuò)等步驟,相比之下開(kāi)發(fā)人員能在早得多的時(shí)候獲得原型版的Larrabee。
如果不出所料,Larrabee問(wèn)世的時(shí)候,NVIDIA 和 AMD 都已經(jīng)有了基于40nm的DirectX 11產(chǎn)品線,Larrabee首先需要在這個(gè)對(duì)決中站穩(wěn)腳跟,而后才能討論并行計(jì)算的問(wèn)題,因?yàn)闆](méi)多少人只是為了一塊運(yùn)算加速卡而購(gòu)買(mǎi)產(chǎn)品,Intel 在Larrabee上的研發(fā)經(jīng)費(fèi)需要一個(gè)大容量的市場(chǎng)來(lái)分?jǐn)?,這個(gè)市場(chǎng)仍然是游戲卡市場(chǎng),要同時(shí)在游戲和計(jì)算上開(kāi)辟新的市場(chǎng),Larrabee的前路需要INTEL用堅(jiān)定來(lái)鋪墊