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