GPU加速計算的狼來了?

提到流體仿真的計算速度,大概是每一個CFDer心中的痛了。每次設(shè)計部門更新模型之后,老板都會迫不及待的詢問新模型的氣動性能如何,恨不得立馬就畫出一條特性曲線。而為了霸占計算速度這只肥羊,許多硬件和軟件廠商都磨刀霍霍,甚至提出了實時仿真的概念。

而眾多加速計算手段中,GPU似乎是叫得最兇的那頭狼。然而,筆者十幾年前還在讀書的時候,GPU加速的概念已經(jīng)甚囂塵上。現(xiàn)在都2021年了,市場上漫山遍野的還是打著CPU標(biāo)簽的羊,GPU這頭狼到底來了嗎?

本著刨根問底的精神,我們還是從計算機的基本架構(gòu)聊起。

01、計算機架構(gòu)的基本分類

為了看清楚GPU這頭狼以及它和CPU的區(qū)別,我們還是先看一下計算機架構(gòu)的基本分類——弗林分類法,這是斯坦福大學(xué)教授 Michael J. Flynn 于1966年提出的一種計算機架構(gòu)的分類。弗林認為:計算由數(shù)據(jù)流和指令流組成,可以按串行(一次單個流)或并行(一次多個流)處理,按照排列組合可以分為不同類別。

GPU加速計算的狼來了?的圖1


單指令單數(shù)據(jù) (SISD)

SISD 是最簡單的架構(gòu),其中單個指令流(例如某個程序)在對一個數(shù)據(jù)流進行處理,簡單的理解就是一個人在做一件事情。早期的單核CPU處理器和一些簡單的計算設(shè)備使用這種架構(gòu),使用同一個內(nèi)存管理單元(MMU)的多核CPU處理器也屬于這種架構(gòu)。


單指令多數(shù)據(jù) (SIMD)

SIMD 架構(gòu)有單個控制處理器和指令存儲器,因此在任何給定時間點只能運行一條指令,該單指令被復(fù)制到每個內(nèi)核上運行。每個內(nèi)核都有自己的專用內(nèi)存,因此可以進行數(shù)據(jù)的并行處理,簡單的理解就是一群人在獨立的做著同一件事情。因此,在SIMD架構(gòu)中,多個處理器執(zhí)行同樣的指令,而數(shù)據(jù)不同,可并行處理大量數(shù)據(jù)。GPU通常基于這種架構(gòu)。


多指令單數(shù)據(jù) (MISD)

MISD 架構(gòu)與 SIMD 恰恰相反。MISD使用多條指令同時處理同一數(shù)據(jù)流,以評估結(jié)果的一致性或差異,簡單的理解就是一個人通過N種方法做同一件事情,看看結(jié)果是否一致。MISD 是一種不常見的架構(gòu),通常用于容錯要求很高的場景,比如用于控制航天飛機的計算機。


多指令多數(shù)據(jù) (MIMD)

MIMD 架構(gòu)同時并行處理指令流和數(shù)據(jù)流,多個處理器獨立地針對不同的數(shù)據(jù)流執(zhí)行指令流,簡單的理解就是多個人處理多件事情。當(dāng)今具有多處理器的計算機通常基于MIMD,比如高性能計算機或工作站。使用多個內(nèi)存管理單元的多核CPU處理器也屬于這種架構(gòu)。



02、GPU到底快在哪里?

當(dāng)我們理解了CPU和GPU在基本架構(gòu)層面上的差異,大概就能理解兩者在計算性能方面的巨大差異。CPU有龐大而廣泛的指令集,可與更多的計算機組件(例如內(nèi)存、輸入和輸出)交互以執(zhí)行復(fù)雜的指令;而GPU 是一種專門的協(xié)處理器,只有在高數(shù)據(jù)吞吐量的任務(wù)上表現(xiàn)出色,而在其他任務(wù)上的表現(xiàn)則不盡如人意。

GPU加速計算的狼來了?的圖2

