修思文,黃 凱,余 慜,謝天藝,葛海通,嚴曉浪
(1.浙江大學 超大規(guī)模集成電路研究所,浙江 杭州310027;2.杭州中天微系統(tǒng)有限公司,浙江 杭州310027)
隨著性能和功耗需求的不斷增長,多核處理器系統(tǒng)已被業(yè)界廣泛使用.其中,基于對稱式共享存儲器的多核處理器架構(gòu)具有較低的通信延遲、易懂的編程模型、高效的代碼和數(shù)據(jù)共享等特點因而備受歡迎,也最為常用[1].由于共享數(shù)據(jù)的存在,可能出現(xiàn)一個數(shù)據(jù)的多個版本同時存在于共享存儲器和多個處理器的高速緩存(cache)中的情況.如果此時有多于一個的處理器對該數(shù)據(jù)進行寫操作,則可能出現(xiàn)數(shù)據(jù)不一致的問題,導致程序執(zhí)行發(fā)生錯誤.緩存一致性協(xié)議是一種用于保證多核處理器系統(tǒng)各處理器緩存中數(shù)據(jù)一致的機制,可由軟件或硬件方式來實現(xiàn)[2].采用硬件方式維護一致性非常方便高效而且對軟件透明,因此被廣泛采用[3].其中,基于監(jiān)聽式的寫無效協(xié)議具有對互連帶寬占用小、硬件實現(xiàn)簡單、資源占用較少等優(yōu)點,被大多數(shù)多核處理器所采用[4].
寫無效協(xié)議和處理器所采用的緩存的類型相關,如更新內(nèi)存的方式是寫回(write back)還是寫透(write through);寫缺失時的策略是寫分配(write allocate)還是非寫分配(no-write allocate).一些面向特殊應用的多核處理器會經(jīng)常處理一些有大量數(shù)據(jù)重用的、輸入和輸出的數(shù)據(jù)流地址不相關的并行化應用(如圖像處理等),適合采用基于寫回、非寫分配的緩存[5],避免不必要的緩存分配,減小對存儲器帶寬的壓力.然而,現(xiàn)有的一致性協(xié)議及一些優(yōu)化措施[6-9]都是針對寫回、寫分配的緩存.雖然傳統(tǒng)的寫無效協(xié)議可以應用在非寫分配的緩存上,但發(fā)生寫缺失時,不僅要發(fā)起對共享存儲器的寫操作,而且系統(tǒng)中不再存在有效的該緩存行,對性能和功耗的損失很大,亟待改進.
針對基于寫回、非寫分配緩存的特點,本文提出一種新型的高速緩存一致性協(xié)議——寫干涉協(xié)議及其硬件架構(gòu).采用寫干涉協(xié)議,可以減少對共享存儲器的讀寫操作,降低了功耗,提升了系統(tǒng)的性能.
現(xiàn)有的寫無效協(xié)議主要包括MESI(Modified/Exclusive/Shared/Invalid)及其變種協(xié)議.MESI協(xié)議應用比較廣泛,其缺點是只能共享干凈的緩存行——緩存行從修改狀態(tài)(M)轉(zhuǎn)移到其他狀態(tài)時,一定要引起 寫 回 操 作.MOESI(Modified/Owner/Exclusive/Shared/Invalid)協(xié)議解決了這個問題,它引入了所有者狀態(tài)(O),支持了臟數(shù)據(jù)的共享,減少了寫回操作,是目前最為流行的MESI類協(xié)議[4],被AMD、ARM等公司所采用.Intel公司提出的MESIF(Modified/Exclusive/Shared/Invalid/Forward)協(xié)議是另外一種MESI協(xié)議的另外一個變種,但其旨在解決ccNUMA(Cache Coherence Non Uniform Memory Access)架構(gòu)中處理器子系統(tǒng)間的一致性問題[10].然而,現(xiàn)有的MESI和MOESI等協(xié)議在應用到寫回、非寫分配的緩存時,都會引起性能和功耗上的損失,這里以MESI為典型例子加以說明.基于寫回、非寫分配的緩存的MESI協(xié)議的狀態(tài)轉(zhuǎn)換如圖1所示.
圖1 基于寫回、非寫分配緩存的MESI協(xié)議狀態(tài)轉(zhuǎn)換圖Fig.1 Write-back and no-write-allocate cache based MESI protocol state transition
處理器發(fā)生寫缺失時,先發(fā)出一個寫缺失請求,使其他處理器中該緩存行的副本無效,然后再把數(shù)據(jù)寫到共享存儲器中.其他處理器若監(jiān)聽到有處理器對處于獨占(E)、共享(S)或修改狀態(tài)(M)的緩存行進行寫操作,都將該緩存行的狀態(tài)轉(zhuǎn)換為無效狀態(tài)(I),處于修改狀態(tài)(M)的緩存行還要搶先寫回共享存儲器中.可見,由于采用非寫分配的高速緩存,當有處理器對某個高速緩存行產(chǎn)生一次寫缺失時,需要發(fā)起對共享存儲器的寫更新操作,且所有處理器均不存在該高速緩存行的有效副本.緊接著,任何處理器下一次對該緩存行的讀操作也必定是缺失的,且需要發(fā)起對共享存儲器中該行的讀操作.更差的情況,如果沒有處理器發(fā)起過對該緩存行的讀操作,之后對該緩存行的寫操作都是缺失的,處理器會頻繁地發(fā)起對共享存儲器的訪問.由于外部共享存儲器一般由容量較大的DRAM 實現(xiàn),需要不斷的刷新,不僅功耗較大,而且訪問延時遠大于處理器內(nèi)部時鐘,因此,以上情況極大地影響了性能和功耗.
針對現(xiàn)有MOESI等協(xié)議運用于寫回、非寫分配緩存的缺點,提出了寫干涉協(xié)議,該協(xié)議利用以下5種狀態(tài)的一種來標記各緩存行:
無效狀態(tài)(I):指示該緩存行無效.
獨占干凈狀態(tài)(EC):指示該緩存行只存在于當前的緩存中,并且是干凈的(和共享存儲器中該行中的數(shù)據(jù)一致).當監(jiān)聽到數(shù)據(jù)請求時,處于EC 狀態(tài)的緩存行必須提供數(shù)據(jù).
獨占修改狀態(tài)(ED):指示該緩存行只存在于當前的緩存中,但它已被修改過,是臟的(在共享存儲器中的該行中的數(shù)據(jù)不再有效).當監(jiān)聽到數(shù)據(jù)請求時,處于ED 狀態(tài)的緩存行必須提供數(shù)據(jù).
共享干凈狀態(tài)(SC):指示該緩存行存在于當前的緩存中,而且其他處理器也可能擁有該緩存行.處于SC狀態(tài)的緩存行在被替換時不負責更新共享存儲器;當監(jiān)聽到數(shù)據(jù)請求時,如果被仲裁選中,它必須提供數(shù)據(jù).
共享修改狀態(tài)(SD):指示該緩存行存在于當前的緩存中,而且其他處理器也可能擁有該緩存行.處于SD 狀態(tài)的緩存行在被替換時負責更新共享存儲器;當監(jiān)聽到數(shù)據(jù)請求時,如果被仲裁選中,它必須提供數(shù)據(jù).
本協(xié)議定義了2個標記:“修改者標記”和“所有者標記”.擁有修改者標記的緩存行要負責把被修改過的數(shù)據(jù)寫回到共享存儲器中.因此,處于ED 狀態(tài)和SD狀態(tài)的緩存行擁有修改者標記.擁有所有者標記的緩存行既要負責給請求該緩存行的處理器提供數(shù)據(jù),也要承擔對該緩存行的寫干涉.顯然,處于ED狀態(tài)和EC狀態(tài)的緩存行擁有所有者標記.當緩存行在系統(tǒng)中僅存在SD狀態(tài)或SC狀態(tài)時,由核間互連負責仲裁、賦予所有者標記.根據(jù)時間局部性原理,當發(fā)生緩存間的數(shù)據(jù)拷貝時,修改者標記將隨之遷移,請求該緩存行的處理將在下次所有者標記仲裁時擁有最高的優(yōu)先級.
如圖2所示列出了本協(xié)議的狀態(tài)轉(zhuǎn)換圖.當某個處理器對某個緩存行中的某個地址產(chǎn)生寫缺失操作時:若其他所有處理器中均不存在有效的該緩存行,則把數(shù)據(jù)寫到共享存儲器的該地址中.若其他處理器中存在有效的該緩存行,則把數(shù)據(jù)直接寫入到其他處理器中擁有所有者標記的該緩存行中(定義為“寫干涉”操作),并將其狀態(tài)轉(zhuǎn)換為ED 狀態(tài);同時,把其他處理器的該緩存行無效掉(定義為“寫無效”操作),即狀態(tài)轉(zhuǎn)換為I狀態(tài).
當某個處理器對某個緩存行中的某個地址產(chǎn)生讀缺失操作時:若其他所有處理器中均不存在有效的該緩存行,則將共享存儲器中的該地址行分配到該處理器的緩存中,狀態(tài)設為EC狀態(tài).若其他處理器中存在有效的該緩存行,則擁有所有者標記的該緩存行負責提供數(shù)據(jù),并將其狀態(tài)轉(zhuǎn)化為SC 狀態(tài).同時,提供數(shù)據(jù)的緩存行將其修改者標記轉(zhuǎn)移給請求數(shù)據(jù)的緩存行.
圖2 寫干涉協(xié)議狀態(tài)轉(zhuǎn)換圖Fig.2 Write intervention protocol state transition
當某個處理器對某個處于SD 或SC 狀態(tài)的緩存行中的某個地址產(chǎn)生寫命中操作時:若不存在其他有效的該緩存行,則可以執(zhí)行該寫操作,且狀態(tài)轉(zhuǎn)換為ED 狀態(tài);若存在有效的該緩存行,則須將它們均無效掉,然后發(fā)起該寫命中操作的處理器才可以執(zhí)行該寫操作,狀態(tài)轉(zhuǎn)換為ED 狀態(tài).
當某個處理器對某個處于EC 狀態(tài)的緩存行的某個地址產(chǎn)生寫命中操作時,可以直接執(zhí)行該寫操作,狀態(tài)轉(zhuǎn)換為ED 狀態(tài).其他情況下,狀態(tài)不變.
利用符號模型狀態(tài)法[11](symbolic state model,SSM),定義如下表示符:
0:表示有0個實例,表示時可以省略;
1:表示有且只有1個實例;
+:表示1個或多個實例;
*:表示0個、1個或多個實例.
通過這些符號,可以構(gòu)建復雜狀態(tài)的簡明表示,例如可以用(SD1,SC+,I*)來表示:對于某個緩存行,一個或者多個緩存處于SC 狀態(tài),僅有1個緩存處于SD 狀態(tài),0個、1個或多個緩存是無效的.對于寫干涉協(xié)議,從初始的(I+)狀態(tài)開始擴張,每個狀態(tài)轉(zhuǎn)換的條件要覆蓋寫/讀操作和替換操作,最后形成的狀態(tài)轉(zhuǎn)換圖如圖3所示.共產(chǎn)生了另外7種狀態(tài),在這些狀態(tài)中,一致性都得到了保證,從而驗證了寫干涉協(xié)議的正確性.
圖3 寫干涉協(xié)議的SSM 狀態(tài)轉(zhuǎn)換Fig.3 SSM state transition of write intervention protocol
對于現(xiàn)有MOESI等協(xié)議,需要把系統(tǒng)中有效的該緩存行無效掉,如果系統(tǒng)中存在被修改過的緩存行,還要先把該緩存行寫回到共享存儲器中,最后把寫缺失的數(shù)據(jù)寫到共享存儲器中.耗時(單位:處理器周期數(shù))為
功耗為
式中:耗時和功耗從處理器發(fā)出一致性請求開始算起,下同;c為指示系統(tǒng)中緩存行是否都是干凈的布爾型變量,c=1代表系統(tǒng)中該緩存行都是干凈的;n為表存在有效的該緩存行的處理器的個數(shù);Tf和Wf分別為一致性操作固定的耗時和功耗;Tmb和Wmb分別為寫回一個緩存行的耗時和功耗,有Tf?Tmb;Wt為一致性命令更新一個處理器Tag RAM的功耗;Wmw為向共享存儲器某地址寫1個數(shù)據(jù)的功耗.設處理器每個緩存行包含k(一般k≥4)個寫數(shù)據(jù)寬度大小的數(shù)據(jù),則有2Wmw<Wmb≤kWmw.由于寫緩沖區(qū)的廣泛應用,對共享存儲器的寫操作對系統(tǒng)性能的影響很小.假設寫緩沖區(qū)足夠大,從處理器角度看,認為向共享存儲器寫一個數(shù)據(jù)沒有耗時.
對于寫干涉協(xié)議,只需把數(shù)據(jù)直接寫到擁有所有者標記的緩存行,并更新緩存狀態(tài),同時把其他有效的緩存行無效掉.耗時為
功耗為
式中:Wcw為向處理器的某緩存行中寫一個數(shù)據(jù)的功耗,有Wt<Wcw<Wf?Wmw.
則寫干涉協(xié)議相對于現(xiàn)有MOESI等協(xié)議的耗時節(jié)省比例為
功耗節(jié)省比例為
根據(jù)前面對各系數(shù)的分析可知,當c=1時,βwm趨近于1,αwm=0;當c=0時,βwm更趨近于1,αwm趨近于1.對比可見,采用寫干涉協(xié)議,發(fā)生寫缺失時,可以顯著降低系統(tǒng)功耗;當存在臟緩存行時,可以顯著提高系統(tǒng)性能;當不存在臟緩存行時,雖然性能沒有提升,但由于緩存中保留了有效的該緩存行,對寫缺失后再讀和寫缺失后再寫影響很大.
對于現(xiàn)有MOESI等協(xié)議,系統(tǒng)中已不存在有效的緩存行,從共享存儲器中讀取數(shù)據(jù),并更新該緩存行狀態(tài).耗時為
功耗為
式中:Tmr和Wmr分別為從共享存儲器中讀取一個緩存行到緩存中的耗時和功耗.
對于寫干涉協(xié)議,如果發(fā)起讀請求的是處于ED 狀態(tài)的緩存行,直接命中;否則,產(chǎn)生讀缺失,由處于ED 狀態(tài)的緩存行提供數(shù)據(jù),并更新雙方的緩存行狀態(tài).耗時為
功耗為
式中:e為指示發(fā)起讀請求的是否處于ED 狀態(tài)的緩存行的布爾型變量,e=1時代表發(fā)起讀請求的是處于ED 狀態(tài)的緩存行;Tcr和Wcr分別為緩存間數(shù)據(jù)拷貝的耗時和功耗,有Tcr≤Tf?Tmr和Wt<Wcr≤Wf?Wmr.
則寫干涉協(xié)議相對于現(xiàn)有MOESI等協(xié)議的耗時節(jié)省比例為
功耗節(jié)省比例為
根據(jù)前面對各系數(shù)的分析可知,當e=1 時,αwmr=1,βwmr=1;當e=0時,αwmr和βwmr均趨近于1.對比可見,采用寫干涉協(xié)議,發(fā)生寫缺失后再讀時,可以顯著降低系統(tǒng)功耗、提升系統(tǒng)性能.
如果寫缺失后還沒有處理器對該緩存行進行過讀操作,對于現(xiàn)有MOESI等協(xié)議,系統(tǒng)中已不存在有效的該緩存行,直接把數(shù)據(jù)寫到共享存儲器中,耗時為
功耗為
對于寫干涉協(xié)議,如果發(fā)起讀請求的是處于ED 狀態(tài)的緩存行,直接命中;否則,直接把數(shù)據(jù)寫到出于ED 狀態(tài)的緩存行.耗時為
功耗為
則寫干涉協(xié)議相對于現(xiàn)有MOESI等協(xié)議的耗時節(jié)省比例為
功耗節(jié)省比例為
根據(jù)前面對各系數(shù)的分析可知,當e=0 時,αwmw=0,βwmw均趨近于1;當e=1時,αwmw=1,βwmw更趨近于1;可見,采用寫干涉協(xié)議,發(fā)生寫缺失后再寫時,可以顯著降低系統(tǒng)功耗;當發(fā)起寫操作的是被寫干涉的處理器時,可以顯著提升系統(tǒng)性能.更重要的是,如果寫缺失之后沒有對該緩存行的讀操作,之后的寫操作仍然存在這些優(yōu)勢.
圖4 CK610MP總體架構(gòu)Fig.4 Architecture of CK610MP
采用寫干涉協(xié)議,設計出如圖4所示的CK610MP多核處理器,由修改后的CK610處理器[12]、核間互連以及AMBA AXI總線接口單元組成,并支持2~8個處理器的配置.修改了CK610處理器的讀寫單元(LSU)部分的邏輯,使其支持一致性請求的發(fā)起和一致性命令的響應.定制了核間互連模塊,它不僅負責維護寫干涉協(xié)議,還負責處理對共享存儲器的請求;為了提高帶寬,把數(shù)據(jù)和指令的通道分開.由于指令不存在一致性的問題,以下只討論數(shù)據(jù)通道.
如圖5所示,核間互連由請求單元、一致性處理單元、存儲器接口單元和應答單元組成.
請求單元負責串行化各個處理器的訪問,并把一致性訪問轉(zhuǎn)發(fā)到一致性處理單元,把非一致性訪問轉(zhuǎn)發(fā)到存儲器接口單元.
圖5 核間互連架構(gòu)Fig.5 Architecture of interconnect
一致性處理單元是核間互連的核心模塊.一致性處理單元收到訪問請求后,首先把信息壓入一致性請求隊列,同時查詢Snoop Tag.下一個周期結(jié)果出來后進行比較,并根據(jù)查詢的結(jié)果產(chǎn)生相應的一致性命令.由于Tag 比較后的時序已經(jīng)非常緊張了,一致性命令會進入一致性命令緩沖區(qū),下一個周期再發(fā)往相應的處理器,同時請求更新Snoop Tag.當一致性操作是讀缺失時,如果Snoop Tag查詢結(jié)果指示系統(tǒng)中存在有效的該緩存行,通過緩存間數(shù)據(jù)拷貝獲取數(shù)據(jù)并發(fā)送給應答單元;否則把讀請求發(fā)給存儲器接口單元.當一致性操作是寫缺失時,如果Snoop Tag查詢結(jié)果指示系統(tǒng)中存在有效的該緩存行,則通過寫干涉命令把缺失的數(shù)據(jù)寫到擁有所有者標記的緩存中;否則把數(shù)據(jù)發(fā)送給存儲器接口單元,寫到共享存儲器中.
存儲器接口單元由寫緩沖區(qū)、讀緩沖區(qū)及總線接口組成,負責接收并發(fā)起對共享存儲器的訪問.
應答單元接收到一致性處理單元或存儲器接口單元的響應后,按照相應的順序答復發(fā)起訪問的處理器.同一個處理器的操作,在核間互連中可以亂序執(zhí)行,但需要按照請求單元記錄的順序按序應答;對于不同處理器的操作,如果沒有地址依賴關系,可以亂序執(zhí)行、亂序應答,極大地提高了性能.
單核處理器Tag 一般由Tag RAM 和Dirty RAM 組 成.Tag RAM 中 保 存 相 應 索 引 字 段(index)的有效狀態(tài)位(V)和標志字段(tag),Dirty RAM 用來保存臟狀態(tài)位(D).對于寫干涉協(xié)議,只需在Tag RAM 中擴充一個Exclusive(E)狀態(tài)位,即可表示協(xié)議的5種狀態(tài).但是這里臟狀態(tài)位的意義發(fā)生了改變,它不僅代表緩存中的數(shù)據(jù)和存儲器中不一致,還代表更新共享存儲器的責任,即擁有修改者標記.
在一致性處理單元中,利用Snoop Tag 來減少對其他處理器的不必要的干擾.Snoop Tag 可以看作是對每個處理器內(nèi)部Tag 的拷貝,但由于Snoop Tag 只用來查詢各處理器中是否存在被訪問的緩存行,所以只需要一個有效狀態(tài)位(V)即可,如表1所示.
如圖5所示,Snoop Tag有3個訪問源:查詢請求、更新請求和維護請求(處理器的緩存清空或緩存同步操作).為確保功能正確,把維護請求的優(yōu)先級設為最高.為了提高性能,避免一致性訪問的堵塞,設置查詢的優(yōu)先級高于更新的優(yōu)先級.如果出現(xiàn)查詢與更新的競爭,更新請求將在一致性命令緩沖區(qū)等待,并且被視為Snoop Tag中的內(nèi)容,會被隨后的一致性訪問所查詢.然而,一致性命令緩沖區(qū)的大小終歸有限,如果被填滿仍會阻塞一致性訪問.為了進一步提高性能,按照索引字段的低2位模4運算的結(jié)果把每個處理器的Snoop Tag 分為4 個塊(bank),不同的塊可以被同時訪問,從而降低了查詢請求與更新請求沖突的概率.至于處理器Tag,由于對Tag的訪問處于時序的關鍵路徑,所以不能進行分塊.
表1 處理器Tag和Snoop Tag各狀態(tài)位與寫干涉協(xié)議各狀態(tài)的對應關系Tab.1 Corresponding relation between the states of processor Tag and Snoop Tag and the states of write intervention protocol
處理器部分的設計是基于CK610單核的擴展.如圖6所示,新增了一致性命令接口、緩存間數(shù)據(jù)拷貝接口、緩存仲裁邏輯、一致性判斷邏輯、請求接口和應答接口.
圖6 處理器部分的架構(gòu)Fig.6 Architecture of processor
利用可反轉(zhuǎn)固定優(yōu)先級的緩存仲裁邏輯來選擇請求緩存操作的源.為了減少處理器的阻塞,提高性能,定義處理器讀請求的優(yōu)先級最高,其中,Tag查詢請求也是讀請求的一種.但是,如果處理器一直發(fā)起讀請求,將會堵塞一致性命令,造成整個系統(tǒng)的堵塞.因此,設計規(guī)定:如果N 個處理器時鐘周期后一致性命令還沒有搶到緩存資源,處理器讀請求和一致性命令的優(yōu)先級將臨時反轉(zhuǎn)一次.由于核間互連保證了能夠發(fā)往處理器的一致性命令的順序一定是先于處理器未完成的一致性請求的順序,所以定義處理器對緩存寫請求的優(yōu)先級為最低.
一致性命令接口用來把接收到的一致性命令譯碼成相應的對各個RAM 的操作,如表2所示,根據(jù)寫干涉協(xié)議,定義了4種一致性命令,這里以“讀數(shù)據(jù)命令”為例簡要說明.當某個處理器發(fā)起讀缺失請求時,核間互連向擁有所有者標記的處理器發(fā)送讀數(shù)據(jù)命令,把處理器Tag RAM 相應index的E 位寫為0,Dirty RAM 的D 位寫為0,同時讀取Data RAM 中的數(shù)據(jù).這里利用了SRAM 的特性,把Dirty RAM 的數(shù)據(jù)輸入端置0的同時,在數(shù)據(jù)輸出端同時讀出之前的D 狀態(tài)位,和數(shù)據(jù)一起通過緩存間數(shù)據(jù)拷貝接口答復給核間互連,完成了修改者標記的轉(zhuǎn)移.
表2 一致性命令與對處理器緩存操作的對應關系Tab.2 Relation between coherence commands and operations on processor cache
一致性判斷邏輯會根據(jù)一致性協(xié)議、緩存命中判斷的結(jié)果和地址區(qū)間的屬性來判斷發(fā)起的請求是否為一致性請求,然后通過請求接口把信息發(fā)給核間互連.核間互連通過一致性處理后,通過應答接口發(fā)送應答、讀數(shù)據(jù)、協(xié)議狀態(tài)位、臟狀態(tài)位等給處理器,完成整個操作.
圖7 實驗所用的系統(tǒng)環(huán)境Fig.7 Experiment environment
在實驗中,CK610MP 被集成到一個小型系統(tǒng)中,如圖7 所示,該系統(tǒng)還包括AXI總線、APB 總線、中 斷 控 制 器(INTC)、定 時 器(TIM)、看 門 狗(WDT)、存儲器控制器(MMC)及共享存儲器(SDR).其中,各處理器一級數(shù)據(jù)/指令緩存大小為16KB,每個緩存行大小為4個字,采用SMIC65nmLL工藝的單端口SRAM;處理器時鐘頻率為480 MHz,AXI和SDR 時鐘頻率為120 MHz;SDR 選取的型號 為美光半導體(Micron)的MT48LC32M16A2[13],大小為128 MB.選取EEMBC Multi-bench[14]中有代表性的md5、rgbcmy和rotate程序進行性能測試和功耗評估.這3 個程序各有特點,md5 程序計算多數(shù)據(jù)流的MD5校驗和,數(shù)據(jù)并行度較高,通信相對較少;rgbcmy程序把RGB 色彩模式的圖像轉(zhuǎn)換成CMYK 印刷色彩模式的圖像,通信計算比高于md5;rotate程序處理一系列二進制圖像,將其旋轉(zhuǎn)90°、180°和270°,計算量很少,由于輸入和輸出的數(shù)據(jù)流地址相關性較低,會產(chǎn)生較多的寫缺失,對共享存儲器帶寬帶來壓力.在服務器中進行ASIC仿真,通過統(tǒng)計程序運行時間以及對SDR 的訪問次數(shù)來評 估 性 能;通 過Synopsys Prime Power 統(tǒng) 計CK610MP、AXI、MMC 和SDR 部分的動態(tài)功耗來評估功耗.其中,對共享存儲器訪問的統(tǒng)計是通過硬件性能計數(shù)器實現(xiàn)的.
實驗中,用寫無效協(xié)議中性能最好的MOESI協(xié)議作為參考和寫干涉協(xié)議進行對比,分別比較2、4、6和8核配置下對相同任務的運行情況.為便于進行橫向?qū)Ρ?,CK610MP實現(xiàn)了2個版本:支持緩存間數(shù)據(jù)拷貝的MOESI協(xié)議版本和寫干涉協(xié)議版本.
如圖8所示,在各種處理器核數(shù)N 配置下,寫干涉協(xié)議(WI)對共享存儲器的訪問次數(shù)M 比MOESI協(xié)議對共享存儲器的訪問次數(shù)都有顯著減少,其中,通信相對較少的md5 程序平均減少了6%;通信相對較多的rgbcmyk 程序平局減少了11%;寫缺失較多的rotate程序平均減少了27%.
圖8 共享存儲器訪問次數(shù)統(tǒng)計Fig.8 Statistics of shared memory access
圖9 歸一化的共享存儲器訪問次數(shù)統(tǒng)計Fig.9 Normalized statistics of shared memory access
如圖9所示 顯示了寫干涉協(xié)議對共享存儲器訪問次數(shù)(Mwi)占MOESI協(xié)議對共享存儲器訪問次數(shù)(Mmoesi)的百分比隨處理器核數(shù)變化的情況.進一步發(fā)現(xiàn),隨著處理器核數(shù)的增多,核間通信隨之增加,寫干涉協(xié)議減少共享存儲器訪問次數(shù)的優(yōu)勢變得更明顯.
如圖10所示,寫干涉協(xié)議減少了程序執(zhí)行時間T,對性能有所提升,其中,md5程序平均減少了1%;rgbcmyk程序平均減少了2%,rotate程序平均減少了3%.從以上統(tǒng)計可以看出,寫干涉協(xié)議可以減少共享存儲器的訪問次數(shù),提升系統(tǒng)的性能,而且在處理器核數(shù)固定的情況下,隨著核間通信比例的增加、寫缺失比例的增加,這些提升變得更明顯.
如圖11所示顯示了寫干涉協(xié)議的程序執(zhí)行時間(Twi)占MOESI協(xié)議的程序執(zhí)行時間(Tmoesi)的百分比隨處理器核數(shù)變化的情況.隨著處理器核數(shù)的增多,核間通信及寫缺失將增多.因此,在2、4、6核的配置下,寫干涉協(xié)議對性能的提升逐漸變得明顯.但是,隨著處理器核數(shù)的增多,寫干涉操作的時間、空間局部性將變差,被寫干涉的緩存行極有可能被迅速替換掉,導致在8核配置下,寫缺失比例少于rotate的md5 和rgbcmyk 程序?qū)π阅艿奶嵘潭扔兴档?
圖10 執(zhí)行時間統(tǒng)計Fig.10 Statistics of execution time
圖11 歸一化執(zhí)行時間統(tǒng)計Fig.11 Normalized statistics of execution time
CMOS電路中的功耗由2部分功耗組成,一部分是漏電流引起的靜態(tài)功耗,另一部分是由信號翻轉(zhuǎn)造成的動態(tài)功耗.這里討論的功耗均為動態(tài)功耗.把整個系統(tǒng)的功耗分為3個部分:
式中:ECORES為處理器內(nèi)核的功耗,EIC為核間互連的功耗,EOUT為AXI、MMC和SDR 部分的功耗.顯然CK610MP部分的功耗為ECORES+EIC.根據(jù)第4 章分析可知,對比MOESI協(xié)議,寫干涉協(xié)議大幅減少了對共享存儲器的訪問,因此降低了EOUT;增加了緩存命中率,因此降低了EIC;增加了緩存間的數(shù)據(jù)拷貝,將增加ECORES.而從如圖12顯示的實驗結(jié)果來看,寫干涉協(xié)議對EOUT的降低更為明顯,因此總體的功耗(P)還是大幅下降的.其中,md5程序平均下降了3%;rgbcmyk程序平均下降了10%,rotate程序平均下降了13%.
如圖13 所示顯示了寫干涉協(xié)議的總體功耗(Pwi)占MOESI協(xié)議的總體功能(Pmoesi)的百分比隨處理器核數(shù)變化的情況.隨著處理器核數(shù)的增多,數(shù)據(jù)部分的緩存間共享將增多,而指令部分無法進行緩存共享,導致處理器指令部分的功耗所占的比例將越來越大,是一致性協(xié)議無法解決的,因此ECORES占系統(tǒng)功耗的比例將越來越大,寫干涉協(xié)議對功耗節(jié)省的優(yōu)勢將趨近飽和.
圖12 動態(tài)功耗統(tǒng)計Fig.12 Statistics of dynamic power dissipation
圖13 歸一化動態(tài)功耗統(tǒng)計Fig.13 Normalized statistics of dynamic power dissipation
本文提出了一種基于寫干涉的高速緩存一致性協(xié)議,用于采用寫回、非寫分配緩存的多核處理器系統(tǒng),并在32位嵌入式多核處理器設計中加以實現(xiàn).實驗結(jié)果表明,和MOESI協(xié)議相比,寫干涉協(xié)議減少了共享存儲器的訪問量,提升了系統(tǒng)的性能,同時也降低了動態(tài)功耗.
利用仿真的方法進行性能和功耗的評估,雖然結(jié)果精確,但速度很慢.今后,將對寫干涉協(xié)議在更高的抽象層次進行快速評估,并將進一步考慮不同緩存大小和不同處理器體系結(jié)構(gòu)等對協(xié)議的影響.
(
):
[1]ZHOU X,YU C,DASH A,et al.Application-aware snoop filtering for low-power cache coherence in embedded multiprocessors[J].ACM Transactions on Design Automation of Electronic Systems(TODAES),2008,13(1):16:1-16:25.
[2]CRAWFORD S E,DEMARA R F.Cache coherence in a multiport memory environment[C]∥Proceedings of the First International Conference on Massively Parallel Computing Systems.Ischia:IEEE,1994:632-642.
[3]STENSTROM P.A survey of cache coherence schemes for multiprocessors [J].Computer,1990,23(6):12-24.
[4]HENNESSY J L,PATTERSON D A.Computer architecture:aquantitative approach,F(xiàn)ourth Edition [M].Amsterdam:Elsevier,2007:208-284.
[5]LEVERICH J,ARAKIDA H,SOLOMATNIKOV A,et al.Comparing memory systems for chip multiprocessors[J].ACM SIGARCH Computer Architecture News,2007,35(2):358-368.
[6]JANG Y J,RO W W.Evaluation of cache coherence protocols on multi-core systems with linear workloads[C]∥ISECS International Colloquium on Computing,Communication, Control,and Managemen. Sanya:IEEE,2009:342-345.
[7]YI K,RO W,GAUDIOT J.Importance of coherence protocols with network applications on multi-Core processors[J].IEEE Transactions on Computers,2013,62(1):6-15.
[8]LI J M,LIU W J,JIAO P.A new kind of cache coherence protocol with sc-cache for multiprocessor[C]∥2010 2nd International Workshop on Intelligent Systems and Applications(ISA).Wuhan:IEEE,2010:1-5.
[9]KAXIRAS S,ROS A.Efficient,snoopless,system-onchip coherence[C]∥SOC Conference(SOCC).Niagara Falls,NY:IEEE,2012:230-235.
[10]HACKENBERG D,MOLKA D,NAGEL W E.Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems[C]∥Proceedings of the 42Nd Annual IEEE/ACM International Symposium on microarchitecture. New York: IEEE, 2009:413-422.
[11]PONG F,DUBOIS M.Formal automatic verification of cache coherence in multiprocessors with relaxed memory models[J].IEEE Transactions on Parallel and Distributed Systems,2000,11(9):989-1006.
[12]C-SKY Microsystems Co.,Ltd.CK600Introduction[EB/OL].[2014-01-11].http:∥www.c-sky.com/downdisp.php?aid=72
[13]Micron Technology,Inc.MT48LC32M16A2datasheet[EB/OL].[2014-01-11].http:∥www.micron.com/~/media/Documents/Products/Data%20Sheet/DRAM/512Mb_sdr.pdf
[14]Embedded Microprocessor Benchmark Consortium.MultiBenchTM1.0 Benchmark Software [EB/OL].[2014-01-11].http:∥www.eembc.org/benchmark/multi_sl.php