專利名稱:通過混疊向多處理器設備中的多個處理器廣播指令/數(shù)據(jù)的系統(tǒng)和方法
技術領域:
本申請一般地涉及改進的數(shù)據(jù)處理系統(tǒng)和方法。更具體地,本申請針對一種用于通過混疊(aliasing)向多處理器設備中的多個處理器廣播指令/數(shù)據(jù)的系統(tǒng)和方法。
背景技術:
當前計算設備的趨勢是在單個計算設備中提供多個處理器,其中每個處理器可以基本同時地執(zhí)行不同指令。通過依此方式來提供多個處理器,通過跨越多個處理器來分布應用從而實現(xiàn)更高的指令執(zhí)行速度。
一種類型的多處理器系統(tǒng)是對稱多處理器(SMP)系統(tǒng),在該系統(tǒng)中兩個或更多相同的處理器連接到單個共享的主存儲器。當今最常見的多處理器系統(tǒng)使用SMP架構(gòu)。SMP系統(tǒng)允許任何處理器執(zhí)行任何任務,而不管用于該任務的數(shù)據(jù)位于存儲器的什么地方。通過適當?shù)牟僮飨到y(tǒng)支持,SMP系統(tǒng)可以很容易地在處理器之間移交任務以有效地平衡工作負載。然而,存儲器比對其進行訪問的處理器要慢,并且即使是單處理器機器也趨向于花費相當長的時間來等待來自存儲器的數(shù)據(jù)的到達。SMP使得情況更糟,因為多處理器對一組資源發(fā)生競爭。
在SMP系統(tǒng)中使用了不同類型的存儲器組織。一種類型是非一致內(nèi)存訪問(NUMA)系統(tǒng),其向不同的處理器貢獻不同的存儲器庫。這允許處理器平行地訪問存儲器,這可以在數(shù)據(jù)局部化于特定進程并因此局部化于特定處理器時顯著地改善存儲器吞吐量。然而,NUMA使得將數(shù)據(jù)從一個處理器移交到另一個處理器的成本較昂貴,即平衡工作負載較昂貴。NUMA的優(yōu)勢局限于特定工作負載,特別是局限于其中的數(shù)據(jù)通常與特定任務或用戶有很強關聯(lián)的服務器。
其他系統(tǒng)包括非對稱多處理(ASMP)系統(tǒng),在該系統(tǒng)中不同的專門處理器用于特定任務。而且,在另一種類型的非對稱多處理系統(tǒng)中,即在計算機集群多處理中(例如Beowulf)中,并非所有的存儲器都可以供所有的處理器使用。前者的使用或支持并不廣泛,但現(xiàn)代視頻卡中的高功率3D芯片組可以被看作是一種非對稱多處理的形式。而后者相當廣泛地用于構(gòu)建非常大型的超級計算機。
在這些類型的多處理器系統(tǒng)中,所關注的是通過使每個處理器處理不同指令和不同數(shù)據(jù)而跨越多個處理器來分布處理負載的能力。因此,這些系統(tǒng)沒有被配置成考慮向多處理器系統(tǒng)中的多個處理器廣播單一數(shù)據(jù)集。實際上,這些系統(tǒng)中的總線架構(gòu)通常阻止向多個處理器廣播指令和/或數(shù)據(jù),因為有必要能夠在處理器之間進行區(qū)分以執(zhí)行負載分布和負載平衡操作。
發(fā)明內(nèi)容
所示意的實施方式提供一種用于通過混疊向多處理器設備中的多個處理器廣播指令/數(shù)據(jù)的系統(tǒng)和方法。在一個示意性實施方式中,為多處理器系統(tǒng)中的每個處理器提供存儲映射輸入/輸入(MMIO)寄存器,該寄存器存儲多處理器系統(tǒng)中特定處理器的標識符。提供另一MMIO寄存器,用于標識與多個處理器相關聯(lián)的本地存儲的大小。這些MMIO寄存器由處理器用來定義用于與特定處理器相關聯(lián)的本地存儲的起始地址。
為了向多處理器系統(tǒng)中的多個處理器廣播數(shù)據(jù),控制該廣播的處理器,例如控制處理器,對存儲各處理器的標識符的MMIO寄存器進行寫入,并將這些MMIO寄存器中的兩個或更多設定為相同值,從而暫時將兩個或更多處理器的本地存儲區(qū)標識為相同??刂铺幚砥骺梢岳缤ㄟ^直接存儲器訪問(DMA)寫入操作而將待被廣播的期望數(shù)據(jù)和/或指令寫入到與起始地址相對應的存儲器部分中,其中該起始地址與兩個或更多處理器的本地存儲起始地址標識符相關聯(lián)。
以此方式,當兩個或更多處理器尋找從其中讀取指令/數(shù)據(jù)以進行處理的本地存儲的起始地址時,這兩個或更多處理器將標識相同的起始地址,本質(zhì)上混疊了兩個或更多處理器之間的存儲器區(qū)域。這兩個或更多處理器將從開始于被標識起始地址的相同混疊存儲器地址空間中讀取指令/數(shù)據(jù)并處理該相同的指令/數(shù)據(jù)。
接下來,一旦完成了廣播操作,則控制處理器可以將存儲該兩個或更多處理器的標識符的MMIO寄存器復位回它們的原始值。然后可以恢復多處理系統(tǒng)的正常操作。
在一個示意性實施方式中,提供了一種用于在多處理器系統(tǒng)中將數(shù)據(jù)廣播至多個處理器的方法。該方法可以包括針對多個處理器中的每個處理器而將用于分配給該處理器的存儲器區(qū)域的起始地址修改為用于多個處理器中每一個處理器的公用起始地址。可以將待廣播至多個處理器的數(shù)據(jù)寫入到對應于該公用起始地址的存儲器區(qū)域中。在將待廣播的數(shù)據(jù)寫入到對應于該公用起始地址的存儲器區(qū)域中之后,可以將用于分配給每個處理器的存儲器區(qū)域的起始地址修改為在多個處理器器之間非公用的原始起始地址。該多個處理器可以是多處理器系統(tǒng)中所有處理器的子集。
修改用于存儲器區(qū)域的起始地址可以包括向與處理器相關聯(lián)的標識符寄存器寫入公用標識符值。該公用標識符值對于多個處理器中的每一個處理器可以是相同的。起始地址可以由下列關系來確定起始地址=標識符*大小+基本偏移其中該標識符是在與處理器相關聯(lián)的標識符寄存器中提供的處理器的標識符,大小是與處理器相關聯(lián)的存儲器區(qū)域的大小,而基本偏移是第一存儲器區(qū)域的偏移地址值。
針對多個處理器中每個處理器而將用于分配給該處理器的存儲器區(qū)域的起始地址修改為在多個處理器之間非公用的原始起始地址可以包括獨立于與處理器相關聯(lián)的存儲器區(qū)域,提供與該處理器相關聯(lián)的標識符寄存器??梢詫⒃紭俗R符值寫入到標識符寄存器,從而將用于分配給處理器的存儲器區(qū)域的起始地址修改為原始起始地址。
針對多個處理器中每個處理器而將用于分配給該處理器的存儲器區(qū)域的起始地址修改為在多個處理器之間非公用的原始起始地址可以包括除了一個處理器之外,將多個處理器中的所有處理器放置于睡眠(SRI)操作模式??梢詫⒃紭俗R符值寫入與處理器相關聯(lián)的存儲器區(qū)域。這一個處理器可以讀取原始標識符值并將其在標識符寄存器中的標識符值設定為原始標識符值??梢詫Ψ胖貌襟E、寫入步驟和讀取步驟進行迭代重復,從而多個處理器中的每個處理器將其標識符值返回到原始標識符值。
多處理器系統(tǒng)可以是具有控制處理器和多個協(xié)同處理器的多處理器系統(tǒng)。該多個協(xié)同處理器可以構(gòu)成多個處理器。該多處理器系統(tǒng)可以是異構(gòu)多處理器系統(tǒng),在該系統(tǒng)中該多個協(xié)同處理器使用不同于控制處理器的指令集進行操作。
在另一示意性實施方式中,提供了一種包括具有計算機可讀程序的計算機可用介質(zhì)的計算機程序產(chǎn)品。該計算機可讀程序在計算設備上執(zhí)行的時候使得計算設備執(zhí)行以上根據(jù)方法示意性實施方式所列出的操作中的一個或組合。
在又一示意性實施方式中,提供了一種多處理器計算系統(tǒng),其包括控制處理器和多個耦合到該控制處理器的協(xié)同處理器。該控制處理器可以執(zhí)行上述方法示意性實施方式所列出的操作中的一個或組合。
在再一示意性實施方式中,提供了一種用于在多處理器系統(tǒng)中向具有共享存儲器的多個處理器廣播數(shù)據(jù)的方法。該方法可以包括針對多個處理器中的每個處理器而對用于共享存儲器中分配給所述處理器的存儲器區(qū)域的起始地址進行修改,從而多個處理器中的每一個處理器在共享存儲器中具有公用起始地址??梢詫?shù)據(jù)寫入到該公用起始地址所標識的存儲器區(qū)域中,從而將數(shù)據(jù)廣播到多個處理器。響應于將數(shù)據(jù)寫入到該公用起始地址所標識的存儲器區(qū)域,可以對用于分配給每個處理器的存儲器區(qū)域的起始地址進行修改,從而每個處理器在共享存儲器中具有唯一的起始地址。
在本發(fā)明的示范性實施方式的以下的詳細描述中,本發(fā)明的這些和其他特征及有益效果將得到描述或?qū)Ρ绢I域技術人員變得清楚明了。
所附權(quán)利要求書闡述了被認為是本發(fā)明之特征的新穎特征。然而,通過連同附圖一起閱讀說明性的實施方式的下述詳細描述,將更好地理解該發(fā)明本身、其優(yōu)選使用方式、其他目的及其優(yōu)點,附圖中圖1是描繪了可以在其中實現(xiàn)示意性實施方式的Cell寬帶引擎(CBE)架構(gòu)的示例性框圖;圖2是根據(jù)一個示意性實施方式的協(xié)同處理器元件的存儲流控制器的示例性框圖;圖3是描繪了根據(jù)一個示意性實施方式的協(xié)同處理單元標識寄存器的示例性圖;圖4A-圖4C是示出了根據(jù)一個示意性實施方式的用于將數(shù)據(jù)廣播到多處理系統(tǒng)中的多個處理器的機制的示例性圖;以及圖5是列出了用于將數(shù)據(jù)廣播到多處理器系統(tǒng)中多個處理器的示例性操作的流程圖。
具體實施例方式
示意性實施方式提供了一種用于向多處理器系統(tǒng)中的處理器廣播指令/數(shù)據(jù)的系統(tǒng)和方法。該示例性實施方式可以使用這樣的任何多處理器系統(tǒng),在該多處理器系統(tǒng)中提供一種可修改機制用于唯一地標識多處理器系統(tǒng)的每個處理器。可以在其中實現(xiàn)該示意性實施方式的一個這種多處理器系統(tǒng)是來自紐約Armonk的國際商業(yè)機器公司的Cell寬帶引擎(CBE)架構(gòu)。為了描述的目的,CBE架構(gòu)將被用作在其中可以實現(xiàn)示例性實施方式的多處理器處理系統(tǒng)的例子。然而,應當理解的是,該示意性實施方式并不局限于使用CBE架構(gòu),而是可以使用其他多處理器系統(tǒng),而不偏離本發(fā)明的實質(zhì)和范圍。
圖1是可以在其中實現(xiàn)本發(fā)明的各方面的數(shù)據(jù)處理系統(tǒng)的示例性框圖。圖1所示的示例性數(shù)據(jù)處理系統(tǒng)是Cell寬帶引擎(CBE)數(shù)據(jù)處理系統(tǒng)的實例。盡管在本發(fā)明的優(yōu)選實施方式的描述中將使用CBE,但是,如本領域技術人員在閱讀下列描述后能容易地理解的,本發(fā)明并不局限于此。
如圖1所示,CBE 100包括具有處理器(PPU)116和其L1和L2高速緩存112和114的功率處理器元件(PPE)110,以及多個協(xié)同處理器元件(SPE)120-134,每個協(xié)同處理器元件具有其自己的協(xié)同處理器單元(SPU)140-154、存儲流控制155-162、本地存儲器或存儲(LS)163-170以及總線接口單元(BIU單元)180-194,其例如可以是直接存儲器訪問(DMA)、存儲器管理單元(MMU)和總線接口單元的組合。還提供了高帶寬內(nèi)部元件互連總線(EIB)196、總線接口控制器(BIC)197以及存儲器接口控制器(MIC)198。
本地存儲器或本地存儲(LS)163-170是大型存儲器映射的非一致可尋址部分,其可以物理地提供為耦合至SPU 140-154的小型存儲器。本地存儲163-170可以映射到不同的地址空間。這些地址區(qū)域在非混疊配置中是連續(xù)的。本地存儲163-170通過其地址位置例如通過SPU標識寄存器(將在下文中進行更詳細描述)而與其相對應的SPU 140-154和SPE 120-134相關聯(lián)。系統(tǒng)中的任何資源都能夠從本地存儲163-170中讀取和向本地存儲163-170寫入,只要該本地存儲未被放置于安全操作模式,其中在該模式的情況下,只有與其相關聯(lián)的SPU可以訪問本地存儲163-170或者本地存儲163-170的指定安全部分。
CBE 100可以是片上系統(tǒng),從而圖1中示出的每個元件可以提供在單個微處理器芯片上。此外,CBE 100是一種異構(gòu)處理環(huán)境,在該環(huán)境中每個SPU可以從系統(tǒng)中每個其他SPU接收不同的指令。此外,用于SPU的指令集可以不同于PPU的指令集,例如PPU可以執(zhí)行基于精簡指令集計算機(RISC)的指令,而SPU執(zhí)行向量化指令。
SPE 120-134通過EIB 196耦合到L2高速緩存114并相互耦合。此外,SPE 120-134通過EIB 196耦合至MIC 198和BIC 197。MIC 198提供到共享存儲器199的通信接口。BIC 197提供在CBE 100與其他外部總線和設備之間的通信接口。
PPE 110是雙線程PPE 110。該雙線程PPE 110與八個SPE120-134的結(jié)合使得CBE 100能夠處理10個同時線程以及128個待處理存儲器請求。PPE 110充當另外八個用于處理大多數(shù)計算工作負載的SPE 120-134的控制器。PPE 110可用于運行傳統(tǒng)的操作系統(tǒng),而SPE 120-134例如執(zhí)行向量化浮點代碼執(zhí)行。
SPE 120-134包括協(xié)同處理單元(SPU)140-154、存儲流控制單元155-162、本地存儲器或存儲163-170以及接口單元180-194。在一個示范性實施方式中,本地存儲器或存儲163-170包括256KB指令和數(shù)據(jù)存儲器,其對于PPE 110是可見的,并且可以由軟件進行直接尋址。
PPE 110可以以小程序或線程來裝載SPE 120-134,將SPE鏈接到一起以處理復雜操作中的每個步驟。例如,結(jié)合有CBE 100的機頂盒可以裝載用于讀取DVD、視頻和音頻解碼以及顯示的程序,并且數(shù)據(jù)可以在各個SPE之間傳遞,直到該數(shù)據(jù)最后在輸出顯示器上結(jié)束為止。以4GHz,每個SPE 120-134理論上給出了32 GFLOPS的性能,其中PPE 110具有相同水平的性能。
存儲流控制單元(MFC)155-162用于SPU至系統(tǒng)的其余部分和其他元件之間的接口。MFC 155-162提供用于主存儲和本地存儲163-170之間的數(shù)據(jù)傳輸、保護以及同步的主機制。在處理器中,邏輯上對每個SPU都具有MFC。某些實現(xiàn)可以在多個SPU之間共享單個MFC資源。在此實例中,為MFC定義的所有設施和命令必須表現(xiàn)為獨立于用于每個SPU的軟件。共享MFC的效應局限于依賴于實施的設施和命令。
圖2是根據(jù)本發(fā)明的一個示意性實施方式的典型存儲流控制(MFC)單元200的示例性框圖。在此示意性實施方式中,MFC 200具有兩個通往SPU的接口210和212、兩個通往總線接口單元(BIU)220的接口214和216、以及兩個通往可選SL1高速緩存230的接口222和224。SPU接口210和212是SPU通道接口210和SPU本地存儲接口212。SPU通道接口210允許SPU訪問MFC設施并發(fā)布MFC命令。SPU本地存儲接口212由MFC 200用來訪問SPU中的本地存儲。通往BIU 220的一個接口216允許針對MFC設施的存儲器映射I/O(MMIO)訪問。該接口216也允許其他處理器發(fā)布MFC命令。使用MMIO發(fā)布的命令稱為MFC代理命令。
通往SL1高速緩存的接口222和224主要用于數(shù)據(jù)傳輸。一個接口222由MFC 200用于訪問主存儲中的地址轉(zhuǎn)換表,另一個接口224用于主存儲和本地存儲之間的數(shù)據(jù)傳輸。
如圖2所示,典型MFC中的主要單元包括存儲器映射輸入/輸出(MMIO)接口240、MFC寄存器250以及DMA控制器260。MMIO接口240將SPU的MFC設施映射到系統(tǒng)的實際地址空間中。這允許從任何處理器或系統(tǒng)中的任何設備來訪問MFC設施。此外,MMIO接口240可以配置成將SPU的本地存儲映射到實際地址空間中。這允許從任何處理器或系統(tǒng)中的任何設備來直接訪問本地存儲,使得可以實現(xiàn)本地存儲至本地存儲的傳輸和I/O設備直接訪問SPU的本地存儲域的能力。
MFC寄存器單元250包含大多數(shù)MFC設施。對于本發(fā)明尤其重要的是,MFC寄存器單元250包括SPU本地存儲限制寄存器設施。利用該設施,特權(quán)軟件可以在SPE的本地存儲的大小上設定限制,這將在下文中進行詳細描述。
數(shù)據(jù)的同步和傳輸通常是MFC 200內(nèi)的DMAC 260的責任。DMAC 260可以在SPU的本地存儲和主存儲區(qū)之間移動數(shù)據(jù)??蛇x地,該數(shù)據(jù)可以高速緩存于SL1高速緩存中。
SPE和PPE通過利用命令隊列270和280其中之一來把DMA命令請求排列到MFC而指示MFC 200執(zhí)行這些DMA操作。SPE所發(fā)布的命令被排列到MFC SPU命令隊列270中。PPE所發(fā)布的命令被排列到MFC代理命令隊列280中。MFC使用存儲器映射單元(MMU)290來執(zhí)行所有的MFC地址轉(zhuǎn)換以及MFC訪問保護檢查,上述是DMA傳輸所要求的。
MFC命令提供主要的方法,該方法使得在SPU中執(zhí)行的代碼能夠訪問主存儲并能夠保持與系統(tǒng)中其他處理器和設備的同步。也提供命令來管理可選高速緩存。MFC命令或者可以由SPU上運行的代碼所發(fā)布,或者可以由另一處理器或設備(例如PPE)上運行的代碼來發(fā)布。在關聯(lián)SPU上運行的代碼執(zhí)行一系列通道指令以發(fā)布MFC命令。在其他處理器或設備上運行的代碼執(zhí)行一系列存儲器映射I/O(MMIO)傳輸以向SPE發(fā)布MFC命令。所發(fā)布的命令被排隊到命令隊列270和280的其中之一。
通常,可以利用MFC寄存器單元250的MMIO寄存器或通過關聯(lián)SPU所執(zhí)行的通道指令來排隊命令。MMIO方法旨在由PPE使用以控制主存儲和代表SPE的關聯(lián)本地存儲之間的數(shù)據(jù)傳輸。傳輸數(shù)據(jù)的MFC命令稱為MFC DMA命令。MFC DMA命令的數(shù)據(jù)傳輸方向總是從SPE的角度來參考。因此,將數(shù)據(jù)傳輸?shù)絊PE(從主存儲至本地存儲)的命令被視為獲取命令,而將數(shù)據(jù)從SPE中傳輸出來(從本地存儲至主存儲)的命令被視為發(fā)出命令。
傳輸數(shù)據(jù)的命令被稱為MFC DMA命令。這些命令被轉(zhuǎn)化為本地存儲域和主存儲域之間的DMA傳輸。每個MFC通常可以同時支持多個DMA傳輸并且可以維護和處理多個MFC命令。每個MFCDMA數(shù)據(jù)傳輸命令請求涉及本地存儲地址(LSA)和有效地址(EA)。本地存儲地址能夠僅對其關聯(lián)SPU的本地存儲區(qū)域進行直接尋址。有效地址具有更一般的應用,在于其能夠參考主存儲,并且如果所有的SPU本地存儲區(qū)混疊到實際地址空間中,則主存儲包括所有的SPU本地存儲區(qū)域。
在上述的CBE架構(gòu)100中,可以通過在與特定SPU相關聯(lián)的存儲器映射輸入/輸出(MMIO)寄存器中提供的SPU標識寄存器(SPU_IDR)來單獨地標識SPU 140-154中的每個。例如,SPU_IDR可以提供為MFC的寄存器250中一組SPU特權(quán)設施的一部分,例如圖2中的SPU_IDR 295。
SPU_IDR 295包含32位的值,其可用于將SPU從CBE架構(gòu)100中的其他SPU中區(qū)分開來。SPU_IDR 295的內(nèi)容可由PPE 110進行訪問,從而PPE 110可以以特權(quán)方式讀取或?qū)懭朐摷拇嫫?95,而SPU不能夠讀取或?qū)懭朐揝PU_IDR 295。
圖3是示出了根據(jù)一個示意性實施方式的SPU_IDR的內(nèi)容的示例性圖。如圖3所示,SPU_IDR的前32位即0-31位被保留并設定為0。后32位即32-63位用于存儲32位值,該32位值將該SPU從系統(tǒng)中的其他SPU中區(qū)分開來。對于PPE 110,針對SPU_IDR的訪問類型是讀取/寫入,但并不提供從SPU對該寄存器的訪問。
在CBE架構(gòu)中,SPU_IDR值用作用于標識與該SPU相關聯(lián)的本地存儲的起始地址的手段。亦即,本地存儲163-170可以提供為單個存儲器陣列的不同存儲器區(qū)域,這些不同存儲器區(qū)域被分派給SPU 140-154的每個。SPU_IDR值可用于執(zhí)行該分派,這是通過設定SPU的分派的存儲器區(qū)域的起始地址而執(zhí)行的。
與SPU相關聯(lián)的本地存儲的起始地址進一步基于待分派給SPU140-154的每個的本地存儲大小。本地存儲大小寄存器,例如也可以提供為MFC寄存器250的一部分,可以存儲針對SPU 140-154的本地存儲大小的值?;谠摫镜卮鎯Υ笮『蚐PU_IDR值,為用于特定SPU的本地存儲計算起始地址。例如,在一個示意性實施方式中,SPU的本地存儲的起始地址利用下列等式來進行計算
SPE_LS_start_address=SPU_NUM*LS_SIZE+BP_BASE其中,SPU_NUM是SPU_IDR值中存儲的SPU的編號,LS_SIZE是在本地存儲大小寄存器中存儲的本地存儲大小的值,BP_BASE是本地存儲寄存器的基本寄存器地址。因此,如果將兩個或更多的SPU的SPU_IDR值設定為相同的值,并且該兩個或更多的SPU的本地存儲大小是相同的,則與這兩個或更多SPU相關聯(lián)的本地存儲的起始地址將相同。結(jié)果,這兩個或更多SPU將能夠從起始于基于SPU編號、本地存儲大小以及基本寄存器地址而確定的指定起始地址的相同的存儲器區(qū)域(即混疊的存儲器區(qū)域)中進行讀取。
以此方式,通過將指令/數(shù)據(jù)寫入該混疊的存儲器區(qū)域,該指令/數(shù)據(jù)可以由多個SPU來讀取,從而向SPU廣播該指令/數(shù)據(jù)。這在CBE架構(gòu)中尤其有用,因為總線架構(gòu)自身并不支持向SPU廣播指令/數(shù)據(jù)。相反,總線架構(gòu)被構(gòu)建為使得每個SPU可單獨標識并且可以提供有不同的指令/數(shù)據(jù)集。然而,如上所述,盡管總線架構(gòu)不允許廣播指令/數(shù)據(jù),但CBE架構(gòu)自身通過以示意性實施方式所闡述的方式來操作SPU_IDR而支持廣播。
示意性實施方式提供用于向多處理器設備(例如圖1所示的CBE架構(gòu)片上系統(tǒng))中的多個處理器(例如SPU 140-154)廣播指令/數(shù)據(jù)的系統(tǒng)和方法。該示意性實施方式采用SPU_IDR作為混疊存儲器區(qū)域的手段,從而多個SPU從該相同的混疊存儲器區(qū)域中讀取指令/數(shù)據(jù)。PPE 110提供有廣播引擎和SPU_IDR配置存儲。該廣播引擎負責寫入到為指令/數(shù)據(jù)將被廣播至的SPU所選定的SPU_IDR,從而將這些SPU_IDR的值設定為相同值。廣播引擎將用于這些SPU_IDR的原始值寫入到SPU_IDR配置存儲,從而它們可以稍后在廣播了指令/數(shù)據(jù)之后得到恢復。
廣播引擎進一步負責將指令/數(shù)據(jù)寫入到可由選定SPU訪問的混疊存儲器區(qū)域中。一旦完成了指令/數(shù)據(jù)的廣播,則廣播引擎將存儲在SPU_IDR配置存儲中的SPU_IDR值恢復為各SPU_IDR,從而可以恢復CBE片上系統(tǒng)的正常操作。
因此,廣播引擎暫時將多個SPU設定為相同的SPU標識符,并將指令/數(shù)據(jù)寫入到可由具有相同SPU標識符的SPU進行訪問的混疊存儲器區(qū)域中。然后,廣播引擎將SPU設定為其原始SPU標識符并恢復多處理器設備的正常操作。
圖4A-圖4C是示出了根據(jù)一個示意性實施方式的用于向多處理器系統(tǒng)中的多個處理器廣播數(shù)據(jù)的機制的示例圖。為簡化起見,圖4A-圖4C所示出的示意性實施方式采用三個SPU和它們的對應本地存儲存儲器區(qū)域。應當意識到,在該示意性實施方式中可以使用任意數(shù)量的SPU,而不脫離本發(fā)明的實質(zhì)和范圍。例如,如圖1所示,可以提供7個SPU,因此在一個示意性實施方式中可以采用7個本地存儲存儲器區(qū)域。
如圖4A所示,在正常操作期間,PPE 410向用于各SPU的各存儲器區(qū)域(即本地存儲)寫入指令和數(shù)據(jù)。因此,待由SPU 0進行處理的指令和/或數(shù)據(jù)被寫入到用于SPU 0的本地存儲存儲器區(qū)域中,待由SPU 1進行處理的指令和/或數(shù)據(jù)被寫入到用于SPU 1的本地存儲存儲器區(qū)域中,等等。
每個SPU 0-SPU 2具有關聯(lián)的用于指定SPU(例如0、1和2)的標識的SPU_IDR 420-424。用于每個SPU的本地存儲存儲器區(qū)域通過起始地址和本地存儲大小來定義。該起始地址基于SPU標識符(例如0、1或2)、本地存儲大小以及基本寄存器地址BP_base來確定。因此,用于SPU 0的本地存儲具有處于BP_base的起始地址(即0*LS_size+BP_base),用于SPU 1的本地存儲具有處于LS_size+BP_base的起始地址(即1*LS_size+BP_base),用于SPU 2的本地存儲的起始地址處于2LS_size+BP_base。每個SPU可以從對應于它們各自起始地址和本地存儲大小的本地存儲存儲器區(qū)域中讀取指令/數(shù)據(jù)以及向該區(qū)域?qū)懭胫噶?數(shù)據(jù)。
如圖4B所示,當將要執(zhí)行指令/數(shù)據(jù)的廣播時,PPE 410的廣播引擎412可以選擇指令/數(shù)據(jù)將要被廣播至的SPU,其可以是所有SPU或SPU的選定子集,并且可以在SPU_IDR配置存儲414中存儲它們的原始SPU_IDR值。然后廣播引擎412可以將公用SPU標識符寫入到選定SPU的SPU_IDR。例如,廣播引擎412可以將SPU 0標識符寫入到用于SPU 0和1的SPU_IDR 420和422,從而使得兩個SPU就像它們是相同的SPU(即SPU 0)一樣操作。
結(jié)果,當SPU 0和1企圖從它們的本地存儲存儲器區(qū)域中進行讀取時,兩個SPU從起始于對應于SPU 0的起始地址的相同本地存儲存儲器區(qū)域中進行讀取,該相同本地存儲存儲器區(qū)域即為起始于BP_base的起始地址(即0*LS_size+BP_base)的本地存儲存儲器區(qū)域。以此方式,相同本地存儲存儲器區(qū)域在兩個或更多SPU之間混疊。
一旦選定SPU被重新配置為具有存儲在SPU_IDR中的相同值時,則廣播引擎412可以將待廣播至選定SPU的指令/數(shù)據(jù)寫入到對應于公用SPU_IDR值的本地存儲存儲器區(qū)域。當選定SPU(例如SPU 0和SPU 1)從它們的本地存儲存儲器區(qū)域中讀取時,二者將從所廣播的指令/數(shù)據(jù)已經(jīng)被寫入的混疊本地存儲存儲器區(qū)域中進行讀取,因此兩個SPU將接收待處理的相同指令/數(shù)據(jù)。因此,即使總線架構(gòu)本身并不支持指令/數(shù)據(jù)的廣播,指令/數(shù)據(jù)也已經(jīng)廣播給了多個SPU。
在所廣播的指令/數(shù)據(jù)已經(jīng)被選定SPU讀取之后,這可以通過使用CBE架構(gòu)中提供的同步指令來確定,SPU_IDR值必須返回到它們的原始值以恢復系統(tǒng)的正常操作。如圖4C所示,為了恢復正常操作,PPE 410的廣播引擎412在來自SPU_IDR配置存儲414的原始SPU_IDR值中進行讀取并將這些原始值寫回到它們各自的SPU_IDR420和422。以此方式,本地存儲存儲器區(qū)域的起始地址返回到它們的正常值。此后,以與針對圖4A的上述描述相同的方式將指令和數(shù)據(jù)寫入到本地存儲存儲器區(qū)域,并且SPU以針對圖4A的上述描述的正常方式來讀取和寫入這些本地存儲存儲器區(qū)域。
因此,示意性實施方式提供了一種用于混疊存儲器區(qū)域從而其可以由多處理器系統(tǒng)中的多個處理器來訪問的機制。可以將待廣播到多個處理器的指令和數(shù)據(jù)寫入到該混疊的存儲器區(qū)域中,從而該多個處理器可以讀取指令和數(shù)據(jù)并對它們進行處理。存儲器區(qū)域的混疊可以通過將與多個處理器相關聯(lián)的存儲器區(qū)域的起始地址設定為相同起始地址而實現(xiàn)。針對多個處理器將起始地址設定為相同值可以通過將處理器的標識符設定為相同值而實現(xiàn)。以此方式,處理器表現(xiàn)得就像它們是用于廣播指令/數(shù)據(jù)目的的相同處理器一樣,即使它們在實際上是多處理器系統(tǒng)中的不同處理器。
圖5是列出了用于將數(shù)據(jù)廣播到多處理器系統(tǒng)中多個處理器的示例性操作的流程圖??梢岳斫獾氖?,流程圖中的每個框以及流程圖中多個框的組合可以由計算機程序指令來實現(xiàn)。這些計算機程序指令可以提供給處理器或其他可編程數(shù)據(jù)處理裝置以產(chǎn)生機器,從而在處理器或其他可編程數(shù)據(jù)處理裝置上執(zhí)行的指令創(chuàng)建用于實現(xiàn)一個流程框或多個框中所指定的功能的裝置。這些計算機程序指令還可以存儲在計算機可讀存儲器或存儲介質(zhì)中,并且能夠引導處理器或其他可編程數(shù)據(jù)處理裝置以特定方式進行工作,從而存儲在計算機可讀存儲器或存儲介質(zhì)中的指令產(chǎn)生包括指令裝置的制造產(chǎn)品,該指令裝置實現(xiàn)流程框中所指定的功能。
因此,流程圖的框支持用于執(zhí)行指定功能的裝置的組合、用于執(zhí)行指定功能的程序指令裝置以及用于執(zhí)行指定功能的步驟的組合。還將可以理解,流程圖的每個框以及流程圖中框的組合可以由執(zhí)行指定功能或步驟的基于專用硬件的計算機系統(tǒng)來實現(xiàn),或由專用硬件和計算機指令的組合來實現(xiàn)。
如圖5所示,該操作開始于控制處理器(例如PPE)的廣播操作的初始化(步驟510)。例如可以響應于指示應當將相同的指令/數(shù)據(jù)提供給多處理器系統(tǒng)中的多個處理器的操作系統(tǒng)、應用等等來執(zhí)行廣播操作的初始化??梢蕴峁S脧V播指令以標識將指令/數(shù)據(jù)廣播到多處理器系統(tǒng)中多個處理器的需要。
與控制處理器相關聯(lián)的廣播引擎確定多處理器系統(tǒng)中的哪些處理器將接收廣播指令/數(shù)據(jù)(步驟520)。在某些示意性實施方式中,指令/數(shù)據(jù)的廣播總是針對多處理器器系統(tǒng)中的所有處理器或協(xié)同處理器來執(zhí)行。在其他示意性實施方式中,廣播可以相對于多處理器系統(tǒng)中處理器的選定子集來執(zhí)行。在后一種情況中,例如可以通過控制處理器(PPE)來確定哪些處理器將接收廣播指令/數(shù)據(jù)。將要接收廣播數(shù)據(jù)的處理器可以映射到單一地址空間,而意在繼續(xù)它們的正常操作的處理器可以保持不變。
然后廣播引擎取回存儲在它們各自存儲器映射輸入/輸出標識寄存器中的針對這些處理器的當前標識符值(步驟530)。這些原始標識符值由廣播引擎存儲在配置存儲中,以隨后用于將系統(tǒng)返回到正常操作狀態(tài)(步驟540)。然后該廣播引擎可以將公用標識符寫入到與廣播指令/數(shù)據(jù)將要發(fā)送至的選定處理器相關聯(lián)的每個標識符寄存器中(步驟550)。如先前所述,由于處理器的標識符用于標識與各個處理器相關聯(lián)的存儲器區(qū)域的起始地址,將標識符設定為公用標識符,該處理實質(zhì)上是將所有的處理器指向相同的存儲器區(qū)域,從而混疊該存儲器區(qū)域以供所有的選定處理器使用。
然后廣播引擎可以將待廣播指令/數(shù)據(jù)寫入到起始地址所指定的存儲器區(qū)域中,其中該起始地址對應于寫入到選定處理器的標識符寄存器的公用標識符(步驟560)。然后選定處理器可以從混疊的存儲器區(qū)域中讀取指令/數(shù)據(jù)(步驟570)。然后廣播引擎可以從配置存儲中取回原始標識符值(步驟580)并將這些原始值寫回到適當?shù)臉俗R符寄存器中(步驟590)。此后,恢復系統(tǒng)的正常操作(步驟600)并且該處理終結(jié)。
應當注意到,在使用公用標識符將每個處理器的起始地址設定為公用起始地址之后,將系統(tǒng)返回到正常操作可能存在問題,因為多個處理器全部與相同的地址區(qū)域相關聯(lián)。因此,如果將原始標識符寫入到該地址區(qū)域以將處理器的標識符重新設定回其原始值,那么指向此地址區(qū)域的所有處理器將被重新設定為該原始值。因此,在返回到正常操作時能夠隔離每個處理器是很有必要的。
可以執(zhí)行此隔離的一種方法是提供分離于和獨立于存儲針對SPE的SPU_IDR值的本地存儲的特權(quán)地址區(qū),例如存儲SPU_IDR的MMIO寄存器。這可以通過允許實現(xiàn)具有偏移寄存器而不是使這些MMIO寄存器作為用于本地存儲的地址區(qū)的一部分而實現(xiàn),其中該偏移寄存器允許特權(quán)區(qū)針對每個處理器而進行交錯(stagger)。以此方式,盡管為了廣播的目的而將處理器重定向至相同本地存儲起始地址將影響本地存儲地址區(qū),特權(quán)地址區(qū)不受該重定向的影響并且可以由特權(quán)處理器(例如PPE)獨立地寫入,以改變處理器的標識符。還可以通過允許特權(quán)區(qū)具有與本地存儲的基本寄存器類似方式的基本寄存器來進行該處理。因此,通過寫入到獨立于本地存儲地址區(qū)而提供的SPU_IDR,該示意性實施方式的機制可以修改每個處理器的起始地址,以執(zhí)行廣播并將系統(tǒng)返回到正常操作模式。
在可選實施方式中,可以使用功率管理機制來實現(xiàn)處理器標識符值的修改及返回。例如,可以將處理器放置于睡眠(SRI)操作模式,在該模式中禁止對處理器的所有訪問。在此SRI操作模式中,保持處理器上剩余狀態(tài)。該SRI模式可用于對個體處理器打開thold,而這相對于系統(tǒng)的剩余部分基本上“關閉”了該處理器。隨著thold的打開,處理器將不對EIB做出響應。
使用此功率管理機制,為了撤銷廣播操作模式,除了其中一個處理器之外,使用SRI操作模式,“關斷”所有要求它們的標識符返回到原始值的處理器??梢詫诠脴俗R符的公用地址區(qū)執(zhí)行寫入操作。保持激活的那一個處理器可以讀取該原始標識符值并且使其相關聯(lián)的標識符寄存器設定為原始標識符值,從而將保持激活的那一個處理器的標識符改變回其原始值。然后針對要求它們的標識符返回原始值的處理器中的每個來重復該處理,直到所有的這些處理器使它們相關聯(lián)的標識符返回到它們的原始值為止。
盡管示意性實施方式可以采用這些機制中的一個或組合,但應當理解的是,這些示意性實施方式并不局限于這些用于修改處理器標識符并將處理器標識符返回其原始值的機制。相反,用于實現(xiàn)處理器標識符值的修改和返回的任何適當方式都處于本發(fā)明的實質(zhì)和范圍中。
因此,著眼于以上描述,示意性實施方式提供了一種用于將指令/數(shù)據(jù)廣播到多處理器系統(tǒng)(例如CBE片上系統(tǒng))中的多個處理器的機制。該示意性實施方式提供了一種這樣的機制混疊存儲器區(qū)域以由多個處理器使用,從而存儲在混疊存儲器區(qū)域中的指令/數(shù)據(jù)可以由每個處理器來讀取以進行處理。以此方式,可以將指令和/或數(shù)據(jù)廣播至處理器的選定集,而不要求總線架構(gòu)支持指令/數(shù)據(jù)的廣播傳送。
示意性實施方式可以采用完全硬件實施方式、完全軟件實施方式或包含硬件和軟件元件二者的實施方式的形式。在優(yōu)選的實施方式中,本發(fā)明以軟件來實現(xiàn),其包括但不限于固件、駐留軟件、微代碼等等。
而且,示意性實施方式可以采用可從計算機可用或計算機可讀介質(zhì)來訪問的計算機程序產(chǎn)品的形式,所述計算機程序產(chǎn)品提供程序代碼,其中該程序代碼可以由計算機或任何指令執(zhí)行系統(tǒng)使用或與之相聯(lián)系。為了說明起見,計算機可用或計算機可讀介質(zhì)可以是任何能夠包含、存儲、通信、傳播或傳送由指令執(zhí)行系統(tǒng)、裝置或設備使用或與之相聯(lián)系的程序的裝置。
該介質(zhì)可以是電子、磁性、光學、電磁、紅外或半導體系統(tǒng)(或設備或裝置)或傳播介質(zhì)。計算機可讀介質(zhì)的例子包括半導體或固態(tài)存儲器、磁帶、可移動計算機盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、剛性磁盤和光盤。光盤的當前例子包括壓縮盤-只讀存儲器(CD-ROM)、壓縮盤-讀/寫存儲器(CD-R/W)和DVD。
如上所述,適用于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個通過系統(tǒng)總線直接或間接耦合至存儲器元件的處理器。該存儲器元件可以包括在程序代碼實際執(zhí)行期間所使用的本地存儲器、海量存儲器以及為至少某些程序代碼提供臨時存儲以減少在執(zhí)行期間必須從海量存儲器中取回代碼的次數(shù)的高速緩存。
輸入/輸出或I/O設備(包括但不限于鍵盤、顯示器、點擊設備等)可以直接或通過中介I/O控制器來耦合至系統(tǒng)。網(wǎng)絡適配器也可以耦合至該系統(tǒng),以使得數(shù)據(jù)處理系統(tǒng)能夠通過中介私用或公用網(wǎng)絡而耦合至其他數(shù)據(jù)處理系統(tǒng)或遠程打印機或存儲設備。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器以及以太網(wǎng)卡僅是當前可用類型的網(wǎng)絡適配器中的一些。
提供本發(fā)明的說明書的目的是為了說明和描述,而不是用來窮舉或?qū)⒈景l(fā)明限制為所公開的形式。對本領域的一般技術人員而言,許多修改和變更都是顯而易見的。選擇并描述實施方式是為了更好地解釋本發(fā)明的原理、其實際應用,并使本領域的其他一般技術人員理解帶有各種修改的各種實施方式的本發(fā)明同樣適用于設想的特定用途。
權(quán)利要求
1.一種方法,用于在多處理器系統(tǒng)中向多個處理器廣播數(shù)據(jù),該方法包括針對所述的多個處理器中的每個處理器而將用于分配給所述處理器的存儲器區(qū)域的起始地址修改為用于所述的多個處理器中每個處理器的公用起始地址;將待廣播至所述的多個處理器的數(shù)據(jù)寫入到對應于所述公用起始地址的存儲器區(qū)域中;以及針對所述的多個處理器中的每個處理器,在將待廣播的數(shù)據(jù)寫入到對應于所述公用起始地址的存儲器區(qū)域中之后,將用于分配給所述處理器的所述存儲器區(qū)域的起始地址修改為在所述的多個處理器之間非公用的原始起始地址。
2.根據(jù)權(quán)利要求1所述的方法,其中所述的多個處理器是所述多處理器系統(tǒng)中所有處理器的子集。
3.根據(jù)權(quán)利要求1所述的方法,其中修改用于存儲器區(qū)域的起始地址的步驟包括向與處理器相關聯(lián)的標識符寄存器寫入公用標識符值,其中所述公用標識符值對于所述的多個處理器中每個處理器是相同的。
4.根據(jù)權(quán)利要求3所述的方法,其中所述起始地址由下列關系來確定起始地址=標識符*大小+基本偏移其中所述標識符是在與所述處理器相關聯(lián)的標識符寄存器中提供的處理器的標識符值,所述大小是與所述處理器相關聯(lián)的存儲器區(qū)域的大小,而所述基本偏移是第一存儲器區(qū)域的偏移地址值。
5.根據(jù)權(quán)利要求3所述的方法,其中針對所述的多個處理器中每個處理器而將用于分配給所述處理器的所述存儲器區(qū)域的起始地址修改為在所述的多個處理器之間非公用的原始起始地址的步驟包括獨立于與所述處理器相關聯(lián)的所述存儲器區(qū)域,提供與所述處理器相關聯(lián)的標識符寄存器;以及將原始標識符值寫入到所述標識符寄存器,從而將用于分配給所述處理器的所述存儲器區(qū)域的所述起始地址修改為所述原始起始地址。
6.根據(jù)權(quán)利要求3所述的方法,其中針對所述的多個處理器中每個處理器,而將用于分配給所述處理器的所述存儲器區(qū)域的起始地址修改為在所述的多個處理器之間非公用的原始起始地址的步驟包括除了一個處理器之外,將所述的多個處理器中的所有處理器放置于睡眠(SRI)操作模式;將原始標識符值寫入與所述處理器相關聯(lián)的存儲器區(qū)域;使所述的一個處理器讀取所述原始標識符值并將其在所述標識符寄存器中的標識符值設定為所述原始標識符值;以及對上述放置步驟、寫入步驟和讀取步驟進行迭代重復,從而所述的多個處理器中的每個處理器將其標識符值返回到原始標識符值。
7.根據(jù)權(quán)利要求1所述的方法,其中所述多處理器系統(tǒng)是具有控制處理器和多個協(xié)同處理器的多處理器系統(tǒng),并且其中所述的多個協(xié)同處理器構(gòu)成所述的多個處理器。
8.根據(jù)權(quán)利要求7所述的方法,其中所述多處理器系統(tǒng)是異構(gòu)多處理器系統(tǒng),在該系統(tǒng)中所述的多個協(xié)同處理器使用不同于所述控制處理器的指令集進行操作。
9.一種多處理器計算系統(tǒng),包括控制處理器;以及耦合至所述控制處理器的多個協(xié)同處理器,其中所述控制處理器用于針對所述的多個協(xié)同處理器中的每個協(xié)同處理器而將用于分配給所述協(xié)同處理器的存儲器區(qū)域的起始地址修改為用于所述的多個協(xié)同處理器中每個協(xié)同處理器的公用起始地址;將待廣播至所述的多個協(xié)同處理器的數(shù)據(jù)寫入到對應于所述公用起始地址的存儲器區(qū)域中;以及針對所述的多個協(xié)同處理器中的每個協(xié)同處理器,在將待廣播的數(shù)據(jù)寫入到對應于所述公用起始地址的所述存儲器區(qū)域中之后,將用于分配給所述協(xié)同處理器的所述存儲器區(qū)域的起始地址修改為在所述的多個協(xié)同處理器之間非公用的原始起始地址。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其中所述的多個協(xié)同處理器是所述多處理器計算系統(tǒng)中所有協(xié)同處理器的子集。
11.根據(jù)權(quán)利要求9所述的系統(tǒng),其中所述控制處理器通過如下步驟來修改用于存儲器區(qū)域的起始地址向與所述的多個協(xié)同處理器中的協(xié)同處理器相關聯(lián)的標識符寄存器寫入公用標識符值,其中所述公用標識符值對于所述的多個協(xié)同處理器中每個協(xié)同處理器是相同的。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其中所述起始地址由下列關系來確定起始地址=標識符*大小+基本偏移其中所述標識符是在與所述協(xié)同處理器相關聯(lián)的標識符寄存器中提供的協(xié)同處理器的標識符值,所述大小是與所述協(xié)同處理器相關聯(lián)的存儲器區(qū)域的大小,而所述基本偏移是第一存儲器區(qū)域的偏移地址值。
13.根據(jù)權(quán)利要求11所述的系統(tǒng),其中所述控制處理器針對所述的多個協(xié)同處理器中每個協(xié)同處理器而通過如下步驟將用于分配給所述協(xié)同處理器的所述存儲器區(qū)域的起始地址修改為在所述的多個協(xié)同處理器之間非公用的原始起始地址獨立于與所述協(xié)同處理器相關聯(lián)的所述存儲器區(qū)域,提供與所述協(xié)同處理器相關聯(lián)的標識符寄存器;以及將原始標識符值寫入到所述標識符寄存器,從而將用于分配給所述協(xié)同處理器的所述存儲器區(qū)域的所述起始地址修改為所述原始起始地址。
14.一種方法,用于在多處理器系統(tǒng)中,向具有共享存儲器的多個處理器廣播數(shù)據(jù),該方法包括針對所述的多個處理器中的每個處理器而對共享存儲器中分配給所述處理器的存儲器區(qū)域的起始地址進行修改,從而所述的多個處理器中的每個處理器在所述共享存儲器中具有公用起始地址;將數(shù)據(jù)寫入到所述公用起始地址所標識的存儲器區(qū)域中,從而將所述數(shù)據(jù)廣播到所述的多個處理器;以及響應于將數(shù)據(jù)寫入到所述公用起始地址所標識的存儲器區(qū)域,針對每個處理器而對用于分配給所述處理器的所述存儲器區(qū)域的所述起始地址進行修改,從而每個處理器在所述共享存儲器中具有唯一的起始地址。
全文摘要
提供了一種用于通過混疊向多處理器設備中的多個處理器廣播指令/數(shù)據(jù)的系統(tǒng)和方法。為了向多個處理器廣播數(shù)據(jù),控制處理器對存儲多個處理器的標識符的寄存器進行寫入,并將這些寄存器中的兩個或更多設定為相同值。控制處理器可以將待被廣播的期望數(shù)據(jù)/指令寫入到與起始地址相對應的存儲器部分中,其中該起始地址與兩個或更多處理器的處理器標識符相關聯(lián)。當兩個或更多處理器尋找從其中進行讀取的本地存儲的起始地址時,這兩個或更多處理器將標識相同的起始地址,本質(zhì)上混疊了該存儲器區(qū)域。這兩個或更多處理器將從開始于被標識起始地址的相同混疊存儲器區(qū)域中讀取指令/數(shù)據(jù)并處理該相同的指令/數(shù)據(jù)。
文檔編號G06F12/02GK101082900SQ20071010748
公開日2007年12月5日 申請日期2007年5月15日 優(yōu)先權(quán)日2006年6月1日
發(fā)明者S·L·羅伯茨, C·J·斯潘迪科, A·P·伯恩斯, T·斯旺森 申請人:國際商業(yè)機器公司