在高性能計(jì)算領(lǐng)域,一般從兩個(gè)方向出發(fā)追求高的計(jì)算效能。一是向上擴(kuò)展 (scale-up),用更高頻、更多內(nèi)核的CPU;另一個(gè)方向是向外擴(kuò)展 (scale-out),購(gòu)置更多的CPU 及所需的附加硬件設(shè)備。過去10年高性能計(jì)算的主流方向都是不斷向外擴(kuò)展,使用更多節(jié)點(diǎn),把問題分拆,并行在多個(gè)節(jié)點(diǎn)上運(yùn)行。
但隨著計(jì)算規(guī)模增大,向外擴(kuò)展的缺點(diǎn)也變得越發(fā)明顯。首先,客戶在初期要購(gòu)買大量服務(wù)器,一次性投入高。其次,隨著機(jī)器增多,機(jī)房的電費(fèi)和空間費(fèi)用也會(huì)提高。另外也要求運(yùn)維人員懂得靈活處理硬件故障事故。對(duì)大型數(shù)據(jù)中心來說,硬件故障是每天都可能會(huì)發(fā)生的事。
近年來,業(yè)內(nèi)廠商開始研發(fā)并行處理圖像的技術(shù)。人們通過圖像處理和并行計(jì)算的自然關(guān)系,把技術(shù)從狹義的像素處理推廣到廣義的并行計(jì)算,研發(fā)出利用圖像處理器進(jìn)行運(yùn)算的技術(shù) 。
開發(fā)GPGPU
目前有GPU廠商專門推出了運(yùn)算平臺(tái)CUDA(Compute Unified Device Architecture),該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問題。 但是在 CUDA上實(shí)現(xiàn)疊前時(shí)間偏移算法需要根據(jù) CUDA的編程環(huán)境對(duì)核心算法重新設(shè)計(jì)。當(dāng)運(yùn)行GPU指令集時(shí),線程分為加載和處理階段。加載階段通過內(nèi)存聚合方式 (memory coalescing) 訪問GPU內(nèi)存,增加每次讀取的數(shù)據(jù)使用量。為進(jìn)一步提高計(jì)算速度,有些GPU解決方案針對(duì)SM的流水線特性,優(yōu)化當(dāng)中邏輯和循環(huán)語(yǔ)句,盡可能減少數(shù)據(jù)傳輸量。
在核心算法上,可以把分布式集群及 GPU 計(jì)算兩個(gè)概念結(jié)合。一個(gè)節(jié)點(diǎn)做母節(jié)點(diǎn) (parent node),其余為計(jì)算節(jié)點(diǎn) (compute node)。母節(jié)點(diǎn)把數(shù)據(jù)分拆發(fā)布到各計(jì)算節(jié)點(diǎn)。計(jì)算節(jié)點(diǎn)執(zhí)行GPU 指令集時(shí)把指令輸出到多塊GPU卡上。計(jì)算出局部結(jié)果后返還給計(jì)算節(jié)點(diǎn),計(jì)算節(jié)點(diǎn)再把結(jié)果返還給母節(jié)點(diǎn)。母節(jié)點(diǎn)把所有結(jié)果疊加起來得出最后結(jié)果。當(dāng)中設(shè)計(jì)軟件時(shí)要考慮到硬件運(yùn)行時(shí)出現(xiàn)故障的處理方法,定期做斷點(diǎn)備份及自動(dòng)修復(fù)。
GPGPU硬件架構(gòu)上可有兩種配置:一種為GPU 卡分布式配置,另一種為GPU卡集中式配置 (圖1)。
圖2 的接駁方法好處是GPU 卡可一并和節(jié)點(diǎn)管理。但GPU卡用電量高,且需要有多條PCIe 2.0×16 的插槽才能在單臺(tái)節(jié)點(diǎn)上插多塊GPU卡。這適合用戶于一開始購(gòu)置計(jì)算節(jié)點(diǎn)時(shí)就已準(zhǔn)備支援多塊GPU卡,在供電及PCIe插槽要求上都滿足到運(yùn)行多塊GPU卡。反之,圖2則為在不需升級(jí)每臺(tái)計(jì)算節(jié)點(diǎn)的前提下的配置。以一臺(tái)可高密度插放GPU卡的 GPU 服務(wù)器來運(yùn)行,計(jì)算節(jié)點(diǎn)以1至2塊HIC (Host Interface Card) 卡連到GPU服務(wù)器上。
GPU算法 vs CPU算法
比較 GPU及 CPU 算法做偏移所需的時(shí)間,圖3為在不同 CPU 核及 不同 GPU 卡上所得的計(jì)算結(jié)果。
以上的CPU及GPU測(cè)試平臺(tái)為:
CPU 平臺(tái)為 10 臺(tái)節(jié)點(diǎn)集群,每節(jié)點(diǎn)有 兩 個(gè) 雙核 2.0GHz CPU;
GPU 1 平臺(tái)為 1 臺(tái)GPU節(jié)點(diǎn),共 1 塊 NVIDIA Geforce GTX 580 卡;
GPU 2 平臺(tái)為 兩 臺(tái)GPU節(jié)點(diǎn),共 2 塊 NVIDIA Geforce GTX 580卡;
GPU 3 平臺(tái)為 兩 臺(tái)GPU節(jié)點(diǎn),共 4 塊 NVIDIA Geforce GTX 580卡。
以處理10GB數(shù)據(jù)為例,CPU平臺(tái)上以20個(gè)CPU計(jì)算需時(shí)522.1秒。而GPU3平臺(tái)上以4塊GPU卡計(jì)算需時(shí)僅52.6秒。簡(jiǎn)單比較CPU及GPU做疊前時(shí)間偏移的運(yùn)算力: (552.1×20) / (52.6×4)。單塊GPU顯卡達(dá)到接近 50 臺(tái)電腦的運(yùn)算能力。以此簡(jiǎn)單推算硬件成本,配置以上CPU測(cè)試平臺(tái)需要預(yù)算約 30萬(wàn)元。而構(gòu)建GPU3平臺(tái)的配置則需約10萬(wàn)元。
在電費(fèi)成本上,搭建CPU 測(cè)試平臺(tái)及一年的電費(fèi)投入約32.19萬(wàn)元。而 GPU2 測(cè)試平臺(tái)及一年的電費(fèi)投入約 10.876萬(wàn)元。搭建GPU平臺(tái)節(jié)省高達(dá)2/3的成本。
從以上的推算看出,在合適情況下使用GPGPU技術(shù),把計(jì)算量大、并行化高的代碼移植到 GPU 后,能大大提升運(yùn)算效能,減少節(jié)點(diǎn)使用量,節(jié)省硬件及運(yùn)維成本。GPGPU技術(shù)可與現(xiàn)時(shí)分布式計(jì)算并合使用, GPU卡也可高密度地插在服務(wù)器內(nèi)。所以一件大的計(jì)算工作可先分布到各計(jì)算節(jié)點(diǎn),而每節(jié)點(diǎn)再調(diào)度多塊GPU卡做運(yùn)算,最后把結(jié)果返還給母節(jié)點(diǎn)。這樣只用數(shù)臺(tái)服務(wù)器就可取得一個(gè)機(jī)柜傳統(tǒng)集群的運(yùn)算能力,無論在硬件及日后運(yùn)維上都節(jié)省了不少成本。
作者簡(jiǎn)介
本文由聯(lián)科集團(tuán)(中國(guó))有限公司商務(wù)總監(jiān)吳秉熹博士及商務(wù)主任朱振明共同撰寫,本文得到了石油行業(yè)計(jì)算機(jī)用戶協(xié)會(huì)在GPU-PSTM開發(fā)上的全力支持,如讀者對(duì)本文有何疑問,可與作者h(yuǎn)kbd@clustertech.com 聯(lián)系。