天天看點

《OpenACC并行程式設計實戰》—— 第1章 并行程式設計概覽 1.1 加速器産品

本節書摘來自華章出版社《openacc并行程式設計實戰》一 書中的第1章,第1.1節,作者何滄平,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

并行程式設計概覽

對絕大多數人而言,程式設計語言隻是一個工具,講究簡單高效。科學家的主要精力應該用在科研創新活動上,程式設計工作僅僅是用來驗證創新的理論,程式設計水準再高也不可能獲得諾貝爾獎。對學生和企業程式員而言,技術無窮盡,永遠學不完,不用即忘,應該認清技術發展方向,學習有前途的技術,不浪費青春年華。

openacc語言專為超級計算機設計,是以讀者需要了解超級計算機的技術演進方向,特别是主流加速器的體系架構、程式設計模型,看清openacc的應用場景,有的放矢。普通讀者雖然不會用到大型機群,但小型機群甚至單台伺服器、普通顯示卡的計算模式都是相同的。

最近幾年的著名超級計算機(見附錄a)均采用加速器作為主要計算部件,可預見未來幾年的上層應用仍将圍繞加速器展開。

超級計算機的加速器曆史上有多種,本節隻介紹目前流行的兩種:英偉達gpu和英特爾融核處理器。加速器的實體形态是pcie闆卡,樣子大緻如圖1.1所示,圖1.2是拆掉外殼後的樣子,正中央的是gpu晶片,晶片周圍的小黑塊是顯存顆粒,金黃色的邊緣處是與pcie連接配接的金手指,通過pcie插槽與cpu相連。圖1.3中的機架式伺服器左下部裝有4塊gpu卡,圖1.4是伺服器的主機闆俯視圖,箭頭處就是4個pcie插槽。

從邏輯關系上來看,目前市場在售的英特爾伺服器cpu中已經內建了記憶體控制器和pcie通道。2顆cpu通過1個或2個qpi接口連接配接,cpu通過内置的記憶體控制器連接配接ddr3

或ddr4記憶體條,gpu加速器通過pcie總線與cpu相連(圖1.5)。2016年6月主流的英特爾至強e5-2600 v3和e5-2600 v4 cpu每顆擁有40個pcie lan,而每塊gpu的接口需要16個pcie lan,是以每顆cpu上最多全速挂載2塊gpu。有些伺服器的pcie ×16插槽上隻安排×8,甚至×4的資訊速率,可以挂載更多的gpu。

英特爾融核處理器在伺服器上的位置與gpu一樣,不再贅述。

1.1.1 英偉達gpu

通用計算gpu是英偉達公司發明的,每隔2~3年就會更新硬體架構。通用計算gpu

的第一代架構代号是g80,每8個核心封裝在一起稱為一個流式多處理器(streaming multiprocessor,sm),2個流多處理器共用一塊l1緩存,所有的核心共用l2緩存,任意核心都能通路晶片外部的gpu顯存(圖1.6中的fb)。從圖1.6中可以看出,g80架構gpu産品最多可以有128個核心。

接下來的架構代号是gt200,然後是fermi。fermi架構(圖1.7)最多包含14個流式多處理器,每個流式多處理器包含32個核心。6個dram接口,1個pcie接口(圖1.16中的host interface)。

流式多處理器内部元件也相當多(圖1.8):1個指令緩存(instruction cache),2組warp排程器(warp scheduler)、分發單元(dispatch unit),一堆寄存器;最重要的是32個核心,每個核心擁有一個單精度浮點單元和一個整數單元;16個load/store單元;4個特殊功能單元(special function unit),負責計算雙精度浮點數、三角函數、超越函數、倒數、平方根等。共享記憶體+l1緩存共64kb,可以靈活配置。

接下來是kepler架構(圖1.9),這一代架構最大可以包含15個流式多處理器(streamong multiprocessor extreme,smx)和6個64 位記憶體控制器。不同的産品型号将使用不同的配置,可以包含13或14個smx,多種參數都有更新和更改。kepler 架構的主要設計目标是提高用電效率,台積電的28nm 制造技術在降低功耗方面起着重要的作用。kepler 架構還提高了雙精度計算能力。

流式多處理器smx(圖1.10)包含192個單精度核心、64個雙精度單元、32個特殊功能單元(sfu)和32個加載/存儲單元(ld/st)、3個warp排程器、6個分發器、一大堆寄存器。每個核心由1個浮點計算單元和1個整數算術邏輯單元組成,支援融加(fma)運算。每個smx擁有64kb的片上存儲器,可配置為48kb的共享存儲器和16kb的l1緩存,或配置為16kb的共享記憶體和48kb的l1緩存。

這裡簡要介紹市面的主力gpu産品型号,見表1.1。

2016年4月,英偉達在gpu技術會議(gpu technology conference)上釋出了新一代pascal架構和旗艦産品tesla p100,引入一些新特性。

極緻性能:為高性能計算、深度學習等計算領域設計。雙精度浮點峰值5.3 tflops,單精度浮點峰值10.6 tflops,專為深度學習設計的半精度浮點峰值達到驚人的21.2 tflops。按雙精度峰值對比,tesla p100是同期主力高端cpu英特爾至強e5-2680 v4的10倍。按照深度學習應用性能對比,tesla p100是e5-2680 v4的20倍。

nvlink:為應用擴充性全新設計的高速、高帶寬互連協定。

