焦 童,陳玲玲,安 鑫,李建華
(合肥工業(yè)大學計算機與信息學院,合肥 230009)
近年來,片上多核處理器集成核心的數(shù)量日益增多,對最后一級緩存(Last-Level Cache,LLC)的容量需求逐漸增加。受存儲密度限制,傳統(tǒng)靜態(tài)隨機存取存儲器(Static Random Access Memory,SRAM)的LLC 在整個芯片上面積占比逐漸增大。此外,已發(fā)展到深亞微米級的半導體技術以及急劇增加的SRAM 靜態(tài)能耗對片上LLC 性能提出更高要求。
當前電子自旋轉(zhuǎn)移矩隨機存取存儲器(Spin-Torque Transfer Random Access Memory,STT-RAM)、相變存儲器等非易失性存儲器(Non-Volatile Memory,NVM)具有良好的可擴展性、極低的靜態(tài)能耗以及較大的存儲密度,此類新興存儲器可提高片上緩存系統(tǒng)的性能并降低其能耗[1-3]。然而新型非易失性存儲器的讀寫操作具有不同的訪問延遲和能耗,目前大部分基于NVM技術的緩存寫操作延遲和能耗是讀操作的幾倍甚至幾十倍[4-5]。
針對NVM 等非對稱訪問緩存中寫操作的高延遲和高能耗問題,在進行旁路決策時應考慮緩存塊分配是否合理。本文通過分析LLC 中緩存塊的重用信息,提出一種基于緩存塊重用的ReBP動態(tài)旁路策略,從LLC缺失填充和上級緩存寫回兩方面進行旁路分析,以提升非易失性緩存系統(tǒng)的能效。
近年來,國內(nèi)外研究人員采用多種方法減少STTRAM 緩存的能耗,并通過預測數(shù)據(jù)塊寫入頻率來判斷能否將數(shù)據(jù)寫入STT-RAM 緩存。文獻[6-7]提出一種寫預測輔助STT-RAM 緩存的DASCA 系統(tǒng)來預測每個寫入請求是否為無效寫入,由于無效寫入數(shù)據(jù)在下一個寫入請求之前不會重用,因此DASCA 可避免無效數(shù)據(jù)寫入STT-RAM 緩存。文獻[8-10]提出一種基于統(tǒng)計的非對稱緩存旁路方式SBAC,其從能耗判斷是否將數(shù)據(jù)塊插入STT-RAM 緩存中,如果讀取和寫入操作次數(shù)已知,則可計算有無旁路能耗,并估算每個模塊的旁路能耗和不旁路能耗。此外,主流的NVM 緩存性能優(yōu)化方法還包括基于混合緩存架構(Hybrid Cache Architecture,HCA)的方法。混合緩存由具有不同存儲單元的多個陣列組成,其中包括一個容量較小的SRAM陣列和一個容量較大的STT-RAM 陣列,如果將寫密集型數(shù)據(jù)存儲在SRAM 陣列中,則可節(jié)省STT-RAM 陣列進行寫操作所需的大量能源成本。
文獻[11]提出基于讀寫感知的混合LLC 體系RWHCA,其根據(jù)導致LLC 未命中的指令來決定將數(shù)據(jù)塊存儲在STT-RAM 陣列中還是SRAM 陣列中。如果引起未命中的指令是load指令,則該指令提供給LLC的數(shù)據(jù)塊有可能再次被讀取,將該數(shù)據(jù)塊存儲在STTRAM 陣列中;如果該數(shù)據(jù)塊不是由load 指令提供,則其被判斷為寫密集型模塊而被存儲在SRAM 陣列中。文獻[12]提出一種HCA 管理策略,也稱為適應性放置與遷移策略,其將LLC 的寫操作分為預取寫操作、存儲指令寫操作和寫回操作3 種類型。在該策略中,先分析每個緩存塊類型的寫密集程度,再根據(jù)分析結果決定哪些類型的緩存塊存儲于SRAM 陣列和STT-RAM陣列中。文獻[13-15]提出一種HCA 準確預測機制,使用預測表存儲每個緩存塊的訪問模式并預測其寫強度,在LLC 中存儲緩存塊時,可參照預測表將緩存塊放入合適的陣列中。
綜上所述,傳統(tǒng)旁路策略可集中減少對STT-RAM陣列的寫操作次數(shù)并預測緩存塊類型。如果是重用率不高的緩存塊則會繞過STT-RAM 陣列,如果是重用率較高的緩存塊則不能采用旁路策略,從而導致STT-RAM 陣列產(chǎn)生較多高能耗寫操作。本文對旁路策略進行優(yōu)化,使重用率較高的緩存塊繞過STTRAM 陣列,并動態(tài)地將緩存塊寫入其他核心的同級緩存,以進一步減少STT-RAM 的寫操作。
本節(jié)介紹緩存塊重用信息及其利用方法與采用非對稱LLC 存在的問題,闡述LLC 發(fā)生缺失時進行填充以及對來自上一級緩存寫回操作的旁路策略。
圖1 為緩存塊A 從填充到緩存再到被緩存管理算法逐出緩存的整個生命周期。緩存塊A 通過讀取訪問或者預取操作填充至緩存,其在緩存中的生命周期由生存時間(從開始分配到最后一次命中的時間)和死亡時間(從最后一次命中到被逐出的時間)組成。分配后緩存塊的訪問命中總次數(shù)稱為數(shù)據(jù)重用次數(shù),圖1 中緩存塊A 的重用次數(shù)為5。第一次分配稱為初始放置,為記錄每個緩存塊的重用次數(shù),在每個緩存塊中增加額外的兩位計數(shù)器。
圖1 緩存塊A 的生命周期Fig.1 Life cycle of cache block A
由于讀寫具有不對稱性,因此NVM 緩存需要特定的管理策略。然而LRU 等傳統(tǒng)緩存管理策略僅考慮了緩存塊的局部特征,卻無法感知NVM 緩存的讀寫非對稱性。針對該問題,本文在多核處理器中基于不同緩存參數(shù)配置進行實驗(見3.1 節(jié)),得到不同寫延遲配置下運行SPLASH-2[16]基準測試程序的LLC 平均訪問時間,實驗結果如圖2 所示。
圖2 不同寫延遲配置下的LLC 平均訪問時間Fig.2 LLC average access time under different write delay configurations
在圖2 中,第1 組未配置3 級緩存LLC(Without LLC),得到數(shù)據(jù)直接從主存中填充到L2 緩存時的總數(shù)據(jù)訪問時間。第2 組(寫延遲為讀延遲的1 倍,記為1×)配置了具有相同讀寫訪問延遲的緩存。第3 組寫延遲分別增加到讀延遲的2 倍(2×)、3 倍(3×)、4 倍(4×)和5 倍(5×)??梢钥闯觯斁彺孀x寫訪問趨于不對稱時總數(shù)據(jù)訪問時間會增加,當LLC 緩存的寫延遲足夠大時刪除LLC 緩存有助于減少總數(shù)據(jù)訪問時間。對于radiosity 和radix 等基準測試程序,刪除LLC 緩存可減少訪問時間,說明將緩存塊從主存填充到LLC 意義不大。
當LLC 缺失時,目標緩存塊會從主存調(diào)出填充到LLC 中,采用旁路策略可減少LLC 中寫操作次數(shù)并避免性能下降。由于緩存具有非包含性,因此緩存塊即使通過旁路繞過LLC 也可保持數(shù)據(jù)一致性。下文將針緩存系統(tǒng)配置介紹LLC 的讀操作(寫操作與此類似)。
當LLC 缺失時,緩存塊從主存調(diào)出后的填充操作如圖3所示(虛線表示模塊之間可以數(shù)據(jù)互通,以下同)。如果主存加載的緩存塊繞過LLC,則其將被直接填充到L2 緩存,如路徑2 所示;否則緩存塊正常加載到LLC中,如路徑1 所示。結合圖2 的分析結果可知,將部分重用緩存塊填充到LLC 并不能帶來性能上的提升,其原因是此類緩存塊常由于后續(xù)請求被修改或被更新,導致LLC 中大部分為無效緩存塊,僅當來自上級緩存的數(shù)據(jù)逐級寫回,才能使得LLC 中緩存塊重新有效。
圖3 LLC 缺失時緩存塊的填充操作Fig.3 Filling operation of cache block when LLC is missing
基于上述規(guī)則,如果某個核心所執(zhí)行的指令請求逐級向下級緩存索引緩存塊,則當LLC 未命中時,整個緩存會產(chǎn)生一次缺失,此時需要從主存中查找緩存塊進行填充。如果此后緩存塊在其生命周期中有較高的重用率,可無需填充至LLC。當該緩存塊被替換算法逐出LLC 時,在某個時刻核心有一條相同的指令請求并再次出現(xiàn)緩存缺失,利用以往記錄可將緩存塊填充至對應核心的L2 緩存中,無需填充到LLC。
為支持旁路策略,需要額外的預測表來保存相應指令的部分地址位,且LLC 的每個緩存塊添加額外的數(shù)據(jù)比特來保存相應的部分地址位,LLC 緩存塊和預測表的結構如圖4 所示。當緩存塊從主存填充至LLC 時,需將請求指令的部分地址保存至緩存塊。如果該緩存塊被替換算法選擇為犧牲塊,則需檢查該緩存塊的重用信息,每個緩存塊均添加重用計數(shù)位(V),當重用計數(shù)位超過給定閾值(本文中閾值為2)時,該緩存塊中部分指令地址(Addr)位被保存到預測表中。如果此后有一條相同的請求指令出現(xiàn)LLC缺失,則表明查詢預測表匹配成功,且緩存塊會從主存旁路至L2 緩存。
圖4 LLC 緩存塊和預測表的結構Fig.4 Structure of LLC cache block and prediction table
下文列舉多核處理器實例(見圖5)來介紹基于預測表和重用信息的LLC 旁路策略(初始冷啟動下,預測表為空且無任何信息)。
1)在圖5(a)中,當核心0 的一條指令請求A 訪問LLC 出現(xiàn)缺失時,預測表為空,通過查詢主存獲得對應的緩存塊1 并將其填充至LLC,如圖5(b)所示。導入緩存塊后,更新狀態(tài)信息為:重用計數(shù)設置為0,Addr 域保存指令地址A 的高位部分。此后每次訪問和命中緩存塊1 均需更新重用計數(shù)器的值,以便后續(xù)旁路策略執(zhí)行決策。
2)在圖5(c)中,在某一個時刻緩存塊1 和緩存塊2 被替換算法先后從LLC 中逐出,此時需檢查緩存塊的重用信息,并根據(jù)重用計數(shù)器的值來動態(tài)決定對應緩存塊的地址信息是否需保存到預測表。由于緩存塊1 的重用計數(shù)器值為3,超出給定閾值,因此緩存塊1 的Addr 位被寫入預測表。因為緩存塊2的重用計數(shù)器值為1,未超出給定閾值,所以緩存塊2的Addr 位無需寫入預測表。此后若再訪問緩沖塊1,則通過檢查預測表可判定是否進行旁路操作。
3)在圖5(d)中,當核心0 的一條指令請求A 訪問LLC 出現(xiàn)缺失時,如果通過查詢預測表發(fā)現(xiàn)以前的記錄中保存有指令A 的地址,則請求匹配成功。來自主存的緩存塊將通過旁路策略被直接填充至核心0 的L2 緩存中。此時若所需訪問的地址在預測表中,則說明對應的緩存塊重用性很高,使其繞過LLC 緩存可減少寫次數(shù),不影響對該緩存塊的再次訪問。
圖5 LLC 旁路策略實例Fig.5 Example of LLC bypass strategy
4)圖6為緩存塊填入LLC 的過程。核心1有一條指令請求緩存塊2,由于該緩存塊已被逐出LLC,因此會出現(xiàn)LLC 缺失,需訪問主存來獲取緩存塊2,此時查詢預測表未能匹配成功,將緩存塊填充至LLC中。因為緩存塊2 被重用的次數(shù)小于旁路策略ReBP中設定的閾值,所以其被逐出LLC 時相關地址信息未存儲于預測表中,當其被再次訪問時,ReBP 在預測表中無法找到對應的信息,因此,對緩存塊2 不采取旁路操作。
圖6 緩存塊填入LLC 的過程Fig.6 Process of filling cache block into LLC
上述工作均圍繞讀操作進行,本文所提旁路策略ReBP 對寫操作的處理方式與此類似,同樣根據(jù)相應緩存塊的重用信息,利用預測表動態(tài)地進行旁路操作。
上級緩存(假設為L2緩存)的寫回操作旁路策略如圖7所示。當L2緩存中的緩存塊被寫回時,如果采用旁路策略,則該緩存塊將寫回其他核心的L2緩存中,如路徑4所示;否則,該緩存塊正常寫回LLC緩存中,如路徑3所示。
圖7 上級緩存寫回操作旁路策略Fig.7 Bypass strategy for write-back operation of superior cache
對寫回的緩存塊進行旁路操作目前存在如下問題:1)需確定對哪些寫回的緩存塊使用旁路操作;2)將采取旁路操作的緩存塊保存到何處。針對第1 個問題,根據(jù)上文分析結果,具有較高重用計數(shù)的緩存塊從當前緩存被逐出后,仍有較高的概率被再次重用填充。因此,該緩存塊填充到存儲壓力較小的核心的L2 緩存,不僅能減少基于NVM 的LLC寫操作次數(shù),還能以較小的代價再次重用該緩存塊。針對第2 個問題,為獲取各個核心L2 緩存的存儲壓力等狀態(tài)信息,本文所提旁路策略在多核芯片中增加緩存監(jiān)控模塊CM(見圖8),以監(jiān)測各個L2 緩存當前的存儲壓力,為旁路的緩存塊選擇合適目標,從而使得各個L2 緩存的負載更均衡。在下文的對比實驗中,將CM 模塊設置為實時查詢模式,并分析實時查詢和間隔查詢對緩存性能的影響。
圖8 CM 模塊結構Fig.8 Structure of CM module
圖9 為核心之間的旁路策略。由于緩存塊A 將被替換算法逐出,查找該緩存塊的重用計數(shù)信息后,若發(fā)現(xiàn)其超過設定的閾值,則可采取旁路操作。檢查CM 模塊中各個核心的L2 緩存負載信息,若當前核心2 的L2 緩存缺失率較其他核心更低,則可選擇從核心0 中的L2 緩存寫回核心2 的L2 緩存中。如果來自核心0的寫回緩存塊重用計數(shù)信息超過設定的閾值,則不采用旁路策略,直接正常寫回LLC 中。該旁路策略通過將來自L2緩存的寫回緩存塊旁路至其他核心,減少了LLC的寫次數(shù),使該緩存塊具有更高的重用率,后續(xù)訪問再次重用這些緩存塊的概率較高。由于L2 緩存更接近處理器,因此可縮短緩存塊的訪問延遲,提高整體系統(tǒng)性能,并減少LLC 的寫入次數(shù)。
圖9 核心之間的旁路策略Fig.9 Bypassing strategy in cores
本文通過實驗對提出的ReBP 策略進行驗證,分別評估其在單個和多個應用程序場景下的性能,并與其他相關策略進行對比分析。
本文采用Sniper 模擬器[17]進行片上多核處理器系統(tǒng)仿真實驗。該系統(tǒng)有4 個核心,每個核心的主頻為2 GHz。片上緩存系統(tǒng)設置為3 級緩存,L1I/L1D 和L2是基于SRAM 的緩存,LLC 是基于STT-RAM 的非對稱訪問緩存,相關組件配置如表1 所示。
表1 相關組件配置Table 1 Configuration of related components
為評估基于STT-RAM 的LLC 性能,本文將其與基于SRAM 的LLC 進行比較。通過采用CACTI 6.5[18]和NVSim[19]建模仿真4 MB STT-RAM 和4 MB SRAM 緩存對應的特性,參數(shù)設置如表2 所示。由于STT-RAM具有非易失性,因此其靜態(tài)能耗比SRAM 緩存少一個數(shù)量級。在相同的存儲容量下,若STT-RAM 所占面積越小,則STT-RAM的LLC在同等面積上存儲信息越多。
表2 SRAM 和STT-RAM 的仿真參數(shù)設置Table 2 Simulation parameter setting of SRAM and STT-RAM
為進行全面評估,分別在單一和隨機混合的多程序基準中進行分析。所有的基準測試均來自SPLASH-2。從SPLASH-2中隨機選擇4個程序構成多程序工作負載,如表3所示,并對所有負載運行過程中整個緩存層次的靜態(tài)能耗和動態(tài)能耗進行統(tǒng)計。本文仿真實驗實現(xiàn)了3種緩存策略:1)無旁路的高速緩存策略Baseline;2)基于統(tǒng)計的緩存旁路策略SBAC-Private[20],其利用數(shù)據(jù)重用計數(shù)概率進行旁路決策;3)本文提出的基于重用的旁路策略ReBP。以系統(tǒng)運行應用負載的總執(zhí)行時間作為性能指標,將高速緩存的總能耗作為能耗指標。所有仿真結果均以Baseline策略為基準進行對比。
表3 多程序工作負載Table 3 Multiprogramming workload
圖10 為上述3 種策略運行SPLASH-2 程序單應用基準測試下的能耗結果??梢钥闯?,ReBP 策略使緩存系統(tǒng)的能耗較Baseline 策略平均減少22.5%,而SBAC-Private 策略使緩存系統(tǒng)的能耗較Baseline 策略平均減少15.2%。對基于非易失性存儲器的緩存而言,旁路策略的能耗減少量與預測精度有關。由于基于重用的預測能獲得較高預測精度,因此ReBP策略可將高重用的緩存塊保留在上級緩存中的L2緩存,將低重用計數(shù)緩存塊繞過LLC。錯誤預測會導致ReBP 策略將有用的緩存塊也進行旁路,從而抵消其被正確實現(xiàn)帶來的優(yōu)勢。
圖10 3 種策略的單應用能耗對比Fig.10 Comparison of single application energy consumption of three strategies
如果應用程序自身的L2 緩存缺失率非常高,則旁路策略的作用將十分有限。例如對于ocean.cont-scale程序,ReBP 策略僅降低2%的能耗。由于L2 緩存缺失率高,因此ReBP 策略將緩存塊旁路到其他L2 緩存可能會進一步增加缺失率,從而在一定程度上抵消ReBP策略帶來的收益。
旁路策略除了通過減少STT-RAM 的寫操作降低能耗之外,對系統(tǒng)性能也有影響。圖11 為單應用場景下3 種策略中應用負載的運行時間對比情況??梢钥闯?,ReBP 策略使應用負載的運行時間較Baseline 策略平均減少6.6%,其原因如下:1)ReBP 策略可減少STT-RAM 中延遲較大的寫操作對讀操作的干擾,從而提升系統(tǒng)性能;2)ReBP 策略使重用率高的緩存塊繞過LLC,提升了LLC 的空間利用率,其可容納更多緩存塊來提升系統(tǒng)性能。SBAC-Private策略基于緩存塊的統(tǒng)計信息進行,預測精度低于ReBP 策略,其使應用負載的運行時間較Baseline 策略平均減少5.4%。
圖11 單應用場景下3 種策略應用負載的運行時間對比Fig.11 Running time comparison of application load of three strategies in single application scenario
由圖11 還可以看出,對于ocean.cont 程序,ReBP策略使應用負載的運行時間較Baseline 策略增加5%。因為L2 緩存缺失率普遍較高,所以ReBP 策略中旁路到其他核心的L2 緩存的緩存塊造成目標核心后續(xù)訪問緩存出現(xiàn)較多缺失,導致該程序在ReBP策略下運行時間延長。由上述分析可知,ReBP 策略的核心之間容量共享方案需考慮L2 緩存本身的壓力,若壓力達到一定程度,應關閉ReBP 策略中核心之間的旁路,這也是下一步繼續(xù)優(yōu)化ReBP 策略的一個重要方向。
圖12 為3 種策略在多應用(程序)基準測試下的能耗結果??梢钥闯觯琑eBP 策略在大部分多應用基準測試中的能耗較SBAC-Private 策略更少。與Baseline 策略相比,ReBP 策略與SBAC-Private 策略分別將能耗平均降低15.4%和11.3%。在多應用場景下,ReBP 策略將核心的高重用緩存塊填充至其他核心的L2 緩存可能會提升L2緩存的缺失率。因為每個核心均運行多個線程,會增加各L2 緩存之間旁路的頻率,從而給L2 緩存缺失率偏高的應用造成額外的缺失,浪費能耗且影響性能。由圖12 還可以看出,對于mix3、mix7、mix9 和mix10 這4 個基準測試多程序,ReBP 策略的能耗高于SBAC-Private 策略。
圖12 3 種策略的多應用能耗對比Fig.12 Comparison of multi application energy consumption of three strategies
在應用負載的運行時間上,ReBP 策略在多應用情況下與SBAC-Private 策略相似,均比Baseline 策略高約3%。圖13 為多應用場景下3 種策略中應用負載的運行時間對比情況??梢钥闯觯琑eBP策略與SBAC-Private策略應用負載的運行時間比Baseline 策略更長,其原因是每個核心都運行多個線程,各級緩存負載均很高,降低了ReBP 策略和SBAC-Private 策略進行旁路決策的精度。ReBP策略和SBAC-Private策略可有效降低STTRAM 緩存的能耗,但若多核系統(tǒng)中運行的應用對延遲敏感,則需慎用旁路策略。
圖13 多應用場景下3 種策略應用負載的運行時間對比Fig.13 Running time comparison of application load of three strategies in multi application scenario
在上述實驗中,采用ReBP 策略對L2 緩存塊進行旁路操作時,CM 模塊設置為實時查詢方式,通過不斷查詢比較4 個L2 緩存的缺失率選擇合適的旁路路徑。然而該實時查詢存在較大開銷,可將CM 模塊缺失率查詢方式設置為間隔查詢來減少開銷。在不同CM 模塊查詢間隔時間下,將ReBP 策略在3 個單應用場景和3 組多應用場景中應用負載的運行時間進行對比分析,結果如圖14 所示。
圖14 不同應用場景下CM 模塊查詢結果Fig.14 Query results of CM module in different application scenarios
由圖14可以看出,當查詢間隔時間為8 ms時,mix4應用負載的運行時間最優(yōu),其他應用均在4 ms 的查詢間隔時間下獲得最優(yōu)性能。此外,當查詢間隔很短時應用的運行時間延長,當查詢間隔逐漸增加后應用的運行時間縮短,但當查詢間隔進一步增加后應用的運行時間又延長。其原因在于,非常小的時間間隔會使得CM 模塊查詢頻繁,造成查詢總開銷較大,從而影響應用的性能。隨著查詢間隔時間增加,CM 模塊中各個L2 緩存塊的壓力信息由于長時間得不到更新,造成旁路策略長時間寫入同一個核心L2 緩存塊中,導致該緩存塊負載較大,進而污染該緩存產(chǎn)生額外的LLC 訪問次數(shù),最終使得整個應用的運行時間增加。由上述分析可知,查詢間隔時間取4 ms 最佳。
非易失性存儲器可替代傳統(tǒng)基于CMOS 芯片的RAM 存儲器作為片上緩存,但其寫操作代價過高導致無法被大規(guī)模應用,而利用緩存旁路技術可減少緩存的寫操作來提升非易失性緩存性能。本文分析測試程序訪問最后一級緩存時的特征,提出基于緩存塊重用的動態(tài)旁路策略,通過提升旁路決策精度確保旁路的效率,同時將高重用的緩存塊動態(tài)旁路到存儲壓力較小的上級緩存,以減少非易失性緩存的寫操作次數(shù)。實驗結果表明,與未采用旁路策略的緩存相比,該策略的基準測試程序運行時間和緩存能耗更低,有效提高了整體緩存性能。由于本文采用LLC 缺失時的旁路策略,因此LLC 體系結構設計為非包含模式,該模式下LLC 寫操作次數(shù)相對較多。后續(xù)考慮在該策略的基礎上,將LLC 體系結構設計為包含模式以減少寫操作次數(shù),并采用添加額外標簽的無數(shù)據(jù)存儲方式,實現(xiàn)空間容量利用率最大化。