GPU計算應(yīng)用日趨廣泛
隨著圖像處理技術(shù)的發(fā)展,對圖形和圖像的處理要求也越來越高,特別是3D技術(shù)的興起,使圖形圖像處理和3D計算技術(shù)已經(jīng)應(yīng)用到各種視頻游戲、電影產(chǎn)業(yè)、醫(yī)療成像、空間探索、遠程通信等方面。同時,伴隨著移動互聯(lián)網(wǎng)以及終端技術(shù)的發(fā)展和普及,云端須處理的數(shù)據(jù)量呈爆發(fā)式增長,對大數(shù)據(jù)、視頻和3D計算提出了更多的需求。
在通用計算領(lǐng)域,憑借高密度并行計算能力,GPU現(xiàn)已用于解決大量的通用計算問題,形成GPGPU(General-purpose computing>從硬件架構(gòu)角度,GPU的計算單元有兩層結(jié)構(gòu):SM(Streming Multiprocessor)和SP(Streming Processor)。一個GPU,實際上是一個SM的陣列,每個SM包含多個SP。SM相當(dāng)于CPU的核,相同的SM中的所有SP可同時處理不同的數(shù)據(jù)。例如費米架構(gòu)的GPU卡包含16個SM,每個SM包含32個SP。相對于一個四核的CPU來說,一個費米架構(gòu)的GPU,核數(shù)是其4倍,數(shù)據(jù)吞吐量是其32倍。在內(nèi)存方面,CPU程序模型的內(nèi)存層次由硬件解決,程序員無需關(guān)心。而GPU的設(shè)計則在SM層設(shè)計了程序員可見的共享內(nèi)存,可供程序員根據(jù)需要靈活使用以提高數(shù)據(jù)訪問速度。同時,GPU具有多個寄存器組,可快速進行線程間切換。
從編程模型的角度,CPU使用MIMD(多指令多數(shù)據(jù)) 指令模型,而GPU采用SIMT(單指令多線程)指令模型。CUDA的編程模型將線程組合在一起形成了線程束、線程塊以及線程網(wǎng)絡(luò),這些線程組合在一起形成了并行程序。相比CPU的按時間片串行執(zhí)行程序,GPU采用硬件并行的模式,需大量線程填充數(shù)據(jù)區(qū),利用有效的工作池來保證一直有事可做,不會出現(xiàn)閑置。當(dāng)遇到指令延遲與存儲器延遲引起的阻塞時,CPU處理器會閑置等待操作完成,而GPU的線程模型會快速切換到另外的線程,以實現(xiàn)對這種延遲的隱藏。
綜上所述,CUDA的硬件架構(gòu)和編程模型,決定其性能優(yōu)勢集中體現(xiàn)在硬件的并行計算上?;诟呙芏炔⑿刑幚淼腃UDA程序,可極大地提高異構(gòu)系統(tǒng)的整體性能。
基于CUDA構(gòu)建高密計算云
GPU虛擬化。構(gòu)建GPU高密計算云,必須解決GPU計算能力的虛擬化問題。目前,對于GPU虛擬化方法的研究,主要集中在三個方面。
設(shè)備仿真:采用模擬出完整的硬件環(huán)境的方式,為系統(tǒng)提供一個偽設(shè)備。實際仿真的設(shè)備位于CPU或內(nèi)存中。由于實際運行的CPU并不具備GPU的大規(guī)模并行計算能力,其執(zhí)行效率太低,在實際應(yīng)用環(huán)境中并不具有實用價值。
設(shè)備獨占:該方式允許用戶通過操作系統(tǒng)直接控制物理設(shè)備,本質(zhì)上是直接通過原生的顯卡驅(qū)使用GPU,跳過了VMM(Virtual Machine Monitor)的參與。由于缺少VMM跟蹤和硬件設(shè)備的維護狀態(tài),采用該方式無法支持虛擬機的實時遷移、快照等高級特性。
API虛擬化:該方式主要是對應(yīng)用程序接口API進行重定向。通過攔截所有與GPU相關(guān)的API,使用重定向或者模擬的方式,將計算任務(wù)發(fā)送至物理機,在物理機中利用相應(yīng)硬件去完成相應(yīng)功能,最后將計算的結(jié)果通過指定的通信方式返回給客戶端應(yīng)用程序。
目前,大多數(shù)虛擬化平臺對CUDA虛擬化的支持,僅達到設(shè)備獨占的層次,僅有Citrix XenServer可以達到Partitioning的高度,即在同一虛擬機上將一個物理GPU進行多個復(fù)用的功能,而對于更高級的功能,比如基于分時復(fù)用、熱遷移等功能都沒有涉及。
學(xué)術(shù)界對CUDA的虛擬化方法的研究則更加深入,主要集中在對API重定向技術(shù)上,已提出多個基于CUDA的API重定向的虛擬化可行方案,實現(xiàn)對上層應(yīng)用的完全透明,可無縫支持熱遷移、快照等功能。
基于CUDA的API重定向?qū)崿F(xiàn)GPU虛擬化。
自CUDA架構(gòu)提出以來,基于CUDA的API重定向的GPU虛擬化技術(shù),成為國內(nèi)外學(xué)者廣泛關(guān)注的一個熱點。由于API重定向技術(shù)的靈活性,越來越多的研究人員認定API重定向技術(shù)是GPU虛擬化技術(shù)的歸宿,提出了多種不同的解決方案,如vCUDA(Virtual CUDA)、rCUDA(remote CUDA)、GVim(GPU-accelerated Virtual achines)、gVirtuS等。
vCUDA通過API重定向的方法,攔截用戶層的所有CUDA的API調(diào)用,重定向到物理機器上執(zhí)行,實現(xiàn)對程序員的全透明,使得開發(fā)難度大大降低??紤]到RPC的性能開銷問題,該解決方案采用了懶惰RPC的方法,盡可能減少RPC調(diào)用的次數(shù)。具體的做法是通過累積、過濾、合并上層調(diào)用等方式,合理確定發(fā)送RPC的時機,將連續(xù)的API打包一次性發(fā)送,有效提高了系統(tǒng)性能。