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