專利名稱:片內(nèi)多處理器局部cache一致性的雙環(huán)監(jiān)聽方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器設(shè)計中片內(nèi)多處理器之間局部cache一致性的解決方法,尤其是支持線程級前瞻執(zhí)行(Thread LevelSpeculation)的片內(nèi)多處理器結(jié)構(gòu)中局部cache之間數(shù)據(jù)一致性的解決方法。
背景技術(shù):
微電子技術(shù)和加工工藝的不斷發(fā)展,使得在單個芯片內(nèi)放置多個處理器成為提高芯片整體性能的一個重要途徑。局部cache的數(shù)據(jù)一致性(cache coherence)是傳統(tǒng)片外多處理器系統(tǒng)并行執(zhí)行必須解決的問題,但片內(nèi)多處理器在組成、結(jié)構(gòu)和通信能力等方面又具有很多新的特點(diǎn),因此局部cache一致性需要采用新的解決方法。傳統(tǒng)片外多處理器系統(tǒng)解決局部cache一致性的協(xié)議有以下兩類,如2000年高等教育出版社出版的《計算機(jī)體系結(jié)構(gòu)》一書中闡述的總線監(jiān)聽(snooping)協(xié)議和目錄(directory)協(xié)議,總線監(jiān)聽協(xié)議中每個cache除了包含物理存儲器中塊的數(shù)據(jù)拷貝之外,也保存著各個塊的共享狀態(tài)信息。Cache通常連在共享存儲器的總線上,各個cache控制器通過監(jiān)聽總線來判斷它們是否有總線上請求的數(shù)據(jù)塊,從而維護(hù)cache的數(shù)據(jù)一致性??偩€監(jiān)聽協(xié)議只能適用于處理器節(jié)點(diǎn)較少的通過總線相連的多處理器系統(tǒng)?;谀夸浀囊恢滦越鉀Q方法通過目錄結(jié)構(gòu)記錄進(jìn)入cache的每個數(shù)據(jù)塊的訪問狀態(tài)、該塊在各個處理器的共享狀態(tài)以及是否修改過的信息。通過處理器之間的內(nèi)部互聯(lián)網(wǎng)絡(luò)(Intra-Connection Network)發(fā)布信息,維護(hù)局部cache一致性。目錄可以分布在整個系統(tǒng)中,這種方法具有擴(kuò)展能力,能夠應(yīng)用于處理節(jié)點(diǎn)較多的系統(tǒng)。處理器間的維護(hù)局部cache一致性的信息傳遞和數(shù)據(jù)交換分別通過總線或內(nèi)部互聯(lián)網(wǎng)絡(luò)實(shí)現(xiàn),因此處理節(jié)點(diǎn)間總線或者網(wǎng)絡(luò)的帶寬是影響整個系統(tǒng)性能的關(guān)鍵因素。
在單個芯片上實(shí)現(xiàn)多處理器系統(tǒng),各個處理器之間的通信能力得到了很大的增強(qiáng),片外的cache一致性維護(hù)操作需要數(shù)十個甚至數(shù)百個時鐘周期(這里指CPU的時鐘周期)才能完成,集中在同一個芯片上實(shí)現(xiàn)可以將其縮短到幾個時鐘周期。當(dāng)前已經(jīng)存在的單芯片多處理器系統(tǒng)中,Stanford大學(xué)在http//www-hydra.stanford.edu/hydra.shtml網(wǎng)址公布的Hydra處理器模型中,采用類似總線監(jiān)聽協(xié)議的方法解決局部cache一致性的問題,但是總線監(jiān)聽的訪問量與處理節(jié)點(diǎn)個數(shù)的平方成正比;Illinois大學(xué)在http//www.cs.uiuc.edu公布的片內(nèi)多處理器模型中,采用類目錄的方法來解決cache之間的數(shù)據(jù)一致性問題,集中式的目錄存儲導(dǎo)致對該目錄的訪問成為瓶頸。
發(fā)明內(nèi)容
本發(fā)明的目的在于對現(xiàn)有技術(shù)中片內(nèi)多處理器間局部cache一致性方案進(jìn)行改進(jìn),解決訪問結(jié)點(diǎn)個數(shù)受限和局部cache一致性造成的訪問沖突等問題,利用片內(nèi)多處理器間通信高帶寬、延遲易于確定的特點(diǎn),采用一種雙環(huán)結(jié)構(gòu)解決片內(nèi)多處理器的局部cache一致性問題。
本發(fā)明的技術(shù)方案是其總體邏輯結(jié)構(gòu)包括多個處理器核CPU、cache、存儲器接口單元MIU,其cache分為一級指令cache、一級數(shù)據(jù)cache、二級cache,在各一級數(shù)據(jù)cache之間設(shè)計了一個轉(zhuǎn)發(fā)總線和一個雙環(huán)結(jié)構(gòu),同時增加專門的邏輯控制電路擴(kuò)展了一級cache控制器的功能。CPU分別通過單獨(dú)的總線與一級指令cache和一級數(shù)據(jù)cache相連接,它是處理的核心部件,通過一級指令和數(shù)據(jù)cache獲取指令和數(shù)據(jù),執(zhí)行程序;一級cache采用指令與數(shù)據(jù)相分離的哈佛結(jié)構(gòu),一級cache僅被它對應(yīng)的CPU訪問,CPU和它的一級cache構(gòu)成一個處理節(jié)點(diǎn);一級指令cache和數(shù)據(jù)cache的查找、替換、寫回操作通過cache控制器控制完成。各個處理節(jié)點(diǎn)的一級cache通過共同的總線與二級cache連接,該總線是處理節(jié)點(diǎn)向二級cache讀取指令,與二級cache進(jìn)行數(shù)據(jù)交換的通路。二級cache是混合結(jié)構(gòu),同時存儲指令和數(shù)據(jù),被所有處理節(jié)點(diǎn)共享使用,二級cache通過總線和存儲接口單元相連;存儲器接口單元MIU實(shí)現(xiàn)與片外主存儲系統(tǒng)的數(shù)據(jù)交換。在各一級數(shù)據(jù)cache之間設(shè)計一個轉(zhuǎn)發(fā)總線,連接在各個局部一級數(shù)據(jù)cache上,用來實(shí)現(xiàn)局部cache一致性操作中的數(shù)據(jù)傳送;轉(zhuǎn)發(fā)總線包括以下幾個部分源id——發(fā)送數(shù)據(jù)的線程邏輯id,其位數(shù)由節(jié)點(diǎn)的個數(shù)以2為底取對數(shù)決定,目的id——接受數(shù)據(jù)的線程邏輯id,位數(shù)與源id相同,地址域——要傳送的數(shù)據(jù)的地址,根據(jù)系統(tǒng)的尋址空間確定,數(shù)據(jù)域——傳送的數(shù)據(jù),寬度由系統(tǒng)的字長決定,使能、確認(rèn)和忙閑信號各1位——用于傳遞時的控制,同時設(shè)計了一個轉(zhuǎn)發(fā)仲裁邏輯解決訪問沖突。
在片內(nèi)各一級數(shù)據(jù)cache之間設(shè)計一個雙環(huán)結(jié)構(gòu),它由連接在一級數(shù)據(jù)cache之間的兩個相向傳播的單向環(huán)形消息通路構(gòu)成,用于傳遞各個節(jié)點(diǎn)的數(shù)據(jù)訪問信息。訪問的信息包括數(shù)據(jù)的地址和訪問者的邏輯標(biāo)識id,以消息形式在該結(jié)構(gòu)上傳播,每個時鐘周期前進(jìn)一個節(jié)點(diǎn),直至被接收或回收,根據(jù)這些信息對本節(jié)點(diǎn)擁有的新數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)、并通過CPU執(zhí)行補(bǔ)償代碼或重新運(yùn)行該線程解決本地節(jié)點(diǎn)的超前訪問,解決處理器間的cache一致性,輔助多處理器系統(tǒng)高效并發(fā)運(yùn)行;處理節(jié)點(diǎn)通過環(huán)形結(jié)構(gòu)串聯(lián)起來,每個處理節(jié)點(diǎn)運(yùn)行一個線程,各個線程之間也存在邏輯關(guān)系,按照先后依次運(yùn)行在環(huán)上的每個處理節(jié)點(diǎn),處理節(jié)點(diǎn)的排列和線程的分布形成一個順序的對應(yīng)關(guān)系;同時在處理節(jié)點(diǎn)一級cache控制器中增加專門的邏輯控制電路,使得該控制器除了完成CPU對cache進(jìn)行指令和數(shù)據(jù)訪問中的失效、寫回和替換的處理功能外,還通過雙環(huán)結(jié)構(gòu)發(fā)布自身所屬處理節(jié)點(diǎn)對于數(shù)據(jù)的訪問信息,并獲取和傳播其它節(jié)點(diǎn)對于數(shù)據(jù)的訪問情況,并借助轉(zhuǎn)發(fā)總線完成對局部cache一致性的維護(hù)。信息發(fā)布和新數(shù)據(jù)轉(zhuǎn)發(fā)及處理節(jié)點(diǎn)的運(yùn)行并行完成或者被訪問公共存儲器——二級cache的延遲所掩蓋,從而達(dá)到提高整個芯片性能的目的。目前國內(nèi)外尚無采用這種方法解決片內(nèi)多處理器局部cache一致性的報道。
本發(fā)明定義了六個名詞邏輯標(biāo)識id、雙環(huán)結(jié)構(gòu)、Load消息和Store消息、轉(zhuǎn)發(fā)總線、cache標(biāo)志位、主處理節(jié)點(diǎn),它們的定義是(1)邏輯標(biāo)識id本發(fā)明中邏輯標(biāo)識id用于指明線程的邏輯順序,每個處理節(jié)點(diǎn)執(zhí)行一個線程,在系統(tǒng)的運(yùn)行過程中,線程按照邏輯順序依次運(yùn)行在由雙環(huán)結(jié)構(gòu)串聯(lián)起來的各個節(jié)點(diǎn)。
(2)雙環(huán)結(jié)構(gòu)本發(fā)明中用于交換對共享數(shù)據(jù)訪問信息的兩個相向傳播的單向環(huán)形結(jié)構(gòu),即L-ring和S-ring,分別用來傳遞Load和Store消息,訪問信息以消息形式在該結(jié)構(gòu)上傳播,每個時鐘周期前進(jìn)一個節(jié)點(diǎn)。
(3)Load消息和Store消息分別含有對于cache中數(shù)據(jù)的讀取和存儲情況的消息,通過雙環(huán)結(jié)構(gòu)進(jìn)行傳送,Load消息通過L-ring,Store消息通過S-ring。
(4)轉(zhuǎn)發(fā)總線位于各個處理節(jié)點(diǎn)一級數(shù)據(jù)cache之間,用于完成不同處理節(jié)點(diǎn)的一級數(shù)據(jù)cache之間共享數(shù)據(jù)的傳送。
(5)cache標(biāo)志位一級數(shù)據(jù)cache中的數(shù)據(jù)結(jié)構(gòu),標(biāo)識其中以數(shù)據(jù)塊或者以塊中的字為單位的數(shù)據(jù)狀態(tài)信息。
(6)主處理節(jié)點(diǎn)運(yùn)行邏輯順序最前的線程的處理節(jié)點(diǎn),其邏輯標(biāo)識id也最小。
本發(fā)明設(shè)計的load和Store兩種消息,其消息結(jié)構(gòu)中都擁有的部分是Th.id用于傳遞消息發(fā)起者的線程邏輯id;數(shù)據(jù)塊地址用于傳遞該消息所涉及的數(shù)據(jù)塊的地址;Wi表明消息感興趣的某個或者某幾個字。另外,Store消息中設(shè)計R位,用于傳遞發(fā)現(xiàn)了超前訪問的信息。
本發(fā)明對一級數(shù)據(jù)cache標(biāo)志位進(jìn)行了擴(kuò)展,原cache中一般設(shè)計有V和D位,以數(shù)據(jù)塊為單位進(jìn)行標(biāo)識,其中的V位為有效位,表明數(shù)據(jù)塊中的數(shù)據(jù)是否有效;D位表明數(shù)據(jù)塊中的數(shù)據(jù)有沒有被修改。本發(fā)明設(shè)計了RS位,表明在執(zhí)行新的線程時該數(shù)據(jù)塊是否需要設(shè)置為無效。U、L、S位以字為單位進(jìn)行標(biāo)識,U位表明本處理節(jié)點(diǎn)有沒有修改過該字,修改過則置1;L用于標(biāo)識本處理節(jié)點(diǎn)是否讀取過該字,在第一次讀取之前會發(fā)送Load消息,獲得最新數(shù)據(jù)后將L位設(shè)置為1,以后的讀取則不必發(fā)送Load消息;S位表明針對本節(jié)點(diǎn)的修改是否發(fā)送過Store消息,發(fā)送store消息是將其設(shè)置為1,當(dāng)該數(shù)據(jù)被其它節(jié)點(diǎn)讀取時,就會將它清除為0。
本發(fā)明一級cache控制器中增加了專門的邏輯控制電路后,一級cache控制器工作過程是1 CPU在執(zhí)行用戶程序時,對數(shù)據(jù)的讀取和寫回訪問都發(fā)送給本地處理節(jié)點(diǎn)的一級數(shù)據(jù)cache。該一級cache作如下的處理1.1訪問時命中cache,對于讀取(Load)操作,根據(jù)該數(shù)據(jù)塊中相應(yīng)字的L和U標(biāo)志位判斷本地節(jié)點(diǎn)是否讀取或修改過該數(shù)據(jù),判斷結(jié)果為真,則將數(shù)據(jù)傳送到本地處理器;否則通過L-ring向前驅(qū)節(jié)點(diǎn)發(fā)送Load消息,如果前驅(qū)節(jié)點(diǎn)中擁有更新的數(shù)據(jù),則通過轉(zhuǎn)發(fā)總線讀取新的數(shù)據(jù)到數(shù)據(jù)cache,如果沒有新的數(shù)據(jù)則不讀取轉(zhuǎn)發(fā)總線,最后將正確的數(shù)據(jù)傳送給處理器,同時設(shè)置L位;對于存儲(Store)操作,則將數(shù)據(jù)寫入一級cache,如果S位為0,通過S-ring向后繼節(jié)點(diǎn)的cache發(fā)送Store消息,并設(shè)置S位為1,否則不發(fā)送store消息,無論是否發(fā)送消息,數(shù)據(jù)寫入后CPU都將繼續(xù)執(zhí)行,即消息的發(fā)送與CPU運(yùn)行是并行的。
1.2訪問時如果發(fā)生cache失效,相應(yīng)的CPU暫停運(yùn)行。
1.2.1如果需要寫回,對于主處理節(jié)點(diǎn),將數(shù)據(jù)寫回二級cache;對于非主處理節(jié)點(diǎn),僅將數(shù)據(jù)緩沖,成為主處理節(jié)點(diǎn)后方能真正寫回;1.2.2不需要寫回或者寫回已經(jīng)完成,向二級cache發(fā)送讀請求,將數(shù)據(jù)所在的數(shù)據(jù)塊讀取到本處理節(jié)點(diǎn)的cache中,同時對于Load操作通過L-ring向前驅(qū)發(fā)送Load消息。對二級cache的讀取完成后,對于Load操作,根據(jù)Load消息的返回結(jié)果對數(shù)據(jù)塊進(jìn)行更新,而后發(fā)送給CPU使它繼續(xù)執(zhí)行,同時設(shè)置L位;對于Store操作,將數(shù)據(jù)存入剛讀進(jìn)的數(shù)據(jù)塊,CPU繼續(xù)執(zhí)行,同時通過S-ring向后繼節(jié)點(diǎn)發(fā)送Store消息并設(shè)置S位。
2 cache控制器收到消息時,根據(jù)消息的不同類型分別進(jìn)行處理2.1從L-ring上收到來自后繼節(jié)點(diǎn)的Load消息,根據(jù)消息中的地址信息,查找本地cache是否存在該數(shù)據(jù)的新拷貝,如果存在新的拷貝則通過轉(zhuǎn)發(fā)總線將其傳遞給相應(yīng)的處理節(jié)點(diǎn),同時清除cache中該數(shù)據(jù)的S位,否則對于主處理節(jié)點(diǎn)發(fā)送確認(rèn)信號給本消息的源節(jié)點(diǎn)表明各個處理節(jié)點(diǎn)都不存在新的數(shù)據(jù)拷貝,對于非主處理節(jié)點(diǎn)就將消息繼續(xù)向自身的前驅(qū)節(jié)點(diǎn)進(jìn)行傳遞。
2.2從S-ring上收到來自前驅(qū)節(jié)點(diǎn)的Store消息,根據(jù)源節(jié)點(diǎn)與本地節(jié)點(diǎn)的關(guān)系分別處理如下2.2.1如果本處理節(jié)點(diǎn)屬于該消息的后繼節(jié)點(diǎn),則根據(jù)消息中的地址信息,檢查cache的L位,判斷本處理節(jié)點(diǎn)是否讀取了該數(shù)據(jù)的舊拷貝,如果讀過則進(jìn)行必要的補(bǔ)救措施可以執(zhí)行一定的補(bǔ)償代碼,代碼通過編譯器設(shè)置或者重新執(zhí)行本地的線程,同時設(shè)置消息中的R位,而后將消息向后繼傳遞。如果沒有讀取過該數(shù)據(jù)的舊拷貝,如果U位為1,清除消息中對應(yīng)的W位,而后發(fā)送消息,否則直接轉(zhuǎn)發(fā)該消息到后繼節(jié)點(diǎn)。
2.2.2如果本處理節(jié)點(diǎn)屬于該消息的邏輯前驅(qū),則將消息向后繼節(jié)點(diǎn)傳遞,同時按照消息中的地址信息,檢查本地cache中是否存在該數(shù)據(jù)塊,如果有則設(shè)置RS位為1,表明本處理節(jié)點(diǎn)執(zhí)行新的線程時需要將該數(shù)據(jù)塊置為無效。
2.2.3如果該消息是由本節(jié)點(diǎn)發(fā)送,則回收該消息。
3 沖突解決和優(yōu)先級的設(shè)置環(huán)形結(jié)構(gòu)決定了系統(tǒng)中同類型的消息只能按順序傳送。如果出現(xiàn)沖突則優(yōu)先發(fā)送來自邏輯順序較前節(jié)點(diǎn)的消息,即對于L-ring上的處理是優(yōu)先發(fā)送本地的Load消息,緩沖來自后繼的Load消息;對于S-ring上的消息如果出現(xiàn)了沖突,比較邏輯順序,發(fā)送邏輯順序最前的消息,緩沖其他的消息。
4 如果處理節(jié)點(diǎn)的邏輯標(biāo)識id需要改變,設(shè)計實(shí)現(xiàn)時,設(shè)計者有兩種方法可以選擇先排空雙環(huán)結(jié)構(gòu)上的消息,再進(jìn)行邏輯順序號的改變;或者直接清除上面的消息,邏輯標(biāo)識id更新后再重新發(fā)送這些消息。
采用本發(fā)明設(shè)計的微處理器可以達(dá)到以下技術(shù)效果1)每個線程讀取新數(shù)據(jù)時,只需次第檢查它前面的節(jié)點(diǎn)是否存在新的拷貝,最先遇到的新拷貝數(shù)據(jù)就是最新的,消息傳遞距離短;當(dāng)它修改某個數(shù)據(jù)時,將消息發(fā)送給后繼節(jié)點(diǎn),消息發(fā)送與后續(xù)程序的執(zhí)行并行完成;通過收到的store消息,判斷是否進(jìn)行了超前的數(shù)據(jù)訪問,整個判斷執(zhí)行過程,硬件實(shí)現(xiàn)復(fù)雜度低,執(zhí)行效率高。
2)對于有N個處理節(jié)點(diǎn)的系統(tǒng),總線檢測方案會使每個處理節(jié)點(diǎn)會受到N-1個處理節(jié)點(diǎn)的打擾,本地CPU訪存將會受到很大的影響,本發(fā)明中消息依次向前(L-ring)和向后(S-ring)傳播,每個處理節(jié)點(diǎn)僅響應(yīng)來自兩個相鄰節(jié)點(diǎn)的消息,提高了對本地CPU的訪存效率,同時減少了總線監(jiān)聽方法所帶來的沖突。
3)本發(fā)明所提出的方案中,一級cache數(shù)據(jù)一致性維護(hù)操作可以被二級cache的訪問延遲所掩蓋或者與處理節(jié)點(diǎn)的工作并行完成,增加了操作并行性,提高了運(yùn)行效率。
本發(fā)明充分利用了芯片內(nèi)部潛在的通信能力,并使得訪問的沖突明顯降低,通過較少的硬件開銷(雙環(huán)結(jié)構(gòu)、轉(zhuǎn)發(fā)總線、cache控制器邏輯電路)解決了單芯片多處理器的局部cache一致性問題。
圖1采用總線監(jiān)聽協(xié)議的系統(tǒng)結(jié)構(gòu)2采用目錄協(xié)議的系統(tǒng)結(jié)構(gòu)3本發(fā)明的總體結(jié)構(gòu)4雙環(huán)結(jié)構(gòu)和轉(zhuǎn)發(fā)總線結(jié)構(gòu)5一級數(shù)據(jù)cache的標(biāo)志位結(jié)構(gòu)6Load和Store消息的結(jié)構(gòu)7cache命中時的處理流程8cache失效時的處理流程9收到消息時的處理流程圖
具體實(shí)施例方式圖1是采用總線監(jiān)聽協(xié)議的系統(tǒng)結(jié)構(gòu)圖,由CPU和cache組成的部分為處理節(jié)點(diǎn),通常情況下,二級cache也包含在節(jié)點(diǎn)內(nèi)部。各個處理節(jié)點(diǎn)共享存儲器,處理節(jié)點(diǎn)和存儲器通過總線進(jìn)行連接,各個處理節(jié)點(diǎn)的cache也通過監(jiān)聽總線上的操作完成數(shù)據(jù)一致性的維護(hù)。
圖2是采用目錄協(xié)議的系統(tǒng)結(jié)構(gòu)圖,CPU和cache組成處理節(jié)點(diǎn),二級cache也包含在節(jié)點(diǎn)內(nèi)部。存儲器和目錄分布在整個系統(tǒng)中,通過內(nèi)部互連網(wǎng)絡(luò)將它們連接起來,各個處理節(jié)點(diǎn)對數(shù)據(jù)的訪問情況由目錄進(jìn)行記錄,通過內(nèi)部互連網(wǎng)絡(luò)進(jìn)行傳遞。
圖3是本發(fā)明應(yīng)用在擁有4個處理器核的片內(nèi)并行處理體系結(jié)構(gòu)中的總體結(jié)構(gòu)圖。它由4個處理器核、4個一級cache及相應(yīng)控制器,二級cache,存儲接口單元MIU,數(shù)據(jù)總線,轉(zhuǎn)發(fā)總線和雙環(huán)結(jié)構(gòu)組成。
CPUi(i=0,1,2,3)為處理器核,一級cache采用指令與數(shù)據(jù)相分離的哈佛結(jié)構(gòu),L1/I和L1/D分別為指令和數(shù)據(jù)cache,CPUi分別通過單獨(dú)的總線與L1/I和L1/D相連接,獲取指令和數(shù)據(jù),CPU和相應(yīng)一級cache構(gòu)成一個處理節(jié)點(diǎn),圖中用虛線框表示;一級指令cache和數(shù)據(jù)cache的查找、替換、寫回操作通過cache控制器控制完成。各個處理節(jié)點(diǎn)的一級cache通過共同的總線與二級cache連接,該總線是處理節(jié)點(diǎn)向二級cache讀取指令,與二級cache進(jìn)行數(shù)據(jù)交換的通路。二級cache是混合結(jié)構(gòu),可以同時存儲指令和數(shù)據(jù),被所有的處理節(jié)點(diǎn)共享使用,二級cache通過總線和存儲接口單元相連;存儲器接口單元MIU實(shí)現(xiàn)與片外主存儲系統(tǒng)的數(shù)據(jù)交換。在各一級cache之間設(shè)計一個轉(zhuǎn)發(fā)總線,連接在各個局部一級數(shù)據(jù)cache上,用來實(shí)現(xiàn)局部cache一致性操作中的數(shù)據(jù)傳送。在片內(nèi)各處理器節(jié)點(diǎn)間設(shè)計一個雙環(huán)結(jié)構(gòu),它由連接在一級數(shù)據(jù)cache之間的兩個相向傳播的單向環(huán)形消息通路構(gòu)成,用于傳遞各個節(jié)點(diǎn)的數(shù)據(jù)訪問信息。
圖4是本發(fā)明應(yīng)用在擁有4個處理器核的片內(nèi)并行處理體系結(jié)構(gòu)中雙環(huán)結(jié)構(gòu)和轉(zhuǎn)發(fā)總線的結(jié)構(gòu)圖。兩個單向環(huán)相向地連接在一級數(shù)據(jù)cache之間完成存取數(shù)據(jù)信息的發(fā)布,順時針的為S-ring,逆時針的為L-ring,消息的傳播按照各自的方向依次經(jīng)過各個處理節(jié)點(diǎn)直至被接收或回收。每個一級數(shù)據(jù)cache通過專用的接口與轉(zhuǎn)發(fā)總線相連,其接口包括以下幾組信號線源id(2位)——發(fā)送數(shù)據(jù)的線程邏輯id、目的id(2位)——接受數(shù)據(jù)的線程邏輯id、地址域(32位)——要傳送的數(shù)據(jù)的地址、數(shù)據(jù)域(32位)——傳送的數(shù)據(jù)、使能(1位)、確認(rèn)(1位)和忙閑(1位)信號——用于傳遞時的控制,轉(zhuǎn)發(fā)總線將需要更新的數(shù)據(jù)從擁有新拷貝的節(jié)點(diǎn)傳遞到需要該數(shù)據(jù)的節(jié)點(diǎn),如果出現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)的沖突,源id小的數(shù)據(jù)優(yōu)先發(fā)送,該判斷由轉(zhuǎn)發(fā)仲裁邏輯實(shí)現(xiàn)。
圖5一級數(shù)據(jù)cache的標(biāo)志位結(jié)構(gòu)圖。V位和D位在一般的cache中都存在,以數(shù)據(jù)塊為單位進(jìn)行標(biāo)識,其中V位表明數(shù)據(jù)塊中的數(shù)據(jù)是否有效;D位表明數(shù)據(jù)塊中的數(shù)據(jù)有沒有被修改;RS位表明在執(zhí)行新的線程時該數(shù)據(jù)塊是否需要設(shè)置為無效。Ui、Li、Si(i=0,1,2,3)位以字為單位進(jìn)行標(biāo)識,U位表明本處理節(jié)點(diǎn)有沒有修改過該字,修改過則置1;L用于標(biāo)識本處理節(jié)點(diǎn)是否讀取過該字,在第一次讀取之前會發(fā)送Load消息,獲得最新數(shù)據(jù)后將L位設(shè)置為1,以后的讀取不再發(fā)送Load消息;S位表明針對本節(jié)點(diǎn)的修改是否發(fā)送過Store消息,發(fā)送store消息是將其設(shè)置為1,當(dāng)該數(shù)據(jù)被其它節(jié)點(diǎn)讀取時,就會將S清除為0。
圖6是Load和Store消息的結(jié)構(gòu)圖。其消息結(jié)構(gòu)中都擁有的部分是Th.id用于傳遞消息發(fā)起者的線程邏輯id;地址域用于傳遞該消息所涉及的數(shù)據(jù)塊的地址;Wi(i=0,1,2,3)表明消息感興趣的某個或者某幾個字;Store消息中R位用于傳遞發(fā)現(xiàn)了超前訪問的信息。Cache的控制器中設(shè)有專門的緩沖,當(dāng)消息的傳播出現(xiàn)沖突時,將沒有及時傳播的消息緩沖。
在采用了本發(fā)明的微處理器運(yùn)行加載的用戶程序時,工作過程是圖7是cache命中時的處理流程圖。本圖說明了CPU訪問本地數(shù)據(jù)cache命中時的處理流程,在實(shí)現(xiàn)中各種判斷是同時進(jìn)行。對于Load操作在一個周期內(nèi)同時判斷是否命中、Ui和Li是否為1以及是否主線程,Li或Ui為1、或者是主線程則下一個周期向CPU送數(shù)據(jù),否則發(fā)送load消息,收到返回信息或新數(shù)據(jù)后再向CPU傳送有效數(shù)據(jù)。對于Store操作,將數(shù)據(jù)寫入一級cache后,CPU即可繼續(xù)執(zhí)行;同時如Si位為0,通過S-ring向后繼節(jié)點(diǎn)的cache發(fā)送Store消息,并設(shè)置S位為1,否則不發(fā)送store消息;如果是主線程則將數(shù)據(jù)寫回二級cache。
圖8是cache訪問失效時的處理流程圖。對于Load失效,向二級cache發(fā)送讀取數(shù)據(jù)的請求,如果不是主線程則同時向前驅(qū)發(fā)送load消息,Load消息在訪問二級cache的同時發(fā)送,從而達(dá)到了掩蓋延遲的目的,如果前驅(qū)節(jié)點(diǎn)有最新的數(shù)據(jù),則將轉(zhuǎn)發(fā)總線上的數(shù)據(jù)和來自二級cache的數(shù)據(jù)合并,對于主線程僅讀取二級cache的數(shù)據(jù),寫入一級cache并發(fā)送給CPU。對于store失效,首先向二級cache讀取該數(shù)據(jù)所在的數(shù)據(jù)塊;讀取完成后,將新的數(shù)據(jù)寫入該塊,CPU繼續(xù)執(zhí)行,同時通過S-ring發(fā)送Store消息,對于主線程還要將新數(shù)據(jù)寫回二級cache。本發(fā)明中一級cache采用的是寫分配策略,另外,為了保持對數(shù)據(jù)的訪問信息,執(zhí)行的不是主線程的節(jié)點(diǎn)不能夠?qū)?shù)據(jù)寫回二級cache,為此引入了一定數(shù)量的寫緩沖,這里看作是cache一部分沒有進(jìn)行特殊的表示。
圖9是處理load消息和store消息的流程圖。對各種標(biāo)志位的查詢是并行完成的,整個的消息處理過程在一個周期內(nèi)實(shí)現(xiàn)。如果存在發(fā)送沖突,按照上面提到的沖突解決方法進(jìn)行解決。對于load消息,如果地址信息命中本地cache塊并且該數(shù)據(jù)對應(yīng)的Ui位為1,則通過轉(zhuǎn)發(fā)總線轉(zhuǎn)發(fā)該數(shù)據(jù),并清除本cache中該數(shù)據(jù)塊的Si位,清除消息中的Wi位,如果所有的4個Wi位均為0則清除該消息;如果本cache不存在該數(shù)據(jù)或Ui為0,則不轉(zhuǎn)發(fā)數(shù)據(jù),此時對于主線程發(fā)送確認(rèn)信號,其它線程繼續(xù)轉(zhuǎn)發(fā)消息。
對于store消息如果消息來自邏輯順序低的節(jié)點(diǎn),cache中存在該數(shù)據(jù)且Li位為1,如果讀過則進(jìn)行必要的補(bǔ)救措施可以執(zhí)行一定的補(bǔ)償代碼,代碼通過編譯器設(shè)置或者重新執(zhí)行本地的線程,同時設(shè)置消息中的R位,而后將消息向后繼傳遞。如果Li為0而Ui為1,則清除消息中對應(yīng)的Wi位,最后將消息發(fā)送到后繼節(jié)點(diǎn)。如果消息來自邏輯順序高的節(jié)點(diǎn),則將消息向后繼節(jié)點(diǎn)傳遞,同時如果本地cache中有該數(shù)據(jù)塊,則設(shè)置RS位為1。如果該消息是由本節(jié)點(diǎn)發(fā)送的,則回收該消息。
權(quán)利要求
1一種片內(nèi)多處理器局部cache一致性的雙環(huán)監(jiān)聽方法,其總體邏輯結(jié)構(gòu)包括多個處理器核CPU、cache、存儲器接口單元MIU,它們通過總線相連,CPU是處理的核心部件,CPU通過總線從cache獲取數(shù)據(jù)和指令,cache內(nèi)包含cache控制器、CPU對cache進(jìn)行指令和數(shù)據(jù)訪問中的失效、寫回和替換的處理功能通過cache控制器控制完成,由存儲器接口單元MIU實(shí)現(xiàn)與片外主存儲系統(tǒng)的數(shù)據(jù)交換,其特征在于其cache分為一級指令cache、一級數(shù)據(jù)cache、二級cache,在各一級數(shù)據(jù)cache之間設(shè)計了一個轉(zhuǎn)發(fā)總線和一個雙環(huán)結(jié)構(gòu),同時增加專門的邏輯控制電路擴(kuò)展了一級cache控制器的功能,并對一級數(shù)據(jù)cache標(biāo)志位進(jìn)行了擴(kuò)展,從而實(shí)現(xiàn)局部cache一致性操作,具體方法為1.1 CPU分別通過單獨(dú)的總線與一級指令cache和一級數(shù)據(jù)cache相連接,通過一級指令cache和數(shù)據(jù)cache獲取指令和數(shù)據(jù)、執(zhí)行程序;一級cache采用指令與數(shù)據(jù)相分離的哈佛結(jié)構(gòu),一級cache僅被它對應(yīng)的CPU訪問,CPU和它的一級cache構(gòu)成一個處理節(jié)點(diǎn);各個處理節(jié)點(diǎn)的一級cache通過共同的總線與二級cache連接,該總線是處理節(jié)點(diǎn)向二級cache讀取指令,與二級cache進(jìn)行數(shù)據(jù)交換的通路;二級cache是混合結(jié)構(gòu),同時存儲指令和數(shù)據(jù),被所有處理節(jié)點(diǎn)共享使用,二級cache通過總線和存儲接口單元MIU相連;1.2在各一級數(shù)據(jù)cache之間設(shè)計一個轉(zhuǎn)發(fā)總線,包括源id——發(fā)送數(shù)據(jù)的線程邏輯id,其位數(shù)由節(jié)點(diǎn)的個數(shù)以2為底取對數(shù)決定,目的id——接受數(shù)據(jù)的線程邏輯id,位數(shù)與源id相同,地址域——要傳送的數(shù)據(jù)的地址,根據(jù)系統(tǒng)的尋址空間確定,數(shù)據(jù)域——傳送的數(shù)據(jù),寬度由系統(tǒng)的字長決定,使能、確認(rèn)和忙閑信號各1位——用于傳遞時的控制;轉(zhuǎn)發(fā)總線連接在各個局部一級數(shù)據(jù)cache上,用于完成不同處理節(jié)點(diǎn)的一級數(shù)據(jù)cache之間共享數(shù)據(jù)的傳送,同時設(shè)計一個轉(zhuǎn)發(fā)仲裁邏輯依據(jù)源id解決訪問沖突;1.3在片內(nèi)各處理器節(jié)點(diǎn)間設(shè)計一個雙環(huán)結(jié)構(gòu),它由連接在一級數(shù)據(jù)cache之間的兩個相向傳播的單向環(huán)形消息通路L-ring和S-ring構(gòu)成,用于傳遞各個節(jié)點(diǎn)的數(shù)據(jù)訪問信息,訪問的信息包括數(shù)據(jù)的地址和訪問者的邏輯標(biāo)識id,以消息形式在該結(jié)構(gòu)上傳播,每個時鐘周期前進(jìn)一個節(jié)點(diǎn),直至被接收或回收,根據(jù)這些信息對本節(jié)點(diǎn)擁有的新數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)、并通過CPU執(zhí)行補(bǔ)償代碼或重新運(yùn)行該線程解決本地節(jié)點(diǎn)的超前訪問,解決處理器間的cache一致性,輔助多處理器系統(tǒng)高效并發(fā)運(yùn)行;L-ring傳遞Load消息,S-ring傳遞Store消息;處理節(jié)點(diǎn)通過環(huán)形結(jié)構(gòu)串聯(lián)起來,每個處理節(jié)點(diǎn)運(yùn)行一個線程,各個線程之間也存在邏輯關(guān)系,按照先后依次運(yùn)行在環(huán)上的每個處理節(jié)點(diǎn),處理節(jié)點(diǎn)的排列和線程的分布形成一個順序的對應(yīng)關(guān)系;1.4增加專門的邏輯控制電路來擴(kuò)展處理節(jié)點(diǎn)一級cache控制器的功能,使得該控制器除了完成CPU對cache進(jìn)行指令和數(shù)據(jù)訪問中的失效、寫回和替換的處理功能外,還通過雙環(huán)結(jié)構(gòu)發(fā)布自身所屬處理節(jié)點(diǎn)對于數(shù)據(jù)的訪問信息,獲取和傳播其它節(jié)點(diǎn)對于數(shù)據(jù)的訪問情況,并借助轉(zhuǎn)發(fā)總線完成對局部cache一致性的維護(hù);1.5對一級數(shù)據(jù)cache標(biāo)志位進(jìn)行擴(kuò)展保留一般cache中設(shè)計的V和D位,添加RS位,表明在執(zhí)行新的線程時該數(shù)據(jù)塊是否需要設(shè)置為無效;添加U、L、S位,以字為單位進(jìn)行標(biāo)識,U位表明本處理節(jié)點(diǎn)有沒有修改過該字,修改過則置1;L用于標(biāo)識本處理節(jié)點(diǎn)是否讀取過該字,在第一次讀取之前會發(fā)送Load消息,獲得最新數(shù)據(jù)后將L位設(shè)置為1,以后的讀取則不必發(fā)送Load消息;S位表明針對本節(jié)點(diǎn)的修改是否發(fā)送過Store消息,發(fā)送store消息是將其設(shè)置為1,當(dāng)該數(shù)據(jù)被其它節(jié)點(diǎn)讀取時,就將它清除為0。
2根據(jù)權(quán)利要求1所述的一種片內(nèi)多處理器局部cache一致性的雙環(huán)監(jiān)聽方法,其特征在于在一級cache控制器中增加所述邏輯控制電路后,一級cache控制器工作過程是2.1 CPU對數(shù)據(jù)的讀取和寫回訪問都發(fā)送給本地處理節(jié)點(diǎn)的一級數(shù)據(jù)cache,該一級cache作如下的處理2.1.1訪問時命中cache,對于讀取(Load)操作,根據(jù)該數(shù)據(jù)塊中相應(yīng)字的L和U標(biāo)志位判斷本地節(jié)點(diǎn)是否讀取或修改過該數(shù)據(jù),判斷結(jié)果為真,則將數(shù)據(jù)傳送到本地處理器;否則通過L-ring向前驅(qū)節(jié)點(diǎn)發(fā)送Load消息,如果前驅(qū)節(jié)點(diǎn)中擁有更新的數(shù)據(jù),則通過轉(zhuǎn)發(fā)總線讀取新的數(shù)據(jù)到數(shù)據(jù)cache,沒有新數(shù)據(jù)則不讀取轉(zhuǎn)發(fā)總線,最后將正確的數(shù)據(jù)傳送給處理器,同時設(shè)置L位;對于存儲(Store)操作,則將數(shù)據(jù)寫入一級cache,如果S位為0,通過S-ring向后繼節(jié)點(diǎn)的cache發(fā)送Store消息,并設(shè)置S位為1,否則不發(fā)送store消息,無論是否發(fā)送消息,數(shù)據(jù)寫入后CPU都繼續(xù)執(zhí)行,即消息的發(fā)送與CPU運(yùn)行是并行的;2.1.2訪問時如果發(fā)生cache失效,相應(yīng)CPU暫停;2.1.2.1如果需要寫回,對于主處理節(jié)點(diǎn),將數(shù)據(jù)寫回二級cache;對于非主處理節(jié)點(diǎn),僅將數(shù)據(jù)緩沖,成為主處理節(jié)點(diǎn)后方能真正寫回;2.1.2.2不需要寫回或者寫回已經(jīng)完成,向二級cache發(fā)送讀請求,將數(shù)據(jù)所在的數(shù)據(jù)塊讀取到本處理節(jié)點(diǎn)的cache,同時對于Load操作通過L-ring向前驅(qū)發(fā)送Load消息;從二級cache的讀取完成后,對于Load操作,根據(jù)Load消息的返回結(jié)果對數(shù)據(jù)塊進(jìn)行更新,而后發(fā)送給CPU使它繼續(xù)執(zhí)行,同時設(shè)置L位;對于Store操作,將數(shù)據(jù)存入剛讀進(jìn)的數(shù)據(jù)塊,CPU繼續(xù)執(zhí)行,同時通過S-ring向后繼節(jié)點(diǎn)發(fā)送Store消息并設(shè)置S位;2.2 cache控制器收到消息時,根據(jù)消息的不同類型分別進(jìn)行處理2.2.1從L-ring上收到來自后繼節(jié)點(diǎn)的Load消息,根據(jù)消息中的地址信息,查找本地的cache是否具有該數(shù)據(jù)的新拷貝,存在新的拷貝則通過轉(zhuǎn)發(fā)總線將新的數(shù)據(jù)拷貝傳遞給相應(yīng)的處理節(jié)點(diǎn),同時清除cache中該數(shù)據(jù)的S位,否則對于主處理節(jié)點(diǎn)發(fā)送確認(rèn)信號給本消息的源節(jié)點(diǎn)表明各個處理節(jié)點(diǎn)都不存在新的數(shù)據(jù)拷貝,對于非主處理節(jié)點(diǎn)就將消息繼續(xù)向自身的前驅(qū)節(jié)點(diǎn)進(jìn)行傳遞;2.2.2從S-ring上收到來自前驅(qū)節(jié)點(diǎn)的Store消息,根據(jù)源節(jié)點(diǎn)與本地節(jié)點(diǎn)的關(guān)系分別處理如下2.2.2.1如果本處理節(jié)點(diǎn)屬于該消息的后繼節(jié)點(diǎn),則根據(jù)消息中的地址信息,檢查cache的L位,判斷本處理節(jié)點(diǎn)是否讀取了該數(shù)據(jù)的舊拷貝,如果讀過則進(jìn)行必要的補(bǔ)救措施可以執(zhí)行一定的補(bǔ)償代碼,代碼通過編譯器設(shè)置或者重新執(zhí)行本地的線程,同時設(shè)置消息中的R位,而后將消息向后繼傳遞;如果沒有讀取過該數(shù)據(jù)的舊拷貝,如果U位為1,清除消息中對應(yīng)的W位,而后發(fā)送消息,否則直接轉(zhuǎn)發(fā)該消息到后繼節(jié)點(diǎn);2.2.2.2如果本處理節(jié)點(diǎn)屬于該消息的邏輯前驅(qū),則將消息向后繼節(jié)點(diǎn)傳遞,同時按照消息中的地址信息,檢查本地cache中是否具有該數(shù)據(jù)塊,有則設(shè)置RS位為1,表明本處理節(jié)點(diǎn)執(zhí)行新的線程時需要將該數(shù)據(jù)塊無效;2.2.2.3如果該消息是由本節(jié)點(diǎn)發(fā)送的,則回收該消息;2.3沖突解決和優(yōu)先級的設(shè)置環(huán)形結(jié)構(gòu)決定了系統(tǒng)中同類型的消息只能夠順序傳送;如果出現(xiàn)沖突則優(yōu)先發(fā)送來自邏輯順序較前的節(jié)點(diǎn)的消息,即對于L-ring上的處理是優(yōu)先發(fā)送本地的Load消息,緩沖來自后繼的Load消息;對于S-ring上的消息如果出現(xiàn)了沖突,比較邏輯順序,發(fā)送邏輯順序最前的消息,緩沖其他的;2.4如果處理節(jié)點(diǎn)的邏輯標(biāo)識id需要改變,在設(shè)計實(shí)現(xiàn)時,設(shè)計者有兩種方法可選先排空雙環(huán)結(jié)構(gòu)上的消息,再進(jìn)行邏輯順序號的改變;或者直接清除上面的消息,id更新后再重新發(fā)送這些消息。
3根據(jù)權(quán)利要求1所述的一種片內(nèi)多處理器局部cache一致性的雙環(huán)監(jiān)聽方法,其特征在于所述load消息含有對于cache中數(shù)據(jù)的讀取信息,Store消息含有對于cache存儲的信息,load消息和Store消息數(shù)據(jù)結(jié)構(gòu)中都擁有的部分是Th.id用于傳遞消息發(fā)起者的線程邏輯id;數(shù)據(jù)塊地址用于傳遞該消息所涉及的數(shù)據(jù)塊的地址;Wi表明消息感興趣的某個或者某幾個字;另外,Store消息中設(shè)計R位,用于傳遞發(fā)現(xiàn)了超前訪問的信息。
全文摘要
本發(fā)明公開了一種片內(nèi)多處理器局部cache一致性的雙環(huán)監(jiān)聽方法,目的在于對現(xiàn)有片內(nèi)多處理器間局部cache一致性方案進(jìn)行改進(jìn),解決訪問結(jié)點(diǎn)個數(shù)受限和局部cache一致性造成的訪問沖突等問題。技術(shù)方案是其總體結(jié)構(gòu)除含有多個CPU、cache、MIU外,還含有轉(zhuǎn)發(fā)總線和雙環(huán)結(jié)構(gòu),且cache分為一級指令cache、一級數(shù)據(jù)cache、二級cache,同時增加專門的邏輯控制電路擴(kuò)展一級cache控制器的功能,使其通過雙環(huán)結(jié)構(gòu)發(fā)布所屬處理節(jié)點(diǎn)對于數(shù)據(jù)的訪問信息,獲取和傳播其它節(jié)點(diǎn)對于數(shù)據(jù)的訪問情況,且借助轉(zhuǎn)發(fā)總線完成cache一致性維護(hù),并對一級數(shù)據(jù)cache標(biāo)志位進(jìn)行了擴(kuò)展。本發(fā)明充分利用了芯片內(nèi)部潛在的通信能力,使訪問的沖突明顯降低,通過較少的硬件開銷解決了局部cache一致性問題。
文檔編號G06F12/08GK1545034SQ20031011056
公開日2004年11月10日 申請日期2003年11月26日 優(yōu)先權(quán)日2003年11月26日
發(fā)明者張春元, 魯建壯, 王志英, 戴葵, 沈立, 伍楠, 李禮, 趙學(xué)秘, 岳虹 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)