專利名稱::用于操作計算機(jī)處理器陣列的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計算機(jī)和計算機(jī)處理器領(lǐng)域,更具體地,涉及一種用于在計算機(jī)之間進(jìn)行單一類型互動的的方法和裝置。該創(chuàng)造性的計算機(jī)陣列的當(dāng)前主要用途在于,在單一微芯片上對多臺計算機(jī)進(jìn)行組合。進(jìn)一步更為具體地,本發(fā)明涉及計算機(jī)和計算機(jī)處理器領(lǐng)域,更具體地,涉及一種用于在堆棧計算機(jī)處理器中更有效使用堆棧的方法和裝置。
背景技術(shù):
:本領(lǐng)域公知的是,使用多臺計算機(jī)處理器,使它們一起工作而完成任務(wù)。已經(jīng)使用了多線程和其它多種方案來允許處理器進(jìn)行協(xié)作。不過,一般認(rèn)為,該領(lǐng)域的改進(jìn)空間很大。進(jìn)一步,現(xiàn)在流行的趨勢是,將多臺處理器組合在單一的芯片上,但這會加劇問題,并且使得更加緊迫地需要找到一種解決方案來使得計算機(jī)以高效的方式一起工作?,F(xiàn)在,出于多種原因,認(rèn)為針對許多應(yīng)用程序的多臺處理器的最佳排列可能是由多臺計算機(jī)組成的陣列,每臺計算機(jī)均具有處理能力和至少一些專用存儲器。在該示例中,每臺計算機(jī)如果獨(dú)立運(yùn)行,那么它的功能都不會特別強(qiáng)大,但是如果計算機(jī)緊密協(xié)作,就將會實現(xiàn)強(qiáng)大的計算功能。共同待審的申請已經(jīng)描述并宣稱這種計算機(jī)陣列的多個創(chuàng)造性的方面,包括關(guān)于可以怎樣布置這種計算機(jī),以及在它們之間的通訊信道如何產(chǎn)生的一些細(xì)節(jié)。不過,計算機(jī)陣列的相對較新的概念的實施,還需要更進(jìn)一步的創(chuàng)新,以便使運(yùn)行效率最大。顯然,關(guān)于如何最佳地布置計算機(jī)陣列,在計算機(jī)陣列之間進(jìn)行通訊,在計算機(jī)陣列中分割任務(wù),以及其他使用計算機(jī)陣列的方面,有許多需要解答的問題。這些問題中的一些已經(jīng)得到回答,不過即使在現(xiàn)存的解決方案上,也還存在改進(jìn)空間。在其它情況下,解決方案可能要求陳述第一印象的問題,以便解決現(xiàn)有技術(shù)中目前還不存在的新問題。堆棧計算機(jī)所提供的處理器復(fù)雜度大大低于復(fù)雜指令集計算機(jī)(CISC)的復(fù)雜度,并且堆棧機(jī)器所提供的系統(tǒng)整體復(fù)雜度也低于精簡指令集計算機(jī)(RICS)或CISC機(jī)器的系統(tǒng)整體復(fù)雜度。它們并不需要復(fù)雜的編譯器,也不需要高速緩沖控制硬件來實現(xiàn)優(yōu)良性能。它們還獲得了有競爭力的原始性能,以及在大多數(shù)編程環(huán)境中針對給定價格的優(yōu)良性能。它們最初被成功應(yīng)用的領(lǐng)域是實時嵌入式控制環(huán)境,在該環(huán)境中它們做得比其它系統(tǒng)設(shè)計方法好得多。之前,堆棧大都保持在程序存儲器中,較新的堆棧機(jī)器為堆棧維護(hù)分立的存儲器芯片,或者甚至是片上存儲器的一塊區(qū)域。這些堆棧機(jī)器提供了極其快速的子例程調(diào)用能力,以及及極其的中斷處理和任務(wù)切換性能。Zahir等人(USPN6,367,005)公開了一種寄存器堆棧引擎,該引擎將足夠的寄存器堆棧的寄存器保存到存儲器,以在堆棧上溢的情況下提供更多可用的寄存器。寄存器堆棧引擎還使微處理器延遲,直到所述引擎可在堆棧下溢的情況下恢復(fù)合適數(shù)量的寄存器。Story(USPN6,219,685)公開了一種將運(yùn)行結(jié)果與閾值進(jìn)行比較的方法。不過該方法并不對如下兩種結(jié)果進(jìn)行區(qū)分,一種是結(jié)果被四舍五入到閾值(這將引起上溢異常),另一種是結(jié)果恰好就等于閾值。被Story公開的另一種方法讀取和寫入硬件標(biāo)記,以識別上溢或下溢狀況。采用存儲器中的堆棧,上溢或下溢將覆蓋堆棧項目,或使用并不意在成為堆棧一部分的堆棧項目。在堆棧中減輕或消除上溢和下溢的方法存在改進(jìn)的必要。Forth系統(tǒng)已經(jīng)能夠讓不止一個的代碼“線程”同時執(zhí)行,這經(jīng)常稱為協(xié)作循環(huán)制(cooperativeround-robin)。線程得到使用中央處理單元(CPU)的輪次的次序是固定的;例如,線程4總是在線程3之后并在線程5之前得到其輪次。每個線程被允許按其所需的時間保有CPU,然后自動放棄它。線程通過調(diào)用字PAUSE實現(xiàn)此過程。在PAUSE函數(shù)期間,只需要保存少數(shù)數(shù)據(jù)項目,以便恢復(fù)原始任務(wù),但是在中斷函數(shù)期間,需要保存大量上下文。每個線程可能有工作要做,也可能沒有。如果任務(wù)4有工作要做,并且在循環(huán)制中在其之前的任務(wù)(任務(wù)3)調(diào)用PAUSE,那么任務(wù)4將蘇醒并且工作,直到它決定再次PAUSE。如果任務(wù)4沒有工作要做,它就將控制傳遞到任務(wù)5。當(dāng)任務(wù)調(diào)用了將要執(zhí)行輸入/輸出功能的字,并且因此將需要等待輸入/輸出完成時,PAUSE被構(gòu)建到輸入/輸出調(diào)用中。PAUSE的可預(yù)測性允許非常有效的代碼。經(jīng)常地,基于Forth的協(xié)作循環(huán)制使每個線程在CPU處擁有輪次所用的時間,小于搶先多任務(wù)器確定哪個線程接下來將得到CPU所花的時間。不過,特定的任務(wù)往往可以蓋過或壓倒CPU。另外,將PAUSE功能進(jìn)行擴(kuò)展從而超出一個CPU是有好處的。
發(fā)明內(nèi)容簡而言之,本發(fā)明包括計算機(jī)陣列,每臺計算機(jī)具有其自身的存儲器并能夠發(fā)揮獨(dú)立的計算功能。為了協(xié)作完成任務(wù),計算機(jī)必須將數(shù)據(jù)和/或指令從一臺傳送到另一臺。一種可能的配置在于,計算機(jī)在垂直鄰近的計算機(jī)之間具有連接數(shù)據(jù)路徑,這樣,每臺計算機(jī)可以直接與多達(dá)四個的“鄰居”進(jìn)行通訊。如果計算機(jī)希望與另一臺不直接相鄰的計算機(jī)進(jìn)行通訊,那么通訊將被引導(dǎo)通過另一臺計算機(jī)而到達(dá)所希望的目的地。因為,根據(jù)所描述的環(huán)境,所包含的指令多達(dá)四個的數(shù)據(jù)字可以在計算機(jī)之間并行傳送,并可以并行傳送進(jìn)和傳送出每臺計算機(jī)的內(nèi)部存儲器,因此單個數(shù)據(jù)字中的一種迷你程序在此被稱為微循環(huán)。應(yīng)該記住的是,在大型處理器陣列中,大型任務(wù)理想地被分割成多個較小型的任務(wù),每個小型任務(wù)可以被能力受到一定限制的處理器所完成。因此,可以想到,四指令環(huán)路將相當(dāng)有用。這個事實通過相關(guān)事實而變得更為明顯,該事實是,因為計算機(jī)確實在能力上受限,因此對于它們而言比較有利的是,有時從鄰近計算機(jī)“借用”能力。這將為微循環(huán)的使用提供了理想的機(jī)會。雖然計算機(jī)可能需要從鄰近計算機(jī)借用處理功能之類,不過另一種可能在于,它可能需要從鄰近計算機(jī)借用一些存儲容量,并且以一定程度上類似于本地存儲器的方式使用這些借用的存儲容量。通過將微循環(huán)傳遞到鄰近計算機(jī),以指令該臨近計算機(jī)讀取或?qū)懭胍幌盗袛?shù)據(jù),就可以容易地實現(xiàn)這種借用的存儲器。這種微循環(huán)可以例如包含如下指令,該指令從特定的內(nèi)部存儲器位置寫入,對該位置進(jìn)行增值,然后重復(fù)給定次數(shù)的迭代。微循環(huán)因為是單一字,因此不能不止一次地執(zhí)行指令存儲器讀取。上述將微循環(huán)傳遞到鄰近計算機(jī)的示例為本發(fā)明又一方面的示例,該方面在此被稱為“Forthlet”,因為它們目前采用Forth計算機(jī)語言執(zhí)行——雖然本發(fā)明的應(yīng)用并不嚴(yán)格限于使用Forth。Forthlet是一種迷你程序,它能夠被直接傳送到計算機(jī)用于執(zhí)行。與微循環(huán)不同,F(xiàn)orthlet可以不止一個字,并且可以執(zhí)行多存儲器讀取。在現(xiàn)有技術(shù)的計算機(jī)中,指令必須在執(zhí)行之前被讀取和存儲,但是,如同根據(jù)此處的詳細(xì)描述所可見的,根據(jù)本發(fā)明這沒有必要。事實上,可以預(yù)見,本發(fā)明的一個重要方面在于,計算機(jī)可以產(chǎn)生Forthlet,并將其傳遞到另一臺計算機(jī)用于執(zhí)行。Forthlet可以被程序員“預(yù)先寫入”,并被存儲以便于使用。事實上,F(xiàn)orthlet可以被積聚成“圖書館”,以根據(jù)需要使用。不過,根據(jù)預(yù)編程標(biāo)準(zhǔn),在計算機(jī)中可以產(chǎn)生Forthlet,這也在本發(fā)明的范圍中。通過示例,在本發(fā)明的實施例中,I/O寄存器被當(dāng)作存儲器地址,這意味著,與讀取和寫入存儲器相同(或相似)的指令也可以執(zhí)行I/O操作。在多核芯片的情況中,針對I/O結(jié)果的這種選擇有強(qiáng)大的結(jié)果。核心處理器不僅可以讀取和執(zhí)行來自其本地ROM和RAM的指令,而且它還可以讀取和執(zhí)行在I/O端口或寄存器上向其展現(xiàn)的指令?,F(xiàn)在,傳送數(shù)據(jù)的緊環(huán)路的概念變得難以置信地有影響力。它允許指令流在I/O端口處向核心展示,并直接從I/O端口處執(zhí)行。因此,一個核心可以將代碼對象發(fā)送到鄰近的核心處理器,而所述臨近的核心處理器可以直接執(zhí)行該代碼對象?,F(xiàn)在代碼對象可以在核心之間傳送,這些核心在寄存器處執(zhí)行這些代碼對象。代碼對象以非常高的速度到達(dá),因為每個核心基本上完全工作在其本地地址空間中,而不會花費(fèi)明顯的時間用于傳送代碼指令。如上文所討論的,每次指令讀取將多個(目前描述的實施例中為四個)指令帶進(jìn)核心處理器。雖然這種內(nèi)建“緩沖”當(dāng)然很小,不過在指令本身利用它時,它卻及其有效。例如,所構(gòu)建的微for-next環(huán)路可以完全包含于單個18位指令字的限度中。當(dāng)與構(gòu)建在I/O寄存器中的自動狀態(tài)信令結(jié)合時,這些類型的構(gòu)造是理想的,因為這意味著,僅僅采用單次指令讀取就可以傳送較大的數(shù)據(jù)塊。并且采用這種指令包,執(zhí)行呈現(xiàn)在在來自鄰近處理器核心的共享I/O寄存器上的指令的概念,帶來了新能量,因為現(xiàn)在在該寄存器中出現(xiàn)的每個字具有的指令不是一個,而是四個。這些類型的軟件/硬件結(jié)構(gòu)以及它們對多核心芯片性能的令人驚愕的沖擊,對于傳統(tǒng)語言而言簡直是不可行的——它們僅僅可行這樣的指令集,其中多個指令被打包在單個字中,并且完整的循環(huán)可以從該字中執(zhí)行。在此描述的器件中,傳統(tǒng)的數(shù)據(jù)和返回堆棧被替換以一陣列的寄存器,其以循環(huán)重復(fù)模式(circular,repeatingpattern)運(yùn)作。數(shù)據(jù)堆棧包括T寄存器、S寄存器和八個硬連線寄存器,它們以交替模式(alternatingpattern)電互連。這八個硬連線寄存器以諸如循環(huán)重復(fù)模式的方式互連。這種配置防止從堆棧外部讀取,并防止讀取不希望的空寄存器值。類似于數(shù)據(jù)堆棧,返回堆棧包括R寄存器和八個硬連線寄存器,它們以交替模式電互連。這八個硬連線寄存器以諸如循環(huán)重復(fù)模式的方式互連。這種配置防止從堆棧外部讀取,并防止讀取不希望的空寄存器值。上述雙堆棧處理器可以用作獨(dú)立運(yùn)作的處理器,或者它可以在互連計算機(jī)陣列中用于其它多個類似的或不同的處理器??紤]到對實施本發(fā)明的模式及其工業(yè)實用性所做的,如在此所述的以及通過附圖的多副圖中所圖示的,本發(fā)明將對本領(lǐng)域技術(shù)人員而言變得更加清楚。所列舉的目標(biāo)和優(yōu)勢并非是本發(fā)明所有優(yōu)點的窮盡列舉。而且,即使在應(yīng)用中缺少或不需要一個或多個所意圖的目標(biāo)和/或優(yōu)點,也可以實踐本發(fā)明。進(jìn)一步,本領(lǐng)域的技術(shù)人員將認(rèn)知,本發(fā)明的各種不同的實施例可達(dá)到一種或多種目標(biāo)和/或優(yōu)點,不過沒有必要全部實現(xiàn)。相應(yīng)地,在此描述的目標(biāo)和/或優(yōu)點并非本發(fā)明的實質(zhì)部分,并且不應(yīng)該被認(rèn)為是對本發(fā)明的限制。圖1是根據(jù)本發(fā)明的計算機(jī)陣列的示意圖;圖2是示出了圖1中計算機(jī)的子集和圖1中互連數(shù)據(jù)總線的更詳細(xì)視圖的詳細(xì)圖;圖3是描述圖1和圖2中的其中一臺計算機(jī)的一般布局的結(jié)構(gòu)圖;圖4是指令字48的示意性表現(xiàn);圖5是圖3中的時段定序器42的示意性表現(xiàn);圖6是描述根據(jù)本發(fā)明的微循環(huán)的示例的流程圖;圖7是描述用于執(zhí)行來自端口的指令的創(chuàng)造性方法的示例的流程圖;圖8是描述用于警醒計算機(jī)的創(chuàng)造性的改進(jìn)方法的示例的流程圖;圖9示出了計算機(jī)12f和12g的運(yùn)行。具體實施例方式下文中將結(jié)合附圖描述實施本發(fā)明的方法,在附圖中,相應(yīng)的附圖標(biāo)記代表相同或相似的元件。雖然按照實現(xiàn)本發(fā)明目標(biāo)的模式描述了本發(fā)明,不過本領(lǐng)域人員可以理解的是,在不脫離本發(fā)明的精神和范圍的前提下,考慮到這些啟示,可以實現(xiàn)對本發(fā)明的各種改造。在此描述的和/或在附圖中示出的本發(fā)明的諸實施例和改造,僅僅旨在示例,而非意在限制本發(fā)明的范圍。除非另外特別指明,本發(fā)明的獨(dú)特的方面和部分,可能被忽略或修改,或者可能已經(jīng)因此替代了公知的等價物,或者還是未知的替代物,例如有待于將來開發(fā)的或者例如為在將來可能被發(fā)現(xiàn)而可接受的替代物。即使需要保持處于所要求保護(hù)的發(fā)明的精神和范圍之內(nèi),本發(fā)明還是可以針對多種應(yīng)用進(jìn)行修改,因為潛在應(yīng)用的范圍很廣闊,還因為本發(fā)明本就旨在適于多種這類的改造。以下描述的實施例以計算機(jī)陣列為例,該陣列既具有計算機(jī)之間的異步通訊,也具有單獨(dú)的異步運(yùn)行計算機(jī),雖然如此,本發(fā)明的應(yīng)用絕不限于這里所記載的上下文。本發(fā)明包括單獨(dú)計算機(jī)的陣列。圖1中的示意圖描述了該創(chuàng)造性的計算機(jī)陣列,其在此被一般地標(biāo)記以附圖標(biāo)記10。計算機(jī)陣列10具有多個(在所示的示例中為二十四個)計算機(jī)12(有時候在陣列的示例中也稱為“核心”或“節(jié)點”)。在所示的示例中,所有的計算機(jī)12均位于單個基座(die)14上。每臺計算機(jī)12是通常獨(dú)立運(yùn)行的計算機(jī),下文中將對此做更詳細(xì)的討論。計算機(jī)12被多條(下文中將對該數(shù)量做詳細(xì)闡釋)互連數(shù)據(jù)總線16互相連接。在本示例中,數(shù)據(jù)總線16是雙向異步高速并行數(shù)據(jù)總線,盡管針對此目的采用其它互連方式也落入本發(fā)明的范圍中。在陣列10的本實施例中,不僅計算機(jī)12之間的數(shù)據(jù)通訊是異步的,單獨(dú)的計算機(jī)12也以內(nèi)在(internally)異步模式運(yùn)行。這已經(jīng)被發(fā)明人所發(fā)現(xiàn)能夠提供重要的優(yōu)勢。例如,因為時鐘信號不必發(fā)布到整個計算機(jī)陣列10,因此就節(jié)約了大量的能量。進(jìn)一步,由于不必發(fā)布時鐘信號,就消除了許多定時問題,這些定時問題可能限制陣列10的尺寸或可能導(dǎo)致其它公知麻煩。24臺計算機(jī)組成的陣列并非一種限制,并且期待的是,隨著芯片制造技術(shù)更為復(fù)雜,計算機(jī)的數(shù)目將增大,當(dāng)然,可量測性(scalability)是這種配置的原則。本領(lǐng)域的技術(shù)人員可以認(rèn)識到,出于清晰的考慮,基座14上的額外部分在圖1的視圖中被省略了。這些額外部分包括電力總線、外部連接襯墊、和微處理器芯片的其他這類公共方面。計算機(jī)12e是未處于陣列10的周界上的其中一臺計算機(jī)12的示例。也就是說,計算機(jī)12e具有四個垂直相鄰的計算機(jī)12a、12b、12c和12d。對計算機(jī)12a-12e進(jìn)行的這種分組將在下文中用于對陣列10的計算機(jī)12之間的通訊進(jìn)行更為詳細(xì)的討論。如圖1的視圖可見,諸如計算機(jī)12e的內(nèi)部計算機(jī)將具有通過總線16與該內(nèi)部計算機(jī)直接通訊的其它四臺計算機(jī)12。在下文的闡述中,所討論的原理將用于所有計算機(jī)12,除了在陣列10的周界上的計算機(jī)12僅僅與三臺其他計算機(jī)直接通訊,還除了邊角計算機(jī)12僅僅與兩臺其他計算機(jī)12直接通訊。圖2是圖1的一部分的更為詳細(xì)的視圖,其僅僅示出了一些計算機(jī)12,具體而言,僅僅示出了計算機(jī)12a-12e。圖2的視圖還揭示了,所有數(shù)據(jù)總線16均具有讀線路18、寫線路20和多條(在本示例中為十八條)數(shù)據(jù)線路22。數(shù)據(jù)線路22能夠幾乎同時地并行轉(zhuǎn)換一個18比特指令字的所有比特。應(yīng)該注意的是,在本發(fā)明的一個實施例中,一些計算機(jī)12是相鄰計算機(jī)的鏡像(mirrorimage)。不過,不論計算機(jī)12所有均走向一致還是作為相鄰計算機(jī)的鏡像,均不構(gòu)成這里描述的本發(fā)明的一方面。因此,為了更好地描述本發(fā)明,在此并不進(jìn)一步討論這種潛在的復(fù)雜性。根據(jù)本創(chuàng)造性方法,計算機(jī)12,例如計算機(jī)12e,可以對它的一條、兩條、三條或所有四條讀線路18進(jìn)行設(shè)置,從而使得該計算機(jī)準(zhǔn)備從相應(yīng)的一臺、兩臺、三臺或所有四臺相鄰計算機(jī)12接收數(shù)據(jù)。類似地,計算機(jī)12還可以將其一條、兩條、三條或所有四條寫線路20設(shè)置為高。雖然在此的描述并未涉及在同一時刻將不止一臺計算機(jī)12的寫線路20設(shè)置為高,但是如此做法并未超出本發(fā)明的范圍,因為可以想象,如果事實上希望在多種場合使用的話,例如要寫入多端口地址,則這種操作的使用是可能發(fā)生的。當(dāng)鄰近的計算機(jī)12a、12b、12c或12d中的一臺將其本身與計算機(jī)12e之間的寫線路20設(shè)置為高時,如果計算機(jī)12e已經(jīng)將對應(yīng)的讀線路18設(shè)置為高,則字從該計算機(jī)12a、12b、12c或12d沿著相關(guān)的數(shù)據(jù)線路22傳送到計算機(jī)12e。然后,發(fā)送計算機(jī)12將釋放寫線路20,并且接收計算機(jī)(在本示例中為12e)將寫線路20和讀線路18均拉低。后一操作將向發(fā)送計算機(jī)12確認(rèn),已經(jīng)接收到數(shù)據(jù)。需要注意的是,上述描述并非必然意圖按順序表示這些事件的次序。在實際操作中,在該示例中,在發(fā)送計算機(jī)12釋放(停止拉高)其寫線路20之前不久,接收計算機(jī)可能試圖將寫線路20設(shè)置為低。在這種情況下,一旦發(fā)送計算機(jī)12釋放其寫線路20,寫線路20就將被接收計算機(jī)12e拉低。在本示例中,只有程序錯誤會使得一條總線16相反兩端的計算機(jī)12均試圖將其之間的讀線路18設(shè)置為高。另外,對于一條總線16相反兩端上的計算機(jī)12而言,同時均試圖將其之間的寫線路20設(shè)置為高是錯誤的。類似地,如上文所述,當(dāng)前不能預(yù)見的是,可能需要使單個計算機(jī)12將它的四條寫線路20中的不止一條設(shè)置為高。不過,現(xiàn)在能預(yù)見的是,存在如下可能,其中需要將讀線路18的不同組合設(shè)置為高,從而使計算機(jī)12中的一臺可以處于等待狀態(tài),以等待來自所選擇的計算機(jī)12中的第一臺的數(shù)據(jù),從而將其對應(yīng)的寫線路20設(shè)置為高。在上文所討論的示例中,計算機(jī)12e被描述為,在相鄰的計算機(jī)(從計算機(jī)12a、12b、12c和12d中的一臺或多臺選出)已經(jīng)將其寫線路20設(shè)置為高之前,計算機(jī)12e將其一條或多條讀線路18設(shè)置為高。不過,這個過程當(dāng)然可以按照相反的順序進(jìn)行。例如,如果計算機(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)相應(yīng)一對讀線路18和寫線路20均為高時,就傳送等待在數(shù)據(jù)線路22上傳送的數(shù)據(jù)。接著,一旦發(fā)送計算機(jī)12e釋放線路,接收計算機(jī)12(在本示例中為計算機(jī)12a)將兩臺計算機(jī)(在本示例中為12e和12a)之間的讀線路18和寫線路20均設(shè)置為低。只要諸如計算機(jī)12e的計算機(jī)12已經(jīng)將其寫線路20中的一條設(shè)置為高而期望寫入,它就將僅僅等待而幾乎不使用任何能量,直到數(shù)據(jù)如上文所述那樣由合適的鄰近計算機(jī)12“請求”,除非數(shù)據(jù)將要發(fā)送到的計算機(jī)12將其寫線路18設(shè)置為高,在這種情況下,數(shù)據(jù)被立即發(fā)送。類似地,只要計算機(jī)12已經(jīng)將其一條或多條寫線路18設(shè)置為高而期望讀取,則它就將僅僅等待而近乎不使用任何能量,直到連接到所選計算機(jī)12的寫線路20變?yōu)楦咭栽趦膳_計算機(jī)12之間傳送指令字??赡苡卸喾N潛在的裝置和/或方法來使得計算機(jī)12發(fā)揮上文所述的功能。不過,在本示例中,計算機(jī)12這樣行為僅僅是因為,它們在內(nèi)部通常異步地運(yùn)行(并且以所述異步的方式在它們之間傳送數(shù)據(jù))。也就是說,按順序完成指令。當(dāng)產(chǎn)生讀指令或?qū)懼噶顣r,可以不采取進(jìn)一步行動,直到完成指令(或者,或許可選地,直到其被“重啟”等中止)。并不存在規(guī)則的時鐘脈沖,在現(xiàn)有技術(shù)意義中。更確切地說,只有在正在執(zhí)行的指令既不是讀類型指令也不是寫類型指令時(假定讀或?qū)戭愋椭噶顚⒁笸ㄟ^另一實體完成),或者在讀或?qū)戭愋筒僮饕呀?jīng)實際上完成時,脈沖才產(chǎn)生以完成下一指令。圖3是描述圖1和圖2中計算機(jī)12之一的示例的通用布局的結(jié)構(gòu)圖。如圖3的視圖所見,計算機(jī)12中的每一臺均為具有自己的RAM24和ROM26的通用完整計算機(jī)。如早先所提,計算機(jī)12有時候也被稱為單獨(dú)的“核心”,假設(shè)在本示例中它們被組合到單個芯片上。計算機(jī)12的其它基礎(chǔ)元件為返回堆棧28、指令區(qū)域30、算術(shù)邏輯單元(“ALU”)32、數(shù)據(jù)堆棧34和用于對指令進(jìn)行解碼的解碼邏輯部分36。本領(lǐng)域的技術(shù)人員通常很熟悉基于堆棧的計算機(jī)的運(yùn)行,例如本示例的計算機(jī)12。計算機(jī)12為具有數(shù)據(jù)堆棧34和分立的返回堆棧28的雙堆棧計算機(jī)。在本發(fā)明的該實施例中,計算機(jī)12具有四個通訊端口38,其用于與鄰近計算機(jī)12進(jìn)行通訊。通訊端口38為三態(tài)驅(qū)動器,其具有截止?fàn)顟B(tài)、接收狀態(tài)(用于將信號驅(qū)動進(jìn)入計算機(jī)12)和發(fā)送狀態(tài)(用于將信號驅(qū)動出計算機(jī)12)。當(dāng)然,如果特定的計算機(jī)12未處于陣列10(圖1)的內(nèi)部,例如計算機(jī)12e的示例,那么至少出于在此所描述的目的,一個或多個通訊端口在所述特定的計算機(jī)中將不會使用。那些毗鄰基座邊緣的通訊端口38可以具有額外的電路,這些電路或者被設(shè)計為處于這種計算機(jī)12中,或者被設(shè)計為處于計算機(jī)12外部但是與其關(guān)聯(lián),從而導(dǎo)致這種通訊端口38用作外部I/O端口39(圖1)。這種外部I/O端口39的示例包括但不限于,USB(通用串行總線)端口、RS232串行總線端口、并行通訊端口、模數(shù)和/或數(shù)模轉(zhuǎn)換端口以及很多其它可能的變化。在圖1中,“邊緣”計算機(jī)12f被描述為帶有相關(guān)的接口電路80,該接口電路80用于通過外部I/O端口39與外部器件82通訊。指令區(qū)域30包括多個寄存器40,在該示例中,該寄存器包括A寄存器40a、B寄存器40b和P寄存器40c。在該示例中,A寄存器40a是滿18比特寄存器,而B寄存器40b和P寄存器40c為9比特寄存器。為了確保計算結(jié)果的精確性,處理器檢查每個操作,以確定該操作是否出現(xiàn)異常狀態(tài)。例如,算術(shù)操作受到上溢異?;蛳乱绠惓5挠绊?。當(dāng)計算出的數(shù)目大于在為該數(shù)目指定的格式中所能表示的最大數(shù)目時,出現(xiàn)上溢異常。當(dāng)計算出的數(shù)目小于在為該數(shù)目指定的格式中所能表示的最小數(shù)目時,出現(xiàn)下溢異常(IEEE754-1985StandardforBinaryArithmetic)。本發(fā)明公開了一種堆棧計算機(jī)處理器,其中,所述堆棧包括互相連接的寄存器的陣列,其以循環(huán)模式(circularpattern)中發(fā)揮功能。數(shù)據(jù)堆棧和返回堆棧并非是在堆棧指針?biāo)L問的存儲器中的陣列,如許多現(xiàn)有技術(shù)的計算機(jī)的情況一樣。圖4是指令字48的示意性表現(xiàn)。(應(yīng)該注意的是,指令字48實際上可以包含指令、數(shù)據(jù)或它們的某種組合)。指令字48由18個比特50組成。對于二進(jìn)制計算機(jī),比特50中的每一個將為“1”或“0”。如在此之前所討論的,18比特寬的指令字48可包含四個時段54中的多達(dá)四個指令52,時段54被稱為時段零54a、時段一54b、時段二54c和時段三54d。在本發(fā)明的本實施例中,18比特指令字48總是作為整體來讀取。因此,因為總是存在在指令字48中具有多達(dá)四個指令的可能,因而在計算機(jī)12中的指令集中包含no-op(非運(yùn)行)指令,這些指令是為可能沒有必要甚至不希望使用所有可用時段54的情況所提供的。應(yīng)該注意的是,根據(jù)本發(fā)明的一個特定實施例,在交替(alternate)時段(具體而言,時段一54b和時段三54c)中比特50的極性(高有效和低有效的對比)被反轉(zhuǎn)。不過,這并不是在此描述的本發(fā)明的方面,因此,為了更好地闡釋本發(fā)明,在下文的描述中避免這種潛在的復(fù)雜性。圖5是圖3的時段定序器(sequencer)42的示意性表現(xiàn)。如圖5的視圖可見,時段定序器42具有以環(huán)狀排列的多個(本示例中為十四個)反相器56和一個NAND門58,這樣,當(dāng)信號行進(jìn)通過十四個轉(zhuǎn)換器56和NAND門58時,該信號被反相奇數(shù)次。當(dāng)OR門60的兩個輸入中的任一個變?yōu)楦邥r,在時段定序器42中產(chǎn)生一信號。第一OR門輸入62源自正在執(zhí)行的指令52的比特i466(圖4)。如果比特i4為高,則特定指令52為ALU指令,并且i4比特66為“1”。當(dāng)i4比特為“1”時,則第一OR門輸入62為高,并且時段定序器42被觸發(fā)以產(chǎn)生將要導(dǎo)致執(zhí)行下一指令52的脈沖。當(dāng)或者通過使第一OR門輸入62變高,或者通過使第二OR門輸入64變高(下文中將進(jìn)行討論),而使時段定序器42被觸發(fā)時,信號就將圍繞時段定序器42行進(jìn)兩次,每次在時段定序器輸出68處產(chǎn)生輸出。當(dāng)信號第一次經(jīng)過時段定序器輸出68時,它將為低,而在第二次時,在時段定序器輸出68處的輸出將為高。來自時段定序器輸出68的相對寬的輸出被提供到脈沖發(fā)生器70(以方框視圖形式示出),其產(chǎn)生窄的定時脈沖作為輸出。本領(lǐng)域的技術(shù)人員將認(rèn)知到,為了精確地產(chǎn)生計算機(jī)12的操作,窄定時脈沖是需要的。當(dāng)正在執(zhí)行的特定指令52為讀或?qū)懼噶?,或者是任意其他這樣的指令,即其中正在執(zhí)行的指令52立即觸發(fā)執(zhí)行順次的下一指令52是不希望的,那么i4比特66為“0”(低),并且第一OR門輸入62因此也為低。本領(lǐng)域的技術(shù)人員將認(rèn)知到,在諸如計算機(jī)12的器件中的事件的定時通常相當(dāng)嚴(yán)格,而不能有異常。在對時段定序器42進(jìn)行考察之后,本領(lǐng)域的技術(shù)人員將認(rèn)知到,來自O(shè)R門60的輸出必須保持為高,直到信號已經(jīng)循環(huán)經(jīng)過NAND門58從而開始循環(huán)的第二“圈(lap)”之后。之后,為了防止電路的有害的持續(xù)振蕩,在該第二“圈”期間來自O(shè)R門60的輸出將變?yōu)榈?。如同可以根?jù)上文所理解的那樣,當(dāng)i4比特66為“0”時,時段定序器42就將不被觸發(fā)——假定下文所要討論的第二OR門輸入66不為高。如上文所討論的,每個指令52的i4比特66根據(jù)該指令是否為讀或?qū)戭愋偷闹噶疃辉O(shè)置。在指令52中的其余比特50為該指令提供特定操作碼(opcode)的剩余部分。在讀或?qū)戭愋椭噶畹那闆r中,一個或多個比特可以用來指示,在該特定計算機(jī)12中數(shù)據(jù)將要讀取之處或?qū)⒁獙懭胫?。在本發(fā)明的本示例中,將要寫入的數(shù)據(jù)總是來自T寄存器44(數(shù)據(jù)堆棧34的頂部),不過數(shù)據(jù)可以選擇性地讀入T寄存器44或指令區(qū)域30,該數(shù)據(jù)可從此處執(zhí)行。這是因為,在本發(fā)明的特定實施例中,數(shù)據(jù)或者指令可以以此處描述的方式被通訊,并且指令因此可以直接從數(shù)據(jù)總線16執(zhí)行,雖然這并非本發(fā)明的必要方面。進(jìn)一步,一個或多個比特50將用于指示,端口38的哪一個將被設(shè)置成讀取或?qū)懭?,如果有這樣的端口的話。較后的操作可選地通過使用一個或多個比特來指定一寄存器40,例如A寄存器40a、B寄存器等,來實現(xiàn)。在該示例中,指定的寄存器40將被預(yù)載以數(shù)據(jù),該數(shù)據(jù)具有與每個端口38對應(yīng)的比特(以及,任何其它潛在實體,通過該實體,計算機(jī)12可被嘗試通訊,所述實體例如存儲器、外部通訊端口之類)。例如,在特定寄存器40中的四個比特中的每一個可對應(yīng)上端口38a、右端口38b、左端口38c或下端口38d中的每一個。在這種情況下,如果在這些比特的位置中的任意一處為“1”,則通訊將被設(shè)置為通過對應(yīng)的端口38進(jìn)行。如之前在此所論述的,在本發(fā)明的當(dāng)前實施例中,可以預(yù)見的是,一個讀取操作碼可以在單個指令中設(shè)置不止一個端口38用于通訊,而同時,雖然可能發(fā)生但是無法預(yù)見的是,讀入操作碼在單個指令中設(shè)置不止一個端口38用于通訊。緊接下來的示例將假定如下通訊,其中計算機(jī)12e正試圖寫到計算機(jī)12c,雖然該示例可用于任何相鄰計算機(jī)12之間的通訊。當(dāng)寫指令在寫入計算機(jī)12e中被執(zhí)行時,所選擇的寫線路20(在本示例中為計算機(jī)12c和12c之間的寫線路20)被設(shè)置為高,如果對應(yīng)的讀線路18已經(jīng)為高,則數(shù)據(jù)立即從所選擇的位置通過所選擇的通訊端口38發(fā)送。作為替換地,如果對應(yīng)的讀線路18還未為高,則計算機(jī)12e將僅僅停止運(yùn)行,直到對應(yīng)的讀線路18確定變高。在此之前已經(jīng)討論了用于在存在讀或?qū)戭愋椭噶钪畷r,停止計算機(jī)12a(或者更準(zhǔn)確地說,不使計算機(jī)12a進(jìn)一步運(yùn)行)的機(jī)制。簡而言之,指令52的操作碼將在比特位置i466具有“0”,因此,OR門60的第一OR門輸入62為低,進(jìn)而,時段定序器42不被觸發(fā)以產(chǎn)生使能脈沖。至于在讀或?qū)戭愋椭噶钔瓿芍畷r如何繼續(xù)計算機(jī)12e的運(yùn)行,用于此的機(jī)制如下當(dāng)在計算機(jī)12e和12c之間的讀線路18和對應(yīng)的寫線路20均為高時,線路18和20就將被將其保持為高的相應(yīng)計算機(jī)12中的每一個釋放。(在該示例中,發(fā)送計算機(jī)12e將使寫線路18保持為高,而接收計算機(jī)12c將使讀線路20保持為高)。接下來,接收計算機(jī)12c將把線路18和20拉低。在實際運(yùn)行中,在發(fā)送計算機(jī)12e已經(jīng)釋放寫線路18之前,接收計算機(jī)12c可能試圖將線路18和20拉低。不過,因為線路18和20被拉高并且只是被不牢固地保持(鎖存)為低,因此任何將線路18或20拉低的企圖在實際中都將不會成功,直到線路18或20被將其固定為高的計算機(jī)12所釋放。當(dāng)數(shù)據(jù)總線16中的線路18和20均被拉低時,這是一種“確認(rèn)”狀態(tài)。一旦進(jìn)入該確認(rèn)狀態(tài),計算機(jī)12e和12c中的每一臺將其自身的內(nèi)部確認(rèn)線路72設(shè)置為高。如圖5的視圖可見,確認(rèn)線路72提供了第二OR門輸入64。因為到OR門60的輸入62或64中任意一個的輸入將導(dǎo)致OR門60的輸出變高,因此就將以在此之前所述的方式發(fā)起進(jìn)行時段定序器42的操作,從而將執(zhí)行指令字48的下一時段54中的指令52。確認(rèn)線路72保持在高位,直到下一指令52被解碼,以便防止偽地址到達(dá)地址總線。無論如何,當(dāng)正在執(zhí)行的指令52處于指令字48的時段三位置中時,計算機(jī)12將讀取下一正在等待的18比特指令字48,當(dāng)然,除非比特i466為“0”。在實際的操作中,該創(chuàng)造性的機(jī)制包括一種方法和裝置,其用于“預(yù)讀取”指令,從而在指令字48中的所有指令52執(zhí)行終止之前可以開始該讀取操作。不過,這也不是當(dāng)前針對異步數(shù)據(jù)通訊的創(chuàng)造性方法和裝置的必要方面。在此已經(jīng)詳細(xì)描述了上述示例,其中計算機(jī)12e正在向計算機(jī)12c進(jìn)行寫入。如同根據(jù)以上論述所可以理解的,不論計算機(jī)12e首先試圖對計算機(jī)12c進(jìn)行寫入,還是計算機(jī)12c首先試圖從計算機(jī)12e讀取,操作基本相同。直到計算機(jī)12e和12c均準(zhǔn)備就緒,才完成操作,并且無論計算機(jī)12e或12c中的哪一臺首先準(zhǔn)備就緒,首先準(zhǔn)備就緒的計算機(jī)12僅僅“進(jìn)入睡眠狀態(tài)”,直到另一臺計算機(jī)12e或12c完成傳送。觀察上述過程的另一種方式為,實際上,在這兩臺計算機(jī)分別執(zhí)行寫和讀指令時,寫入計算機(jī)12e和接收計算機(jī)12c均進(jìn)入睡眠狀態(tài),但是當(dāng)讀線路18和寫線路20均為高時,后一臺進(jìn)入事務(wù)的計算機(jī)幾乎即刻重新蘇醒,然而,首先發(fā)起事務(wù)的計算機(jī)12可以幾乎無限期地保持睡眠狀態(tài),直到第二臺計算機(jī)12準(zhǔn)備好完成上述過程。一種用于在器件之間進(jìn)行有效的異步通訊的方法是某種確認(rèn)信號或確認(rèn)狀態(tài)。在此所述的該方法提供了必要的確認(rèn)狀態(tài),其允許器件之間進(jìn)行異步通訊,或至少使之可行。進(jìn)一步,確認(rèn)狀態(tài)也使一個或多個器件可以“進(jìn)入睡眠狀態(tài)”,直到出現(xiàn)確認(rèn)狀態(tài)。當(dāng)然,可以通過正在計算機(jī)12之間發(fā)送的分立信號而在計算機(jī)12之間對確認(rèn)狀態(tài)進(jìn)行通訊(或者沿著互連數(shù)據(jù)總線16,或者沿著分立的信號線路),并且這種確認(rèn)信號將處于本發(fā)明的這方面的范圍之內(nèi)。不過,根據(jù)在此描述的本發(fā)明的實施例,可以理解的是,這里還存在更多經(jīng)濟(jì)因素,因為該確認(rèn)方法不需要任何額外的信號、時鐘周期、定時脈沖或任何這類超出所描述范圍的資源來在實際中實現(xiàn)通訊??梢詫Ρ景l(fā)明進(jìn)行多種修改,而不改變本發(fā)明的價值或范圍。例如,雖然本發(fā)明已經(jīng)在此描述為用于讀指令和寫指令的方面,不過在實際操作中,可能存在不止一個讀類型指令和/或不止一個寫類型指令。僅僅作為一個示例,在本發(fā)明的一個實施例中,存在使寄存器遞增的寫指令以及其它不執(zhí)行此功能的寫指令。類似地,根據(jù)哪一個寄存器40被用來選擇通訊端口38等等,寫指令可以變化,如在此之前所描述的。還可以存在多個不同的讀指令,所依據(jù)的只是,計算機(jī)12的設(shè)計者相信何種變化是可替換讀行為的有用選擇。類似地,雖然本發(fā)明在此已經(jīng)被描述為涉及單個基座14上的陣列10中的計算機(jī)12之間的通訊,不過相同的原理和方法可以用作,或者被改造為用作,完成其它器件間的通訊,例如計算機(jī)12和其專用存儲器之間的通訊,或者在陣列10中的計算機(jī)12和外部器件之間(通過輸入/輸出端口之類)的通訊。實際上,可以預(yù)見的是,在一些應(yīng)用中可能要求由陣列組成的陣列——將這里描述的器件間的通訊方法潛在地應(yīng)用于陣列中的陣列之間的通訊。當(dāng)諸如圖1中的計算機(jī)12g的計算機(jī)正在執(zhí)行代碼以完成其被指定的首要任務(wù)時,程序員可以決定,需要進(jìn)行諸如12f和12g的兩臺計算機(jī)之間的臨時互動。程序員可以規(guī)定,計算機(jī)12g臨時暫停運(yùn)行以觀察其一臺或多臺鄰近計算機(jī)是否已經(jīng)試圖進(jìn)行通訊,如“尋找輸入”操作166所指示的。如果如“輸入?”決策操作168所指示的,通訊正在等待例如由計算機(jī)12f向計算機(jī)12g寫入,則計算機(jī)12g將在“從其它計算機(jī)接收”操作170中完成通訊。若不如此,則計算機(jī)12g將返回執(zhí)行其被指定的功能,如圖9所示。在“從其它計算機(jī)接收”操作170之后,計算機(jī)12g將按照在“按輸入行動”操作172中所接收的輸入行動。程序員可以規(guī)定,計算機(jī)12g將期望指令作為輸入,在這種情況下,計算機(jī)12g將執(zhí)行指令。作為替換地,計算機(jī)12g可以被編程以為期望行動所依據(jù)的數(shù)據(jù)。在“按輸入行動”操作172之后,接著,計算機(jī)12g返回其首要功能;也就是說,它返回到“執(zhí)行首要功能”操作162。不過,當(dāng)然還存在設(shè)置更為復(fù)雜的示例的可能。例如,可以這樣編程,使從計算機(jī)12f接收的特定輸入將導(dǎo)致其中止其先前被指定的首要功能,并開始執(zhí)行新功能,或者它可以僅僅暫時停止,并等待進(jìn)一步的輸入。本領(lǐng)域的技術(shù)人員將認(rèn)知,此處行為的各種可能將僅受限于程序員的想象力。應(yīng)該注意的是,根據(jù)在此描述的本發(fā)明的實施例,給定的計算機(jī)12不需要在其正在執(zhí)行任務(wù)時中斷,因為另一臺計算機(jī)12被指定執(zhí)行監(jiān)控和處理可能另外需要中斷的輸入的任務(wù)。不過,還令人感興趣地注意到,忙于處理另一任務(wù)的計算機(jī)12也不能被干擾,除非并且直到該計算機(jī)12的編程規(guī)定其注意用于輸入的端口38。因此,有時候需要使計算機(jī)12暫定以查找其它輸入。本發(fā)明示意性地對PAUSE指令進(jìn)行描述。此處所描述的內(nèi)容為多個處理器之間的“協(xié)作多任務(wù)”。在一個或多個節(jié)點上存在一套任務(wù)。PAUSE將順序檢驗用于進(jìn)來的可執(zhí)行代碼的所有節(jié)點或端口。在蘇醒或熱啟動之前執(zhí)行四個no-op(....)。PAUSE指令通過一返回(;)指令而終止,然后,查詢下一線程(thread)。檢驗過的最后一端口使用兩套四個no-op。在重啟后進(jìn)行冷啟動。帶有輸入/輸出引腳39的邊緣處理器12a或邊角處理器12f也可以被PAUSE所查詢,從而例如由外部器件82執(zhí)行任務(wù)。PAUSE也可以位于ROM中作為啟動條件的一部分。引發(fā)器例程將跳轉(zhuǎn)為暫停,并進(jìn)入鄰近處理器的四點讀取(four-pointread)。雖然在多處理器之間的PAUSE功能已經(jīng)參照Forth而公開,不過多處理器之間的中斷功能的所有概念也可以應(yīng)用于其它編程語言。因為四個指令52可以包含于指令字48中,并且由于根據(jù)本發(fā)明,整個指令字48可以同時在計算機(jī)12之間進(jìn)行通訊,這提供了理想的機(jī)會用于在一個操作中傳送非常小的程序。例如大多數(shù)小的“For/Next”循環(huán)可以在單個指令字48中實現(xiàn)。圖6是微循環(huán)100的示意性表現(xiàn)。不同于其它現(xiàn)有技術(shù)的循環(huán),微循環(huán)100具有FOR指令102和NEXT指令104。因為指令字48(圖4)包含多達(dá)四個的指令52,因此指令字48可在單個指令字48中包括三個操作指令106。操作指令106可以是程序員想要包含于微循環(huán)100中的可用指令中的幾乎任意一個??梢詮囊慌_計算機(jī)12傳送到另一臺計算機(jī)12的微循環(huán)100的典型示例可以是對第二臺計算機(jī)12的RAM24進(jìn)行讀取或?qū)懭氲囊惶字噶?,從而使第一臺計算機(jī)12可以“借用”可用的RAM24容量。FOR指令102將數(shù)值壓到返回堆棧28上,返回堆棧28代表所希望的迭代數(shù)目。也就是說,在數(shù)據(jù)堆棧34的頂部處的T寄存器44上的數(shù)值被壓進(jìn)返回堆棧28的R寄存器29。FOR指令102雖然經(jīng)常位于指令字48的時段三54d中,不過事實上可以位于任何時段54中。在FOR指令102不位于時段三54d中的情況下,在該指令字48中的其余指令52將在繼續(xù)到微循環(huán)100之前被執(zhí)行,所述微循環(huán)100將通常為下一個被加載指令字48。根據(jù)本發(fā)明的當(dāng)前描述的實施例,在圖6中描述的NEXT指令104為特定類型的NEXT指令104。這是因為,它位于時段三54d(圖4)中。根據(jù)本發(fā)明的該實施例,假定在“普通”NEXT指令(未示出)之后的特定指令字40中的所有數(shù)據(jù)為一地址(for/next循環(huán)開始的地址)。針對NEXT指令104的操作碼是相同的,不論其處于四個時段54中的哪一個中(明顯的例外在于,如果處于時段三54d中,則假設(shè)頭兩比特,而不是顯式地(explicitly)寫入,如在此之前所討論的)。不過,因為當(dāng)NEXT指令104位于時段三54d中時可能不存在跟隨NEXT指令104的地址數(shù)據(jù),因此也可以假定,在時段三54d中的NEXT指令104為MICRO-NEXT指令104a。MICRO-NEXT指令104a使用第一指令52的地址作為返回地址,該第一指令52位于同一指令字48的時段零54a中。MICRO-NEXT指令104a也獲取來自R寄存器29的數(shù)值(該數(shù)值最初被FOR指令102壓至該處),將其減去1,然后將其返回到R寄存器29。當(dāng)R寄存器29上的數(shù)值達(dá)到預(yù)定值(例如,0)時,MICRO-NEXT指令就將加載下一指令字48,并如在此之前所述繼續(xù)運(yùn)行。不過,當(dāng)MICRO-NEXT指令104a從R寄存器20讀取的數(shù)值大于預(yù)定值時,將再繼續(xù)在其本身的指令字48的時段零54a處的操作,并執(zhí)行位于包括再其本身的指令字48的時段零至?xí)r段三中的三個指令52。也就是說,在本發(fā)明的實施例中,MICRO-NEXT指令104a將總是執(zhí)行三個操作指令106。因為,在某些情況下,可能需要是使用所有三個潛在可用的指令52,因此“no-op”指令可用于根據(jù)需要填充一個或兩個時段54。應(yīng)該注意的是,微循環(huán)100可整體用在單個計算機(jī)12中。事實上,全套的可用機(jī)器語言指令都可用作操作指令106,并且微循環(huán)的應(yīng)用和使用僅受限于程序員的想象力。不過,如果在單個指令字48中執(zhí)行整個微循環(huán)100的能力與如下能力,即允許計算機(jī)12將指令字48發(fā)送到鄰近計算機(jī)12以執(zhí)行其中基本上直接來自數(shù)據(jù)總線16的指令52的能力,相結(jié)合,那么這就提供了一種強(qiáng)有力的工具,用于允許計算機(jī)12使用其鄰近計算機(jī)的資源。整體包含于單個數(shù)據(jù)字48中的小微循環(huán)100,可以在計算機(jī)12之間通訊,如在此所述的,并且可以直接從接收計算機(jī)12的通訊端口38執(zhí)行,就像包含于指令字48中的其它任意一套指令那樣,如在此所描述的。雖然這種“微循環(huán)”100有許多用處,不過其一個特定的用處在于當(dāng)一臺計算機(jī)12打算將一些數(shù)據(jù)存儲到鄰近計算機(jī)12的存儲器上時。例如,首先發(fā)送一條指令到該鄰近計算機(jī),以要求該鄰近計算機(jī)將進(jìn)入的數(shù)據(jù)字存儲到特定的存儲器地址,然后遞增該地址,然后重復(fù)給定次數(shù)的迭代(該次數(shù)對應(yīng)待傳送的數(shù)據(jù)字的數(shù)目)。為了讀回數(shù)據(jù),第一臺計算機(jī)就將指令第二臺計算機(jī)(在此即用來進(jìn)行存儲的計算機(jī))使用相似的微循環(huán)將所存儲的數(shù)據(jù)寫回到第一臺計算機(jī)。通過結(jié)合在此描述的直接執(zhí)行方面而使用微循環(huán)100結(jié)構(gòu),當(dāng)數(shù)據(jù)存儲需要超過構(gòu)建于每臺單獨(dú)的計算機(jī)12中的相對小的容量時,計算機(jī)12可以使用另外的休眠的鄰近計算機(jī)12以存儲額外的數(shù)據(jù)。雖然該示例被描述為針對數(shù)據(jù)存儲的情況,不過相同的技術(shù)可以同樣用來允許計算機(jī)12讓其鄰近的計算機(jī)共享其計算資源-采用的方法是,通過構(gòu)建微循環(huán)100使其它計算機(jī)12執(zhí)行一些操作、存儲結(jié)果并重復(fù)給定次數(shù)。可認(rèn)知的是,能夠使用這種創(chuàng)造性的微循環(huán)100結(jié)構(gòu)的方式的數(shù)量幾乎是無限多的。如在此之前所提到的,在本發(fā)明的目前所描述的實施例中,可以以在此描述的方式對數(shù)據(jù)或指令進(jìn)行通訊,并且指令因此而能夠幾乎直接從數(shù)據(jù)總線16執(zhí)行。也就是說,沒有必要將指令存儲到RAM24并然后在執(zhí)行前對它們再調(diào)用(recall)。取而代之的是,根據(jù)本發(fā)明的這方面,對在通訊端口38上接收的指令字48的處理方式,與從RAM24或ROM26再調(diào)用該指令字48的方式,兩者不會有顯著的不同。雖然這種不同的缺少已經(jīng)在目前涉及所描述的計算機(jī)12的操作的探討中得到展示,不過,下文中對如何讀取和使用指令字48的更為明確的探討,將有助于理解本發(fā)明。其中一種可用的機(jī)器語言指令為FETCH指令。FETCH指令使用A寄存器40a上的地址,以確定從何處讀取18比特字。當(dāng)然,程序?qū)⒈仨氁呀?jīng)準(zhǔn)備在A寄存器40a上放置正確的地址。如在此之前所討論的,A寄存器40a為18比特寄存器,這樣,就有就有足夠范圍的地址數(shù)據(jù)可用,從而使得任何一個可以對其進(jìn)行讀取的潛在資源都可以被區(qū)分。也就是說,存在指定到ROM的地址范圍,該地址范圍不同于指定到RAM的地址范圍,并且存在特定的地址用于每個端口38,和用于外部I/O端口39。FETCH指令總是將其讀取的18個比特放置于T寄存器44上。相反地,如在此之前所討論的,可執(zhí)行指令(不同于數(shù)據(jù))被暫時存儲在指令寄存器30a中。對于將18比特指令字48“讀取”到指令寄存器30a中,不存在特定的要求。相反地,當(dāng)在指令寄存器30a中沒有可執(zhí)行指令留下時,計算機(jī)就將自動讀取“下一”指令字48。該“下一”指令字所處的位置由“程序計數(shù)器”(P寄存器40c)確定。P寄存器40c經(jīng)常自動遞增,如同將從RAM24或ROM26讀取一系列指令字48的情況。不過,這種一般規(guī)則存在許多例外情況。例如,JUMP或CALL指令將導(dǎo)致P寄存器40c在JUMP或CALL指令之后被記載以由目前加載的指令字48的剩余部分中的數(shù)據(jù)所指定的地址,而不是進(jìn)行遞增。當(dāng)P寄存器40c接著被加載以與一個或多個端口38對應(yīng)的地址時,下一指令字48接著將從端口38加載到指令寄存器30a。當(dāng)指令字48已經(jīng)從端口38獲取到指令寄存器30a中時,P寄存器40c也不會遞增。它將繼續(xù)保持該相同的端口地址,直到明確的JUMP或CALL指令被執(zhí)行以改變P寄存器40c。也就是說,一旦計算機(jī)12被告知從端口38尋找其下一指令,它將持續(xù)從同一個端口38(或多個端口38)尋找指令,直到它被告知在其它位置尋找其下一指令字48,例如回到其存儲器(RAM24或ROM26)。如上文所提,計算機(jī)12知道,當(dāng)目前的指令字48中不再存在可執(zhí)行指令時,所讀取的下十八個比特將被放置在指令寄存器30a中。默認(rèn)地,在JUMP或CALL指令之后(或者在此處不特別討論的其他特定指令之后),在目前的指令字48中不再留有可執(zhí)行指令,因為通過限定,18比特指令字中緊接著JUMP或CALL指令的剩余部分專用于JUMP或CALL指令所指定的地址。對于此的另一種陳述方式是,上文所述的處理在多方面是獨(dú)特的,包括但不限于如下事實,即,JUMP或CALL指令可以可選地輸入到端口38,而不是僅僅是輸入到存儲器地址之類。應(yīng)該記住的是,如在此之前所討論的,計算機(jī)12可以從一個端口38或者從任意一組端口38尋找其下一指令。因此,提供對應(yīng)端口38的各種不同組合的地址。例如當(dāng)計算機(jī)被告知從一組端口38讀取指令時,那么它將從所選定的端口38中的任意一個接受第一可用指令字48。如果沒有鄰近計算機(jī)12已經(jīng)試圖寫入這些端口38中的任意一個,那么正在討論的計算機(jī)12將“進(jìn)入睡眠狀態(tài)”,如上文所詳細(xì)描述的,直到鄰近的計算機(jī)確實寫入所選擇的端口38。圖7是描述上文所述的直接執(zhí)行方法120的流程圖。當(dāng)如在此之前所述的,在指令寄存器30a中不再留有可執(zhí)行指令時,將開始“正常”的操作流程。在此時刻,計算機(jī)12將“讀取”另一個指令字(注意,在此使用的術(shù)語“讀取”為一般含義,因為并不使用實際的FETCH指令),如“讀取字”操作122所指示的。該操作將根據(jù)P寄存器40c中的地址而實現(xiàn),如圖7的流程圖中的“地址”決策操作124所指示的。如果P寄存器40c中的地址為RAM24或ROM26地址,那么下一指令字48將從在“從存儲器讀取”操作126中所指定的存儲器位置獲得。另一方面,如果在P寄存器40c中的地址為一個或多個端口38的地址(非存儲器地址),那么下一指令字48將從在“從端口讀取”操作128中所指定的端口位置獲得。無論何種情況,在“獲取指令字”操作130中,所獲取的指令字48被置于指令寄存器30c中。在“執(zhí)行指令字”操作132中,在指令字48的時段54中的指令被順序完成,如在此之前所討論的。在“跳轉(zhuǎn)”決策操作134中,確定了指令字48中的一個操作是否為JUMP指令,或者是否為其他將使操作遠(yuǎn)離此前所描述的持續(xù)的“正?!辈僮鞯闹噶?。如果確實是這樣,那么在“加載P寄存器”操作136中,指令字48中在JUMP(或其它這類)指令之后所提供的地址被提供到P寄存器40c,并且在“讀取字”操作122中再次開始上述序列,如圖7的視圖所指示。如果不是這樣,那么下一行為取決于上一次指令讀取是源自端口38還是源自存儲器地址,如“端口地址”決策操作138所指示的。如果上一次指令讀取源自端口38,那么P寄存器30a沒有任何改變,并且從“讀取字”操作122開始重復(fù)次序。另一方面,如果上一指令讀取源自存儲器地址(RAM24或ROM26),那么在“讀取字”操作122完成之前,在P寄存器30a中的地址遞增,如圖7中的“遞增P寄存器”操作140所指示的。上文描述并非意在表示實際的操作步驟。相反地,它是根據(jù)本發(fā)明的所描述實施例的執(zhí)行而產(chǎn)生的各種決策和操作的圖示。實際上,該流程圖不應(yīng)該被理解成,所描述和所示出的每個操作需要分立的獨(dú)立的順序步驟。事實上,在圖7的流程圖中所描述的許多操作,在實際操作中通常同時完成。圖8是描述用于警醒計算機(jī)的經(jīng)過改進(jìn)的創(chuàng)造性方法的示例的流程圖。如在此之前所討論的,所描述的實施例的計算機(jī)12將在等待輸入之時“進(jìn)入睡眠狀態(tài)”。這種輸入可以來自鄰近的計算機(jī)12,如針對圖1-5所描述的實施例中的情況。作為替換地,還是如在此之前所討論的,具有毗鄰基座14邊緣的通訊端口38的計算機(jī)12可具有額外的電路,該電路或者被設(shè)計在該計算機(jī)12中,或者被設(shè)計處于計算機(jī)12的外部但是與計算機(jī)12相關(guān)聯(lián),從而使這種通訊端口38用作外部I/O端口39。無論何種情況,這種創(chuàng)造性的組合可提供額外的優(yōu)勢,即“睡眠”計算機(jī)12可穩(wěn)定并準(zhǔn)備蘇醒,并在接收到輸入之時跳到一些預(yù)先指定的行為。因此,本發(fā)明也為使用中斷來處理輸入的方案提供了替換方案,無論這種輸入來自外部輸入器件,還是來自陣列10中的另一臺計算機(jī)12。在此描述的創(chuàng)造性的組合并不會使計算機(jī)12必須停止(或暫停)其正在運(yùn)行的任務(wù)以便處理中斷,而將允許計算機(jī)12處于“睡眠但是警覺”狀態(tài),如上文所述。因此,可以指定一臺或多臺計算機(jī)12,以接收和執(zhí)行特定輸入。雖然存在多種方法來使用這種特征,不過圖8的視圖中描述的示例將用于僅僅描述一種這類“計算機(jī)警覺方法”,該示例在此被附圖標(biāo)記150列出。如圖8的試圖所見,在“進(jìn)入警覺狀態(tài)”操作152中,計算機(jī)12被引發(fā)“進(jìn)入睡眠狀態(tài)”,從而使其等待來自鄰近計算機(jī)12的輸入,或者等待來自不止一臺(總計多達(dá)四臺)鄰近計算機(jī)的輸入,或者在“邊緣”計算機(jī)12的情況下等待外部輸入,或者等待外部輸入和/或來自鄰近計算機(jī)12的輸入的一些組合。如在此之前所描述的,計算機(jī)12可以“進(jìn)入睡眠狀態(tài)”,以等待讀取操作或?qū)懭氩僮鞯耐瓿伞H缭撌纠龅?,在正在使用計算機(jī)12以等待一些可能的“輸入”的情況下,顯而易見可以假定,正在等待的計算機(jī)12已經(jīng)將其讀線路18設(shè)置為高,以等待來自鄰近計算機(jī)或外部源的“寫入”。事實上,目前可以預(yù)見,這將是通常狀態(tài)。不過,如下情況處于本發(fā)明的范圍中,即,正在等待的計算機(jī)12將已經(jīng)將其寫線路20設(shè)置為高,并因此在鄰近計算機(jī)或外部源對其進(jìn)行讀取之時正在等待的計算機(jī)12將蘇醒。在“蘇醒”操作154中,睡眠計算機(jī)12恢復(fù)運(yùn)行,因為鄰近計算機(jī)12或外部器件39已經(jīng)完成被等待的事務(wù)。如果被等待的事務(wù)為接收待執(zhí)行的指令字48,那么計算機(jī)12將進(jìn)而在其中執(zhí)行該指令。如果被等待的事務(wù)為數(shù)據(jù)的接收,那么計算機(jī)12將進(jìn)而執(zhí)行隊列中的下一指令,所述指令或者是在該指令字48中的下一時段54中的指令,或者下一指令字48將被加載,并且下一指令將位于該下一指令字48的時段0中。無論何種情況,在以所描述的方式使用時,下一指令將開始一系列的一個或多個指令,以便處理剛剛接收到的輸入。用于處理這種輸入的選擇包括,進(jìn)行反應(yīng)從而在內(nèi)部執(zhí)行一些預(yù)定的功能,與陣列10中的一臺或多臺其它計算機(jī)12進(jìn)行通訊,或者甚至忽略該輸入(就如同在傳統(tǒng)的現(xiàn)有技術(shù)中,在預(yù)定的條件狀態(tài)下中斷可被忽略一樣)。所述選擇可在圖8的視圖中被描述為“按輸入行動”操作156。應(yīng)該注意的是,在某些情況下,輸入的內(nèi)容可能并不重要。在某些情況下,例如,確實可能僅僅存在如下事實,即,外部器件已經(jīng)試圖進(jìn)行其所感興趣的通訊。如果計算機(jī)12被指定以充當(dāng)“警醒”計算機(jī)的任務(wù),以如圖8所示的方式,那么它一般將返回到“睡眠但是警覺”狀態(tài),如圖8所示。不過,所述選擇總是開放,以指定計算機(jī)12進(jìn)行一些其它任務(wù),例如在它不再需要監(jiān)控正在被監(jiān)控的一個或多個特定輸入時,或者在它更便于將該任務(wù)傳送到陣列中的其它一些計算機(jī)12時。本領(lǐng)域的技術(shù)人員將認(rèn)知,上述這類操作模式將可用作針對傳統(tǒng)中斷使用的更有效的替代方案。當(dāng)計算機(jī)12的一條或多條讀線路18(或?qū)懢€路20)被設(shè)置為高時,可以說,它處于“警覺”狀態(tài)。在警覺狀態(tài)中,計算機(jī)12準(zhǔn)備立即執(zhí)行通過數(shù)據(jù)總線16向其發(fā)送的任何指令,其中數(shù)據(jù)總線16對應(yīng)設(shè)置為高的一條或多條讀線路18,或者作為替代地,計算機(jī)12準(zhǔn)備按照沿著數(shù)據(jù)總線16傳送的數(shù)據(jù)行動。在一陣列的計算機(jī)12可用的情況下,可在任意給定時間使用一臺或多臺計算機(jī),以處于上文所述的警覺狀態(tài),從而使預(yù)先設(shè)置一套輸入中的任意一個將觸發(fā)所述計算機(jī)而使其運(yùn)行。如下情況是優(yōu)選的,即,使用傳統(tǒng)的中斷技術(shù)而使計算機(jī)“集中注意力”,因為中斷將導(dǎo)致計算機(jī)必須存儲特定數(shù)據(jù),加載特定數(shù)據(jù)等等,以響應(yīng)中斷請求。相反地,根據(jù)本發(fā)明,計算機(jī)可處于警覺狀態(tài),并被指定以等待感興趣的輸入的任務(wù),從而在開始執(zhí)行由輸入提供的指令時就不會浪費(fèi)任何指令周期。再次,應(yīng)該注意,在目前所描述的實施例中,處于警覺狀態(tài)的計算機(jī)實際上將處于“睡眠但是警覺”狀態(tài),這意味著,它們在幾乎不使用任何能量的意義上處于“睡眠狀態(tài)”,但是由于它們被輸入所即時觸發(fā)而運(yùn)行時,因此是“警覺”狀態(tài)。不過,以下情況處于本發(fā)明的這方面的范圍之內(nèi),即,“警覺”狀態(tài)即使在計算機(jī)并不處于“睡眠”狀態(tài)時也可以實現(xiàn)。所述警覺狀態(tài)可用于幾乎任何情況中,在這些情況中也可以使用傳統(tǒng)的現(xiàn)有技術(shù)中斷(或者硬件中斷,或者軟件中斷)。雖然本發(fā)明不受該示例的限制,不過此處的計算機(jī)12被實現(xiàn)為執(zhí)行自然(native)Forth語言指令。熟悉Forth計算機(jī)語言的技術(shù)人員將認(rèn)知的是,被認(rèn)為是Forth“字”的復(fù)雜Forth指令由設(shè)計到計算機(jī)中的自然處理器指令所構(gòu)建的。Forth字的集合被認(rèn)為是一本“字典”。在其它語言中,這可能被認(rèn)為是一間“圖書館”。如下文將更為詳細(xì)論述的,計算機(jī)12在某時刻從RAM24、ROM26或直接從數(shù)據(jù)總線16(圖2)之一讀取18個比特。不過,因為在Forth中,大多數(shù)指令(被認(rèn)為是無操作數(shù)(operand-less)的指令)直接從堆棧28和34獲取它們的操作數(shù),因此它們通常只有五比特的長度,從而使得多達(dá)四個的指令可以被包含于單個十八比特指令字中,所需要的條件是,該組中的最后一個指令從受限的一套僅僅需要三個比特的指令中選出。在圖3的視圖中以方框示意圖的形式還描述了時段定序器42。在本發(fā)明的該實施例中,在數(shù)據(jù)堆棧34中的頭兩個寄存器為T寄存器44和S寄存器46。上述方法包括forthlet的使用。Forthlet是將applet和Forth組合所新造的術(shù)語——盡管這并不是確切的描述。Forth是在20世紀(jì)70年代早期發(fā)展起來的一種計算機(jī)編程語言。forthlet是代碼周圍的包裝,并且由此所述代碼可以被當(dāng)作數(shù)據(jù)處理。可替換的定義是,forthlet是一種由被包裝所圍繞的機(jī)器可執(zhí)行代碼所組成的字符串。所述包裝可由頭和尾組成,或僅僅由頭組成。Forthlet是支持對可擴(kuò)縮嵌入式陣列類型的并行處理器進(jìn)行并行編程的部分和工具。Forthlet具有文件的某些屬性。這些屬性包括名稱、類型、地址、長度和各種進(jìn)一步可選類型的域,這在下文中會介紹。Forthlet是用于用于由工具或編譯器從源代碼或模板所構(gòu)建的事務(wù)的包裝。Forthlet是用于代碼和數(shù)據(jù)的包裝,并還可以包裝其它forthlet。Forthlet是這樣一種機(jī)制,該機(jī)制用于發(fā)布程序和數(shù)據(jù),并幫助構(gòu)建和調(diào)試程序。這些硬件功能提供了簡單而快速的遠(yuǎn)程程序調(diào)用和互斥(mutex)?;コ馐且环N程序?qū)ο蟮耐ㄓ妹?,該程序?qū)ο笤诰€程之間協(xié)商相互的排除,出于該原因,互斥經(jīng)常被稱為一種鎖??蓴U(kuò)縮嵌入式陣列處理器的一種使它們適合于簡單的并行程序的屬性是,它們被硬件信道連接,這些硬件信道通過將處理器設(shè)置于超低能量睡眠狀態(tài)而同步處理器和處理過程,直到完成未決的消息交換。本發(fā)明在上述環(huán)境中所使用的軟件的一個屬性在于,該軟件以典型的方式使用傳統(tǒng)的Forth類型協(xié)作多任務(wù)器,從而使每個處理器在執(zhí)行其本地存儲器空間中的程序和執(zhí)行流向其執(zhí)行信道的程序之間多任務(wù)化。結(jié)合硬件中的多端口地址選擇邏輯,這就提供了一種并行的硬件和軟件的組合,并使從多任務(wù)編程到實際并行多處理編程的轉(zhuǎn)換變得容易。第二個屬性在于,這些經(jīng)過同步的通訊信道處于處理器的地址空間中的相同地方,并且可以使用指針而用于進(jìn)行數(shù)據(jù)讀取和寫入,或者可通過被分支而執(zhí)行,或者被處理器程序計數(shù)器所調(diào)用和讀取。第三個屬性在于,多個通訊信道可被選擇來由處理器進(jìn)行讀取或?qū)懭?,因為在這些通訊端口的地址范圍中的地址中的單獨(dú)的比特選擇單獨(dú)的信道。引導(dǎo)forthlet是一種用于整個應(yīng)用程序的包裝。這不同于以傳統(tǒng)x86處理器為代表的傳統(tǒng)計算機(jī)操作。在傳統(tǒng)微處理器中,首先用稱為源代碼的高級計算機(jī)語言寫成,例如C++或C#。源代碼然后被轉(zhuǎn)換成機(jī)器語言,也稱為目標(biāo)語言。這種轉(zhuǎn)換過程被稱為編譯,并且完成這種過程的程序或機(jī)器被稱為編譯器。然后,目標(biāo)代碼被處理器執(zhí)行。相反地,forthlet可被直接執(zhí)行。不過,本發(fā)明并不限于可直接執(zhí)行的forthlet,因為通過將高級命令編譯成執(zhí)行所有forthlet處理的機(jī)器代碼,可實現(xiàn)同樣的過程和功能。引導(dǎo)forthlet是最基本類型的forthlet,它可不帶分支地執(zhí)行。次復(fù)雜的forthlet類型為流可執(zhí)行forthlet,其包括調(diào)用,該調(diào)用將地址放置于返回堆棧28上。當(dāng)進(jìn)行調(diào)用時,PC中的地址被壓到返回堆棧。在存儲器中,PC將已經(jīng)被預(yù)遞增,因此,在調(diào)用后,它總是指向在存儲器中的下一順序指令。因此,當(dāng)返回指令返回到堆棧上的地址時,所返回到的是跟隨調(diào)用的操作碼。以下是以機(jī)器Forth寫成的低級forthlet的示例。該forthlet是簡單的單個字端口可執(zhí)行Forthlet。示例1targetForthletport-forthlet!p+!p+@p+@p+Fend第一行標(biāo)明了環(huán)境,第二行聲明程序名稱為port-forthlet。第三行將頭兩個堆棧項目發(fā)送到其運(yùn)行的端口,然后將這兩個堆棧項目從該端口讀回。然后,forthlet返回進(jìn)入睡眠狀態(tài),在該端口上等待某人將下一Forthlet寫入該端口。最后一條線路包裹Forthlet,并將其放置到服務(wù)器上,這樣,名稱forthlet返回該包的地址。當(dāng)從端口進(jìn)行調(diào)用時,PC中的地址將為該端口。端口地址并不自動遞增,相反地,它們等待其它一些處理器來重寫該端口,地址并不遞增,它們再次讀取相同的端口地址并睡眠,直到端口被寫入。因此,如果運(yùn)行在端口中的代碼調(diào)用不同的端口,或者調(diào)用RAM或ROM,那么進(jìn)行調(diào)用的端口的返回地址將被放置在進(jìn)行調(diào)用時的返回堆棧上。當(dāng)返回指令產(chǎn)生時,它將返回到調(diào)用端口,因為該地址就是將回到PC的地址。第三類型的Forthlet是存儲器可執(zhí)行forthlet。存儲器可執(zhí)行forthlet或者使用引導(dǎo)forthlet或流可執(zhí)行forthlet作為包裝。存儲器可執(zhí)行forthlet可以例如占用存儲器節(jié)點0地址0(rev7節(jié)點0,rev9$200)。存儲器可執(zhí)行Forthlet在存儲器中的給定地址處運(yùn)行。它可以在任何節(jié)點上的地址0或1或$D或$34處運(yùn)行。它可以在節(jié)點0或節(jié)點1或節(jié)點2上運(yùn)行。第四類型的Forthlet為節(jié)點可執(zhí)行forthlet。節(jié)點可執(zhí)行forthlet也使用引導(dǎo)forthlet或者流可執(zhí)行forthlet作為包裝。節(jié)點可執(zhí)行forthlet將從任意節(jié)點運(yùn)行。節(jié)點可執(zhí)行forthlet查詢存儲器的位置。第五類型的Forthlet為變量(variable)可執(zhí)行地址forthlet,其也使用引導(dǎo)forthlet或流可執(zhí)行forthlet作為包裝。變量可執(zhí)行地址forthlet從變量節(jié)點運(yùn)行。示例2描述了包括直接端口流操作碼執(zhí)行的forthlet。示例2Target$14org:dosample\getbitisaroutineinram\ifithasn'tbeendefinedpreviously\givethewordgetbitmeaningforthletcall-from-stream[$12345]#dosamplefend該示例編譯的forthlet稱為“call-from-stream”,它開始于文字加載,所述文字加載被執(zhí)行時將文字$12345加載到T中,然后調(diào)用被稱為“dosample”的子例程。文字加載指令、采樣和向RAM中的子例程的調(diào)用,被包裝在該forthlet中,并且如果寫入到節(jié)點中則將導(dǎo)致節(jié)點執(zhí)行加載,并將進(jìn)行對RAM中例程的調(diào)用。當(dāng)該例程返回時,它將返回到調(diào)用其的端口以繼續(xù)更多代碼。直接端口流操作碼執(zhí)行提供了對5比特指令的訪問,所述5比特指令代表了Forth語言中大多數(shù)基本操作,并被編譯器內(nèi)聯(lián)到程序中。這些forthlet被流化到處理器通訊信道,并被逐字執(zhí)行。這些forthlet沒有分支,并且本質(zhì)上不是特定的地址或節(jié)點。這些forthlet形成將其它forthlet作為數(shù)據(jù)緊附(glue)到消息中的語句。程序計數(shù)器保持在選擇端口的地址處,并且在執(zhí)行包含多達(dá)四個c18操作碼的字之后也不增值。在完成流化代碼字的執(zhí)行后,處理器將進(jìn)入睡眠狀態(tài),直到下一流化指令字到達(dá)。極其常見的是,這種類型的forthlet將采用返回指令終止,該返回指令將返回到執(zhí)行調(diào)用該端口的例程,可能為PAUSE多任務(wù)器。示例3targetforthletram-based-spi-driver5node!\specifythisisfornode5only0org\thisresidesataddress0onnode5:spi-codeordinary-codefend該示例詳細(xì)說明了一種稱為“ram-based-spi-driver”的forthlet,該forthlet將具有如下代碼,其將要求引腳對于節(jié)點5是唯一的,并且必須在使用中駐留在該處。它也被綁定到由其內(nèi)部限定的字所指定的特定地址。該字“spi-code”將調(diào)用編譯成地址0。當(dāng)運(yùn)行該forthlet時,該代碼將在節(jié)點5上的地址0處被加載并執(zhí)行。流化的forthlet可以包括對ROM或RAM中的例程的調(diào)用。通過編譯器,待調(diào)用例程的地址產(chǎn)生于待調(diào)用例程的名稱。在RAM中的例程必須在它們被調(diào)用之前加載。如果RAM或ROM中的例程從端口被調(diào)用,那么非常可能,傳送指令流的處理器將提供下一流化字以便在端口中執(zhí)行,并進(jìn)入睡眠狀態(tài),與此同時,處理器正在執(zhí)行被調(diào)用的RAM或ROM中的例程。消息的路由包括發(fā)送端口可執(zhí)行流,該端口可執(zhí)行流喚醒處理器并使其調(diào)用在ROM中的路由字。這些字接著讀取更多指令流,然后將所述流路由到朝向其目的地的下一個處理器上。圖4描述了ram執(zhí)行forthlet的開始。示例4targetforthlet0runs-on-ram-serverordinary-codeother-forthlet-executionetc.fend這種forthlet被設(shè)計為在地址0處的節(jié)點0上執(zhí)行,并可以通過將“runs-on-ram-server”forthlet的地址傳遞到“X0”命令調(diào)用而被加載和執(zhí)行于節(jié)點0上。為了從RAM服務(wù)器上加載并使用外部RAM而被封裝的應(yīng)用程序,由該命令封裝為Forthlet0類型的forthlet。當(dāng)應(yīng)用程序不同于在RAM服務(wù)器上使用的格式時,應(yīng)用程序也可以采用其它格式設(shè)置,例如那些需要從SPI或異步串行接口加載的格式。這種類型的forthlet為位于RAM底部的程序。在被加載到ram的底部直至某一地址后,它被執(zhí)行。因為ram執(zhí)行forthlet在RAM中運(yùn)行,因此它們可以具有分支指令,并且可以跳轉(zhuǎn)到、調(diào)用或返回到RAM、ROM或通訊端口中的地址。這些forthlet類似于DOS中的.com可執(zhí)行文件。它們開始于存儲器的起始處,并具有一定長度。它們被加載和執(zhí)行。它們可以在已經(jīng)被加載之后再次被調(diào)用。示例5描述了一種被加載的forthlet,其被加載或者被加載且運(yùn)行于其它RAM地址、代碼或數(shù)據(jù)覆蓋(overlay)。示例5target0node!forthletram-based-anynode0org:do-somethingordinary-codefend該示例詳細(xì)說明如下代碼,該代碼將要運(yùn)行于地址0處,但是在forthlet包裝內(nèi)部不綁定到任何特定節(jié)點。它可以運(yùn)行在任意節(jié)點上的地址0處。這些被加載的forthlet用于代碼和數(shù)據(jù)覆蓋。代碼或數(shù)據(jù)可以被加載在節(jié)點上的任意地址處。相同的代碼可以被加載到多個節(jié)點上的一定范圍的地址,并且如果該地址為RAM的起始,則它們可以為類似于圖8的ram執(zhí)行forthlet。當(dāng)代碼或數(shù)據(jù)被加載到不同于RAM起始的地址處時,則它有時候可以用于在存儲器的起始處的代碼或數(shù)據(jù)。在程序中的多個經(jīng)常使用的子例程可以被加載到高存儲器中,并被低存儲器中不同的覆蓋代碼例程所調(diào)用。代碼也可以容易地被加載到低存儲器中并存留在該處,從而被加載到高存儲器中的代碼覆蓋所重復(fù)地調(diào)用。此處的一個示例可以是如下用法,在該用法中,相同的代碼可以被放置于多個節(jié)點上的相同地址處,但是組中的每個節(jié)點將獲得針對由該節(jié)點操作的代碼所設(shè)置的地址處的單一數(shù)據(jù)的覆蓋。示例6描述了綁定到特定節(jié)點的forthlet。示例6targetforthlet0runs-on-ram-serverordinary-codeother-forthlet-executionetc.fend該forthlet被設(shè)計為在地址0處的節(jié)點0上執(zhí)行,并可以通過將“runs-on-ram-server”forthlet的地址傳遞到“X0”命令調(diào)用而被加載和執(zhí)行于節(jié)點0上。為了從RAM服務(wù)器上加載并使用外部RAM而封裝的應(yīng)用程序,由所述命令封裝為Forthlet0類型forthlet。示例7描述了IO電路特定forthlet。示例7target0node!forthlet2pram-based-sync-serial-driver0org:sync-codeordinary-codefend該示例構(gòu)建的forthlet將被限制于如下需要,即該forthlet所運(yùn)行的節(jié)點具有至少兩個引腳。這是典型的IO節(jié)點。帶有零個或一個引腳的節(jié)點不能運(yùn)行這種forthlet,因為該forthlet將需要讀取和寫入IOCS寄存器的在比特17讀取的引腳和在比特1讀取的引腳。這些forthlet所包含的節(jié)點讀取或?qū)懭雽τ谔囟ü?jié)點來說是唯一的IO電路。諸如SPI連接、A/D、D/A、或重置電路的物理電路具有軟件驅(qū)動器,該軟件驅(qū)動器僅僅適于具有匹配io硬件屬性以運(yùn)行這些Forthlet的節(jié)點。X0forthlet在零節(jié)點0上執(zhí)行,這種自然forthlet在RAM服務(wù)器上運(yùn)行。這些forthlet的作用很類似于大多數(shù)系統(tǒng)中的常規(guī)程序,因為這些forthlet程序直接從外部存儲器加載并且由將它們從外部存儲器讀取的CPU執(zhí)行。一些處理器每次從存儲器中讀取并執(zhí)行一個字,而一些將外部存儲器的塊讀取到本地高速緩沖存儲器后再執(zhí)行它們。這些forthlet在不直接將高速緩沖存儲器的本地地址映射到外部存儲器地址的硬件中起作用,這樣,處理器就能發(fā)現(xiàn)它正在執(zhí)行外部存儲器,不過來自于緩沖存儲器。通過運(yùn)行已經(jīng)在RAM或ROM中的程序,該forthlet將明確地將代碼從外部存儲器加載到本地存儲器中,然后我們分支到已經(jīng)加載的代碼。任意代碼可以將消息發(fā)送到節(jié)點0、RAM服務(wù)器,并且給予它自然forthlet的地址,從而在RAM服務(wù)器上的本地RAM的起始處加載和執(zhí)行。任意處理器可以僅僅將地址放置于其堆棧上,并條用X0功能,而一條X0消息將通過RAM服務(wù)器緩沖節(jié)點而發(fā)送到RAM服務(wù)器,以在RAM服務(wù)器上的該地址處執(zhí)行forthlet。然后發(fā)生的事情取決于在服務(wù)器上執(zhí)行的自然forthlet的內(nèi)容。最基本的數(shù)據(jù)傳送forthlet為fsend。在RAM服務(wù)器上加載和執(zhí)行自然forthlet的過程包括,調(diào)用在ROMBIOS或RAM中的例程,該例程從外部存儲器進(jìn)行讀取,并且其用于將x0forthlet加載到其用于執(zhí)行的本地RAM中。在RAM服務(wù)器上運(yùn)行的forthlet從外部存儲器加載其它forthlet,不過將它們傳送到管道。端口可執(zhí)行forthlet語句與存儲器可執(zhí)行forthlet結(jié)合從而從一個位置向另一個位置傳送數(shù)據(jù),該數(shù)據(jù)也可以為forthlet。用于通過諸如SPI或I2C的協(xié)議,或者經(jīng)無線軟件鏈路而發(fā)送芯片之上或之外的驅(qū)動器,處理芯片之上和之外的數(shù)據(jù),并且數(shù)據(jù)傳送forthlet處理芯片上的節(jié)點之間的移動數(shù)據(jù)。編譯器可以對應(yīng)用程序進(jìn)行組織,以通過RAM服務(wù)器、或者從連接到串行閃存的SPI端口、或者從沿著串行鏈路發(fā)送到處理器的PC開發(fā)系統(tǒng)而離開外部存儲器。應(yīng)用程序需要足夠的外部存儲器以允許使用節(jié)點0作為連接到廣闊的外部RAM、ROM或閃存器件的RAM服務(wù)器,這樣的應(yīng)用程序?qū)⒁蕾囉诒痪幾g器封裝進(jìn)RAM服務(wù)器上的Forthlet中的應(yīng)用程序。通過上述使用,F(xiàn)orthlet類型的應(yīng)用程序協(xié)作、加載代碼覆蓋并且互相交換數(shù)據(jù)且和RAM服務(wù)器交換數(shù)據(jù)。事件可以喚醒外圍的處理器節(jié)點,并且它們可以與已經(jīng)蘇醒的其它節(jié)點一起協(xié)同處理數(shù)據(jù)。圖9描述了未綁定到特定節(jié)點的可再定位forthlet。示例9target0node!0orgforthletrram-based-relocatable-word:mycodeif....then....mycode-;begin....until....ordinary-codefend該示例具有的forthlet未綁定到節(jié)點,但是卻具有取決于地址的內(nèi)部分支。當(dāng)加載到特定地址時,分支的分支域被設(shè)置以重新定位將要運(yùn)行在該特定地址處的例程。這些forthlet從存儲器運(yùn)行,并可包括分支指令。但是,它們在被加載在節(jié)點上時可被告知,以根據(jù)需要重新定位到不同的執(zhí)行地址。這些forthlet提供了一種類似于DLL的機(jī)制,其中,可調(diào)用功能的某種組合可被不同地安排在運(yùn)行時(runtime),并仍然安全地調(diào)用編譯器forthlet。編譯器可通過組合不同的基本forthlet類型而幫助構(gòu)建forthlet,從而提供更為復(fù)雜的功能。流forthlet語句被編譯器組合到其它已經(jīng)編譯過的forthlet,以提供更為復(fù)雜的forthlet類型的安全構(gòu)建。編譯器和程序員可以將forthlet屬性指定到可以進(jìn)行更為精細(xì)的對象操作的forthlet。這還提供了帶有工具的編程器,所述工具形成具有數(shù)學(xué)可證屬性的forthlet對象,因此有助于安全的程序構(gòu)建。編譯器為程序員構(gòu)建了發(fā)送forthlet。這是一種導(dǎo)致另一個forthlet被使用指定的路由從一個位置發(fā)送到另一個位置的forthlet。程序員使用命令FSEND構(gòu)建發(fā)送類型forthlet,如示例10所示。示例10dataforthletmyroutefsendmyforthlet該語句構(gòu)建名為“myforthlet”的新的發(fā)送類型forthlet,該forthlet在執(zhí)行時將使“dataforthlet”沿著由路由描述符“myroute”所描述的路由而被發(fā)送。編譯器將允許通過將路由描述為一系列步驟并對其進(jìn)行描繪,或者通過指定起始節(jié)點和終結(jié)節(jié)點,來構(gòu)建路由描述符。圖13描述了一運(yùn)行forthlet。編譯器為程序員構(gòu)建了運(yùn)行forthlet。這是一種將導(dǎo)致一ram執(zhí)行forthlet被使用指定的路由從一個位置發(fā)送到另一個位置然后從RAM的起點被執(zhí)行的forthlet。程序員使用命令FRUN構(gòu)建運(yùn)行類型forthlet,如示例11所述。示例11app2route1-21frunrun-app2該語句構(gòu)建名為“run-app2”的新的運(yùn)行類型的forthlet,該forthlet在執(zhí)行時將使“app2”沿著由路由描述符“route1-21”所描述的路由而發(fā)送。多個forthlet類似于發(fā)送forthlet。獲取(get)forthlet類似于反相的發(fā)送forthlet。它打開路由,并在它打開的管道中拉動forthlet而不是發(fā)送forthlet。廣播forthlet被編譯器構(gòu)建為將一個forthlet發(fā)送到多個位置。收集和積聚forthlet被編譯器構(gòu)建為將數(shù)據(jù)從多個位置收集或積聚到單個位置。發(fā)布forthlet被編譯器構(gòu)建為將對數(shù)據(jù)所進(jìn)行的收集的多個部分從一個位置發(fā)布到多個位置。除了上述簡單的forthlet,還有多個中級forthlet對象。中級forthlet對象為如下forthlet,該forthlet具有的對象屬性由程序員和編譯器所設(shè)置,并被更高級forthlet使用來幫助程序員,示例12描述了模板forthlet。示例12Target0node!0orgForthletrclipper\clipdatastreamtounsignedfmax#ioport#!a\specifyanunsetinputoutputportaddressfmax#\specifyanunsetmaximumvalueforclipping:clip...\couldbecodedmanyways@bCntmsg#and.\specifyanunsetportforcontrolmessagesclip-;Fend該示例示出了數(shù)據(jù)限制器(clipper)作為可再定位forthlet的定義。使用名稱“ioport#”和“famx#”以及“Cntmsg#”指明,該forthlet具有三個域,這三個域帶有該Forthlet中的相對地址,在模板被初始化時這三個域?qū)瑢嵗兞?。在可再定位forthlet中使用這些名稱告知編譯器,該forthlet可以產(chǎn)生多個拷貝,這些拷貝可以被重新定位于存儲器中該forthlet所適合的任意節(jié)點和任意地址,并且該forthlet具有含待實例化(instantiate)的公知屬性的三個域。當(dāng)構(gòu)建可再定位forthlet時編譯器識別出這些關(guān)鍵字,并了解到,“ioport#”域包含與其相鄰的兩個域的組合地址,并且該forthlet將讀取和寫入兩個數(shù)據(jù)樣本。當(dāng)該程序的實例被放進(jìn)陣列中的位置以處理真實程序中的數(shù)據(jù)樣本時,該域的內(nèi)容將被設(shè)置到對應(yīng)于適合的相鄰域的兩個端口的組合地址。編譯器還了解到,“Cntmsg#”域指定將被針對輸入控制消息而檢測的端口的地址,并且“fmax#”域包含的值為將被限制器在流中傳遞的最大值。編譯器將確定,該forthlet也具有如下屬性,即,它需要三個端口,因此它不能放置在只帶有兩個端口的邊角節(jié)點中。因此,軟件可以將模板程序以如下方式放置在陣列中,而使得可以從數(shù)學(xué)角度證明,經(jīng)過陣列的每個節(jié)點的消息和控制路徑是正確的,并且不存在流死鎖。模板forthlet是一種類型的可執(zhí)行forthlet,其具有的屬性關(guān)聯(lián)到作為其模板的種類。這些對象屬性域告知編譯器和程序員,什么是該forthlet的通用功能,以及它所具有的可以被安全操作的屬性。一種示例是fir過濾器元件模板。多級fir過濾器可以構(gòu)建在節(jié)點的工作組上,其中每個節(jié)點執(zhí)行一部分過濾器功能??傔^濾器功能由級聯(lián)過濾器元件的每一級上的特定設(shè)置而確定。在每個過濾器元件中的代碼是一致的,除了針對抽頭反饋的延遲、用于對每個抽頭處反饋的數(shù)據(jù)進(jìn)行乘法的常數(shù)和數(shù)據(jù)被讀進(jìn)和寫出到下一過濾器級的端口。模板forthlet將由代碼組成,該代碼所描述的是,可以被操作的參數(shù)處于何處以及這些參數(shù)代表什么。通過使用被編譯器以安全方式映射到功能的預(yù)定義功能模板,許多問題自身就得到解決。這些屬性還可以圖形化地表示給程序員,以采用可視化幫助設(shè)計,并確認(rèn)設(shè)計的正確性。更高級的forthlet將使用這些模板forthlet屬性域來確保,模塊為帶有與鄰近模塊匹配的部分的結(jié)構(gòu),從而防止其中模塊以允許死鎖的方式連接的代碼構(gòu)造。高級forthlet也被調(diào)用,forthlet向?qū)?wizard)可以根據(jù)需要被設(shè)置為高級。它們是編譯器的一部分,并且?guī)椭绦騿T對代碼進(jìn)行設(shè)計、構(gòu)建和改造。它們使用forthlet的對象屬性來為程序員構(gòu)建對象。在forthlet圖書館中存在一些forthlet向?qū)?,并且存在文檔,作為替換地,forthlet向?qū)軌蛴脕韼椭鷺?gòu)建新的forthlet向?qū)?。在FIR過濾器模板forthlet的之前示例中,過濾器建筑器向?qū)orthlet可以接收過濾器的高級描述,并執(zhí)行所需要的計算,這些計算確定延遲、抽頭、常數(shù)和端口方向,它們是每個節(jié)點構(gòu)建并行分布式多級FIR過濾器所需的??梢葬槍γ總€節(jié)點初始化FIR過濾器Forthlet模板,并增加在整個節(jié)點的工作組上加載和啟動軟件所需的forthlet包裝。上述向?qū)Э梢詭椭鷺?gòu)建模擬部件對象、R/F元件對象,其包括發(fā)送器、接收器、過濾器、協(xié)議翻譯器、或添加到圖書館的其它任何事物。診斷forthlet在處理器端口上執(zhí)行,并將該處理器狀態(tài)的完整視圖,或者關(guān)于其狀態(tài)的任何特定信息,返回到其它一些位置,例如返回到PC上的開發(fā)系統(tǒng),或者甚至沿著無線電鏈路返回到遠(yuǎn)程目的地。Forthlet解釋器非常像傳統(tǒng)的forth系統(tǒng),因為它將執(zhí)行來自forthlet地址列表的forthlet。該列表可以駐留在外部存儲器中,并且每次從所述列表讀取一個地址。該地址然后將在帶有X0的RAM服務(wù)器上執(zhí)行。內(nèi)部細(xì)節(jié)將非常類似傳統(tǒng)的線程化Forth系統(tǒng)。分支將重置forthlet解釋器指針等ram執(zhí)行。以該方式運(yùn)行的Forthlet解釋器讓技術(shù)人員可以寫非常大的程序,這些程序的運(yùn)行好像來自非常大的地址空間,就如同傳統(tǒng)的處理器。Forth字的大小將不受限于程序員本人的一個本地節(jié)點上的存儲器的大小,而是受限于外部存儲器的大小。Forthlet解釋器的使用,將允許技術(shù)人員在運(yùn)行時做很多事情,我們之前已經(jīng)描述為發(fā)生在編譯時間。編譯器在構(gòu)建和分配forthlet方面所做的智能事情可以可選地在運(yùn)行時被處理。一個示例將是動態(tài)過濾器建筑器類型程序,其在運(yùn)行時運(yùn)行在嵌入式芯片上,以便利用允許對加載并運(yùn)行在分布式處理器上的forthlet進(jìn)行壓縮的方式。被包含作為運(yùn)行時Forthlet解釋器對象的模板和實例化程序可小于整套實例化節(jié)點,在該節(jié)點處過濾器元件每次均被復(fù)制。動態(tài)forthlet調(diào)度器(dispatcher)是高級forthlet。針對一些應(yīng)用程序,通過使用對可執(zhí)行forthlet和forthlet工作組進(jìn)行調(diào)度的forthlet,可實現(xiàn)動態(tài)運(yùn)行時加載平衡,調(diào)度基于該時刻處可用節(jié)點的數(shù)目,或基于使用物理或R/F鏈路而網(wǎng)絡(luò)連接在一起的芯片的數(shù)目。高級forthlet還可用作可視化工具和分析程序(profiler)。高級forthlet可以檢驗經(jīng)過編譯的forthlet的對象屬性,并提供針對應(yīng)用程序的分配、使用和效率的有益的可視化。可視化工具和分析程序器可包括完全互動環(huán)境,其用作在每個核心上運(yùn)行的傳統(tǒng)的Forth命令解釋器,該解釋器具有的能力為實時地與處理器和代碼互動。對于Forth而言,這已經(jīng)是傳統(tǒng)優(yōu)勢,它經(jīng)常消除針對如下情況的需要,即,快速調(diào)制應(yīng)用程序所需的麻煩且厭煩的電路內(nèi)部仿真硬件。雖然已經(jīng)在此討論了創(chuàng)造性的計算機(jī)陣列10和計算機(jī)12的特定示例,不過可以預(yù)期,針對于此的大量應(yīng)用程序還未被想到。事實上,創(chuàng)造性的方法和裝置可適用于許多不同的使用,這是本發(fā)明的一大優(yōu)勢。上述全部內(nèi)容僅僅為本發(fā)明的可用實施例的一些示例。本領(lǐng)域的技術(shù)人員將易于想到,在不脫離本發(fā)明的精神和范圍的前提下,可進(jìn)行多種其它修改和變化。相應(yīng)地,本公開在此并不意在限制,并且附帶的權(quán)利要求書應(yīng)被理解為涵蓋了本發(fā)明的全部范圍。工業(yè)實用性創(chuàng)造性的計算機(jī)陣列10、10a以及相關(guān)方法意在廣泛用于多種計算機(jī)應(yīng)用中??梢灶A(yù)期,在有必要實現(xiàn)大量不同但是相關(guān)的功能的計算機(jī)尖端應(yīng)用中,它們將尤為有用。可以預(yù)見,針對創(chuàng)造性的計算機(jī)陣列10、10a以及相關(guān)方法的一些最佳應(yīng)用方案將在于,可以對所需要的任務(wù)進(jìn)行分割,從而使每臺計算機(jī)12具有接近等同于其它計算機(jī)的計算要求。不過,即使在一些計算機(jī)12有時候甚至總是可以工作在遠(yuǎn)小于它們最大能力的情況下,發(fā)明人也已經(jīng)發(fā)現(xiàn),計算機(jī)陣列10、10a的整體效率通常將超過現(xiàn)有技術(shù)中可動態(tài)分配任務(wù)的計算機(jī)陣列的效率。應(yīng)該注意的是,存在多種應(yīng)用,其中優(yōu)選地具有不止一個計算機(jī)陣列10、10a。眾多這類可能示例中的一個是,數(shù)字無線電可要求GPS輸入。在該示例中,無線電可被一個計算機(jī)陣列10執(zhí)行,該陣列從分立的被配置以實現(xiàn)GPS功能的計算機(jī)陣列10接收輸入。進(jìn)一步應(yīng)該注意的是,雖然計算機(jī)12可被優(yōu)化以執(zhí)行單一的任務(wù),不過如上文示例所討論的,如果該任務(wù)不是特定的應(yīng)用程序中所需要的,那么計算機(jī)12可容易地被編程以執(zhí)行其它一些任務(wù),這僅僅受限于程序員的想象力??梢灶A(yù)見的是,使用Forth計算機(jī)語言將最佳地實現(xiàn)本創(chuàng)造性計算機(jī)陣列10、10a,該語言本質(zhì)上易于根據(jù)需要分割任務(wù)以執(zhí)行本發(fā)明。ColorForth為Forth語言的最新改造,其將被等價地應(yīng)用。因為本發(fā)明的計算機(jī)陣列10、10a以及計算機(jī)陣列方法36可易于形成,并易于與現(xiàn)有任務(wù)、輸入/輸出器件等集成,并且由于提供了在此所描述的優(yōu)勢,因此,可以預(yù)見,它們將易于在工業(yè)生產(chǎn)中被接受。出于這些和其它原因,可以預(yù)見,本發(fā)明的使用和工業(yè)實用性將具有明顯的應(yīng)用范圍以及長時間的應(yīng)用周期。元件列表10計算機(jī)陣列12計算機(jī)12a存儲器控制器計算機(jī)14基座16數(shù)據(jù)線18閃存存儲器20RAM22串行數(shù)據(jù)線路24并行數(shù)據(jù)總線28a經(jīng)26p輸入/輸出電路28處理器30ROM32計算機(jī)RAM34計算核心36計算機(jī)陣列方法38提供互連計算機(jī)40針對任務(wù)配置計算機(jī)42將任務(wù)指定到計算機(jī)44初始化計算機(jī)權(quán)利要求1.一種計算機(jī)陣列系統(tǒng),包括多臺計算機(jī);和連接所述多臺計算機(jī)的多條數(shù)據(jù)路徑;和一種機(jī)制,其用于在所述多臺計算機(jī)中的一臺和另一臺之間發(fā)布程序和數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的計算機(jī)陣列系統(tǒng),其中所述機(jī)制進(jìn)一步包括一種包裝,其用于在所述包裝遇到所述多臺計算機(jī)中的至少一臺時,指令所述一臺計算機(jī)所要采取的行動。3.根據(jù)權(quán)利要求2所述的計算機(jī)陣列系統(tǒng),其中所述包裝指令至少一些所述計算機(jī)中的所述一臺加載所述包裝之后的數(shù)據(jù)。4.根據(jù)權(quán)利要求2所述的計算機(jī)陣列系統(tǒng),其中所述包裝指令所述至少一些計算機(jī)中的所述一臺加載所述包裝之后的指令。5.根據(jù)權(quán)利要求2所述的計算機(jī)陣列系統(tǒng),其中所述包裝指令所述至少一些計算機(jī)中的所述一臺將所述承載傳送到所述計算機(jī)中的另一臺。6.根據(jù)權(quán)利要求2所述的計算機(jī)陣列系統(tǒng),其中所述包裝可在端口處直接執(zhí)行。7.根據(jù)權(quán)利要求2所述的計算機(jī)陣列系統(tǒng),其中所述包裝可在端口處直接執(zhí)行。8.根據(jù)權(quán)利要求2所述的計算機(jī)陣列系統(tǒng),其中所述包裝包括調(diào)用,其中,所述調(diào)用將地址放置于返回堆棧上,然后返回。9.根據(jù)權(quán)利要求2所述的計算機(jī)陣列系統(tǒng),其中所述包裝進(jìn)一步包括計數(shù)器,該計數(shù)器用于指示所述包裝的長度。10.根據(jù)權(quán)利要求1所述的計算機(jī)陣列系統(tǒng),其中計算機(jī)以5×5陣列的形式進(jìn)行物理排列。11.根據(jù)權(quán)利要求1所述的計算機(jī)陣列系統(tǒng),其中至少一些計算機(jī)以4×6陣列的形式進(jìn)行物理排列。12.根據(jù)權(quán)利要求1所述的計算機(jī)陣列系統(tǒng),其中沿著陣列的每一側(cè)的計算機(jī)數(shù)量為偶數(shù)。13.根據(jù)權(quán)利要求1所述的計算機(jī)陣列系統(tǒng),其中至少一臺計算機(jī)與外部存儲器源直接通訊。14.根據(jù)權(quán)利要求1所述的計算機(jī)陣列系統(tǒng),其中至少一臺計算機(jī)將數(shù)據(jù)從外部存儲器源傳達(dá)至多臺計算機(jī)中的至少一些。15.一種用于執(zhí)行計算機(jī)化工作的方法,包括提供多臺計算機(jī);和將不同任務(wù)指定到所述計算機(jī)中的至少一些。16.根據(jù)權(quán)利要求15所述的方法,其中所述計算機(jī)中的至少一臺被指定為與閃存通訊。17.根據(jù)權(quán)利要求15所述的方法,其中所述計算機(jī)中的至少一臺被指定為與隨機(jī)訪問存儲器通訊。18.根據(jù)權(quán)利要求15所述的方法,其中所述計算機(jī)中的至少一臺被指定為完成輸入/輸出功能。19.根據(jù)權(quán)利要求15所述的方法,其中所述計算機(jī)中的一臺將所述指定路由到其余計算機(jī)。20.一種計算機(jī)陣列,包括多臺計算機(jī);和在所述計算機(jī)之間的多條數(shù)據(jù)連接;其中所述計算機(jī)中的至少一些被編程為執(zhí)行不同的功能。21.根據(jù)權(quán)利要求20所述的計算機(jī)陣列,其中所述不同功能一起工作以完成任務(wù)。22.根據(jù)權(quán)利要求20所述的計算機(jī)陣列,其中當(dāng)所述計算機(jī)陣列被初始化時,所述功能中的每一個被編程到相應(yīng)的計算機(jī)中。23.根據(jù)權(quán)利要求20所述的計算機(jī)陣列,其中所述計算機(jī)之間的通訊為異步的。24.一種使用多臺計算機(jī)完成任務(wù)的方法,包括將任務(wù)分割成多個操作成分,并將每個所述操作成分指定到所述計算機(jī)中的一臺;對所述計算機(jī)中的至少一些進(jìn)行編程,以完成每個所述操作成分。25.根據(jù)權(quán)利要求24所述的用于完成任務(wù)的方法,其中所述操作成分是用于完成全球定位系統(tǒng)接收器的操作。26.根據(jù)權(quán)利要求24所述的用于完成任務(wù)的方法,其中在任務(wù)開始之前,對所述計算機(jī)進(jìn)行編程,以完成每個所述操作成分。27.根據(jù)權(quán)利要求24所述的用于完成任務(wù)的方法,其中所述計算機(jī)以計算機(jī)陣列的形式進(jìn)行排列。全文摘要一種計算機(jī)陣列(10),其具有多臺計算機(jī)(12),用于完成較大的任務(wù),該任務(wù)被分割成多個較小的任務(wù),每個較小任務(wù)被指定給一臺或多臺計算機(jī)(12)。每臺計算機(jī)(12)可被配置用于特定功能,并且與外部計算機(jī)(12)相關(guān)的獨(dú)立輸入/輸出電路(26)特別適于特定的輸入/輸出功能。在計算機(jī)陣列(10)中布置的24臺計算機(jī)(12)的示例,具有中央運(yùn)算核心(34),更接近基座(14)邊緣的計算機(jī)(12)被配置用于輸入和/或輸出。還描述了用于在計算機(jī)(12)和外圍環(huán)境之間進(jìn)行通訊的機(jī)制。文檔編號G06F9/30GK101051301SQ20071009075公開日2007年10月10日申請日期2007年4月2日優(yōu)先權(quán)日2006年3月31日發(fā)明者查理斯·H·莫爾,杰佛瑞·亞瑟·福克斯,約翰·W·瑞伯申請人:科技資產(chǎn)股份有限公司