CPU 和 GPU之異構(gòu)計(jì)算的演進(jìn)與發(fā)展
世界上大多數(shù)事物的發(fā)展規(guī)律是相似的,在最開(kāi)始往往都會(huì)出現(xiàn)相對(duì)通用的方案解決絕大多數(shù)的問(wèn)題,隨后會(huì)出現(xiàn)為某一場(chǎng)景專門(mén)設(shè)計(jì)的解決方案,這些解決方案不能解決通用的問(wèn)題,但是在某些具體的領(lǐng)域會(huì)有極其出色的表現(xiàn)。而在計(jì)算領(lǐng)域中,CPU(Central Processing Unit)和 GPU(Graphics Processing Unit)分別是通用的和特定的方案,前者可以提供最基本的計(jì)算能力解決幾乎所有問(wèn)題,而后者在圖形計(jì)算和機(jī)器學(xué)習(xí)等領(lǐng)域內(nèi)表現(xiàn)優(yōu)異。
圖 1 - CPU 和 GPU
異構(gòu)計(jì)算是指系統(tǒng)同時(shí)使用多種處理器或者核心,這些系統(tǒng)通過(guò)增加不同的協(xié)處理器(Coprocessors)提高整體的性能或者資源的利用率[^1],這些協(xié)處理器可以負(fù)責(zé)處理系統(tǒng)中特定的任務(wù),例如用來(lái)渲染圖形的 GPU 以及用來(lái)挖礦的 ASIC 集成電路。
中心處理單元(Central Processing Unit、CPU)[^2]一詞誕生于 1955 年,已經(jīng)誕生 70 多年的 CPU 在今天已經(jīng)是很成熟的技術(shù)了,不過(guò)它雖然能夠很好地處理通用的計(jì)算任務(wù),但是因?yàn)楹诵臄?shù)量的限制在圖形領(lǐng)域卻遠(yuǎn)遠(yuǎn)不如圖形處理單元(Graphics Processing Unit、GPU)[^3],復(fù)雜的圖形渲染、全局光照等問(wèn)題仍然需要 GPU 來(lái)解決,而大數(shù)據(jù)、機(jī)器學(xué)習(xí)和人工智能等技術(shù)的發(fā)展也推動(dòng)著 GPU 的演進(jìn)。
今天的軟件工程師,尤其是數(shù)據(jù)中心和云計(jì)算的工程師因?yàn)楫悩?gòu)計(jì)算的發(fā)展面對(duì)著更加復(fù)雜的場(chǎng)景,我們?cè)谶@篇文章中主要談一談 CPU 和 GPU 的演進(jìn)過(guò)程,重新回顧一下在過(guò)去幾十年的時(shí)間里,工程師為它們?cè)黾恿四男┯腥さ墓δ堋?/p>
CPU
更高、更快和更強(qiáng)是人類永恒的追求,在科技上的進(jìn)步也不例外,CPU 的主要演進(jìn)方向其實(shí)只有一個(gè):消耗最少的能源實(shí)現(xiàn)最快的計(jì)算速度,無(wú)數(shù)工程師的工作都是為了實(shí)現(xiàn)這個(gè)看起來(lái)簡(jiǎn)單的目的。然而在 CPU 已經(jīng)逐漸成熟的今天,想要提高它的性能需要花費(fèi)極大的努力,我們?cè)谶@一節(jié)簡(jiǎn)單展示歷史上引入了哪些技術(shù)來(lái)提高 CPU 的性能。
制程
當(dāng)我們討論 CPU 的發(fā)展時(shí),制程(Fabrication Process)[^4]是繞不開(kāi)的關(guān)鍵字,相信不了解計(jì)算機(jī)的人也都聽(tīng)說(shuō)過(guò) Intel 處理器 10nm、7nm 的制程,而目前各個(gè) CPU 制造廠商也都有各自的路線圖來(lái)實(shí)現(xiàn)更小的制程,例如臺(tái)積電準(zhǔn)備在 2022 和 2023 年分別實(shí)現(xiàn) 3nm 和 2nm 的制造工藝。
[^4]: Wikipedia: Semiconductor device fabrication https://en.wikipedia.org/wiki/Semiconductor_device_fabrication
圖 2 - Intel CPU 制程
在大多數(shù)人眼中,仿佛 CPU 的制程越少就越先進(jìn),性能也會(huì)越好,但是制程并不是衡量 CPU 性能的標(biāo)準(zhǔn),最起碼制程的演進(jìn)不會(huì)直接提高 CPU 的性能。工藝制程的每次提升,都可以讓我們?cè)趩挝幻娣e內(nèi)容納更多的晶體管(Transistor),只有越多的晶體管才意味著越強(qiáng)的性能。
越小的晶體管在開(kāi)關(guān)時(shí)消耗的能量越少,既然晶體管需要一些時(shí)間充電和放電,那么消耗的能量也就越少,速度也越快,而這也解釋了為什么增加 CPU 的電壓可以提高它的運(yùn)行速度。除此之外,更小的晶體管間隔使得信號(hào)的傳輸變得更快,這也能夠加快 CPU 的處理速度[^5]。
緩存
緩存也是 CPU 的重要組成部分,它能夠減少 CPU 訪問(wèn)內(nèi)存所需要的時(shí)間,相信很多開(kāi)發(fā)者都看過(guò)如下所示的表格,我們可以看到從 CPU 的一級(jí)緩存中讀取數(shù)據(jù)大約是主存的 200 倍,哪怕是二級(jí)緩存也有將近 30 倍的提升:
Work | Latency |
---|---|
L1 cache reference | 0.5 ns |
Branch mispredict | 5 ns |
L2 cache reference | 7 ns |
Mutex lock/unlock | 25 ns |
Main memory reference | 100 ns |
Compress 1K bytes with Zippy | 3,000 ns |
Send 1K bytes over 1 Gbps network | 10,000 ns |
Read 4K randomly from SSD* | 150,000 ns |
Read 1 MB sequentially from memory | 250,000 ns |
Round trip within same datacenter | 500,000 ns |
Read 1 MB sequentially from SSD* | 1,000,000 ns |
Disk seek | 10,000,000 ns |
Read 1 MB sequentially from disk | 20,000,000 ns |
Send packet CA->Netherlands->CA | 150,000,000 ns |
表 1 - 2012 年延遲數(shù)字對(duì)比[^6]
今天的 CPU 一般都包含 L1、L2 和 L3 三級(jí)緩存,CPU 訪問(wèn)這些緩存的速度僅次于訪問(wèn)寄存器,雖然緩存的速度很快,但是因?yàn)楦咝阅苄枰WC盡可能靠近 CPU,所以它的成本異常昂貴。Intel 等 CPU 廠商也會(huì)通過(guò)增加 CPU 緩存的方式提高性能,更大的 CPU 緩存意味著更高的緩存命中率,也意味著更快的速度。
圖 3 - CPU 緩存
Intel 的處理器就在過(guò)去幾十年的時(shí)間中不斷增加 L1、L2 和 L3 的緩存大小、將 L1 和 L2 緩存集成在 CPU 中以提高訪問(wèn)速度并在 L1 緩存中區(qū)分?jǐn)?shù)據(jù)緩存和指令緩存以提高緩存的命中率。今天的 Core i9 處理器每個(gè)核心都有 64 KB 的 L1 緩存和 256 KB 的 L2 緩存,所有的 CPU 還會(huì)共享 16 MB 的 L3 緩存[^7]。
并行計(jì)算
多線程編程在今天幾乎已經(jīng)是工程師的必修課了,主機(jī)上越來(lái)越多的 CPU 核心讓工程師不得不去思考如何才能通過(guò)多線程盡可能利用硬件的潛力,很多人可能都認(rèn)為 CPU 會(huì)按照編寫(xiě)的程序串行執(zhí)行命令,但是真正的現(xiàn)實(shí)往往比這復(fù)雜得多,早在很多年前嵌入式工程師就開(kāi)始嘗試在單個(gè) CPU 上并行執(zhí)行指令。
從軟件工程師的角度,我們確實(shí)可以認(rèn)為每一條匯編指令都是原子操作,而原子操作意味著該操作要么處于未執(zhí)行的狀態(tài),要么處于已執(zhí)行的狀態(tài),而數(shù)據(jù)庫(kù)事務(wù)、日志以及并發(fā)控制都建立在原子操作上。不過(guò)如果再次放大指令的執(zhí)行過(guò)程,我們會(huì)發(fā)現(xiàn)指令執(zhí)行的過(guò)程并不是原子的:
圖 4 - 指令執(zhí)行的步驟
不同機(jī)器架構(gòu)執(zhí)行指令的過(guò)程會(huì)有所差別,上面是經(jīng)典的精簡(jiǎn)指令集架構(gòu)(RISC)中命令執(zhí)行需要經(jīng)過(guò)的 5 個(gè)步驟,其中包括獲取指令、解碼指令、執(zhí)行、訪問(wèn)內(nèi)存以及寫(xiě)回寄存器。
超標(biāo)量處理器是可以實(shí)現(xiàn)指令級(jí)別并行的 CPU,它通過(guò)向處理器上的其他執(zhí)行單元派發(fā)指令在一個(gè)時(shí)鐘周期內(nèi)同時(shí)執(zhí)行多條指令[^8],這里的執(zhí)行單元是 CPU 內(nèi)的資源,例如算術(shù)邏輯單元、浮點(diǎn)數(shù)單元等[^9]。
超標(biāo)量設(shè)計(jì)意味著處理器會(huì)在一個(gè)時(shí)鐘周期發(fā)出多條指令,該技術(shù)往往都與指令流水線一起使用[^10],流水線會(huì)將執(zhí)行拆分成多個(gè)步驟,而處理器的不同部分會(huì)分別負(fù)責(zé)這些步驟的處理,例如:因?yàn)橹噶畹墨@取和解碼由不同的執(zhí)行單元處理,所以它們可以并行執(zhí)行。
圖 5 - 超標(biāo)量和流水線
除了超標(biāo)量和流水線技術(shù)之外,嵌入式工程師們還引入了亂序執(zhí)行以及分支預(yù)測(cè)等更加復(fù)雜的技術(shù),其中亂序執(zhí)行也被稱作動(dòng)態(tài)執(zhí)行,因?yàn)?CPU 執(zhí)行指令時(shí)需要先將數(shù)據(jù)加載到寄存器中,所以我們分析 CPU 的寄存器操作確定哪些指令可以亂序執(zhí)行。
圖 6 - 亂序執(zhí)行
如上圖所示,其中包含 R1 = R0 + R1、R2 = R1 - R0 和 R3 = R3 + R5 三條指令,其中第三條指令使用的兩個(gè)寄存器與前兩條無(wú)關(guān),所以該指令可以與前兩條指令并行執(zhí)行,也就能減少這段代碼執(zhí)行所需要的時(shí)間。
因?yàn)榉种l件是程序中的常見(jiàn)邏輯,當(dāng)我們?cè)?CPU 的執(zhí)行中引入流水線和亂序執(zhí)行之后,如果遇到條件分支仍然需要等待分支確定才繼續(xù)執(zhí)行后面的代碼,那么處理器可能會(huì)浪費(fèi)很多時(shí)鐘周期等待條件的確定。在計(jì)算機(jī)架構(gòu)中,分支預(yù)測(cè)器是用來(lái)在分支確定前預(yù)判的數(shù)字電路,在遇到條件跳轉(zhuǎn)指令時(shí),它會(huì)預(yù)測(cè)條件的執(zhí)行結(jié)果并選擇分支執(zhí)行[^11]:
如果預(yù)判正確,可以節(jié)約等待所需要的時(shí)鐘周期,提高 CPU 的利用率;
如果預(yù)判失敗,需要丟棄預(yù)判執(zhí)行的全部或者部分結(jié)果,重新執(zhí)行正確的分支;
因?yàn)轭A(yù)判失敗需要付出較大的代價(jià),一般在 10 ~ 20 個(gè)時(shí)鐘周期之間,所以如何提高分支預(yù)測(cè)器的準(zhǔn)確率成為了比較重要的課題,常見(jiàn)的實(shí)現(xiàn)包括靜態(tài)分支預(yù)測(cè)、動(dòng)態(tài)分支預(yù)測(cè)和隨機(jī)分支預(yù)測(cè)等。
上面的這些指令級(jí)并行僅僅存在于實(shí)現(xiàn)細(xì)節(jié)中,CPU 的使用者在外界觀察時(shí)仍然會(huì)得到串行執(zhí)行的觀察結(jié)果,所以工程師可以認(rèn)為 CPU 是能夠串行執(zhí)行指令的黑箱。想要充分利用多個(gè) CPU 的資源,仍然需要工程師理解多線程模型并掌握操作系統(tǒng)中一些并發(fā)控制機(jī)制。
單核的超標(biāo)量處理器一般被分類為單指令單數(shù)據(jù)流(Single Instruction stream, Single Data stream、SISD)處理器,而如果處理器支持向量操作,就被分為單指令多數(shù)據(jù)流(Single Instruction stream, Multiple Data streams、SIMD)處理器,而 CPU 廠商會(huì)引入 SIMD 指令來(lái)提高 CPU 的處理能力。
片內(nèi)布局
前端總線是 Intel 在 1990 年在芯片中使用的通信接口,AMD 在 CPU 中也引入了類似的接口,它們的作用都是在 CPU 和內(nèi)存控制器中心(也被稱作北橋)之間傳遞數(shù)據(jù)。前端總線在剛設(shè)計(jì)時(shí)不僅靈活,而且成本很低,但是這種設(shè)計(jì)很難支持芯片中越來(lái)越多的 CPU:
圖 7 - 常見(jiàn)芯片布局
如果 CPU 不能從主存中快速獲取指令和數(shù)據(jù),那么它會(huì)花費(fèi)大量的事件等待讀寫(xiě)主存中的數(shù)據(jù),所以越高端的處理器越需要高帶寬和低延遲,而速度較慢的前端總線無(wú)法滿足這樣的需求。Intel 和 AMD 分別引入了點(diǎn)對(duì)點(diǎn)連接的 HyperTransport 和 QuickPath Interconnect(QPI)機(jī)制解決這個(gè)問(wèn)題,上圖中的南橋被新的傳輸機(jī)制取代了,CPU 通過(guò)集成在內(nèi)部的內(nèi)存控制訪問(wèn)內(nèi)存,通過(guò) QPI 連接其他 CPU 以及 I/O 控制器。
圖 8 - Intel QPI
使用 QPI 讓 CPU 直接連接其他組件確實(shí)可以提高效率,但是隨著 CPU 核心數(shù)量的增加,這種連接的方式限制了核心的數(shù)量,所以 Intel 在 Sandy Bridge 微架構(gòu)中引入了如下所示的環(huán)形總線(Ring Bus)[^12]:
圖 9 - 環(huán)形總線
Sandy Bridge 在架構(gòu)中引入了片內(nèi)的 GPU 和視頻解碼器,這些組件也需要與 CPU 共享 L3 緩存,如果所有的組件都與 L3 緩存直接連接,那么片內(nèi)會(huì)出現(xiàn)大量的連接,而這是芯片工程師不能接受的。片內(nèi)環(huán)形總線連接了 CPU、GPU、L3 緩存、PCIe 控制器、DMI 和內(nèi)存等部分,其中包含四個(gè)功能各異的環(huán):數(shù)據(jù)、請(qǐng)求、確認(rèn)和監(jiān)聽(tīng)[^13],這種設(shè)計(jì)減少了不同組件內(nèi)部的連接同時(shí)也具有較好的可擴(kuò)展性。
然而隨著 CPU 核心數(shù)量的繼續(xù)增加,環(huán)形的連接會(huì)不斷變大,這會(huì)增加環(huán)的大小進(jìn)而影響整個(gè)環(huán)上組件之間的訪問(wèn)延遲,導(dǎo)致該設(shè)計(jì)遇到瓶頸。Intel 由此引入了一種新的網(wǎng)格微架構(gòu)(Mesh Interconnect Architecture)[^14]:
圖 10 - 網(wǎng)格架構(gòu)
如上所示,Intel 的 Mesh 架構(gòu)是一個(gè)二維的 CPU 陣列,網(wǎng)絡(luò)中有兩種不同的組件,一種是上圖中藍(lán)色的 CPU 核心,另一種是上圖中黃色的集成內(nèi)存控制器,這些組件不會(huì)直接相連,相鄰的模塊會(huì)通過(guò)聚合網(wǎng)格站(Converged Mesh Stop、CMS)連接,這與我們今天看到的服務(wù)網(wǎng)格非常相似。
當(dāng)不同組件需要傳輸數(shù)據(jù)時(shí),數(shù)據(jù)包會(huì)由 CMS 負(fù)責(zé)傳輸,先縱向路由后水平路由,數(shù)據(jù)到達(dá)目標(biāo)組件后,CMS 會(huì)將數(shù)據(jù)傳給 CPU 或者集成的內(nèi)存控制器。
GPU
圖形處理單元(Graphics Processing Unit、GPU)是在緩沖區(qū)中快速操作和修改內(nèi)存的專用電路,因?yàn)榭梢约铀賵D片的創(chuàng)建和渲染,所以在嵌入式系統(tǒng)、移動(dòng)設(shè)備、個(gè)人電腦以及工作站等設(shè)備上應(yīng)用都很廣泛[^15]。然而隨著機(jī)器學(xué)習(xí)和大數(shù)據(jù)的發(fā)展,很多公司都會(huì)使用 GPU 加速訓(xùn)練任務(wù)的執(zhí)行,這也是今天數(shù)據(jù)中心中比較常見(jiàn)的用例。
大多數(shù)的 CPU 不僅期望在盡可能短的時(shí)間內(nèi)更快地完成任務(wù)以降低系統(tǒng)的延遲,還需要在不同任務(wù)之間快速切換保證實(shí)時(shí)性,正是因?yàn)檫@樣的需求,CPU 往往都會(huì)串行地執(zhí)行任務(wù)。GPU 的設(shè)計(jì)與 CPU 完全不同,它期望提高系統(tǒng)的吞吐量,在同一時(shí)間竭盡全力處理更多的任務(wù),而設(shè)計(jì)理念上的差異最終反映到了 CPU 和 GPU 的核心數(shù)量上[^16]:
圖 11 - CPU 和 GPU 的核心
雖然 GPU 在過(guò)去幾十年的時(shí)間有著很大的發(fā)展,但是不同 GPU 的架構(gòu)大同小異,我們?cè)谶@里簡(jiǎn)單介紹下面的流式多處理器中不同組件的作用:
圖 12 - 流式多處理器
- 流式多處理器(Streaming Multiprocessor、SM)是 GPU 的基本單元,每個(gè) GPU 都由一組 SM 構(gòu)成,SM 中最重要的結(jié)構(gòu)就是計(jì)算核心 Core,上圖中的 SM 包含以下組成部分:
- 線程調(diào)度器(Warp Scheduler):線程束(Warp)是最基本的單元,每個(gè)線程束中包含 32 個(gè)并行的線程,它們使用不同的數(shù)據(jù)執(zhí)行相同的命令,調(diào)度器會(huì)負(fù)責(zé)這些線程的調(diào)度;
- 訪問(wèn)存儲(chǔ)單元(Load/Store Queues):在核心和內(nèi)存之間快速傳輸數(shù)據(jù);
核心(Core):GPU 最基本的處理單元,也被稱作流處理器(Streaming Processor),每個(gè)核心都可以負(fù)責(zé)整數(shù)和單精度浮點(diǎn)數(shù)的計(jì)算;
除了上述這些組件之外,SM 中還包含特殊函數(shù)的計(jì)算單元(Special Functions Unit、SPU)以及用于存儲(chǔ)和緩存數(shù)據(jù)的寄存器文件(Register File)、共享內(nèi)存(Shared Memory)、一級(jí)緩存和通用緩存。
水平擴(kuò)容
與 CPU 一樣,增加架構(gòu)中的核心數(shù)目是提高 GPU 性能和吞吐量最簡(jiǎn)單粗暴的手段。Fermi[^17] 是 Nvidia 早期圖形處理器的微架構(gòu),在如下所示的架構(gòu)中,共包含 16 個(gè)流式多處理器,512 個(gè) CUDA 核心以及 3,000,000,000 個(gè)晶體管:
圖 13 - Nvidia Fermi 架構(gòu)
除了 512 個(gè) CUDA 核心之外,上述架構(gòu)中還包含 256 個(gè)用于傳輸數(shù)據(jù)的訪問(wèn)存儲(chǔ)單元和 64 個(gè)特殊函數(shù)單元。如果我們把 2010 年發(fā)布的 Fermi 架構(gòu)和 2020 年發(fā)布的 Ampere 做一個(gè)簡(jiǎn)單的對(duì)比,就可以發(fā)現(xiàn)兩者核心數(shù)量的巨大差別:
圖 14 - Nvidia Ampere 架構(gòu)
Ampere 架構(gòu)中的流式多處理器增加到了 128 個(gè),而每個(gè)處理器中的核心數(shù)也增加到了 64 個(gè),整張顯卡上一共包含 8,192 個(gè) CUDA 核心,是 Fermi 架構(gòu)中核心數(shù)量的 16 倍。為了提高系統(tǒng)的吞吐量,新的 GPU 架構(gòu)不只擁有了更多的核心數(shù)量,它還需要更大的寄存器、內(nèi)存、緩存以及帶寬滿足計(jì)算和傳輸?shù)男枨蟆?/p>
專用核心
最初的 GPU 僅僅是為了更快地創(chuàng)建和渲染圖片,它們廣泛存在于個(gè)人主機(jī)上承擔(dān)著圖像渲染的任務(wù),但是隨著機(jī)器學(xué)習(xí)等技術(shù)的發(fā)展,GPU 中出現(xiàn)了更多種類的專用核心來(lái)支撐特定的場(chǎng)景,我們?cè)谶@里介紹兩種 GPU 中存在的專用核心:張量核心(Tensor Core)和光線追蹤核心(Ray-Tracing Core):
圖 13 - 專用核心
與個(gè)人電腦上的 GPU 不同,數(shù)據(jù)中心中的 GPU 往往都會(huì)用來(lái)執(zhí)行高性能計(jì)算和 AI 模型的訓(xùn)練任務(wù)。正是因?yàn)樯鐓^(qū)有了類似的需求,Nvidia 才會(huì)在 GPU 中加入張量核心(Tensor Core)[^19]專門(mén)處理相關(guān)的任務(wù)。
張量核心與普通的 CUDA 核心其實(shí)有很大的區(qū)別,CUDA 核心在每個(gè)時(shí)鐘周期都可以準(zhǔn)確的執(zhí)行一次整數(shù)或者浮點(diǎn)數(shù)的運(yùn)算,時(shí)鐘的速度和核心的數(shù)量都會(huì)影響整體性能。張量核心通過(guò)犧牲一定的精度可以在每個(gè)時(shí)鐘計(jì)算執(zhí)行一次 4 x 4 的矩陣運(yùn)算,它的引入使得游戲中的實(shí)時(shí)深度學(xué)習(xí)任務(wù)成為了可能,能夠加速度圖像的生成和渲染[^20]。
計(jì)算機(jī)圖形領(lǐng)域的圣杯是實(shí)時(shí)的全局光照,實(shí)現(xiàn)更好的光線追蹤可以幫助我們?cè)谄聊簧箱秩靖诱鎸?shí)的圖像,然而全局光照需要 GPU 進(jìn)行大量的計(jì)算,而實(shí)時(shí)的全局光照更是對(duì)性能有著非常高的要求。傳統(tǒng)的 GPU 架構(gòu)并不擅長(zhǎng)光線追蹤等任務(wù),所以 Nvidia 在 Turing 架構(gòu)中首次引入了光線追蹤核心(Ray-Tracing Core、RT Core)。
圖 16 - 光線追蹤核心
Nvidia 的光線追蹤核心實(shí)際上是為追蹤光線設(shè)計(jì)的特殊電路,光線追蹤中比較常見(jiàn)的算法就是 Bounding Volume Hierarchy(BVH)遍歷和光線三角形相交測(cè)試,使用流式多處理器計(jì)算該算法每條光線都會(huì)花費(fèi)上千條指令[^21],而光線追蹤核心可以加速這一過(guò)程。
多租戶
今天 GPU 的性能已經(jīng)非常強(qiáng)大,但是無(wú)論使用數(shù)據(jù)中心提供的 GPU 實(shí)例,還是自己搭建服務(wù)器運(yùn)行計(jì)算任務(wù)都很昂貴,然而 GPU 算力的拆分在目前仍然是一個(gè)比較復(fù)雜的問(wèn)題,運(yùn)行簡(jiǎn)單的訓(xùn)練任務(wù)可能占用整塊 GPU,在這種情況下每提升一點(diǎn) GPU 的利用率都可以降低一些成本。
圖 17 - 多實(shí)例 GPU
Nvidia 最新的 Ampere 架構(gòu)支持多實(shí)例 GPU(Multi-Instance GPU、MIG)技術(shù),它能夠水平切分 GPU 資源[^18]。每個(gè) A100 GPU 都可以被拆分成 7 個(gè) GPU 實(shí)例,每個(gè)實(shí)例都有隔離的內(nèi)存、緩存和計(jì)算核心,這不僅可以滿足數(shù)據(jù)中心分割 GPU 資源的需要,還能在同一張顯卡上并行運(yùn)行不同的訓(xùn)練任務(wù)。
總結(jié)
從 CPU 和 GPU 的演進(jìn)過(guò)程我們可以看到,所有的計(jì)算單元都受益于更精細(xì)的制作工藝,我們嘗試在相同的面積內(nèi)放入更多的晶體管并增加更多的計(jì)算單元、使用更大的緩存,當(dāng)這種『簡(jiǎn)單粗暴』的方式因?yàn)槲锢砩系钠款i逐漸變得困難時(shí),我們開(kāi)始為特定領(lǐng)域設(shè)計(jì)專門(mén)的計(jì)算單元。
文中沒(méi)有提到的 ASIC 和 FPGA 是更加特殊的電路,在圖像渲染領(lǐng)域之外,我們可以通過(guò)設(shè)計(jì)適用于特定領(lǐng)域的 ASIC 和 FPGA 電路提高某一項(xiàng)任務(wù)的性能,OSDI ’20 的最佳論文 hXDP: Efficient Software Packet Processing on FPGA NICs[^23] 就研究了如何使用可編程的 FPGA 更高效地處理數(shù)據(jù)包的轉(zhuǎn)發(fā),而在未來(lái)越來(lái)越多的任務(wù)會(huì)使用專門(mén)的硬件。
推薦閱讀
An Introduction to Modern GPU Arhitecture http://download.nvidia.com/developer/cuda/seminar/TDCI_Arch.pdf
Wikiwand: Tick–tock model https://www.wikiwand.com/en/Tick–tock_model
本文轉(zhuǎn)載自微信公眾號(hào)「真沒(méi)什么邏輯」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系真沒(méi)什么邏輯公眾號(hào)。