一種并發訪問內存的方法及裝置的制造方法
【技術領域】
[0001]本發明涉及計算機領域,尤其涉及一種并發訪問內存的方法及裝置。
【背景技術】
[0002]最近幾年內,處理器廠商受到功耗和溫度的限制,同時為了保持高性能運算持續增長,計算機已經朝著多核計算機體系架構方向發展。為了充分利用多核架構,應用程序被拆分成多個可獨立運行在單個CPU上面的線程,這樣設計程序可以并行執行提高整體運行效率。基于這樣的程序體系,需要保證數據處理的同步性和數據完整性,因此線程之間需要用某種同步機制來串行訪問共享區域。
[0003]Transact1n memory(事務內存)的提出正是為了提高線程的并行度;Transact1nmemory假設多核線程之間對于共享數據的訪問很少產生寫-讀,讀-寫,以及寫-寫沖突,因此允許多個線程試探性的并行執行,當發現產生沖突的時候進行回滾,使程序的狀態回到沖突之前的狀態,利用這個特性在不影響數據完整性的前提下體系結構的性能和可擴展性得到提聞。
[0004]Transact1n memory廣泛使用在并行系統中以提高體系架構的可擴展性。當前Transact1n memory技術已經進入了 CPU體系架構之中,包括IBM的Blue Gene/Q, Intel的 Haswell。
[0005]雖然Transact1n memory提高了線程的并行度,但是隨著并行度的提高沖突產生的概率也隨之增加,一旦產生沖突進行回滾操作就會嚴重的傷害程序的性能。
【發明內容】
[0006]本申請要解決的技術問題是如何提高多核系統中事務內存訪問的并發性,同時減少沖突引發的回滾,提高系統整體性能。
[0007]為了解決上述問題,本申請提供了一種并發訪問內存的方法,包括:
[0008]當第一事務需要對第一數據進行寫操作時,如果存在讀過所述第一數據或將要讀所述第一數據的第二事務,則生成表示所述第一事務的寫操作和所述第二事務的讀操作沖突的記錄;
[0009]執行所述第二事務的處理,執行完成后提交所述第二事務并根據所述記錄通知所述第一事務;
[0010]執行所述第一事務的處理,執行完成且收到所述第二事務的通知后提交所述第一事務。
[0011]可選地,所述生成表示所述第一事務的寫操作和所述第二事務的讀操作沖突的記錄的步驟包括:
[0012]在運行所述第一事務的第一處理器的第一讀寫沖突檢測寄存器中,將運行所述第二事務的第二處理器對應的處理器標識位置位,將操作沖突標識位置為表示產生寫操作沖突的值;
[0013]在所述第二處理器的第二讀寫沖突檢測寄存器中,將所述第一處理器對應的處理器標識位置位,將操作沖突標識位置為表示產生讀操作沖突的值。
[0014]可選地,根據所述記錄通知所述第一事務的步驟包括:
[0015]在所述第二讀寫沖突檢測寄存器中,查找置位的處理器標識位;
[0016]確定置位的處理器標識位對應于所述第一處理器;
[0017]通知所述第一處理器上運行的所述第一事務。
[0018]可選地,執行所述第一事務的處理,執行完成且收到所述第二事務的通知后提交所述第一事務的步驟包括:
[0019]步驟41、執行所述第一事務的處理,執行完成后進行步驟42 ;
[0020]步驟42、判斷所述第一讀寫沖突檢測寄存器中的操作沖突標識位是否為表示產生寫操作沖突的值,如果是則進行步驟43,如果為表示讀操作沖突的值則進行步驟45 ;
[0021]步驟43、判斷所述第一讀寫沖突檢測寄存器中各處理器標識位是否全未置位;如果至少一個已置位則等待;如果全未置位則進行步驟45 ;
[0022]步驟44、當收到所述第二事務的通知后,在所述第一讀寫沖突檢測寄存器中,將所述第二處理器對應的處理器標識位復位;返回步驟43 ;
[0023]步驟45、提交所述第一事務。
[0024]可選地,判斷是否存在讀過所述第一數據或將要讀所述第一數據的第二事務的步驟后還包括:
[0025]如果所述第二事務讀過所述第一數據,則在執行所述第一事務的處理前,將所述第一數據在所述第二事務中對應的緩存行復制到所述第一事務對應的私有不可見緩存中;
[0026]如果所述第二事務將要讀所述第一數據,則在執行所述第二事務的處理前,從所述第一事務對應的緩存行中,將未進行寫操作的所述第一數據復制到所述第二事務對應的緩存中。
[0027]本申請還提供了一種并發訪問內存的裝置,包括:
[0028]緩存管理單元,用于當第一事務需要對第一數據進行寫操作時,如果存在讀過所述第一數據或將要讀所述第一數據的第二事務,則生成表示所述第一事務的寫操作和所述第二事務的讀操作沖突的記錄;
[0029]第一處理單元,用于執行所述第一事務的處理,執行完成且收到所述第二事務的通知后提交所述第一事務;
[0030]第二處理單元,用于執行所述第二事務的處理,執行完成后提交所述第二事務并根據所述記錄通知所述第一事務。
[0031]可選地,所述的裝置還包括:
[0032]與所述第一處理單元對應的第一讀寫沖突檢測寄存器;
[0033]與所述第二處理單元對應的第二讀寫沖突檢測寄存器;
[0034]所述緩存管理單元生成表示所述第一事務的寫操作和所述第二事務的讀操作沖突的記錄是指:
[0035]所述緩存管理單元在所述第一讀寫沖突檢測寄存器中,將所述第二處理單元對應的處理器標識位置位,將操作沖突標識位置為表示產生寫操作沖突的值;在所述第二讀寫沖突檢測寄存器中,將所述第一處理單元對應的處理器標識位置位,將操作沖突標識位置為表示產生讀操作沖突的值。
[0036]可選地,所述第二處理單元根據所述記錄通知所述第一事務是指:
[0037]所述第二處理單元在所述第二讀寫沖突檢測寄存器中,查找置位的處理器標識位;確定置位的處理器標識位對應于所述第一處理單元;通知所述第一處理單元上運行的所述第一事務。
[0038]可選地,所述第一處理單元包括:
[0039]第一判斷模塊、第二判斷模塊;
[0040]執行模塊,用于執行所述第一事務的處理,執行完成后指示所述第一判斷模塊進行判斷;
[0041]清除模塊,用于當收到所述第二事務的通知后,在所述第一讀寫沖突檢測寄存器中,將所述第二處理單元對應的處理器標識位復位;指示所述第二判斷模塊進行判斷;
[0042]所述第一判斷模塊用于判斷所述第一讀寫沖突檢測寄存器中的操作沖突標識位是否為表示產生寫沖突的值;如果是則指示所述第一判斷模塊進行判斷;如果為表示讀操作沖突的值則指示所述提交模塊提交所述第一事務;
[0043]所述第二判斷模塊用于判斷所述第一讀寫沖突檢測寄存器中各處理器標識位是否全未置位;如果全未置位則指示所述提交模塊提交所述第一事務。
[0044]可選地,所述緩存管理單元還用于當判斷所述第二事務讀過所述第一數據時,在所述第一處理單元執行所述第一事務的處理前,將所述第一數據在所述第二事務中對應的緩存行復制到所述第一事務對應的私有不可見緩存中;當判斷所述第二事務將要讀所述第一數據時,在所述第二處理單元執行所述第二事務的處理前,從所述第一事務對應的緩存行中,將未進行寫操作的所述第一數據復制到所述第二事務對應的緩存中。
[0045]本申請可以允許即使一個線程寫數據的前提下,其他多核仍然可以并行讀取相同數據,在維護數據完整性的前提下,提高多核讀操作的并行性和避免內存由于讀-寫沖突和寫-讀沖突產生的回滾時間,最終提高系統的并發性和吞吐量,從而提高總體運行性能,并能提高多核系統的可擴展性。本申請的又一個實施例中增加了事務沖突寄存器,可以有效記錄沖突的對象、類型,并能通過該事務沖突寄存器保證各事務的提交順序。當然,實施本申請的任一產品必不一定需要同時達到以上所述的所有優點。
【附圖說明】
[0046]圖1是實施例一的并發訪問內存的方法的流程示意圖;
[0047]圖2是實施例一中讀寫沖突檢測寄存器的示意圖;
[0048]圖3是實施例一中步驟S103的流程示意圖;
[0049]圖4是實施例一的第一個例子的流程示意圖;
[0050]圖5是實施例一的第二個例子的流程示意圖。
【具體實施方式】
[0051]下面將結合附圖及實施例對本申請的技術方案進行更詳細的說明。
[0052]需要說明的是,如果不沖突,本申請實施例以及實施例中的各個特征可