專(zhuān)利名稱(chēng):一種高密度多處理器系統(tǒng)及其節(jié)點(diǎn)控制器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及并行多處理器系統(tǒng)領(lǐng)域,特別是涉及一種高密度多處理器系統(tǒng)及其節(jié) 點(diǎn)控制器。
背景技術(shù):
并行多處理器系統(tǒng)的節(jié)點(diǎn)控制器是節(jié)點(diǎn)內(nèi)各種部件(處理器、主存和設(shè)備等)互 連的通道,其結(jié)構(gòu)隨著體系結(jié)構(gòu)的不同而不同。當(dāng)前主流的體系結(jié)構(gòu)包括對(duì)稱(chēng)多處理系 ^t (Symmetrical Multi-Processing, SMP) > #X^t^#fi|ijj fn] %^t (Non Uniform Memory Access,NUMA)、大規(guī)模并行處理系統(tǒng)(Massively Parallel Processing, MPP)和機(jī)群系統(tǒng) (Cluster)。Cluster中節(jié)點(diǎn)采用主流商用計(jì)算機(jī),多為SMP和NUMA結(jié)構(gòu),因此SMP、NUMA和 Cluster中采用的節(jié)點(diǎn)控制器可以歸為一類(lèi),此類(lèi)節(jié)點(diǎn)的節(jié)點(diǎn)控制器采用北橋加南橋的方 式。北橋負(fù)責(zé)實(shí)現(xiàn)處理器與主存及南橋間的數(shù)據(jù)交互,目前的系統(tǒng)中北橋多被集成在處理 器中;南橋負(fù)責(zé)外圍設(shè)備與北橋的數(shù)據(jù)交互,連接所有的外圍設(shè)備。然而使用此類(lèi)節(jié)點(diǎn)控制 器,處理器間的數(shù)據(jù)交互以Load和Store方式,一次傳輸數(shù)據(jù)量很小,通信帶寬利用率低。 節(jié)點(diǎn)控制器需要維護(hù)Cache —致性,導(dǎo)致擴(kuò)展性差。MPP系統(tǒng)則采用定制的節(jié)點(diǎn),其節(jié)點(diǎn)控制器稱(chēng)為路由器(Router),多個(gè)處理器直 接掛載到Router上,構(gòu)成直接網(wǎng)絡(luò),對(duì)外圍設(shè)備的訪問(wèn)則通過(guò)獨(dú)立的服務(wù)節(jié)點(diǎn)實(shí)現(xiàn)。此類(lèi) Router實(shí)現(xiàn)的外部接口采用自定義協(xié)議,無(wú)法使用商用化硬件,導(dǎo)致較高的系統(tǒng)成本。受限 于直接網(wǎng)絡(luò)拓?fù)?,一個(gè)Router能夠互連的處理器數(shù)目受到限制。隨著并行多處理機(jī)系統(tǒng)的性能不斷提高,由于空間占用和散熱效率的限制,使其 對(duì)節(jié)點(diǎn)密度的需求越來(lái)越高,即一個(gè)節(jié)點(diǎn)要容納越來(lái)越多的處理器。同時(shí)由于成本的限制, 使其對(duì)節(jié)點(diǎn)商品化的要求越來(lái)越迫切,即一方面節(jié)點(diǎn)能夠盡可能使用商用部件,另一方面 節(jié)點(diǎn)能夠獨(dú)立運(yùn)行,成為主流商用服務(wù)器。這就要求節(jié)點(diǎn)控制器的設(shè)計(jì)在提供高帶寬、低 延遲互連的基礎(chǔ)上,還需要具有較好的擴(kuò)展性,支持更多的處理器互連,同時(shí)兼容商品化設(shè) 備。而現(xiàn)有的Cluster節(jié)點(diǎn)和MPP節(jié)點(diǎn)的節(jié)點(diǎn)控制器設(shè)計(jì)無(wú)法滿足所有需求。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種高密度多處理器系統(tǒng)及其節(jié)點(diǎn)控制器。其實(shí)現(xiàn)了多個(gè) 處理器的高速互連,提高多處理器系統(tǒng)的密度,并實(shí)現(xiàn)多個(gè)處理器對(duì)商品化外設(shè)的共享訪 問(wèn)。為實(shí)現(xiàn)本發(fā)明的目的而提供的一種高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,包括多 個(gè)處理器端口,一個(gè)1/0端口,一個(gè)直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊和一個(gè)讀/寫(xiě)交叉開(kāi)關(guān)模 塊,其中所述處理器端口,分為主處理器端口和從處理器端口,用于分別與主處理器和從 處理器連接,主處理器負(fù)責(zé)具體計(jì)算任務(wù)的運(yùn)行,以及對(duì)外圍設(shè)備的發(fā)現(xiàn)和初始化過(guò)程,從處理器只負(fù)責(zé)具體計(jì)算任務(wù)的運(yùn)行;所述I/O端口,通過(guò)I/O總線與外圍設(shè)備連接,其包括讀/寫(xiě)模塊和I/O接口模 塊,所述I/O接口模塊用于負(fù)責(zé)實(shí)現(xiàn)I/O總線根設(shè)備邏輯,所述I/O接口模塊通過(guò)一窗口 寄存器記錄該端口的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線包格式與I/O總線包格式間的互相轉(zhuǎn) 換;所述讀/寫(xiě)模塊與所述讀/寫(xiě)交叉開(kāi)關(guān)模塊連接;所述直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊,用于實(shí)現(xiàn)各所述處理器端口間直接內(nèi)存訪問(wèn)數(shù) 據(jù)的交換;所述讀/寫(xiě)交叉開(kāi)關(guān)模塊,用于實(shí)現(xiàn)各所述處理器端口之間,以及所述處理器端 口和I/O端口之間讀/寫(xiě)數(shù)據(jù)的交換。所述處理器端口,包括處理器接口模塊、分發(fā)模塊、仲裁模塊、直接內(nèi)存訪問(wèn)模 塊、讀/寫(xiě)模塊和I/O高級(jí)可編程中斷控制器模塊其中所述處理器接口模塊,根據(jù)其所屬的處理器端口連接的處理器的類(lèi)型的不同,分 為主處理器接口模塊和從處理器接口模塊,其中所述主處理器接口模塊,負(fù)責(zé)與主處理器 系統(tǒng)總線的掛接,包括所有總線鏈路層功能,主處理器接口模塊通過(guò)一窗口寄存器記錄該 端口的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線終端設(shè)備的配置空間和橋設(shè)備的配置空間;所述從 處理器接口模塊,負(fù)責(zé)與從處理器系統(tǒng)總線的掛接,包括所有總線鏈路層功能,從處理器接 口模塊通過(guò)一窗口寄存器記錄該端口的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線終端設(shè)備的配置空 間;所述分發(fā)模塊,用于將來(lái)自所述處理器接口模塊的數(shù)據(jù)按照所屬功能分發(fā)給直接 內(nèi)存訪問(wèn)模塊或讀/寫(xiě)模塊,或I/O高級(jí)中斷控制器模塊;所述仲裁模塊,用于將來(lái)自直接內(nèi)存訪問(wèn)模塊、讀/寫(xiě)模塊和I/O高級(jí)中斷控制器 模塊的數(shù)據(jù)進(jìn)行公平仲裁后,分時(shí)傳遞給所述處理器接口模塊,實(shí)現(xiàn)多種數(shù)據(jù)在處理器接 口總線上的共享傳輸;所述直接內(nèi)存訪問(wèn)模塊,用于實(shí)現(xiàn)數(shù)據(jù)以直接內(nèi)存訪問(wèn)方式在處理器間的傳輸, 所述直接內(nèi)存訪問(wèn)模塊與所述直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊連接;所述讀/寫(xiě)模塊,用于實(shí)現(xiàn)數(shù)據(jù)以讀/寫(xiě)方式在處理器間的傳輸,所述讀/寫(xiě)模塊 與所述讀/寫(xiě)交叉開(kāi)關(guān)模塊連接;所述I/O高級(jí)中斷控制器模塊,用于實(shí)現(xiàn)對(duì)應(yīng)所述處理器端口的I/O高級(jí)中斷控 制器中斷控制。所述分發(fā)模塊中對(duì)數(shù)據(jù)所屬功能的區(qū)分通過(guò)兩個(gè)途徑,一方面通過(guò)設(shè)備配置空間 的基址寄存器地址窗口,另一方面為不同功能模塊向系統(tǒng)總線申請(qǐng)不同的設(shè)備號(hào),然后根 據(jù)數(shù)據(jù)所屬設(shè)備號(hào)實(shí)現(xiàn)功能區(qū)分。所述直接內(nèi)存訪問(wèn)模塊包括下傳和上傳兩個(gè)子模塊,其中下傳子模塊負(fù)責(zé)接收直 接內(nèi)存訪問(wèn)描述符,讀取直接內(nèi)存訪問(wèn)負(fù)載數(shù)據(jù),并將數(shù)據(jù)發(fā)送至所述直接內(nèi)存訪問(wèn)交叉 開(kāi)關(guān)模塊;上傳子模塊負(fù)責(zé)從所述直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊接收直接內(nèi)存訪問(wèn)數(shù)據(jù),并 將數(shù)據(jù)寫(xiě)入目標(biāo)地址區(qū)域。所述讀/寫(xiě)模塊包括下傳和上傳兩個(gè)子模塊,其中下傳子模塊負(fù)責(zé)從所述分發(fā)模 塊接收讀/寫(xiě)請(qǐng)求以及讀響應(yīng)數(shù)據(jù),并發(fā)送至所述讀/寫(xiě)交叉開(kāi)關(guān)模塊;上傳模塊負(fù)責(zé)從所 述讀/寫(xiě)交叉開(kāi)關(guān)模塊接收數(shù)據(jù)并發(fā)送至目的地址。
8
所述直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊為每個(gè)所述處理器端口設(shè)置兩個(gè)虛通道緩沖區(qū), 一個(gè)發(fā)送緩沖區(qū),核心使用一個(gè)2NXN的交叉開(kāi)關(guān),N為交叉開(kāi)關(guān)互連的處理器端口數(shù)目; 數(shù)據(jù)對(duì)虛通道緩沖區(qū)的選擇符合如下規(guī)則目標(biāo)處理器端口號(hào)為奇數(shù)的進(jìn)入1號(hào)接收虛通 道緩沖區(qū),目標(biāo)處理器端口號(hào)為偶數(shù)的進(jìn)入0號(hào)接收虛通道緩沖區(qū)。所述讀/寫(xiě)交叉開(kāi)關(guān)模塊為每個(gè)處理器及I/O端口設(shè)置兩個(gè)虛通道緩沖區(qū),一個(gè) 發(fā)送緩沖區(qū),核心使用一個(gè)2(N+1)X(N+1)的交叉開(kāi)關(guān),N為交叉開(kāi)關(guān)互連的處理器端口數(shù) 目;數(shù)據(jù)對(duì)虛通道緩沖區(qū)的選擇符合如下規(guī)則目標(biāo)處理器端口號(hào)為奇數(shù)的進(jìn)入1號(hào)接收 虛通道緩沖區(qū),目標(biāo)處理器端口號(hào)為偶數(shù)的進(jìn)入0號(hào)接收虛通道緩沖區(qū)。為實(shí)現(xiàn)本發(fā)明的目的還提供一種所述節(jié)點(diǎn)控制器實(shí)現(xiàn)讀數(shù)據(jù)傳輸?shù)姆椒?,所述?法,包括下列步驟步驟110.源處理器端口的處理器接口模塊接收源處理器發(fā)出Load指令,傳遞給 源處理器端口的分發(fā)模塊,該分發(fā)模塊通過(guò)查詢(xún)基址寄存器判定該指令為讀指令后,將該 讀指令發(fā)送給源處理器端口的讀/寫(xiě)模塊;步驟120.所述讀/寫(xiě)模塊獲取Load指令中的全局地址,然后查詢(xún)節(jié)點(diǎn)控制器內(nèi) 各端口的窗口寄存器,若沒(méi)有在任何一個(gè)窗口寄存器中命中,則發(fā)送響應(yīng)包至源處理器或 I/O端口,同時(shí)響應(yīng)包中的狀態(tài)域的錯(cuò)誤位置位為1 ;若全局地址在窗口表中命中,則根據(jù) 窗口號(hào)生成目的端口號(hào),并使用目的端口號(hào)替換Load請(qǐng)求中全局地址的高[―丨“位,使用 源窗口號(hào)替換Load請(qǐng)求中的攜帶的設(shè)備號(hào),將Load請(qǐng)求發(fā)送至讀/寫(xiě)交叉開(kāi)關(guān)模塊;步驟130.所述讀/寫(xiě)交叉開(kāi)關(guān)模塊以讀請(qǐng)求的目的端口號(hào)作為路由信息,將讀請(qǐng) 求轉(zhuǎn)發(fā)至目的處理器端口或目的1/0端口 ;步驟140.所述目的處理器端口或目的1/0端口的讀/寫(xiě)模塊為該讀請(qǐng)求生成目 的總線請(qǐng)求序號(hào)目的Tag,并以該目的Tag為地址,將讀請(qǐng)求攜帶的源Tag和源端口號(hào)存 儲(chǔ);步驟150.所述目的處理器端口或目的1/0端口的讀/寫(xiě)模塊使用目的Tag替換 讀請(qǐng)求的源Tag后,經(jīng)過(guò)目的處理器接口模塊或目的1/0接口模塊,最終將讀請(qǐng)求發(fā)送至目 的處理器或目的1/0端口相連的1/0設(shè)備;步驟160.所述目的處理器或1/0端口相連的1/0設(shè)備返回響應(yīng)包; 步驟170.所述目的處理器端口或目的1/0端口的讀/寫(xiě)模塊使用響應(yīng)包中的Tag 讀取之前存儲(chǔ)的源Tag和源端口號(hào),并使用該源Tag替換響應(yīng)包的Tag,使用該源端口號(hào)替 換響應(yīng)包的設(shè)備號(hào),發(fā)送至讀/寫(xiě)交叉開(kāi)關(guān)模塊;步驟180.源處理器端口的讀/寫(xiě)模塊接收到讀/寫(xiě)交叉開(kāi)關(guān)模塊轉(zhuǎn)發(fā)的響應(yīng)包 后,清除響應(yīng)包的目的端口號(hào),發(fā)送至源處理器或1/0端口,完成整個(gè)讀數(shù)據(jù)過(guò)程。為實(shí)現(xiàn)本發(fā)明的目的還提供一種所述節(jié)點(diǎn)控制器實(shí)現(xiàn)寫(xiě)數(shù)據(jù)傳輸?shù)姆椒ǎ龇?法,包括下列步驟步驟210.源處理器端口的處理器接口模塊接收源處理器發(fā)出的寫(xiě)指令,傳遞給 源處理器端口的分發(fā)模塊,該分發(fā)模塊通過(guò)查詢(xún)基址寄存器判定該指令為寫(xiě)指令后,將該 寫(xiě)指令發(fā)送給源處理器端口的讀/寫(xiě)模塊;步驟220.所述源處理器端口的讀/寫(xiě)模塊獲取寫(xiě)指令中的全局地址,然后查詢(xún) 節(jié)點(diǎn)控制器內(nèi)各端口的窗口寄存器,若沒(méi)有在任何一個(gè)窗口寄存器中命中,則發(fā)送響應(yīng)包至源處理器端口或I/O端口,同時(shí)響應(yīng)包中的狀態(tài)域的錯(cuò)誤位置位為1 ;若全局地址在窗口 表中命中,則根據(jù)窗口號(hào)生成目的端口號(hào),并使用目的端口號(hào)替換寫(xiě)請(qǐng)求中全局地址的高 卜r+1)l位,使用源窗口號(hào)替換寫(xiě)請(qǐng)求中的設(shè)備號(hào),將寫(xiě)請(qǐng)求發(fā)送至讀/寫(xiě)交叉開(kāi)關(guān);步驟230.讀/寫(xiě)交叉開(kāi)關(guān)模塊根據(jù)寫(xiě)請(qǐng)求的目的端口號(hào),將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)至目的處 理器或目的I/O端口 ;步驟240.所述目的處理器或I/O端口的讀/寫(xiě)模塊清除寫(xiě)請(qǐng)求中的地址高卜 位,并將修改后的寫(xiě)請(qǐng)求經(jīng)過(guò)目的處理器接口模塊或目的I/O接口模塊,最終發(fā)送至目的 處理器或I/O端口相連的I/O設(shè)備,完成整個(gè)寫(xiě)數(shù)據(jù)過(guò)程。為實(shí)現(xiàn)本發(fā)明的目的還提供一種所述節(jié)點(diǎn)控制器實(shí)現(xiàn)直接內(nèi)存訪問(wèn)數(shù)據(jù)傳輸?shù)?方法,所述方法,包括下列步驟步驟310.源處理器端口的直接內(nèi)存訪問(wèn)模塊接收直接內(nèi)存訪問(wèn)描述符,并將該 描述符轉(zhuǎn)換為一系列讀請(qǐng)求的過(guò)程;步驟320.所述源處理器端口的直接內(nèi)存訪問(wèn)模塊接收一系列讀請(qǐng)求返回的響應(yīng) 包,并將響應(yīng)包轉(zhuǎn)換為一系列寫(xiě)請(qǐng)求的過(guò)程;步驟330. —系列寫(xiě)請(qǐng)求被直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)轉(zhuǎn)發(fā)至目的處理器端口的直接 內(nèi)存訪問(wèn)模塊,并寫(xiě)入目的處理器內(nèi)存的過(guò)程。所述步驟310,包括下列步驟步驟311.上電復(fù)位后,直接內(nèi)存訪問(wèn)模塊將用于記錄當(dāng)前直接內(nèi)存訪問(wèn)序號(hào)的 直接內(nèi)存訪問(wèn)序號(hào)計(jì)數(shù)器DMASeq復(fù)位置0,然后等待接收直接內(nèi)存訪問(wèn)描述符;步驟312.接收到直接內(nèi)存訪問(wèn)描述符后,便根據(jù)直接內(nèi)存訪問(wèn)目的起始地址查 詢(xún)各個(gè)處理器端口的窗口寄存器,若未命中任何窗口寄存器,則直接發(fā)送錯(cuò)誤通知到源處 理器;若命中窗口,則初始化三個(gè)計(jì)數(shù)器,分別是長(zhǎng)度計(jì)數(shù)器LengthCnt,使用DMALen作為 初值,源地址計(jì)數(shù)器SrcAddrCnt,使用SrcAddr作為初值和目的地址計(jì)數(shù)器DstAddrCnt,使 用DstAddr作為初值;步驟313.構(gòu)造一個(gè)讀請(qǐng)求,產(chǎn)生讀請(qǐng)求所需的請(qǐng)求序號(hào)srctag,以SrcAddrCnt填 充讀請(qǐng)求所需的地址,以包長(zhǎng)Ien填充讀請(qǐng)求所需的長(zhǎng)度,然后將該讀請(qǐng)求發(fā)送至源處理 器;步驟314.以所述讀請(qǐng)求所需的請(qǐng)求序號(hào)為地址,將DstAddrCnt,DMALen和DMASeq 存入目標(biāo)地址RAM中;步驟 315.置 DstAddrCnt = DstAddrCnt+len ;SrcAddrCnt = SrcAddrCnt+len ; LengthCnt = LengthCnt-Ien0步驟316.如果LengthCnt大于0,則跳轉(zhuǎn)至步驟313 ;否則DMASeq加一,跳轉(zhuǎn)至步 馬聚312ο所述步驟320,包括下列步驟步驟321.源處理器端口的直接內(nèi)存訪問(wèn)模塊接收來(lái)自源處理器系統(tǒng)總線的讀響 應(yīng)包;步驟322.以響應(yīng)包中的序號(hào)srctag為地址,讀取所述目標(biāo)地址RAM,獲取其對(duì)應(yīng) 的直接內(nèi)存訪問(wèn)序號(hào)DMASeq,直接內(nèi)存訪問(wèn)目的地址DstAddrj和直接內(nèi)存訪問(wèn)總長(zhǎng)度 DMALen ;
10
步驟323.以DMASeq為索引,獲取接收計(jì)數(shù)器堆中的接收計(jì)數(shù)器RecvLengthCnt ;步驟324.構(gòu)造一個(gè)寫(xiě)請(qǐng)求,該請(qǐng)求的地址域高位由DstAddrj對(duì)應(yīng)的窗口 號(hào)填充,地址其他位由DstAddr_i的相應(yīng)位填充;該請(qǐng)求攜帶的數(shù)據(jù)負(fù)載為讀響應(yīng)包攜帶 的數(shù)據(jù)負(fù)載;該請(qǐng)求攜帶的長(zhǎng)度域由讀響應(yīng)包攜帶的長(zhǎng)度域Ien填充,將該寫(xiě)請(qǐng)求發(fā)送至 直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊;步驟325.置 RecvLengthCnt = RecvLengthCnt+len,并回寫(xiě)至 DMASeq 對(duì)應(yīng)的接收 計(jì)數(shù)器堆中;步驟326.若RecvLengthCnt = = DMALen,則跳轉(zhuǎn)至步驟327 ;否則,跳轉(zhuǎn)至步驟 321 ;步驟327.構(gòu)造一個(gè)寫(xiě)請(qǐng)求,該請(qǐng)求的含義是通知目的處理器的直接內(nèi)存訪問(wèn)模 塊,當(dāng)前直接內(nèi)存訪問(wèn)請(qǐng)求完成;該請(qǐng)求的地址域只填充高位,由DstAddr_i對(duì)應(yīng)的 窗口號(hào)填充;該請(qǐng)求攜帶的長(zhǎng)度域置為1 ;該請(qǐng)求攜帶的數(shù)據(jù)域?yàn)榭?;該?qǐng)求的設(shè)備號(hào)被填 充為最大窗口號(hào)加一,將該寫(xiě)請(qǐng)求發(fā)送至直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)。所述步驟330,包括下列步驟步驟331.直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊根據(jù)其地址高位攜帶的目的窗口號(hào),轉(zhuǎn)發(fā) 至目的處理器端口的直接內(nèi)存訪問(wèn)模塊;步驟332.目的處理器端口的直接內(nèi)存訪問(wèn)模塊將寫(xiě)請(qǐng)求的高位清除;步驟333.若寫(xiě)請(qǐng)求的設(shè)備號(hào)為最大窗口號(hào)加一,則該請(qǐng)求為直接內(nèi)存訪問(wèn)完成 事件包,跳轉(zhuǎn)至步驟334 ;否則跳轉(zhuǎn)至步驟335 ;步驟334.獲取目的端口提供的完成事件隊(duì)列地址,將該地址填入到寫(xiě)請(qǐng)求的地 址域;步驟335.將寫(xiě)請(qǐng)求發(fā)送至目的處理器。為實(shí)現(xiàn)本發(fā)明的目的還提供一種所述節(jié)點(diǎn)控制器的高密度多處理器系統(tǒng),所述系 統(tǒng),包括多個(gè)節(jié)點(diǎn),其中所述節(jié)點(diǎn),包括多個(gè)處理器和一個(gè)所述節(jié)點(diǎn)控制器。所述節(jié)點(diǎn)控制器,通過(guò)支持全局地址空間來(lái)實(shí)現(xiàn)節(jié)點(diǎn)內(nèi)資源的共享,其包括全局 地址空間專(zhuān)用寄存器,其中所述全局地址空間專(zhuān)用寄存器設(shè)置在每個(gè)處理器端口中,節(jié)點(diǎn)控制器使用靜態(tài)分 配的方式隔離各個(gè)端口的地址空間,每個(gè)地址窗口最大為 其中MAXBIT是系統(tǒng)地址位寬。本發(fā)明的有益效果是1.實(shí)現(xiàn)多個(gè)處理器間松散耦合互連,相比于傳統(tǒng)的SMP或ccNUMA系統(tǒng),不僅增強(qiáng) 了節(jié)點(diǎn)的可擴(kuò)展性,提高節(jié)點(diǎn)密度,而且單一從處理器的故障不會(huì)導(dǎo)致系統(tǒng)停頓,提高了系 統(tǒng)可靠性;2.支持全局統(tǒng)一地址空間,對(duì)節(jié)點(diǎn)內(nèi)的內(nèi)存和I/O設(shè)備進(jìn)行統(tǒng)一編址,內(nèi)存和I/O 設(shè)備都對(duì)應(yīng)一系列的全局地址,節(jié)點(diǎn)內(nèi)每個(gè)處理器都可以通過(guò)使用攜帶全局地址的Load/Store指令實(shí)現(xiàn)對(duì)節(jié)點(diǎn)內(nèi)存和I/O設(shè)備的訪問(wèn),即實(shí)現(xiàn)節(jié)點(diǎn)內(nèi)處理器對(duì)節(jié)點(diǎn)內(nèi)存和I/O設(shè)備 的共享;3.控制器為每個(gè)處理器端口設(shè)置DMA引擎,實(shí)現(xiàn)處理器間高效的數(shù)據(jù)傳輸,且DMA 引擎的設(shè)計(jì)可以容忍系統(tǒng)總線的亂序響應(yīng)特性;4.通過(guò)在控制器內(nèi)部分別為L(zhǎng)oad/Store和DMA設(shè)置兩個(gè)交叉開(kāi)關(guān),減少大塊數(shù)據(jù) 和短數(shù)據(jù)傳輸?shù)幕_,提高通信效率;5.控制器內(nèi)部的交叉開(kāi)關(guān)采用雙虛通道設(shè)計(jì),數(shù)據(jù)對(duì)虛通道的使用,與目的端口 號(hào)的奇偶進(jìn)行綁定,實(shí)現(xiàn)了同源同目的數(shù)據(jù)的保序,并大大降低隊(duì)頭阻塞,提高了傳輸效 率;6.控制器對(duì)外接口采用標(biāo)準(zhǔn)工業(yè)總線,且內(nèi)部實(shí)現(xiàn)完整的PCI拓?fù)洌瑸槭褂蒙逃?設(shè)備提供保證;7.由于系統(tǒng)的外設(shè)發(fā)現(xiàn)配置由主處理器完成,因此只要保證主處理器是主流處理 器,就可以最大程度兼容商用設(shè)備。即使從處理器是新型處理器,也可以實(shí)現(xiàn)從處理器對(duì)外 設(shè)的訪問(wèn),進(jìn)而降低了系統(tǒng)升級(jí)成本,并在一定程度上兼容異構(gòu)處理器。
圖1是本發(fā)明的節(jié)點(diǎn)控制器的內(nèi)部結(jié)構(gòu)示意圖;圖2A是本發(fā)明的節(jié)點(diǎn)控制器內(nèi)部交叉開(kāi)關(guān)結(jié)構(gòu)框圖;圖2B是本發(fā)明的節(jié)點(diǎn)控制器內(nèi)部交叉開(kāi)關(guān)結(jié)構(gòu)框圖;圖3是本發(fā)明的節(jié)點(diǎn)控制器實(shí)現(xiàn)Load操作的步驟流程圖;圖4是本發(fā)明的節(jié)點(diǎn)控制器實(shí)現(xiàn)Store操作的步驟流程圖;圖5是本發(fā)明中DMA操作第一個(gè)階段的執(zhí)行步驟流程圖;圖6是本發(fā)明中DMA操作第二階段的執(zhí)行步驟流程圖;圖7是本發(fā)明中DMA操作第三階段的執(zhí)行步驟流程圖;圖8是本發(fā)明的高密度多處理器系統(tǒng)的結(jié)構(gòu)示意圖;圖9是本發(fā)明的節(jié)點(diǎn)控制器所在節(jié)點(diǎn)的總線拓?fù)鋱D;圖10是本發(fā)明的節(jié)點(diǎn)控制器各個(gè)端口全局地址分配及窗口寄存器的示意圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì) 本發(fā)明的一種高密度多處理器系統(tǒng)及其節(jié)點(diǎn)控制器進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處 所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明的一種高密度多處理器系統(tǒng)及其節(jié)點(diǎn)控制器,實(shí)現(xiàn)了多個(gè)處理器的高速互 連,提高多處理器系統(tǒng)的密度,并實(shí)現(xiàn)多個(gè)處理器對(duì)商品化外設(shè)的共享訪問(wèn)。下面結(jié)合上述目的詳細(xì)說(shuō)明的本發(fā)明的節(jié)點(diǎn)控制器,圖1是本發(fā)明的節(jié)點(diǎn)控制器 的內(nèi)部結(jié)構(gòu)示意圖,如圖1所示,所述節(jié)點(diǎn)控制器,包括多個(gè)處理器端口 1,分別與多個(gè)處理器連接。處理器端口在邏輯功能上分為兩類(lèi),一類(lèi)稱(chēng)為主處理器端口,主處理器除負(fù)責(zé)具 體計(jì)算任務(wù)的運(yùn)行外,更重要的是負(fù)責(zé)對(duì)外圍設(shè)備的發(fā)現(xiàn)和初始化過(guò)程,該類(lèi)端口在節(jié)點(diǎn)
12控制器中只有一個(gè);一類(lèi)稱(chēng)為從處理器端口,從處理器只負(fù)責(zé)具體計(jì)算任務(wù)的運(yùn)行,該類(lèi)端 口在節(jié)點(diǎn)控制器中可以有多個(gè)。所述處理器端口 1,包括處理器接口模塊11,分為主處理器接口模塊111和從處理器接口模塊112 ;所述主處理器接口模塊111,負(fù)責(zé)與主處理器系統(tǒng)總線的掛接,包括所有總線鏈路 層功能,通過(guò)一窗口寄存器記錄該端口的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線終端(Endpoint) 設(shè)備的配置空間和橋(Bridge)設(shè)備的配置空間。如使用AMD處理器,則主處理器接口模塊 為Hyper Transport控制器,該端口在AMD處理器看來(lái)是一個(gè)HT終端設(shè)備和一個(gè)HT橋接 設(shè)備。所述從處理器接口模塊112,負(fù)責(zé)與從處理器系統(tǒng)總線的掛接,包括所有總線鏈路 層功能,通過(guò)一窗口寄存器記錄該端口的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線終端(Endpoint) 設(shè)備的配置空間。如使用AMD處理器,則主處理器接口模塊為Hyper Transport控制器,該 端口在AMD處理器看來(lái)是一個(gè)HT終端設(shè)備。分發(fā)模塊12,負(fù)責(zé)將來(lái)自處理器接口模塊的數(shù)據(jù)按照所屬功能分發(fā)給相應(yīng)的處理 模塊,如與直接內(nèi)存訪問(wèn)相關(guān)的數(shù)據(jù)分發(fā)至直接內(nèi)存訪問(wèn)模塊,與讀/寫(xiě)相關(guān)的數(shù)據(jù)分發(fā) 至讀/寫(xiě)模塊,與中斷相關(guān)的數(shù)據(jù)分發(fā)給IOAPIC模塊。數(shù)據(jù)所屬功能的區(qū)分通過(guò)兩個(gè)途 徑,一方面通過(guò)設(shè)備配置空間的基址寄存器(Base Address Register,BAR)地址窗口,另一 方面為不同功能模塊向系統(tǒng)總線申請(qǐng)不同的設(shè)備號(hào)(Unit ID),然后根據(jù)數(shù)據(jù)所屬設(shè)備號(hào) (Unit ID)實(shí)現(xiàn)功能區(qū)分;仲裁模塊13,負(fù)責(zé)將來(lái)自各處理模塊(即直接內(nèi)存訪問(wèn)模塊、讀/寫(xiě)模塊和I/O高 級(jí)中斷控制器模塊)的數(shù)據(jù)(如直接內(nèi)存訪問(wèn)數(shù)據(jù),中斷數(shù)據(jù),讀/寫(xiě)數(shù)據(jù)等)仲裁傳遞給 處理器接口模塊,實(shí)現(xiàn)多種數(shù)據(jù)在處理器接口總線上的共享傳輸;DMA模塊14,每個(gè)處理器端口均包含該模塊,它負(fù)責(zé)實(shí)現(xiàn)數(shù)據(jù)以直接內(nèi)存訪問(wèn) (DMA)方式在處理器間的傳輸,DMA引擎包括下傳和上傳兩個(gè)子模塊。其中下傳子模塊負(fù)責(zé) 接收DMA描述符,讀取DMA負(fù)載數(shù)據(jù),并將數(shù)據(jù)發(fā)送至DMA交叉開(kāi)關(guān)模塊;上傳子模塊負(fù)責(zé) 從DMA交叉開(kāi)關(guān)模塊接收DMA數(shù)據(jù),并將數(shù)據(jù)寫(xiě)入目標(biāo)地址區(qū)域。Load/Store模塊15,每個(gè)處理器端口都包含該模塊,它負(fù)責(zé)實(shí)現(xiàn)數(shù)據(jù)以Load/ Store方式在處理器間的傳輸,Load/Store模塊包括下傳和上傳兩個(gè)子模塊。其中下傳子 模塊負(fù)責(zé)從分發(fā)模塊接收Load/Store請(qǐng)求以及Load響應(yīng)數(shù)據(jù),并發(fā)送至Load/Store交叉 開(kāi)關(guān);上傳模塊負(fù)責(zé)從Load/Store交叉開(kāi)關(guān)接收數(shù)據(jù),并發(fā)送至目的地址。該模塊實(shí)現(xiàn)所 屬節(jié)點(diǎn)內(nèi)的內(nèi)存及設(shè)備資源的共享。1/0 高級(jí)可編程中斷控制器(1/0 Advanced Programmable Interrupt Controller, I0APIC)模塊16,每個(gè)處理器端口均包含該模塊,它負(fù)責(zé)實(shí)現(xiàn)對(duì)應(yīng)端口的 IOAPIC中斷控制。一個(gè)1/0端口 2,是1/0總線的根設(shè)備,例如1/0總線為PCI-Express時(shí),該1/0端 口就是 PCI-Express Root Complex。所述1/0端口 2包括Load/Store模塊22和1/0接口模塊21。其中1/0端口中 的Load/Store模塊與處理器端口中的Load/Store模塊功能結(jié)構(gòu)相同;1/0接口模塊負(fù)責(zé) 實(shí)現(xiàn)1/0總線根設(shè)備邏輯,通過(guò)一窗口寄存器記錄該端口的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線包格式與I/O總線包格式間的互相轉(zhuǎn)換。例如,使用PCI-Express總線,則該模塊實(shí)現(xiàn) PCI-Express Root Complex的物理層、鏈路層和事務(wù)層協(xié)議,如果選擇HT作為系統(tǒng)總線,則 該模塊實(shí)現(xiàn)HT到PCI-Express之間的包格式轉(zhuǎn)換。圖2A是本發(fā)明的節(jié)點(diǎn)控制器內(nèi)部交叉開(kāi)關(guān)結(jié)構(gòu)框圖,如圖2A所示,所述直接內(nèi)存 訪問(wèn)(Direct Memory Access,DMA)交叉開(kāi)關(guān)模塊3,負(fù)責(zé)實(shí)現(xiàn)各處理器端口間DMA數(shù)據(jù)的 交換,交叉開(kāi)關(guān)結(jié)構(gòu)為端口間互連提供了較好的擴(kuò)展性。DMA交叉開(kāi)關(guān)模塊為每個(gè)處理器端 口設(shè)置兩個(gè)虛通道緩沖區(qū),一個(gè)發(fā)送緩沖區(qū),核心使用一個(gè)2NX N的交叉開(kāi)關(guān)(N為交叉開(kāi) 關(guān)互連的處理器端口數(shù)目)。數(shù)據(jù)對(duì)虛通道緩沖區(qū)的選擇符合如下規(guī)則目標(biāo)處理器端口 號(hào)為奇數(shù)的進(jìn)入1號(hào)接收虛通道緩沖區(qū),目標(biāo)處理器端口號(hào)為偶數(shù)的進(jìn)入0號(hào)接收虛通道 緩沖區(qū)。這樣的優(yōu)勢(shì)是一方面可以實(shí)現(xiàn)同源同目的DMA數(shù)據(jù)間保序,另一方面減少隊(duì)頭阻 塞,提高交叉開(kāi)關(guān)的數(shù)據(jù)注入率。圖2B是本發(fā)明的節(jié)點(diǎn)控制器內(nèi)部交叉開(kāi)關(guān)結(jié)構(gòu)框圖,如圖2B所示,所述讀/寫(xiě) (Load/Store)交叉開(kāi)關(guān)模塊4,負(fù)責(zé)實(shí)現(xiàn)各處理器端口間,以及處理器端口和1/0端口間 Load/Store數(shù)據(jù)的交換,交叉開(kāi)關(guān)結(jié)構(gòu)為端口間互連提供了較好的擴(kuò)展性。Load/Store 交叉開(kāi)關(guān)模塊為每個(gè)處理器及1/0端口設(shè)置兩個(gè)虛通道接收虛通道緩沖區(qū),一個(gè)發(fā)送緩沖 區(qū),核心使用一個(gè)2(N+1)X(N+1)的交叉開(kāi)關(guān)(N為交叉開(kāi)關(guān)互連的處理器端口數(shù)目)。數(shù) 據(jù)對(duì)虛通道緩沖區(qū)的選擇符合如下規(guī)則目標(biāo)處理器端口號(hào)為奇數(shù)的進(jìn)入1號(hào)接收虛通道 緩沖區(qū),目標(biāo)處理器端口號(hào)為偶數(shù)的進(jìn)入0號(hào)接收虛通道緩沖區(qū)。這樣的優(yōu)勢(shì)是一方面可 以實(shí)現(xiàn)同源同目的Load/Store操作間保序,另一方面減少隊(duì)頭阻塞,提高交叉開(kāi)關(guān)的數(shù)據(jù) 注入率。較佳地,由于對(duì)于Load/Store數(shù)據(jù)的交換,數(shù)據(jù)長(zhǎng)度短,因此Load/Store交叉開(kāi) 關(guān)的接收發(fā)送緩沖區(qū)較小,而直接內(nèi)存訪問(wèn)數(shù)據(jù)長(zhǎng)度較長(zhǎng),因此DMA交叉開(kāi)關(guān)的接收發(fā)送 緩沖區(qū)較大,將Load/Store數(shù)據(jù)和直接內(nèi)存訪問(wèn)數(shù)據(jù)分開(kāi)進(jìn)行交換,可以很好的避免長(zhǎng)數(shù) 據(jù)造成的隊(duì)頭阻塞,減少兩類(lèi)數(shù)據(jù)的互相干擾。相應(yīng)于本發(fā)明的一種高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,還提供所述節(jié)點(diǎn)控制器 實(shí)現(xiàn)讀/寫(xiě)(Load/Store)數(shù)據(jù)傳輸?shù)姆椒?。本發(fā)明的節(jié)點(diǎn)控制器對(duì)所屬節(jié)點(diǎn)內(nèi)的內(nèi)存和1/0設(shè)備進(jìn)行統(tǒng)一編址,內(nèi)存和1/0 設(shè)備都對(duì)應(yīng)一系列的全局地址,節(jié)點(diǎn)內(nèi)每個(gè)處理器都可以通過(guò)使用攜帶全局地址的Load/ Store指令實(shí)現(xiàn)對(duì)節(jié)點(diǎn)內(nèi)存和1/0設(shè)備的訪問(wèn),即Load/Store操作實(shí)現(xiàn)了節(jié)點(diǎn)內(nèi)處理器對(duì) 節(jié)點(diǎn)內(nèi)存和1/0設(shè)備的共享。Load是指源處理器端口或源1/0端口,從目的處理器的內(nèi)存 或1/0設(shè)備中讀取數(shù)據(jù)的過(guò)程。圖3是本發(fā)明的節(jié)點(diǎn)控制器實(shí)現(xiàn)Load操作的步驟流程圖, 如圖3所示1.源處理器發(fā)出Load指令,該指令首先被源處理器端口的處理器接口模塊接收, 傳遞給源處理器端口的分發(fā)模塊,然后該分發(fā)模塊通過(guò)查詢(xún)BAR判定該指令為L(zhǎng)oad指令, 然后將該Load指令發(fā)送給源處理器端口的Load/Store模塊;所述Load指令,包括發(fā)起Load請(qǐng)求的設(shè)備號(hào)、請(qǐng)求序號(hào)、讀取數(shù)據(jù)長(zhǎng)度及數(shù)據(jù)所 在全局地址,具體格式為
14 2. Load/Store模塊獲取Load指令中的全局地址,然后查詢(xún)節(jié)點(diǎn)控制器內(nèi)各端口 的窗口寄存器(存在于處理器和I/O接口模塊中),若沒(méi)有在任何一個(gè)窗口寄存器中命中, 則發(fā)送響應(yīng)包至源處理器或I/O端口,同時(shí)響應(yīng)包中的狀態(tài)域的錯(cuò)誤位置位為1。若全局地 址在窗口表中命中,則根據(jù)窗口號(hào)生成目的端口號(hào),并使用目的端口號(hào)替換Load請(qǐng)求中全 局地址的高卜位,使用源窗口號(hào)替換Load請(qǐng)求中的攜帶的設(shè)備號(hào)(Unit ID 系統(tǒng)總 線中用以區(qū)分不同設(shè)備 3. Load/Store交叉開(kāi)關(guān)模塊以Load請(qǐng)求的目的端口號(hào)作為路由信息,將Load請(qǐng) 求轉(zhuǎn)發(fā)至目的處理器端口或目的1/0端口 ;4.目的處理器端口或目的1/0端口的Load/Store模塊為該Load請(qǐng)求生成目的總 線請(qǐng)求序號(hào)目的Tag,并以該目的Tag為地址,將Load請(qǐng)求攜帶的源Tag和源端口號(hào)存儲(chǔ);其中,步驟3是為了描述數(shù)據(jù)在控制器內(nèi)部被交換的過(guò)程,步驟4是一個(gè)保護(hù)現(xiàn)場(chǎng) 的過(guò)程,由于Load請(qǐng)求會(huì)被發(fā)送到目的總線,從源總線攜帶來(lái)的Tag就不能使用了,而要使 用目的總線的Tag,Tag的管理是與單條總線綁定的。5.目的處理器端口或目的1/0端口的Load/Store模塊使用目的Tag替換Load請(qǐng) 求的源Tag后,經(jīng)過(guò)目的處理器接口模塊或目的1/0接口模塊,最終將Load請(qǐng)求發(fā)送至目 的處理器或目的1/0端口相連的1/0設(shè)備;6.目的處理器或1/0端口相連的1/0設(shè)備返回響應(yīng)包,包括對(duì)應(yīng)Load請(qǐng)求的設(shè)備 號(hào)和請(qǐng)求序號(hào),返回的數(shù)據(jù)狀態(tài)及返回的數(shù)據(jù)負(fù)載,所述響應(yīng)包的格式為 7.目的處理器端口或目的1/0端口的Load/Store模塊使用響應(yīng)包中的Tag讀取 之前存儲(chǔ)的源Tag和源端口號(hào),并使用該源Tag替換響應(yīng)包的Tag,使用該源端口號(hào)替換響 應(yīng)包的設(shè)備號(hào)(作為響應(yīng)包的目的端口號(hào)),發(fā)送至Load/Store交叉開(kāi)關(guān)模塊;8.源處理器端口的Load/Store模塊接收到Load/Store交叉開(kāi)關(guān)模塊轉(zhuǎn)發(fā)的響 應(yīng)包后,只需清除響應(yīng)包的目的端口號(hào)(響應(yīng)包的設(shè)備號(hào)),即可發(fā)送至源處理器或1/0端 口,完成整個(gè)Load流程。Store,是指源處理器端口或源1/0端口,向目的處理器的內(nèi)存或1/0設(shè)備寫(xiě)入數(shù) 據(jù)的過(guò)程。圖4是本發(fā)明的節(jié)點(diǎn)控制器實(shí)現(xiàn)Store操作的步驟流程圖,如圖4所示1.源處理器發(fā)出Store指令,該指令首先被源處理器端口的處理器接口模塊接 收,傳遞給源處理器端口的分發(fā)模塊,然后該分發(fā)模塊通過(guò)查詢(xún)BAR (基址寄存器)判定該 指令為Store指令,然后將該Store指令發(fā)送給源處理器端口的Load/Store模塊;所述Store指令,包括發(fā)起Store請(qǐng)求的設(shè)備號(hào)、請(qǐng)求序號(hào)、寫(xiě)入數(shù)據(jù)長(zhǎng)度及存儲(chǔ) 數(shù)據(jù)的全局地址,所述Store指令的格式為
2.源處理器端口的Load/Store模塊獲取Store指令中的全局地址,然后查詢(xún)節(jié)點(diǎn) 控制器內(nèi)各端口的窗口寄存器(存在于處理器和I/O接口模塊中),若沒(méi)有在任何一個(gè)窗口 寄存器中命中,則發(fā)送響應(yīng)包至源處理器端口或I/O端口,同時(shí)響應(yīng)包中的狀態(tài)域的錯(cuò)誤 位置位為1。若全局地址在窗口表中命中,則根據(jù)窗口號(hào)生成目的端口號(hào),并使用目的端口 號(hào)替換Store請(qǐng)求中全局地址的高p。4"+1)l位,使用源窗口號(hào)替換Store請(qǐng)求中的設(shè)備號(hào),將 Store請(qǐng)求發(fā)送至Load/Store交叉開(kāi)關(guān)。3. Load/Store交叉開(kāi)關(guān)模塊根據(jù)Store請(qǐng)求的目的端口號(hào),將Store請(qǐng)求轉(zhuǎn)發(fā)至 目的處理器或目的1/0端口。4.目的處理器或1/0端口的Load/Store模塊清除Store請(qǐng)求中的地址高
位,并將修改后的Store請(qǐng)求,經(jīng)過(guò)目的處理器接口模塊或目的1/0接口模塊,最終發(fā)送至 目的處理器或1/0端口相連的1/0設(shè)備,完成整個(gè)Store過(guò)程。相應(yīng)于本發(fā)明的一種高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,還提供所述節(jié)點(diǎn)控制器 實(shí)現(xiàn)直接內(nèi)存訪問(wèn)(DMA)數(shù)據(jù)傳輸?shù)姆椒?。本發(fā)明的DMA數(shù)據(jù)傳輸過(guò)程是處理器間的直接內(nèi)存訪問(wèn)(DMA)過(guò)程,具體說(shuō)是一 個(gè)處理器將大塊本地?cái)?shù)據(jù)直接傳輸?shù)搅硪粋€(gè)處理器內(nèi)存中的過(guò)程。該過(guò)程在源處理器端是 一系列的Load請(qǐng)求,在目的處理器端是一系列的Store請(qǐng)求。DMA描述符包括三個(gè)域,分別 是源數(shù)據(jù)所在起始地址SrcAddr,所要傳輸?shù)臄?shù)據(jù)長(zhǎng)度DMALen,以及數(shù)據(jù)所要寫(xiě)入的目的 起始地址DstAddr,其中SrcAddr為本地地址,DstAddr為全局地址。源處理器必須使用單 一的Store請(qǐng)求將DMA描述符寫(xiě)入DMA模塊中,以保證DMA操作的原子性。所述DMA描述 符的具體結(jié)構(gòu)為 DMA的操作流程分為三個(gè)階段,第一個(gè)階段是源處理器端口的DMA模塊接收DMA描 述符,并將該描述符轉(zhuǎn)換為一系列Load請(qǐng)求的過(guò)程;第二個(gè)階段是源處理器端口的DMA模 塊接收一系列Load請(qǐng)求返回的響應(yīng)包,并將響應(yīng)包轉(zhuǎn)換為一系列Store請(qǐng)求的過(guò)程;第三 個(gè)階段是一系列Store包被DMA交叉開(kāi)關(guān)轉(zhuǎn)發(fā)至目的處理器端口的DMA模塊,并寫(xiě)入目的 處理器內(nèi)存的過(guò)程。這三個(gè)階段構(gòu)成DMA操作的三個(gè)流水級(jí)(Pipeline Stage),并行流水 執(zhí)行。本發(fā)明所述的DMA流程可以容忍第一階段中多個(gè)Load請(qǐng)求被亂序響應(yīng)的情況(如 HT總線會(huì)亂序響應(yīng)Load請(qǐng)求)。圖5是本發(fā)明中DMA操作第一個(gè)階段的執(zhí)行步驟流程圖,如圖5所示,其過(guò)程為1.上電復(fù)位后,DMA模塊將用于記錄當(dāng)前DMA序號(hào)的DMA序號(hào)計(jì)數(shù)器DMASeq復(fù)位 置0,然后等待接收DMA描述符;2.接收到DMA描述符后,便根據(jù)DMA目的起始地址DstAddr查詢(xún)各個(gè)處理器端口 的窗口寄存器。若未命中任何窗口寄存器,則直接發(fā)送錯(cuò)誤通知到源處理器;若命中窗口, 則初始化三個(gè)計(jì)數(shù)器,分別是長(zhǎng)度計(jì)數(shù)器LengthCnt,使用DMALen作為初值;源地址計(jì)數(shù)器
16SrcAddrCnt,使用SrcAddr作為初值;目的地址計(jì)數(shù)器DstAddrCnt,使用DstAddr作為初 值;3.構(gòu)造一個(gè)Load請(qǐng)求,首先產(chǎn)生Load請(qǐng)求所需的請(qǐng)求序號(hào)srctag,以 SrcAddrCnt填充Load請(qǐng)求所需的地址,以包長(zhǎng)Ien填充Load請(qǐng)求所需的長(zhǎng)度,然后將該 Load請(qǐng)求發(fā)送至源處理器;4.以srctag為地址,將DstAddrCnt,DMALen和DMASeq存入目標(biāo)地址RAM中,目 標(biāo)地址RAM的結(jié)構(gòu)為 5.置 DstAddrCnt = DstAddrCnt+len ;SrcAddrCnt = SrcAddrCnt+len ;LengthCnt =LengthCnt-Ien06.如果LengthCnt大于0,則跳轉(zhuǎn)至步驟3 ;否則DMASeq加一,跳轉(zhuǎn)至步驟2。圖6是本發(fā)明中DMA操作第二階段的執(zhí)行步驟流程圖,如圖6所示,其過(guò)程為1.源處理器端口的DMA模塊接收來(lái)自源處理器系統(tǒng)總線的Load響應(yīng)包。2.以響應(yīng)包中的序號(hào)srctag為地址,讀取目標(biāo)地址RAM,獲取其對(duì)應(yīng)的DMA序號(hào) DMASeq, DMA 目的地址 DstAddr_i 和 DMA 總長(zhǎng)度 DMALen。3.以DMASeq為索引,獲取接收計(jì)數(shù)器堆中的接收計(jì)數(shù)器RecvLengthCnt,接收機(jī) 數(shù)據(jù)器堆的格式為
r接收計(jì)數(shù)器0 4.構(gòu)造一個(gè)Store請(qǐng)求,該請(qǐng)求的地址域高位由DstAddrj對(duì)應(yīng)的窗口號(hào) 填充,地址其他位由DstAddr_i的相應(yīng)位填充;該請(qǐng)求攜帶的數(shù)據(jù)負(fù)載為L(zhǎng)oad響應(yīng)包攜帶 的數(shù)據(jù)負(fù)載;該請(qǐng)求攜帶的長(zhǎng)度域由Load響應(yīng)包攜帶的長(zhǎng)度域Ien填充,將該Store請(qǐng)求 發(fā)送至DMA交叉開(kāi)關(guān)模塊;5.置 RecvLengthCnt = RecvLengthCnt+len,并回寫(xiě)至 DMASeq 對(duì)應(yīng)的接收計(jì)數(shù)器 堆中。6.若RecvLengthCnt = DMALen,則跳轉(zhuǎn)至步驟7 ;否則,跳轉(zhuǎn)至步驟1。7.構(gòu)造一個(gè)Store請(qǐng)求,該請(qǐng)求的含義是通知目的處理器的DMA模塊,當(dāng)前DMA請(qǐng) 求完成。該請(qǐng)求的地址域只填充高h(yuǎn)r1”位,由DstAddr_i對(duì)應(yīng)的窗口號(hào)填充;該請(qǐng)求攜帶的長(zhǎng)度域置為1 ;該請(qǐng)求攜帶的數(shù)據(jù)域?yàn)榭眨辉撜?qǐng)求的設(shè)備號(hào)被填充為最大窗口號(hào)加一,將 該Store請(qǐng)求發(fā)送至DMA交叉開(kāi)關(guān)。圖7是本發(fā)明中DMA操作第三階段的執(zhí)行步驟流程圖,如圖7所示,其過(guò)程為1. DMA交叉開(kāi)關(guān)模塊根據(jù)其地址高位攜帶的目的窗口號(hào),轉(zhuǎn)發(fā)至目的處理器端口 的DMA模塊;2.目的處理器端口的DMA模塊將Store請(qǐng)求的高卜4"+1>1位清除;3.若Store請(qǐng)求的設(shè)備號(hào)為最大窗口號(hào)加一,則該請(qǐng)求為DMA完成事件包,跳轉(zhuǎn)至 步驟4;否則跳轉(zhuǎn)至步驟5。4.獲取目的端口提供的完成事件隊(duì)列地址,將該地址填入到Store請(qǐng)求的地址 域。5.將Store請(qǐng)求發(fā)送至目的處理器。在本發(fā)明中,只對(duì)于純粹的數(shù)據(jù)傳輸?shù)膬煞N類(lèi)型的傳輸方法進(jìn)行了描述,但用于 控制目的的還有中斷相關(guān)數(shù)據(jù),中斷相關(guān)數(shù)據(jù)的產(chǎn)生屬于標(biāo)準(zhǔn)流程,所以本發(fā)明沒(méi)有進(jìn)行 詳細(xì)的描述。相應(yīng)于本發(fā)明的一種高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,還提供一種高密度多處 理器系統(tǒng),所述系統(tǒng)包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多臺(tái)處理器和一個(gè)節(jié)點(diǎn)控制器,所述節(jié)點(diǎn) 控制器的結(jié)構(gòu)和數(shù)據(jù)傳輸方法在上面已經(jīng)說(shuō)明,在此不再一一贅述。本發(fā)明所述節(jié)點(diǎn)控制器所在的節(jié)點(diǎn)中,所有處理器均為主設(shè)備,均會(huì)獨(dú)立發(fā)起對(duì) 節(jié)點(diǎn)控制器的設(shè)備發(fā)現(xiàn)過(guò)程。由于主處理器負(fù)責(zé)所有節(jié)點(diǎn)外設(shè)的配置,因此主處理器與從 處理器的設(shè)備發(fā)現(xiàn)過(guò)程不同。從處理器的設(shè)備發(fā)現(xiàn)及配置過(guò)程1. BIOS啟動(dòng)后,便探查從處理器端口的系統(tǒng)總線終端設(shè)備,讀取其配置空間,配置 BAR寄存器。2.從處理器端口的系統(tǒng)總線終端設(shè)備返回設(shè)備搜索、及功能搜索完成通知,完成 BIOS的設(shè)備發(fā)現(xiàn)過(guò)程。3. BIOS讀取從處理器端口的端口號(hào)i。4.根據(jù)從處理器本地內(nèi)存的大小配置窗口 i+Ι的GAS_START和GAS_END寄存器, 完成整個(gè)從處理器對(duì)節(jié)點(diǎn)控制器的配置過(guò)程。主處理器的設(shè)備發(fā)現(xiàn)及配置過(guò)程1. BIOS啟動(dòng)后,便探查主處理器端口的系統(tǒng)總線終端設(shè)備(主處理器系統(tǒng)總線0 的設(shè)備0),讀取其配置空間,配置BAR寄存器。2.探查主處理器端口的系統(tǒng)總線橋設(shè)備(主處理器系統(tǒng)總線0的設(shè)備1),讀取其 配置空間。3.通過(guò)系統(tǒng)總線橋設(shè)備繼續(xù)向下搜索,發(fā)現(xiàn)節(jié)點(diǎn)控制器1/0端口內(nèi)的1/0總線根 設(shè)備(Root Complex)。4.最后通過(guò)1/0總線根設(shè)備進(jìn)行標(biāo)準(zhǔn)PCI設(shè)備發(fā)現(xiàn)過(guò)程,配置各級(jí)設(shè)備的BAR寄 存器,完成整個(gè)設(shè)備發(fā)現(xiàn)過(guò)程。5.完成設(shè)備發(fā)現(xiàn)后,BIOS根據(jù)主處理器本地內(nèi)存大小,配置窗口 0的MEM_START 和MEM_END寄存器,配置窗口 1的GAS_START和GAS_END寄存器值得注意的是,窗口 1的GAS_START和GAS_END相對(duì)于窗口 1上邊界的偏移分別等于MEM_START和MEM_END。根據(jù)外設(shè)申請(qǐng)空間的大小,配置窗口 0的DEV_START和DEV_END寄存器和窗口 (N+2)的 GAS_START 和 GAS_END 寄存器,值得注意的是,窗 口(N+2)的 GAS_START 和 GAS_END 相對(duì)于窗口 N+2上邊界的偏移分別等于DEV_START和DEV_END。圖8是本發(fā)明的高密度多處理器系統(tǒng)的結(jié)構(gòu)示意圖,如圖8所示,該節(jié)點(diǎn)包含N個(gè) 處理器單元,包括唯一的主處理器和N-I個(gè)從處理器,但從處理器不局限于單個(gè)處理器,也 可以是使用SMP/NUMA結(jié)構(gòu)互連的多個(gè)處理器,節(jié)點(diǎn)控制器使用處理器的系統(tǒng)總線(如AMD 處理器的HT總線,Intel的QPI總線)與各類(lèi)處理器相連。該節(jié)點(diǎn)包含若干外圍設(shè)備,外 圍設(shè)備通過(guò)I/O總線(如PCI-Express總線)與節(jié)點(diǎn)控制器相連。這里所述的從處理器并 不等同于一般意義上的協(xié)處理器概念,從處理器的計(jì)算任務(wù)并不依靠主處理器分配,而是 可以獨(dú)立部署,因此從處理器和主處理器邏輯功能上的差別只存在于設(shè)備發(fā)現(xiàn)上,在具體 任務(wù)執(zhí)行和資源共享方面并無(wú)管理者與被管理者關(guān)系。本發(fā)明的節(jié)點(diǎn)控制器在處理器的角度看來(lái)是設(shè)備,圖9是本發(fā)明的節(jié)點(diǎn)控制器所 在節(jié)點(diǎn)的總線拓?fù)鋱D,如圖9所示,在從處理器的角度,節(jié)點(diǎn)控制器是系統(tǒng)總線的終端設(shè)備 (Endpoint),該設(shè)備的配置空間具有三個(gè)基地址寄存器(BAR),分別對(duì)應(yīng)節(jié)點(diǎn)控制器從處理 器端口的DMA模塊、IOAPIC模塊和遠(yuǎn)程Load/Store模塊。在主處理器的角度,節(jié)點(diǎn)控制器 是掛接在總線O(BusO)上的兩個(gè)設(shè)備,一個(gè)是系統(tǒng)總線終端設(shè)備(Endpoint),另一個(gè)是系 統(tǒng)總線的橋設(shè)備。其中作為系統(tǒng)總線終端設(shè)備的配置空間具有三個(gè)基地址寄存器(BAR),分 別對(duì)應(yīng)節(jié)點(diǎn)控制器主處理器端口的DMA模塊、IOAPIC模塊和遠(yuǎn)程Load/Store模塊。其中 作為系統(tǒng)總線橋設(shè)備之后的總線I(Busl)上掛接一個(gè)I/O總線根設(shè)備(Root Complex), I/ 0總線根設(shè)備之后的總線2(Bus2)掛接1/0總線的終端設(shè)備或橋設(shè)備。本發(fā)明的節(jié)點(diǎn)控制器通過(guò)支持全局地址空間來(lái)實(shí)現(xiàn)節(jié)點(diǎn)內(nèi)資源(包括內(nèi)存和1/0 設(shè)備等)的共享。因此,在每個(gè)處理器端口中,除實(shí)現(xiàn)標(biāo)準(zhǔn)的設(shè)備配置空間外,還需設(shè)置全 局地址空間專(zhuān)用寄存器17。圖10是本發(fā)明的節(jié)點(diǎn)控制器各個(gè)端口全局地址分配及窗口寄 存器的示意圖,如圖10所示,本發(fā)明的節(jié)點(diǎn)控制器使用靜態(tài)分配的方式隔離各個(gè)端口的地 址空間,每個(gè)地址窗口最大為 其中MAXBIT是系統(tǒng)地址位寬,例如使用HT系統(tǒng)總線,若HT最大支持40位地址寬 度,則MAXBIT等于40,若HT最大支持64位地址寬度,則MAXBIT等于64。各端口窗口信息全局共享,相當(dāng)于一個(gè)路由表,供數(shù)據(jù)傳遞時(shí)查詢(xún)。主處理器端口 擁有兩個(gè)窗口,窗口 0對(duì)應(yīng)了其本地內(nèi)存和外設(shè)空間,窗口 1對(duì)應(yīng)了其全局地址空間。從處 理器端口和1/0端口分別只擁有一個(gè)標(biāo)識(shí)其全局地址空間的窗口,窗口的起始和終止范圍 由每個(gè)窗口中的配置寄存器存儲(chǔ)。主處理器端口窗口 0的MEM_START和MEM_END對(duì)應(yīng)了其本地內(nèi)存的地址范圍, DEV_STARAT和DEV_END對(duì)應(yīng)其設(shè)備空間,窗口 1的GAS_START和GAS_END對(duì)應(yīng)了該端口在 全局地址中的地址范圍,值得注意的是,窗口 1的GAS_START和GAS_END相對(duì)于窗口 1上邊 界的偏移分別等于MEM_START和MEM_END。從處理器端口的GAS_START和GAS_END對(duì)應(yīng)了該端口在全局地址中的地址范圍,這個(gè)范圍的大小等同于從處理器1#的本地內(nèi)存大小。I/ 0端口的GAS_START和GAS_END對(duì)應(yīng)了該端口在全局地址中的地址范圍,值得注意的是I/O 端口的GAS_START和GAS_END相對(duì)于窗口 1上邊界的偏移分別等于DEV_START和DEV_END。本發(fā)明的有益效果在于1.實(shí)現(xiàn)多個(gè)處理器間松散耦合互連,相比于傳統(tǒng)的SMP或ccNUMA系統(tǒng),不僅增強(qiáng) 了節(jié)點(diǎn)的可擴(kuò)展性,提高節(jié)點(diǎn)密度,而且單一從處理器的故障不會(huì)導(dǎo)致系統(tǒng)停頓,提高了系 統(tǒng)可靠性;2.支持全局統(tǒng)一地址空間,對(duì)節(jié)點(diǎn)內(nèi)的內(nèi)存和I/O設(shè)備進(jìn)行統(tǒng)一編址,內(nèi)存和I/O 設(shè)備都對(duì)應(yīng)一系列的全局地址,節(jié)點(diǎn)內(nèi)每個(gè)處理器都可以通過(guò)使用攜帶全局地址的Load/ Store指令實(shí)現(xiàn)對(duì)節(jié)點(diǎn)內(nèi)存和I/O設(shè)備的訪問(wèn),即實(shí)現(xiàn)節(jié)點(diǎn)內(nèi)處理器對(duì)節(jié)點(diǎn)內(nèi)存和I/O設(shè)備 的共享;3.控制器為每個(gè)處理器端口設(shè)置DMA引擎,實(shí)現(xiàn)處理器間高效的數(shù)據(jù)傳輸,且DMA 引擎的設(shè)計(jì)可以容忍系統(tǒng)總線的亂序響應(yīng)特性;4.通過(guò)在控制器內(nèi)部分別為L(zhǎng)oad/Store和DMA設(shè)置兩個(gè)交叉開(kāi)關(guān),減少大塊數(shù)據(jù) 和短數(shù)據(jù)傳輸?shù)幕_,提高通信效率;5.控制器內(nèi)部的交叉開(kāi)關(guān)采用雙虛通道設(shè)計(jì),數(shù)據(jù)對(duì)虛通道的使用,與目的端口 號(hào)的奇偶進(jìn)行綁定,實(shí)現(xiàn)了同源同目的數(shù)據(jù)的保序,并大大降低隊(duì)頭阻塞,提高了傳輸效 率;6.控制器對(duì)外接口采用標(biāo)準(zhǔn)工業(yè)總線,且內(nèi)部實(shí)現(xiàn)完整的PCI拓?fù)?,為使用商?設(shè)備提供保證;7.由于系統(tǒng)的外設(shè)發(fā)現(xiàn)配置由主處理器完成,因此只要保證主處理器是主流處理 器,就可以最大程度兼容商用設(shè)備。即使從處理器是新型處理器,也可以實(shí)現(xiàn)從處理器對(duì)外 設(shè)的訪問(wèn),進(jìn)而降低了系統(tǒng)升級(jí)成本,并在一定程度上兼容異構(gòu)處理器。通過(guò)結(jié)合附圖對(duì)本發(fā)明具體實(shí)施例的描述,本發(fā)明的其它方面及特征對(duì)本領(lǐng)域的 技術(shù)人員而言是顯而易見(jiàn)的。以上對(duì)本發(fā)明的具體實(shí)施例進(jìn)行了描述和說(shuō)明,這些實(shí)施例應(yīng)被認(rèn)為其只是示例 性的,并不用于對(duì)本發(fā)明進(jìn)行限制,本發(fā)明應(yīng)根據(jù)所附的權(quán)利要求進(jìn)行解釋。
權(quán)利要求
一種高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,其特征在于,所述節(jié)點(diǎn)控制器,包括多個(gè)處理器端口,一個(gè)I/O端口,一個(gè)直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊和一個(gè)讀/寫(xiě)交叉開(kāi)關(guān)模塊,其中所述處理器端口,分為主處理器端口和從處理器端口,用于分別與主處理器和從處理器連接,主處理器負(fù)責(zé)具體計(jì)算任務(wù)的運(yùn)行,以及對(duì)外圍設(shè)備的發(fā)現(xiàn)和初始化過(guò)程,從處理器只負(fù)責(zé)具體計(jì)算任務(wù)的運(yùn)行;所述I/O端口,通過(guò)I/O總線與外圍設(shè)備連接,其包括讀/寫(xiě)模塊和I/O接口模塊,所述I/O接口模塊用于負(fù)責(zé)實(shí)現(xiàn)I/O總線根設(shè)備邏輯,所述I/O接口模塊通過(guò)一窗口寄存器記錄該端口的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線包格式與I/O總線包格式間的互相轉(zhuǎn)換;所述讀/寫(xiě)模塊與所述讀/寫(xiě)交叉開(kāi)關(guān)模塊連接;所述直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊,用于實(shí)現(xiàn)各所述處理器端口間直接內(nèi)存訪問(wèn)數(shù)據(jù)的交換;所述讀/寫(xiě)交叉開(kāi)關(guān)模塊,用于實(shí)現(xiàn)各所述處理器端口之間,以及所述處理器端口和I/O端口之間讀/寫(xiě)數(shù)據(jù)的交換。
2.根據(jù)權(quán)利要求1所述的高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,其特征在于,所述處理 器端口,包括處理器接口模塊、分發(fā)模塊、仲裁模塊、直接內(nèi)存訪問(wèn)模塊、讀/寫(xiě)模塊和I/O 高級(jí)可編程中斷控制器模塊其中所述處理器接口模塊,根據(jù)其所屬的處理器端口連接的處理器的類(lèi)型的不同,分為主 處理器接口模塊和從處理器接口模塊,其中所述主處理器接口模塊,負(fù)責(zé)與主處理器系統(tǒng) 總線的掛接,包括所有總線鏈路層功能,主處理器接口模塊通過(guò)一窗口寄存器記錄該端口 的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線終端設(shè)備的配置空間和橋設(shè)備的配置空間;所述從處理 器接口模塊,負(fù)責(zé)與從處理器系統(tǒng)總線的掛接,包括所有總線鏈路層功能,從處理器接口模 塊通過(guò)一窗口寄存器記錄該端口的全局地址分配,并實(shí)現(xiàn)系統(tǒng)總線終端設(shè)備的配置空間;所述分發(fā)模塊,用于將來(lái)自所述處理器接口模塊的數(shù)據(jù)按照所屬功能分發(fā)給直接內(nèi)存 訪問(wèn)模塊或讀/寫(xiě)模塊,或I/O高級(jí)中斷控制器模塊;所述仲裁模塊,用于將來(lái)自直接內(nèi)存訪問(wèn)模塊、讀/寫(xiě)模塊和I/O高級(jí)中斷控制器模塊 的數(shù)據(jù)進(jìn)行公平仲裁后,分時(shí)傳遞給所述處理器接口模塊,實(shí)現(xiàn)多種數(shù)據(jù)在處理器接口總 線上的共享傳輸;所述直接內(nèi)存訪問(wèn)模塊,用于實(shí)現(xiàn)數(shù)據(jù)以直接內(nèi)存訪問(wèn)方式在處理器間的傳輸,所述 直接內(nèi)存訪問(wèn)模塊與所述直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊連接;所述讀/寫(xiě)模塊,用于實(shí)現(xiàn)數(shù)據(jù)以讀/寫(xiě)方式在處理器間的傳輸,所述讀/寫(xiě)模塊與所 述讀/寫(xiě)交叉開(kāi)關(guān)模塊連接;所述I/O高級(jí)中斷控制器模塊,用于實(shí)現(xiàn)對(duì)應(yīng)所述處理器端口的I/O高級(jí)中斷控制器 中斷控制。
3.根據(jù)權(quán)利要求2所述的高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,其特征在于,所述分發(fā) 模塊中對(duì)數(shù)據(jù)所屬功能的區(qū)分通過(guò)兩個(gè)途徑,一方面通過(guò)設(shè)備配置空間的基址寄存器地址 窗口,另一方面為不同功能模塊向系統(tǒng)總線申請(qǐng)不同的設(shè)備號(hào),然后根據(jù)數(shù)據(jù)所屬設(shè)備號(hào) 實(shí)現(xiàn)功能區(qū)分。
4.根據(jù)權(quán)利要求2所述的高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,其特征在于,所述直接內(nèi)存訪問(wèn)模塊包括下傳和上傳兩個(gè)子模塊,其中下傳子模塊負(fù)責(zé)接收直接內(nèi)存訪問(wèn)描述 符,讀取直接內(nèi)存訪問(wèn)負(fù)載數(shù)據(jù),并將數(shù)據(jù)發(fā)送至所述直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊;上傳子 模塊負(fù)責(zé)從所述直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊接收直接內(nèi)存訪問(wèn)數(shù)據(jù),并將數(shù)據(jù)寫(xiě)入目標(biāo)地 址區(qū)域。
5.根據(jù)權(quán)利要求2所述的高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,其特征在于,所述讀/寫(xiě) 模塊包括下傳和上傳兩個(gè)子模塊,其中下傳子模塊負(fù)責(zé)從所述分發(fā)模塊接收讀/寫(xiě)請(qǐng)求以 及讀響應(yīng)數(shù)據(jù),并發(fā)送至所述讀/寫(xiě)交叉開(kāi)關(guān)模塊;上傳模塊負(fù)責(zé)從所述讀/寫(xiě)交叉開(kāi)關(guān)模 塊接收數(shù)據(jù)并發(fā)送至目的地址。
6.根據(jù)權(quán)利要求1所述的高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,其特征在于,所述直接 內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊為每個(gè)所述處理器端口設(shè)置兩個(gè)虛通道緩沖區(qū),一個(gè)發(fā)送緩沖區(qū), 核心使用一個(gè)2NXN的交叉開(kāi)關(guān),N為交叉開(kāi)關(guān)互連的處理器端口數(shù)目;數(shù)據(jù)對(duì)虛通道緩沖 區(qū)的選擇符合如下規(guī)則目標(biāo)處理器端口號(hào)為奇數(shù)的進(jìn)入1號(hào)接收虛通道緩沖區(qū),目標(biāo)處 理器端口號(hào)為偶數(shù)的進(jìn)入0號(hào)接收虛通道緩沖區(qū)。
7.根據(jù)權(quán)利要求1所述的高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,其特征在于,所述讀/寫(xiě) 交叉開(kāi)關(guān)模塊為每個(gè)處理器及I/O端口設(shè)置兩個(gè)虛通道緩沖區(qū),一個(gè)發(fā)送緩沖區(qū),核心使 用一個(gè)2((N+1)X(N+1)的交叉開(kāi)關(guān),N為交叉開(kāi)關(guān)互連的處理器端口數(shù)目;數(shù)據(jù)對(duì)虛通道 緩沖區(qū)的選擇符合如下規(guī)則目標(biāo)處理器端口號(hào)為奇數(shù)的進(jìn)入1號(hào)接收虛通道緩沖區(qū),目 標(biāo)處理器端口號(hào)為偶數(shù)的進(jìn)入0號(hào)接收虛通道緩沖區(qū)。
8.一種根據(jù)權(quán)利要求1所述的節(jié)點(diǎn)控制器實(shí)現(xiàn)讀數(shù)據(jù)傳輸?shù)姆椒?,所述方法,包括?列步驟步驟110.源處理器端口的處理器接口模塊接收源處理器發(fā)出Load指令,傳遞給源處 理器端口的分發(fā)模塊,該分發(fā)模塊通過(guò)查詢(xún)基址寄存器判定該指令為讀指令后,將該讀指 令發(fā)送給源處理器端口的讀/寫(xiě)模塊;步驟120.所述讀/寫(xiě)模塊獲取Load指令中的全局地址,然后查詢(xún)節(jié)點(diǎn)控制器內(nèi)各端 口的窗口寄存器,若沒(méi)有在任何一個(gè)窗口寄存器中命中,則發(fā)送響應(yīng)包至源處理器或I/O 端口,同時(shí)響應(yīng)包中的狀態(tài)域的錯(cuò)誤位置位為1 ;若全局地址在窗口表中命中,則根據(jù)窗口 號(hào)生成目的端口號(hào),并使用目的端口號(hào)替換Load請(qǐng)求中全局地址的高卜位,使用源窗 口號(hào)替換Load請(qǐng)求中的攜帶的設(shè)備號(hào),將Load請(qǐng)求發(fā)送至讀/寫(xiě)交叉開(kāi)關(guān)模塊;步驟130.所述讀/寫(xiě)交叉開(kāi)關(guān)模塊以讀請(qǐng)求的目的端口號(hào)作為路由信息,將讀請(qǐng)求轉(zhuǎn) 發(fā)至目的處理器端口或目的1/0端口 ;步驟140.所述目的處理器端口或目的1/0端口的讀/寫(xiě)模塊為該讀請(qǐng)求生成目的總 線請(qǐng)求序號(hào)目的Tag,并以該目的Tag為地址,將讀請(qǐng)求攜帶的源Tag和源端口號(hào)存儲(chǔ);步驟150.所述目的處理器端口或目的1/0端口的讀/寫(xiě)模塊使用目的Tag替換讀請(qǐng) 求的源Tag后,經(jīng)過(guò)目的處理器接口模塊或目的1/0接口模塊,最終將讀請(qǐng)求發(fā)送至目的處 理器或目的1/0端口相連的1/0設(shè)備;步驟160.所述目的處理器或1/0端口相連的1/0設(shè)備返回響應(yīng)包; 步驟170.所述目的處理器端口或目的1/0端口的讀/寫(xiě)模塊使用響應(yīng)包中的Tag讀 取之前存儲(chǔ)的源Tag和源端口號(hào),并使用該源Tag替換響應(yīng)包的Tag,使用該源端口號(hào)替換 響應(yīng)包的設(shè)備號(hào),發(fā)送至讀/寫(xiě)交叉開(kāi)關(guān)模塊;步驟180.源處理器端口的讀/寫(xiě)模塊接收到讀/寫(xiě)交叉開(kāi)關(guān)模塊轉(zhuǎn)發(fā)的響應(yīng)包后,清 除響應(yīng)包的目的端口號(hào),發(fā)送至源處理器或I/O端口,完成整個(gè)讀數(shù)據(jù)過(guò)程。
9.一種根據(jù)權(quán)利要求1所述的節(jié)點(diǎn)控制器實(shí)現(xiàn)寫(xiě)數(shù)據(jù)傳輸?shù)姆椒?,所述方法,包括?列步驟步驟210.源處理器端口的處理器接口模塊接收源處理器發(fā)出的寫(xiě)指令,傳遞給源處 理器端口的分發(fā)模塊,該分發(fā)模塊通過(guò)查詢(xún)基址寄存器判定該指令為寫(xiě)指令后,將該寫(xiě)指 令發(fā)送給源處理器端口的讀/寫(xiě)模塊;步驟220.所述源處理器端口的讀/寫(xiě)模塊獲取寫(xiě)指令中的全局地址,然后查詢(xún)節(jié)點(diǎn) 控制器內(nèi)各端口的窗口寄存器,若沒(méi)有在任何一個(gè)窗口寄存器中命中,則發(fā)送響應(yīng)包至源 處理器端口或I/O端口,同時(shí)響應(yīng)包中的狀態(tài)域的錯(cuò)誤位置位為1 ;若全局地址在窗口表中 命中,則根據(jù)窗口號(hào)生成目的端口號(hào),并使用目的端口號(hào)替換寫(xiě)請(qǐng)求中全局地址的高h(yuǎn)『+1)l 位,使用源窗口號(hào)替換寫(xiě)請(qǐng)求中的設(shè)備號(hào),將寫(xiě)請(qǐng)求發(fā)送至讀/寫(xiě)交叉開(kāi)關(guān);步驟230.讀/寫(xiě)交叉開(kāi)關(guān)模塊根據(jù)寫(xiě)請(qǐng)求的目的端口號(hào),將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)至目的處理器 或目的I/O端口 ;步驟240.所述目的處理器或I/O端口的讀/寫(xiě)模塊清除寫(xiě)請(qǐng)求中的地址高位, 并將修改后的寫(xiě)請(qǐng)求經(jīng)過(guò)目的處理器接口模塊或目的I/O接口模塊,最終發(fā)送至目的處理 器或I/O端口相連的I/O設(shè)備,完成整個(gè)寫(xiě)數(shù)據(jù)過(guò)程。
10.一種根據(jù)權(quán)利要求1所述的節(jié)點(diǎn)控制器實(shí)現(xiàn)直接內(nèi)存訪問(wèn)數(shù)據(jù)傳輸?shù)姆椒?,所?方法,包括下列步驟步驟310.源處理器端口的直接內(nèi)存訪問(wèn)模塊接收直接內(nèi)存訪問(wèn)描述符,并將該描述 符轉(zhuǎn)換為一系列讀請(qǐng)求的過(guò)程;步驟320.所述源處理器端口的直接內(nèi)存訪問(wèn)模塊接收一系列讀請(qǐng)求返回的響應(yīng)包, 并將響應(yīng)包轉(zhuǎn)換為一系列寫(xiě)請(qǐng)求的過(guò)程;步驟330. —系列寫(xiě)請(qǐng)求被直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)轉(zhuǎn)發(fā)至目的處理器端口的直接內(nèi)存 訪問(wèn)模塊,并寫(xiě)入目的處理器內(nèi)存的過(guò)程。
11.根據(jù)權(quán)利要求10所述的根據(jù)權(quán)利要求1所述的節(jié)點(diǎn)控制器實(shí)現(xiàn)直接內(nèi)存訪問(wèn)數(shù)據(jù) 傳輸?shù)姆椒?,所述步驟310,包括下列步驟步驟311.上電復(fù)位后,直接內(nèi)存訪問(wèn)模塊將用于記錄當(dāng)前直接內(nèi)存訪問(wèn)序號(hào)的直接 內(nèi)存訪問(wèn)序號(hào)計(jì)數(shù)器DMASeq復(fù)位置0,然后等待接收直接內(nèi)存訪問(wèn)描述符;步驟312.接收到直接內(nèi)存訪問(wèn)描述符后,便根據(jù)直接內(nèi)存訪問(wèn)目的起始地址查詢(xún)各 個(gè)處理器端口的窗口寄存器,若未命中任何窗口寄存器,則直接發(fā)送錯(cuò)誤通知到源處理器; 若命中窗口,則初始化三個(gè)計(jì)數(shù)器,分別是長(zhǎng)度計(jì)數(shù)器LengthCnt,使用DMALen作為初值, 源地址計(jì)數(shù)器SrcAddrCnt,使用SrcAddr作為初值和目的地址計(jì)數(shù)器DstAddrCnt,使用 DstAddr作為初值;步驟313.構(gòu)造一個(gè)讀請(qǐng)求,產(chǎn)生讀請(qǐng)求所需的請(qǐng)求序號(hào)srctag,以SrcAddrCnt填充讀 請(qǐng)求所需的地址,以包長(zhǎng)Ien填充讀請(qǐng)求所需的長(zhǎng)度,然后將該讀請(qǐng)求發(fā)送至源處理器;步驟314.以所述讀請(qǐng)求所需的請(qǐng)求序號(hào)為地址,將DstAddrCnt,DMALen和DMASeq存 入目標(biāo)地址RAM中;步驟 315.置 DstAddrCnt = DstAddrCnt+len ;SrcAddrCnt = SrcAddrCnt+len ;LengthCnt = LengthCnt-Ien ;步驟316.如果LengthCnt大于0,則跳轉(zhuǎn)至步驟313 ;否則DMASeq加一,跳轉(zhuǎn)至步驟312。
12.根據(jù)權(quán)利要求11所述的根據(jù)權(quán)利要求1所述的節(jié)點(diǎn)控制器實(shí)現(xiàn)直接內(nèi)存訪問(wèn)數(shù)據(jù) 傳輸?shù)姆椒?,所述步驟320,包括下列步驟步驟321.源處理器端口的直接內(nèi)存訪問(wèn)模塊接收來(lái)自源處理器系統(tǒng)總線的讀響應(yīng)包;步驟322.以響應(yīng)包中的序號(hào)srctag為地址,讀取所述目標(biāo)地址RAM,獲取其對(duì)應(yīng) 的直接內(nèi)存訪問(wèn)序號(hào)DMASeq,直接內(nèi)存訪問(wèn)目的地址DstAddrj和直接內(nèi)存訪問(wèn)總長(zhǎng)度 DMALen ;步驟323.以DMASeq為索引,獲取接收計(jì)數(shù)器堆中的接收計(jì)數(shù)器RecvLengthCnt ; 步驟324.構(gòu)造一個(gè)寫(xiě)請(qǐng)求,該請(qǐng)求的地址域高卜4"+1)1位由DstAddrj對(duì)應(yīng)的窗口號(hào)填 充,地址其他位由DstAddrj的相應(yīng)位填充;該請(qǐng)求攜帶的數(shù)據(jù)負(fù)載為讀響應(yīng)包攜帶的數(shù) 據(jù)負(fù)載;該請(qǐng)求攜帶的長(zhǎng)度域由讀響應(yīng)包攜帶的長(zhǎng)度域Ien填充,將該寫(xiě)請(qǐng)求發(fā)送至直接 內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊;步驟325.置RecvLengthCnt = RecvLengthCnt+len,并回寫(xiě)至DMASeq對(duì)應(yīng)的接收計(jì)數(shù) 器堆中;步驟326.若RecvLengthCnt == DMALen,則跳轉(zhuǎn)至步驟327 ;否則,跳轉(zhuǎn)至步驟321 ; 步驟327.構(gòu)造一個(gè)寫(xiě)請(qǐng)求,該請(qǐng)求的含義是通知目的處理器的直接內(nèi)存訪問(wèn)模塊,當(dāng) 前直接內(nèi)存訪問(wèn)請(qǐng)求完成;該請(qǐng)求的地址域只填充高卩。4"+1)]位,由DstAddr_i對(duì)應(yīng)的窗口號(hào) 填充;該請(qǐng)求攜帶的長(zhǎng)度域置為1 ;該請(qǐng)求攜帶的數(shù)據(jù)域?yàn)榭眨辉撜?qǐng)求的設(shè)備號(hào)被填充為最 大窗口號(hào)加一,將該寫(xiě)請(qǐng)求發(fā)送至直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)。
13.根據(jù)權(quán)利要求12所述的根據(jù)權(quán)利要求1所述的節(jié)點(diǎn)控制器實(shí)現(xiàn)直接內(nèi)存訪問(wèn)數(shù)據(jù) 傳輸?shù)姆椒?,所述步驟330,包括下列步驟步驟331.直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊根據(jù)其地址高位攜帶的目的窗口號(hào),轉(zhuǎn)發(fā)至目 的處理器端口的直接內(nèi)存訪問(wèn)模塊;步驟332.目的處理器端口的直接內(nèi)存訪問(wèn)模塊將寫(xiě)請(qǐng)求的高h(yuǎn)f+1>l位清除; 步驟333.若寫(xiě)請(qǐng)求的設(shè)備號(hào)為最大窗口號(hào)加一,則該請(qǐng)求為直接內(nèi)存訪問(wèn)完成事件 包,跳轉(zhuǎn)至步驟334 ;否則跳轉(zhuǎn)至步驟335 ;步驟334.獲取目的端口提供的完成事件隊(duì)列地址,將該地址填入到寫(xiě)請(qǐng)求的地址域; 步驟335.將寫(xiě)請(qǐng)求發(fā)送至目的處理器。
14.一種采用權(quán)利要求1所述的節(jié)點(diǎn)控制器的高密度多處理器系統(tǒng),所述系統(tǒng),包括 多個(gè)節(jié)點(diǎn),其中所述節(jié)點(diǎn),包括多個(gè)處理器和一個(gè)所述節(jié)點(diǎn)控制器。
15.根據(jù)權(quán)利要求1所述的高密度多處理器系統(tǒng)的節(jié)點(diǎn)控制器,其特征在于,所述節(jié)點(diǎn) 控制器,通過(guò)支持全局地址空間來(lái)實(shí)現(xiàn)節(jié)點(diǎn)內(nèi)資源的共享,其包括全局地址空間專(zhuān)用寄存 器,其中所述全局地址空間專(zhuān)用寄存器設(shè)置在每個(gè)處理器端口中,節(jié)點(diǎn)控制器使用靜態(tài)分配的
全文摘要
本發(fā)明公開(kāi)了一種高密度多處理器系統(tǒng)及其節(jié)點(diǎn)控制器。所述節(jié)點(diǎn)控制器,包括主處理器端口和從處理器端口,用于分別與主處理器和從處理器連接,主處理器負(fù)責(zé)具體計(jì)算任務(wù)的運(yùn)行,以及對(duì)外圍設(shè)備的發(fā)現(xiàn)和初始化過(guò)程,從處理器只負(fù)責(zé)具體計(jì)算任務(wù)的運(yùn)行;I/O端口,通過(guò)I/O總線與外圍設(shè)備連接;讀/寫(xiě)模塊與讀/寫(xiě)交叉開(kāi)關(guān)模塊連接;直接內(nèi)存訪問(wèn)交叉開(kāi)關(guān)模塊,用于實(shí)現(xiàn)各處理器端口間直接內(nèi)存訪問(wèn)數(shù)據(jù)的交換;讀/寫(xiě)交叉開(kāi)關(guān)模塊,用于實(shí)現(xiàn)各處理器端口之間,以及處理器端口和I/O端口之間讀/寫(xiě)數(shù)據(jù)的交換。
文檔編號(hào)G06F15/80GK101908036SQ20101023654
公開(kāi)日2010年12月8日 申請(qǐng)日期2010年7月22日 優(yōu)先權(quán)日2010年7月22日
發(fā)明者劉銳, 孫凝暉, 安學(xué)軍, 曹政, 王凱, 胡濤, 陳飛 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所