CPU更強調(diào)指定運行的低延遲,其處理方式主要為串行,如果遇到多任務(wù)并發(fā)需求,則只能通過切換進行,切換時 CPU 必須重置寄存器和狀態(tài)變量、刷新緩存等等。不過CPU 經(jīng)過延遲優(yōu)化,在多個任務(wù)之間的切換速度非常快,讓人感覺它在并行處理任務(wù),但本質(zhì)上,它仍為一次運行一項任務(wù)。因此CPU像一個學(xué)識淵博的專家,可迅速處理各種不同難度的任務(wù),但面對源源不斷的重復(fù)性勞動時也會犯愁。


GPU加速計算的狼來了?的圖3

因此想要極限壓榨CPU的性能,需要靠不斷提高主頻來提高它的運行速度,比如常見的CPU主頻為2~4GHz。相比之下,GPU更強調(diào)高數(shù)據(jù)吞吐量,其核心的主頻通常為1GHz左右,提高處理速度除了提高主頻和架構(gòu),也常常通過“堆料”的方式進行,即增加SMs(streaming-multiprocessors 流處理器)的數(shù)量。因此相對于CPU,GPU更像一群中學(xué)生,可同時處理一大批簡單運算,但面對復(fù)雜任務(wù)則會捉肘見襟。

GPU 最適合于重復(fù)性和高度并行的計算任務(wù),最常規(guī)也是最初始的應(yīng)用便是圖形渲染和顯示。后來人們發(fā)現(xiàn)它對多組數(shù)據(jù)執(zhí)行并行操作的能力,也非常適合于某些非圖形任務(wù),例如機器學(xué)習(xí)、金融模擬、科學(xué)計算等大規(guī)模且反復(fù)運行相同數(shù)學(xué)函數(shù)的活動。

GPU加速計算的狼來了?的圖4

提到大規(guī)模的重復(fù)計算,除了CFD,相信小伙伴們還會第一時間想到挖礦。沒錯,在過去幾年中,GPU被用于挖掘比特幣或以太坊等加密貨幣,成為礦工們的最愛。小伙伴們?nèi)绻タ匆豢幢忍貛诺膬r格,估計要掩面痛哭,感慨當(dāng)年入錯行:同樣是搞計算的,做人的差距怎么那么大捏?

GPU加速計算的狼來了?的圖5

03、GPU市場的迅猛發(fā)展

影音和游戲產(chǎn)業(yè)是GPU快速發(fā)展的核心助推器,曾經(jīng)可以生產(chǎn)GPU的廠家也很多。不過經(jīng)過多年的洗牌,當(dāng)今GPU的研發(fā)和生產(chǎn)基本由兩家壟斷,即英偉達和AMD。這兩家芯片生產(chǎn)商發(fā)布GPU芯片之后,一般也會設(shè)計一套匹配的顯存、供電和散熱模塊,整合在一起即所謂的公版顯卡。

GPU加速計算的狼來了?的圖6

而這兩家生產(chǎn)商也會把GPU芯片銷售給自己的合作伙伴,比如麗臺、華碩、藍寶石等,進而推出更多定制化(比如兼容性或者散熱性能更好)的顯卡產(chǎn)品,即所謂的非公版顯卡。一般而言,使用同一型號GPU的顯卡之間極限性能會略有差異,但差異一般不會超過10%。

盡管絕大部分GPU均是基于SIMD架構(gòu)。不過經(jīng)過多年的發(fā)展,GPU的主要制造商在不同時期,推出了更為細分的架構(gòu)(這里的“架構(gòu)”可以理解為流處理器、寄存器、緩存等單元的類型與排布),并針對不同用戶群體推出了不同產(chǎn)品,其性能也有千差萬別。

GPU加速計算的狼來了?的圖7

比如以英偉達為例,2000年起先后推出了Kelvin, Rankine, Curie, Tesla, Fermi, Kepler, Maxwell, Pascal, Volta, Turing, Ampere 等名人系列架構(gòu),而更先進的架構(gòu)帶來了GPU性能的躍升。比如Maxwell架構(gòu)在同樣的制程工藝條件下,使得效能相比Kepler得到大幅提升;而自Volta起始,張量核心的加入使得矩陣算法大大加速。

GPU加速計算的狼來了?的圖8

GPU迅猛發(fā)展讓人們對GPU加速計算也充滿了期待。可惜狼來了的故事喊了許多年,市場上終究沒有多少只狼的身影。明明GPU適合科學(xué)計算,可是為什么這么多年過去了,市場上的仿真工具還是以CPU為主呢?

04、GPU計算簡史

