優(yōu)化四:非阻塞緩存,提高緩存帶寬
對(duì)于允許亂序執(zhí)行的流水線計(jì)算機(jī),處理器不需要因數(shù)據(jù)高速緩存未命中而停止。 例如,處理器可以繼續(xù)從指令高速緩存獲取指令,同時(shí)等待數(shù)據(jù)高速緩存返回丟失的數(shù)據(jù)。 非阻塞高速緩存或無(wú)鎖高速緩存允許數(shù)據(jù)高速緩存在未命中期間繼續(xù)提供高速緩存命中,從而增強(qiáng)了這種方案的潛在優(yōu)勢(shì)。 這種“未命中下的命中”優(yōu)化通過(guò)在未命中期間提供幫助而不是忽略處理器的請(qǐng)求來(lái)減少有效的未命中損失。 一個(gè)微妙而復(fù)雜的選項(xiàng)是,如果緩存可以重疊多個(gè)未命中,則可以進(jìn)一步降低有效未命中懲罰:“多次未命中下的命中”或“未命中下的未命中”優(yōu)化。 僅當(dāng)內(nèi)存系統(tǒng)可以處理多次未命中時(shí),第二個(gè)選項(xiàng)才有用。 大多數(shù)高性能處理器(例如英特爾酷睿處理器)通常都支持兩者,而許多低端處理器僅在 L2 中提供有限的非阻塞支持。
簡(jiǎn)單來(lái)說(shuō),非阻塞緩存是一種數(shù)據(jù)緩存,它可以在處理一個(gè)緩存不命中的請(qǐng)求時(shí),繼續(xù)響應(yīng)其他緩存命中的請(qǐng)求,從而減少處理器的等待時(shí)間。
非阻塞緩存有以下幾種優(yōu)化方式:
- 命中在不命中下(hit under miss):一種非阻塞緩存優(yōu)化方式,它允許在處理一個(gè)緩存不命中的請(qǐng)求時(shí),同時(shí)響應(yīng)一個(gè)緩存命中的請(qǐng)求。
- 命中在多重不命中下(hit under multiple miss)或不命中在不命中下(miss under miss):一種非阻塞緩存優(yōu)化方式,它允許在處理多個(gè)緩存不命中的請(qǐng)求時(shí),同時(shí)響應(yīng)多個(gè)緩存命中或不命中的請(qǐng)求。這種方式需要內(nèi)存系統(tǒng)能夠同時(shí)服務(wù)多個(gè)不命中的請(qǐng)求。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-530762.html
- Farkas和Jouppi (1994) 的研究:他們假設(shè)了一個(gè)8 KiB的單層次緩存和一個(gè)14周期的不命中懲罰,并觀察了允許一個(gè)命中在不命中下優(yōu)化時(shí),對(duì)于SPECINT92和SPECFP92基準(zhǔn)測(cè)試程序的有效不命中懲罰(effective miss penalty)的減少情況。他們發(fā)現(xiàn)對(duì)于SPECINT92程序平均減少了20%,對(duì)于SPECFP92程序平均減少了30%。
- Li等人 (2011) 的研究:他們更新了前一項(xiàng)研究,使用了一個(gè)多層次緩存、更現(xiàn)代化的不命中懲罰假設(shè)和更大更具挑戰(zhàn)性的SPECCPU2006基準(zhǔn)測(cè)試程序。他們的研究基于一個(gè)類似于Intel i7的單核處理器模型。圖顯示了允許1、2和64個(gè)命中在不命中下優(yōu)化時(shí),數(shù)據(jù)緩存訪問(wèn)延遲的減少情況。他們發(fā)現(xiàn)由于緩存變大和增加了三級(jí)緩存,非阻塞緩存的效果有所降低,對(duì)于SPECINT2006程序平均減少了約9%,對(duì)于SPECFP2006程序平均減少了約12.5%。
?
評(píng)估非阻塞緩存性能的難點(diǎn)是,緩存不命中并不一定會(huì)導(dǎo)致處理器停頓。在這種情況下,很難判斷任何一個(gè)不命中的影響,從而計(jì)算平均內(nèi)存訪問(wèn)時(shí)間。有效的不命中懲罰并不是所有不命中的時(shí)間之和,而是處理器停頓的不重疊的時(shí)間。非阻塞緩存的效益是復(fù)雜的,它取決于以下幾個(gè)因素:
- 當(dāng)有多個(gè)不命中時(shí),不命中懲罰的大小,這決定了處理器能否在等待數(shù)據(jù)時(shí)繼續(xù)執(zhí)行其他指令。
- 內(nèi)存引用模式,這決定了處理器在一個(gè)不命中期間需要訪問(wèn)多少其他數(shù)據(jù)。
- 處理器能夠同時(shí)處理多少個(gè)不命中的請(qǐng)求,這決定了非阻塞緩存能夠提供多少優(yōu)化方式。
一般來(lái)說(shuō),亂序執(zhí)行的處理器能夠隱藏大部分一級(jí)數(shù)據(jù)緩存不命中但在二級(jí)緩存命中的懲罰,但是不能隱藏很大一部分低層次緩存不命中的懲罰。決定支持多少個(gè)未完成的不命中請(qǐng)求取決于以下幾個(gè)因素:
- 不命中流中的時(shí)間和空間局部性,這決定了一個(gè)不命中是否可以啟動(dòng)一個(gè)新的訪問(wèn)到低層次緩存或內(nèi)存。
- 響應(yīng)內(nèi)存或緩存的帶寬,這決定了一個(gè)不命中需要等待多長(zhǎng)時(shí)間才能得到數(shù)據(jù)。
- 要允許在最低層次緩存有更多的未完成的不命中請(qǐng)求(因?yàn)檫@里的不命中時(shí)間最長(zhǎng)),就需要在高層次緩存至少支持同樣多的不命中請(qǐng)求,因?yàn)橐粋€(gè)不命中必須從最高層次緩存開(kāi)始。
- 內(nèi)存系統(tǒng)的延遲,這決定了一個(gè)不命中需要等待多長(zhǎng)時(shí)間才能得到響應(yīng)。
實(shí)現(xiàn)非阻塞緩存有以下兩個(gè)主要的問(wèn)題:
- 如何在命中和不命中之間進(jìn)行仲裁,解決沖突。在一個(gè)阻塞緩存中,不命中會(huì)導(dǎo)致處理器停頓,不會(huì)有更多的訪問(wèn)發(fā)生,直到不命中處理完畢。在一個(gè)非阻塞緩存中,命中可能與從下一級(jí)存儲(chǔ)器返回的不命中發(fā)生碰撞。如果允許多個(gè)未完成的不命中,這種碰撞就更有可能發(fā)生。這些碰撞必須被解決,通常的方法是先給予命中優(yōu)先于不命中,其次是對(duì)碰撞的不命中進(jìn)行排序(如果可能的話)。
- 如何跟蹤未完成的不命中,知道何時(shí)可以讓加載或存儲(chǔ)繼續(xù)執(zhí)行。在一個(gè)阻塞緩存中,我們總是知道哪個(gè)不命中正在返回,因?yàn)橹挥幸粋€(gè)可以未完成。在一個(gè)非阻塞緩存中,這種情況很少成立。考慮一下在一級(jí)緩存發(fā)生的一個(gè)不命中。它可能在二級(jí)緩存產(chǎn)生一個(gè)命中或不命中;如果二級(jí)緩存也是非阻塞的,那么返回到一級(jí)緩存的不命中的順序就不一定和它們最初發(fā)生的順序相同。多核和其他多處理器系統(tǒng)由于有非均勻緩存訪問(wèn)時(shí)間也會(huì)引入這種復(fù)雜性。當(dāng)一個(gè)不命中返回時(shí),處理器必須知道哪個(gè)加載或存儲(chǔ)導(dǎo)致了這個(gè)不命中,以便這條指令可以繼續(xù)執(zhí)行;并且必須知道數(shù)據(jù)應(yīng)該放在緩存的哪個(gè)位置(以及這個(gè)塊的標(biāo)記位的設(shè)置)。
在非阻塞高速緩存中,命中可能與從內(nèi)存層次結(jié)構(gòu)的下一級(jí)返回的未命中發(fā)生沖突。如果我們?cè)试S多個(gè)未完成的未命中,則未命中甚至有可能發(fā)生沖突。
為什么?
因?yàn)榉亲枞彺嫘枰谟邢薜木彺婵臻g和帶寬內(nèi)處理多個(gè)請(qǐng)求,而這些請(qǐng)求可能訪問(wèn)相同或相鄰的緩存塊。例如:
- 如果一個(gè)命中請(qǐng)求和一個(gè)未命中請(qǐng)求訪問(wèn)同一個(gè)緩存塊,那么它們就會(huì)發(fā)生沖突,因?yàn)樗鼈冃枰瑫r(shí)讀寫這個(gè)塊。通常的解決方法是讓命中請(qǐng)求優(yōu)先于未命中請(qǐng)求,以減少處理器的等待時(shí)間。
- 如果一個(gè)未命中請(qǐng)求和另一個(gè)未命中請(qǐng)求訪問(wèn)同一個(gè)緩存組(set),那么它們就會(huì)發(fā)生沖突,因?yàn)樗鼈冃枰瑫r(shí)占用這個(gè)組的一個(gè)空閑位置。通常的解決方法是對(duì)未命中請(qǐng)求進(jìn)行排序,以保證一定的順序和公平性。
- 如果多個(gè)未命中請(qǐng)求返回的數(shù)據(jù)量超過(guò)了緩存到處理器的總線帶寬,那么它們就會(huì)發(fā)生沖突,因?yàn)樗鼈冃枰瑫r(shí)傳輸數(shù)據(jù)給處理器。通常的解決方法是增加總線帶寬或使用壓縮技術(shù),以減少數(shù)據(jù)量。
非阻塞緩存需要額外的邏輯,因此在能量上有一些代價(jià)。然而,很難準(zhǔn)確地評(píng)估它們的能量消耗,因?yàn)樗鼈兛赡軠p少停頓時(shí)間,從而降低執(zhí)行時(shí)間和能量消耗。除了上述問(wèn)題之外,多處理器內(nèi)存系統(tǒng)(無(wú)論是在單個(gè)芯片上還是多個(gè)芯片上)還必須處理與內(nèi)存一致性和一致性相關(guān)的復(fù)雜實(shí)現(xiàn)問(wèn)題。而且由于緩存不命中不再是原子性的(因?yàn)檎?qǐng)求和響應(yīng)被分開(kāi)并且可能被多個(gè)請(qǐng)求交錯(cuò)),還有死鎖的可能性。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-530762.html
?
到了這里,關(guān)于計(jì)算機(jī)體系結(jié)構(gòu)基礎(chǔ)知識(shí)介紹之緩存性能的十大進(jìn)階優(yōu)化之非阻塞緩存(四)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!