劉必成 顧海峰 陳銘松 谷守珍 陳聞杰
(上海市高可信計算重點實驗室(華東師范大學) 上海 200062)
當今世界已進入大數(shù)據(jù)時代,各種現(xiàn)代應用對數(shù)據(jù)處理速度的要求越來越高.然而在傳統(tǒng)的馮·諾依曼架構中,數(shù)據(jù)的存儲和處理各自分離,同時數(shù)據(jù)量與處理速度之間的差距也在逐步拉大,嚴重制約了系統(tǒng)效率的進一步提高.為了克服這個困難,文獻[1-2]提出了新型存內(nèi)計算(processing in memory, PIM)架構,并受到廣泛關注和研究[3-4].在存內(nèi)計算架構中,存儲單元和計算單元在內(nèi)存中緊密地結合在一起,使得數(shù)據(jù)可以直接在內(nèi)存中就地進行處理,從而極大地減少了數(shù)據(jù)在內(nèi)存和處理器之間的頻繁移動且增加了數(shù)據(jù)處理的并行性.
雖然存內(nèi)計算架構在一定程度上緩解了“數(shù)據(jù)搬運”的瓶頸問題,然而由于傳統(tǒng)存內(nèi)計算建立在易失性存儲器介質(zhì)之上,其物理特性限制導致整個系統(tǒng)泄漏功耗和動態(tài)功耗隨著處理數(shù)據(jù)量的增加而急劇增長.近期各種新型非易失性內(nèi)存介質(zhì)(non-volatile memory, NVM)正因其區(qū)別與傳統(tǒng)介質(zhì)的低漏電率、高密度等一系列優(yōu)良的特性而受到廣泛關注[5-7].典型的包括相變存儲器(phase change memory, PCRAM)、自旋力矩存儲器(spin-transfer torque memory, STT-RAM)、賽道型存儲器(racetrack memory, RM)等.其中RM通過將多個比特的數(shù)據(jù)存儲在一條類似磁帶的納米線上,提供了比自旋力矩存儲器更高的存儲密度,比相變存儲器更高的寫入壽命,以及接近靜態(tài)隨機存取存儲器(static random access memory, SRAM)的讀寫速度[8-10].
賽道型存儲的本身物理結構決定了其不但適用于存儲數(shù)據(jù),也非常容易組成各種邏輯結構來進行數(shù)據(jù)處理,因此可以用來作為存內(nèi)計算的介質(zhì).第1代賽道型存儲器是基于磁疇壁(domain-wall)介質(zhì)的,文獻[11]在此基礎上提出了一種較為通用的存內(nèi)計算架構.然而這種基于磁疇壁介質(zhì)的存內(nèi)架構依然需要大量的CMOS(complementary metal oxide semiconductor)外圍電路來進行輔助計算,導致了計算單元體積和能耗的增加.
最近新型的基于斯格明子介質(zhì)的第2代賽道型存儲器被提出[12-15].相比磁疇壁介質(zhì),斯格明子介質(zhì)具有密度更高、能耗更低、穩(wěn)定性更強以及更少受限于材料等一系列優(yōu)良特性,非常適合作為下一代存內(nèi)計算的介質(zhì).同樣這種介質(zhì)特性也非常適合使用在嵌入式系統(tǒng)中,甚至可以用來構建基于嵌入式系統(tǒng)的移動存內(nèi)計算框架.然而目前對于斯格明子介質(zhì)的研究主要集中于硬件存儲功能,缺乏關于計算功能的研究,系統(tǒng)層次以及具體應用實現(xiàn)也很少涉及[16].另一方面由于斯格明子-賽道型存儲器特有的條帶狀物理結構,使其具有特有的順序讀寫特性,如何用其替代現(xiàn)有存內(nèi)計算架構下的存儲單元也是亟待解決的問題.
針對以上問題,本文提出了一種基于斯格明子介質(zhì)的存內(nèi)計算框架,主要貢獻有4點:1)結合斯格明子介質(zhì)本身的物理特性,由斯格明子邏輯門組成加法器、乘法器等計算單元并進行優(yōu)化,極大地減少了CMOS輔助電路的使用,提高了計算效率;2)在硬件電路層面上對于基本存儲單元讀寫端口數(shù)等參數(shù)進行探討,并通過實驗優(yōu)化配置;3)在系統(tǒng)層上對內(nèi)存的地址映射方式進行改進,提高了整個系統(tǒng)的運行效率;4)以通用的圖像銳化程序為例詳細說明了程序在內(nèi)存框架中的工作流程,同時將本文提出的基于斯格明子介質(zhì)的內(nèi)存框架與目前最先進的基于磁疇壁的存內(nèi)計算框架進行實驗對比.
基于斯格明子介質(zhì)的存內(nèi)計算主要包含2部分:基于斯格明子介質(zhì)的存儲單元和計算單元,其中存儲單元即斯格明子-賽道型存儲器,是整個框架的基礎.
斯格明子-賽道型存儲器[12-13],區(qū)別于磁疇壁-賽道型存儲器,是一種基于斯格明子編碼的非易失性存儲器.如圖1所示,數(shù)據(jù)通過斯格明子編碼之后存儲在一條單一的鐵磁納米線(nanowire)器件上.納米線上的斯格明子由電壓控制的磁各向異性(voltage-controlled magnetic anisotropy, VCMA)門所隔離,每2個門之間存儲一位數(shù)據(jù).如果此區(qū)間內(nèi)存在斯格明子則代表數(shù)據(jù)1,如果不存在斯格明子則代表數(shù)據(jù)0.斯格明子-賽道型存儲器件有3項基本操作:移位、讀和寫,其中具有移位操作是其最重要的特性.
Fig. 1 Skyrmion based nanowire device圖1 斯格明子-賽道型存儲器件結構圖
斯格明子-賽道型存儲器件的移位操作,是指在磁各向異性門打開時納米線上的斯格明子可以通過在存儲器兩端移位端口(shift port)施加電流來進行向左或向右移動.為了保證移位操作之后記錄在納米線上的數(shù)據(jù)不丟失,在納米線兩端應當有冗余的存儲位供位移操作使用.整體來說所有比特數(shù)據(jù)的移位都類似于磁帶操作,和移位寄存器類似.
斯格明子-賽道型存儲器件讀、寫操作的基本原理類似.在存儲器器件中有讀寫端口(write/read port),即沿著納米線方向放置的一個強磁化鐵磁層,但是其和納米線之間由較薄的絕緣層隔開.這樣的三明治結構形成了磁隧道結(magnetic tunnel junctions, MTJs).通過向寫端口的MTJ結構中注入自旋極化電流(spin-transfer current)就可以在納米線上產(chǎn)生一個斯格明子.同樣讀端口也是一個MTJ結構,通過檢測讀端口MTJ隧穿電導(tunneling conductance)的變化就可以得知納米線上當前位置是否存在斯格明子,即數(shù)據(jù)是0還是1.需要注意的是,由于寫和讀操作只能在固定的MTJ端口處進行,因此納米線上比特位數(shù)據(jù)的操作需要移動到與MTJ固定層對齊的位置才能進行,而移位操作的方向和速度取決于控制電流的方向和幅度.
傳統(tǒng)上所有的數(shù)據(jù)都是保存在和處理器分離的主存中,二者通過總線相連接.因此在程序執(zhí)行過程中所有的數(shù)據(jù)都需要遷移到處理器中,并在處理完成之后再次寫回.對于以數(shù)據(jù)為導向的應用,這將產(chǎn)生嚴重的通信堵塞,從而大大降低總體性能.此外在傳統(tǒng)的內(nèi)存中保存大量的數(shù)據(jù)也將產(chǎn)生明顯的待機能耗.
為了克服上述2個問題,我們使用基于非易失性內(nèi)存的計算架構.首先存內(nèi)計算架構在一定程度上解決了數(shù)據(jù)傳輸瓶頸的問題,也減少了數(shù)據(jù)傳輸?shù)哪芎?;其次非易失性?nèi)存在極大地減少待機功耗的同時也降低了內(nèi)存的動態(tài)功耗.基于斯格明子-賽道型存儲器的存內(nèi)計算平臺整體結構如圖2所示,其中存內(nèi)計算單元與存儲單元以分布式的方式組合成存儲-計算單元組,這樣許多頻繁處理數(shù)據(jù)的操作可以在內(nèi)存內(nèi)部完成而無需與外部處理器進行通信,從而極大地節(jié)省了時間與能耗的開銷.同時分布式的內(nèi)存處理單元也可以提供巨大的線程級并行性,從而極大地提高系統(tǒng)吞吐量.
Fig. 2 The structure of PIM platform圖2 存內(nèi)計算架構
在本文提出的基于斯格明子的存內(nèi)計算框架中,內(nèi)存存儲單元由基于斯格明子的賽道型存儲器構成,從而受益于其低漏電功耗、非易失性以及穩(wěn)健性等優(yōu)點.同時存內(nèi)計算單元純粹由基于斯格明子邏輯門的加法器、乘法器等組成,只需要極少的CMOS電路輔助,因此總體漏電功耗和處理數(shù)據(jù)所需的動態(tài)功耗和時間消耗都極大地減少.在本文提出的存內(nèi)計算框架中,存儲-計算單元組之間通過H型內(nèi)部數(shù)據(jù)通路相連接,這樣單元組與單元組之間的數(shù)據(jù)可以隨時根據(jù)需要進行傳輸,而外部處理器(即CPU)主要負責將控制指令傳輸給內(nèi)存內(nèi)部的控制單元,由內(nèi)部控制單元負責內(nèi)存中存儲與計算單元具體數(shù)據(jù)的調(diào)度處理.由于斯格明子既具有計算功能又具有存儲功能,因此在本文提出的存內(nèi)計算框架中,計算單元得到的結果將直接寫入存儲單元中,即存儲單元本身完成了類似寄存器的時序邏輯功能.
本節(jié)首先從硬件層面考慮,提出基于斯格明子邏輯門的加法邏輯單元和進位邏輯單元設計,再進一步提出整個全加器的設計,最后在全加器設計的基礎上提出了基于斯格明子邏輯門乘法器的設計,并進一步對加法器進行了優(yōu)化.
典型的邏輯和運算由2個異或門組成,然而異或邏輯門無法直接使用斯格明子器件實現(xiàn).這個問題可以通過斯格明子邏輯門組合來實現(xiàn)[14-15].其中文獻[14]實現(xiàn)了基于斯格明子的邏輯與門和邏輯或門,同時包含基于斯格明子的復制(duplication)邏輯,而文獻[15]中實現(xiàn)了基于斯格明子的邏輯與非門和邏輯或非門.在此基礎上本文構建了基于斯格明子的異或邏輯門.如圖3(b)所示,基于斯格明子的異或邏輯門由1個或門,1個與非門以及1個與門組成.需要注意的是,圖3(b)中OR2-Gate是與非門NAND-Gate的一部分,輸入部分An和Bn分別代表數(shù)據(jù)A和B的第n位.正如圖3(a)所示,A和B是一個存儲在斯格明子納米線上8 b的數(shù)據(jù).在斯格明子納米線上,如果某個位置存在有斯格明子,它就代表數(shù)值1;如果沒有斯格明子,它就表示數(shù)值0.因此圖3(a)以二進制形式表示A=10111001,B=10101110.
Fig. 3 Skyrmion nanowire-based XOR-logic圖3 基于斯格明子的異或邏輯單元
當n=1時異或邏輯單元工作步驟有3個:
1) 操作數(shù)A1和B1同時進入邏輯門OR1和NAND.由于A1=1,B1=0也即有一個斯格明子進入邏輯門OR1,一個斯格明子進入邏輯門NAND.
2) 代表A1的斯格明子分別通過邏輯門OR1和NAND并保持不變.
3) 從邏輯門OR1和NAND出來的2個斯格明子同時進入邏輯門AND,最終合并成一個斯格明子,從而可以得到A1⊕B1=1.
通過基于斯格明子納米線器件的異或邏輯單元我們可以實現(xiàn)帶進位的加法邏輯單元(SUM=An⊕Bn⊕Cin,其中Cin為進位).即通過組合2個異或邏輯單元:第1個異或邏輯單元輸入是An和Bn,輸出是An⊕Bn;第2異或邏輯單元輸入是An⊕Bn和Cin,而輸出是當前位的進位和SUM.
一個典型的進位邏輯由3個與門和2個或門組成.圖4顯示了基于斯格明子邏輯門的進位邏輯單元具體設計細節(jié).
Fig. 4 Skyrmion nanowire-based carry-logic圖4 基于斯格明子的進位邏輯門
如圖4所示,進位邏輯單元有3組輸入:An和Bn,An和Cin,Bn和Cin,以及一個輸出:Cout.其中輸入Cin為第n-1位的進位,輸出Cout為第n位的進位.進位邏輯單元具體實現(xiàn)細節(jié)有4點:
1) 代表上述3組輸入第n位數(shù)值的斯格明子粒子分別進入了3個與門,即AND1~AND3.
2) 第1個與門AND1的輸出和第2個與門AND2的輸出將同時進入第1個或門OR1.第3個與門AND3的輸出將在進入第2個或門OR2之前等待OR1的輸出.
3) 第1個或門OR1的輸出與第3個與門AND3的輸出同時進入第2個或門OR1.
4) 第2個或門的輸出即進位的值Cout.
Fig. 5 Skyrmion nanowire-based full adder圖5 基于斯格明子邏輯門的全加器
基于斯格明子邏輯門的全加器如圖5所示,此全加器由3個主要部分構成:第1部分(PART1)是和運算部分,由第1個異或邏輯組成,它的輸入是An和Bn,輸出是An⊕Bn.同時第1部分還有一個復制邏輯(duplication)以便為第3部分(PART3)提供輸入.第2部分(PART2)是進位邏輯,其輸入是An-1,Bn-1,Cn-1,而輸出是Cn即n-1位的進位.同時Cn會復制4份,其中2份作為第3部分(PART3)的輸入,另外2份作為下一位加法的輸入.第3部分(PART3)由第2個異或邏輯構成,其輸入是An⊕Bn和Cn,即第1部分和第2部分的輸出,而輸出就是全加器的最終結果:SUM=An⊕Bn⊕Cn.
圖5中的針孔形狀部分代表一種能量勢壘(energy barrier)[15],這種能量勢壘在電壓為正的時候可以阻止斯格明子通過,而在電壓為0的時候允許斯格明子通過,從而起到類似開關的作用.通過能量勢壘的開關可以使得斯格明子同步進入邏輯門的2個輸入端以保證邏輯門的正常工作.注意,當n=1時,An代表數(shù)據(jù)A的第1位,此時An-1不存在即無任何輸入,Bn-1與Cn也相同.
不同斯格明子邏輯門的傳播時延已在文獻[14-15]中給出.基于已知的各種邏輯門的工作時間,當整個系統(tǒng)的工作頻率為1 000 MHz時,通過計算得知全加器進行1位的加法需要11個時鐘周期.考慮到能量勢壘開關在使邏輯門輸入同步的同時也使得各個邏輯門之間相互隔離,因此當進行多個位的加法時可以利用此特性對全加器的工作流程進一步優(yōu)化.受CPU流水線優(yōu)化技術啟發(fā),我們對全加器進行了優(yōu)化:在1位加法計算完成之前就允許下一位的數(shù)據(jù)進入全加器,從而極大地提高了整體工作效率.
經(jīng)過優(yōu)化后的全加器電路時序圖如圖6所示.其中橫坐標的數(shù)字1~19分別代表19個時鐘周期,每個時鐘周期為1 ns;縱坐標的Gate 1~13分別對應圖6所示全加器中對應的13個邏輯門的控制電壓,即每個邏輯門輸入端口處能量勢壘開關的電壓.經(jīng)過優(yōu)化后的全加器主要時序邏輯為
Fig. 6 Timing diagram of 8-bit full adder圖6 全加器電壓控制時序圖
1) 第1個時鐘周期.Gate1~2,Gate5~7對應的控制電壓為低電壓,因此對應輸入 端口的斯格明子(也即An,Bn,An-1,Bn-1,Cn-1)可以進入OR-Gate1,NAND-Gate2和AND-Gate5.為了保證輸入同步,Gate3~4,Gate8~9和Gate11對應的控制電壓為高電壓.其他邏輯門對應的控制電壓均保持低電壓,因為這些邏輯門還未被使用.
2) 第2個時鐘周期.Gate1~2,Gate5~7對應的控制電壓變?yōu)楦唠妷阂宰柚顾垢衩髯舆M入對應邏輯門,同時Gate3~4,Gate9和Gate11的控制電壓繼續(xù)保持高電壓以完成邏輯門同步功能.Gate8的控制電壓從高電壓轉為低電壓從而使得斯格明子進入OR-Gate8,其他邏輯門的對應控制電壓依然保持不變.
3) 第3個時鐘周期.Gate9的控制電壓轉為低電壓以便斯格明子進入OR-Gate9,同時后續(xù)Gate10的控制電壓轉變?yōu)楦唠妷阂酝瓿赏焦δ?,其他邏輯門的控制電壓保持不變.
4) 第6個時鐘周期.Gate4的控制電壓從高電壓變?yōu)榈碗妷阂员闼垢衩髯舆M入AND-Gate4;同時 Gate2的控制電壓變?yōu)榈碗妷阂员阍试S下個比特的數(shù)據(jù)進入NAND-Gate2,后續(xù)Gate3依然保持高電壓.
5) 第8個時鐘周期.Gate10~11的控制電壓轉為低電壓從而An⊕Bn和Cn對應的斯格明子可以進入 OR-Gate10和NAND-Gate11.Gate12~13的控制電壓為了保持同步應變?yōu)楦唠妷籂顟B(tài).同時Gate5~7的控住電壓轉為高電壓,而Gate8的控制電壓轉為低電壓.
6) 第13個時鐘周期.Gate5~7的控制電壓轉為高電壓以阻止斯格明子進入邏輯門,同時Gate8,Gate10,Gate11,Gate13的控制電壓轉為低電壓.
7) 第14個時鐘周期.可以通過輸出端口是否有斯格明子判斷SUM的值是0還是1,從而得到求和運算的第1個位數(shù)值.
8) 第15個時鐘周期及以后.不斷重復第10~14個時鐘周期的狀態(tài),每隔5個時鐘周期就可以讀出和的下一位數(shù)值.
如圖6所示,經(jīng)過計算可以得知第1位的加法需要14個時鐘周期(每個時鐘周期1 ns),而從第2位開始每5個時鐘周期全加器就可以完成一個位的加法.這是由于經(jīng)過優(yōu)化后全加器內(nèi)部各個邏輯門之間相互獨立運行,從而可以獲得類似流水線的優(yōu)化效果,考慮到在進行大量數(shù)據(jù)處理時或者隨著運行頻率的進一步提高優(yōu)化效果依然可以進一步提高.對于常用的8 b的加法,本文提出的基于斯格明子介質(zhì)的全加器經(jīng)過優(yōu)化后只需要49個時鐘周期即49 ns,相比基于磁疇壁的第1代賽道存儲內(nèi)存加法器 (8位加法需要108 ns)[1]快了2.2倍.
通常來說乘法可以分解為多次移位操作和加法操作,而本文提出的存內(nèi)計算框架中全加器可以通過純粹的基于斯格明子邏輯門實現(xiàn),移位操作又是斯格明子納米線器件自帶的能力,因此本文提出如圖7所示基于斯格明子邏輯門的8位乘法器.
在圖7中,An代表當對應操作數(shù)B的第n位為1時,需要將操作數(shù)A左移n-1位.例如當操作數(shù)A和B的二進制形式分別為1101和111時,有A0=1101,A1=11010,A2=110100,此時A乘以B就等于A0+A1+A2.由于操作數(shù)A存儲在斯格明子納米線上,而納米線器件本身就支持移位操作,因此An可以通過將操作數(shù)A左移n位得到,再直接輸入全加器中得到乘法結果.因此基于斯格明子的乘法器可以通過重復利用已有的斯格明子全加器和本身的移位來實現(xiàn),因此大大減少了計算邏輯單元所需的空間以及時間,同時也減少了實現(xiàn)存內(nèi)計算框架的復雜程度.
Fig. 7 8-bit Skyrmion nanowire-based multiplier圖7 基于斯格明子的8位乘法器
在存內(nèi)計算框架中存儲單元與計算單元一同對整個系統(tǒng)的性能起著至關重要的作用.而斯格明子-賽道型存儲器本身的物理特性決定其與傳統(tǒng)的DRAM存儲器隨機讀寫的方式并不相同,斯格明子-賽道型存儲器具有順序讀寫的特性.因此我們無法簡單地用斯格明子存儲單元直接替代DRAM存儲單元.為了進一步提高斯格明子存內(nèi)計算框架的效率,我們需要根據(jù)斯格明子-賽道型存儲器的本身物理特性來從底層硬件及系統(tǒng)軟件2個層面考慮存內(nèi)計算框架中存儲單元的設計.
Fig. 8 Skyrmion based memory cell 圖8 基于斯格明子介質(zhì)的存儲單元
基于斯格明子的基本存儲單元具體結構如圖8所示.其中存儲部分由RT0到RT3共4條基本賽道組成.每條賽道上可能有n個讀寫端口(圖8中圓形部分),這樣每個單元可以一次讀寫4n(單位為b).典型的賽道型存儲器具有3個基本操作即讀、寫以及移位.由于其中移動數(shù)據(jù)的移位操作占據(jù)絕大部分的時間和能耗,所以如何在不影響系統(tǒng)性能的情況下盡量減少數(shù)據(jù)的移位操作是亟待解決的問題.
在圖8所示結構中,減少移位最直觀有效的方法是增加讀寫端口的數(shù)量.但是由于讀寫端口本身會占用大量的空間,因此增加讀寫端口會相應降低存儲的密度,同時會帶來讀寫延時、能耗的增加以及實現(xiàn)工藝的復雜化,因此需要在增加讀寫端口與減少數(shù)據(jù)移位之間尋找一個平衡點.同時每個基本存儲單元由幾條賽道組成,以及每條賽道的長度(即可以存儲的數(shù)據(jù)量)是多少,都對整個讀寫單元的性能有著至關重要的影響.文獻[10,13]經(jīng)過大量實驗分析得知在多數(shù)應用中,每個基本存儲單元中由4個條帶組成,每個條帶存儲64 b數(shù)據(jù)能取得較好性能.這時如果每條賽道的讀寫端口大于16,單個存儲單元占用面積以及讀寫時延以及功耗都會急劇增加;而當讀寫端口數(shù)小于16時,單個存儲單元占用面積隨著端口數(shù)減少反而會增加,因為此時條帶兩端需要為移位操作預留的空間也越來越大.同時在后續(xù)的實驗部分中,本文也分析了在本文提出的基于斯格明子的存內(nèi)計算框架下讀寫端口的數(shù)量與移位操作數(shù)的相應變化,綜合考慮我們選擇讀寫端口為16.
由于斯格明子-賽道型存儲器不同于傳統(tǒng)的DRAM存儲器具有順序讀寫的特性,因此傳統(tǒng)的為隨機讀寫存儲器設計的系統(tǒng)地址映射方式并不適用于這種新型的非易失性存儲器.圖9(a)所示為傳統(tǒng)的DRAM的地址映射方式RBC(row bank column),這種存儲系統(tǒng)通常使用一種典型的開放式頁面地址映射策略,將所有相鄰列的同一行映射到一個連續(xù)的區(qū)域,使空間局部性最大化.同時,它通過行列交織的方式來管理流水線式的內(nèi)存請求.
對于斯格明子-賽道型存儲器來說,關鍵問題是傳統(tǒng)地址映射方式將每個行作為一個連續(xù)區(qū)域而不考慮移位的問題,也不考慮這些行可能橫跨了許多不同內(nèi)存存儲單元,因此可能會帶來非常嚴重的負面效應.如圖10所示,256行依次分布在第1存儲單元MC1到第64存儲單元MC64,為了簡化討論,假設內(nèi)存中有64個基本存儲單元,每個存儲單元只有1條存儲賽道,每條賽道只能存儲4 b數(shù)據(jù)且只有1個讀寫端口.在傳統(tǒng)的地址映射方式下由于內(nèi)存訪問都具有很高的空間局部性,導致內(nèi)存訪問可能在不同存儲單元之間以及存儲單元內(nèi)部頻繁切換.在圖10的例子中,應用程序的內(nèi)存訪問序列為R4→R8→R1→R4→R6.這些請求只映射到2個相關存儲單元(MC1,MC2),從而導致了多次移位操作(總移位為14次).考慮到基于斯格明子的存儲器存儲密度極大化以及內(nèi)存訪問的局部性,再結合存內(nèi)計算的具體應用場景,本文提出了一種新的地址映射方式,即基于斯格明子介質(zhì)的地址映射方式(address mapping based on Skyrmion, AMBS).
Fig. 10 An example of using AMBS圖10 使用賽道型地址映射的優(yōu)勢1例
我們首先解釋這種地址映射方案如何具體實現(xiàn).AMBS將地址位(第16 b到第31 b)分為3部分:SN,PN,MN,見圖9(b).其中SN(shift number)表示初始行和其對應訪問端口的距離,即初始數(shù)據(jù)需要移位多少次才能夠被訪問.PN(port number)表示的是訪問數(shù)據(jù)對應的端口序列號,即通過第幾個端口去訪問數(shù)據(jù).MN(memory cell number)表示基本存儲單元的編號.具體地說,如果每個x位數(shù)據(jù)共享一個端口,即要將內(nèi)存中所有的行地址按照SN的數(shù)值劃分為x組,并將地址相鄰的行劃為同一組. AMBS策略優(yōu)先在組內(nèi)進行數(shù)據(jù)分配,只有組內(nèi)整個空間分配完之后,才將后續(xù)數(shù)據(jù)分配給下一組.
通過這種賽道型內(nèi)存地址映射方式可以極大地減少移位操作,原因主要有2方面:1)在組間來說,假設內(nèi)存的總容量為8 GB,每32 b數(shù)據(jù)共享一個端口,此時每組的大小為256 MB(8 GB/32),此時由于內(nèi)存讀取的局部性,內(nèi)存訪問序列有極大可能屬于某一組,因此可以減少由于較小區(qū)域的空間局部性導致的頻繁移位操作.2)在組內(nèi)來說,由于延遲和能耗主要來自于移位操作,特別是長距離的移位操作,因此減少移位的距離也能提高系統(tǒng)性能.而賽道型內(nèi)存地址映射能將大部分內(nèi)存讀寫的移位操作距離減少至1,這是因為同一存儲單元中相鄰2行的地址差距非常大(256 MB).
結合上述說明,我們以圖10為例來說明AMBS是如何工作的.內(nèi)存訪問序列為R4→R8→R1→R4→R6,在傳統(tǒng)的內(nèi)存映射方式下,需要14次移位操作才能夠讀取完這些數(shù)據(jù),而在基于賽道內(nèi)存的操作下不需要進行任何移位任何操作就能完成內(nèi)存數(shù)據(jù)的讀取,節(jié)省了大量時間和能耗的開銷.而賽道型內(nèi)存地址映射方式的實現(xiàn)方式,可以通過在操作系統(tǒng)中使用一個統(tǒng)一的分系統(tǒng)管理物理頁,并形成了一個層次結構基于Shift和Port的可用頁面列表,類似于頁面著色技術[17],根據(jù)應用程序需要的不同存儲容量,盡可能地分配一個連續(xù)的區(qū)域.因此最簡單的方式,可以使用一個靜態(tài)的物理地址的映射系統(tǒng),在內(nèi)存控制器中或斯格明子-賽道型存儲器芯片內(nèi)部實現(xiàn).這樣就可以在不改變現(xiàn)有操作系統(tǒng)的存儲器體系接口下實現(xiàn),因此帶來的額外開銷也基本可以忽略.
本節(jié)分別從硬件層和系統(tǒng)層對基于斯格明子介質(zhì)的存內(nèi)計算單元進行性能評估.首先對于硬件層面,探討了基于斯格明子邏輯門的存內(nèi)計算單元的性能,其次在系統(tǒng)層面上通過通用的圖像銳化程序對于內(nèi)存存儲單元的讀寫端口個數(shù)與數(shù)據(jù)移位操作數(shù)的關系,以及整個存內(nèi)計算系統(tǒng)的時間及能耗效率進行了評估.
斯格明子邏輯門組成的基本運算單元作為存內(nèi)計算框架的基礎,首先我們需要對其性能進行評估.本實驗中所用的斯格明子器件的讀寫時間與能耗數(shù)據(jù)來自于文獻[18],同時移位操作的能耗可以通過斯格明子納米線的熱耗散數(shù)據(jù)計算得出,移位操作的時間可以通過斯格明子在納米線上的移動速度計算得出.需要注意的是當斯格明子邏輯門的工作狀態(tài)即輸入不同時,納米線上的驅動電流密度也會隨之變化[14-15].例如當邏輯與門的輸入為0和1時(即只有一個斯格明子進入與門),電流密度為7×1012A/m-2;當邏輯與門的輸入為1和1時(即有2個斯格明子同時進入與門),電路密度為4×1012Am-2,因此在計算整個計算單元的功耗時我們只能取其平均值.在斯格明子邏輯門中使用的納米線長約為600 nm,寬度約為100 nm[14],由此我們可以計算出計算單元占用的面積.基于斯格明子計算單元對比基于磁疇壁計算單元極大地減少了額外COMS電路的使用,不僅使得性能上有所提高,也極大地減少了實現(xiàn)工藝所需的復雜度.
表1中對比了基于斯格明子計算單元和基于磁疇壁計算單元在時間、能耗和面積上的區(qū)別.可以看出,本文提出的基于斯格明子的存內(nèi)計算單元相比目前最先進的基于磁疇壁的存內(nèi)計算單元節(jié)省了54.6%的時間、42.9%的能耗以及23.1%的占用面積.這主要歸功于斯格明子介質(zhì)優(yōu)異的物理性質(zhì):加法計算單元進行的優(yōu)化,以及乘法計算單元對于加法器的復用.同時相比基于磁疇壁計算單元,大大減少了外圍輔助電路的需求,簡化了電路設計,使得基于斯格明子計算單元更容易被實現(xiàn).
Table 1 Performance Comparison of TwoComputing Units
4.2.1 實驗環(huán)境配置
為了更準確評估基于斯格明子的存內(nèi)計算框架的總體性能,本文采用調(diào)整過的基于磁疇壁的存內(nèi)計算框架[1]來作為比較對象.為了模擬應用程序在存內(nèi)計算框架中的具體執(zhí)行過程,我們修改了體系結構模擬器Gem5[19]中內(nèi)存部分,同時為了獲得具體時間和能耗數(shù)據(jù),我們結合了功耗和時序建模工具McPAT[20]建立了整個實驗平臺.
表2列出了實驗中的主要參數(shù)配置.其中存內(nèi)計算框架中主存儲單元均被設置為1 000 MHz,與計算單元保持同步.對于基于磁疇壁的存內(nèi)計算框架,時間和能耗參數(shù)可以從擴展的NVSim[21]中獲取.由于本文提出的內(nèi)存框架具有加法器和乘法器組成的計算單元,因此理論上任何程序中的加法和乘法操作均可以在此內(nèi)存框架中完成.特別地,本文選取了主要操作均由加法和乘法組成的圖像銳化程序作為實驗測試程序,并在4.2.2節(jié)中介紹了圖像銳化程序的具體執(zhí)行過程.
Table 2 Configuration Parameters of Experiment表2 實驗環(huán)境中關鍵參數(shù)配置
4.2.2 基于存內(nèi)計算框架的圖像銳化程序實例
為了詳細說明程序是如何在基于斯格明子的存內(nèi)計算框架中執(zhí)行的,以及存內(nèi)計算帶來的優(yōu)勢,本節(jié)以圖像銳化處理為例詳細描述程序執(zhí)行過程.
Fig. 11 The working process of image sharpening in PIM architecture圖11 圖像銳化程序在存內(nèi)計算框架中具體執(zhí)行過程
圖像銳化即加強圖像中重要信息,使得圖像更清晰、更易于處理,在圖像處理識別等各個領域都起著非常重要的作用.由于其處理的對象是以矩陣的形式將對應像素點信息存儲于內(nèi)存中的數(shù)字化圖片,涉及到大量的矩陣操作,特別適合于用PIM進行并行處理.其本質(zhì)是利用微分等運算加強圖像中包含邊緣信息的高頻部分,代表性算法為拉普拉斯算子.拉普拉斯算子是一種二階微分算子,一個連續(xù)的二元函數(shù)f(x,y)其拉普拉斯運算定義為
(1)
對圖像處理來說,可以將拉普拉斯算子簡化為
g(i,j)=4f(i,j)-f(i+1,j)-f(i-1,j)-
f(i,j+1)-f(i,j-1).
(2)
在數(shù)字圖像處理中即表示將某個點對應像素的數(shù)值乘以4再減去其上下左右相鄰像素對應的數(shù)值.在圖像銳化處理的過程中,拉普拉斯算子可以直接通過模板操作來實現(xiàn),即用拉普拉斯模板與圖像中對應像素數(shù)值矩陣進行點乘來得到銳化后的圖像數(shù)值.如圖11所示,其中常用的模板為
(3)
圖11以使用拉普拉斯算子模板進行圖像銳化的程序為例,說明通用程序在基于斯格明子介質(zhì)的存內(nèi)計算框架中執(zhí)行過程.如圖11所示,基于斯格明子的存內(nèi)計算框架主要包含存儲單元和計算單元2部分.
其中存儲單元部分由斯格明子-賽道型存儲器組成,如圖11上半部分所示,灰色部分表示讀寫端口所在位置.在未使用AMBS策略之前讀取2個矩陣的數(shù)據(jù)需要進行多次移位操作,而在使用AMBS策略之后數(shù)據(jù)均存儲在讀寫端口的位置,讀取這些數(shù)據(jù)不需要再進行任何移位操作.圖11中計算單元部分由基于斯格明子的乘法器(S-MUL)和加法器(S-ADDER)等邏輯運算單元構成.同時存內(nèi)計算框架不同于傳統(tǒng)的使用外部處理器的計算框架,在內(nèi)存中還應設有專門的控制器來控制程序的執(zhí)行過程.如圖11下半部分所示,圖像銳化程序的執(zhí)行過程可被分解為4個主要步驟:
步驟1. 指令輸入.此時控制指令由外部處理器輸入到內(nèi)部的控制器.包含需要處理的數(shù)據(jù)地址、需要進行的數(shù)據(jù)處理操作等.在如圖11所示例子中即包含存儲圖片對應像素信息的3×3矩陣的地址、存儲拉普拉斯模板矩陣的地址以及需要進行的對應矩陣元素的加分和乘法操作.
步驟2. 取數(shù)據(jù).內(nèi)部控制器根據(jù)指令從存儲單元對應地址處取出數(shù)據(jù),在圖11中為一個保存圖像像素信息的3×3矩陣以及一個存儲拉普拉斯算子模板信息的3×3矩陣.
步驟3. 數(shù)據(jù)處理.控制器將相應數(shù)據(jù)分配至各個邏輯運算單元進行數(shù)據(jù)處理,直至得到需要的結果.圖11中進行的是像素與模板的乘法,即2個矩陣的點乘運算.首先將對應矩陣按行、列進行分解,如圖11中分解成(5,21,8)與(0,-1,0);再將對應數(shù)值輸入相應的基于斯格明子的乘法器分別得到(0,-21,0);最后將結果通過基于斯格明子的加法器多次相加得到最終結果(2).
步驟4. 數(shù)據(jù)寫回.最后將處理的結果(2)再寫回到存儲單元中.
上述過程不斷重復,直至將整個圖像的數(shù)據(jù)進行類似的卷積操作之后,就可以得到銳化后的圖像.在這個過程中,圖像數(shù)據(jù)均不需要傳輸?shù)酵獠刻幚砥鬟M行處理,從而節(jié)省了大量的時間和能耗.
4.2.3 實驗結果
本實驗主要分為2部分:第1部分主要分析讀寫端口數(shù)與移位次數(shù)之間的關系,以確定在斯格明子-賽道型存儲器中基本存儲單元讀寫端口數(shù);第2部分將本文提出的基于斯格明子的存內(nèi)計算框架與目前最先進的基于磁疇壁的存內(nèi)計算框架進行對比.
如圖12所示,我們首先研究了存儲單元讀寫端口對程序執(zhí)行過程中賽道型內(nèi)存總移位數(shù)的影響.為了便于比較,將總移位以Base-16為基準進行規(guī)格化.其中Base-X代表不使用AMBS內(nèi)存映射策略且每個內(nèi)存單元具有X個讀寫端口的情況,AMBS-X指的是使用AMBS映射策略且每個內(nèi)存單元具有X個讀寫端口的情況.可以看出,使用AMBS內(nèi)存映射策略之后移位操作次數(shù)極大減少.這主要是由于:1)AMBS映射策略使得同一張圖片的數(shù)據(jù)均被存儲在同一組具有相同SN的內(nèi)存中,因此圖片銳化程序讀取1張圖片數(shù)據(jù)時就不再需要進任何移位操作;2)AMBS映射策略使得相鄰圖片的數(shù)據(jù)存儲在同一組或者相鄰組內(nèi)存中,在這種情況下讀取相鄰圖片數(shù)據(jù)的圖片也最多需要進行一次移位操作.同時我們還可以從圖12中看出,AMBS-16與AMBS-32差距較小,而與AMBS-8差距較大.這是由于AMBS-16位移操作次數(shù)已經(jīng)較少,再增加端口數(shù)也無法大幅減少位移操作次數(shù),但是減少端口數(shù)會顯著增減位移操作的次數(shù).綜上所述,結合占用面積、讀寫延時等情況考慮,單個基本存儲單元讀寫端口為16時能取得較好性能.
Fig. 12 The impact of the read/write ports on the shift operation compared with Base-16圖12 與Base-16對比讀寫端口對移位操作數(shù)影響
在實驗的第2部分,我們使用通用的圖像銳化程序作為實驗程序,同時為了使得實驗結果更具有通用性,我們使用一系列不同分辨率的圖片集作為實驗比較對象.
圖13對比了在不使用AMBS策略(Without AMBS)與使用AMBS策略(With AMBS)的情況下,基于斯格明子的存內(nèi)計算框架與基準性能(基于磁疇壁的存內(nèi)計算框架)的比較.可以計算得出,使用AMBS策略與不使用AMBS策略相比,存內(nèi)計算框架平均能節(jié)省4.5%的時間和8.7%的能耗.容易觀察到,系統(tǒng)整體性能的差距要比圖12中位移次數(shù)的差距小得多.這主要是因為在基于斯格明子的存內(nèi)計算框架中計算單元占據(jù)了大部分的時間和能耗.同時我們也注意到當測試圖片逐步增大時,時間和能耗的減少比例也逐步擴大并趨近一個極限值.這是由于隨著數(shù)據(jù)量的不斷增加,斯格明子內(nèi)存框架內(nèi)程序運行的并行程度也在不斷提高并接近其極限.因此在一定范圍內(nèi),斯格明子存內(nèi)計算框架中程序處理的數(shù)據(jù)量越大越能獲得更多優(yōu)勢.
Fig. 13 Performance evaluation of PIM architecture based on Skyrmion圖13 基于斯格明子的存內(nèi)計算框架性能評估
從總體上來說,實驗結果表明:在不使用AMBS映射策略下,本文提出的基于斯格明子的存內(nèi)計算框架相比目前最先進的基于磁疇壁的存內(nèi)計算單元在時間上平均節(jié)省了43.6%,在能耗上平均節(jié)省了34.2%.在使用了AMBS映射策略之后,平均節(jié)約時間上升至48.1%,同時平均節(jié)約能耗42.9%.
本文提出了基于斯格明子邏輯門的加法和乘法計算單元,探討了斯格明子基本存儲單元的設計方式,優(yōu)化了斯格明子存儲單元的地址映射方式,并最終在此基礎上建立了基于斯格明子介質(zhì)的存內(nèi)計算框架.本文提出的存內(nèi)計算框架在獲得基于斯格明子-賽道型內(nèi)存的非易失性存儲單元優(yōu)勢的同時又獲得了基于斯格明子邏輯計算單元的優(yōu)勢.在存儲單元方面,本文首先從硬件層面探討了斯格明子-賽道型存儲單元的讀寫參數(shù)優(yōu)化等問題,再從系統(tǒng)層面提出了基于斯格明子-賽道型存儲單元專用內(nèi)存映射策略,從而在總體上改善了存內(nèi)計算單元的性能.在計算單元方面,本文提出的基于斯格明子的全加器和乘法器不僅受益于斯格明子本身優(yōu)異的物理特性,同時計算單元的并行優(yōu)化設計以及電路的復用也極大地提高了系統(tǒng)整體性能,降低了系統(tǒng)實現(xiàn)的復雜度.實驗表明:本文提出的存內(nèi)計算框架與目前最先進的基于磁疇壁的存內(nèi)計算框架相比,在時間上平均節(jié)省了48.1%,在能耗上平均節(jié)省了42.9%.