優(yōu)化九:編譯器控制的預(yù)取以減少丟失懲罰或丟失率
硬件預(yù)取的替代方案是編譯器在處理器需要數(shù)據(jù)之前插入預(yù)取指令來(lái)請(qǐng)求數(shù)據(jù)。
預(yù)取有兩種類(lèi)型:
■ 寄存器預(yù)取將值加載到寄存器中。
■ 高速緩存預(yù)取僅將數(shù)據(jù)加載到高速緩存。
這兩種類(lèi)型都可以分為有錯(cuò)或無(wú)錯(cuò)的,即預(yù)取的地址是否會(huì)導(dǎo)致虛擬地址錯(cuò)誤或保護(hù)錯(cuò)誤的異常。使用這個(gè)術(shù)語(yǔ),一個(gè)普通的加載指令可以被認(rèn)為是一個(gè)“有錯(cuò)的寄存器預(yù)取指令”。無(wú)錯(cuò)的預(yù)取指令如果遇到異常,就會(huì)變成空操作。
最有效的預(yù)取是“對(duì)程序語(yǔ)義不可見(jiàn)”的:它不改變寄存器和內(nèi)存的內(nèi)容,也不會(huì)引起虛擬內(nèi)存錯(cuò)誤?,F(xiàn)在大多數(shù)處理器都提供無(wú)錯(cuò)的緩存預(yù)取指令。這一節(jié)假設(shè)使用無(wú)錯(cuò)的緩存預(yù)取,也叫非綁定預(yù)取。
預(yù)取技術(shù)只有在處理器可以在預(yù)取數(shù)據(jù)的同時(shí)繼續(xù)執(zhí)行時(shí)才有意義;也就是說(shuō),緩存不會(huì)停頓,而是在等待預(yù)取數(shù)據(jù)返回的同時(shí)繼續(xù)提供指令和數(shù)據(jù)。這樣的計(jì)算機(jī)的數(shù)據(jù)緩存通常是非阻塞的。和硬件控制的預(yù)取一樣,目標(biāo)是讓執(zhí)行和預(yù)取數(shù)據(jù)重疊。
循環(huán)是重要的目標(biāo),因?yàn)樗鼈冞m合于預(yù)取優(yōu)化。如果不命中代價(jià)很小,編譯器只需要展開(kāi)循環(huán)一次或兩次,并將預(yù)取和執(zhí)行調(diào)度起來(lái)。如果不命中代價(jià)很大,它就使用軟件流水或者展開(kāi)很多次來(lái)預(yù)取未來(lái)迭代的數(shù)據(jù)。發(fā)出預(yù)取指令會(huì)產(chǎn)生指令開(kāi)銷(xiāo),所以編譯器必須小心確保這種開(kāi)銷(xiāo)不會(huì)超過(guò)收益。通過(guò)專(zhuān)注于可能是緩存不命中的引用,程序可以避免不必要的預(yù)取,同時(shí)顯著提高平均內(nèi)存訪問(wèn)時(shí)間。
優(yōu)化十:利用HBM擴(kuò)展內(nèi)存層次
HBM是High Bandwidth Memory的縮寫(xiě),是一種高速的計(jì)算機(jī)內(nèi)存接口,用于三維堆疊的同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM)。HBM的特點(diǎn)是將多個(gè)DRAM芯片通過(guò)硅通孔(TSV)技術(shù)垂直堆疊在一起,并與處理器封裝在同一個(gè)芯片內(nèi),實(shí)現(xiàn)了高容量、高帶寬、低功耗和低延遲的內(nèi)存方案。
?由于大多數(shù)通用服務(wù)器處理器需要的內(nèi)存容量超過(guò)了HBM封裝技術(shù)能夠提供的范圍,所以有人提出了將封裝在處理器內(nèi)部的DRAM用作大容量的L4緩存,這些緩存的容量可以達(dá)到128 MiB到1 GiB甚至更多,遠(yuǎn)遠(yuǎn)超過(guò)了當(dāng)前片上L3緩存的容量。使用這樣大的基于DRAM的緩存會(huì)引起一個(gè)問(wèn)題:標(biāo)記(tag)應(yīng)該放在哪里?這取決于標(biāo)記的數(shù)量。假設(shè)我們使用64B的塊大小,那么一個(gè)1 GiB的L4緩存需要96 MiB的標(biāo)記,這比CPU上的緩存中存在的靜態(tài)內(nèi)存還要多。將塊大小增加到4 KiB,可以顯著減少標(biāo)記存儲(chǔ),只需要256 K個(gè)條目或者不到1 MiB的總存儲(chǔ)空間,這可能是可以接受的,考慮到下一代多核處理器中L3緩存的容量為4~16 MiB或者更多。
然而,這樣大的塊大小有兩個(gè)主要問(wèn)題。第一,緩存可能會(huì)被低效地使用,當(dāng)許多塊中的內(nèi)容不需要時(shí);這被稱(chēng)為碎片化問(wèn)題,它也出現(xiàn)在虛擬內(nèi)存系統(tǒng)中。此外,傳輸這樣大的塊如果大部分?jǐn)?shù)據(jù)沒(méi)有被使用也是低效的。第二,由于塊大小很大,緩存中能夠保存的不同塊的數(shù)量就很低,這可能導(dǎo)致更多的不命中,特別是沖突和一致性不命中。解決第一個(gè)問(wèn)題的一個(gè)部分解決方案是添加子塊(subblock)。子塊允許塊中的部分?jǐn)?shù)據(jù)是無(wú)效的,需要在不命中時(shí)才獲取它們。子塊技術(shù),然而,并不能解決第二個(gè)問(wèn)題。
標(biāo)記存儲(chǔ)是使用較小塊大小的主要障礙。一個(gè)可能的解決方案是將L4緩存的標(biāo)記存儲(chǔ)在HBM中。乍一看這似乎是行不通的,因?yàn)槊看卧L問(wèn)L4緩存都需要兩次訪問(wèn)DRAM:一次是為了標(biāo)記,另一次是為了數(shù)據(jù)本身。由于隨機(jī)訪問(wèn)DRAM所需的時(shí)間很長(zhǎng),通常是100個(gè)或更多處理器時(shí)鐘周期,所以這種方法被放棄了。Loh和Hill(2011)提出了一個(gè)巧妙的解決方案:將標(biāo)記和數(shù)據(jù)放在HBM SDRAM中的同一行中。雖然打開(kāi)行(最終關(guān)閉它)需要很長(zhǎng)時(shí)間,但是訪問(wèn)行中不同部分所需的CAS延遲只有新行訪問(wèn)時(shí)間的三分之一左右。因此我們可以先訪問(wèn)塊中的標(biāo)記部分,如果命中了,那么再使用列訪問(wèn)來(lái)選擇正確的字。Loh和Hill(L-H)提出了一種組織L4 HBM緩存的方法,使得每個(gè)SDRAM行由一組標(biāo)記(在塊頭部)和29個(gè)數(shù)據(jù)段組成,構(gòu)成一個(gè)29路組相聯(lián)緩存。當(dāng)訪問(wèn)L4時(shí),打開(kāi)適當(dāng)?shù)男胁⒆x取標(biāo)記;如果命中,則再進(jìn)行一次列訪問(wèn)以獲取匹配數(shù)據(jù)。
Qureshi和Loh(2012)提出了一種改進(jìn)方法,稱(chēng)為合金緩存(alloy cache),可以減少命中時(shí)間。合金緩存將標(biāo)記和數(shù)據(jù)融合在一起,并使用直接映射的緩存結(jié)構(gòu)。這樣可以將L4訪問(wèn)時(shí)間減少到一個(gè)HBM周期,通過(guò)直接索引HBM緩存并進(jìn)行標(biāo)記和數(shù)據(jù)的突發(fā)傳輸。
合金緩存相比L-H方案,將命中時(shí)間減少了超過(guò)兩倍,但是以增加不命中率1.1~1.2倍為代價(jià)。在這兩種方案中,不命中都需要兩次完整的DRAM訪問(wèn):一次是為了獲取初始標(biāo)記,另一次是為了訪問(wèn)主存(這甚至更慢)。如果我們能夠加快不命中檢測(cè),我們就能夠減少不命中時(shí)間。有兩種不同的解決方案來(lái)解決這個(gè)問(wèn)題:一種是使用一個(gè)映射來(lái)跟蹤緩存中的塊(不是塊的位置,只是是否存在);另一種是使用一個(gè)內(nèi)存訪問(wèn)預(yù)測(cè)器,使用歷史預(yù)測(cè)技術(shù)來(lái)預(yù)測(cè)可能的不命中,類(lèi)似于用于全局分支預(yù)測(cè)的技術(shù)。
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-542771.html
運(yùn)行 LH 方案、SRAM 標(biāo)簽方案和理想 L4(理想)的 SPECrate 基準(zhǔn)測(cè)試時(shí)的性能加速; 加速 1 表示 L4 緩存沒(méi)有任何改進(jìn),如果 L4 完美并且不占用訪問(wèn)時(shí)間,則可以實(shí)現(xiàn) 2 的加速。 使用 10 個(gè)內(nèi)存密集型基準(zhǔn)測(cè)試,每個(gè)基準(zhǔn)測(cè)試運(yùn)行八次。 使用隨附的未命中預(yù)測(cè)方案。 理想情況假設(shè)僅需要訪問(wèn)和傳輸 L4 中請(qǐng)求的 64 字節(jié)塊,并且 L4 的預(yù)測(cè)精度是完美的(即,以零成本知道所有未命中)。?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-542771.html
到了這里,關(guān)于計(jì)算機(jī)體系結(jié)構(gòu)基礎(chǔ)知識(shí)介紹之緩存性能的十大進(jìn)階優(yōu)化之編譯器控制的預(yù)取和利用HBM擴(kuò)展內(nèi)存層次(七)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!