專利名稱:用于在計算機(jī)組中處理數(shù)據(jù)的系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明總的來說涉及具有處理架構(gòu)并進(jìn)行指令處理的電計算機(jī)和數(shù)字 處理系統(tǒng),更具體地說,涉及用于對特別支持或進(jìn)行數(shù)字傳輸操作的指令數(shù) 據(jù)進(jìn)行處理的這類電計算機(jī)和數(shù)字處理系統(tǒng)。
背景技術(shù):
在計算領(lǐng)域,處理速度是非常期望的品質(zhì),并且對創(chuàng)造更快速的計算機(jī) 和處理器的探索正在進(jìn)行中。然而,行業(yè)中普遍認(rèn)為,至少對于利用目前已 知的技術(shù)來提高微處理器的速度而言,微處理器速度的極限正在迅速地被接 近。因此,通過在處理器之間分擔(dān)計算機(jī)任務(wù)來提高整體計算機(jī)速度的多處 理器的使用,越來越受到關(guān)注。但是還通常認(rèn)為,在工作量的分擔(dān)中幾乎不 可避免地存在整體效率的一些下降。也就是說,所述多處理器的使用適用以
下古老的諺語僅僅由于一個人可以在60分鐘內(nèi)挖一個柱洞,并不必然得 出60個人可以在1分鐘內(nèi)挖一個柱洞的結(jié)論。同樣的道理幾乎適用于任何 任務(wù)的分工,處理器之間的任務(wù)分工也不例外。
當(dāng)然,正在努力使計算機(jī)處理器之間的任務(wù)分擔(dān)更加高效。正在研究和 過程改進(jìn)的正是如何分配任務(wù)的問題。本發(fā)明人在該領(lǐng)域的工作過程中觀察 到,在某些場合下,在多CPU環(huán)境中將數(shù)據(jù)從一個CPU傳輸?shù)搅硪粋€CPU 可能很麻煩。例如,如果必須將數(shù)據(jù)從一個CPU傳輸?shù)搅硪粋€CPU,且目 標(biāo)CPU與源CPU之間被 一 個CPU隔開,則源CPU必須將該數(shù)據(jù)成 一 直線 直接寫入該CPU,然后,該CPU必須讀取該數(shù)據(jù),并將該數(shù)據(jù)寫入目標(biāo)CPU, 然后目標(biāo)CPU必須讀取該數(shù)據(jù)。這種過程需要多次讀操作和寫操作,而且
如果要傳輸大量的數(shù)據(jù),則這么多的讀命令和寫命令可能會阻塞系統(tǒng)運(yùn)行。為了滿足對允許同時在各種相異方向中-即在同 一 系統(tǒng)中任意的各個不 同CPU之間-進(jìn)行若干個讀操作和寫操作的需求,已經(jīng)開發(fā)了用于多端口讀 和寫操作的系統(tǒng)及方法。這些系統(tǒng)及方法處理了以上討論中的大多數(shù)所關(guān)注
的問題,但是如同任何卓越進(jìn)步那樣,這些系統(tǒng)及方法已經(jīng)引起新的難題。
例如,在CPU以流水線或多維陣列的方式排列的多CPU環(huán)境中,在CPU 對在先CPU而不是后續(xù)CPU進(jìn)行寫的情況下,可能會發(fā)生反轉(zhuǎn)。可以精心
設(shè)計機(jī)制來防止反轉(zhuǎn)的發(fā)生,但是這些機(jī)制的實現(xiàn)必需對硬件進(jìn)行修改或進(jìn)
行大量編程及CPU間的通信。作為另一個例子,目前的很多應(yīng)用需要實時
處理或僅期望提高處理速度和效率。由此可見,對多端口讀和寫々乘作進(jìn)行優(yōu) 化是有益的。類似的原理,既然多端口操作可用,使這些操作的建立和性能 更加靈活也是有益的。
發(fā)明內(nèi)容
相應(yīng)地,本發(fā)明的目的在于提供在計算機(jī)流水線和陣列中處理數(shù)據(jù)的改 進(jìn)系統(tǒng)及方法。
筒言之,本發(fā)明的一方面是由計算機(jī)組處理數(shù)據(jù)的方法。該計算機(jī)組包 括首計算機(jī)和末計算機(jī),并且其中除首計算機(jī)之外的各計算機(jī)前面均置有在 先計算機(jī),除末計算機(jī)之外的各計算機(jī)后面均置有后續(xù)計算機(jī)??梢詫⒃撨^
程視為各計算機(jī)被看作當(dāng)前計算機(jī)。(a)利用當(dāng)前計算機(jī)讀取新數(shù)據(jù)。然 后,(b)利用當(dāng)前計算機(jī)寫舊數(shù)據(jù)。然后,(c)在當(dāng)前計算機(jī)中處理該新 數(shù)據(jù),以生成下一次的舊數(shù)據(jù)。此后,(d)如果當(dāng)前計算機(jī)非末計算機(jī), 則將該舊數(shù)據(jù)保存在當(dāng)前計算機(jī)中。該步驟(c)可以包括執(zhí)行指令字中的 若干條指令。該步驟(a)和(b)可以在單個指令字中執(zhí)行。(a) 、 (b) 和(c)中的至少一個步驟可以異步進(jìn)行。
簡言之,本發(fā)明的另一方面是處理數(shù)據(jù)的計算機(jī)組。該組包括首計算機(jī) 和末計算機(jī),且其中除該首計算機(jī)之外的各計算機(jī)的前面置有在先計算機(jī), 除該末計算機(jī)之外的各計算機(jī)后面置有后續(xù)計算機(jī)。各計算機(jī)均具有通過第
6一數(shù)據(jù)路徑讀取新數(shù)據(jù)的讀邏輯、通過第二數(shù)據(jù)路徑寫舊數(shù)據(jù)的寫邏輯和處 理該新數(shù)據(jù)以產(chǎn)生下 一次的舊數(shù)據(jù)的處理邏輯。除該末計算才幾之外的該計算 機(jī)包括存貯元件存貯該舊數(shù)據(jù)。所述寫邏輯在所述讀邏輯之后操作,且所述 寫邏輯在所述處理邏輯之前操作。所述讀邏輯和所述寫邏輯可以由以單個指 令字形式的程序來執(zhí)行。所述讀邏輯、所述寫邏輯和所述處理邏輯中的至少 一個邏輯可以異步進(jìn)行。
本發(fā)明還提供計算機(jī)程序,當(dāng)該計算機(jī)程序運(yùn)行在計算機(jī)組上時,使所 述計算機(jī)組實施本發(fā)明的所述一方面的方法。該程序可以位于載體上。該載 體可以是信號或存貯器。該存貯器可以是記錄介質(zhì)或其它例子中的存儲器裝 置。
本發(fā)明實施例的優(yōu)勢在于,它避免了在發(fā)生從高位計算機(jī)向低位計算機(jī) 寫入數(shù)據(jù)期間的反轉(zhuǎn)。
本發(fā)明實施例的另 一優(yōu)勢在于,它改進(jìn)了數(shù)據(jù)通過計算機(jī)流水線或陣列 的初始傳遞,乂人而可以更快i也開始相應(yīng)的處理。
本發(fā)明實施例的再一優(yōu)勢在于,它尤其適合于在需要向計算機(jī)組中的所 有計算機(jī)提供相同的初始數(shù)據(jù)值的情況下使用。
本發(fā)明實施例的又一優(yōu)勢在于,它尤其適合于與能夠進(jìn)行異步多端口讀 取和多端口通信的計算機(jī)流水線或陣列 一起使用。
鑒于這里描述的及在附圖的圖中所示出的對目前已知的實施本發(fā)明的 最佳方式和優(yōu)選實施例的工業(yè)實用性的描述,本發(fā)明實施例的這些及其它目 的和優(yōu)勢將對本領(lǐng)域技術(shù)人員來說將變得清楚。
本發(fā)明實施例的意圖和優(yōu)勢將從以下結(jié)合附圖的詳細(xì)描述中變得明顯,
在附圖中
圖1為根據(jù)本發(fā)明的計算機(jī)陣列的概略圖2為示出圖1的計算機(jī)的子集的詳細(xì)圖及圖l的互連數(shù)據(jù)總線的更詳細(xì)一見圖3為描繪圖1和圖2的計算機(jī)中一個計算機(jī)的一般布局的框圖; 圖4為可在圖l和圖2的計算機(jī)中使用的指令字的概略圖; 圖5為圖3的時間片定序器的示意圖; 圖6為描繪根據(jù)本發(fā)明的一種方法的例子的流程圖; 圖7為示出用于討論根據(jù)本發(fā)明示例性實施例的圖1和圖2中計算機(jī)陣 列一部分的詳細(xì)圖8a-f為示出可在圖7的部分中的計算機(jī)中使用的端口地址解碼的概觀 的表格;
圖9為描繪圖7和圖8d-f所示的多寫方法如何具體地與在單指令字中 包括若干條指令的能力相結(jié)合的示意性框圖10為保證在如上所述的多讀/多寫系統(tǒng)中傳播不反轉(zhuǎn)的處理規(guī)則表;
圖11為描繪當(dāng)數(shù)據(jù)通過相連的CPU組從左邊順序傳輸?shù)接疫厱r在一連 串時間的優(yōu)化流水線狀態(tài)的框圖12a-b為在形式上示出圖11流水線中的數(shù)據(jù)的初始流的示意圖,其 中圖12a示出如果沒有遵循規(guī)則3,則發(fā)生反轉(zhuǎn),圖12b示出如果遵循規(guī)則 3,則數(shù)據(jù)流通過流水線而不發(fā)生反轉(zhuǎn)。
在附圖中的各幅圖中,相同的附圖標(biāo)記用于表示相同的或相似的元件或 步驟。
具體實施例方式
雖然根據(jù)用于實現(xiàn)目的的模式對本發(fā)明的實施例進(jìn)行描述,但是本領(lǐng)域 技術(shù)人員將認(rèn)知到鑒于這些啟示并未脫離本發(fā)明的精神或范圍,因此可以實
現(xiàn)變體。
這里所描述的和/或在附圖中所示的本發(fā)明的實施例及其變體僅以示例 方式給出,并不限定本發(fā)明的范圍。除非以其它方式具體說明,本發(fā)明的獨(dú) 立方面和部件可以被省略或修改,或可以具有因此^皮替代的等價物,或可以具有還未知的替代品,例如可能在未來開發(fā)的,或例如可能在未來被發(fā)現(xiàn)是 可接受的替代品的。由于潛在應(yīng)用的范圍很大,且由于本發(fā)明意在適應(yīng)很多 這樣的變體,因此只要保持在所要求的發(fā)明的精神和范圍之內(nèi),本發(fā)明還可 以針對各種各樣的應(yīng)用而被修改。
本發(fā)明的優(yōu)選實施例是在計算機(jī)流水線和陣列中處理數(shù)據(jù)的改進(jìn)系統(tǒng) 及方法。如這里的不同附圖所示出的,尤其是在圖12b的視圖中,本發(fā)明的 優(yōu)選實施例由 一般附圖標(biāo)記1 000來描繪。
作為本發(fā)明的場景和基礎(chǔ),首先給出異步計算機(jī)通信的詳細(xì)背景例子, 然后進(jìn)一步給出在這種異步計算機(jī)通信中多端口讀操作和多端口寫操作的 詳細(xì)背景例子。
對于第一背景例子,圖1中的概略圖中描繪一計算機(jī)陣列,該計算機(jī)陣
列在此由一般附圖標(biāo)記10來指代。計算機(jī)陣列IO具有多個(在示出的例子 中是24個)計算機(jī)12 (在陣列的例子中有時也稱作"核"或"節(jié)點(diǎn)")。 在示出的例子中,所有的計算機(jī)12都位于單個電路小片14上。各計算機(jī) 12通常是獨(dú)立運(yùn)行的計算機(jī),如在下文更詳細(xì)地討論的。計算機(jī)12由多條 相互連接的數(shù)據(jù)總線16 (其數(shù)量將在下文更詳細(xì)地討論)相互連接。在該 例子中,數(shù)據(jù)總線16是雙向異步高速并行數(shù)據(jù)總線,盡管出于該目的而采 用其它的互連手段也在這里的技術(shù)范圍之內(nèi)。在陣列IO的本實施例中,不 僅計算機(jī)12之間的數(shù)據(jù)通信是異步的,而且獨(dú)立的計算機(jī)12內(nèi)部也以異步 模式運(yùn)行。已經(jīng)發(fā)現(xiàn)這種模式提供了重要的優(yōu)勢。例如,由于沒有必要在整 個計算機(jī)陣列10中分發(fā)時鐘信號,因此可以節(jié)省大量的功率。此外,沒有 必要分發(fā)時鐘信號還消除了可能限制陣列10的大小或產(chǎn)生其它困難的很多 時序問題。
本領(lǐng)域技術(shù)人員將認(rèn)識到,電路小片14上還存在附加的部件,為了清 楚起見,圖1的視圖中省略了這些部件。這些附加的部件包括微處理器芯片 的電源總線、外部連接焊盤及其它這些普通方面。
計算機(jī)12e為不處于陣列10邊界的一個計算機(jī)12的例子。也就是說,計算機(jī)12e具有四個互相垂直的相鄰計算機(jī)12a, 12b, 12c和12d。在下 文中將使用計算機(jī)12a-12e的這個分組,來更詳細(xì)討論陣列10的計算機(jī)12 間的通信。如圖1的視圖所見,諸如計算機(jī)12e這樣的內(nèi)部計算機(jī)12具有 四個其他的可以通過總線16與其通信的計算機(jī)12。在以下討論中,所討論 的原理將應(yīng)用于所有計算機(jī)12,除了只能夠與三個其他計算機(jī)12直接通信 的位于陣列10邊界的計算機(jī)12,以及只能夠與兩個其他計算機(jī)12直接通 信的拐角計算機(jī)12。
圖2為圖1中的一部分的更詳細(xì)視圖,只示出一些計算機(jī)12,特別是 包括計算機(jī)12a-12e。圖2的視圖還揭示每條數(shù)據(jù)總線16都具有讀線18、 寫線20和多條(在本例子中為18)數(shù)據(jù)線22。數(shù)據(jù)線22能夠并行同時傳 輸一個18位指令字的所有位。應(yīng)當(dāng)注意到,在替代實施例中, 一些計算機(jī) 12是相鄰計算機(jī)的鏡像。然而,計算機(jī)12是全部具有同一方向,還是作為 相鄰計算機(jī)的鏡像在此并不重要,且在此將不再進(jìn)一步討論該潛在的復(fù)雜情 況。
諸如計算機(jī)12e的計算機(jī)12可以將其一條、兩條、三條或全部四條讀 線18設(shè)置為高,從而準(zhǔn)備從相應(yīng)的一個、兩個、三個或全部四個相鄰計算 機(jī)12中接收數(shù)據(jù)。相似地,計算機(jī)12也可以將其一條、兩條、三條或全部 四條寫線設(shè)置為高。(在下文中會更詳細(xì)地討論這兩種情況。)
當(dāng)一個相鄰計算機(jī)12a、 12b、 12c或12d將其自身與計算機(jī)12e之間的 寫線20設(shè)置為高時,如果計算機(jī)12e已經(jīng)將對應(yīng)讀線18設(shè)置為高,那么字 在相關(guān)聯(lián)的數(shù)據(jù)線22上從那個計算機(jī)12a、 12b、 12c或12d傳輸至計算機(jī) 12e。然后,發(fā)送計算機(jī)12將釋放寫線20,并且接收計算機(jī)12e (在該例子 中)將寫線20和讀線18拉低。后一個動作是向發(fā)送計算機(jī)12確認(rèn)已經(jīng)接 收到數(shù)據(jù)。注意,上述說明并不必然地意在按次序指示事件的順序。在實際 應(yīng)用中,接收計算機(jī)可以在發(fā)送計算機(jī)12釋放(停止拉高)寫線20之前, 試著將寫線20設(shè)置得略低。在這種情況下,發(fā)送計算機(jī)12—釋放寫線20, 寫線20就會被接收計算機(jī)12e拉低。在本例子中,只有編程錯誤才會使位于一條總線16的對立端的兩個計
算機(jī)12試著同時將它們的兩條讀線18均設(shè)置為高或同時將它們的兩條寫線 20均設(shè)置為高。然而,目前預(yù)計到,將存在以下時機(jī)期望將讀線18的不 同組合設(shè)置為高,從而使一個計算機(jī)12可以處于等待來自選中計算機(jī)12中 的首個計算機(jī)的數(shù)據(jù)來將該首個計算機(jī)的對應(yīng)寫線20設(shè)置為高的等待狀 太
心o
在以上討論的例子中,計算機(jī)12e被描述為在相鄰的計算機(jī)(選自計算 機(jī)12a、 12b、 12c或12d中的一個以上計算機(jī))將該相鄰計算機(jī)的寫線20 設(shè)置為高之前,計算機(jī)12e將該計算機(jī)12e的讀線18中的一條以上讀線設(shè) 置為高。然而,該過程當(dāng)然也可以以相反的次序發(fā)生。例如,如果計算機(jī) 12e正嘗試向計算機(jī)12a寫,那么計算機(jī)12e會將計算機(jī)12e和計算機(jī)12a 之間的寫線20設(shè)置為高。如果計算機(jī)12e和計算機(jī)12a之間的讀線18還沒 有被計算機(jī)12a設(shè)置為高,則計算機(jī)12e會筒單地等待,直到計算機(jī)12a將 該讀線18設(shè)置為高為止。然后,如上所討論的,當(dāng)讀線18與寫線20的對 應(yīng)對均為高時,等待在數(shù)據(jù)線22上進(jìn)行傳輸?shù)臄?shù)據(jù)被傳輸。之后,發(fā)送計 算機(jī)12e—釋放寫線20,接收計算機(jī)12a (在該例子中)就會將兩個計算機(jī) 12e與12a (在該例子中)之間的讀線18和寫線20都設(shè)置為低。
每當(dāng)諸如計算機(jī)12e的計算機(jī)12預(yù)計要寫,將其一條寫線20設(shè)置為高 時,它將簡單等待,基本不消耗功率,直到如上所述有適當(dāng)?shù)南噜徲嬎銠C(jī) 12 "請求"該數(shù)據(jù)為止,除非數(shù)據(jù)待被發(fā)送到其上的計算機(jī)12已經(jīng)將它的 讀線18設(shè)置為高,在這種情況下數(shù)據(jù)被立即發(fā)送。類似地,每當(dāng)計算機(jī)12 預(yù)計要讀取,將其一條以上讀線18設(shè)置為高時,它將簡單等待,基本不消 耗功率,直到連接到所選擇的計算機(jī)12的寫線20變高以在兩個計算機(jī)12 之間傳輸指令字為止。
可能存在若干種潛在的手段和/或方法來使計算機(jī)12如所述工作。但是,
步運(yùn)行(除了以所述異步方式相互之間傳輸數(shù)據(jù))。也就是說,通常是按順序完成指令。當(dāng)發(fā)生寫指令或讀指令時,直到該指令完成(或者,也許作為 替代地,直到其因為"復(fù)位"或其他原因被異常中斷時)才會有進(jìn)一步的動 作?,F(xiàn)有技術(shù)中,沒有規(guī)則的時鐘脈沖。更具體地說,只有當(dāng)正在^f皮執(zhí)行的 指令既不是讀類型指令也不是寫類型指令時(假如讀或?qū)戭愋椭噶罱?jīng)常需要 另一個實體完成)或當(dāng)該讀或?qū)戭愋筒僮魇聦嵣弦呀?jīng)完成時,才生成脈沖以
完成下一個指令。
圖3為描繪圖1和圖2的一個計算機(jī)12例子的總體布局的框圖。如圖
3的視圖所見,各計算機(jī)12為具有其自己的RAM 24和ROM 26的通用整 裝計算機(jī)。如以上提到的,計算機(jī)12有時也稱為獨(dú)立的"核"。在本例子 中,假如計算機(jī)12被組合在單芯片上。
計算機(jī)12的其他基本部件為返回堆棧28、指令區(qū)域30、算術(shù)邏輯單元 (ALU 32)、數(shù)據(jù)堆棧34和用于對指令進(jìn)行解碼的解碼邏輯段36。本領(lǐng)域 技術(shù)人員通常應(yīng)該很熟悉基于諸如本例子中的計算機(jī)12的堆棧計算機(jī)的操 作。計算機(jī)12為具有數(shù)據(jù)堆棧34和分離的返回堆棧28的雙堆棧計算機(jī)。
在這個實施例中,計算機(jī)12具有與相鄰計算機(jī)12進(jìn)行通信的四個通信 端口 38。通信端口 38為三態(tài)驅(qū)動器,具有關(guān)閉狀態(tài)、接收狀態(tài)(用于驅(qū)動 信號使其進(jìn)入計算機(jī)12)和發(fā)送狀態(tài)(驅(qū)動信號使其離開計算機(jī)12)。當(dāng) 然,如果特定計算機(jī)12不在諸如計算機(jī)12e的例子的陣列(圖1 )內(nèi)部,那 么至少出于這里所述的意圖, 一個以上通信端口 38不會被那個特定計算機(jī) 使用。指令區(qū)域30包括若干寄存器40,在本例子中,寄存器40包括A寄 存器40a、 B寄存器40b、 P寄存器40c以及I/O控制和狀態(tài)寄存器(IOCS 寄存器40d)。在本例子中,A寄存器40a和IOCS寄存器40d為全18位寄 存器,而B寄存器40b和P寄存器40c為9位寄存器。
盡管該技術(shù)并不限于該例子,但是本計算機(jī)12被實施為執(zhí)行本才幾Forth 語言指令。如熟悉Forth計算機(jī)語言的人將認(rèn)知的,復(fù)雜Forth指令,即通 常所說的Forth "字"是根據(jù)設(shè)計在計算機(jī)中的本機(jī)處理器指令所構(gòu)建的。 在其它語言中,這可能為通常所說的"庫"。如下文將更詳細(xì)描述的,計算機(jī)12在一個時段從RAM 24、 ROM 26或直接從一條數(shù)據(jù)總線16 (圖2 )讀 取十八位。然而,由于Forth中的大多數(shù)指令(即通常所說的無操作數(shù)指令) 直接從堆棧28和34中得到它們的操作數(shù),因此它們的長度通常僅為5位, 使得在單個十八位指令字中可以包含多達(dá)四條指令,條件是該組指令的最后 一條指令選自僅需三位的指令的有界集。在該實施例中,數(shù)據(jù)堆棧34頂部 的兩個寄存器是T寄存器44和S寄存器46。在圖3的視圖中以框圖的形式 描繪的還有時間片定序器42 (稍后詳細(xì)討論)。
圖4為指令字48的概略圖。(應(yīng)該注意指令字48實際上可以包含指令、 數(shù)據(jù),或包含指令和數(shù)據(jù)的一些組合。)指令字48由十八位50組成。作為 二進(jìn)制計算機(jī),各位50將為"1"或"0"。如這里先前所討論的,十八位 寬的指令字48可以包含位于四個時間片54中的多達(dá)四條指令52,該四個 時間片54被稱為時間片零54a、時間片一 54b、時間片二 54c和時間片三54d。 在本實施例中,十八位指令字48總是作為整體被讀取。因此,由于指令字 48中總是存在具有多達(dá)四條指令的潛能,因此在計算機(jī)12的指令集中包括 no-op (無操作)指令以提供用于當(dāng)沒有必要或甚至是不期望使用所有可用 的時間片54的情況。應(yīng)該注意,根據(jù)一個特定實施例,在間隔的時間片(具 體來說,時間片一 54b和時間片三54c )中位50的極性(與有效低相比較是 有效高)是相反的。然而,這不是必需的,因此,為了更好地解釋這項技術(shù), 在下面的討論中也避免這種潛在的復(fù)雜情況。
圖5為圖3的時間片定序器42的示意圖。從圖5的視圖中可以看出, 時間片定序器42具有排列成環(huán)形的多個(在該例子中是十四個)反相器56 和一個與非門58,使得信號在經(jīng)過該十四個反相器56和與非門58時被反 相奇數(shù)次。當(dāng)或門60的兩個輸入中的任一個變?yōu)楦邥r,在時間片定序器42 中發(fā)起一信號。第一或門輸入端62得自正在被執(zhí)行的指令52的i4位66。 如果i4位66為高,則該特定指令52是ALU指令,且i4位66為"1"。當(dāng) i4位66為"1"時,則第 一或門輸入端62為高,則時間片定序器42被觸發(fā), 以發(fā)起使下一條指令52被執(zhí)行的脈沖。當(dāng)?shù)谝换蜷T輸入端62變高或被第二或門輸入端64變高(如將在下文中
討論的)而觸發(fā)時間片定序器42時,信號繞時間片定序器42移動兩圏,每 次在時間片定序器輸出端68產(chǎn)生輸出。該信號第一次通過時間片定序器輸 出端68時,時間片定序器^T出端68的輸出為#^,而第二次時為高。來自時 間片定序器輸出端68的相對寬的輸出被提供給脈沖發(fā)生器70 (以框圖的形 式示出),該脈沖發(fā)生器70產(chǎn)生窄時序脈沖作為輸出。本領(lǐng)域技術(shù)人員應(yīng) 該認(rèn)識到窄時序脈沖是為準(zhǔn)確發(fā)起計算機(jī)12的操作所期望的。
當(dāng)正在被執(zhí)行的特定指令52為讀指令或?qū)懼噶罨蛉魏纹渌噶顣r,其 中所述任何其它指令不期望正在被執(zhí)行的指令52順序地觸發(fā)下一條指令52 的執(zhí)行,則i4位66為"0"(低),并且因此第一或門輸入端62也為低。 本領(lǐng)域技術(shù)人員將認(rèn)識到,在諸如計算機(jī)12的器件中,事件的時序通常很 關(guān)鍵,而且無一例外。本領(lǐng)域技術(shù)人員將認(rèn)識到,在檢測時間片定序器42 后,來自或門60的輸出必須保持為高,直到該信號循環(huán)通過與非門58以便 發(fā)起環(huán)的第二 "圈"之后為止。之后,在第二 "圈"期間,來自或門60的 輸出會變低,以便阻止電路的多余繼續(xù)振蕩。
根據(jù)以上討論可以認(rèn)知到,假設(shè)下文會討論的第二或門輸入端64不為 高,則當(dāng)i4位66為"0"時,時間片定序器42不會被觸發(fā)。
如上所述,根據(jù)各指令52是否為讀類型指令或?qū)戭愋椭噶顏碓O(shè)置各指 令52的i4位66。指令52的剩余位50為該指令提供了特定操作碼的剩余部 分。在讀類型指令或?qū)戭愋椭噶畹那闆r下, 一個以上位可用于指示從該特定 計算機(jī)12讀取數(shù)據(jù)的地址或?qū)?shù)據(jù)寫入該特定計算機(jī)12的地址。在本例子 中,待寫入的數(shù)據(jù)總是來自于T寄存器44 (數(shù)據(jù)堆棧34的頂部),然而數(shù) 據(jù)可以被選擇性地讀入T寄存器44或可以執(zhí)行該數(shù)據(jù)的指令區(qū)域30。也就 是說,在該特定實施例中,由于可以以在此所述的方式來傳送數(shù)據(jù)或指令, 因此盡管不是必需的,也可以從數(shù)據(jù)總線16直接執(zhí)行指令。此外, 一個以 上位50將用來指示哪個端口 38,如果存在的話,將被設(shè)置為讀或?qū)?。?dāng)前 的操作可以通過利用 一個以上位指代諸如A寄存器40a、 B寄存器40b等的寄存器40來可選地完成。在這種例子中,將具有與各端口 38 (以及計算機(jī) 12可嘗試與之通信的任何其它潛在實體,例如存儲器、外部通信端口等) 相對應(yīng)的位的數(shù)據(jù)預(yù)載入所指代的寄存器40。例如,在特定寄存器40中, 四位中的各位可以對應(yīng)于上端口 38a、右端口 38b、左端口 38c或下端口 38d 中的各端口。在這些位的位置中的任意位置存在"1"的情況下,通過對應(yīng) 的端口 38將通信設(shè)置為繼續(xù)進(jìn)行。
緊接著的例子采用計算機(jī)12e嘗試向計算機(jī)12c寫的通信,盡管該例子 適用于在任意相鄰計算機(jī)12之間的通信。當(dāng)在寫計算機(jī)12e中執(zhí)行寫指令 時,選中的寫線20被設(shè)置為高(在該例子中,是計算機(jī)12e與12c之間的 寫線20)。如果對應(yīng)的讀線18已經(jīng)為高,則通過所選中的通信端口 38馬 上將數(shù)據(jù)從選中的位置發(fā)送出去。作為替換地,如果對應(yīng)的讀線18還不為 高時,則計算機(jī)12e筒單地停止操作,直到對應(yīng)的讀線確實變高為止。這里 先前已經(jīng)討論過當(dāng)存在讀類型指令或?qū)戭愋椭噶顣r停止計算機(jī)12a (或更準(zhǔn) 確地說是禁止計算機(jī)12a的進(jìn)一步操作)的機(jī)制。簡言之,指令52的操作 碼在i4位66的位置處為'0,,因此或門60的第一或門輸入端62為低, 并且時間片定序器42不會被觸發(fā)而生成使能脈沖。
關(guān)于如何在讀類型指令或?qū)戭愋椭噶钔瓿蓵r恢復(fù)計算機(jī)12e的操作,機(jī) 制如下當(dāng)計算才幾12e和12c之間的讀線18和對應(yīng)寫線20均為高時,則兩 條線18和20分別被將相應(yīng)線保持為高的相應(yīng)計算機(jī)12中的各計算機(jī)12釋 放。(在該例子中,發(fā)送計算機(jī)12e將寫線20保持為高,而接收計算機(jī)12c 會將讀線18保持為高)。然后,接收計算機(jī)12c將兩條線18和20拉低。 在實際應(yīng)用中,接收計算機(jī)12c可以在發(fā)送計算機(jī)12e釋放寫線20之前嘗 試將線18和20拉低。然而,由于線18和20被拉高,且只能微弱地保持(鎖 存)為低,因此將線18或20拉低的任何嘗試實際上都不會成功,直到線 18或20被將其鎖存為高的計算機(jī)12釋放為止。
當(dāng)數(shù)據(jù)總線16中的兩條線18和20均被拉低時,則這是"確認(rèn)"條件。 計算機(jī)12e和12c中的各計算機(jī)在接收該確認(rèn)條件之后,將其自身的確認(rèn)線72設(shè)置為高。如從圖5的視圖中可以看出的,確認(rèn)線72提供給第二或門輸 入端64。由于到任意或門60輸入端62或64的輸入都會使或門60的輸出 變高,所以這將以這里先前所述的方式來發(fā)起時間片定序器42的操作,使 得將執(zhí)行指令字48的下一個時間片54中的指令52。確認(rèn)線72保持為高, 直到下一條指令52被解碼為止,從而防止偽地址到達(dá)地址總線。
當(dāng)正在被執(zhí)行的指令52位于指令字48的時間片三的位置時,無論如何, 計算機(jī)12將提取下一個等待的十八位指令字48,當(dāng)然除非i4位66為'0,。 在實際應(yīng)用中,可以包括用于"預(yù)提取"指令的方法和裝置,使得可以在指 令字48中所有指令52的執(zhí)行結(jié)束之前開始該提取。然而對于異步數(shù)據(jù)通信 來說這也不是必需的。
已經(jīng)詳細(xì)描述了計算機(jī)12e向計算機(jī)12c寫的以上例子。如根據(jù)以上討 論可以認(rèn)知的,無論計算機(jī)12e首先嘗試向計算機(jī)12c寫還是計算才幾12c首 先嘗試從計算機(jī)12e讀取,其操作基本相同。操作在計算機(jī)12e和12c都就 緒之后才會完成,而且無論計算機(jī)12e還是計算片幾12c首先就緒,該首先就 緒的首個計算機(jī)12簡單地"進(jìn)入睡眠",直到另一個計算機(jī)12e或12c完 成傳輸為止。實際上,考慮上述處理的另一種方式是,當(dāng)寫計算機(jī)12e和接 收計算機(jī)12c分別執(zhí)行寫指令和讀指令時,它們均進(jìn)入睡眠,但是當(dāng)讀線18 和寫線20都為高時,最后進(jìn)入事務(wù)處理的計算機(jī)幾乎瞬時再度醒來,而發(fā) 起事務(wù)處理的首個計算機(jī)12會幾乎無限期地保持睡眠,直到第二計算機(jī)12 做好完成處理的準(zhǔn)備為止。
相信使能器件之間有效的異步通信的關(guān)鍵特征是某種確認(rèn)信號或條件。 在現(xiàn)有技術(shù)中,器件之間的大多數(shù)通信是時鐘控制的,且發(fā)送器件沒有得知 接收器件已準(zhǔn)確接收數(shù)據(jù)的直接方式。諸如校驗和操作的方法可用來嘗試保 證數(shù)據(jù)的正確接收,但是發(fā)送器件沒有已完成操作的直接指示。如這里所述 的本方法提供必要的確認(rèn)條件,該條件允許器件之間的異步通信,或至少使 器件之間的異步通信變得實用。此外,確認(rèn)條件還可能使一個以上器件"進(jìn) 入睡眠",直到確認(rèn)條件發(fā)生才會醒來。當(dāng)然,也可以通過在計算機(jī)12之間發(fā)送的分離信號(通過互連的數(shù)據(jù)總線16或通過分離的信號線)來在計 算機(jī)12之間傳送確認(rèn)條件。然而,可以認(rèn)知到,因為用于確認(rèn)的方法不需 要在實際上影響通信的任何額外的信號、時鐘周期、定時脈沖或除所述的之 外的任何這類資源,因此這里包括更多的經(jīng)濟(jì)節(jié)約。
根據(jù)對程序和用于完成該程序的手段的以上討論,現(xiàn)在可以理解對背景
方法的例子的以下筒單描述。圖6為描繪該方法例子的流程圖74。在'發(fā) 起通信'操作76中, 一個計算機(jī)12執(zhí)行使其嘗試與另一計算機(jī)12通信的 指令52。該指令可以是對寫的嘗試或?qū)ψx的嘗試。在通常與'發(fā)起通信' 的操作76同時發(fā)生的'將第一線設(shè)置為高,操作78中,將讀線18或?qū)懢€ 20設(shè)置為高(取決于首個計算機(jī)12是嘗試讀還是嘗試寫)。作為"將第一 線設(shè)為高',操作78的一部分,如此操作的計算機(jī)12將根據(jù)當(dāng)前描述的操作 實施例來中止操作,如這里先前所詳細(xì)描述的。在'將第二線設(shè)置為高'操 作80中,第二線(寫線20或讀線18)被第二計算機(jī)12設(shè)置為高。在'傳 送數(shù)據(jù)操作'82中,在數(shù)據(jù)線22上發(fā)送并接收數(shù)據(jù)(或指令等)。在'拉 低線,操作84中,釋放讀線18和寫線20,然后將該讀線18和寫線20拉 低。在'繼續(xù),操作86中,確認(rèn)條件使計算機(jī)12恢復(fù)它們的操作。在本例 子的情況下,確認(rèn)條件產(chǎn)生確認(rèn)信號88 (圖5),在這種情況下該確認(rèn)信號 88僅僅是確認(rèn)線72的"高"條件。
針對第二背景例子,圖7為示出圖1和圖2中計算機(jī)12的計算機(jī)陣列 10的一部分100的詳細(xì)圖。不過,為了強(qiáng)調(diào)該部分100建立在第一背景例 子的技術(shù)之上,計算機(jī)(節(jié)點(diǎn)、核等)現(xiàn)在仍然被稱為CPU 12。
如圖7所示,中心CPU 12通過相應(yīng)的數(shù)據(jù)總線16連接到鄰居CPU 12a、 12b、 12c和12d,每條數(shù)據(jù)總線16都包括讀線18、寫線20和十八條數(shù)據(jù)線 22。然而,在CPU 12中,總線16內(nèi)部連"^,如果同時有至少兩個端口 38 待讀取,則CPU 12會創(chuàng)建未定義的硬件狀態(tài)。在軟件設(shè)計中應(yīng)當(dāng)考慮這種 情形,以允許從這些狀態(tài)中復(fù)原。
CPU 12e具有其自身的存儲器102 (例如圖3所示的RAM 24和ROM26),該存儲器102可以包含其自身的軟件104。 CPU 12e還具有一套寄存 器40,以包含用于搡作的操縱指針。這些寄存器包括用于數(shù)據(jù)操作的A寄 存器40a和B寄存器40b、用于保持程序指針的P寄存器40c,以及I/0控 制和狀態(tài)寄存器(IOCS寄存器40d)(也見圖3)。
圖8a-f為示出可在圖7中部分100的CPU 12中使用的端口地址解碼的 總體的表格圖。圖8a示出當(dāng)寄存器40中的高地址位108被設(shè)置為"1"時, 寄存器40通常對一個以上端口 38進(jìn)行尋址。相反地,未示出,當(dāng)高地址位 108為"0"時,寄存器40對存儲器102中的位置進(jìn)行尋址。當(dāng)高地址位108 被設(shè)置為高時,接下來的八位充當(dāng)選擇位110,選擇位110指出哪個或哪些 特定的端口38被選中,且它們是待被讀還是待-波寫。因此,對于CPU 12e 中的寄存器40,"右"指示右側(cè)或東側(cè)鄰居CPU 12a,"下"指示下側(cè)或南 側(cè)鄰居CPU12b,"左"指代左側(cè)或西側(cè)鄰居CPU 12c,且"上"指代上側(cè) 或北側(cè)鄰居CPU 12d。針對"RR"動作而設(shè)置的選擇位110指示即將到來 的讀請求,而針對"WR"動作而設(shè)置的選擇位110指示即將到來的寫請求。
注意,為了一致且最小化混淆,我們在此堅持一般的慣例高值或"1" 表示真條件,低值或"0"表示假條件。然而,這并不是必要條件,并且可 以使用替代的慣例。例如,CPU 12的某些當(dāng)前優(yōu)選實施例在RR位的位置 使用"0"來表示真,在WR位的位置使用'T'表示真。
順便應(yīng)該注意到,該端口地址解碼方法還允許將高地址位108設(shè)置為 "1",并且不設(shè)置選擇位110。這可以有利地用來對CPU 12中的其它元件 進(jìn)行尋址。例如,可以以這種方式對IOCS寄存器40d進(jìn)4亍尋址。
在CPU 12的本實施例中,IOCS寄存器40d使用相同的端口地址排列 來報告端口 38的讀線18和寫線20的當(dāng)前狀態(tài)。這使得IOCS寄存器40d 中的這些相應(yīng)位有助于允許對I/O操作狀態(tài)的編程測試。例如,與其CPU 12e 從CPU 12b中異步讀取,其中如果CPU 12b尚未將共用的寫線20設(shè)置為高, 則CPU 12e會進(jìn)入睡眠,倒不如CPU 12e測試IOCS寄存器40d中位13 (下 /WR)的狀態(tài)(反映將CPU 12b連接到CPU 12e的寫線20的狀態(tài)),并轉(zhuǎn)移到來自CPU 12b的就緒數(shù)據(jù)且立即讀取或轉(zhuǎn)移到另一條指令且立即執(zhí)行。
圖8b示出筒單的第一例子。這里設(shè)置針對右/RR的選擇位110,指示待 從端口 38b讀取數(shù)據(jù)。圖8c示出簡單的第二例子。這里設(shè)置針對右/WR的 選4奪位110,現(xiàn)在指示待向端口 38b寫入。
習(xí)慣上在任何給定的時段,只可以使能一個選擇位110來指定單個端口 38和單個動作(讀或?qū)?。然后若干個高位被解碼為錯誤條件。然而,在 此公開的新穎方法并不遵從該習(xí)慣,而是可以同時有利地使能針對端口 38 的一個以上選擇位110,從而請求若干個讀和/或?qū)懖僮?。在這種情況下,所 有相應(yīng)端口 38上會給出數(shù)據(jù),包括給出新數(shù)據(jù)的信號。
圖8d-f示出若干個讀和/或?qū)懖僮鞯囊恍├?。圖8d示出CPU12e中的 寄存器40可以以何種方式并發(fā)指定從CPU 12b的讀取和對CPU 12a的寫。 圖8e示出可以以何種方式并發(fā)指定從CPU 12b的讀取和對CPU 12c的寫。 圖8f示出指定從CPU 12b的讀取和對CPU 12a或CPU 12b的寫。(如預(yù)示 的,人們可以將圖8d-f與圖9進(jìn)行比較,在圖9中數(shù)據(jù)傳輸路徑由箭頭132 和134來代表。)
在多寫期間的實踐中,CPU 12e將在與一個以上目標(biāo)CPU 12a、 12b、 12c或12d共用的總線16上給出數(shù)據(jù)并將寫線20設(shè)置為高。然后,源CPU 12e會等待,直到接收到數(shù)據(jù)已經(jīng)被讀取的指示為止。在某些最終意義上來 說,可假定地, 一個以上目標(biāo)CPU 12a、 12b、 12c或12d在與CPU 12e共 用的總線16上將相應(yīng)的讀線18設(shè)置為高。然后,目標(biāo)CPU 12正式讀取數(shù) 據(jù),并在與CPU 12e共用的總線16上將相應(yīng)讀線18和寫線20拉低,從而 確認(rèn)來自CPU 12e的數(shù)據(jù)的4妻收。
圖9為描繪圖7和圖8d-f所示的多寫方法可以以何種方式具體與一個 數(shù)據(jù)字120中包括多達(dá)四條指令的能力相結(jié)合的示意性框圖。各指令通常是 五位,所以18位寬的數(shù)據(jù)字120容納大約四條指令。于是最后一條指令可 以只有三位,但這對于許多指令已足夠。該方法的一個值得注意的有利方面 是它允許使用非常高效的數(shù)據(jù)傳輸機(jī)制。在下文中,@=提取,!=存儲,且p是指"程序計數(shù)器"或P寄存器40c。 在⑥p+和!p+中的"+"是指在執(zhí)行之后寄存器中的存儲器地址遞增,除非如
果寄存器內(nèi)容指向另一寄存器或端口,該寄存器內(nèi)容不被遞增。這樣,在后
者這些情況下的"+"將這些指令區(qū)分為"專用的",而不是通常的 p和!p指令。
圖9給出單個指令序列程序如何將數(shù)據(jù)從一個CPU 12傳輸?shù)搅硪?CPU 12的例子,該程序可以包括在僅利用用來讀和寫數(shù)據(jù)的P寄存器40c的單 個18位的數(shù)據(jù)字120中。這里"@p+"是時間片零54a中裝載的指令122。 這是從P寄存器40c中指定的當(dāng)前地址中提取下一個18位數(shù)據(jù)字120的直 接量操作,將該數(shù)據(jù)字120壓入數(shù)據(jù)棧34。[而且,通過將P寄存器40c中 的地址遞增,除非當(dāng)?shù)刂肥轻槍拇嫫骰蚨丝跁r才不遞增,這里P寄存器 40c中高地址位108會指示正在指定端口。]接下來,"."是時間片一 54b 中裝載的指令124。這是不執(zhí)行任何操作的簡單的nop操作(無操作)。而 且接下來,"!p+"是時間片二 54c中裝載的指令126。這是將頂部的數(shù)據(jù)字 120從數(shù)據(jù)堆棧34中彈出、并將該數(shù)據(jù)字120寫入P寄存器40c中所指定 的當(dāng)前地址的存貯操作。注意,P寄存器40c中所指定的地址沒有改變,其 僅是在功能上使不同的鄰居CPU 12被訪問而已。最后"unext"是時間片三 54d中裝載的指令128。這是根據(jù)返回堆棧28的頂部是否為零來執(zhí)行不同的 操作的微下一步(micro-next)操作。當(dāng)返回堆棧28不為零時,微下一步使 返回堆棧28遞減,使在當(dāng)前所高速緩存的數(shù)據(jù)字120的時間片零54a中的 指令處(即在這里的例子中,再次在指令122處)繼續(xù)執(zhí)行。尤其應(yīng)該注意, 這里使用微下一步不需要提取新的數(shù)據(jù)字120。相反,當(dāng)返回堆棧28為零 時,微下一步從P寄存器40c中所指定的當(dāng)前地址中提取下一個數(shù)據(jù)字120, 并使執(zhí)行在該新的數(shù)據(jù)字120的時間片零54a中的指令處開始。
針對該特定的例子,P寄存器40c可以^皮裝載以lOllOOOOOb,且返回堆 棧28的頂部可以包含lOlb(十進(jìn)制的5 )。由于P寄存器40c包含101100000b (見例如圖8a和圖8d),因此這里指令122中的"@p+"指令CPU12e從CPU 12b讀取(通過其端口 38b)下一個數(shù)據(jù)字120,并將讀取的數(shù)據(jù)字120 壓入數(shù)據(jù)堆棧34。不過,由于P寄存器40c中的地址是針對端口的,因此 不會遞增。這里指令124中的"."nop僅僅是填充器,用來填滿18位當(dāng)前 數(shù)據(jù)字120。接下來,由于P寄存器40c仍然包含101100000b,這里指令 126中的"!p+"指令CPU 12e彈出數(shù)據(jù)棧34的頂部數(shù)據(jù)字120 (即由指令 122置入的數(shù)據(jù)字120),并將該數(shù)據(jù)字120(通過端口 38a)寫入CPU 12a。 再次,由于P寄存器40c中的地址是針對端口的,因此該地址不會遞增。然 后,指令128中的"unext"使返回堆棧28縮減到100b (十進(jìn)制的4 ),并 在指令122處繼續(xù)執(zhí)行。并且,指令122、 124、 126和128中的單個字程序 以這種方式繼續(xù),將返回堆棧28縮減到Ollb、 010b、 OOlb,最終縮減到OOOb (十進(jìn)制的0 ),從CPU 12b提取下一數(shù)據(jù)字120,并執(zhí)行這個新數(shù)據(jù)字120 的時間片零54a中的指令。
總之,在這里的例子中的P寄存器40c被裝載以指定源和目的(端口 38b和38a,以及CPU 12b和12a)的一個地址值,返回堆棧28被裝載以迭 代計數(shù)(5)。然后,通過CPU 12e有效地傳輸("流水線地")五個數(shù)據(jù) 字120,然后CPU 12e在也由CPU 12b提供的第六數(shù)據(jù)字120的時間片零 54a中的指令處繼續(xù)執(zhí)行。
各種其它優(yōu)勢是使用該簡單但一流的方法的結(jié)果。例如,不需要使用A 寄存器40a和B寄存器40b,從而使得A寄存器40a和B寄存器40b可由 CPU 12e針對其它的數(shù)據(jù)目的而使用。從此得出,當(dāng)進(jìn)行數(shù)據(jù)傳輸時,可以 消除指針交換(除雜)。
例如,針對數(shù)據(jù)流水線技術(shù)的傳統(tǒng)軟件例程會在某個點(diǎn)從輸入端口讀取 數(shù)據(jù),并在另一個點(diǎn)將數(shù)據(jù)寫入輸出端口。為此,除了正在使用的相應(yīng)輸入 端口和輸出端口的指針外,還需要指向存儲器的至少一個指針。由于端口可
能有不同的地址,因此這里繼續(xù)進(jìn)行的最直接方式會是使用直接量指令將輸 入端口地址載入堆棧,將該地址置入尋址寄存器,從輸入端口進(jìn)行讀取,然 后使用直接量指令將輸出端口的地址載入堆棧,將該地址置入尋址寄存器,并對輸出端口進(jìn)行寫。
該方法中兩次直接量載入各需要4個周期,兩個寄存器設(shè)置指令各需要 1個周期。即在環(huán)路內(nèi)部設(shè)置輸入和輸出指針總共花費(fèi)10個周期。此外, 當(dāng)需要這種指針交換時會有額外損失,因為在環(huán)路內(nèi)部需要三個字的存儲空 間,從而不允許使用包含在單個18位字中的環(huán)路。相應(yīng)地,該例子中的指
令環(huán)路將需要具有存儲器訪問的分支,這增加了 4個周期的進(jìn)一步開銷,且 使總的指針交換和環(huán)路開銷至少為14個周期。
然而,相反,由于可以在CPU 12中進(jìn)行多端口尋址,用于選4奪輸入端 口 38和輸出端口 38兩者的地址可以被裝載到1/0環(huán)^各的外部,且可用于輸 入和輸出兩者。由于在多端口讀取期間僅來自一個鄰居的數(shù)據(jù)被讀取,且多 端口寫期間僅一個鄰居在讀取,因此該方法可以運(yùn)行。這樣,就不需要傳統(tǒng) 中設(shè)置輸入和輸出指針?biāo)ㄙM(fèi)的環(huán)路內(nèi)部的14個周期的開銷。該環(huán)路仍然 具有讀指令和寫指令,但是現(xiàn)在這些指令都可以使用同一指針,所以指針不 需要改變。
這意味著使用多端口寫技術(shù)可以將某些類型的I/O環(huán)路的開銷減少14 個周期(或更多)。發(fā)明人已經(jīng)觀察到,在最好情況下,該技術(shù)允許在CPU 12的處理環(huán)路中從23個周期減少到6個周期。在一個周期需要大約一納秒 的情況下,這表示有效處理器速度從43MHz提高到167MHz,這表示相當(dāng) 可觀的改進(jìn)。
現(xiàn)在簡要地繼續(xù)圖8f,并重新繼續(xù)圖9,圖8f和圖9示出可以以何種 方式進(jìn)行多寫,甚至是使用單字程序來進(jìn)行多寫。這里CPU 12e從CPU 12b 讀取,并寫入CPU 12a或CPU 12c。在效果上,這里的流水線4支術(shù)為CPU 12a 或CPU 12c首先可用。該流水線技術(shù)圖示出在CPU 12中可能增加的靈活性, 且僅僅是以何種迄今認(rèn)為過于困難或不切實際的方式來使用根據(jù)本技術(shù)的 CPU 12的一個可能的例子。
總之,CPU 12必須處理對端口 38的讀取和到端口 38的跳轉(zhuǎn)。在從多 端口地址讀取或向跳轉(zhuǎn)到多端口地址時,如果沒有正在執(zhí)行的顯式代碼用來發(fā)現(xiàn),則無法得知數(shù)據(jù)或指令是從哪個端口 38獲得的。(最快的方式依賴
于對兩個CPU 12都相同的端口 38。)傳統(tǒng)上,由于不同的數(shù)據(jù)或代碼可能 來自不同的端口,因此這個問題被看作是要避免的問題。然而,在假定的協(xié) 同環(huán)境下,發(fā)明人已經(jīng)找出如何將一切變?yōu)槔?。并且本發(fā)明就是這種情況。
如果CPU 12從多端口地址中執(zhí)行,且所有尋址鄰居CPU 12協(xié)同地(即 同步地)寫, 一個鄰居CPU 12可以供應(yīng)指令流,而不同的CPU 12提供直 接量數(shù)據(jù)。直接量提取操作碼(@p+)產(chǎn)生可以選擇性地(并不同所有的直 接量都需要這樣做)滿足不同鄰居CPU 12的從P寄存器40c中多端口地址 的讀取。這僅僅需要鄰居CPU 12之間的廣泛"協(xié)同"。
然而,在流水線的多端口卩吏用時,在一個鄰居CPU 12正在讀耳又,而一 個CPU 12正在寫的情況下,對同一多端口地址的讀取和寫不會產(chǎn)生問題。 跳轉(zhuǎn)到這種多端口地址并執(zhí)行直接量存貯操作碼(!p+)的思想允許P寄存 器40c在完全安全的情況下對兩個端口 38進(jìn)行尋址。這使A寄存器40a和 B寄存器40b均空閑,可為本機(jī)使用。
當(dāng)傳播數(shù)據(jù)(實際數(shù)據(jù)或作為數(shù)據(jù)正在被傳輸?shù)闹噶?時,還可以對 CPU12進(jìn)行其它優(yōu)化。圖10-12示出一例子,并給出當(dāng)前的發(fā)明。
圖10為用于保證在如上所述的多讀/多寫系統(tǒng)中傳播不反轉(zhuǎn)的處理規(guī)則 1000的表格。規(guī)則l是簡單的——各CPU應(yīng)當(dāng)將在先CPU "看"作它的源。 規(guī)則2和規(guī)則3有點(diǎn)深奧,但是通常可以通過將運(yùn)送液體的流水線與CPU 的流水線進(jìn)行比較而被認(rèn)知到。
規(guī)則2避免了 CPU的流水線變?yōu)?瓶頸"。4艮明顯,如果CPU的流水 線無法跟上供應(yīng)給它的數(shù)據(jù),那么就不能實時地進(jìn)行操作。由此可見,各 CPU應(yīng)當(dāng)最好于在先CPU做好寫準(zhǔn)備之前或在先CPU做好寫準(zhǔn)備的那一刻 就做好讀取準(zhǔn)備。當(dāng)然,這不總是可能的(如圖12a-b所示),但是在對CPU 進(jìn)行編程時,將其作為目標(biāo)來謹(jǐn)記是有幫助的。圖11為通過示出通過相連 的CPU 1102、 1104、 1106和1108組從左到右順序傳輸數(shù)據(jù)時在一連串時間 處優(yōu)化流水線1100的狀態(tài)來描繪這一點(diǎn)的框圖。在t時刻,CPU 1102向
23CPU1104寫(W),而CPU 1104、 1106、 1108都在讀取(R)。在t+"l時 刻,此時CPU 1104有數(shù)據(jù),并將該數(shù)據(jù)寫入CPU 1106,而CPU 1106、 1108 在讀取。在t+2時刻,此時CPU 1106有數(shù)據(jù),并將該數(shù)據(jù)寫入CPU 1108, 而CPU 1108在讀取。
規(guī)則3避免了 CPU的流水線"減速"(這里與液體運(yùn)送流水線進(jìn)行類 比變得有些勉強(qiáng))。圖12a-b是在形式上示出圖11的流水線1100中的初始 數(shù)據(jù)流的示意圖,既有沒有遵循規(guī)則3的情況,也有遵循規(guī)則3的情況(這 里時間的前進(jìn)方向是從左到右)。
圖12a示出在采用傳統(tǒng)的讀(R)、處理(P)和寫(W)的操作次序的 情況下經(jīng)過流水線1100的數(shù)據(jù)流。所有的操作具有最小執(zhí)行時間(為了簡 單起見,這里所示出的相同),但是讀(R)和寫(W)操作在等待對應(yīng)的 寫(W)或讀(R)發(fā)生的時候,可能需要除最小時間之外的額外時間。特 別是在異步CPU中,用于處理(P)操作的時間可能隨手邊的任務(wù)而具有相 當(dāng)可觀的變化。因此,在實際應(yīng)用中,處理(P)操作通常會比在此描繪的 需要更長的時間,因此那些類似于圖12a所示的問題很可能會變得更差。
在圖12a中描繪出反轉(zhuǎn)1112。當(dāng)在這里開始寫操作1114時,兩個讀操 作1116和1118正在等待,CPU 1108向CPU 1106寫。進(jìn)一步,在流水線 IIOO中,這會更差。例如,當(dāng)CPU 1108開始寫時,CPU1110可能正忙于 處理或?qū)?,然后只有CPU 1106可能在一見圖讀取。反轉(zhuǎn)1112幾乎可以確定不 是流水線1110的編程者所期望的或預(yù)期的,它很可能破壞運(yùn)算精度,或使 流水線1110正在進(jìn)行的應(yīng)用崩潰。
圖12a還示出反轉(zhuǎn)1112以何種方式顯著增加CPU lllO讀取(即等待) 數(shù)據(jù)以開始工作所花費(fèi)的時間。然而,就這一點(diǎn)而論,從其它方面來說經(jīng)過 圖12a中流水線1110的時序可能也不是最理想的,如通過圖12a和圖12b 的比較結(jié)果可以看出的。
圖12b示出在采用讀(R)、處理(P)和寫(W)的操作次序的情況下 通過流水線1100的數(shù)據(jù)流。如這里可以看出的,不存在反轉(zhuǎn),且CPU 1102、1104、 1106、 1108和1110都盡快接收數(shù)據(jù)以開始工作。
圖12b中示出的結(jié)點(diǎn)圖示出這里的流水線1100的有用的額外特征(這 些應(yīng)當(dāng)與轉(zhuǎn)移操作混淆)。在CPU中進(jìn)行讀(R)和寫(R)操作之后,以 CPU 1102為例,剛寫入CPU 1104的數(shù)據(jù)不必然是從CPU 1102得到的。因 此,對于一起工作的CPU 1102中隨后的處理(P)操作,該數(shù)據(jù)是可獲得 的。這對于利用相同的值來初始化CPU(例如使存貯位置歸零或設(shè)置計數(shù)器) 是有用的。另外, 一些種類的算法也可以受益于此。這些算法例如將單個數(shù) 據(jù)采樣給予若干個CPU,然后在各CPU中以不同的系數(shù)值來進(jìn)行處理的算 法。
可替換地,可通過使用初始讀(R)、寫(W)和單個n叩指令作為處 理(P)向CPU 1102、 1104、 1106、 1108、 1110中的各CPU提供不同的第 一數(shù)據(jù)值,直到流水線中的所有CPU具有數(shù)據(jù)為止,然后這些CPU都使用
這些數(shù)據(jù)來并行進(jìn)行實際的處理。
可以在不改變本發(fā)明的實施例的值或范圍的情況下,對其進(jìn)行各種額外 的修改。例如,雖然這里在讀指令和寫指令方面對該發(fā)明進(jìn)行了描述,但是 在實際應(yīng)用中,可以存在至少兩種讀類型指令和/或至少兩種寫類型指令。
僅作為一個例子,在計算機(jī)12的一個實施例中,存在使寄存器遞增的寫指 令和不使寄存器遞增的其它寫指令。類似地,可以根據(jù)使用哪個寄存器40 來選擇通信端口 38等而改變寫指令,如這里先前所描述的。還可以存在若 干不同的讀指令,僅取決于計算機(jī)12的設(shè)計者認(rèn)為哪種改變是作為替換的 讀行為的有用選項。
類似地,盡管在這里已經(jīng)關(guān)于單個電路小片14上的陣列IO中的計算機(jī) 12之間的通信描述了本發(fā)明的實施例,但相同的原理和方法可用于或被修 改為用于完成其它器件間通信,例如計算機(jī)12與其專用存儲器之間的通信, 或陣列10中的計算機(jī)12與外部器件之間的通信(通過輸入/輸出端口等)。 實際上,預(yù)計到, 一些應(yīng)用可能需要陣列的陣列一利用當(dāng)前描述的器件間通 信方法潛在地適用于陣列的陣列中的通信。盡管這里已討論了計算機(jī)陣列10和計算機(jī)12的具體例子及其規(guī)則1000 的具體例子,但是,預(yù)期將存在很多還無法想象的應(yīng)用。實際上,本發(fā)明的 一個優(yōu)勢在于本創(chuàng)造性方法及裝置可以適于大量使用。
本發(fā)明還提供一種計算機(jī)程序,當(dāng)該計算機(jī)程序在計算機(jī)組上運(yùn)行時, 使該計算機(jī)組實施在此之前所描述的創(chuàng)造性方法。該程序可以位于載體上。 該載體可以是信號或存貯設(shè)備。該存貯設(shè)備可以是記錄介質(zhì)或在其它例子中 的存儲器設(shè)備。
上面的所有僅是本發(fā)明的可用實施例的 一 些例子。本領(lǐng)域技術(shù)人員將容 易看出可以在不脫離本發(fā)明的精神或范圍的情況下,進(jìn)行大量其它的修改和 變動。相應(yīng)地,這里的公開內(nèi)容目的不意在限定,且所附的權(quán)利要求被解釋 為包含本發(fā)明的全部范圍。
權(quán)利要求
1. 一種由計算機(jī)組處理數(shù)據(jù)的方法,其中該計算機(jī)組包括首計算機(jī)和末計算機(jī),并且,其中除首計算機(jī)之外的各計算機(jī)前面均置有在先計算機(jī),且除末計算機(jī)之外的各計算機(jī)后面均置有后續(xù)計算機(jī),該處理包括在被視為當(dāng)前計算機(jī)的各計算機(jī)中(a)利用當(dāng)前計算機(jī)讀取新數(shù)據(jù);(b)在所述(a)之后,利用當(dāng)前計算機(jī)寫舊數(shù)據(jù);(c)在所述(b)之后,處理當(dāng)前計算機(jī)中的所述新數(shù)據(jù),以生成所述舊數(shù)據(jù);并且(d)在所述(c)之后,如果當(dāng)前計算機(jī)非末計算機(jī),則將所述舊數(shù)據(jù)保存在當(dāng)前計算機(jī)中。
2、 根據(jù)權(quán)利要求1所述的方法,其中所述(a)包括從在先計算機(jī)讀取所述舊數(shù)據(jù)作為所述新數(shù)據(jù),或者, 在為首計算機(jī)的情況下,從該計算機(jī)組的外部讀取數(shù)據(jù)作為所述新數(shù)據(jù)。
3、 根據(jù)權(quán)利要求1或2所述的方法,其中 所述(b)包括將所述舊數(shù)據(jù)寫入后續(xù)計算機(jī),或者, 在為末計算機(jī)的情況下,將所述舊數(shù)據(jù)寫到該計算機(jī)組的外部。
4、 根據(jù)權(quán)利要求l、 2或3所述的方法,其中該計算機(jī)組為利用數(shù)據(jù)路徑連接以互相通信的兩維以上計算機(jī)陣列。
5、 根據(jù)權(quán)利要求4所述的方法,進(jìn)一步包括利用可編程設(shè)置的位來使所述數(shù)據(jù)路徑尋址到至少在先計算機(jī)和后續(xù) 計算機(jī),使得所述當(dāng)前計算機(jī)可以通過作為所述位并發(fā)設(shè)置的基礎(chǔ)的所述數(shù) 據(jù)4^徑進(jìn)行通信。
6、 根據(jù)權(quán)利要求5所述的方法,其中所述(a)包括從由所述位并發(fā)指定的若干個計算機(jī)中的一個計算機(jī)讀
7、 根據(jù)權(quán)利要求5或6所述的方法,其中所述(b)包括將所述舊數(shù)據(jù)寫入由所述位并發(fā)指定的若干個計算機(jī)中 的一個計算機(jī)。
8、 根據(jù)前述權(quán)利要求中任一項所述的方法,其中 所述(a)包括將所述新數(shù)據(jù)壓入堆棧;且所述(b)包括將所述舊數(shù)據(jù)從堆棧中彈出。
9、 一種處理數(shù)據(jù)的計算機(jī)組,其中該計算機(jī)組包括首計算機(jī)和末計算 機(jī),并且,其中除首計算機(jī)之外的各計算機(jī)前面均置有在先計算機(jī),且除末 計算機(jī)之外的各計算機(jī)后面均置有后續(xù)計算機(jī),所述各計算機(jī)均包括通過第 一數(shù)據(jù)路徑讀取新數(shù)據(jù)的讀邏輯; 通過第二數(shù)據(jù)路徑寫舊數(shù)據(jù)的寫邏輯; 處理所述新數(shù)據(jù)以生成所述舊數(shù)據(jù)的處理邏輯;并且 存貝i所述舊數(shù)據(jù)的存貯元件,針對除末計算機(jī)之外的各計算機(jī); 其中所述寫邏輯在所述讀邏輯之后操作,且所述寫邏輯在所述處理邏輯 之前操作。
10、 根據(jù)權(quán)利要求9所述的計算機(jī)組,其中所述讀邏輯從在先計算機(jī)讀取所述舊數(shù)據(jù)作為所述新數(shù)據(jù),或者,在為首計算機(jī)的情況下,從該計算機(jī)組的外部讀取數(shù)據(jù)作為所述新數(shù)據(jù)。
11、 根據(jù)權(quán)利要求9或IO所述的計算機(jī)組,其中 所述寫邏輯將所述舊數(shù)據(jù)寫入后續(xù)計算機(jī),或者,在為末計算機(jī)的情況下,將所述舊數(shù)據(jù)寫到該計算機(jī)組的外部。
12、 根據(jù)權(quán)利要求9、 10或11所述的計算機(jī)組,其中該計算機(jī)組為利用若干條第 一數(shù)據(jù)路徑和若干條第二數(shù)據(jù)路徑連接的 兩維以上計算機(jī)陣列。
13、 根據(jù)權(quán)利要求12所述的計算機(jī)組,進(jìn)一步包括 具有位的寄存器,所述位可編程設(shè)置為對所述各數(shù)據(jù)路徑進(jìn)行尋址,使具有位的寄存器,所述位可編程設(shè)置為對所述各數(shù)據(jù)路徑進(jìn)行尋址,使 得所述計算機(jī)可以通過所述數(shù)據(jù)路徑中作為所述位并發(fā)設(shè)置的基礎(chǔ)的若干 條數(shù)據(jù)路徑來進(jìn)行通信,從而允許用所述寄存器中的單個地址兼表示數(shù)據(jù)的 源和目的兩者。
14、 根據(jù)權(quán)利要求9至13中任一項所述的計算機(jī)組,其中 所述讀邏輯將所述新數(shù)據(jù)壓入堆棧;且所述寫邏輯將所述舊數(shù)據(jù)從所述堆棧中彈出。
15、 一種計算機(jī)程序,當(dāng)該計算機(jī)程序在計算機(jī)組上運(yùn)行時,使該計算 機(jī)組實施根據(jù)權(quán)利要求1至8中任一項所述的方法。
全文摘要
一種計算機(jī)組包括首計算機(jī)和末計算機(jī)。除所述首計算機(jī)之外的所述各計算機(jī)前面放有在先計算機(jī),除所述末計算機(jī)之外的所述各計算機(jī)后面放有后續(xù)計算機(jī)。一邏輯通過第一數(shù)據(jù)路徑讀取新數(shù)據(jù),且一邏輯通過第二數(shù)據(jù)路徑寫舊數(shù)據(jù)。一邏輯處理所述新數(shù)據(jù)以生成所述舊數(shù)據(jù),并且除所述末計算機(jī)之外,存貯元件存貯所述舊數(shù)據(jù)。所述寫邏輯在所述讀邏輯之后操作,且所述寫邏輯在所述處理邏輯之前操作。
文檔編號G06F15/16GK101295242SQ20081009408
公開日2008年10月29日 申請日期2008年4月25日 優(yōu)先權(quán)日2007年4月27日
發(fā)明者約翰·W·瑞博, 邁克爾·B·蒙特維利什斯凱 申請人:科技資產(chǎn)股份有限公司