專利名稱:一種利用例外機制維護多線程處理器的存儲一致性的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器體系結(jié)構(gòu)技術(shù)領(lǐng)域,特別涉及一種利用例外機制維護多線程處理器的存儲一致性的方法。
背景技術(shù):
隨著微處理器生產(chǎn)工藝的快速發(fā)展,芯片上集成晶體管數(shù)目的顯著增加,越來越多先進的處理器技術(shù)被實際應(yīng)用于商業(yè)處理器。各種超標量處理器技術(shù)廣泛應(yīng)用,充分挖掘指令級并行性,促進了處理器性能的提高,然而超標量處理器的關(guān)鍵技術(shù)只能解決指令間的假相關(guān),單線程程序中指令間的相關(guān)性依然存在,超標量技術(shù)在進一步提高處理器性能方面遇到了瓶頸。為了發(fā)掘更多可以并行執(zhí)行的指令,多線程處理器成為處理器進一步發(fā)展的主流。
隨著多線程技術(shù)在處理器上的應(yīng)用,處理器上多個線程同時執(zhí)行必然引起存儲一致性的問題,即多個線程發(fā)生同時訪問相同的存儲地址時,如何保證執(zhí)行的正確性。例如當(dāng)一個線程執(zhí)行一條存數(shù)指令i把數(shù)據(jù)v寫入地址a,當(dāng)其它線程要讀取地址a的值時,如果取數(shù)指令在存數(shù)指令i之前執(zhí)行,則應(yīng)該得到地址a原來的值,而如果取數(shù)指令在存數(shù)指令i之后執(zhí)行,則應(yīng)該得到存數(shù)指令i寫入的數(shù)據(jù)v。這需要處理器中有一種排序機制決定各個線程之間的訪存指令的執(zhí)行順序。然而每個線程為了提高性能往往運用亂序執(zhí)行技術(shù),轉(zhuǎn)移預(yù)測技術(shù)等,而每個線程的訪存管理隊列(即處理器中管理訪存指令的隊列)只能保證本線程的訪存指令的順序,無法知道其它線程的訪存指令順序,并且無法預(yù)知其它線程是否發(fā)生轉(zhuǎn)移預(yù)測錯誤取消指令的執(zhí)行結(jié)果。總之,為了維護處理器中多個線程的存儲一致性,管理各個線程之間的相關(guān)訪存指令,包括寫寫相關(guān)(即兩個線程都寫同一地址)、讀后寫相關(guān)(即一個線程先讀一個地址另一線程后寫相同的地址)和寫后讀相關(guān)(即一個線程先寫一個地址另一線程后讀相同的地址),需要處理器中存在一個跨線程的訪存管理隊列來管理線程間相關(guān)的訪存指令,這將增加處理器的復(fù)雜度也增加了芯片的面積。
綜上所述,現(xiàn)有技術(shù)的不足需要提供一種改進的維護多線程處理器的存儲一致性的方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于避免了在多線程處理器中增加跨線程的訪存管理隊列,避免增加處理器的復(fù)雜度和增加芯片面積,從而提供一種利用例外機制維護多線程處理器的存儲一致性的方法。
為了實現(xiàn)上述目的,本發(fā)明提供了一種利用例外機制維護多線程處理器的存儲一致性的方法,包括如下步驟步驟1)當(dāng)某一線程的訪存指令進入該線程的訪存管理隊列,判斷該指令是否是取數(shù)指令,如果是執(zhí)行步驟2),如果不是執(zhí)行步驟3);步驟2)檢查其它線程的訪存管理隊列,是否存在與該取數(shù)指令地址相同的存數(shù)指令,如果沒有則執(zhí)行步驟4),如果有相關(guān)的存數(shù)指令,則執(zhí)行步驟5);步驟3)檢查其它線程的訪存管理隊列,是否存在與該存數(shù)指令地址相同的訪存指令,如果沒有則執(zhí)行步驟4),如果有相關(guān)的訪存指令,則執(zhí)行步驟5);步驟4)正常執(zhí)行該訪存指令,操作步驟完成;步驟5)將該線程的該訪存指令設(shè)為發(fā)生例外的指令,當(dāng)該線程的該訪存指令提交時,將該線程的全局的例外信號置為有效,處理器的所有流水級都會接收到該線程發(fā)生例外的信號,此時所有執(zhí)行該線程的指令的流水級都會將自己的有效位置為無效來表示本流水級無效,同時該線程重新對該訪存指令開始取指,重新執(zhí)行。
上述技術(shù)方案中,所述的訪存指令包括取數(shù)指令和存數(shù)指令。
本發(fā)明的優(yōu)點在于1)利用例外機制完成線程間的相關(guān)訪存指令的排序,維護多線程的存儲一致性;2)設(shè)計簡單,避免了增加處理器的復(fù)雜度和增加芯片面積。
圖1為本發(fā)明的利用例外機制維護多線程處理器的存儲一致性方法的流程圖。
具體實施例方式
下面結(jié)合附圖和具體實施例,對本發(fā)明的方法做進一步描述。
如圖1所示,為本發(fā)明的利用例外機制維護多線程處理器的存儲一致性的方法的流程圖。參照圖1,一種利用例外機制維護多線程處理器的存儲一致性的方法,具體實施步驟如下步驟10、某一線程的訪存指令進入該線程的訪存管理隊列中,對訪存指令的類型進行判斷,若該訪存指令為取數(shù)指令,則執(zhí)行步驟20,若該訪存指令為存數(shù)指令,則執(zhí)行步驟30。
步驟20、檢查其它線程的訪存管理隊列,判斷是否存在與該取數(shù)指令地址相同的存數(shù)指令,如果沒有則執(zhí)行步驟40,如果有相關(guān)的存數(shù)指令,則執(zhí)行步驟50。
步驟30、檢查其它線程的訪存管理隊列,判斷是否存在與該存數(shù)指令地址相同的訪存指令(包括取數(shù)指令和存數(shù)指令),如果沒有則執(zhí)行步驟40,如果有相關(guān)的訪存指令,則執(zhí)行步驟50。
步驟40、正常執(zhí)行指令,操作步驟完成。
步驟50、將該訪存指令設(shè)為發(fā)生例外的指令,當(dāng)該線程的該訪存指令提交時,將該線程的全局的例外信號置為1,處理器的所有流水級都會接收到該線程發(fā)生例外的信號,此時所有執(zhí)行該線程的指令的流水級都會將自己的有效位置為0,表示本流水級無效,同時該線程重新對該訪存指令開始取指,重新執(zhí)行。
下面通過兩個利用例外機制維護多線程處理器的存儲一致性的例子來具體說明如何通過本發(fā)明提到的利用例外機制維護多線程處理器的存儲一致性的方法維護多線程間的存儲一致性。
例1.處理器中有兩個線程,分別標記為線程0和線程1。線程0的訪存管理隊列中有兩條指令,第一條是取數(shù)指令,假設(shè)其地址為0x8200,第二條是存數(shù)指令,假設(shè)其地址為0x7660。線程1的訪存管理隊列中有兩條指令,第一條是取數(shù)指令,假設(shè)其地址為0x5090,第二條是存數(shù)指令,假設(shè)其地址為0x1240。此時,線程0有一條取數(shù)指令進入線程0的訪存管理隊列,取數(shù)的地址為0x5090,因為是取數(shù)指令,所以檢查線程1的訪存管理隊列中的存數(shù)指令,看看是否有地址相同的存數(shù)指令。檢查結(jié)果是不存在地址相同的存數(shù)指令,所以線程0的取數(shù)指令正常執(zhí)行相應(yīng)的操作把內(nèi)存中的數(shù)據(jù)讀到處理器的通用寄存器中。
例2.處理器中有兩個線程,分別標記為線程0和線程1。線程0的訪存管理隊列中有兩條指令,第一條是取數(shù)指令,地址為0x8200,第二條是存數(shù)指令,地址為0x7660。線程1的訪存管理隊列中有兩條指令,第一條是取數(shù)指令,地址為0x5090,第二條是存數(shù)指令,地址為0x1240。此時,線程1有一條存數(shù)指令進入線程1的訪存管理隊列,存數(shù)的地址為0x8200,因為是存數(shù)指令,所以檢查線程0的訪存管理隊列中的所有訪存指令(包括取數(shù)指令和存數(shù)指令),看看是否有地址相同的訪存指令。檢查的結(jié)果發(fā)現(xiàn)與線程0中的第一條取數(shù)指令的地址相同,所以將線程1的這條存數(shù)指令設(shè)為發(fā)生例外的指令,當(dāng)線程1提交這條存數(shù)指令的時候,將線程1的全局的例外信號置為1,處理器的所有流水級都會接收到線程1發(fā)生例外的信號,此時所有執(zhí)行線程1的指令的流水級都會將自己的有效位置為0來表示本流水級無效,同時線程1重新對該訪存指令開始取指,重新執(zhí)行。
權(quán)利要求
1.一種利用例外機制維護多線程處理器的存儲一致性的方法,包括如下步驟步驟1)當(dāng)某一線程的訪存指令進入該線程的訪存管理隊列,判斷該指令是否是取數(shù)指令,如果是執(zhí)行步驟2),如果不是執(zhí)行步驟3);步驟2)檢查其它線程的訪存管理隊列,是否存在與該取數(shù)指令地址相同的存數(shù)指令,如果沒有則執(zhí)行步驟4),如果有相關(guān)的存數(shù)指令,則執(zhí)行步驟5);步驟3)檢查其它線程的訪存管理隊列,是否存在與該存數(shù)指令地址相同的訪存指令,如果沒有則執(zhí)行步驟4),如果有相關(guān)的訪存指令,則執(zhí)行步驟5);步驟4)正常執(zhí)行該訪存指令,操作步驟完成;步驟5)將該線程的該訪存指令設(shè)為發(fā)生例外的指令,當(dāng)該線程的該訪存指令提交時,將該線程的全局的例外信號置為有效,處理器的所有流水級都會接收到該線程發(fā)生例外的信號,此時所有執(zhí)行該線程的指令的流水級都會將自己的有效位置為無效來表示本流水級無效,同時該線程重新對該訪存指令開始取指,重新執(zhí)行。
2.根據(jù)權(quán)利要求1所述的利用例外機制維護多線程處理器的存儲一致性的方法,其特征在于,所述的訪存指令包括取數(shù)指令和存數(shù)指令。
全文摘要
本發(fā)明公開了一種利用例外機制維護多線程處理器的存儲一致性的方法,該方法包括當(dāng)某一線程的一條取數(shù)指令進入訪存管理隊列時,查找其它線程的訪存管理隊列中是否有地址相關(guān)的存數(shù)指令,如果有則把該線程的取數(shù)指令置例外重新執(zhí)行;當(dāng)某一線程的一條存數(shù)指令進入訪存管理隊列時,查找其它線程的訪存管理隊列中是否有地址相關(guān)的訪存指令,如果有則把該線程的存數(shù)指令置例外重新執(zhí)行。這樣,通過給兩個線程間發(fā)生相關(guān)的訪存指令置例外的機制,保證處理器不會同時處理兩個線程間訪存相關(guān)的指令,以此來保證線程間的存儲一致性。
文檔編號G06F9/38GK1983163SQ20051013210
公開日2007年6月20日 申請日期2005年12月16日 優(yōu)先權(quán)日2005年12月16日
發(fā)明者李祖松, 胡偉武, 郇丹丹 申請人:中國科學(xué)院計算技術(shù)研究所