《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 電子元件 > 業(yè)界動(dòng)態(tài) > 英偉達(dá)要“甩開”CPU

英偉達(dá)要“甩開”CPU

2022-03-22
來(lái)源: 半導(dǎo)體行業(yè)觀察
關(guān)鍵詞: 英偉達(dá) CPU

  加速器類似于圖像處理單元(GPU)已經(jīng)越來(lái)越多地用在現(xiàn)代的數(shù)據(jù)中心,因?yàn)樗麄儞碛懈哂?jì)算能力和高帶寬。傳統(tǒng)來(lái)說(shuō)這些加速器依賴于“主應(yīng)用代碼”和運(yùn)行在CPU上的操作系統(tǒng)來(lái)控制他們對(duì)存儲(chǔ)設(shè)備的訪問(wèn)。CPU控制GPU對(duì)存儲(chǔ)設(shè)備的訪問(wèn)在典型的GPU應(yīng)用上都有比較出色的表現(xiàn),比如稠密的神經(jīng)網(wǎng)絡(luò)訓(xùn)練,其中數(shù)據(jù)訪問(wèn)的模板預(yù)定義的很好,有規(guī)律的,而且稠密,獨(dú)立于數(shù)據(jù)值,能使CPU把存儲(chǔ)數(shù)據(jù)粗?;?,并且能使存儲(chǔ)數(shù)據(jù)訪問(wèn)和與加速器的數(shù)據(jù)交互有效協(xié)同。不幸的是,這種以CPU為中心的策略導(dǎo)致了CPU-GPU過(guò)度的同步,并且IO阻塞惡化,減少了需要細(xì)粒度的存儲(chǔ)訪問(wèn)模板的新興中的訪存帶寬,例如圖和數(shù)據(jù)分析,推薦系統(tǒng),圖神經(jīng)網(wǎng)絡(luò)。在我們的工作中,我們提出了一種能達(dá)到細(xì)粒度,高吞吐率的GPU內(nèi)存訪問(wèn)方法來(lái)訪問(wèn)NVMe固態(tài)存儲(chǔ)硬盤(SSDs)通過(guò)一個(gè)新的叫BaM的系統(tǒng)結(jié)構(gòu)。BaM緩和了IO阻塞惡化通過(guò)使用GPU線程來(lái)讀或者寫少量的需要計(jì)算的數(shù)據(jù)。

  我們展示了(1)運(yùn)行在GPU上的BaM基礎(chǔ)軟件可以識(shí)別并細(xì)粒度,高效率地對(duì)底層存儲(chǔ)設(shè)備進(jìn)行訪問(wèn)。(2)即使是消費(fèi)級(jí)地SSD,BaM系統(tǒng)和貴很多的只用DRAM地方案相比也可以支持應(yīng)用性能。(3)減少的IO阻塞可以帶來(lái)更大的性能收益。這些結(jié)果是通過(guò)引入高吞吐率的GPU數(shù)據(jù)結(jié)構(gòu)類似碎裂和軟件緩存來(lái)實(shí)現(xiàn)GPU中大量的進(jìn)程級(jí)并行來(lái)解決SSDs訪問(wèn)的長(zhǎng)延遲。我們已經(jīng)簡(jiǎn)歷了一個(gè)BaM系統(tǒng)原型并且在一些應(yīng)用和數(shù)據(jù)集上面使用不同的SSD類型估算了它的性能。和最先進(jìn)的解決方案相比,BaM原型提供了平均的0.92x和1.72x端到端加速倍數(shù),載荷為BFS和CC圖分析,使用了4個(gè)Intel Optane SSD硬盤和高達(dá)4.9倍的數(shù)據(jù)分析負(fù)載,使用了一個(gè)Optane SSD。

  簡(jiǎn) 介

  近年來(lái)GPU的計(jì)算吞吐率快速增長(zhǎng),舉個(gè)例子,如表1中所示,GPU的計(jì)算吞吐量從G80到A100在13年的跨度中增長(zhǎng)了452倍??梢钥吹降氖?,A100的吞吐量已經(jīng)比它的暫存CPU高出了1~2個(gè)數(shù)量級(jí)。盡管GPU內(nèi)存帶寬的增長(zhǎng)沒有如此引人注目,表1中提出的18倍,但A100的內(nèi)存帶寬也比它的暫存CPU高出一個(gè)數(shù)量級(jí)。一個(gè)相同趨勢(shì)也趁現(xiàn)在AMD的各代GPU上。因?yàn)閾碛羞@種級(jí)別的計(jì)算吞吐量和內(nèi)存帶寬,GPU已經(jīng)變成了流行的高性能計(jì)算應(yīng)用設(shè)備,占據(jù)了神經(jīng)網(wǎng)絡(luò)訓(xùn)練計(jì)算設(shè)備的主要位置。

  微信圖片_20220322094643.png

  表1.從NVIDIA G80到A100的性能進(jìn)步

  新興的高價(jià)值的數(shù)據(jù)中心負(fù)載比如圖和數(shù)據(jù)分析,圖神經(jīng)網(wǎng)絡(luò),還有推薦系統(tǒng),能潛在地受益于GPU的高計(jì)算吞吐量和高內(nèi)存帶寬。然而,這些工作負(fù)載必須涉及到大量的典型的數(shù)十GB到數(shù)十TB的數(shù)據(jù)結(jié)構(gòu),在預(yù)測(cè)中,未來(lái)將增長(zhǎng)迅速。如表1中所示,A1000的內(nèi)存容量,雖然和G80相比增加了53倍,但是也僅有80GB,和這些工作負(fù)載所要求的容量相比相差甚遠(yuǎn)。

  對(duì)于存儲(chǔ)這些大容量數(shù)據(jù)結(jié)構(gòu)而GPU內(nèi)存容量不足的問(wèn)題,一個(gè)可行的解決方案是把多個(gè)GPU的內(nèi)存容量合并來(lái)滿足存儲(chǔ)需求,并使用快速的共享內(nèi)存互聯(lián)類似NVLink來(lái)連接多個(gè)GPU,使得他們能訪問(wèn)每一塊的內(nèi)存。整個(gè)數(shù)據(jù)結(jié)構(gòu)首先會(huì)被分片存到GPU的內(nèi)存中,之后算法會(huì)識(shí)別并且訪問(wèn)他們實(shí)際使用的部分。這個(gè)方法有兩個(gè)缺點(diǎn)。首先,整個(gè)數(shù)據(jù)結(jié)構(gòu)需要從存儲(chǔ)空間移動(dòng)到GPU的內(nèi)存中,即使僅有一塊被訪問(wèn)到,這會(huì)顯著增加應(yīng)用的啟動(dòng)延遲。其次,數(shù)據(jù)大小取決于應(yīng)用所需求的GPU格式,它會(huì)導(dǎo)致需要儲(chǔ)備的計(jì)算資源嚴(yán)重超出當(dāng)前的工作負(fù)載。

  使用主存,目前典型的范圍在128GB~2TB大小,來(lái)幫助存儲(chǔ)分片后的數(shù)據(jù)結(jié)構(gòu)可以減少所使用的總GPU數(shù)。我們把這種使用主存來(lái)擴(kuò)展GPU內(nèi)存的方式稱之為DRAM-only解決方案。因?yàn)槎鄠€(gè)GPU可能傾向于使用相同的CPU和主存在數(shù)據(jù)中心的服務(wù)器中,對(duì)于每個(gè)GPU的內(nèi)存容量來(lái)說(shuō),這些DRAM-only解決方案僅僅增加了主存的幾分之一的內(nèi)存。舉個(gè)例子,在英偉達(dá)DGX A100系統(tǒng)中,每個(gè)主存被8個(gè)GPU共享,因此,使用主存僅僅把每個(gè)GPU的內(nèi)存擴(kuò)展了主存大小的1/8。

  對(duì)于它們最近的在延遲,吞吐率,花費(fèi),密度和耐久度上的提升,SSDs有理由成為實(shí)現(xiàn)另一種內(nèi)存層次的候選方案。在這篇文章中,我們提出了使用GPU來(lái)使用本地的或者遠(yuǎn)端的SSD來(lái)擴(kuò)展GPU的內(nèi)存作為一種更低成本和更加具有可伸縮性的方案。我們將比較該方案和目前最好的解決方案的性能。

  方案:我們提出了一種新的系統(tǒng)接口叫做BaM(大型加速器內(nèi)存)。BaM的目標(biāo)是來(lái)擴(kuò)展GPU的內(nèi)存容量,并有效地增加存儲(chǔ)器訪問(wèn)帶寬,同時(shí)提供高層次的GPU進(jìn)程抽象,使得GPU線程能完成按需的,細(xì)?;脑L存請(qǐng)求,來(lái)擴(kuò)展內(nèi)存層次。在這篇paper中,我們提出并且估計(jì)了一些關(guān)鍵點(diǎn),并且整個(gè)BaM的設(shè)計(jì)提出了三個(gè)重要的技術(shù)挑戰(zhàn)來(lái)有效地支持這些加速應(yīng)用的按需訪存請(qǐng)求。

  首先,對(duì)于按需的訪存請(qǐng)求來(lái)說(shuō),傳統(tǒng)的內(nèi)存映射的文件抽象方式以來(lái)虛擬地址轉(zhuǎn)換來(lái)計(jì)算當(dāng)前待訪存數(shù)據(jù)的位置。然而,應(yīng)用稀疏地訪問(wèn)大型數(shù)據(jù)結(jié)構(gòu)會(huì)導(dǎo)致過(guò)度地TLB缺失,而且串行化并行訪問(wèn)請(qǐng)求會(huì)導(dǎo)致大量的GPU線程。BaM提出了一種高并發(fā),高吞吐量的軟件緩存來(lái)對(duì)它進(jìn)行替代。這個(gè)緩存是高度參數(shù)化的,可以讓開發(fā)者根據(jù)他們應(yīng)用的需求進(jìn)行設(shè)置。有了軟件緩存,BaM不依賴于虛擬地址轉(zhuǎn)換,因此就不會(huì)被出串行化的事件影響比如TLB缺失。

  其次,基于內(nèi)存映射的文件抽象使用缺頁(yè)處理進(jìn)行維護(hù),并且運(yùn)行在傳統(tǒng)的CPU上的文件系統(tǒng)服務(wù)有數(shù)據(jù)搬運(yùn)的需求。以CPU為中心的模型,這里指通過(guò)CPU來(lái)處理缺頁(yè)時(shí)的數(shù)據(jù)搬運(yùn),對(duì)于OS的缺頁(yè)處理函數(shù)來(lái)說(shuō)受制于底層的CPU進(jìn)程級(jí)并行性是否可行。為了解決這個(gè)問(wèn)題,BaM提供了一個(gè)用戶級(jí)的庫(kù)用于在GPU內(nèi)存中實(shí)現(xiàn)高并發(fā)的NVMe提交/完成隊(duì)列,這使得按需訪問(wèn)的GPU線程在軟件緩存未命中的情況下仍然能高吞吐量地完成訪存。這種用戶級(jí)別的方式使得軟件每次訪存的開銷較小,并且支持高級(jí)別的進(jìn)程級(jí)并行。

  第三,為了避免虛擬地址轉(zhuǎn)換和缺頁(yè)處理的高開銷,應(yīng)用程序員采取了對(duì)數(shù)據(jù)進(jìn)行分塊并且根據(jù)每種計(jì)算方式控制數(shù)據(jù)搬運(yùn)的方式。傳統(tǒng)文件系統(tǒng)服務(wù)中這樣的CPU-GPU同步帶來(lái)的高代價(jià)迫使開發(fā)者粗粒度地搬運(yùn)數(shù)據(jù)。不幸地是,由于對(duì)我們目標(biāo)程序的數(shù)據(jù)訪問(wèn)傾向于無(wú)規(guī)律和稀少的。這些粗粒度的數(shù)據(jù)搬運(yùn)導(dǎo)致SSD和CPU/GPU的內(nèi)存中很多有無(wú)用的字節(jié),一個(gè)現(xiàn)象是I/O擴(kuò)大。如參考文獻(xiàn)中所述的工作,I/O擴(kuò)大減少了關(guān)鍵資源的有效帶寬例如PCIe鏈路。

  表1中,對(duì)于A100,訪存帶寬受限于PCIe Gen4的x16帶寬,它是32GB/s,僅僅約為A100內(nèi)存帶寬的2%。更嚴(yán)重的訪存由于I/O擴(kuò)大引起的訪存帶寬的丟失可以認(rèn)為是應(yīng)用性能丟失的一個(gè)重要信號(hào)。在BaM中SSD使用并行隊(duì)列和多個(gè)SSD,我們實(shí)現(xiàn)的系統(tǒng)中GPU可以足夠快速地進(jìn)行細(xì)粒度的I/O請(qǐng)求,來(lái)完全使用SSD的設(shè)備并且明顯地減少I/O擴(kuò)大地級(jí)別。

  在我們已經(jīng)擁有的認(rèn)知中,BaM是第一個(gè)加速器中心的模型,GPU可以獨(dú)立地識(shí)別和完成數(shù)據(jù)訪存請(qǐng)求不管它是儲(chǔ)存在內(nèi)存或者存儲(chǔ)設(shè)備中,不依賴于CPU的控制。當(dāng)傳統(tǒng)的龐大而單調(diào)的服務(wù)器架構(gòu)在用戶級(jí)別對(duì)于存儲(chǔ)設(shè)備隊(duì)列的實(shí)現(xiàn)出現(xiàn)安全問(wèn)題時(shí),最近數(shù)據(jù)中心開始轉(zhuǎn)向零新人的安全模型,并且NiC/DPU進(jìn)行的安全相關(guān)性檢查也為加速器為中心的訪存模型,比如BaM,提供了新的框架。

  我們已經(jīng)通過(guò)現(xiàn)成的硬件組件簡(jiǎn)歷了一個(gè)BaM原型系統(tǒng)。采用多種不同類型的工作負(fù)載,多種數(shù)據(jù)集對(duì)BaM原型系統(tǒng)進(jìn)行評(píng)價(jià),展示了BaM能與最優(yōu)秀的解決方案達(dá)到相同水平,或是略慢一點(diǎn),甚至是更加出色。

  總結(jié)一下,我們主要做出了以下這幾點(diǎn)貢獻(xiàn):

  1.提出了BaM,一個(gè)以加速器為中心的架構(gòu),GPU線程能細(xì)粒度,按需訪存,不管它是存儲(chǔ)在內(nèi)存或者其他存儲(chǔ)設(shè)備中。

  2.允許按需的,高吞吐量的細(xì)粒度訪存請(qǐng)求,通過(guò)高并行的I/O隊(duì)列實(shí)現(xiàn)

  3.為程序員提供高吞吐量,低延遲的緩存和軟件API,來(lái)利用局部性并且控制它們應(yīng)用中的數(shù)據(jù)搬運(yùn)。

  4.對(duì)于成本敏感性的內(nèi)存容量可變的加速器,提出和評(píng)估了一種經(jīng)過(guò)概念驗(yàn)證的設(shè)計(jì)。

  我們計(jì)劃開源硬件和軟件優(yōu)化的細(xì)節(jié),來(lái)使任何人都能建立BaM系統(tǒng)。

  背景和動(dòng)機(jī)

  A.CPU為中心的訪存途徑中的軟件開銷

  這個(gè)部分展示了對(duì)于BaM模型背景信息的重要評(píng)估數(shù)據(jù),來(lái)使得讀者更好地理解BaM系統(tǒng)中的關(guān)鍵點(diǎn)。

  按需的訪存請(qǐng)求可以分為兩種類型a)隱式和間接的 b)顯式和直接的。隱式和間接的訪存途徑在CPU為中心的模型中可以采用擴(kuò)展CPU內(nèi)存映射的文件抽象到GPU線程中的方式實(shí)現(xiàn)。NVIDIA Pascal架構(gòu)中,GPU驅(qū)動(dòng)和編程模型允許GPU線程來(lái)隱式地訪問(wèn)大型的虛擬內(nèi)存對(duì)象,這些可能會(huì)部分分布于主存中,采用了通用虛擬內(nèi)存抽象(UVM)。之前的工作展示了UVM驅(qū)動(dòng)可以被擴(kuò)展成連接文件系統(tǒng)的接口來(lái)訪問(wèn)存儲(chǔ),當(dāng)一個(gè)頁(yè)面是一個(gè)內(nèi)存映射的文件中的一部分,并且它在GPU內(nèi)存和主存中缺失。

  這個(gè)方法的主要優(yōu)點(diǎn)是所有的訪存操作都是簡(jiǎn)單的訪存操作,可以在GPU的內(nèi)存帶寬上進(jìn)行訪問(wèn)只要頁(yè)和待訪問(wèn)的數(shù)據(jù)存儲(chǔ)在GPU的內(nèi)存。然而,這個(gè)反應(yīng)的途徑在虛擬地址轉(zhuǎn)換和缺頁(yè)處理時(shí),當(dāng)待訪問(wèn)的數(shù)據(jù)不在GPU內(nèi)存中并且它需要被從外部存儲(chǔ)調(diào)入GPU內(nèi)存中時(shí)會(huì)引起軟件開銷。因此,我們可以看到對(duì)于UVM實(shí)現(xiàn)來(lái)說(shuō)最大化的頁(yè)傳輸吞吐量會(huì)成為基于虛擬地址轉(zhuǎn)換和缺頁(yè)處理的按需訪存請(qǐng)求的上界。

  微信圖片_20220322094725.png

  圖1.跨不同數(shù)據(jù)集的 BFS 圖遍歷應(yīng)用程序的 UVM 頁(yè)面錯(cuò)誤開銷

  圖1中的每一條都展示了完成的主存到GPU內(nèi)存的數(shù)據(jù)傳輸帶寬對(duì)于UVM缺頁(yè)請(qǐng)求在英偉達(dá)A100 GPU,PCIe Gen4系統(tǒng)中執(zhí)行BFS圖遍歷在5個(gè)不同的數(shù)據(jù)集上(參見表4),邊列表在UVM地址空間中,初始化在主存中,根據(jù)圖1,UVM缺頁(yè)機(jī)制完成的PCIe帶寬約為14.52GBps,它只有測(cè)量的PCIe Gen4帶寬26.3GBps的55.2%。從資料手機(jī)的數(shù)據(jù)來(lái)看,在我們的實(shí)驗(yàn)中最大的缺頁(yè)處理速率達(dá)到了約500K IOP。從表3中可以看出,500K IOP只有Samsung 980proSSD的一半完全吞吐量,并且比Intel Optane SSD的完全吞吐量少10%。再則,UVM缺頁(yè)處理器的IOP由于幾種因素被限制,其中包括有限數(shù)量的可使用資源來(lái)處理TLB確實(shí)以及串行驅(qū)動(dòng)器的實(shí)現(xiàn)。在我們的實(shí)驗(yàn)中,我們發(fā)現(xiàn)主CPU上的UVM缺頁(yè)處理在進(jìn)行圖遍歷性能測(cè)試的時(shí)候100%執(zhí)行了。

  由于存在這些限制,即使我們通過(guò)集成系統(tǒng)層到UVM驅(qū)動(dòng)的方式構(gòu)建了一個(gè)假定的系統(tǒng),并且假設(shè)它沒有附加的開銷,對(duì)于當(dāng)前的UVM實(shí)現(xiàn)來(lái)在一個(gè)相當(dāng)?shù)母咚俾蕘?lái)做到對(duì)SSD的細(xì)粒度的完全使用依舊是不可能的。因此,BaM采用了軟件緩存和高吞吐率的用戶級(jí)別的NVMe隊(duì)列來(lái)避免TLB和缺頁(yè)處理的性能瓶頸,并且提供顯式和直接的存儲(chǔ)訪問(wèn)方式。

  B.一個(gè)具體的I/O擴(kuò)大的例子

  一個(gè)以CPU為中心的處理缺頁(yè)請(qǐng)求的途徑要求程序員來(lái)對(duì)數(shù)據(jù)進(jìn)行分塊并且編寫CPU的代碼來(lái)根據(jù)各個(gè)計(jì)算的階段來(lái)控制數(shù)據(jù)搬運(yùn)。盡管這種以CPU為中心的模型在一些經(jīng)典的具有很好的預(yù)定義,有規(guī)律和稠密的訪存模板的GPU應(yīng)用中有較好的工作情況,但當(dāng)它被應(yīng)用到我們的目標(biāo)程序例如數(shù)據(jù)分析上面時(shí)就會(huì)出現(xiàn)問(wèn)題。用于同步的執(zhí)行時(shí)間開銷和CPU的控制迫使開發(fā)者采用粗粒度的數(shù)據(jù)傳輸,它會(huì)加劇I/O擴(kuò)大的惡化。

  把在紐約出租車數(shù)據(jù)集上執(zhí)行分析問(wèn)題作為一個(gè)例子。假設(shè)我們進(jìn)行提問(wèn):?jiǎn)栴}1:從Williamsburg開始的平均旅行距離是多少?這個(gè)問(wèn)題要求掃描整個(gè)數(shù)據(jù)集中的pickup_gid列來(lái)找到符合從Williamsburg出發(fā)的條件的項(xiàng)目。然后那些旅程中的trip_dist值需要被加起來(lái)來(lái)產(chǎn)生問(wèn)題的答案。然而,由于對(duì)trip_dist列的訪問(wèn)和pickup_gid列的訪問(wèn)是獨(dú)立的,在CPU為中心的模型中,CPU不能決定哪個(gè)trip_dist值是被要求的。所以,為了增強(qiáng)存儲(chǔ)帶寬,目前最優(yōu)秀的GPU加速數(shù)據(jù)分析的框架,文獻(xiàn)中的RAPIDS,會(huì)從GPU的存儲(chǔ)中抓取這兩列中的所有的行。因?yàn)橹挥?01k從Williamburg出發(fā)的旅途和因此只有0.05%的第二列數(shù)據(jù)會(huì)被使用。上述問(wèn)題導(dǎo)致RAPIDS在這個(gè)問(wèn)題上引起了6.34倍的I/O擴(kuò)大。

  如果把問(wèn)題改成:?jiǎn)栴}1:從Williamsburg開始的旅行的平均總花費(fèi)是多少?那么有三列會(huì)被訪問(wèn)到:pickup_id,trip_dist和total_amt。為了這個(gè)提問(wèn),RAPIDS導(dǎo)致了10.36倍的I/O擴(kuò)大由于它傳輸了兩個(gè)完全數(shù)據(jù)獨(dú)立的列,trip_dist和total_amt到GPU的內(nèi)存中。這個(gè)提問(wèn)可以擴(kuò)展為回答一些更加感興趣的問(wèn)題通過(guò)增加數(shù)據(jù)獨(dú)立的指標(biāo),比如附加費(fèi)(問(wèn)題3),打車費(fèi)(問(wèn)題4),通行費(fèi)(問(wèn)題5)和稅費(fèi)(問(wèn)題6),但是完成這些會(huì)導(dǎo)致CPU為中心的模型中的嚴(yán)重的I/O擴(kuò)大,如圖2中所示,在BaM的這些細(xì)粒度的,按需的訪存能力能緩解這些I/O擴(kuò)大的問(wèn)題。

  微信圖片_20220322094756.png

  圖2.使用最先進(jìn)的 RAPIDS系統(tǒng)對(duì) GPU 加速的數(shù)據(jù)分析應(yīng)用程序中的I/O擴(kuò)大現(xiàn)象

  C.延遲,吞吐率,隊(duì)列深度和并發(fā)性

  高吞吐量的訪存系統(tǒng)的設(shè)計(jì)都要基本地遵循Little定律:。T是目標(biāo)地吞吐量,例如期望的每秒的訪存數(shù),L是平均延遲,例如從開始到完成每個(gè)訪存的秒數(shù),Qd是需要在一段時(shí)間內(nèi)支撐目標(biāo)吞吐量的最小隊(duì)列深度。

  如果一個(gè)系統(tǒng)可以可以產(chǎn)生訪存請(qǐng)求在不超過(guò)T的平均速率下,那么T會(huì)被訪存數(shù)據(jù)中的大部分關(guān)鍵資源瓶頸限制。在我們的BaM原型系統(tǒng)的情況中,我們想完成對(duì)關(guān)鍵資源的最大化利用。PCIe x16第四代連接擁有512B和4KB的訪存粒度。因此考慮估計(jì)的最大的PCIe x16第四代帶寬大概是26GBps,對(duì)于512B訪問(wèn)中的T值是26GHps/512B=51M/sec,4KB的訪問(wèn)中是26GBps/4KB=6.35M/sec。

  L的值依賴于使用的SSD設(shè)備和互聯(lián)的延遲,訪問(wèn)一塊Intel Optane SSD通過(guò)x4 PCIe第四代互聯(lián)具有11us的平均延遲,訪問(wèn)Samsung 980pro小飛機(jī)SSD通過(guò)PCIe x4第四代互聯(lián)具有324us的平均延遲。根據(jù)Little定律,要支持期望的51M的每次512B的訪問(wèn),對(duì)于Optane SSD來(lái)說(shuō),系統(tǒng)需要容納一個(gè)具有51M/s*11us=561的請(qǐng)求項(xiàng)的隊(duì)列(對(duì)于每次4KB的方式來(lái)說(shuō)是70項(xiàng))。對(duì)于Samsung 980pro SSD,需要的能支持相同目標(biāo)吞吐量的Qd是51M*324us=16524(對(duì)于4KB來(lái)說(shuō)是2057)。

  注意上述隊(duì)列深度可以通過(guò)多個(gè)隊(duì)列被傳播,只要這些隊(duì)列被SSD設(shè)備積極地使用。因此,在任意時(shí)刻,這個(gè)系統(tǒng)都必須有至少有561項(xiàng)并行請(qǐng)求存在于提交隊(duì)列中來(lái)支持目標(biāo)吞吐量T。很明顯,它必須有很多倍這個(gè)數(shù)目的并行可使用請(qǐng)求中來(lái)支撐隊(duì)列深度,從而達(dá)到T的一段時(shí)間內(nèi)的吞吐量。

  假定對(duì)于應(yīng)用的一個(gè)階段,我們有X個(gè)并行的可使用訪問(wèn)請(qǐng)求。假定這些請(qǐng)求可以被入隊(duì)在吞吐量至少達(dá)到T的情況下,我們可以期望為了支撐服務(wù)所有請(qǐng)求的投遞速率是投遞總時(shí)間除以投遞請(qǐng)求X/(L+X/51M)。當(dāng)X遠(yuǎn)大于51M乘以L時(shí),被支撐的投遞速率會(huì)很接近51M。對(duì)于Intel Optane SSD來(lái)說(shuō),應(yīng)用需要有約8K的并行可使用的訪問(wèn)在每個(gè)執(zhí)行階段中,而消費(fèi)級(jí)的Samsung 980pro SSD 約需要256K并行訪問(wèn)來(lái)建立可支撐的訪問(wèn)速率在51M,512B的粒度(2K和64K并行訪問(wèn),4KB的粒度對(duì)于Intel Optane和Samsung 980pro SSD來(lái)說(shuō))。這意思是,擁有足夠的并行可使用的訪問(wèn),消費(fèi)級(jí)的SSD可以達(dá)到服務(wù)器級(jí)的SSD的吞吐量水平。

  因此,一個(gè)系統(tǒng)需要有至少10個(gè)Intel Optane SSD或者多達(dá)50個(gè)Samsung SSD,所以SSD不是訪存的瓶頸。更進(jìn)一步說(shuō),由于所有的SSD在寫時(shí)候的吞吐量都遠(yuǎn)遠(yuǎn)低于讀時(shí)候的吞吐量,所以一個(gè)具有大量寫請(qǐng)求的應(yīng)用更容易會(huì)導(dǎo)致SSD引起性能瓶頸。

  D.NVMe隊(duì)列

  NVMe協(xié)議時(shí)工業(yè)級(jí)最新的定義的標(biāo)準(zhǔn)協(xié)議來(lái)完成高吞吐量的訪存給服務(wù)器級(jí)和消費(fèi)級(jí)的SSD提供虛擬化支持。NVMe協(xié)議最大支持64K的并行提交(SQ)和完成(CQ)隊(duì)列,每個(gè)設(shè)備都具有64K的表項(xiàng)。NVMe設(shè)備驅(qū)動(dòng)在內(nèi)存中分配了一個(gè)緩存池供SSD設(shè)備中的DMA引擎進(jìn)行使用來(lái)完成讀和寫請(qǐng)求。在傳統(tǒng)的CPU為中心的模型中這些隊(duì)列和緩存存在于系統(tǒng)內(nèi)存中。

  一個(gè)應(yīng)用程序進(jìn)行訪存請(qǐng)求會(huì)導(dǎo)致驅(qū)動(dòng)從I/O緩存池中該請(qǐng)求分配一塊緩存并且在SQ的尾部一個(gè)NVMe I/O命令入隊(duì),并給它一個(gè)獨(dú)立的命令標(biāo)記。

  之后該驅(qū)動(dòng)程序?qū)懭胍粋€(gè)新的尾值到指定的SQ的只寫寄存器,在NVMe SSD的BAR空間中,舉個(gè)例子,它產(chǎn)生了該隊(duì)列的doorbell。為了提高效率,一個(gè)驅(qū)動(dòng)在多次將請(qǐng)求入隊(duì)SQ時(shí)產(chǎn)生一次doorbell。

  對(duì)于讀請(qǐng)求來(lái)說(shuō),SSD設(shè)備控制器通過(guò)它的DMA引擎訪問(wèn)它的存儲(chǔ)介質(zhì)并且傳輸數(shù)據(jù)到鏈接好的緩存。對(duì)于一個(gè)寫請(qǐng)求,SSD設(shè)備控制器通過(guò)DMA把數(shù)據(jù)從它的緩存中搬到它的存儲(chǔ)介質(zhì)中。一旦一個(gè)請(qǐng)求被服務(wù),SSD控制器就會(huì)在CQ中插入一個(gè)表項(xiàng)。當(dāng)主控制器檢測(cè)到CQ中有一個(gè)包含命令標(biāo)記的表項(xiàng),它會(huì)完成這個(gè)請(qǐng)求并且釋放隊(duì)列中的空間和請(qǐng)求的緩存。完成表項(xiàng)也會(huì)告知驅(qū)動(dòng)SQ中有多少表項(xiàng)被NVMe控制器處理掉了。驅(qū)動(dòng)使用這個(gè)信息來(lái)釋放SQ中的空間。為了和之前的進(jìn)度通信,驅(qū)動(dòng)之后會(huì)產(chǎn)生CQ隊(duì)列的帶有新的CQ頭的doorbell,為了效率,一個(gè)SSD設(shè)備在一次傳輸中的多個(gè)請(qǐng)求中都可以插入CQ表項(xiàng)。

  因?yàn)镾SD設(shè)備的延遲已經(jīng)被減少通過(guò)先進(jìn)的技術(shù)例如似乎用Optane或者ZNAND存儲(chǔ)媒介,軟件開銷變成了整個(gè)I/O訪問(wèn)延遲的重要部分。事實(shí)上,我們的測(cè)量數(shù)據(jù)展示了對(duì)于Intel Optane SSD,軟件延遲占到36.4%的比重。BaM設(shè)計(jì)軟件緩存和高吞吐量的NVMe隊(duì)列就是用來(lái)減少或者避免這些軟件開銷。

  BaM系統(tǒng)和結(jié)構(gòu)

  BaM設(shè)計(jì)的目標(biāo)是設(shè)法解決GPU的不足的內(nèi)存容量并且增強(qiáng)有效的訪存帶寬,同時(shí)為加速器提供高層次的抽象,來(lái)完成按需的,細(xì)粒度的,高吞吐量的存儲(chǔ)設(shè)備訪問(wèn)。BaM提出了一種以加速器為中心的模型,GPU線程可以在數(shù)據(jù)存儲(chǔ)的位置直接訪問(wèn)數(shù)據(jù),在內(nèi)存或者在外部存儲(chǔ)中,不需要CPU來(lái)控制數(shù)據(jù)搬運(yùn)。為了達(dá)到這個(gè)目的,BaM在GPU的內(nèi)存中提供了NVMe的I/O隊(duì)列和緩存并且映射UVMe的doorbell寄存器到GPU的地址空間。由于這樣做會(huì)使得GPU線程去訪問(wèn)TB級(jí)別的NVMe SSD的數(shù)據(jù),BaM必須提出三個(gè)關(guān)鍵的挑戰(zhàn)來(lái)提供一個(gè)高效的解決方案。

  1)由于NVMe協(xié)議和設(shè)備會(huì)引起重要的要吃,BaM需要增強(qiáng)GPU的并行性來(lái)保持多個(gè)請(qǐng)求在運(yùn)行中并且有效地來(lái)遏制這些延遲(詳見III-C部分)

  2)因?yàn)镹VMe設(shè)備的帶寬非常有限并且GPU的內(nèi)存容量也優(yōu)先,BaM必須為應(yīng)用程序優(yōu)化這些資源(詳見III-D部分)

  3)因?yàn)槲覀兊哪繕?biāo)是通過(guò)已存在的硬件來(lái)評(píng)估BaM,BaM硬件和軟件必須克服這些現(xiàn)成的組件的挑戰(zhàn)(詳見III-F部分)

  這個(gè)部分討論了BaM怎么設(shè)法解決這些挑戰(zhàn)。

  A.BaM系統(tǒng)概覽

  圖3中展示了BaM系統(tǒng)概覽。BaM提供了高層次的編程抽象,例如N維數(shù)組和鍵值對(duì)的儲(chǔ)存方式,使得程序員能很容易地將BaM集成到它們目前已有地GPU應(yīng)用中。一個(gè)應(yīng)用程序可以調(diào)用BaM API來(lái)建立一個(gè)從抽象地?cái)?shù)據(jù)結(jié)構(gòu)到NVMe驅(qū)動(dòng)上的數(shù)據(jù)塊范圍的映射。之后程序員可以例化這些抽象通過(guò)把映射傳遞給一個(gè)該抽象數(shù)據(jù)結(jié)構(gòu)的一個(gè)構(gòu)造函數(shù)。這個(gè)映射的元數(shù)據(jù)已經(jīng)足夠在SSD中找到需要的數(shù)據(jù)塊。

  微信圖片_20220322094847.png

  圖3.BaM中GPU線程的生命周期

  每一個(gè)GPU線程使用這種抽象來(lái)計(jì)算待訪問(wèn)的數(shù)據(jù)塊的偏移。之后這個(gè)線程把這個(gè)偏移作為鍵值在BaM軟件緩存(III-D)中進(jìn)行索引,如圖3所示。這個(gè)抽象也會(huì)有wrap-level 的coalescer來(lái)增加訪問(wèn)的效率。如果一個(gè)訪問(wèn)請(qǐng)求命中了cache,線程會(huì)直接訪問(wèn)GPU內(nèi)存中的數(shù)據(jù),如果Cache未命中,線程會(huì)從后端存儲(chǔ)中調(diào)取數(shù)據(jù)。BaM軟件緩存在設(shè)置集中對(duì)后端存儲(chǔ)的帶寬優(yōu)化采用了兩個(gè)方式:(1)通過(guò)消滅冗余的后端內(nèi)存的訪問(wèn)請(qǐng)求。(2)通過(guò)允許用戶來(lái)對(duì)它們的數(shù)據(jù)進(jìn)行細(xì)粒度的cache駐留控制。

  如果一個(gè)NVMe SSD正在備份數(shù)據(jù),GPU線程會(huì)進(jìn)入BaM IO棧(詳見III-C)來(lái)入隊(duì)一個(gè)NVMe請(qǐng)求,并且等待NVMe SSD來(lái)提交一個(gè)響應(yīng)完成表項(xiàng)。BaM IO棧的目的是分割和NVMe協(xié)議相關(guān)的軟件開銷通過(guò)增強(qiáng)GPU的巨大的線程并行性和啟動(dòng)低延遲對(duì)多個(gè)提交/完成隊(duì)列的請(qǐng)求表項(xiàng)的批處理來(lái)最小化UVMe協(xié)議中doorbell寄存器更新的昂貴代價(jià),并減少NVMe協(xié)議中的關(guān)鍵區(qū)。當(dāng)接收到一個(gè)doorbell更新請(qǐng)求時(shí),NVMe SSD會(huì)抓取相關(guān)的提交隊(duì)列表項(xiàng),處理在SSD和GPU內(nèi)存中進(jìn)行數(shù)據(jù)傳輸?shù)拿?。在傳輸?shù)淖詈螅琋VMe SSD會(huì)在完成隊(duì)列中提交一個(gè)完成表項(xiàng)。在完成表項(xiàng)提交以后,這個(gè)線程會(huì)更新對(duì)應(yīng)鍵值的cache的狀態(tài)并在之后訪問(wèn)從GPU內(nèi)存中調(diào)取的數(shù)據(jù)。

  B.和以CPU為中心的設(shè)計(jì)的比較

  當(dāng)和傳統(tǒng)的如圖4a中所示的以CPU為中心的模型比較時(shí),BaM有三個(gè)主要優(yōu)勢(shì)。首先,在以CPU為中心的模型中,由于CPU管理存儲(chǔ)數(shù)據(jù)的傳輸和GPU計(jì)算,它會(huì)導(dǎo)致在存儲(chǔ)和GPU內(nèi)存間的數(shù)據(jù)拷貝并且多次啟動(dòng)計(jì)算內(nèi)核來(lái)覆蓋一個(gè)巨大的數(shù)據(jù)集。每個(gè)核的啟動(dòng)和終結(jié)都會(huì)引起CPU和GPU間的同步開銷。由于BaM允許GPU線程來(lái)同時(shí)完成計(jì)算和從存儲(chǔ)中抓取數(shù)據(jù)如圖4b所示,GPU不需要和CPU經(jīng)常同步,并且更多的工作可以通過(guò)單個(gè)GPU核完成。更進(jìn)一步說(shuō),一些線程的訪存延遲也可以通過(guò)計(jì)算其他線程而得到同時(shí),因而提高了整體的性能。第二,因?yàn)樵谝訡PU為中心的設(shè)計(jì)中計(jì)算負(fù)載加在GPU上而數(shù)據(jù)搬運(yùn)控制由CPU完成,對(duì)于CPU來(lái)說(shuō),決定哪個(gè)部分的數(shù)據(jù)在什么時(shí)候需要十分困難,因此它會(huì)導(dǎo)致調(diào)取很多不需要的字節(jié)。有了BaM,一個(gè)GPU線程只在它需要的時(shí)候抓取特定的數(shù)據(jù),減少了CPU為中心的模型中飽受困擾的I/O擴(kuò)大開銷。第三,在以CPU為中心的模型中,程序員耗費(fèi)精力去分割應(yīng)用程序的數(shù)據(jù)并且重疊計(jì)算任務(wù)和數(shù)據(jù)傳輸來(lái)減少訪問(wèn)存儲(chǔ)設(shè)備的延遲。BaM使得程序員能自然地在大型的數(shù)據(jù)集上利用GPU的線程并行性來(lái)減少訪存延遲。

  微信圖片_20220322094921.png

  圖4.傳統(tǒng)的以 CPU 為中心的計(jì)算模型與 BaM 計(jì)算模型的比較如(a)和(b)所示。BaM 使 GPU 線程能夠直接訪問(wèn)存儲(chǔ),從而實(shí)現(xiàn)細(xì)粒度的計(jì)算和 I/O 重疊。BaM 的關(guān)鍵組件的邏輯視圖如 (c) 所示。

  C.I/O棧

  BaM的I/O棧出于兩個(gè)目的,第一,它使得GPU線程使用NVMe隊(duì)列和NVMe SSD進(jìn)行通信。第二,它建立了高吞吐率的隊(duì)列,利用了GPU強(qiáng)大的并行性來(lái)克服NVMe軟件棧的挑戰(zhàn)。在這里,我們描述一下BaM的I/O棧時(shí)如何達(dá)到這些目標(biāo)的。

  1)啟用直接的從GPU線程訪問(wèn)NVMe的機(jī)制

  為了啟動(dòng)GPU線程來(lái)直接地訪問(wèn)NVMe SSD中的數(shù)據(jù),我們需要:1)從CPU內(nèi)存中移動(dòng)NVMe隊(duì)列和I/O緩存到GPU內(nèi)存中2)在NVMe SSD的BAR空間中啟動(dòng)GPU線程來(lái)寫隊(duì)列的doorbell寄存器。為了達(dá)到這個(gè)目的,我們建立了一個(gè)自定義的Linux驅(qū)動(dòng),它在系統(tǒng)中對(duì)于每一塊NVMe SSD會(huì)創(chuàng)建一個(gè)字符設(shè)備。使用BaM API的應(yīng)用程序可以打開這個(gè)字符設(shè)備來(lái)使用他們想使用的SSD。

  在自定義的Linux設(shè)備驅(qū)動(dòng)中,BaM使用了GPUDirect的RDMA特性來(lái)分配和管理GPU內(nèi)存中的NVMe隊(duì)列和I/O緩存。BaM使用nvidia_p2p_get_pages 內(nèi)核API來(lái)固定NVMe隊(duì)列中的頁(yè)和GPU內(nèi)存中預(yù)分配的I/O緩存,之后映射這些頁(yè)作為DMA請(qǐng)求來(lái)自于另一個(gè)PCIe設(shè)備,類似NVMe SSD,使用nvidia_p2p_map_pages內(nèi)核API,它使得SSD能完成對(duì)GPU內(nèi)存的對(duì)等數(shù)據(jù)讀寫。

  我們使用了異步的GPUDirect來(lái)映射NVMe SSD的doorbell到CUDA地址空間,所以GPU線程可以按需地產(chǎn)生doorbell。這會(huì)要求SSD的BAR空間首先映射到應(yīng)用的地址空間,之后BAR空間會(huì)被映射到CUDA的地址空間使用擁有cudaHostRegisterIoMemory flag的cudaHostRegister API。使用cudaHostGetDevicePointer,應(yīng)用能獲取虛擬地址,GPU線程可以使用它來(lái)訪問(wèn)NVMe doorbell寄存器從而產(chǎn)生doorbell。

  2)高吞吐量的I/O隊(duì)列

  既然GPU線程可以直接和NVMe設(shè)備通信,我們需要優(yōu)化數(shù)千的GPU線程的同步,當(dāng)它們使用共享隊(duì)列時(shí)。如II-D中描述的,NVMe協(xié)議要求驅(qū)動(dòng)來(lái)寫SSD的BAR空間中的doorbell寄存器值。由于這些doorbell寄存器是只寫的,當(dāng)一個(gè)線程產(chǎn)生doorbell,也就是入隊(duì)一個(gè)I/O請(qǐng)求,他必須保證沒有其他的線程正在寫相同的寄存器并且它在寫的值有效的,和之前寫的其他值相比,它是一個(gè)全新的值。一個(gè)不成熟的解決方案可能會(huì)是在入隊(duì)一個(gè)命令到提交隊(duì)列和產(chǎn)生doorbell時(shí)上鎖,然而,對(duì)于GPU中數(shù)以千計(jì)的并行線程來(lái)說(shuō),這樣的設(shè)計(jì)方案可能會(huì)導(dǎo)致嚴(yán)重的延遲,因?yàn)樗械腎/O請(qǐng)求都必須串行化。

  相反地,BaM使用了細(xì)粒度的內(nèi)存同步來(lái)允許多個(gè)線程來(lái)并行的入隊(duì)I/O請(qǐng)求并且僅僅進(jìn)入一個(gè)臨界區(qū)來(lái)產(chǎn)生doorbell。為了達(dá)到這個(gè)目的,我們對(duì)于GPU內(nèi)存中的每一個(gè)提交隊(duì)列維護(hù)了下面的隊(duì)列:1)隊(duì)列頭的本地拷貝,2)隊(duì)列尾的本地拷貝,3)原子標(biāo)簽計(jì)數(shù)器,4)turn_counter數(shù)組,一個(gè)和隊(duì)列由相同長(zhǎng)度的整形數(shù)組,5)一個(gè)mark位向量,總位數(shù)和隊(duì)列長(zhǎng)度相同。當(dāng)一個(gè)線程需要一個(gè)入隊(duì)請(qǐng)求時(shí),它首先原子地增加標(biāo)簽計(jì)數(shù)器,返回的標(biāo)簽值除以隊(duì)列的大小的商來(lái)關(guān)聯(lián)一個(gè)隊(duì)列中的entry,而余數(shù)turn代表它的位置。線程使用它的entry來(lái)在turn_counter數(shù)組中進(jìn)行索引,并且在這個(gè)位置中進(jìn)行計(jì)數(shù)直到它的計(jì)數(shù)值和線程的turn值相同。當(dāng)它的計(jì)數(shù)值達(dá)到線程的turn值時(shí),線程可以復(fù)制它的NVMe命令到它關(guān)聯(lián)的隊(duì)列中的位置。在復(fù)制以后,這個(gè)線程會(huì)設(shè)置這個(gè)位置的mark標(biāo)記位,這個(gè)線程之后會(huì)快速地復(fù)位這個(gè)位作為比特向量中當(dāng)前的尾部。如果它是成功的,它會(huì)進(jìn)入臨界區(qū)來(lái)移除尾部并且它會(huì)重復(fù)地去順序地復(fù)位比特向量中的比特,直到它命中一個(gè)未設(shè)置的比特或者隊(duì)列已滿。在這個(gè)時(shí)候,線程知道了新的尾值并且可以用它來(lái)進(jìn)行doorbell。這個(gè)線程之后會(huì)更新GPU 內(nèi)存中的尾部的備份,之后離開臨界區(qū)。

  如果線程沒法進(jìn)入臨界區(qū),它會(huì)不斷嘗試知道它在mark比特向量中的位被復(fù)位。這個(gè)方法的主要優(yōu)點(diǎn)是多個(gè)線程可以找到它們?cè)陉?duì)列中的位置,并且把它們的命令寫到相關(guān)的隊(duì)列中而不去請(qǐng)求任意的鎖,事實(shí)上,大部分要入隊(duì)一個(gè)命令到提交隊(duì)列的線程都不曾進(jìn)入臨界區(qū),因?yàn)橐粋€(gè)要進(jìn)入臨界區(qū)的單進(jìn)程可以盡可能地移除尾部。

  在一個(gè)線程的命令提交以后,這個(gè)線程可以對(duì)完成隊(duì)列進(jìn)行無(wú)鎖輪詢,來(lái)找到對(duì)于已提交請(qǐng)求的完成項(xiàng)。這個(gè)方法的主要優(yōu)點(diǎn)是很多線程都能在隊(duì)列中找到它們的位置并且在不獲取任何鎖的情況下把他們的命令寫到他們相關(guān)的隊(duì)列表項(xiàng)中。當(dāng)它找到這個(gè)完成表項(xiàng),它必須標(biāo)記這個(gè)完成表項(xiàng)已經(jīng)被NVMe控制器之前的通信過(guò)程所消費(fèi)。移除完成隊(duì)列的頭并且使用新的頭部產(chǎn)生doorbell請(qǐng)求也可以通過(guò)和線程移除提交隊(duì)列的頭相同的方式完成。線程競(jìng)相地去復(fù)位當(dāng)前頭的標(biāo)記并且進(jìn)入臨界區(qū)的線程重復(fù)地復(fù)位標(biāo)記知道它不能做為止。

  然而,在線程能離開完成隊(duì)列地臨界區(qū)之前,它必須也更新提交隊(duì)列的頭部來(lái)釋放空間確保下一輪命令能入隊(duì)。每個(gè)完成隊(duì)列的表項(xiàng)都有一個(gè)字段,他使得NVMe控制器和驅(qū)動(dòng)通信告知它這個(gè)位置可以移除提交隊(duì)列的頭部。線程從它可以重置標(biāo)記的最后一個(gè)完成隊(duì)列表項(xiàng)中讀取此字段。然后它從當(dāng)前提交隊(duì)列頭開始迭代,直到完成條目中指定的頭值,將每個(gè)位置的 turn_counter 值加一。線程之后通過(guò)更新在GPU內(nèi)存中的本地完成隊(duì)列頭的備份來(lái)更新提交隊(duì)列頭并且離開臨界區(qū)。如果一個(gè)線程注意到提交隊(duì)列頭已經(jīng)移除過(guò)它的表項(xiàng),它不會(huì)再進(jìn)入臨界區(qū)。

  D.BaM軟件緩存

  BaM 軟件緩存旨在允許優(yōu)化使用有限的GPU內(nèi)存和GPU外帶寬。傳統(tǒng)的內(nèi)核模式的內(nèi)存管理(分配和翻譯)的必須支持多種多樣的,已停產(chǎn)的應(yīng)用/硬件的需求。這樣會(huì)導(dǎo)致他們包含了大量的臨界區(qū),限制了多線程實(shí)現(xiàn)的效率。BaM采用在每個(gè)應(yīng)用啟動(dòng)時(shí)預(yù)分配所有的軟件需要的虛擬和物理內(nèi)存的方法來(lái)設(shè)法解決這個(gè)瓶頸。這個(gè)方法允許BaM軟件緩存管理來(lái)減少臨界區(qū),盡在插入或者收回一個(gè)緩存行的過(guò)程中去請(qǐng)求鎖。繼而,BaM緩存支持更多的并行訪問(wèn),特別是數(shù)據(jù)在GPU內(nèi)存中的時(shí)候。

  當(dāng)一個(gè)線程通過(guò)一個(gè)偏移量來(lái)詢問(wèn)緩存的時(shí)候,它會(huì)直接地檢查相關(guān)緩存行地原子狀態(tài)。如果它是有效的,線程會(huì)增加該緩存行的引用技術(shù)。如果被訪問(wèn)的緩存行不在緩存種,線程會(huì)鎖住緩存行,并且找到一個(gè)非法的行騰出來(lái),然后從后端內(nèi)存中調(diào)取緩存行。當(dāng)請(qǐng)求完成以后,發(fā)起請(qǐng)求的線程會(huì)通過(guò)把它的狀態(tài)置為合法和增加它的引用計(jì)數(shù)的方法來(lái)解鎖緩存行。這樣上鎖的方式防止了對(duì)同一高速緩存行的后端內(nèi)存的多個(gè)請(qǐng)求,利用數(shù)據(jù)中的空間局部性并最大限度地減少對(duì)后端內(nèi)存的請(qǐng)求數(shù)量。當(dāng)一個(gè)線程結(jié)束使用某一個(gè)緩存行時(shí),它的引用計(jì)數(shù)會(huì)被減少。

  BaM緩存使用了一個(gè)時(shí)鐘替換算法。這個(gè)緩存有一個(gè)全局計(jì)數(shù)器,當(dāng)一個(gè)線程需要找到一個(gè)緩存槽時(shí)它會(huì)增加。這個(gè)計(jì)數(shù)器的返回值告訴線程哪一個(gè)緩存槽是嘗試要使用的。如果被選中的緩存槽目前已經(jīng)被映射到一個(gè)由非0引用值的緩存行,線程會(huì)繼續(xù)并且再次增加全局計(jì)數(shù)器來(lái)嘗試替換下一個(gè)緩存槽。當(dāng)線程發(fā)現(xiàn)一個(gè)指向一個(gè)緩存行的緩存槽擁有非0的引用計(jì)數(shù)值,線程會(huì)嘗試通過(guò)將緩存行的狀態(tài)設(shè)置為臨時(shí)狀態(tài)來(lái)回收它。如果成功了,線程會(huì)標(biāo)記這個(gè)緩存行無(wú)效并且改變緩存槽到線程想要帶入的緩存行的映射。否則,它會(huì)再次增加計(jì)數(shù)器并且嘗試使用下一個(gè)緩存槽。

  Warp 合并:雖然BaM的軟件緩存最小化了到后端內(nèi)存的請(qǐng)求數(shù)量,但它增加了每次訪問(wèn)緩存行時(shí)的管理開銷。同一個(gè)warp中的線程經(jīng)常相互競(jìng)爭(zhēng),尤其是當(dāng)連續(xù)線程嘗試訪問(wèn)內(nèi)存中的連續(xù)字節(jié)時(shí)。為了克服這個(gè),BaM的緩存使用wrap級(jí)的原語(yǔ)在軟件層面實(shí)現(xiàn)了wrap合并。當(dāng)線程去訪問(wèn)cache時(shí),__match_any_sync wrap原語(yǔ)被用來(lái)來(lái)同步其他在wrap中的線程,并且一個(gè)淹沒被計(jì)算出來(lái)使得每個(gè)線程都知道其它某個(gè)wrap中的線程在訪問(wèn)相同的偏移量。在該組中,線程決定一個(gè)領(lǐng)導(dǎo)者,并且只有領(lǐng)導(dǎo)者可以操縱被請(qǐng)求的緩存行的狀態(tài)。這組中的線程使用__shfl_sync原語(yǔ)進(jìn)行同步,并且領(lǐng)導(dǎo)者將GPU內(nèi)存中被請(qǐng)求的偏移量的地址廣播給這個(gè)組。當(dāng)數(shù)據(jù)已經(jīng)在GPU內(nèi)存中時(shí),這個(gè)合并對(duì)于減少訪問(wèn)開銷極其有效,因?yàn)槟鞘敲看卧L問(wèn)增加的開銷最明顯的時(shí)候。

  E.BaM抽象和軟件API

  微信圖片_20220322095013.png

  列表1.具有 BamArray<T> 抽象的 GPU 內(nèi)核示例

  BaM軟件棧給程序員提供了一個(gè)基于數(shù)組的高層次API(BamArray<T>),由使用新的編程語(yǔ)言定義的接口組成(比如C++,Python或者Rush)。因?yàn)镚PU內(nèi)核操作類似的數(shù)組,BaM 的抽象簡(jiǎn)化了程序員調(diào)整內(nèi)核以便對(duì)整個(gè)數(shù)據(jù)集進(jìn)行操作的工作,如列表1所示。

  相比之下,以 CPU 為中心的模型需要將完整的、重要的應(yīng)用程序重寫,以優(yōu)化地將計(jì)算和數(shù)據(jù)傳輸分塊來(lái)適應(yīng)GPU 有限的內(nèi)存。

  BamArray 的重載下標(biāo)運(yùn)算符對(duì)程序員隱藏了BaM的所有復(fù)雜性。運(yùn)算符通過(guò)選擇一個(gè)查詢 BaM 緩存并在未命中時(shí)發(fā)出 I/O 請(qǐng)求的領(lǐng)導(dǎo)線程,使訪問(wèn)線程能夠合并它們的訪問(wèn)。當(dāng)請(qǐng)求完成,領(lǐng)導(dǎo)線程會(huì)和其他在同個(gè)wrap中的線程分享緩存行的引用。每個(gè)線程使用這個(gè)引用來(lái)返回合適的類型為T元素到調(diào)用函數(shù)。

  Bam的初始化啊需要分配一些內(nèi)部的數(shù)據(jù)結(jié)構(gòu),他們會(huì)在應(yīng)用程序的生命周期中重復(fù)使用。如果沒有自定義,初始化會(huì)隱式地在一個(gè)庫(kù)的構(gòu)造函數(shù)中發(fā)生。否則,應(yīng)用程序需要通過(guò)BaM初始化調(diào)用中的模板參數(shù)來(lái)專業(yè)化內(nèi)存,一個(gè)C++中的標(biāo)準(zhǔn)例子。我們也提供了BaMArray的四種內(nèi)存實(shí)現(xiàn)方式(1)SSD和BaM緩存(缺省值)(2)固定的CPU內(nèi)存和BaM緩存(3)固定的CPU(4)GPU內(nèi)存。然而,在大部分情況中,專業(yè)化和微調(diào)不是嚴(yán)格必須的,就像我們之后再IV部分中介紹的僅有BaM的缺省參數(shù)使用的情況。

  F.BaM原型系統(tǒng)的設(shè)計(jì)

  使用數(shù)據(jù)中心級(jí) 4U 服務(wù)器中可用的 PCIe 插槽的 BaM 設(shè)計(jì)面臨幾個(gè)挑戰(zhàn)。這些機(jī)器中可以使用的PCIe槽是悠閑地。舉個(gè)例子,例如,Supermicro AS-4124 系統(tǒng)每個(gè)socket有五個(gè) PCIe Gen4 ×16 插槽,如果一個(gè)GPU占據(jù)了一個(gè)插槽,它啊在不適用socket間的互聯(lián)組件的情況下只能訪問(wèn)4x16的PCIe設(shè)備。進(jìn)一步說(shuō),由于現(xiàn)在的多核CPU的chiplet設(shè)計(jì),即使每個(gè)socket中的5個(gè)PCIe可以互相訪問(wèn),他們也必須穿過(guò)CPU內(nèi)部的互聯(lián)組件。

  穿過(guò)這些不同的互聯(lián)組件進(jìn)行訪問(wèn)會(huì)導(dǎo)致嚴(yán)重的性能損失因?yàn)槊總€(gè)互聯(lián)中都存在包的轉(zhuǎn)換,增加了延遲并限制了吞吐量。然而,如我們?cè)買I-C中討論的,BaM 硬件應(yīng)支持?jǐn)U展到大量 NVMe 設(shè)備,以提供使 ×16 PCIe Gen4 GPU 帶寬飽和所需的吞吐量,而無(wú)需太多開銷。

  微信圖片_20220322095051.png

  表2.BaM原型系統(tǒng)的規(guī)格

  為了解決這個(gè)問(wèn)題,我們?yōu)锽aM架構(gòu)構(gòu)建了一臺(tái)自定義的BaM原型機(jī)器,使用了如圖5中所示的大量已有的組件。表2中展示了使用在原型系統(tǒng)中主要組件的規(guī)格。BaM 原型使用具有定制PCIe拓?fù)涞腜CIe擴(kuò)展機(jī)箱來(lái)擴(kuò)展SSD的數(shù)量。PCI交換機(jī)支持低延遲和高吞吐量的PCIe設(shè)備之間的對(duì)等訪問(wèn)。擴(kuò)展機(jī)箱有兩個(gè)相同的抽屜,目前都獨(dú)立連接到主機(jī)。每個(gè)抽屜支持8個(gè)x16 PCI而插槽(如圖5a中所示),我們?cè)诿總€(gè)抽屜中為一個(gè)NVIDIA A100 GPU使用一個(gè)x16插槽,并且其余插槽裝有不同類型的SSD。目前,每個(gè)抽屜只能支持 7 個(gè)U.2(Optane或Z-NAND)SSD,因?yàn)閁.2外形占用了大量空間。由于PCIe交換機(jī)支持PCIe分叉,一個(gè)PCIe多SSD轉(zhuǎn)接卡支持每個(gè)抽屜超過(guò)16個(gè)M.2 NAND閃存SSD。

  微信截圖_20220322095128.png


  SSD 技術(shù)的折中:表III列出了對(duì)三種類型的現(xiàn)成 SSD的BaM系統(tǒng)的設(shè)計(jì)、成本和效率有顯著影響的指標(biāo)。RD IOPS (512B, 4KB) 和 WR IOPS (512B, 4KB) 列分別顯示了在512B 和4K粒度下測(cè)量的每種SSD的隨機(jī)讀寫吞吐量。$/GB 列顯示了每種 SSD 類型的每 GB 成本,基于為構(gòu)建系統(tǒng)的每個(gè)設(shè)備、擴(kuò)展機(jī)箱和轉(zhuǎn)接卡當(dāng)前的當(dāng)前報(bào)價(jià)。Latency 列顯示測(cè)量的平均設(shè)備延遲(以 ?s 為單位)。對(duì) SSD 類型的這些指標(biāo)進(jìn)行比較表明,消費(fèi)級(jí) NAND 閃存 SSD 價(jià)格便宜,具有更具挑戰(zhàn)性的特性,而低延遲驅(qū)動(dòng)器(如 Intel Optane SSD 和 Samsung Z- NAND更昂貴,具有更理想的特性。例如,對(duì)于使用 BaM 的寫入密集型應(yīng)用程序,Intel Optane驅(qū)動(dòng)器提供最佳的寫入 IOP 和耐久性。

  不考慮底層 SSD 技術(shù),如表 III 所示,BaM和DRAM-only解決方案先比在每GB成本方面有4.4-21.8倍的優(yōu)勢(shì),即使在使用擴(kuò)展機(jī)箱和轉(zhuǎn)接板的情況下。此外,這一優(yōu)勢(shì)隨著每臺(tái)設(shè)備增加的額外容量而增長(zhǎng),這使得 BaM 在SSD容量和應(yīng)用程序數(shù)據(jù)大小的增加的情況下具有高度可擴(kuò)展性。

  評(píng) 估

  這個(gè)部分進(jìn)行了對(duì)BaM原型軟硬件系統(tǒng)的評(píng)估并且展示了:

  BaM 可以生成足夠的 I/O 請(qǐng)求以使底層存儲(chǔ)系統(tǒng)飽和(詳見IV-A)。

  即使僅有一個(gè)SSD,BaM的性能也可以達(dá)到活超越最優(yōu)秀的解決方案(詳見IV-B和IV-C)。

  BaM 設(shè)計(jì)與所使用的 SSD 存儲(chǔ)介質(zhì)無(wú)關(guān),可實(shí)現(xiàn)特定于應(yīng)用的經(jīng)濟(jì)高效的解決方案。

  BaM 顯著降低了數(shù)據(jù)分析工作負(fù)載的I/O擴(kuò)大和CPU控制開銷(詳見IV-C)。

  BaM 性能隨著 SSD 的添加而擴(kuò)展。

  綜上,我們展示了和最優(yōu)秀的解決方案相比,帶有4個(gè)Optane SSD的BaM在BFS和CC圖分析數(shù)據(jù)負(fù)載上達(dá)到了平均0.92倍和1.72倍的加速性能,并且單個(gè)Optane SSD在數(shù)據(jù)分析負(fù)載上達(dá)到了4.9倍的加速性能。在不同的存儲(chǔ)媒介上觀察到了和SSD類似的性能。

  A.使用微基準(zhǔn)測(cè)量的BaM的原始吞吐量

  設(shè)置:我們首先評(píng)估了BaM在使用Intel Optane SSD的合成隨機(jī)訪問(wèn)微基準(zhǔn)上可實(shí)現(xiàn)的原始吞吐量。我們把整個(gè)SSD的容量映射到III中描述的GPU的地址空間。我們分配所有的可用的SSD的SQ/CQ隊(duì)列對(duì)到GPU的內(nèi)存中,隊(duì)列深度為1024。我們之后啟動(dòng)一個(gè)CUDA內(nèi)核,它的每個(gè)線程都從SSD中請(qǐng)求一個(gè)獨(dú)立的512字節(jié)的塊。每個(gè)線程提交一個(gè)NVMe請(qǐng)求到一個(gè)指定的隊(duì)列中。隊(duì)列以循環(huán)方式供給GPU線程使用。然后,我們改變映射到單個(gè) NVIDIA A100 GPU 的線程和 SSD 的數(shù)量。對(duì)于多個(gè) SSD,請(qǐng)求以循環(huán)方式進(jìn)一步分布在 SSD 之間。我們將每秒 I/O 操作 (IOP) 衡量為一個(gè)指標(biāo),該指標(biāo)定義為GPU提交的請(qǐng)求和內(nèi)核執(zhí)行時(shí)間。

  12(1).png

  圖6.在 Intel Optane P5800X SSD 上使用 BaM 進(jìn)行 512B 隨機(jī)讀寫基準(zhǔn)擴(kuò)展。BaM 的 I/O 堆??梢赃_(dá)到每個(gè) SSD 的峰值 IOP,并針對(duì)隨機(jī)讀取和寫入訪問(wèn)進(jìn)行線性擴(kuò)展

  結(jié)果:圖 6 顯示了 512B 隨機(jī)讀寫訪問(wèn)基準(zhǔn)的測(cè)量 IOP,BaM的每個(gè)SSD可以達(dá)到IOPs的峰值并且可以根據(jù)附加的SSD線性增加,對(duì)于讀和寫都適用。使用單個(gè)Optane SSD,BaM僅僅需要大約16K-64K的GPU線程來(lái)達(dá)到接近峰值的IOP。使用7個(gè)Optane SSD,BaM能達(dá)到35M隨機(jī)的讀IOP和7.4M的隨機(jī)寫IOP,是Intel Optane SSD的512B訪問(wèn)粒度可達(dá)到的最大峰值。擴(kuò)容實(shí)驗(yàn)中SSD的最大數(shù)量目前受限于擴(kuò)展機(jī)箱的抽屜容量。一旦我們完成抽屜級(jí)聯(lián)的開發(fā),可以進(jìn)行額外的擴(kuò)容。相似的性能和擴(kuò)展性可以在Samsung SSD中看到,并且也可以使用4KB的訪問(wèn)大小,但是限于篇幅并沒有在此處列出。這些結(jié)果驗(yàn)證了 BaM 的基礎(chǔ)架構(gòu)軟件可以匹配底層存儲(chǔ)系統(tǒng)的峰值性能。我們下一步會(huì)使用應(yīng)用程序基準(zhǔn)來(lái)對(duì)BaM進(jìn)行評(píng)估。

  B.圖分析中的性能收益

  13(1).png

  表4.圖分析數(shù)據(jù)集

  設(shè)置:首先,我們?cè)u(píng)估BaM在圖分析應(yīng)用中的性能收益。我們使用表4列出的圖來(lái)進(jìn)行評(píng)估。K,U,F(xiàn),M是SuiteSparse 矩陣集合中四個(gè)最大的圖,而 UK 和 Sk 取自 LAW。這些圖數(shù)據(jù)集涵蓋了不同的領(lǐng)域,包括社交網(wǎng)絡(luò)、網(wǎng)絡(luò)爬蟲、生物醫(yī)學(xué),甚至合成圖。

  BaM的一個(gè)目標(biāo)就是提供比DRAM-only圖分析解決方案更有競(jìng)爭(zhēng)力的性能。為此,目標(biāo)基線系統(tǒng) T 允許 GPU 線程在圖形分析執(zhí)行期間直接對(duì)存儲(chǔ)在主機(jī)內(nèi)存中的數(shù)據(jù)執(zhí)行合并細(xì)粒度訪問(wèn)。由于輸入圖都可以放入主機(jī)內(nèi)存中,因此我們可以直接比較 BaM 和 T 之間的性能。

  我們?cè)谀繕?biāo)系統(tǒng)和構(gòu)建于表3中列出的不同SSD上的BaM分別運(yùn)行兩種圖分析算法,廣度優(yōu)先搜索 (BFS) 和連接組件 (CC)。在 BFS 中,每個(gè) GPU warp 被分配給當(dāng)前迭代中正在訪問(wèn)的節(jié)點(diǎn),其中 warp 中的所有線程協(xié)作遍歷節(jié)點(diǎn)的鄰居列表。CC 實(shí)現(xiàn)遵循與 BFS 類似的分配,只是應(yīng)用程序首先檢查圖中的所有節(jié)點(diǎn),因此呈現(xiàn)出比 BFS 更突發(fā)的訪問(wèn)模式。對(duì)于 BFS,我們統(tǒng)計(jì)了運(yùn)行至少 32 個(gè)具有兩個(gè)以上鄰居的源節(jié)點(diǎn)后的平均運(yùn)行時(shí)間。

  我們不對(duì) UK 和 Sk 數(shù)據(jù)集執(zhí)行 CC,因?yàn)?CC 僅在無(wú)向圖上運(yùn)行。最后,我們將 BaM 軟件緩存大小固定為 8GB,緩存行大小為 4KB。

  14(1).png

  圖7.使用單個(gè)Intel Optane SSD 的 BaM 和目標(biāo)系統(tǒng)(T)的圖形分析性能。平均而言,BaM 的端到端時(shí)間比目標(biāo)快 1.1 倍(BFS)和 1.29 倍(CC)。

  一個(gè)SSD的整體性能:圖7個(gè)展示了目標(biāo)系統(tǒng)(T)和使用單個(gè)Intel Optane SSD的BaM(B_I),Samsaung DC 1735(B_S)和消費(fèi)級(jí)的Samsung grade 980 Pro SSD(B_SC)。回想一下,目標(biāo)系統(tǒng) T 受益于主機(jī)和 GPU 之間的完整 ×16 Gen4 PCIe 帶寬,而 BaM 僅限于單個(gè) SSD 的 ×4 Gen4 PCIe 接口。

  然而,在所有圖和算法中,在不考慮 T 系統(tǒng)的初始文件加載時(shí)間的情況下,采用英特爾傲騰 SSD (B_I) 的 BaM 的性能從略快到比目標(biāo) T 系統(tǒng)慢 4.4 倍的現(xiàn)象都存在。這是因?yàn)橛捎谥挥幸粋€(gè)SSD,BaM的性能被SSD的x4 Gen4 PCIe接口的吞吐量限制。如果我們考慮T系統(tǒng)的初始文件加載時(shí)間,BaM平均比T系統(tǒng)在BFS和CC這兩個(gè)算法上分別要快1.1和1.29倍。在這兩種情況下,GPU 計(jì)算內(nèi)核通過(guò) BaM 1D 數(shù)組抽象執(zhí)行按需圖的邊數(shù)據(jù)訪問(wèn)。這允許 BaM 將來(lái)自 SSD 的某些線程的數(shù)據(jù)傳輸與其他線程的計(jì)算重疊。相反,目標(biāo)系統(tǒng) T 需要等到文件加載到內(nèi)存中才能將計(jì)算任務(wù)卸載到 GPU。T系統(tǒng)的監(jiān)管者的主存帶寬不能克服加載初始文件的延遲。這會(huì)導(dǎo)致BaM獲得了更高的端對(duì)端延遲。

  Samsung DC 1735和Intel Optane SSD對(duì)于所有的負(fù)載幾乎有著相同的新能。因?yàn)檫@兩個(gè)驅(qū)動(dòng)器的4KB隨機(jī)讀IOP峰值都被PCIe x4 接口限制了。然而對(duì)于CC工作負(fù)載中的兩個(gè)數(shù)據(jù)集(U和M),Sansung DC 1735的性能比較差,并且我們初始的分析指出了這是因?yàn)镾SD控制器在處理CC使用突發(fā)隨機(jī)訪問(wèn)模板訪問(wèn)這兩個(gè)圖時(shí)的長(zhǎng)尾部延遲。將重點(diǎn)轉(zhuǎn)移到成本效益上,BaM 原型使用一個(gè)三星 980 Pro SSD,與目標(biāo)系統(tǒng)(包括文件加載時(shí)間)相比,BFS和CC工作負(fù)載平均慢1.97倍和1.85倍。這些對(duì)于消費(fèi)級(jí) SSD 來(lái)說(shuō)是非常令人鼓舞的結(jié)果,因?yàn)樗鼈兲峁┝似駷橹顾?SSD 技術(shù)中的最佳價(jià)值。

  15(1).png

  圖8.緩存行大小對(duì)使用一塊Intel Optane SSD 進(jìn)行圖形分析的 BaM 性能的影響

  緩存行大小的重要性:我們嘗試調(diào)整 BaM 軟件緩存的緩存行大小從 512B 到 8KB,以了解訪問(wèn)粒度對(duì)圖形分析工作負(fù)載的影響?;叵胍幌?,BaM 緩存行大小決定了對(duì)存儲(chǔ)的訪問(wèn)粒度。由于其高IOP率因此使用單個(gè) Intel Optane SSD 完成了評(píng)估(詳見表 III)。從圖8中可以看到,由于我們把緩存行大小從4KB減少到512B,BFS和CC工作負(fù)載分別慢了1.41倍和2.31倍。這是因?yàn)閳D工作負(fù)載在其鄰接列表中表現(xiàn)出空間局部性,并且可以從更大的訪問(wèn)中受益。此外,我們的分析數(shù)據(jù)顯示,對(duì)于512B訪問(wèn)粒度,BFS 和 CC 應(yīng)用程序可以達(dá)到 4.76M IOPs 和 4.97M IOPs。對(duì)于4KB訪問(wèn)粒度,分別可以達(dá)到 1.37M IOPs 和 1.52M IOPs。這意味著 512B 和 4KB 存儲(chǔ)訪問(wèn)的帶寬約為 2.5GBps 和 6GBps,接近一個(gè) Optane SSD 的峰值可實(shí)現(xiàn)帶寬。

  出現(xiàn)了三個(gè)主要發(fā)現(xiàn):

  在 BaM 中運(yùn)行的工作負(fù)載可以生成足夠的 I/O 請(qǐng)求以使驅(qū)動(dòng)器的吞吐量飽和.

  4K 的粒度在某些圖中利用了大型鄰接列表的空間局部性,并且為較小的鄰接列表傳輸?shù)念~外字節(jié)不會(huì)降低性能,因?yàn)?PCIe 帶寬沒有過(guò)飽和。

  BaM 的細(xì)粒度訪問(wèn)減少了 I/O 放大,從而提高了有效帶寬。

  否則,在將緩存行大小從 4KB 減少到 512B 時(shí),應(yīng)用程序的速度會(huì)降低 8 倍。將緩存行大小從 4KB 增加到 8KB 幾乎不會(huì)影響整體性能。這是因?yàn)樵?4KB 時(shí),應(yīng)用程序接近 SSD PCIe 帶寬限制,并且進(jìn)一步增加緩存行大小不會(huì)提高帶寬。在Samsung設(shè)備中觀察到類似的性能變化和趨勢(shì),限于篇幅不討論。

  16(1).png

  圖9.擴(kuò)展Optane SSD的數(shù)量

  擴(kuò)展到多個(gè)SSD:我們擴(kuò)展 SSD 的數(shù)量并跨 SSD 復(fù)制數(shù)據(jù)以增加 BaM 的聚合帶寬。圖9展示了具有4KB緩存行的Optane SSD的擴(kuò)展結(jié)果。使用 BaM 原型的圖形分析工作負(fù)載可以很好地?cái)U(kuò)展到兩個(gè) Optane SSD,但若數(shù)量超過(guò)兩個(gè),收益開始遞減。如果使用超過(guò)兩個(gè)SSD,使用BaM原型的圖分析應(yīng)用就不能以足夠的速度產(chǎn)生I/O請(qǐng)求來(lái)有效地滿足附加設(shè)備。即使應(yīng)用程序具有足夠的 I/O 并行度,當(dāng)前的 GPU 內(nèi)核實(shí)現(xiàn)和數(shù)據(jù)布局都針對(duì)利用局部性和減少 I/O 請(qǐng)求的數(shù)量進(jìn)行了優(yōu)化,而不是最大化生成 I/O 請(qǐng)求的速率以隱藏長(zhǎng)延遲。這些相互沖突的目標(biāo)需要通過(guò)掃描每個(gè)線程的工作分配或增加每個(gè)線程的工作量來(lái)探索設(shè)計(jì)空間,以便 GPU 線程可以以更高的速率生成 I/O 請(qǐng)求以充分利用超過(guò) 2 個(gè) Optane SSD。此外,BaM 軟件棧中的一些優(yōu)化,例如自動(dòng)改變 I/O 請(qǐng)求的大小和預(yù)取,尚未實(shí)現(xiàn)。我們將在未來(lái)解決這些問(wèn)題。目前,使用四個(gè)Intel Optane SSD的系統(tǒng)和考慮文件加載時(shí)間的目標(biāo)系統(tǒng)T相比已經(jīng)可以在BFS和CC應(yīng)用上提供平均0.92和1.72倍的加速比。BaM在所有數(shù)據(jù)集上對(duì)于BFS和CC負(fù)載達(dá)到了平均0.72 和1.51倍的加速比。三星 SSD 也出現(xiàn)了類似的趨勢(shì),但三星 980 Pro SSD 可以很好地?cái)U(kuò)展到 4-10 個(gè) SSD,然后再擴(kuò)展SSD才會(huì)在圖形工作負(fù)載上出現(xiàn)收益遞減。

  C.數(shù)據(jù)分析中的I/O擴(kuò)大收益

  除了圖形分析之外,我們還評(píng)估了 BaM 原型對(duì)企業(yè)數(shù)據(jù)分析工作負(fù)載的性能優(yōu)勢(shì)。這些新興的數(shù)據(jù)分析被廣泛用于解釋、發(fā)現(xiàn)或推薦隨時(shí)間推移或從非結(jié)構(gòu)化數(shù)據(jù)湖收集的數(shù)據(jù)中的有意義的模式。數(shù)據(jù)分析實(shí)驗(yàn)旨在說(shuō)明 BaM 設(shè)計(jì)在處理大型結(jié)構(gòu)化數(shù)據(jù)集時(shí)減少 I/O 擴(kuò)大和軟件開銷的好處。

  設(shè)置:II-B中討論了在NYC出租車數(shù)據(jù)集上的I/O擴(kuò)大問(wèn)題。該數(shù)據(jù)集由 200GB 編碼數(shù)據(jù)組成,以優(yōu)化行列 (ORC) 格式組織為 1.7B 行和 49 列。我們使用了II-B部分中描述的6個(gè)數(shù)據(jù)相關(guān)的提問(wèn)來(lái)和最優(yōu)秀的GPU加速數(shù)據(jù)分析框架RAPIDS進(jìn)行比較?;€和BaM都使用一塊Intel Optane P5800X SSD。我們使用兩種配置來(lái)評(píng)估基線:a)SSD 中所有數(shù)據(jù)的冷情況和 b)數(shù)據(jù)已被提取到 Linux CPU 頁(yè)面緩存的暖情況。

  17.png

  圖10.使用一個(gè) Optane SSD的前提下,在NYC出租車數(shù)據(jù)集的數(shù)據(jù)分析查詢中BaM 和 RAPIDS 的性能。BaM 比以 CPU 為中心的 RAPIDS 框架快 4.9 倍。

  結(jié)果:在大多數(shù)情況下,采用單個(gè)英特爾傲騰 SSD 的 BaM 在冷配置和暖配置中均優(yōu)于 RAPIDS 性能,如圖 10 所示。對(duì)于 Q1,暖配置的基線比 BaM 略有優(yōu)勢(shì),因?yàn)樗梢岳谜麄€(gè) CPU DRAM 帶寬和 PCIe ×16 Gen4 帶寬在主機(jī)和 GPU 之間傳輸數(shù)據(jù),而 BaM 則受到 SSD 帶寬的限制。隨著數(shù)據(jù)相關(guān)指標(biāo)的添加,BaM 性能提高,如圖 10 所示。性能提高的原因是 BaM 由于按需數(shù)據(jù)提取而減少了 I/O 放大,但基線必須將整個(gè)列傳輸?shù)?GPU 內(nèi)存。如圖 2 所示,通過(guò)額外的數(shù)據(jù)相關(guān)指標(biāo),基線(包括暖和冷)會(huì)引起更多的I/O擴(kuò)大和CPU上用于查找和移動(dòng)數(shù)據(jù)以及管理GPU內(nèi)存的軟件開銷。但是,BaM 能夠按需訪問(wèn)數(shù)據(jù)以及重疊計(jì)算、緩存管理和許多 I/O 請(qǐng)求,這使得它處理多個(gè)數(shù)據(jù)相關(guān)列的效率幾乎與處理單個(gè)數(shù)據(jù)相關(guān)列一樣高。

  相關(guān)工作

  A.優(yōu)化的以CPU為中心的模型

  大多數(shù) GPU 編程模型和應(yīng)用程序的設(shè)計(jì)都假設(shè)工作數(shù)據(jù)集適合 GPU 內(nèi)存。如果沒有,則使用平鋪等特定于應(yīng)用程序的技術(shù)來(lái)處理 GPU 上的大數(shù)據(jù)。

  SPIN和 NVME建議使用 GPUDirect RDMA 從SSD到GPU 啟用對(duì)等 (P2P) 的直接內(nèi)存訪問(wèn),這樣就可以不在數(shù)據(jù)通路中使用CPU。SPIN 將 P2P 集成到標(biāo)準(zhǔn) OS 文件堆棧中,并為順序讀取啟用頁(yè)面緩存和預(yù)讀方案。GAIA進(jìn)一步將 SPIN 的頁(yè)面緩存從 CPU 擴(kuò)展到 GPU 內(nèi)存。Gullfoss提供了一個(gè)高級(jí)接口,有助于高效地設(shè)置和使用 GPUDirect API。Hippogriffdb為 OLAP 數(shù)據(jù)庫(kù)系統(tǒng)提供 P2P 數(shù)據(jù)傳輸功能。GPUDirect Storage是使用 GPUDirect RDMA 技術(shù)在 NVIDIA CUDA 軟件棧中將數(shù)據(jù)路徑從 CPU 遷移到 GPU 的最新產(chǎn)品。在 RADEON-SSG 產(chǎn)品線中可以看到 AMD 的類似努力。所有這些工作仍然采用以 CPU 為中心的模型,其中 CPU 負(fù)責(zé)數(shù)據(jù)傳輸控制。BaM 提供從 GPU 對(duì)存儲(chǔ)的顯式和直接細(xì)粒度訪問(wèn),允許 GPU 中的任何線程啟動(dòng)、讀取和寫入數(shù)據(jù)到 SSD。

  B.以加速器為中心的模型的先前嘗試

  ActivePointers、GPUfs、GPUNet 和 Syscalls for GPU之前曾嘗試啟用以加速器為中心的數(shù)據(jù)編排模型。GPUfs和Syscalls for GPU首先允許GPU從主機(jī)CPU請(qǐng)求文件數(shù)據(jù)。ActivePointers在GPUfs之上添加了類似抽象的內(nèi)存映射,以允許GPU線程像數(shù)組一樣訪問(wèn)文件數(shù)據(jù)。Dragon建議將存儲(chǔ)訪問(wèn)納入U(xiǎn)VM頁(yè)面錯(cuò)誤機(jī)制。然而,所有這些方法都依賴于并行性明顯較低的CPU來(lái)處理大規(guī)模并行GPU的數(shù)據(jù)需求。因此,如II部分中所示,這些方法最終導(dǎo)致資源利用不足和整體性能不佳。此外,所有這些工作都沒有利用GPUDirect RDMA功能,而是依賴于先將數(shù)據(jù)傳輸?shù)紺PU內(nèi)存,然后再傳輸?shù)紾PU內(nèi)存的工作方式。

  C.硬件擴(kuò)展

  通過(guò)直接用閃存替換全局內(nèi)存或?qū)⑵渑cGPU內(nèi)存系統(tǒng)緊密集成來(lái)擴(kuò)展對(duì)GPU的非易失性內(nèi)存的支持方案已經(jīng)被提出。DCS建議借助專用硬件單元(如 FPGA)實(shí)現(xiàn)存儲(chǔ)、網(wǎng)絡(luò)和加速器之間的直接訪問(wèn),為粗粒度數(shù)據(jù)傳輸提供所需的轉(zhuǎn)換。最近有人提出在GPU內(nèi)啟用持久化。我們承認(rèn)這些努力,并進(jìn)一步驗(yàn)證了為新興工作負(fù)載啟用大內(nèi)存容量的必要性。更重要的是,BaM旨在使用現(xiàn)有的硬件和系統(tǒng)在具有非常大的真實(shí)數(shù)據(jù)集的端到端應(yīng)用程序中提供光速性能。

  結(jié)論

  在這項(xiàng)工作中,我們提出了一個(gè)案例,使 GPU 能夠在稱為 BaM 的新系統(tǒng)架構(gòu)中協(xié)調(diào)對(duì) NVMe 固態(tài)驅(qū)動(dòng)器 (SSD) 的高吞吐量、細(xì)粒度訪問(wèn)。BaM 通過(guò)按需讀取或?qū)懭敫?xì)的粒度(由這些 GPU 上運(yùn)行的計(jì)算代碼決定)來(lái)緩解讀取比所需數(shù)據(jù)更多的數(shù)據(jù)的 I/O 放大問(wèn)題。使用現(xiàn)成的硬件組件,我們使用不同的 SSD 類型實(shí)現(xiàn) BaM 原型,并在多個(gè)應(yīng)用程序和數(shù)據(jù)集上進(jìn)行了測(cè)試,結(jié)果表明 BaM 是DRAM-only和其他以 CPU 為中心的最優(yōu)秀解決方案的可行替代方案。

  致謝:感謝電子科技大學(xué)黃樂天老師與研究生鄧昊瑀同學(xué)在翻譯和校正中提供的幫助。

  



微信圖片_20210517164139.jpg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。