本發(fā)明涉及通用計算節(jié)點和異構(gòu)計算節(jié)點間共享內(nèi)存領(lǐng)域,尤其涉及一種基于pci-e實現(xiàn)不同類型計算節(jié)點內(nèi)存共享的系統(tǒng)及方法。
背景技術(shù):
出于功耗及空間方面的考慮,數(shù)據(jù)中心的一些應(yīng)用中已經(jīng)開始使用異構(gòu)計算(gpu、fpga等)加速器,許多應(yīng)用已經(jīng)受益于可在不同系統(tǒng)架構(gòu)中無縫移動數(shù)據(jù)的加速器引擎。目前的加速器大多數(shù)是基于pci-e總線,但pci-e總線在不同類型計算節(jié)點中通信存在帶寬低、延時高的問題,如何基于pci-e接口和交換機實現(xiàn)不同類型計算節(jié)點之間高帶寬、低延時互訪是一個需要解決的技術(shù)難題。
技術(shù)實現(xiàn)要素:
為解決上述問題,本發(fā)明提供一種不同計算節(jié)點的內(nèi)存可以共享使用的計算節(jié)點內(nèi)存共享系統(tǒng)及讀、寫操作內(nèi)存共享方法。
本發(fā)明的技術(shù)方案是:一種計算節(jié)點內(nèi)存共享系統(tǒng),所述計算節(jié)點有至少兩個,每個計算節(jié)點均包括:
對讀寫操作進行計算處理的核心處理模塊;
對cache和內(nèi)存進行控制的內(nèi)存控制器模塊;
實現(xiàn)各個計算節(jié)點內(nèi)存互訪的共享內(nèi)存控制模塊;
對pcie消息進行封裝和解析的pcie消息處理模塊;
所述核心處理模塊通過內(nèi)存控制器模塊與cache連接,cache與內(nèi)存連接;
所述核心處理模塊還通過pcie總線與共享內(nèi)存控制模塊連接;所述共享內(nèi)存控制模塊通過pcie消息處理模塊與其他計算節(jié)點連接。
進一步地,各個計算節(jié)點通過pcieswitch互聯(lián)。
進一步地,計算節(jié)點的類型包括各種架構(gòu)的cpu、gpu和fpga。
一種實現(xiàn)計算節(jié)點讀操作內(nèi)存共享方法,計算節(jié)點包括本地計算節(jié)點和被訪問計算節(jié)點,本地計算節(jié)點進行讀操作處理包括以下操作:
s1:判斷所讀地址是否在本地cache中;
s2:如果所讀地址在本地cache中,且本地cache狀態(tài)表明數(shù)據(jù)有效,則從本地cache中讀取數(shù)據(jù);
s3:如果所讀地址不在本地cache中或本地cache狀態(tài)表明數(shù)據(jù)無效,則進入步驟s4:
s4:判斷是否是讀本地內(nèi)存;
s5:如果是讀本地內(nèi)存,則通過內(nèi)存控制器模塊訪問本地內(nèi)存,然后刷新本地cache內(nèi)容為本地內(nèi)存中的內(nèi)容;
s6:如果不是讀本地內(nèi)存,則調(diào)用本地共享內(nèi)存控制模塊;
s7:本地共享內(nèi)存控制模塊通過本地pcie消息處理模塊把訪問地址封裝成pcie消息發(fā)送給被訪問計算節(jié)點;
s8:被訪問計算節(jié)點訪問目標內(nèi)存,并將訪問結(jié)果發(fā)回本地計算節(jié)點進行處理。
進一步地,步驟s8具體包括以下步驟:
s8.1:被訪問pcie消息處理模塊接收并解析pcie消息,發(fā)給被訪問共享內(nèi)存控制模塊;
s8.2:被訪問共享內(nèi)存控制模塊訪問目標內(nèi)存;
s8.3:被訪問共享內(nèi)存控制模塊調(diào)用pcie消息處理模塊把訪問結(jié)果封裝成pcie消息發(fā)回本地計算節(jié)點;
s8.4:本地pcie消息處理模塊解析pcie消息中的結(jié)果傳給本地共享內(nèi)存控制模塊;
s8.5:本地共享內(nèi)存控制模塊把訪問結(jié)果返回本地核心處理模塊;
s8.6:本地內(nèi)存控制器模塊刷新本地cache內(nèi)容為新的訪問結(jié)果。
一種實現(xiàn)計算節(jié)點寫操作內(nèi)存共享方法,計算節(jié)點包括本地計算節(jié)點和被訪問計算節(jié)點,本地計算節(jié)點進行寫操作處理包括以下操作:
s1:判斷是否是寫本地內(nèi)存;
s2:如果是寫本地內(nèi)存,則通過本地內(nèi)存控制器模塊訪問本地cache和本地內(nèi)存;如果不是寫本地內(nèi)存,則進入步驟s7;
s3:寫內(nèi)存操作完成后,通過本地共享內(nèi)存控制模塊調(diào)用本地pcie消息處理模塊;
s4:pcie消息處理模塊封裝pcie消息發(fā)給其他所有計算節(jié)點;
s5:其他所有計算節(jié)點各自的pcie消息處理模塊解析pcie消息;
s6:其他所有計算節(jié)點各自的共享內(nèi)存控制模塊更新本地cache狀態(tài);
s7:調(diào)用本地共享內(nèi)存控制模塊;
s8:調(diào)用本地pcie消息處理模塊把訪問地址封裝成pcie消息發(fā)給被訪問計算節(jié)點;
s9:被訪問計算節(jié)點訪問目標內(nèi)存,并將被訪問內(nèi)存有變化消息發(fā)送給其他所有計算節(jié)點。
進一步地,步驟s9具體包括以下步驟:
s9.1:被訪問pcie消息處理模塊接收pcie消息解析后發(fā)給被訪問共享內(nèi)存控制模塊;
s9.2:被訪問共享內(nèi)存控制模塊訪問目標內(nèi)存;
s9.3:被訪問共享內(nèi)存控制模塊調(diào)用被訪問pcie消息處理模塊;
s9.4:被訪問pcie消息處理模塊封裝pcie消息發(fā)給其他所有計算節(jié)點,以通知給其他所有計算節(jié)點被訪問內(nèi)存內(nèi)容有變化;
s9.5:其他所有計算節(jié)點各自的pcie消息處理模塊解析pcie消息;
s9.6:其他所有計算節(jié)點的共享內(nèi)存控制模塊更新本地cache狀態(tài)。
本發(fā)明提供的計算節(jié)點內(nèi)存共享系統(tǒng)及讀、寫操作內(nèi)存共享方法,實現(xiàn)不同計算節(jié)點的內(nèi)存共享使用,不同類型的計算節(jié)點處理數(shù)據(jù)就不需要在各自內(nèi)存中把數(shù)據(jù)搬來搬去,這樣就能減少傳輸帶寬的使用,降低處理數(shù)據(jù)的延時。
附圖說明
圖1是本發(fā)明系統(tǒng)連接部署示意圖。
圖2是本發(fā)明系統(tǒng)模塊關(guān)系示意圖。
圖3是本發(fā)明具體實施例一讀操作處理流程圖。
圖4是本發(fā)明具體實施例二寫操作處理流程圖。
具體實施方式
下面結(jié)合附圖并通過具體實施例對本發(fā)明進行詳細闡述,以下實施例是對本發(fā)明的解釋,而本發(fā)明并不局限于以下實施方式。
如圖1和2所示,本發(fā)明提供的計算節(jié)點內(nèi)存共享系統(tǒng),計算節(jié)點有多個,可設(shè)置至少兩個。計算節(jié)點的類型有多種,可包括各種結(jié)構(gòu)的cpu、gpu和fpga。各種類型的計算節(jié)點通pcie總線連接,連接的計算節(jié)點比較多時可采用pcieswitch互聯(lián)??梢允窍嗤愋偷挠嬎愎?jié)點互聯(lián),也可以是不同類型的計算節(jié)點互聯(lián)。
每個計算節(jié)點均包括:
對讀寫操作進行計算處理的核心處理模塊;
對cache和內(nèi)存進行控制的內(nèi)存控制器模塊;
實現(xiàn)各個計算節(jié)點內(nèi)存互訪的共享內(nèi)存控制模塊;
對pcie消息進行封裝和解析的pcie消息處理模塊。
核心處理模塊通過內(nèi)存控制器模塊與cache連接,cache與內(nèi)存連接;核心處理模塊還通過pcie總線與共享內(nèi)存控制模塊連接;共享內(nèi)存控制模塊通過pcie消息處理模塊與其他計算節(jié)點連接。
實施例一:
計算節(jié)點包括本地計算節(jié)點和被訪問計算節(jié)點,如圖3所示,本地計算節(jié)點進行讀操作處理包括以下操作:
s1:判斷所讀地址是否在本地cache中;
s2:如果所讀地址在本地cache中,且本地cache狀態(tài)表明數(shù)據(jù)有效,則從本地cache中讀取數(shù)據(jù);
s3:如果所讀地址不在本地cache中或本地cache狀態(tài)表明數(shù)據(jù)無效,則進入步驟s4:
s4:判斷是否是讀本地內(nèi)存;
s5:如果是讀本地內(nèi)存,則通過內(nèi)存控制器模塊訪問本地內(nèi)存,然后刷新本地cache內(nèi)容為本地內(nèi)存中的內(nèi)容;
s6:如果不是讀本地內(nèi)存,則調(diào)用本地共享內(nèi)存控制模塊;
s7:本地共享內(nèi)存控制模塊通過本地pcie消息處理模塊把訪問地址封裝成pcie消息發(fā)送給被訪問計算節(jié)點;
s8:被訪問計算節(jié)點訪問目標內(nèi)存,并將訪問結(jié)果發(fā)回本地計算節(jié)點進行處理。
其中,步驟s8具體包括以下步驟:
s8.1:被訪問pcie消息處理模塊接收并解析pcie消息,發(fā)給被訪問共享內(nèi)存控制模塊;
s8.2:被訪問共享內(nèi)存控制模塊訪問目標內(nèi)存;
s8.3:被訪問共享內(nèi)存控制模塊調(diào)用pcie消息處理模塊把訪問結(jié)果封裝成pcie消息發(fā)回本地計算節(jié)點;
s8.4:本地pcie消息處理模塊解析pcie消息中的結(jié)果傳給本地共享內(nèi)存控制模塊;
s8.5:本地共享內(nèi)存控制模塊把訪問結(jié)果返回本地核心處理模塊;
s8.6:本地內(nèi)存控制器模塊刷新本地cache內(nèi)容為新的訪問結(jié)果。
實施例二:
計算節(jié)點包括本地計算節(jié)點和被訪問計算節(jié)點,如圖4所示,本地計算節(jié)點進行寫操作處理包括以下操作:
s1:判斷是否是寫本地內(nèi)存;
s2:如果是寫本地內(nèi)存,則通過本地內(nèi)存控制器模塊訪問本地cache和本地內(nèi)存;如果不是寫本地內(nèi)存,則進入步驟s7;
s3:寫內(nèi)存操作完成后,通過本地共享內(nèi)存控制模塊調(diào)用本地pcie消息處理模塊;
s4:pcie消息處理模塊封裝pcie消息發(fā)給其他所有計算節(jié)點;
s5:其他所有計算節(jié)點各自的pcie消息處理模塊解析pcie消息;
s6:其他所有計算節(jié)點各自的共享內(nèi)存控制模塊更新本地cache狀態(tài);
s7:調(diào)用本地共享內(nèi)存控制模塊;
s8:調(diào)用本地pcie消息處理模塊把訪問地址封裝成pcie消息發(fā)給被訪問計算節(jié)點;
s9:被訪問計算節(jié)點訪問目標內(nèi)存,并將被訪問內(nèi)存有變化消息發(fā)送給其他所有計算節(jié)點。
其中,步驟s9具體包括以下步驟:
s9.1:被訪問pcie消息處理模塊接收pcie消息解析后發(fā)給被訪問共享內(nèi)存控制模塊;
s9.2:被訪問共享內(nèi)存控制模塊訪問目標內(nèi)存;
s9.3:被訪問共享內(nèi)存控制模塊調(diào)用被訪問pcie消息處理模塊;
s9.4:被訪問pcie消息處理模塊封裝pcie消息發(fā)給其他所有計算節(jié)點,以通知給其他所有計算節(jié)點被訪問內(nèi)存內(nèi)容有變化;
s9.5:其他所有計算節(jié)點各自的pcie消息處理模塊解析pcie消息;
s9.6:其他所有計算節(jié)點的共享內(nèi)存控制模塊更新本地cache狀態(tài)。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出:對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。