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