文/王鵬 謝強(qiáng)
GPU的現(xiàn)在與未來
文/王鵬 謝強(qiáng)
GPU代表了目前高性能計(jì)算的最前沿,對(duì)科學(xué)及工程計(jì)算正在產(chǎn)生著深遠(yuǎn)的影響。
自2004年以來,由于功耗和存儲(chǔ)器速度等原因,CPU單核的性能已經(jīng)幾乎停止提升。所以最近幾年所有的新CPU都是靠不停增加核的數(shù)目來提高芯片的整體性能。這使得多核并行計(jì)算成為所有開發(fā)人員都必須要面對(duì)的問題。因此什么樣的多核體系結(jié)構(gòu)更適合并行計(jì)算成了一個(gè)重要問題。
從體系結(jié)構(gòu)的觀點(diǎn)來看,CPU本質(zhì)上是一種針對(duì)延遲(latency)優(yōu)化的體系結(jié)構(gòu)。它的首要設(shè)計(jì)目標(biāo)是優(yōu)化單線程的執(zhí)行性能。與此對(duì)應(yīng)的趨勢(shì)是針對(duì)吞吐量(throughput)優(yōu)化的眾核體系結(jié)構(gòu)。比如Sun的Niagara處理器,IBM的Cell處理器,以及nVIDIA的圖形處理器(GPU)。簡(jiǎn)單地說,吞吐量?jī)?yōu)化處理器的策略是降低單線程的性能但以在眾核上同時(shí)運(yùn)行大量線程的方式來提高總體處理能力(高吞吐量)。因此吞吐量?jī)?yōu)化處理器的總體性能往往比延遲優(yōu)化處理器高得多。比如最新GPU的浮點(diǎn)峰值通常是最新CPU的十倍以上。
在2004年之前,吞吐量?jī)?yōu)化處理器主要被用于對(duì)性能要求極高的特殊類型應(yīng)用,如計(jì)算機(jī)圖形學(xué)(GPU與Cell)或大規(guī)模數(shù)據(jù)庫(kù)處理(Niagara)。歷史上這些領(lǐng)域?qū)π阅軒缀鯚o止境的需求推動(dòng)了吞吐量?jī)?yōu)化處理器性能的快速提升。在并行計(jì)算成為必須之后,由于吞吐量?jī)?yōu)化處理器更高的性能,很多開發(fā)人員開始認(rèn)識(shí)到它們是一種對(duì)很多并行應(yīng)用更適合的體系結(jié)構(gòu)。所以近年吞吐量?jī)?yōu)化處理器在通用并行計(jì)算中變的越來越重要。
一個(gè)實(shí)際的應(yīng)用往往包括需要低延遲的部分(如輸入輸出邏輯控制)和需要高吞吐量的部分(如核心算法計(jì)算)。因此無論是延遲優(yōu)化處理器還是吞吐量?jī)?yōu)化處理器都不是普適的理想方案。異構(gòu)計(jì)算(heterogeneous computing)的核心想法就是優(yōu)化使用資源,用合適的工具來解決合適的問題。程序需要低延遲的部分就在CPU上計(jì)算,需要高吞吐量的部分就在GPU上計(jì)算。實(shí)踐證明對(duì)很多大計(jì)算量的應(yīng)用使用異構(gòu)計(jì)算技術(shù)都可以得到非常顯著的性能加速。比如圖形圖像處理,視頻處理,分子動(dòng)力學(xué),地質(zhì)勘探,流體力學(xué),數(shù)據(jù)挖掘,生物信息學(xué)等都是適合異構(gòu)計(jì)算的應(yīng)用。
使用GPU的異構(gòu)計(jì)算在高性能計(jì)算中已是一種主流技術(shù)。比如Top500前五名有三臺(tái)機(jī)器都是GPU異構(gòu)集群。美國(guó)橡樹嶺國(guó)家實(shí)驗(yàn)室剛宣布了他們計(jì)劃在2012年用nVIDIA的GPU來搭建一臺(tái)峰值20 Pflop/s的集群。在我國(guó),天津超算中心2010年使用了7168個(gè)nVIDIA的GPU搭建了峰值4.7 Pflop/s,Linpack實(shí)測(cè)性能2.57 Pflop/s的天河1A系統(tǒng)。這套系統(tǒng)在2010年的Supercomputing大會(huì)上排在了Top500的第一名。
圖1 GPU體系結(jié)構(gòu)示意
順應(yīng)并行計(jì)算的潮流,近年來nVIDIA對(duì)GPU體系結(jié)構(gòu)進(jìn)行了很多針對(duì)通用并行計(jì)算的創(chuàng)新。在今天,nVIDIA的Tesla GPU已是一款專門針對(duì)通用并行計(jì)算設(shè)計(jì)的完全可編程眾核芯片。只是因?yàn)闅v史原因,我們?nèi)苑Q其為GPU。
處理器市場(chǎng)的傳統(tǒng)并行架構(gòu)主要分為MIMD(多指令多數(shù)據(jù)流)與SIMD(單指令多數(shù)據(jù)流)兩種,各有其優(yōu)缺點(diǎn)。SIMD性能更高但MIMD更靈活。GPU是一種綜合MIMD與SIMD兩種架構(gòu)優(yōu)點(diǎn)的新并行架構(gòu)。如圖1所示,GPU由多個(gè)流多處理器(SM)構(gòu)成,每個(gè)SM包含多個(gè)核。每個(gè)SM類似于一個(gè)SIMD處理器。但與傳統(tǒng)SIMD有一個(gè)重要區(qū)別:SM上的不同的線程既可執(zhí)行同樣的指令,也完全允許執(zhí)行不同的指令,只是前者性能更高。這就兼顧了SIMD的高性能與編程的靈活性。這種更靈活的SIMD架構(gòu)稱為SIMT(Single Instruction Multiple Thread)架構(gòu)。此外,每個(gè)SM有自己完全獨(dú)立的指令調(diào)度器,因此簡(jiǎn)單的說GPU是由多個(gè)SIMT構(gòu)成的MIMD處理器。
以nVIDIA最新Fermi架構(gòu)的Tesla M2090 為例,它由16個(gè)SM組成。每個(gè)SM包含32個(gè)核。每個(gè)核可以在一個(gè)時(shí)鐘周期進(jìn)行最高兩次單精度或一次雙精度浮點(diǎn)運(yùn)算。因此在1.3GHz的時(shí)鐘頻率下,一個(gè)M2090的512個(gè)核加起來就有1.33 Tflop/s的單精度峰值性能以及665 Gflop/s的雙精度峰值性能。這是目前最新多核CPU浮點(diǎn)性能的近10倍左右。M2090的內(nèi)存總線寬度為384位,內(nèi)存頻率1.84GHz, 使得內(nèi)存帶寬達(dá)到177 GB/s的峰值。這是最新CPU的5倍以上。因此無論是計(jì)算密集型還是內(nèi)存密集型的應(yīng)用,都可以在GPU上得到顯著的加速。
GPU已被大量科研與工業(yè)用戶采用來顯著提升程序性能。在科研領(lǐng)域,尤其在地球科學(xué),生物醫(yī)藥,航空航天,天文,核科學(xué),材料科學(xué),金融等計(jì)算需求較大的學(xué)科,GPU的使用已經(jīng)非常普遍。
nVIDIA在2007年推出了在GPU上的并行編程模型CUDA。CUDA編程環(huán)境在nVIDIA的網(wǎng)站上可以免費(fèi)下載。與很多以前的并行計(jì)算環(huán)境不同,CUDA開發(fā)并不只在高端的集群上才能進(jìn)行。大量的普通筆記本或臺(tái)式機(jī)電腦,只要有nVIDIA顯卡,都可以進(jìn)行CUDA的開發(fā)。一個(gè)CUDA程序完全可以在普通電腦上調(diào)試開發(fā),完成了再放在高端GPU集群上運(yùn)行,程序不需要任何修改。
CUDA并不是一個(gè)全新的編程語(yǔ)言,而是類似OpenMP那樣的對(duì)C/C++語(yǔ)言的一個(gè)簡(jiǎn)單擴(kuò)展。CUDA程序的執(zhí)行方式也很類似OpenMP。程序初始在CPU上以單線程執(zhí)行,也許進(jìn)行一些輸入輸出及邏輯控制計(jì)算。當(dāng)執(zhí)行到一個(gè)耗時(shí)的并行函數(shù)時(shí),程序就會(huì)在G P U上產(chǎn)生大量線程執(zhí)行。GPU上的計(jì)算結(jié)束后控制又會(huì)回到單線程的CPU程序,直到遇到下一個(gè)耗時(shí)的并行函數(shù)。
由此我們可以看到,以C/C++和Fortran寫的應(yīng)用如果想在GPU上加速,就只需要把耗時(shí)的函數(shù)用CUDA移植,而代碼其他部分完全不用修改。很多代碼量大的程序,其實(shí)耗時(shí)部分的代碼量往往遠(yuǎn)小于總代碼量。這種情況下往往很快就能把應(yīng)用移植到GPU達(dá)到顯著加速。
對(duì)于用MPI寫的并行程序,移植到GPU集群上其實(shí)與移植單進(jìn)程程序到GPU上并無本質(zhì)區(qū)別。在這方面CUDA也類似OpenMP,它只是加速每個(gè)MPI進(jìn)程的計(jì)算而不涉及節(jié)點(diǎn)間的通信。所有的節(jié)點(diǎn)之間的通信,完全是使用已有的MPI框架。所以只要把單進(jìn)程的計(jì)算移植到CUDA上,絕大多數(shù)情況下就自動(dòng)有了一個(gè)可以在GPU集群上運(yùn)行的MPI-CUDA程序。
所以總結(jié)來說,CUDA具有普遍可得的開發(fā)環(huán)境,移植時(shí)只需修改耗時(shí)部分的代碼,不用對(duì)程序其它部分包括MPI框架進(jìn)行修改。這些特性保證了大量已有的程序可以快速地移植到GPU集群上。這是CUDA迅速被廣大開發(fā)人員接受得到廣泛應(yīng)用的重要原因。
除了CUDA外,開發(fā)人員也還有很多其它選擇。如OpenCL是一個(gè)類似CUDA的GPU編程標(biāo)準(zhǔn)。微軟也推出了針對(duì)GPU的編程語(yǔ)言DirectCompute以及即將推出的C++ AMP語(yǔ)言。PGI Fortran允許開發(fā)人員直接用Fortran的語(yǔ)法寫GPU kernel。PGI accelerator類似OpenMP, 開發(fā)人員只需要在耗時(shí)的循環(huán)外插入一些pragma,就能將其移植到GPU上。HMPP是類似PGI accelerator的另一種解決方案。PyCUDA是Python的CUDA接口。此外,P G I最近還發(fā)布了CUDA-x86。這個(gè)產(chǎn)品可以把CUDA代碼編譯在x86 CPU上執(zhí)行。這樣一個(gè)代碼版本就可以既在GPU又在CPU上運(yùn)行??偠灾珿PU有十分豐富的編程環(huán)境,可以滿足不同開發(fā)人員的各種需求。
GPU已被大量科研與工業(yè)用戶采用來顯著提升程序性能。
在科研領(lǐng)域,尤其在地球科學(xué)、生物醫(yī)藥、航空航天、天文、核科學(xué)、材料科學(xué)、金融等計(jì)算需求較大的學(xué)科,GPU的使用已經(jīng)非常普遍。只要翻一翻各個(gè)計(jì)算科學(xué)領(lǐng)域的頂級(jí)雜志,GPU計(jì)算的相關(guān)論文比比皆是。比如高性能計(jì)算著名的Gorden-Bell獎(jiǎng)近兩年的獲獎(jiǎng)?wù)撐亩际荊PU上并行化的工作。全世界有上千所大學(xué)已開設(shè)CUDA編程課程,CUDA已成為很多科研人員的一項(xiàng)基本技能。此外,科研人員中十分流行的工具M(jìn)atlab與Mathematica也已經(jīng)被移植到了GPU上,使得GPU在科研中的使用變得更容易。
石油領(lǐng)域因其對(duì)巨大計(jì)算量的需求,是最早采用GPU的用戶之一。GPU可以使地震資料的處理方法如疊前時(shí)間偏加速幾倍以上。更重要的是,只有在GPU出現(xiàn)后,采用更精確但更耗時(shí)的算法如逆時(shí)偏才變的有可能。所以目前世界上很多主要石油公司包括國(guó)內(nèi)的中石油都在使用GPU的解決方案。
在分子動(dòng)力學(xué)領(lǐng)域,由于粒子算法的高度并行性,幾乎所有重要的分子動(dòng)力學(xué)軟件都已被移植到了G P U,如A m b e r,NAMD, Charmm, LAMMPS,Gromacs等。它們的性能加速往往在十倍甚至幾十倍左右。中科院過程工程所最近在天河1A上用自主開發(fā)的GPU程序進(jìn)行了世界上性能最高的多體分子動(dòng)力學(xué)模擬,單精度性能達(dá)到了1.87 Pflop/s。
生物信息學(xué)作為一門數(shù)據(jù)驅(qū)動(dòng)的學(xué)科,大量算法具有高度數(shù)據(jù)并行性。因此GPU是十分合適的并行計(jì)算工具。比如世界最大的基因測(cè)序公司北京華大基因在他們2011年7月份的Bio-IT大會(huì)上已宣布的他們很多重要的處理軟件都已移植到了GPU上。GPU使華大基因可以以十倍以上的速度處理龐大的基因測(cè)序數(shù)據(jù)。
計(jì)算機(jī)輔助工程(CAE)領(lǐng)域的主要算法是有限元,有限差分及數(shù)值代數(shù)等。這些算法大多數(shù)都有高度并行性,因此都比較適合GPU。幾乎所有的主流商業(yè)有限元分析軟件都已支持GPU,包括Ansys, Abaqus,LS-Dyna等。使用GPU可以使有限元分析的速度提高2倍以上。此外在國(guó)內(nèi),比如上海交大的林新華老師小組將流體程序NS3D移植到GPU,達(dá)到了30倍以上的加速。南京航空航天大學(xué)的韓景龍教授小組機(jī)翼分析的流體程序在GPU上達(dá)到20倍以上的加速。中科院力學(xué)所的離散元計(jì)算力學(xué)軟件,更是達(dá)到了上百倍的加速效果。
以上只是一個(gè)簡(jiǎn)單介紹,實(shí)際GPU的使用遠(yuǎn)遠(yuǎn)超出這些范圍并且發(fā)展十分迅速。
GPU的性能提升僅僅是個(gè)開始。比如nVIDIA下一代的Kepler 架構(gòu)GPU,浮點(diǎn)峰值預(yù)計(jì)在現(xiàn)有Fermi架構(gòu)上會(huì)提升3倍左右。而Kepler之后的Maxwell架構(gòu),預(yù)計(jì)可以比Kepler再提升2到3倍。
G P U代表了目前高性能計(jì)算的最前沿。對(duì)科學(xué)及工程計(jì)算正在產(chǎn)生著深遠(yuǎn)的影響。我國(guó)已具備了GPU計(jì)算世界上最好的硬件天河1A,因此發(fā)展GPU高性能計(jì)算軟件已經(jīng)有了良好基礎(chǔ)。由于CUDA從推出到現(xiàn)在還不到四年,尚有大量的創(chuàng)新研究應(yīng)用工作需要開展。對(duì)我國(guó)高性能計(jì)算來說應(yīng)用GPU的異構(gòu)計(jì)算是一個(gè)迅速走到高性能計(jì)算應(yīng)用創(chuàng)新國(guó)際前沿的不可錯(cuò)過的機(jī)會(huì)。
(作者單位為nVIDIA公司)