hbm2:快速、大容量、高效片上堆疊式記憶體。

統一記憶體:用統一的代碼來管理主機cpu記憶體和gpu記憶體,友善開發代碼。

pascal最強勁的是gp100硬體架構(圖1.11),包含60個pascal流式多處理器和8個512位記憶體控制器(共4096位)。每個流式多處理器擁有64個cuda核心和4個紋理單元。gp100共有3840個單精度核和240個紋理單元。每個記憶體控制器附帶512kb的l2緩存,每個hbm2堆疊記憶體由一對記憶體控制器管理。l2緩存共計4096kb。tesla p100共配置有56個流式多處理器。

gp100的第6代流式多處理器架構提升了cuda核心的使用率和能源效率,可以運作在更高的頻率上。每個流多處理器包含64個單精度(fp32)cuda核心,分成兩部分,每部分32個;含有1個指令緩沖器,1個warp排程器,2個分發單元。與前面的kepler、maxwell流式多處理器相比,每個核心分到的寄存器數量增多,進而可以運作更多的線程。由于增加了流式多處理器,共享記憶體總量也相應增加,合并帶寬也翻番。每個流式多處理器中更多的共享記憶體、寄存器、warp,使代碼可以更高效地執行。pascal架構中的fp32 cuda核心新增一項功能:既能處理16位精度又能處理32位精度的指令和資料,fp16操作的吞吐率是fp32的2倍。

如圖1.12所示,每個流式多處理器擁有32個雙精度浮點單元,是單精度核心的一半。共享記憶體獨占64kb,不再與l1緩存互相調配。紋理和l1緩存共用一塊緩存,可以靈活配置。

tesla p100的高帶寬記憶體(high bandwidth memory 2,hbm2)跟前面幾代相比有顯著變化:從gpu晶片封裝的外部移到了内部(圖1.13),安裝在同一塊基闆上,距離更近,傳輸更快。由于在豎直方向進行堆疊,占用的晶片面積更小,16gb的容量原來需要十幾個gddr5顆粒,現在隻需要4個hbm2顆粒。

hbm2記憶體帶來的另一個好處是原生支援錯誤校驗碼(error correcting code,ecc)功能。有些應用會用到很多塊gpu,計算時間也很長,對資料差錯十分敏感,一旦中間步驟有微小誤差,後續計算就會将誤差迅速放大,污染最終結果。ecc技術能夠檢測并糾正1位差錯。

先前使用的gddr5顯存内部不提供ecc功能,僅能偵測gddr5總線上的錯誤,記憶體控制器中的錯誤或dram自身的錯誤都不能偵測。kepler架構gpu的ecc功能實作方法是劃出6.25%的容量專門用來存放校驗資料,進而記憶體帶寬将損失12%~15%。

由于hbm2自帶ecc功能,tesla p100就不再損失記憶體容量和記憶體帶寬。tesla p100的寄存器、共享記憶體、l1緩存、l2緩存和hbm2記憶體都能偵測2位錯誤并糾正1位錯誤。

2012年,英特爾推出至強phi融核處理器,代号knights corner,融核處理器又稱為mic(many integrated core)。實體形态上跟gpu一樣是pcie闆卡(圖1.14),分為被動散熱和主動散熱(帶風扇),具體分為6個型号(表1.2),市面上常用的型号是5110p和7120。

此代架構mic擁有最多63個核心(圖1.15),每個核心有512kb的l2緩存,所有核心使用雙向環互連。每個核心有一個512位向量處理單元,支援4個硬體線程,線程并發隐藏延時。

mic上程式設計模式有4種(圖1.16):主機模式(multicore only)、解除安裝模式(multicore hosted with many-core offload)、對稱模式(symmetric)、原生模式(many-core only)。主機模式中隻使用主機cpu,不在mic上運作代碼;解除安裝模式跟gpu的模式類似,将部分代碼解除安裝到mic上運作;對稱模式将cpu核心和mic核心一視同仁,但是兩種核心的運算能力不一樣,極易導緻負載不均;原生模式隻使用mic運作程式,cpu空閑。實際上,常用的還是解除安裝模式和原生模式。

此代mic的理論性能是同時期主流cpu的3.2~3.45倍,實測性能2.2~2.9倍。是以,使用mic編寫運作程式不要期待過高的加速比。

第二代mic的代号為knights landing,開發版于2016年4月開始發貨,已經不是pcie闆卡,而是可以獨立運作的cpu。

knights landing由36片組成(圖1.17),每片包含2個cpu核心,每個核心包含2個vpu(vector processing units,向量處理器單元)。實體形态上,不再是協處理器,而是真正的中央處理器,與通常的cpu一樣使用。每個cpu核心可以運作4個線程,晶片的亂序執行也有實質性提升,每個線程的性能提高約3倍,整個處理器的理論峰值約為3tflops。晶片上有16gb mcdram(multi-channel dram)記憶體,6個記憶體通道支援高達384gb ddr4外部記憶體。與knights corner中的環狀拓撲結構不同,新款處理器中使用了網狀的拓撲結構。盡管圖1.17顯示為6×7,但是由于封裝方面的一些問題,布局上可能會調整為4×9。

與2016年2月釋出的英特爾至強系列cpu的主力型号e5-2680 v4(主頻2.4ghz,14核心,理論峰值537.6gflops)相比,knights landing的理論峰值提高至約5.6倍。

繼續閱讀