專利名稱:可避免寫后讀的危險的存儲器指令的發(fā)出和執(zhí)行的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于在計算機(jī)系統(tǒng)中發(fā)出及執(zhí)行指令的方法和裝置。
背景技術(shù):
現(xiàn)今處理器的很大一部分復(fù)雜性可歸因于試圖掩飾存儲器訪問的等待時間。多線程、非順序處理、預(yù)取存儲器數(shù)據(jù)、預(yù)測執(zhí)行皆為這種例子。技術(shù)發(fā)展趨勢表明存儲器速度無法趕上處理器速度。盡管現(xiàn)在的存儲器設(shè)計提供了有限的流水線處理及層次結(jié)構(gòu),但本申請人于一共同未決申請中揭示一種在恒定帶寬下具有線性等待時間函數(shù)的可伸縮式流水線層次結(jié)構(gòu)。與本申請同時提交的共同未決申請、IBM公司文檔編號YOR920010439US1、標(biāo)題為“可伸縮式存儲器”,其全部內(nèi)容作為參考資料并入本申請。然而,現(xiàn)在的處理器無法利用此種不受限制的流水線結(jié)構(gòu),因?yàn)檫@些處理器傾向于記憶未完成的存儲器請求。因?yàn)樘幚砥鲀H具有有限的資源,這使存儲器流水線的利用受到極大的限制。該些資源包含有限數(shù)量的緩沖器,該些緩沖器存儲與一標(biāo)記相關(guān)的指令的信息。以IBM公司的Power PC處理器為例,其至多能具有8至16個未完成的存儲器操作,而其它競爭廠商的處理器受更大的限制。此項(xiàng)限制的存在,是因?yàn)樘幚砥骶哂袑S觅Y源以記憶待處理的存儲器請求,并于數(shù)據(jù)到達(dá)后指明數(shù)據(jù)的下一步處理。舉例而言,當(dāng)一針對已發(fā)出的存儲器指令之響應(yīng)從計算機(jī)系統(tǒng)的存儲器返回時,該響應(yīng)將只包含由存儲器獲取之?dāng)?shù)據(jù)及存儲器標(biāo)記。為執(zhí)行該發(fā)出的指令,使用該標(biāo)記以獲取存儲在處理器的緩沖器中的操作碼及目標(biāo)地址。另一限制為處理器中的寄存器數(shù)量有限,及處理器不能對任何不存在于寄存器中的數(shù)據(jù)進(jìn)行操作?,F(xiàn)今的處理器僅當(dāng)在處理器的寄存器中存在操作數(shù)時才能執(zhí)行,因此寄存器數(shù)量限制了可同時執(zhí)行的指令數(shù)目。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一方面,提供了一種處理器,該處理器能發(fā)出可以流水線方式處理的、不限數(shù)量的存儲器請求。此一方面的實(shí)現(xiàn)是通過組織所有指令來處理來自存儲器的數(shù)據(jù),并以足夠的信息來封裝存儲器請求,以便獨(dú)立地處理返回的數(shù)據(jù)。該方面將處理器的指令發(fā)出部件及執(zhí)行部件分開,且任一該部件維持極少量的狀態(tài)信息,并以近似“無狀態(tài)”的方式運(yùn)行。該極少量狀態(tài)信息包含一程序計數(shù)器及一些柵欄計數(shù)器(fence counter)。
本發(fā)明的另一方面是在相應(yīng)的寫至存儲器之前,避免從存儲器中讀取數(shù)據(jù),即避免已知的寫后讀之危險。此方面在處理器發(fā)出大量指令的時候尤其重要,其中所有發(fā)出的指令尚未執(zhí)行,即存在大量尚未完成的寫入至存儲器的操作。在使用上文提及的共同未決申請中公開的線性存儲器時可能發(fā)生上述大量指令,該共同未決申請及本申請皆轉(zhuǎn)讓給相同的受讓人。
本發(fā)明通過維持一柵欄計數(shù)器或者說用于存儲器中若干區(qū)域中的每一個區(qū)域的計數(shù)器,來防止寫后讀的危險,其中使用該計數(shù)器值來控制處理器發(fā)出進(jìn)一步的指令。依據(jù)本發(fā)明,當(dāng)發(fā)出一指定某一特定存儲器區(qū)域的柵欄指令時,若該特定存儲器區(qū)域的計數(shù)器值超過一閾值時,將不再發(fā)出進(jìn)一步的指令。每一存儲器區(qū)域的計數(shù)器值于每次發(fā)出一其目標(biāo)位置位于該區(qū)域內(nèi)的指令時增加;在每次執(zhí)行一指令以寫入該存儲器區(qū)域時減少。該閾值通常設(shè)置為零。
圖1所示為根據(jù)本發(fā)明的可伸縮式處理器的示意圖;圖2所示為當(dāng)一相應(yīng)的寫入操作之前提交一讀取操作時,所發(fā)生的寫后讀之危險的示意圖;圖3所示為根據(jù)本發(fā)明的處理器中的發(fā)出單元及執(zhí)行單元的算法;圖4所示為可與本發(fā)明之處理器一起使用的線性存儲器系統(tǒng)的示意圖;圖5所示為控制器中用以傳遞對請求的響應(yīng)至處理器的邏輯的流程圖;及圖6所示為一狀態(tài)圖,其中每一狀態(tài)指出存儲于一控制器di中的各緩沖器中的響應(yīng)的數(shù)目。
具體實(shí)施例方式
圖1所示為可伸縮式處理器系統(tǒng)100的一般示意圖。該系統(tǒng)使用先前提及的IBM公司文檔編號YOR920010439中揭示的線性存儲器16。為方便起見,本申請的發(fā)明人將該存儲器擴(kuò)展成具有用于讀取請求的一端口3及用于寫入請求的兩端口4。此種作法純粹用以匹配能在每一周期中傳送兩結(jié)果的線性存儲器16。兩個執(zhí)行單元17獨(dú)立耗用這些結(jié)果14,及獨(dú)立地提交寫入請求。此種組織確保該些線12上的請求不會相互干擾。
向上路徑分割為三個并行的路徑11-12,其中一路徑11傳送讀取請求至存儲器中,而其它兩路徑12傳送寫入請求至該存儲器中。此種作法純粹為方便起見,而不會以任何方式增加輸入帶寬。
讀取請求傳送兩個目標(biāo)地址x及y。該讀取請求首先行進(jìn)至較早位置以收集數(shù)據(jù),并進(jìn)一步在向上路徑中向上行進(jìn)到達(dá)第二位置,以收集第二部分?jǐn)?shù)據(jù)。其結(jié)果在向下路徑13行進(jìn),傳送被請求的一對數(shù)據(jù)項(xiàng)。此種方式導(dǎo)致在該些路徑上的等待時間的恒定增加,但不會以任何方式改變帶寬要求。
指令格式處理器將不具有寄存器,并對其所有數(shù)據(jù)使用一線性存儲器層次結(jié)構(gòu)-最低級表示寄存器。指令的一般形式為op(x,y.z),其中x、y、z為存儲器位置的地址,且其語義為對來自位置x及y的數(shù)據(jù)執(zhí)行操作(op)并將結(jié)果存儲至位置z。對于一元操作,可省略第二操作數(shù)。一經(jīng)常使用的一元指令為move(x,z)指令,該指令復(fù)制位置x的數(shù)據(jù)至位置z。
指令發(fā)出及執(zhí)行參見圖1,處理器9包含發(fā)出指令50的單一發(fā)出單元19及兩個執(zhí)行單元17,當(dāng)獲得數(shù)據(jù)時上述任一執(zhí)行單元都能執(zhí)行任何操作。數(shù)個發(fā)出及執(zhí)行單元能在單一硬件芯片上以硬件實(shí)現(xiàn)。一指令經(jīng)歷兩個階段,即發(fā)出階段及執(zhí)行階段。在發(fā)出階段中,一個雙操作數(shù)取被提交至線性存儲器10中。操作碼及目的地信息被附加于請求上,并與數(shù)據(jù)一同返回。當(dāng)存儲器返回該雙操作數(shù)數(shù)據(jù)時,執(zhí)行階段開始。每一執(zhí)行單元接收操作數(shù)數(shù)據(jù)14、執(zhí)行操作及提交寫入請求至存儲器10以存儲結(jié)果。各指令以與其在程序中的排列次序相同的次序發(fā)出。因?yàn)槌诉@些指令所指定的外,存儲器不會有任何其余的數(shù)據(jù)移動,程序得以充分控制存儲器,并在需要數(shù)據(jù)時經(jīng)由發(fā)出移動指令迫使數(shù)據(jù)更接近處理器,藉此顯性地進(jìn)行存儲器管理。存儲器的流水線性質(zhì)便于在執(zhí)行其它指令時,同時移動數(shù)據(jù)。典型地,當(dāng)使用本發(fā)明時,程序設(shè)計者在處理器需要數(shù)據(jù)時,會使用移動指令迫使數(shù)據(jù)更接近該處理器。
寫后讀之危險因?yàn)榘l(fā)出單元及執(zhí)行單元并行執(zhí)行,必須保證對一位置的寫入操作的提交應(yīng)發(fā)生在一相應(yīng)的對該位置的讀取操作被提交之前。參閱圖2的說明。對于指令op(x,y,z)而言,在發(fā)出與執(zhí)行該指令的時間間隔中,寫入至z的請求被稱為未完成的。如下文中說明的,可經(jīng)由追蹤未完成的至存儲器的諸區(qū)域的寫入,來防止寫后讀的危險。圖2中的實(shí)線路徑說明移動指令21如何執(zhí)行。當(dāng)該移動指令發(fā)出時,位置y被讀取,并且數(shù)據(jù)流動至執(zhí)行單元17。在該執(zhí)行單元執(zhí)行時,該結(jié)果被送至并存儲在位置x。然而,發(fā)出單元并行地進(jìn)行,并在發(fā)出上述指令之后發(fā)出其它指令。ADD指令22是一隨后指令的例子,該指令使用位置x且其路徑以虛線11a說明。若該ADD法指令在先前的儲存至位置x發(fā)生之前發(fā)出,將會有危險。
柵欄計數(shù)器處理器配置有一組有限數(shù)目的柵欄計數(shù)器。每一柵欄計數(shù)器與存儲器的一區(qū)域相關(guān)。通過將這些區(qū)域的大小選擇為2的乘方,則需要logN個柵欄計數(shù)器,這樣,在實(shí)踐上維持logN計數(shù)器并不是嚴(yán)重的限制。參考圖3,當(dāng)每次發(fā)出如op(x,y,z)的一指令時(步驟31),與包含z的范圍相關(guān)的柵欄計數(shù)器值會增加(步驟36),并且將一請求送至存儲器,以讀取例如位置x及y中的數(shù)據(jù)。參考圖3中的步驟37。然后,例如將獲得的數(shù)據(jù)(數(shù)據(jù)1,數(shù)據(jù)2)傳送至執(zhí)行單元,如圖3中的步驟38所示。當(dāng)執(zhí)行單元完成該操作(步驟33),亦即op(數(shù)據(jù)1,數(shù)據(jù)2,z),并提交一寫入至位置z的請求(步驟33),相應(yīng)的柵欄計數(shù)器值(圖1中的18)會減少(步驟34)。因此,柵欄計數(shù)器包含未完成的至其相關(guān)范圍中的位置的寫入的數(shù)量。柵欄設(shè)置是通過程序(按釋放一致性模型的方式),以在合適處插入一形式為“fence(存儲器區(qū)域)”的特殊指令而顯性地完成。參考圖2中的步驟23。當(dāng)發(fā)出單元32遇到一柵欄指令時,該發(fā)出單元等候(步驟35)直到相應(yīng)的柵欄計數(shù)器值變?yōu)榱?。程序可利用此種機(jī)制,來防止讀-寫危險,并且可以通過以明智的方式選擇柵欄操作的范圍及位置而更具效率。典型地,計數(shù)器是硬件實(shí)現(xiàn)的。
極端的例子是在每個操作之后,繼以該操作目標(biāo)位置上的一柵欄指令。盡管這可以正確地工作,其程序執(zhí)行卻幾近順序的方式。程序能被組織為積累盡可能多的寫入一區(qū)域中的指令,并隨后在對該區(qū)域的任何位置進(jìn)行訪問前發(fā)出一柵欄指令。能開發(fā)編譯技術(shù)以明智地選擇用于柵欄操作的位置。
圖4說明可伸縮式處理器系統(tǒng)100的一般示意圖。該處理器系統(tǒng)使用線性存儲器16。為方便起見,本發(fā)明人對存儲器進(jìn)行了擴(kuò)展以具有用于讀取請求的一端口3及用于寫入請求的兩端口4。此種作法純粹用以匹配能在每一周期中傳送兩結(jié)果的線性存儲器16。兩執(zhí)行單元17獨(dú)立耗用這些結(jié)果14及提交寫入請求。此種組織確保該些線12上的諸請求不會相互干擾。
讀取請求攜有兩個目標(biāo)地址x及y。該讀取請求首先行進(jìn)至較早位置,收集數(shù)據(jù)并進(jìn)一步在向上路徑中向上行進(jìn)到達(dá)第二位置以收集第二部分?jǐn)?shù)據(jù)。結(jié)果在向下路徑13行進(jìn),傳送該請求的一對數(shù)據(jù)項(xiàng)。
建議的存儲器系統(tǒng)10的結(jié)構(gòu)如圖4所示。為方便說明起見,系統(tǒng)顯示為具有以一維排列的構(gòu)建塊序列。該些塊以位于處理器的L1開始編號,并隨著遠(yuǎn)離該處理器而增加編號。每一第i個構(gòu)建塊Li具有單位存儲器,以mi表示,及兩個控制器,以ui及di表示。所有的控制器ui經(jīng)由單一鏈路5相連而形成“向上路徑”,其傳遞由處理器發(fā)出的請求至存儲器單元。控制器di經(jīng)由一對鏈路7相連而形成“返回路徑”,并傳遞來自存儲器單元的響應(yīng)至處理器。此設(shè)計方式能在向上路徑上支持每一單位時間中來自處理器的一請求,但要求處理器能沿著返回路徑在每一單位時間中接收多至兩個響應(yīng)。因此,此種設(shè)計要求輸出帶寬為輸入帶寬的兩倍。此外,顯示了單一處理器9也連接至此存儲器系統(tǒng)。如一相關(guān)申請中描述的處理器能與本發(fā)明之存儲器系統(tǒng)一同使用,該相關(guān)申請是本申請的受讓人與本申請同時提交的。存儲器請求指定一目標(biāo)存儲器單元地址、操作(讀取/寫入)以及數(shù)據(jù)(如果為寫入操作時)。就尺寸為n的存儲器而言,目標(biāo)地址為介于1至n的任一整數(shù)。而任一大于n的數(shù)字能用來模擬一無操作(亦即處理器不提交任何真正的請求)。
請求及響應(yīng)也攜有存儲器不解釋的附加信息。舉例而言,如處理器執(zhí)行op(x,z)形式的指令,其中x及z為存儲器位置的地址,則其語義為在來自存儲器位置x的數(shù)據(jù)上執(zhí)行操作(op),及將結(jié)果存儲至存儲器位置z。對于此指令,提交的該存儲器請求的形式為[read,x,no-data,<op,z>]。而對此請求的響應(yīng)的形式為[read,x,data,<op,z>],其中“data”為從位置x所取得的數(shù)據(jù)。此響應(yīng)于返回路徑中通過一系列的第二控制器而傳送到處理器。在所顯示的例子中,當(dāng)處理器接收到該響應(yīng)時,在數(shù)據(jù)上執(zhí)行操作,以取得一結(jié)果,比如說w。而后,另一請求由處理器通過一系列位于向上路徑的第一控制器傳送,以將結(jié)果w存儲在存儲器位置z。該請求的格式可以象[write,z,w,no-info],其意味著在位置z存儲數(shù)值w。
每一具有目標(biāo)地址i之請求于向上路徑中行進(jìn),且其副本到達(dá)每一層級的存儲器單元。存儲器單元mi根據(jù)操作來讀取或存儲數(shù)據(jù),并將數(shù)據(jù)傳送至控制器di。寫入操作于此處終止,不產(chǎn)生任何響應(yīng),而讀取操作使該請求轉(zhuǎn)換成一響應(yīng),該響應(yīng)沿著返回路徑行進(jìn)直至到達(dá)處理器。若我們假設(shè)在通信鏈路上行進(jìn)的單位時間及讀取存儲器的單位時間,則對于目標(biāo)地址i之讀取請求于行進(jìn)期間并無阻塞的情況下花費(fèi)2i+1單位時間。控制器設(shè)計成處理阻塞,并確保請求或響應(yīng)流符合前節(jié)所述的需求。參考圖5,用于ui、mi、及di的詳細(xì)邏輯于下文中說明每一周期中的操作見圖4●對于ui所接收的每一請求而言,一副本傳送至mi,且另一副本被傳送至ui+1。于頂點(diǎn)時(i為n時)簡單地舍棄該第二副本。
●對于一讀取操作把數(shù)據(jù)從存儲器復(fù)制至請求中、或?qū)τ谝粚懭氩僮靼褦?shù)據(jù)從請求復(fù)制至存儲器中之后,mi總是傳送請求至di。
●如圖4所示,di具有三個以FIFO(先進(jìn)先出)隊(duì)列組織的內(nèi)部緩沖器6。每一周期開始時,di將任何現(xiàn)存于始自di+1的兩個鏈路上的對請求的響應(yīng)傳送至其內(nèi)部緩沖器中。而后,使用下列算法(見圖5的流程圖)以將響應(yīng)放置在至di-1的兩個外出鏈路上1.如果來自mi的請求是對位置i的讀取,則將該請求轉(zhuǎn)換為一響應(yīng)并放置在于外出鏈路上。此外,來自di的內(nèi)部緩沖器的一個響應(yīng)(如果有的話)被移除,并放置在外出鏈路上(參見圖5中的51)。
2.如果來自mi的請求是寫入至位置i(52),或請求之目標(biāo)為一更高位置,則多至兩個來自di的諸內(nèi)部緩沖器的響應(yīng)(如果有的話)被移除,并放置在外出鏈路上(54)。
3.如果來自mi的請求是對一更低位置的(55),則來自di的諸內(nèi)部緩沖器的一個響應(yīng)(如果有的話)被移除,并置放在外出鏈路上(56)。
模型的特性現(xiàn)在說明伸縮性所需的兩特性每一單元中的恒定緩沖器大小,及線性的存取等待時間●任何di的內(nèi)部緩沖器大小永遠(yuǎn)不會超過3。圖6為用于xi的可能轉(zhuǎn)換,其中xi為每一周期后di中的已填充的緩沖器數(shù)目。狀態(tài)xi=3的不變性表明在該狀態(tài)下,最多一個響應(yīng)可以通過進(jìn)入的鏈路而進(jìn)入,而這確保了xi永遠(yuǎn)不會超過3。為顯示此不變性,我們考查兩種可能的向狀態(tài)xi=3的轉(zhuǎn)換考慮向狀態(tài)xi=3的第一種轉(zhuǎn)換。該轉(zhuǎn)換發(fā)生在這樣的時候,此時初始xi=2,及在來自di+1之鏈路上的兩進(jìn)入的弧線(參見圖4中的7)都攜有響應(yīng),且對mi之請求是對于位置I的或更低。此方式確保在下一周期中,在來自di+1的進(jìn)入的弧線上,至多具有一響應(yīng)。這是因?yàn)閙i+1將在下一周期中處理mi在此周期中處理的相同響應(yīng)的副本,因而di+1執(zhí)行上述算法之第三項(xiàng),只輸出一個響應(yīng)(參見圖5中的55及56)?,F(xiàn)在考慮向狀態(tài)xi=3的第二種轉(zhuǎn)換。此轉(zhuǎn)換發(fā)生于這樣的時候,此時初始xi=3,及存在來自di+1的一個進(jìn)入的請求,且針對mi之請求是對于位置i的或更低。此方式再次確保在下一周期中,在來自于di+1的進(jìn)入的弧線上至多具有一響應(yīng)。
●對位置i的讀取請求將于4i+1個周期內(nèi)返回一相應(yīng)響應(yīng)至處理器。對讀取請求的響應(yīng)在i+1個周期后到達(dá)di,因?yàn)槠渎窂介L度為i+1且于這些路徑上并無延遲。當(dāng)控制器di執(zhí)行算法之第一項(xiàng)時,立即將其放置在外出的弧線上。依據(jù)該算法,所有緩沖器皆以FIFO順序清空,并在每一周期中至少移除來自一緩沖器的一響應(yīng)。因而,來自di的響應(yīng)在其到達(dá)處理器之前最大能經(jīng)歷3i單位的延遲。因此于向上路徑中傳送一請求及于返回路徑中傳送相應(yīng)響應(yīng)至處理器的總延遲至多為4i+1。
我們觀察到本發(fā)明設(shè)計能維持每一位置上的存儲器操作次序,而未指定不同位置上完成操作的次序。此推薦的存儲器系統(tǒng)能以并入存儲器芯片中的標(biāo)準(zhǔn)存儲器邏輯加以執(zhí)行。
權(quán)利要求
1.一種處理指令的系統(tǒng),該系統(tǒng)包括一存儲器,用于存儲數(shù)據(jù);一發(fā)出單元,用于響應(yīng)若干指令中的每一指令,從該存儲器中獲取操作數(shù)數(shù)據(jù),且傳送該每一指令的操作碼及該每一指令的目標(biāo)位置,而不將其存儲于該存儲器或該發(fā)出單元中;以及一執(zhí)行單元,用于根據(jù)該指令的操作碼對該操作數(shù)數(shù)據(jù)進(jìn)行操作,以執(zhí)行該若干指令中的每一指令,并且用于將對該操作數(shù)數(shù)據(jù)的該操作結(jié)果存儲至該存儲器中由該目標(biāo)位置指定的一位置,其中該目標(biāo)位置、該指令的操作碼及該操作數(shù)數(shù)據(jù)是由該執(zhí)行單元接收的。
2.一種處理計算機(jī)系統(tǒng)中指令的方法,該方法包括響應(yīng)于若干指令中的每一指令從一存儲器中獲取一操作數(shù)數(shù)據(jù),并且傳送該操作數(shù)數(shù)據(jù)、一操作碼及一目標(biāo)位置至與該系統(tǒng)相關(guān)的一執(zhí)行單元中;以及根據(jù)該操作碼對該操作數(shù)數(shù)據(jù)進(jìn)行操作,以執(zhí)行每一指令,并且將對該操作數(shù)數(shù)據(jù)的該操作的結(jié)果存儲至該存儲器中由該目標(biāo)位置指定的一位置。
全文摘要
一種用于發(fā)出及執(zhí)行計算機(jī)系統(tǒng)中的存儲器指令的方法和裝置,以使發(fā)出至一高度流水線式存儲器的請求數(shù)目最大化,以及避免在至存儲器(10)的相應(yīng)寫入之前,從存儲器(10)中讀取數(shù)據(jù)。存儲器劃分為數(shù)個區(qū)域,每一區(qū)域與一柵欄計數(shù)器(18)相關(guān)聯(lián),該柵欄計數(shù)器在每次發(fā)出目標(biāo)為該存儲器區(qū)域的存儲器指令時增加,并在每次有對該存儲器區(qū)域的寫入時減少。當(dāng)發(fā)出一柵欄指令后,如果用于柵欄指令中所指定的存儲器區(qū)域的計數(shù)器值超出一閾值,則不發(fā)出進(jìn)一步的存儲器指令(23)。當(dāng)執(zhí)行了足夠數(shù)量的未完成的發(fā)出的指令后,該計數(shù)器值將減少到低于該閾值,然后可以發(fā)出進(jìn)一步的指令。
文檔編號G06F9/38GK1855033SQ20061008250
公開日2006年11月1日 申請日期2001年12月21日 優(yōu)先權(quán)日2001年5月11日
發(fā)明者G·比拉爾迪, P·C·帕特耐克, K·埃卡納德漢姆 申請人:國際商業(yè)機(jī)器公司