陳 瑞, 夏承遺
1(天津理工大學(xué) 天津市智能計算與軟件新技術(shù)重點實驗室, 天津 300384)
2(天津理工大學(xué) 學(xué)習(xí)型智能計算教育部工程研究中心, 天津 300384)
隨著人工智能[1]的興起, 社會步入大數(shù)據(jù)時代, 數(shù)據(jù)成為密集應(yīng)用的重要因素, 密集應(yīng)用能夠在短期內(nèi)產(chǎn)生大量的TB級(250B)甚至PB級(260B)數(shù)據(jù), 它通過實時的數(shù)據(jù)處理和及時反饋, 動態(tài)調(diào)整應(yīng)用的各個參數(shù), 以此來優(yōu)化應(yīng)用性能. 它不僅可以通過分析同維度大量數(shù)據(jù)獲取最佳的數(shù)據(jù)區(qū)間, 而且還能通過分析不同維度數(shù)據(jù), 獲取潛在的聯(lián)系[2], 例如沃爾瑪?shù)钠【坪图埬蜓潝[放位置. 在處理海量的數(shù)據(jù)方面, 存在CPU處理性能發(fā)揮不充分、數(shù)據(jù)傳輸帶寬制約問題[3],同時海量數(shù)據(jù)存儲也面臨巨大挑戰(zhàn)[4]. 在截至22 nm工藝之前, 根據(jù)摩爾定律CPU每18個月性能翻一番. 與此同時, 內(nèi)存的封裝管腳數(shù)每6年會翻一番[5]. 在大多數(shù)應(yīng)用中, 涉及到內(nèi)存訪問的指令占20%-40%[6]. 因此, CPU與內(nèi)存之間存在著大量的數(shù)據(jù)傳輸. 然而, CPU的執(zhí)行速度和內(nèi)存數(shù)據(jù)傳輸速度嚴(yán)重的不匹配[7], 難以最大化發(fā)揮CPU的性能進(jìn)而影響計算機的整體性能.此外, 海量數(shù)據(jù)不同的存儲方式也對訪問的性能有著巨大的影響. 目前主流的內(nèi)存訪問方式都是面向行向的. 在特定大規(guī)模密集數(shù)據(jù)應(yīng)用場景下, 行向數(shù)據(jù)訪問方式已經(jīng)不能夠滿足實時數(shù)據(jù)、快速訪問、特定數(shù)據(jù)高效訪問的需求, 同時行向的數(shù)據(jù)在訪問過程中還存在著數(shù)據(jù)訪問效率不高, 存儲空間開銷大的問題. 因此,傳統(tǒng)的內(nèi)存訪問面臨著如下幾個方面的挑戰(zhàn). 首先, 傳統(tǒng)行方向的內(nèi)存訪問在獲取數(shù)據(jù)的時候, 需要行方向和列方向分別選通. 其次, 在傳統(tǒng)行方向的大量數(shù)據(jù)獲取中, 為了匹配CPU的高性能數(shù)據(jù)都是通過組的形式并行傳輸?shù)?例如64 bit), 這就導(dǎo)致了很多數(shù)據(jù)并不是真正需要的數(shù)據(jù), 在篩選數(shù)據(jù)的階段又會占用CPU 時間影響性能. 最后, 在基于電荷材質(zhì)組成的內(nèi)存中, 由于受到摩爾定律的影響, 在單元尺寸已經(jīng)進(jìn)入了瓶頸,無法再進(jìn)一步的縮小尺寸——單元尺寸越小, 元器件間隙就越小, 產(chǎn)生的能耗越低, 性能越高[8].
近年來, 列的內(nèi)存訪問方式應(yīng)運而生. 新型存儲單元的設(shè)計不僅能夠?qū)崿F(xiàn)列方向的內(nèi)存訪問而且還兼容行方向的內(nèi)存訪問, 這使得數(shù)據(jù)的訪問方式更加的完善、高效. 此外, 也可以通過多層的方式來實現(xiàn)行列兩種不同內(nèi)存訪問方式. 另外, 不同于電荷單元的電阻式單元也相繼出現(xiàn), 電阻式非易失性存儲材料具有非易失、低能耗以及相較于電容式材料能夠進(jìn)一步縮小單元尺寸的特點[9], 這些優(yōu)秀的性能逐漸受到研究者的關(guān)注.
動態(tài)隨機訪問存儲器[10]工作原理是利用電容內(nèi)存儲電荷的多寡來代表一個二進(jìn)制比特是1還是0. 面向行的內(nèi)存訪問方式效率已經(jīng)非常的低下, 這成為影響內(nèi)存訪問效率的嚴(yán)重問題. 在繼承傳統(tǒng)的DRAM結(jié)構(gòu)上, 通過設(shè)計新的存儲單元組成新的存儲陣列來實現(xiàn)列向的訪問方式. 在基于DRAM的基礎(chǔ)結(jié)構(gòu)上設(shè)計新的存儲單元, 通過添加晶體管元器件使得DRAM不僅能夠進(jìn)行面向行的內(nèi)存訪問而且能夠進(jìn)行面向列的內(nèi)存訪問.
此外, 非易失性隨機訪問存儲器(Non-Volatile random access Memory, NVM)[11]有望可用于取代DRAM構(gòu)建下一代內(nèi)存體系存儲容器. 盡管在眾多材料之中存儲單元相差各異, 然而在結(jié)構(gòu)布局上可以有著相同的構(gòu)建方式, 運用三維空間位置實現(xiàn)同等行向訪問的列向訪問方式.
內(nèi)存的列向訪問方式是應(yīng)用于特定的情況下, 針對密集同類型數(shù)據(jù)的存儲、訪問、計算有著非常大的優(yōu)勢, 能夠?qū)崿F(xiàn)傳統(tǒng)行向訪問的數(shù)倍性能提升. 本文通過從內(nèi)存列向訪問出發(fā), 詳細(xì)的闡述了DRAM、NVM兩個不同的實現(xiàn)方式以及對應(yīng)的上層設(shè)計, 并對相關(guān)應(yīng)用場景進(jìn)行了展望.
在DRAM的存儲結(jié)構(gòu)設(shè)計中, 如圖1所示存儲單元是一個1T1C結(jié)構(gòu)[12], 其中T代表晶體管(transistor),C代表電容器(capacitor), 通過電容中電荷量以及感知放大器(Sense Amplifier, SA)可以區(qū)分?jǐn)?shù)據(jù)的邏輯0和1.
圖1 1T1C結(jié)構(gòu)示意圖
由于傳統(tǒng)的DRAM給每個單元安排一維的線性訪問方式, 本文稱之為面向行的訪問. 在傳統(tǒng)的DRAM中, 不同的數(shù)據(jù)布局方式可以有效地提高數(shù)據(jù)的緩存命中率. 并且可以通過行列轉(zhuǎn)換來實現(xiàn)應(yīng)用的列向訪問模式. 但是當(dāng)轉(zhuǎn)換矩陣過大時, 性能并不理想[13]. 文獻(xiàn)[14]提出可以改變數(shù)據(jù)組織方式和訪問模式, 使得數(shù)據(jù)獲取性能提升了1倍. 另外, 文獻(xiàn)[15]提出利用方塊布局高效地收集塊數(shù)據(jù), 并將其運用于圖形處理應(yīng)用之中. 其次, Chatterjee等人[16]提出一種非線性的數(shù)據(jù)布局, 在該布局下實現(xiàn)了接近行布局方式下的性能[17].與此同時, Dahlgren等人[18]研究表明空間位置和訪問模式是數(shù)據(jù)獲取的重要因素.
因此, 考慮新的結(jié)構(gòu)布局和空間位置能夠有效提升數(shù)據(jù)的獲取性能.
在1T1C的結(jié)構(gòu)構(gòu)建的陣列中, 每次獲取數(shù)據(jù)都是以行為單位進(jìn)行的, 但是一些多維數(shù)據(jù)分析的應(yīng)用場景下, 該訪問方式存在獲取額外無效數(shù)據(jù), 額外篩選數(shù)據(jù)操作的情況.
為此, Chen等人[19]創(chuàng)造性地設(shè)計出類似于面向行的數(shù)據(jù)訪問方式, 本文稱該為面向列的訪問方式. 他們?yōu)榇嗽O(shè)計出了新的存儲單元2T1C. 如圖2所示, 在訪問一個共用電容結(jié)構(gòu)中, 提供了兩個不同方向的晶體管. 相比較1T1C而言, 該結(jié)構(gòu)不同的設(shè)計在于存儲單元上添加了一個用于控制列向訪問的列晶體管, 通過控制行列晶體管開關(guān)狀態(tài), 就可以兩種方式進(jìn)行切換.
圖2 2T1C結(jié)構(gòu)示意圖
在該結(jié)構(gòu)下, Yu等人[20]研究表明: 相比較傳統(tǒng)的DRAM結(jié)構(gòu), 在犧牲了2.6%的額外元器件開銷代價后, 平均內(nèi)存利用提升了5.8%、內(nèi)存訪問延遲降低了14.8%、能效消耗降低了4.4%.
根據(jù)不同的存儲單元, 最后結(jié)果對比結(jié)果如表1所示.
表1 兩種不同的DRAM的比較
如圖3中所示, 圖3上半部分橫向的虛線框中存儲單元形成組稱之為行, 圖3右方縱向的虛線框中存儲單元形成組稱之為列. 存儲單元的晶體管控制的線組成字線, 傳輸電荷信息線組成比特線.
圖3 2T1C單元存儲陣列示意圖
在基于2T1C存儲單元的內(nèi)存陣列結(jié)構(gòu)中, 內(nèi)存訪問過程如圖4中所示, CPU先向內(nèi)存控制器發(fā)去訪存指令, 內(nèi)存控制器通過請求, 傳輸?shù)牡刂沸畔⑼ㄟ^控制信號去進(jìn)行判斷行列訪問類別, 然后傳輸?shù)刂沸畔⑦x中對應(yīng)的位置通過數(shù)據(jù)總線進(jìn)行讀寫操. 過程如圖4所示.
圖4 內(nèi)存訪問示意圖
考慮到行列轉(zhuǎn)換過程中, 盡管可以利用行轉(zhuǎn)換成列方式, 但是數(shù)據(jù)在轉(zhuǎn)換過程中, 轉(zhuǎn)換矩陣過大會導(dǎo)致轉(zhuǎn)換效率不高, 從而數(shù)據(jù)訪問的效率不佳. 另外, 改變數(shù)據(jù)的組織方式雖然可以提升數(shù)據(jù)的訪問性能, 但是它結(jié)構(gòu)布局沒變, 僅是轉(zhuǎn)換地址信息. 其次, 非線性的布局方式能媲美行布局方式, 有力的說明了非線性布局的有效性, 因此行列布局也是得以研究, 可以考慮不同的布局方式來實現(xiàn)已有的性能或者性能提升. 最后,行列布局能夠從結(jié)構(gòu)出發(fā), 通過兩種不同的路徑訪問同一存儲單元, 它不僅在數(shù)據(jù)獲取性能上超過了行布局, 并且能夠應(yīng)用于更多的場景下.
另外, 非易失性材料有著許多材料性能優(yōu)勢, 并且別出新意的結(jié)構(gòu)排布, 使得它有著超越前者的巨大研究潛力.
NVM內(nèi)存具有非易失、按字節(jié)存取、存儲密度高、低能耗、讀寫性能接近DRAM、就地更新等眾多優(yōu)點[21], 得到了學(xué)術(shù)界和工業(yè)界的廣泛研究[22]. 大量的非易失性的存儲器如雨后春筍一般出現(xiàn), 如電阻式隨機存儲器(ReRAM)[23]、自旋轉(zhuǎn)移力矩磁隨機存取存儲器(STT-MRAM)[24]和相變內(nèi)存(PCM)[25]以及憶阻器(memristor)[26]等.
NVM具有的優(yōu)良特性已經(jīng)應(yīng)用于很多領(lǐng)域, 包括數(shù)據(jù)庫方面[27]和科學(xué)應(yīng)用[28]等.
另外, 文獻(xiàn)[29]通過研究NVM構(gòu)建異構(gòu)內(nèi)存系統(tǒng), 并且對其異構(gòu)內(nèi)存的頁面管理進(jìn)行研究以解決數(shù)據(jù)遷移的問題. 通過內(nèi)存分配策略, 實現(xiàn)多維場景的優(yōu)化. 此外, 文獻(xiàn)[30]針對NVM 的壽命研究, 提出里內(nèi)存壓縮策略, 盡量減少數(shù)據(jù)量, 降低寫入磨損, 并且通過研究數(shù)據(jù)放置策略, 提出基于輪轉(zhuǎn)的磨損均衡機制, 均勻使用資源, 延長壽命. 另外, 文獻(xiàn)[31]提出的混合內(nèi)存存儲模型除了擁有ReRAM的優(yōu)秀特性之外還有著不錯的讀寫性能. 最后, ReRAM優(yōu)秀的特點不僅可以運用于構(gòu)建行存儲結(jié)構(gòu), 同樣也可以運用構(gòu)建與行列存儲結(jié)構(gòu)之中.
ReRAM的讀取延遲性能可以與DRAM相當(dāng), 并且通過優(yōu)化可以將DRAM和ReRAM之間的性能橋接在10%以內(nèi), 被認(rèn)為是構(gòu)建下一代主存儲器的替代方案[32]. 因此, 本文選擇ReRAM來進(jìn)行說明, 以下使用NVM對ReRAM統(tǒng)稱.
圖5展示了ReRAM單元[33-35]的金屬絕緣體金屬結(jié)構(gòu): 上電極、下電極和夾在它們之間的金屬氧化物層[36]. 通過施加外部電壓, ReRAM單元可以在高阻狀態(tài)(High Resistance State, HRS)和低電阻狀態(tài)(Low Resistance State, LRS)之間切換, 這兩個狀態(tài)分別用來表示邏輯0和1[37].
圖5 ReRAM存儲單元示意圖
圖6顯示了由0T1R結(jié)構(gòu)存儲單元組成的陣列, 其中T代表晶體管, R代表電阻器(resistor)[38,39]. 直接通過上端和下端的電極連接上字線和比特線, 不僅使存儲單元的特征尺寸最小化, 而且還具有良好的對稱性,稱為交叉點結(jié)構(gòu)(crossbar)[40-42].
圖6 交叉點結(jié)構(gòu)示意圖
圖7是該結(jié)構(gòu)的放大圖[43], 在交叉點結(jié)構(gòu)中存儲單元僅是一個可以改阻值的電阻器, 并且這個交叉點陣列是由眾多的字線和比特線交叉組成的, 每個存儲單元位于字線和比特線的交點處屬于一個三維的空間.從結(jié)構(gòu)訪問上看, 由于行和列嚴(yán)格對稱結(jié)構(gòu), 所以在面向行和面向列的訪問上有著得天獨厚的結(jié)構(gòu)優(yōu)勢.
圖7 交叉點結(jié)構(gòu)放大圖
NVM的內(nèi)存訪問和DRAM 類似, 由于Crossbar結(jié)構(gòu), 只需要獲取對應(yīng)的訪問指令, 通過相對應(yīng)的控制指令去執(zhí)行行列訪問的不同的操作.
然而, 在上述的交叉點結(jié)構(gòu)中, 會產(chǎn)生一個干擾問題, 即潛入路徑電流, 它會引起相鄰存儲單元間的串?dāng)_干擾, 從而導(dǎo)致誤讀, 進(jìn)而嚴(yán)重影響交叉點陣列的工作.若能解決潛入路徑電流問題, 將會大大降低陣列的功耗, 提高它的可靠性和穩(wěn)定性.
為了解決潛入路徑電流的問題, Chen等人[44]提出了一種基于ReRAM的多層內(nèi)存架構(gòu), 該架構(gòu)是由兩層ReRAM存儲單元和兩個控制晶體管組成, 可以實現(xiàn)行列的2D陣列的訪問. 如圖8所示, M1和M2存儲單元, N1和N2是兩個控制晶體管. N1控制行訪問模式連接iRB和iRW, N2控制列訪問模式連接iCW和iCB. 通過測試結(jié)果顯示: 提出的設(shè)計結(jié)構(gòu)上相對于交叉點結(jié)構(gòu)提高了5倍左右的帶寬, 降低了1.4倍左右的能耗.
圖8 存儲單元結(jié)構(gòu)示意圖
在非易失性存儲中, 實現(xiàn)行列訪問的方式不同, 表2中對兩種不同的NVM進(jìn)行了對比.
表2 NVM的對比
表3顯示了從物理設(shè)計結(jié)構(gòu)上DRAM和NVM在實現(xiàn)列向訪問的不同設(shè)計以及相關(guān)的不同特點, 并進(jìn)行了比較和總結(jié).
表3 行列訪問實現(xiàn)的比較
考慮到上述的結(jié)構(gòu)特點, 盡管在NVM有著潛在電流的問題, 但是2D-NVM添加一倍的器件成本使得在更通用的場景下不是最好的折中選擇, 使得基于Crossbar的NVM會是研究未來行列訪問的最好選擇.
通過添加或者修改物理結(jié)構(gòu)之后, 欲實現(xiàn)有效的行列訪問還需要與其相對應(yīng)的控制器設(shè)計、配套指令集、相應(yīng)地址映射方式.
由于DRAM的控制協(xié)議已經(jīng)非常成熟了, 而DRAM的控制協(xié)議不能夠直接用于NVM之上. 考慮到DRAM和ReRAM行列不兼容、讀寫刷新與否的技術(shù)特性存在的問題, Talati等人[45]提出了ReRAM訪問協(xié)議RDDR, 該協(xié)議的特點是通過列向訪問模式, 閉頁策略(closed-page polices). 并且通過測試ReRAM內(nèi)存系統(tǒng)與使用DDR4在SPEC CPU2006工作負(fù)載訪問下進(jìn)行比較, 結(jié)果表明: 該系統(tǒng)的性能提高了35%, 能耗降低了7%.
在DRAM 中針對內(nèi)存訪問擁有兩個不同的訪問指令, load和store. 然而, 為了更好的使用硬件資源, 需要設(shè)計對應(yīng)的列向訪問的訪問指令Cstore和Cload[46]:
reg是目標(biāo)寄存器, caddr是面向列的數(shù)據(jù)地址.Cload和load指令類似, Cstore和store指令類似, 通過這兩個新添加指令來配合內(nèi)存控制器進(jìn)行行列訪問類型判斷, 并且和存在的load/store指令搭配一起使用.
另外, 為了與行向訪問區(qū)分開來, 需要對列向訪設(shè)計地址映射. 圖9顯示了面向行的32位地址結(jié)構(gòu), 圖10顯示了面向列的32位地址結(jié)構(gòu). 單位是bit, Rank是2個單位, Subarray是3個單位, Bank是3個單位,Channel是1個單位, Row和Column都是10個單位,IntraBus是3個單位. 行地址結(jié)構(gòu)和列的地址結(jié)構(gòu)基本類似, 唯一不同的點在于, 兩者之間Row和Column順序不同, 就由此來進(jìn)行區(qū)分兩種不同的地址.
圖9 行地址映射
圖10 列地址映射
本文從內(nèi)存訪問方式的角度進(jìn)行研究, 分析了傳統(tǒng)行向訪問過程中存在的特定場景性能不足的問題,為了滿足特定的性能需求拓展新的列向內(nèi)存訪問方式,具體總結(jié)如下:
在DRAM設(shè)計中, 由于存儲單元上添加了一個列向的晶體管, 使得存儲單元可以列向數(shù)據(jù)訪問. 但是,添加晶體管導(dǎo)致存儲單元的尺寸變大, 不僅增加了格外的開銷, 還會限制了性能進(jìn)一步的提升. 考慮到DRAM需要定時刷新, 兩個晶體管共同訪問同一個電容器, 因此, 刷新次數(shù)也會相應(yīng)的增加, 同時會增加刷新能耗.
在NVM設(shè)計中, 基于Crossbar的三維疊加結(jié)構(gòu),使得行列訪問方式可以得到統(tǒng)一. 得益于這個結(jié)構(gòu), 非易失性材料能夠滿足存儲單元尺寸的更小化, 同時還能降低訪問的能耗. 但是, 這種結(jié)構(gòu)需要嚴(yán)格的對稱性,訪問還會對鄰居單元的造成干擾. 因此, 2D-NVM的設(shè)計就是在降低了存儲單元之間干擾的基礎(chǔ)上, 添加了多層的結(jié)構(gòu)區(qū)分?jǐn)?shù)據(jù)訪問的不同方式. 然而, 盡管2DNVM的設(shè)計解決了上述問題, 但是帶來的是更加復(fù)雜的存儲單元和更大單元開銷和能耗.
針對列向訪問的應(yīng)用場景, 可在以下4個方面進(jìn)一步豐富其應(yīng)用:
(1)根據(jù)內(nèi)存計算[47]概念, 結(jié)合內(nèi)存數(shù)據(jù)庫(In-Memory DataBase, IMDB)[27]的應(yīng)用, 使用列向訪問方式獲取列向數(shù)據(jù)庫[48]的列向數(shù)據(jù), 可以很方便獲取所需的特定數(shù)據(jù), 還能夠同時對不同列的數(shù)據(jù)可以聚合和分類[49].
(2)當(dāng)列向訪問應(yīng)用于大數(shù)據(jù)的挖掘[50]中, 考慮到存儲的數(shù)據(jù)基于相同的數(shù)據(jù)類型或者數(shù)據(jù)結(jié)構(gòu), 同類型數(shù)據(jù)的獲取將會更加的高效, 并且對于數(shù)據(jù)之間的關(guān)系分析, 將會更加的準(zhǔn)確.
(3)當(dāng)行列訪問應(yīng)用于數(shù)據(jù)加密算法[51]中, 考慮到加密算法需要對已有數(shù)據(jù)進(jìn)行大量的數(shù)學(xué)運算, 其中計算較多的是矩陣相乘, 通過列向訪問可以快速的獲取矩陣中存儲的一行或者一列數(shù)據(jù), 然后進(jìn)行大量的矩陣相乘運算得到最終的結(jié)果. 列向的訪問不僅能夠縮短數(shù)據(jù)獲取的時間, 還能提高加密算法的時效性.
(4)當(dāng)列向訪問結(jié)合實時微體系結(jié)構(gòu)[52]應(yīng)用于實時處理時, 通過列向訪問數(shù)據(jù)并對數(shù)據(jù)進(jìn)行快速處理,能夠給予其更加快速的實時反饋, 例如存儲汽車行駛中的各項參數(shù), 通過數(shù)據(jù)實時計算能夠快速調(diào)整無人駕駛汽車的速度或方向.
當(dāng)前, 傳統(tǒng)的行向訪問的內(nèi)存獲取方式應(yīng)用于通用的場景. 然而, 內(nèi)存的列向訪問是針對某種特定的場景設(shè)計的優(yōu)化數(shù)據(jù)獲取方式, 尤其是密集數(shù)據(jù)的存儲.由于數(shù)據(jù)行列訪問方式在一個具體的應(yīng)用中有著較大的性能差距, 所以列向訪問會極大的提升特定應(yīng)用場景下的訪問效率. 因此, 后續(xù)會對內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)存儲和訪問性能提升進(jìn)行深入的研究.