專利名稱:片上多核處理器系統(tǒng)的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器,尤其涉及片上多核處理器(Chip Multiprocessor, CMP)系 統(tǒng)的高速緩存(Cache) —致性協(xié)議的實(shí)現(xiàn)方法。
背景技術(shù):
由于共享存儲(chǔ)CMP系統(tǒng)中,可能出現(xiàn)同一數(shù)據(jù)的多個(gè)版本同時(shí)存在于內(nèi)存和多個(gè) 處理器的Cache中的情況,如果此時(shí)有多個(gè)處理器對(duì)該數(shù)據(jù)進(jìn)行寫操作,則可能出現(xiàn)數(shù)據(jù) 不一致的情況,導(dǎo)致程序執(zhí)行發(fā)生錯(cuò)誤。Cache —致性協(xié)議是一種用于保證多處理器系統(tǒng)各 處理器Cache中數(shù)據(jù)一致性的機(jī)制,是影響系統(tǒng)的正確性、性能、功耗和帶寬的關(guān)鍵因素。 協(xié)議可以由軟件或者硬件方法來(lái)實(shí)現(xiàn)。本發(fā)明是一種硬件方法實(shí)現(xiàn)的Cache —致性協(xié)議, 以下所述協(xié)議均指硬件實(shí)現(xiàn)的協(xié)議。Cache 一致性協(xié)議通過(guò)賦予Cache中數(shù)據(jù)塊不同的狀態(tài),由數(shù)據(jù)塊的狀態(tài)來(lái)決定 可以對(duì)該數(shù)據(jù)塊進(jìn)行的操作(讀或?qū)?,協(xié)議規(guī)定在遇到不同的本地處理器操作或者協(xié)議 消息的情況下數(shù)據(jù)塊的狀態(tài)轉(zhuǎn)換關(guān)系和產(chǎn)生應(yīng)答數(shù)據(jù)以及協(xié)議消息等相關(guān)動(dòng)作,以達(dá)到保 證寫操作相對(duì)于所有的處理器以相同的順序完成的寫一致性條件,并且所寫的新值能及時(shí) 地傳給其他使用該數(shù)據(jù)的處理器的寫傳遞條件,從而保證多處理器系統(tǒng)的正確性。根據(jù)對(duì)寫操作產(chǎn)生的新值傳遞的時(shí)機(jī)不同,Cache 一致性協(xié)議可以分為基于無(wú)效 的協(xié)議和基于更新的協(xié)議兩種。基于無(wú)效的協(xié)議是指當(dāng)某個(gè)處理器發(fā)出寫失效請(qǐng)求信號(hào) 時(shí),其他處理器需要將各自Cache中的對(duì)應(yīng)數(shù)據(jù)塊置為無(wú)效狀態(tài),當(dāng)這些處理器再次訪問(wèn) 該數(shù)據(jù)塊時(shí)會(huì)發(fā)生Cache失效,并發(fā)出失效請(qǐng)求信號(hào)以得到新寫入該數(shù)據(jù)塊的值。基于更 新的協(xié)議是指當(dāng)某個(gè)處理器完成寫操作時(shí),將寫入對(duì)應(yīng)數(shù)據(jù)塊的新值傳給其他Cache中有 該數(shù)據(jù)塊的處理器,并對(duì)這些處理器Cache中對(duì)應(yīng)數(shù)據(jù)塊的值進(jìn)行更新。基于無(wú)效的協(xié)議 只有在處理器需要用到新寫入的值時(shí)才產(chǎn)生數(shù)據(jù)的傳遞;而基于更新的協(xié)議在新值產(chǎn)生的 同時(shí)就將數(shù)據(jù)傳給擁有該數(shù)據(jù)的所有處理器,這些處理器在將來(lái)不一定會(huì)用到該數(shù)據(jù),可 能造成互連帶寬的浪費(fèi)。隨著Cache數(shù)據(jù)塊的增大,基于更新的協(xié)議會(huì)造成過(guò)多的帶寬消 耗。由于基于更新的協(xié)議實(shí)現(xiàn)寫一致性條件的機(jī)制相對(duì)于基于無(wú)效的協(xié)議也更加復(fù)雜,因 此大量的Cache —致性協(xié)議都采用了基于無(wú)效的值傳遞方式。本發(fā)明是一種采用基于無(wú)效 的值傳遞方式的協(xié)議。以下所述協(xié)議均采用基于無(wú)效的值傳遞方式。 如圖1所示,以一個(gè)簡(jiǎn)單的基于無(wú)效的MSI協(xié)議為例來(lái)說(shuō)明上述的協(xié)議狀態(tài)轉(zhuǎn)換 關(guān)系。圖1中,實(shí)線箭頭表示本處理器的訪存操作引起的Cache塊狀態(tài)變化,虛線箭頭表示 其他處理器訪存失效請(qǐng)求信號(hào)引起的狀態(tài)變化。圖1中的“/”前邊是引起狀態(tài)變化的原 因,后邊是狀態(tài)變化時(shí)需要進(jìn)行的操作,M(Modified)為已修改狀態(tài),表示本處理器擁有對(duì) 該狀態(tài)數(shù)據(jù)塊的讀和寫權(quán)限。S(Shared)為共享狀態(tài),表示本處理器對(duì)該數(shù)據(jù)塊擁有讀權(quán) 限。I(Invalid)為無(wú)效狀態(tài),表示本處理器Cache中不存在該數(shù)據(jù)塊。寫失效請(qǐng)求信號(hào)會(huì) 將系統(tǒng)中所有其他處理器Cache中的數(shù)據(jù)置為I狀態(tài),使得系統(tǒng)中同一數(shù)據(jù)塊的M態(tài)在同 一時(shí)間僅能出現(xiàn)在某一個(gè)處理器的Cache中,同時(shí)該數(shù)據(jù)塊在其他處理器Cache中的狀態(tài)都為I,以保證寫一致性和寫傳遞條件。協(xié)議在應(yīng)用于總線等控制集中的互連結(jié)構(gòu)時(shí),對(duì)失效請(qǐng)求信號(hào)進(jìn)行廣播,各處理 器對(duì)廣播的信號(hào)進(jìn)行偵聽操作。這種各個(gè)處理器通過(guò)偵聽方式來(lái)決定是否提供數(shù)據(jù)或者進(jìn) 行無(wú)效等操作的協(xié)議稱為偵聽協(xié)議。而協(xié)議在應(yīng)用于分布式互連結(jié)構(gòu)(如mesKtorus等) 時(shí),使用目錄結(jié)構(gòu)來(lái)記錄各數(shù)據(jù)的所有者處理器,失效請(qǐng)求首先發(fā)送給目錄,由目錄來(lái)決定 將該請(qǐng)求發(fā)送給對(duì)應(yīng)的數(shù)據(jù)提供者處理器和是否發(fā)送無(wú)效請(qǐng)求給其他處理器。這種協(xié)議稱 為目錄協(xié)議。由于總線等控制集中的互連結(jié)構(gòu)可以為所有處理器提供統(tǒng)一的失效信號(hào)順序,時(shí) 序簡(jiǎn)單,使得偵聽協(xié)議的實(shí)現(xiàn)相對(duì)簡(jiǎn)單;而對(duì)失效信號(hào)的廣播與偵聽可以直接找到數(shù)據(jù)提 供者,失效延時(shí)相對(duì)較低。但由于總線等控制集中的互連結(jié)構(gòu)帶寬有限,對(duì)失效信號(hào)的廣播 需要消耗大量帶寬,偵聽協(xié)議一般僅用于較小規(guī)模的系統(tǒng),系統(tǒng)規(guī)模的可擴(kuò)展性有限。
,無(wú)法為失效信號(hào)提供統(tǒng)一的順序,時(shí)序復(fù)雜, 目錄協(xié)議的實(shí)現(xiàn)相對(duì)復(fù)雜;對(duì)目錄的訪問(wèn)使得失效延時(shí)增加;但目錄的使用避免了對(duì)失效 信號(hào)進(jìn)行廣播,節(jié)約了帶寬,使得系統(tǒng)的規(guī)模可擴(kuò)展?;诃h(huán)的偵聽協(xié)議比偵聽總線協(xié)議有更好的系統(tǒng)規(guī)??蓴U(kuò)展性,比目錄協(xié)議更加 簡(jiǎn)單,可以在不同程度上彌補(bǔ)這兩種協(xié)議的不足之處。但由于環(huán)無(wú)法像總線一樣給所有消 息提供一個(gè)全序,環(huán)連接的多處理器系統(tǒng)可能出現(xiàn)訪存失效沖突的情況。該情況是指,多個(gè) 處理器同時(shí)發(fā)出對(duì)同一 Cache塊的失效請(qǐng)求,且其中至少有一個(gè)是寫失效請(qǐng)求。為了保證 數(shù)據(jù)的一致性,協(xié)議需要為沖突的訪存失效請(qǐng)求定序。已有的基于環(huán)的偵聽協(xié)議使用了一 種重發(fā)和應(yīng)答機(jī)制來(lái)處理沖突。該機(jī)制所使用的重發(fā)操作會(huì)使系統(tǒng)性能降低、功耗和帶寬 使用增加,甚至可能出現(xiàn)饑餓的情況。偵聽協(xié)議本身也存在大量的不必要廣播和偵聽操作, 這些操作會(huì)增加系統(tǒng)功耗。協(xié)議在應(yīng)用于環(huán)連接的CMP結(jié)構(gòu)時(shí)還存在可能的死鎖和活鎖情 況。下面具體介紹該基于環(huán)的偵聽協(xié)議及其存在的問(wèn)題。協(xié)議基于單向分槽環(huán)連接的多處理器系統(tǒng),圖2描述了該單向分槽環(huán)的結(jié)構(gòu)。單 向分槽環(huán)使用槽(slot)來(lái)傳遞信息,固定數(shù)量的槽同時(shí)在環(huán)上和處理器與環(huán)的接口中沿 著單一的方向傳遞。環(huán)上的處理器節(jié)點(diǎn)只能在空的槽路過(guò)時(shí)使用它來(lái)發(fā)送信息。每個(gè)分槽 環(huán)中槽的數(shù)量設(shè)置為處理器節(jié)點(diǎn)數(shù)量的兩倍。所以在一個(gè)八處理器節(jié)點(diǎn)的系統(tǒng)中,分槽環(huán) 上有16個(gè)槽同時(shí)傳遞。槽的具體格式由Cache —致性協(xié)議來(lái)決定。圖 2 中 direction of slot transport指槽的傳遞方向,unidirectional slotted ring才旨單向分槽環(huán),slot transport on the ring才旨IE在環(huán)上^專遞白勺槽,interface ofprocessor and ring 才旨處理器與環(huán)白勺接 Π,slot transport on the interface 才旨IE在 接口中傳遞的槽。圖 3 弓I 自文獻(xiàn)〃 Cache Coherence on a Slotted Ring(L. A. B. a. M. Dubois, Proceedings of the International Conference on Parallel Processing,1991, pp. pages230-237.)“,是協(xié)議的狀態(tài)轉(zhuǎn)換圖,其中WE表示M態(tài),INV表示I態(tài),RS表示S態(tài)。 RP和WP是兩個(gè)發(fā)出讀或?qū)懻?qǐng)求后向RS和TO態(tài)轉(zhuǎn)化過(guò)程中的暫態(tài),當(dāng)收到相應(yīng)的應(yīng)答確 認(rèn)信號(hào)后會(huì)轉(zhuǎn)換為RS和TO態(tài),而如果收到了應(yīng)答否認(rèn)信號(hào),則會(huì)轉(zhuǎn)換為INV態(tài),并重新發(fā) 出讀或?qū)懻?qǐng)求。這兩個(gè)狀態(tài)不一定要在Cache中實(shí)現(xiàn),僅用于說(shuō)明該重發(fā)應(yīng)答機(jī)制。該圖 中,R :read operation (讀操作),W write operation (寫操作),Z !replacement (替換),(i) :local cluster (本地群集),(j) :remote cluster (遠(yuǎn)禾呈群集),ack* :successful transport (成功^專輸),nack* unsuccessful transport (失敗^專輸)。如圖4所 示,舉例說(shuō)明了該基于環(huán)的偵聽協(xié)議的重發(fā)應(yīng)答機(jī)制如何處理同時(shí)出現(xiàn) 兩個(gè)沖突的寫失效請(qǐng)求的情況。圖4中,(a)表示P9和P12同時(shí)發(fā)出寫失效請(qǐng)求,而請(qǐng)求塊 的狀態(tài)是S,在P3的一級(jí)Cache (Li)中有該塊。該數(shù)據(jù)塊所在的末級(jí)Cache模塊或者內(nèi)存 模塊稱為該塊的宿主(home),位于P6 ; (b)表示P12的請(qǐng)求先經(jīng)過(guò)了 P3和home (P6),將P3 的Ll中的該塊無(wú)效掉,home將該塊狀態(tài)由S變成M,且向P12的請(qǐng)求提供應(yīng)答確認(rèn)信號(hào),從 home提供數(shù)據(jù)到環(huán)上;(c)P12得到應(yīng)答確認(rèn)信號(hào),等待應(yīng)答數(shù)據(jù)來(lái)完成寫操作,而P9的請(qǐng) 求經(jīng)過(guò)home時(shí),請(qǐng)求塊已經(jīng)處于M態(tài),向P9的請(qǐng)求發(fā)出應(yīng)答否認(rèn)信號(hào),P9收到應(yīng)答否認(rèn)信 號(hào),準(zhǔn)備重發(fā);(d)home對(duì)P12的應(yīng)答數(shù)據(jù)來(lái)到P12,P12完成寫操作,即data destination P12write,其中,datadestination :P12是指數(shù)據(jù)要到達(dá)的目的請(qǐng)求者處理器為P12 ;write 指目的請(qǐng)求者處理器P12會(huì)進(jìn)行寫操作,P9重新發(fā)出寫失效請(qǐng)求。這樣就通過(guò)先到達(dá)數(shù)據(jù) 提供者的請(qǐng)求先應(yīng)答的方式來(lái)給沖突請(qǐng)求排序,達(dá)到了解決沖突的目的。從上述例子中可以看出,協(xié)議中的重發(fā)應(yīng)答機(jī)制在遇到?jīng)_突失效請(qǐng)求時(shí)會(huì)引發(fā)大 量的重發(fā)操作,這些重發(fā)又會(huì)引起許多不必要的偵聽操作,從而降低系統(tǒng)性能,造成系統(tǒng)帶 寬和功耗的浪費(fèi)。協(xié)議中,在任意時(shí)刻對(duì)于每一個(gè)數(shù)據(jù)塊的請(qǐng)求者來(lái)說(shuō)只有一個(gè)數(shù)據(jù)提供者,可能 是處于M態(tài)的某個(gè)處理器Ll中的該數(shù)據(jù)塊,或者是處于S態(tài)的home中的該數(shù)據(jù)塊。只有 數(shù)據(jù)提供者可以決定向哪個(gè)請(qǐng)求者提供應(yīng)答確認(rèn)信號(hào)和數(shù)據(jù)。提供者總是選擇失效請(qǐng)求 最早到達(dá)的請(qǐng)求者,然后向其他請(qǐng)求者發(fā)出應(yīng)答否認(rèn)信號(hào)。在一段時(shí)間內(nèi)某個(gè)請(qǐng)求者的請(qǐng) 求可能總是不能比其他的沖突請(qǐng)求者的請(qǐng)求先到達(dá)數(shù)據(jù)提供者,該請(qǐng)求者總是無(wú)法得到數(shù) 據(jù),從而出現(xiàn)饑餓的情況。由于每個(gè)處理器在同一時(shí)間可以有多個(gè)已經(jīng)發(fā)出的對(duì)不同地址數(shù)據(jù)塊的失效請(qǐng) 求,可能出現(xiàn)多個(gè)處理器之間互相等待,形成閉合的環(huán)形依賴關(guān)系的死鎖請(qǐng)求。圖5表示兩 個(gè)處理器之間發(fā)生死鎖(dead lock)的情況。處理器F已經(jīng)得到了 M態(tài)的數(shù)據(jù)塊X,同時(shí)也 已經(jīng)發(fā)出了對(duì)另一個(gè)數(shù)據(jù)塊Y的寫失效請(qǐng)求,但還沒有得到該數(shù)據(jù)塊。按照處理器F的程 序順序,對(duì)X的寫操作必須等待對(duì)Y的寫操作完成之后才能進(jìn)行。與此同時(shí),處理器E已經(jīng) 得到了數(shù)據(jù)塊Y的M態(tài),同時(shí)已經(jīng)發(fā)出了對(duì)數(shù)據(jù)塊X的寫失效請(qǐng)求,但還沒有得到X。而按 照處理器E的程序順序,對(duì)Y的寫操作必須等待對(duì)X的寫操作完成之后才能進(jìn)行。如果在 某個(gè)處理器對(duì)其Ll中的M態(tài)數(shù)據(jù)塊的寫操作未完成時(shí),偵聽策略不允許對(duì)其他處理器的寫 失效請(qǐng)求進(jìn)行應(yīng)答確認(rèn)和提供數(shù)據(jù),上述情況中的處理器E和F會(huì)永遠(yuǎn)得不到所需要寫的 數(shù)據(jù)塊,一直互相等待下去,形成死鎖的情況。要避免該死鎖情況,需要打破處理器之間閉 合的環(huán)形依賴關(guān)系。如果偵聽策略允許,雖然可以避免上述的死鎖情況,但會(huì)出現(xiàn)圖6所示的活鎖 (live-lock)情況。圖6中同時(shí)有多個(gè)處理器(A,B, C)對(duì)同一數(shù)據(jù)塊發(fā)出寫失效請(qǐng)求,每 個(gè)處理器在得到該數(shù)據(jù)塊但還沒有完成寫操作時(shí),都收到了其他處理器對(duì)該塊的寫失效請(qǐng) 求,該處理器立刻對(duì)請(qǐng)求者發(fā)出應(yīng)答確認(rèn)信號(hào),同時(shí)提供數(shù)據(jù),將得到的M態(tài)數(shù)據(jù)無(wú)效掉, 由于該處理器還沒有完成對(duì)該塊的寫操作,它需要重發(fā)對(duì)該數(shù)據(jù)塊的寫失效請(qǐng)求。這樣所 有的請(qǐng)求者都可以得到數(shù)據(jù),但是都無(wú)法完成對(duì)它的寫操作。可見該活鎖情況同樣是由于多個(gè)處理器間閉合的環(huán)形依賴關(guān)系造成的。
發(fā)明內(nèi)容
本發(fā)明的一目的在于提供一種片上多核處理器系統(tǒng)的高速緩存一致性協(xié)議的實(shí) 現(xiàn)方法,用于解決現(xiàn)有基于環(huán)的偵聽協(xié)議中的重發(fā)應(yīng)答機(jī)制及該機(jī)制所帶來(lái)的系統(tǒng)性能降 低、功耗較大和帶寬消耗較多,不必要的偵聽操作以及所出現(xiàn)的死鎖或者活鎖等情況。為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種片上多核處理器系統(tǒng)的高速緩存一致性協(xié)議 的實(shí)現(xiàn)方法,所述片上多核處理器系統(tǒng)為基于單向分槽環(huán)的處理器系統(tǒng),其特征在于,包 括步驟一,將高速緩存劃分為一級(jí)Cache、二級(jí)Cache,該一級(jí)Cache為處理器系統(tǒng)中 的各處理器私有,該二級(jí)Cache為各處理器共享,并分布于各處理器,將所述單向分槽環(huán)設(shè) 置于該一級(jí)Cache、該二級(jí)Cache之間,并與各處理器、該一級(jí)Cache、該二級(jí)Cache連接;所 述單向分槽環(huán)包括數(shù)據(jù)信息環(huán)和請(qǐng)求信息環(huán),所述數(shù)據(jù)信息環(huán)用于傳遞數(shù)據(jù)信息槽,所述 請(qǐng)求信息環(huán)用于傳遞各處理器的失效請(qǐng)求信息槽;
步驟二,各處理器訪問(wèn)其私有的一級(jí)cache,訪問(wèn)失效時(shí)產(chǎn)生失效請(qǐng)求信息槽,并 發(fā)送到所述請(qǐng)求信息環(huán)上,由所述請(qǐng)求信息環(huán)傳遞給其他處理器進(jìn)行偵聽;步驟三,數(shù)據(jù)提供者偵聽到失效請(qǐng)求后產(chǎn)生數(shù)據(jù)信息槽,并發(fā)送到所述數(shù)據(jù)信息 環(huán)上,由所述數(shù)據(jù)信息環(huán)傳遞給請(qǐng)求者,當(dāng)處理器系統(tǒng)中同時(shí)有多個(gè)請(qǐng)求者,則這些請(qǐng)求者 按照距離數(shù)據(jù)提供者的遠(yuǎn)近順序,由近到遠(yuǎn)依次接收數(shù)據(jù)塊,完成對(duì)應(yīng)的訪存操作,并將數(shù) 據(jù)塊傳給下一個(gè)請(qǐng)求者,最終所有的請(qǐng)求者都能得到數(shù)據(jù)塊并完成其訪存操作;當(dāng)處理器 系統(tǒng)中同時(shí)僅有一個(gè)請(qǐng)求者,則由該請(qǐng)求者接收數(shù)據(jù)塊,完成對(duì)應(yīng)的訪存操作。所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述步驟二中,包括各處理器對(duì) 失效請(qǐng)求信息槽進(jìn)行偵聽時(shí)需要對(duì)槽中的各域進(jìn)行設(shè)置,具體為在所述失效請(qǐng)求信息槽中加入第一域、第二域和第三域;該第一域用于告知數(shù)據(jù)提供者是否需要提供數(shù)據(jù),在失效請(qǐng)求信息槽發(fā)出時(shí)該第 一域置為0 ;該第二域用于在所述失效請(qǐng)求信息槽返回請(qǐng)求者時(shí)告知請(qǐng)求者是否可以安全地 對(duì)得到的數(shù)據(jù)塊進(jìn)行寫操作,在失效請(qǐng)求信息槽發(fā)出時(shí)該第二域置為0 ;該第三域用于表示所述失效請(qǐng)求信息槽發(fā)出時(shí)按照發(fā)出該槽的請(qǐng)求者處理器的 程序順序,在請(qǐng)求者對(duì)該請(qǐng)求塊的操作之前是否有該請(qǐng)求者的其他失效請(qǐng)求塊的操作未完 成,如果有,則該第三域置為1,否則該第三域置為0 ;在處理器對(duì)讀失效請(qǐng)求信息槽進(jìn)行偵聽時(shí),若該處理器對(duì)該失效請(qǐng)求信息槽所請(qǐng) 求的數(shù)據(jù)塊發(fā)出讀失效請(qǐng)求,且還未得到該數(shù)據(jù)塊,則該處理器對(duì)該第一域置為1 ;在處理器對(duì)寫失效請(qǐng)求信息槽進(jìn)行偵聽時(shí),若該寫失效請(qǐng)求信息槽已經(jīng)過(guò)數(shù)據(jù)提 供者,且該處理器發(fā)出對(duì)該寫失效請(qǐng)求信息槽所請(qǐng)求數(shù)據(jù)塊的寫失效請(qǐng)求,且該處理器已 經(jīng)得到該數(shù)據(jù)塊,但還未完成寫操作,則該處理器對(duì)該第二域置為1。所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述步驟二中,包括若該第一域已置位,則該第一域所在請(qǐng)求信息槽到達(dá)數(shù)據(jù)提供者時(shí),數(shù)據(jù)提供者 不需要提供數(shù)據(jù),若該第一域未置位,則數(shù)據(jù)提供者需要提供數(shù)據(jù)。
所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述步驟二中,包括若該第二域已置位,則請(qǐng)求者獲知其他處理器也得到該同一數(shù)據(jù)塊且準(zhǔn)備進(jìn)行寫 操作,并等待其他處理器完成操作傳來(lái)新的數(shù)據(jù),對(duì)該新的數(shù)據(jù)進(jìn)行寫操作,若該第二域未 置位,請(qǐng)求者對(duì)該同一數(shù)據(jù)塊進(jìn)行寫操作。所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述步驟二中,包括當(dāng)所述失效請(qǐng)求為讀失效請(qǐng)求時(shí),若對(duì)該一級(jí)Cache、該二級(jí)Cache的偵聽結(jié)果表 明該讀失效請(qǐng)求的數(shù)據(jù)塊是M態(tài)時(shí),接收到該讀失效請(qǐng)求的處理器不再對(duì)該一級(jí)Cache和 該二級(jí)Cache進(jìn)行偵聽,若對(duì)該一級(jí)Cache的偵聽結(jié)果表明該讀失效請(qǐng)求的數(shù)據(jù)塊是S態(tài) 時(shí),僅對(duì)該二級(jí)Cache進(jìn)行偵聽。所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述步驟二中,包括當(dāng)所述失效請(qǐng)求為寫失效請(qǐng)求時(shí),若對(duì)該一級(jí)Cache、該二級(jí)Cache的偵聽結(jié)果表 明該寫失效請(qǐng)求的數(shù)據(jù)塊是M態(tài)時(shí),接收到該寫失效請(qǐng)求的處理器不再對(duì)該一級(jí)Cache和 該二級(jí)Cache進(jìn)行偵聽,若對(duì)該一級(jí)Cache的偵聽結(jié)果表明該寫失效請(qǐng)求的數(shù)據(jù)塊是S態(tài) 時(shí),對(duì)該一級(jí)Cache、該二級(jí)Cache繼續(xù)進(jìn)行偵聽。所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述步驟二中,包括 當(dāng)一處理器獲得一個(gè)M態(tài)的數(shù)據(jù)塊且未完成對(duì)該數(shù)據(jù)塊的寫操作,并偵聽到其他 處理器對(duì)該數(shù)據(jù)塊的失效請(qǐng)求時(shí),該處理器作為數(shù)據(jù)提供者按照其程序順序判斷在對(duì)該M 態(tài)的數(shù)據(jù)塊的寫操作之前是否有對(duì)其他還未得到的失效數(shù)據(jù)塊的未完成操作若有,則需要根據(jù)該第三域判斷,按照請(qǐng)求者的程序順序,在請(qǐng)求者對(duì)該請(qǐng)求塊的 操作之前是否有該請(qǐng)求者的其他失效請(qǐng)求塊的操作未完成,若該第三域表明有,則請(qǐng)求者 需要等待數(shù)據(jù)提供者,數(shù)據(jù)提供者不用立刻提供數(shù)據(jù),若該第三域表明沒有,則數(shù)據(jù)提供者 立刻向請(qǐng)求者提供數(shù)據(jù),并等待請(qǐng)求者完成對(duì)該數(shù)據(jù)塊的操作后再將該數(shù)據(jù)塊傳回,再完 成未完成的操作;若無(wú),則不需要根據(jù)該第三域判斷在請(qǐng)求者對(duì)該請(qǐng)求塊的操作之前是否有該請(qǐng)求 者的其他失效請(qǐng)求塊的操作未完成,等待自己的寫操作完成后才向請(qǐng)求者提供該數(shù)據(jù)塊。所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述步驟三中,包括在所述數(shù)據(jù)信息槽中加入用于表示目的處理器的第四域,用于當(dāng)請(qǐng)求者在得到數(shù) 據(jù)塊時(shí)根據(jù)該第四域判斷是否需要將該數(shù)據(jù)塊發(fā)送回所述數(shù)據(jù)信息環(huán)繼續(xù)傳播。所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述失效請(qǐng)求信息槽的信息包括 消息類型、請(qǐng)求者ID、數(shù)據(jù)塊的地址、一級(jí)Cache偵聽結(jié)果、二級(jí)Cache偵聽結(jié)果、第一域、第 二域以及第三域;所述數(shù)據(jù)信息槽的信息包括消息類型、請(qǐng)求者ID、數(shù)據(jù)塊的地址、數(shù)據(jù) 塊和目的處理器。所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其中,所述數(shù)據(jù)塊的基本狀態(tài)包括:M、S 禾口 I,暫時(shí)狀態(tài)包括IS、IM、SM、IMT和IMTT。與現(xiàn)有技術(shù)相比,本發(fā)明的有益技術(shù)效果在于本發(fā)明針對(duì)已有的基于單向分槽環(huán)的偵聽協(xié)議存在的上述功耗、帶寬、性能和穩(wěn) 定性方面的問(wèn)題,提出了基于單向分槽環(huán)連接片上多核處理器(CMP)的Cache—致性協(xié)議, 稱為偵聽順序環(huán)的協(xié)議的實(shí)現(xiàn)方法。該協(xié)議利用環(huán)的順序性來(lái)為沖突的失效請(qǐng)求排序,避 免使用已有基于環(huán)的偵聽協(xié)議中的重發(fā)應(yīng)答機(jī)制及該機(jī)制所帶來(lái)的系統(tǒng)性能、功耗和帶寬方面的問(wèn)題;同時(shí)該協(xié)議利用環(huán)的順序性避免了大量的不必要偵聽操作,降低了功耗;該 協(xié)議還使用了靈活的偵聽策略以避免可能的死鎖或者活鎖等情況,提高了系統(tǒng)的穩(wěn)定性。本發(fā)明相對(duì)于已有的基于環(huán)的偵聽協(xié)議可以有效提高系統(tǒng)的性能,降低功耗和帶 寬使用,避免饑餓、死鎖和活鎖情況的出現(xiàn),提高系統(tǒng)的穩(wěn)定性。
圖1是MSI協(xié)議狀態(tài)轉(zhuǎn)換圖;圖2是單向分槽環(huán)示意圖;圖3是基于單向分槽環(huán)的偵聽協(xié)議狀態(tài)轉(zhuǎn)換圖;圖4是基于單向分槽環(huán)的偵聽協(xié)議中同時(shí)有兩個(gè)沖突寫失效的情況描述圖;圖5是死鎖情況描述圖;圖6是活鎖情況描述圖;圖7是本發(fā)明的八處理器核單向分槽環(huán)連接CMP結(jié)構(gòu)圖;圖8是本發(fā)明的偵聽順序環(huán)協(xié)議中同時(shí)有兩個(gè)沖突寫失效的情況描述圖;圖9是本發(fā)明的home節(jié)點(diǎn)如何決定給哪些請(qǐng)求者提供數(shù)據(jù)方法示例圖;圖10是本發(fā)明的避免多個(gè)處理器同時(shí)進(jìn)行寫操作的方法示例圖。
具體實(shí)施例方式以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述,但不作為對(duì)本發(fā)明的限定。如圖7所示,為八處理器核單向分槽環(huán)連接CMP結(jié)構(gòu)圖。該結(jié)構(gòu)為協(xié)議實(shí)施時(shí)所 使用的單向分槽環(huán)連接片上多核處理器結(jié)構(gòu),圖7中,以8個(gè)處理器核組成的CMP為例來(lái)說(shuō) 明該結(jié)構(gòu),Pl到P8表示8個(gè)處理器,Cache分為兩級(jí)結(jié)構(gòu),分別是一級(jí)Cache (Li)和二級(jí) Cache (L2)。Ll分成指令Cache (LlI)和數(shù)據(jù)Cache (LlD),對(duì)于各處理器私有。L2物理上分 布于所有的處理器,邏輯上由各處理器共享。單向分槽環(huán)包括請(qǐng)求信息環(huán)和數(shù)據(jù)信息環(huán),分 別用于傳遞數(shù)據(jù)信息槽和各處理器的失效訪存請(qǐng)求信息槽,位于Ll和L2之間,連接各處理 器核與Li、L2。各處理器訪問(wèn)其私有的一級(jí)cache,如處理器在訪問(wèn)Ll失效時(shí)產(chǎn)生失效請(qǐng) 求信息槽,發(fā)送到請(qǐng)求信息環(huán)上,傳遞給其他處理器進(jìn)行偵聽。數(shù)據(jù)提供者偵聽到請(qǐng)求后產(chǎn) 生數(shù)據(jù)信息槽,發(fā)送到數(shù)據(jù)信息環(huán)上,傳遞給請(qǐng)求者。請(qǐng)求者得到數(shù)據(jù),完成對(duì)應(yīng)的訪存操 作。請(qǐng)求信息槽包括失效請(qǐng)求信息槽和二級(jí)cache替換M態(tài)數(shù)據(jù)塊時(shí)產(chǎn)生的無(wú)效請(qǐng)求 信息槽等;請(qǐng)求信息包括失效請(qǐng)求信息和二級(jí)cache替換M態(tài)數(shù)據(jù)時(shí)產(chǎn)生的無(wú)效請(qǐng)求信息; 數(shù)據(jù)塊是指數(shù)據(jù)在cache中以cache塊為單位進(jìn)行存放。在失效請(qǐng)求信息槽中加入第一域、第二域和第三域。第一域,用于告知數(shù)據(jù)提供者是否需要提供數(shù)據(jù),在失效請(qǐng)求信息槽發(fā)出時(shí)第一 域置為0 ;第二域,用于在失效請(qǐng)求信息槽返回請(qǐng)求者時(shí)告知請(qǐng)求者是否可以安全地對(duì)得到 的數(shù)據(jù)塊進(jìn)行寫操作,在失效請(qǐng)求信息槽發(fā)出時(shí)第二域置為0 ;第三域,用于表示失效請(qǐng)求信息槽發(fā)出時(shí)按照發(fā)出該槽的請(qǐng)求者處理器的程序順 序,在請(qǐng)求者對(duì)該請(qǐng)求塊的操作之前是否有該請(qǐng)求者的其他失效請(qǐng)求塊的操作未完成,如果有,則第三域置為1,否則第三域置為O ;在處理器對(duì)讀失效請(qǐng)求信息槽進(jìn)行偵聽時(shí),若該處理器對(duì)該失效請(qǐng)求信息槽所請(qǐng) 求的數(shù)據(jù)塊發(fā)出讀失效請(qǐng)求,且還未得到該數(shù)據(jù)塊,則該處理器對(duì)第一域置為1 ;在處理器對(duì)寫失效請(qǐng)求信息槽進(jìn)行偵聽時(shí),若該寫失效請(qǐng)求信息槽已經(jīng)過(guò)數(shù)據(jù)提 供者,且該處理器發(fā)出對(duì)該寫失效請(qǐng)求信息槽所請(qǐng)求數(shù)據(jù)塊的寫失效請(qǐng)求,且該處理器已 經(jīng)得到該數(shù)據(jù)塊,但還未完成寫操作,則該處理器對(duì)第二域置為1。利用環(huán)的順序性為沖突的失效請(qǐng)求排序的方法為在偵聽順序環(huán)協(xié)議中,任意時(shí) 刻對(duì)于任意地址數(shù)據(jù)塊的失效請(qǐng)求,只有一個(gè)數(shù)據(jù)提供者。數(shù)據(jù)提供者偵聽到失效請(qǐng)求后, 將數(shù)據(jù)塊發(fā)到環(huán)上,然后數(shù)據(jù)塊在環(huán)上單向傳遞。距離提供者最近的請(qǐng)求者先得到數(shù)據(jù),在 完成對(duì)該數(shù)據(jù)塊的操作后,將數(shù)據(jù)塊再發(fā)到環(huán)上,繼續(xù)向下一個(gè)請(qǐng)求者傳遞。這樣數(shù)據(jù)將按 照請(qǐng)求者距離數(shù)據(jù)提供者的遠(yuǎn)近順序依次到達(dá)各請(qǐng)求者,各請(qǐng)求者可以依次完成對(duì)數(shù)據(jù)的 操作。當(dāng)數(shù)據(jù)到達(dá)最遠(yuǎn)的請(qǐng)求者時(shí),所有的請(qǐng)求者都得到了數(shù)據(jù),且完成了對(duì)應(yīng)的操作,都 不需要進(jìn)行重發(fā)操作。
如圖8所示,是以同時(shí)出現(xiàn)對(duì)一個(gè)S態(tài)數(shù)據(jù)塊的兩個(gè)沖突寫失效情況為例,來(lái)說(shuō)明 上述解決沖突的方法。圖中(a)表示P9和P12同時(shí)發(fā)出寫失效請(qǐng)求,所請(qǐng)求塊為S態(tài),home 是P6,P3的Ll中有該請(qǐng)求塊。(b)表示P12的寫失效先經(jīng)過(guò)了 P3,將其Ll中的該塊置為 無(wú)效,然后到達(dá)了 home P6。(c)表示home P6的對(duì)P12的寫請(qǐng)求提供數(shù)據(jù),且將數(shù)據(jù)的目 的域置為P12,并將home中的對(duì)應(yīng)塊的狀態(tài)改為M,然后應(yīng)答數(shù)據(jù)先到達(dá)了 P9,P9從環(huán)上取 下該數(shù)據(jù),等待自己的寫失效請(qǐng)求返回后,利用對(duì)P12的應(yīng)答數(shù)據(jù)完成寫操作。(d)表示P9 然后將寫過(guò)的塊無(wú)效的同時(shí)再發(fā)給P12,P12收到數(shù)據(jù),完成寫操作。這樣home P6提供的 數(shù)據(jù)先后滿足了 P9和P12發(fā)出的兩個(gè)沖突寫失效請(qǐng)求,避免了重發(fā)。Home節(jié)點(diǎn)是指數(shù)據(jù)塊按照地址映射的二級(jí)cache所分布于的處理器節(jié)點(diǎn),目的處 理器是指數(shù)據(jù)信息槽中用于表示該數(shù)據(jù)所要傳遞到的最遠(yuǎn)處理器。實(shí)現(xiàn)上述機(jī)制需要解決下面兩個(gè)問(wèn)題。第一個(gè)問(wèn)題是,當(dāng)處于S態(tài)的數(shù)據(jù)有多個(gè) 請(qǐng)求時(shí),home節(jié)點(diǎn)如何決定給哪些請(qǐng)求者提供數(shù)據(jù),以達(dá)到在使所有請(qǐng)求者得到數(shù)據(jù)的同 時(shí),產(chǎn)生最少的數(shù)據(jù)傳遞,降低功耗的目的。第二個(gè)問(wèn)題是,當(dāng)同時(shí)有同一數(shù)據(jù)塊的多個(gè)數(shù) 據(jù)槽在環(huán)上傳遞時(shí),分別遇到了對(duì)該數(shù)據(jù)塊發(fā)出了寫失效請(qǐng)求的多個(gè)處理器,這些處理器 將都能得到該數(shù)據(jù)塊的M態(tài),并同時(shí)對(duì)該塊進(jìn)行寫操作。這顯然是一種違反了 Cache —致 性的情況,需要采取適當(dāng)?shù)姆椒▉?lái)避免其發(fā)生。如圖9所示,是以處理器P9和P12同時(shí)發(fā)出兩個(gè)對(duì)同一數(shù)據(jù)塊的讀失效請(qǐng)求為 例,表示了對(duì)上述問(wèn)題一的解決方法。通過(guò)在請(qǐng)求信息槽中加入一個(gè)域(即上述第一域) 來(lái)告訴home節(jié)點(diǎn)是否需要提供數(shù)據(jù),在失效請(qǐng)求信息槽發(fā)出時(shí)該域置為0。該域在請(qǐng)求信 息槽經(jīng)過(guò)下述情況的處理器時(shí)置位。這種情況是,處理器已經(jīng)對(duì)相同的數(shù)據(jù)塊發(fā)出讀失效 請(qǐng)求,但是還沒有得到數(shù)據(jù),如圖9中P9的讀失效請(qǐng)求經(jīng)過(guò)P12時(shí),P9的失效請(qǐng)求的對(duì)應(yīng) 域置位。home節(jié)點(diǎn)在偵聽請(qǐng)求信息槽時(shí)如果該域置位,表明home已經(jīng)給距離home相對(duì)于 當(dāng)前的請(qǐng)求者(P9)更遠(yuǎn)的請(qǐng)求者(P12)提供了數(shù)據(jù),該數(shù)據(jù)將會(huì)經(jīng)過(guò)當(dāng)前請(qǐng)求者,home不 需要再提供數(shù)據(jù)。如果該域未置位,home將提供數(shù)據(jù)。其中,“passread without data”是 請(qǐng)求信息槽中的一個(gè)域,用于表示該請(qǐng)求信息槽是否經(jīng)過(guò)了沒有得到數(shù)據(jù)應(yīng)答的發(fā)出了對(duì) 同一數(shù)據(jù)塊的讀失效請(qǐng)求的請(qǐng)求者。
圖9中,(a)表示P9和P12同時(shí)對(duì)某數(shù)據(jù)塊發(fā)出了讀失效請(qǐng)求,該數(shù)據(jù)塊處于S 態(tài),其home節(jié)點(diǎn)是P6,P3的一級(jí)cache中有S態(tài)的該數(shù)據(jù)塊。(b)表示P9的失效請(qǐng)求經(jīng) 過(guò)了 P12,由于P12對(duì)同一數(shù)據(jù)塊發(fā)出了讀失效請(qǐng)求并且還沒有得到該數(shù)據(jù)塊,所以P9的 讀失效請(qǐng)求中的pass read without data域置“ 1 ”,與此同時(shí)P12的讀失效請(qǐng)求也經(jīng)過(guò)了 P3。(c)表示P12和P9的讀失效請(qǐng)求先后到達(dá)了 home節(jié)點(diǎn)P6,由于P12的讀失效請(qǐng)求中的 pass read withoutdata域?yàn)椤?”,P6的二級(jí)cache對(duì)該請(qǐng)求提供數(shù)據(jù)信息槽,并將槽中的 目的域設(shè)置為P12 ;P9的讀失效請(qǐng)求到達(dá)P6時(shí),其pass read without data域?yàn)椤?”,所以 home不對(duì)該請(qǐng)求提供數(shù)據(jù)應(yīng)答;P6所提供的數(shù)據(jù)信息槽首先到達(dá)P9,P9取得數(shù)據(jù)槽,將對(duì) 應(yīng)數(shù)據(jù)塊替換入自己的一級(jí)cache中置為S態(tài),并完成讀操作;由于槽的目的域?yàn)镻12,且 P12將要對(duì)該數(shù)據(jù)塊進(jìn)行讀操作,P9繼續(xù)將該數(shù)據(jù)信息槽在環(huán)上向后傳遞。(d)表示目的 域?yàn)镻12的數(shù)據(jù)信息槽最終到達(dá)了 P12,P12將對(duì)應(yīng)的數(shù)據(jù)塊替換入自己的一級(jí)cache中, 置為S態(tài),并完成讀操作。如圖10所示,是以處理器P9和P12同時(shí)發(fā)出了對(duì)同一數(shù)據(jù)塊的寫失效請(qǐng)求,并且 同時(shí)得到了該數(shù)據(jù)塊的情況為例,表示了對(duì)上述問(wèn)題二的解決方法。該方法是,在請(qǐng)求信息 槽中加入另一個(gè)域(即上述第二域),用于在該槽返回請(qǐng)求者時(shí)告訴它是否可以安全地對(duì) 得到的數(shù)據(jù)塊進(jìn)行寫操作,,在失效請(qǐng)求信息槽發(fā)出時(shí)該域置為0。該域在請(qǐng)求信息槽(圖 10中P12的請(qǐng)求信息槽)經(jīng)過(guò)下述情況的處理器時(shí)置位。該情況是,處理器(圖10中的 P9)得到了同一數(shù)據(jù)塊的M態(tài),且在環(huán)上位于home (P6)和請(qǐng)求者(P12)之間。請(qǐng)求者(P12) 必須等待自己發(fā)出的請(qǐng)求信息槽返回后,來(lái)檢查該域。如果該域置位,請(qǐng)求者(P12)知道有 其他處理器(P9)也得到了同一數(shù)據(jù)塊且準(zhǔn)備進(jìn)行寫操作,所以請(qǐng)求者必須等待其他處理 器完成操作后傳來(lái)新的數(shù)據(jù),然后才能進(jìn)行寫操作。如果該域未置位,請(qǐng)求者知道自己是唯 一的數(shù)據(jù)持有者,可以安全地進(jìn)行寫操作。通過(guò)該方法,不同處理器對(duì)同一數(shù)據(jù)塊的多個(gè) 寫操作按順序完成,同一數(shù)據(jù)塊的多個(gè)數(shù)據(jù)信息槽逐漸合并成一個(gè),Cache —致性得到了維 護(hù)。其中,“hold data copy”指處理器發(fā)出了對(duì)某數(shù)據(jù)塊的寫失效請(qǐng)求后,從環(huán)上得到了 該數(shù)據(jù)塊;“pass write hold data after home”是請(qǐng)求信息槽中的一個(gè)域,用于表示該請(qǐng) 求信息槽是否先后經(jīng)過(guò)了 home和位于home和發(fā)出該槽的處理器間的某個(gè)處理器,該處理 器對(duì)該槽所請(qǐng)求的數(shù)據(jù)塊也發(fā)出了寫失效請(qǐng)求,并且持有該數(shù)據(jù)塊,但是其寫失效請(qǐng)求還 未返回。圖10中,(a)表示處理器P9和P12在對(duì)處于S態(tài)、home在P6的某數(shù)據(jù)塊發(fā)出 了寫失效請(qǐng)求后,都持有了該數(shù)據(jù)塊的情況;(b)表示P12的寫失效請(qǐng)求首先經(jīng)過(guò)了 P3和 home (P6),P3的一級(jí)cache中的該數(shù)據(jù)塊狀態(tài)從S態(tài)轉(zhuǎn)變?yōu)闊o(wú)效,P6的二級(jí)cache中的數(shù) 據(jù)從S態(tài)轉(zhuǎn)變?yōu)镸態(tài);(c)表示P12的寫失效請(qǐng)求在經(jīng)過(guò)P9時(shí),因?yàn)樵撌д?qǐng)求先后經(jīng)過(guò) 了 home和P9,P9對(duì)同一數(shù)據(jù)塊發(fā)出的寫失效請(qǐng)求還未返回時(shí)持有了對(duì)應(yīng)的數(shù)據(jù)塊,所以對(duì) P12的寫失效請(qǐng)求槽中的pass write hold data after home域置“ 1”,該請(qǐng)求槽返回P12 后,P12根據(jù)該域決定需要等待P9完成寫操作后將對(duì)應(yīng)的數(shù)據(jù)塊傳給P12 ;(d)表示P9完成 對(duì)對(duì)應(yīng)數(shù)據(jù)塊的寫操作后,將數(shù)據(jù)再傳給P12,P12得到數(shù)據(jù)后完成對(duì)該數(shù)據(jù)塊的寫操作。環(huán)上的傳遞的數(shù)據(jù)信息需要有表示目的處理器的域(即 上述第三域),請(qǐng)求者在 得到數(shù)據(jù)時(shí)需要根據(jù)目的處理器域來(lái)判斷是否還需要再將數(shù)據(jù)發(fā)送回環(huán)上繼續(xù)傳播。該域 在數(shù)據(jù)提供者偵聽到對(duì)數(shù)據(jù)的失效請(qǐng)求時(shí)進(jìn)行更新,以便能將數(shù)據(jù)送到最遠(yuǎn)的請(qǐng)求者處理O利用環(huán)的順序性避免部分不必要偵聽操作的方法為利用Ll偵聽操作的低延時(shí) 特點(diǎn),將Ll的偵聽結(jié)果與L2的偵聽結(jié)果分開,隨著偵聽請(qǐng)求同時(shí)傳遞,使得隨后的節(jié)點(diǎn)根 據(jù)所傳來(lái)的前面節(jié)點(diǎn)的偵聽請(qǐng)求和結(jié)果,可以決定是否需要進(jìn)行偵聽操作,以減少不必要 的偵聽,降低功耗。根據(jù)不同的失效請(qǐng)求和所請(qǐng)求塊狀態(tài)具體分析如下。失效請(qǐng)求為讀失效(READ_SH)的情況下偵聽結(jié)果表明請(qǐng)求塊是M態(tài)時(shí),后面收到 該請(qǐng)求的處理器都不需要再進(jìn)行偵聽Ll和L2的操作;偵聽結(jié)果表明請(qǐng)求塊是S態(tài)時(shí),僅需 要偵聽L2,不用偵聽Li。失效請(qǐng)求為寫失效(READ_EX)的情況下偵聽結(jié)果表明請(qǐng)求塊是M態(tài)時(shí),隨后的處 理器不再偵聽Ll和L2 ;請(qǐng)求塊是S態(tài)時(shí),還需要繼續(xù)偵聽Ll和L2。避免死鎖或活鎖的方法為當(dāng)某個(gè)處理器獲得了一個(gè)M態(tài)數(shù)據(jù)塊,但還沒有完成 對(duì)該塊的寫操作,偵聽到其他處理器對(duì)該數(shù)據(jù)塊的失效請(qǐng)求時(shí),作為數(shù)據(jù)提供者,該處理器 根據(jù)自己的程序順序,判斷在對(duì)該M態(tài)數(shù)據(jù)的寫操作之前是否有對(duì)其他還未得到的失效數(shù) 據(jù)塊的未完成操作。如果有,它需要根據(jù)請(qǐng)求信息槽中的一個(gè)域(即如上第三域)來(lái)判斷, 按照請(qǐng)求者的程序順序,在請(qǐng)求者對(duì)請(qǐng)求塊的操作之前是否有該請(qǐng)求者的其他失效請(qǐng)求塊 的操作未完成。如果該域表明有,請(qǐng)求者需要等待數(shù)據(jù)提供者,提供者不用立刻提供數(shù)據(jù)。 如果該域表明沒有,數(shù)據(jù)提供者必須立刻向請(qǐng)求者提供數(shù)據(jù),然后等待請(qǐng)求者完成對(duì)該塊 的操作后再將數(shù)據(jù)傳回,再完成未完成的操作。如果數(shù)據(jù)提供者按照其程序順序,在未完成 寫操作的M態(tài)數(shù)據(jù)之前沒有其他操作,則該數(shù)據(jù)提供者不需要根 據(jù)請(qǐng)求信息槽中的該域來(lái) 判斷,它等待自己的寫操作完成后才向請(qǐng)求者提供該數(shù)據(jù)。該方法可以打破多個(gè)處理器之 間存在的閉合的環(huán)形依賴關(guān)系,有效地避免上述的死鎖和活鎖情況的發(fā)生。本發(fā)明提供的高速緩存一致性協(xié)議是一種MSI協(xié)議,數(shù)據(jù)塊的基本狀態(tài)包括M、S 和I三種,暫時(shí)狀態(tài)包括IS、IM、SM、IMT和IMTT等。協(xié)議信息、協(xié)議操作和協(xié)議狀態(tài)轉(zhuǎn)換 分別描述如下。協(xié)議需要傳遞的信息分為兩類。一類是請(qǐng)求信息,包括READ_SH、READ_EX、INV和 UPGRADE ;另一類是數(shù)據(jù)信息,包括ACK_DATA、WRITEBACK和INV_WRITEBACK。表1描述信息 的產(chǎn)生條件。表 1
請(qǐng)求信息_產(chǎn)生條件_
_4]READ—SH_ 讀失效_
READ—EX_寫失效_
權(quán)利要求
1.一種片上多核處理器系統(tǒng)的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,所述片上多核處理器 系統(tǒng)為基于單向分槽環(huán)的處理器系統(tǒng),其特征在于,包括步驟一,將高速緩存劃分為一級(jí)Cache、二級(jí)Cache,該一級(jí)Cache為處理器系統(tǒng)中的各 處理器私有,該二級(jí)Cache為各處理器共享,并分布于各處理器,將所述單向分槽環(huán)設(shè)置于 該一級(jí)Cache、該二級(jí)Cache之間,并與各處理器、該一級(jí)Cache、該二級(jí)Cache連接;所述單 向分槽環(huán)包括數(shù)據(jù)信息環(huán)和請(qǐng)求信息環(huán),所述數(shù)據(jù)信息環(huán)用于傳遞數(shù)據(jù)信息槽,所述請(qǐng)求 信息環(huán)用于傳遞各處理器的失效請(qǐng)求信息槽;步驟二,各處理器訪問(wèn)其私有的一級(jí)cache,訪問(wèn)失效時(shí)產(chǎn)生失效請(qǐng)求信息槽,并發(fā)送 到所述請(qǐng)求信息環(huán)上,由所述請(qǐng)求信息環(huán)傳遞給其他處理器進(jìn)行偵聽;步驟三,數(shù)據(jù)提供者偵聽到失效請(qǐng)求后產(chǎn)生數(shù)據(jù)信息槽,并發(fā)送到所述數(shù)據(jù)信息環(huán)上, 由所述數(shù)據(jù)信息環(huán)傳遞給請(qǐng)求者,當(dāng)處理器系統(tǒng)中同時(shí)有多個(gè)請(qǐng)求者,則這些請(qǐng)求者按照 距離數(shù)據(jù)提供者的遠(yuǎn)近順序,由近到遠(yuǎn)依次接收數(shù)據(jù)塊,完成對(duì)應(yīng)的訪存操作,并將數(shù)據(jù)塊 傳給下一個(gè)請(qǐng)求者,最終所有的請(qǐng)求者都能得到數(shù)據(jù)塊并完成其訪存操作;當(dāng)處理器系統(tǒng) 中同時(shí)僅有一個(gè)請(qǐng)求者,則由該請(qǐng)求者接收數(shù)據(jù)塊,完成對(duì)應(yīng)的訪存操作。
2.根據(jù)權(quán)利要求1所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所述步驟二 中,包括各處理器對(duì)失效請(qǐng)求信息槽進(jìn)行偵聽時(shí)需要對(duì)槽中的各域進(jìn)行設(shè)置,具體為在所述失效請(qǐng)求信息槽中加入第一域、第二域和第三域;該第一域用于告知數(shù)據(jù)提供者是否需要提供數(shù)據(jù),在失效請(qǐng)求信息槽發(fā)出時(shí)該第一域 置為0;該第二域用于在所述失效請(qǐng)求信息槽返回請(qǐng)求者時(shí)告知請(qǐng)求者是否可以安全地對(duì)得 到的數(shù)據(jù)塊進(jìn)行寫操作,在失效請(qǐng)求信息槽發(fā)出時(shí)該第二域置為0 ;該第三域用于表示所述失效請(qǐng)求信息槽發(fā)出時(shí)按照發(fā)出該槽的請(qǐng)求者處理器的程序 順序,在請(qǐng)求者對(duì)該請(qǐng)求塊的操作之前是否有該請(qǐng)求者的其他失效請(qǐng)求塊的操作未完成, 如果有,則該第三域置為1,否則該第三域置為0 ;在處理器對(duì)讀失效請(qǐng)求信息槽進(jìn)行偵聽時(shí),若該處理器對(duì)該失效請(qǐng)求信息槽所請(qǐng)求的 數(shù)據(jù)塊發(fā)出讀失效請(qǐng)求,且還未得到該數(shù)據(jù)塊,則該處理器對(duì)該第一域置為1 ;在處理器對(duì)寫失效請(qǐng)求信息槽進(jìn)行偵聽時(shí),若該寫失效請(qǐng)求信息槽已經(jīng)過(guò)數(shù)據(jù)提供 者,且該處理器發(fā)出對(duì)該寫失效請(qǐng)求信息槽所請(qǐng)求數(shù)據(jù)塊的寫失效請(qǐng)求,且該處理器已經(jīng) 得到該數(shù)據(jù)塊,但還未完成寫操作,則該處理器對(duì)該第二域置為1。
3.根據(jù)權(quán)利要求2所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所述步驟二 中,包括若該第一域已置位,則該第一域所在請(qǐng)求信息槽到達(dá)數(shù)據(jù)提供者時(shí),數(shù)據(jù)提供者不需 要提供數(shù)據(jù),若該第一域未置位,則數(shù)據(jù)提供者需要提供數(shù)據(jù)。
4.根據(jù)權(quán)利要求2所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所述步驟二 中,包括若該第二域已置位,則請(qǐng)求者獲知其他處理器也得到該同一數(shù)據(jù)塊且準(zhǔn)備進(jìn)行寫操 作,并等待其他處理器完成操作傳來(lái)新的數(shù)據(jù),對(duì)該新的數(shù)據(jù)進(jìn)行寫操作,若該第二域未置 位,請(qǐng)求者對(duì)該同一數(shù)據(jù)塊進(jìn)行寫操作。
5.根據(jù)權(quán)利要求1、2、3或4所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所述步驟二中,包括當(dāng)所述失效請(qǐng)求為讀失效請(qǐng)求時(shí),若對(duì)該一級(jí)Cache、該二級(jí)Cache的偵聽結(jié)果表明該 讀失效請(qǐng)求的數(shù)據(jù)塊是M態(tài)時(shí),接收到該讀失效請(qǐng)求的處理器不再對(duì)該一級(jí)Cache和該二 級(jí)Cache進(jìn)行偵聽,若對(duì)該一級(jí)Cache的偵聽結(jié)果表明該讀失效請(qǐng)求的數(shù)據(jù)塊是S態(tài)時(shí),僅 對(duì)該二級(jí)Cache進(jìn)行偵聽。
6.根據(jù)權(quán)利要求1、2、3或4所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所述 步驟二中,包括當(dāng)所述失效請(qǐng)求為寫失效請(qǐng)求時(shí),若對(duì)該一級(jí)Cache、該二級(jí)Cache的偵聽結(jié)果表明該 寫失效請(qǐng)求的數(shù)據(jù)塊是M態(tài)時(shí),接收到該寫失效請(qǐng)求的處理器不再對(duì)該一級(jí)Cache和該二 級(jí)Cache進(jìn)行偵聽,若對(duì)該一級(jí)Cache的偵聽結(jié)果表明該寫失效請(qǐng)求的數(shù)據(jù)塊是S態(tài)時(shí),對(duì) 該一級(jí)Cache、該二級(jí)Cache繼續(xù)進(jìn)行偵聽。
7.根據(jù)權(quán)利要求2、3或4所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所述步 驟二中,包括當(dāng)一處理器獲得一個(gè)M態(tài)的數(shù)據(jù)塊且未完成對(duì)該數(shù)據(jù)塊的寫操作,并偵聽到其他處理 器對(duì)該數(shù)據(jù)塊的失效請(qǐng)求時(shí),該處理器作為數(shù)據(jù)提供者按照其程序順序判斷在對(duì)該M態(tài)的 數(shù)據(jù)塊的寫操作之前是否有對(duì)其他還未得到的失效數(shù)據(jù)塊的未完成操作若有,則需要根據(jù)該第三域判斷,按照請(qǐng)求者的程序順序,在請(qǐng)求者對(duì)該請(qǐng)求塊的操作 之前是否有該請(qǐng)求者的其他失效請(qǐng)求塊的操作未完成,若該第三域表明有,則請(qǐng)求者需要 等待數(shù)據(jù)提供者,數(shù)據(jù)提供者不用立刻提供數(shù)據(jù),若該第三域表明沒有,則數(shù)據(jù)提供者立刻 向請(qǐng)求者提供數(shù)據(jù),并等待請(qǐng)求者完成對(duì)該數(shù)據(jù)塊的操作后再將該數(shù)據(jù)塊傳回,再完成未 完成的操作;若無(wú),則不需要根據(jù)該第三域判斷在請(qǐng)求者對(duì)該請(qǐng)求塊的操作之前是否有該請(qǐng)求者的 其他失效請(qǐng)求塊的操作未完成,等待自己的寫操作完成后才向請(qǐng)求者提供該數(shù)據(jù)塊。
8.根據(jù)權(quán)利要求1、2、3或4所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所述 步驟三中,包括在所述數(shù)據(jù)信息槽中加入用于表示目的處理器的第四域,用于當(dāng)請(qǐng)求者在得到數(shù)據(jù)塊 時(shí)根據(jù)該第四域判斷是否需要將該數(shù)據(jù)塊發(fā)送回所述數(shù)據(jù)信息環(huán)繼續(xù)傳播。
9.根據(jù)權(quán)利要求2、3或4所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所述 失效請(qǐng)求信息槽的信息包括消息類型、請(qǐng)求者ID、數(shù)據(jù)塊的地址、一級(jí)Cache偵聽結(jié)果、二 級(jí)Cache偵聽結(jié)果、第一域、第二域以及第三域;所述數(shù)據(jù)信息槽的信息包括消息類型、請(qǐng) 求者ID、數(shù)據(jù)塊的地址、數(shù)據(jù)塊和目的處理器。
10.根據(jù)權(quán)利要求1、2、3或4所述的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,其特征在于,所 述數(shù)據(jù)塊的基本狀態(tài)包括M、S和I,暫時(shí)狀態(tài)包括IS、IM、SM、IMT和IMTT。
全文摘要
本發(fā)明有關(guān)于一種片上多核處理器系統(tǒng)的高速緩存一致性協(xié)議的實(shí)現(xiàn)方法,包括步驟一,將高速緩存劃分為一級(jí)Cache、二級(jí)Cache,該一級(jí)Cache為處理器系統(tǒng)中的各處理器私有,該二級(jí)Cache為各處理器共享;步驟二,各處理器訪問(wèn)其私有的一級(jí)cache,訪問(wèn)失效時(shí)產(chǎn)生失效請(qǐng)求信息槽,并發(fā)送到所述請(qǐng)求信息環(huán)上,由所述請(qǐng)求信息環(huán)傳遞給其他處理器進(jìn)行偵聽;步驟三,數(shù)據(jù)提供者偵聽到失效請(qǐng)求后產(chǎn)生數(shù)據(jù)信息槽,并發(fā)送到所述數(shù)據(jù)信息環(huán)上,由所述數(shù)據(jù)信息環(huán)傳遞給請(qǐng)求者,該請(qǐng)求者接收數(shù)據(jù)塊,完成對(duì)應(yīng)的訪存操作。本發(fā)明有效提高系統(tǒng)的性能,降低功耗和帶寬使用,避免饑餓、死鎖和活鎖情況的出現(xiàn),提高系統(tǒng)的穩(wěn)定性。
文檔編號(hào)G06F15/167GK102103568SQ20111003291
公開日2011年6月22日 申請(qǐng)日期2011年1月30日 優(yōu)先權(quán)日2011年1月30日
發(fā)明者劉志勇, 曹非 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所