從1980年代IBM推出單色顯示適配器起始,GPU的發(fā)展已經(jīng)有四十年的歷史。但GPU參與科學(xué)計算的發(fā)展則主要從千禧年之后才開始慢慢加速。

由于絕大部分仿真計算軟件均基于CPU開發(fā),倘若進行GPU計算則需要移植,且程序的調(diào)試難度很大。大家熟知的各種CFD軟件基本上都經(jīng)歷了30年以上的歷史,版本也經(jīng)歷了成百上千次的更新。想要把如此復(fù)雜的軟件從CPU轉(zhuǎn)換到GPU上,難度可想而知。

GPU加速計算的狼來了?的圖9

其實在各行各業(yè)中,傳統(tǒng)和創(chuàng)新之間永遠充斥著矛盾,曾經(jīng)代表著創(chuàng)新的企業(yè)可能會在幾十年之后變成了創(chuàng)新和變革的阻力。不過所幸,歷史的車輪終究是滾滾向前的。

2007年,GPU計算迎來了一個重要的拐點,英偉達發(fā)布了專用的CUDA(Compute Unified Device Architecture)開發(fā)環(huán)境。2008年,由蘋果公司發(fā)起,后有AMD,英特爾,高通等公司協(xié)作的開源跨平臺開發(fā)環(huán)境OpenCL(Open Computing Language)也正式發(fā)布。從此,GPU計算才逐漸成為一種通用的處理方法并進入大眾視野。

GPU加速計算的狼來了?的圖10

因為有了更成熟的開發(fā)環(huán)境,市場上開始出現(xiàn)了一系列GPU加速計算的軟件,各大商業(yè)CAE公司也都推出了GPU加速的產(chǎn)品。或許相對于成熟的基于CPU的仿真軟件, GPU的仿真軟件還未形成碾壓的優(yōu)勢,但是它們正以更加迅猛的速度不停的更新,相信它們一定會改變未來仿真世界的格局,甚至改寫每一個CFDer的使用習(xí)慣。

05、讓LBM起飛的GPU加速

熟悉流體仿真的小伙伴都知道,目前CFD軟件有兩大陣營:一種是基于傳統(tǒng)的NS方程,需要隱式求解復(fù)雜的偏微分仿真;而另外一種CFD基于格子玻爾茲曼方法(LBM),求解的是顯式的線性方程。大家還記得CPU和GPU之間的區(qū)別,CPU像一個學(xué)識淵博的專家,而GPU則像是一群中學(xué)生。如果求解復(fù)雜的偏微分方程,一個專家或許能抵得上一百個中學(xué)生,而如果計算的是一元一次方程,一個專家和一個中學(xué)生或許不會有太大的差別。

GPU加速計算的狼來了?的圖11

因此,從GPU的處理特點我們可知,如果程序本身有良好的并行效率,則能從GPU計算中獲得更大的收益。而格子玻爾茲曼方法基于笛卡爾網(wǎng)格的顯式線性的計算特點,使得其天然適合于GPU的流處理框架。比如在GPU上計算D2Q9格式的LBM方程,我們可以將具有相同速度向量的數(shù)據(jù)包分配到一個數(shù)組中,并保持原始格子布局,求解過程便是對這些數(shù)組的更新。

GPU加速計算的狼來了?的圖12

當(dāng)然,GPU在進行LBM計算的時候,不會改變其物理計算的本質(zhì),仍然是通過速度分布函數(shù)、宏觀物理量和平衡態(tài)分布之間的迭代來實現(xiàn)的。因此,如果代碼調(diào)試沒有問題的話,GPU計算的結(jié)果和CPU應(yīng)該是一致的。

當(dāng)然,要想GPU算法能夠?qū)崿F(xiàn)更好的加速效果,也需要對參數(shù)存儲、傳遞和計算進行優(yōu)化。目前,許多LBM方法在配合GPU計算已產(chǎn)生恐怖的加速性能,比如已有商業(yè)軟件可將單塊顯卡的計算加速能力提高到等價于數(shù)千個CPU核的量級。相信隨著GPU性能和軟件本身的不斷進化,GPU一定會讓LBM徹底飛起來。

來源于:LBM與流體力學(xué)   作者: 盧比與鋼蛋

登錄后免費查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

3
2
3