(57)【要約】  本発明は、プロセッサのアレイが、ワーカーモード機能の使用を介してより効率的に通信する、マイクロプロセッサシステムである。コードを実行していないプロセッサは、近接するプロセッサによってタスクがそれらに送られるまで、インアクティブだが警告状態のままになる。プロセッサは、着信タスクまたは着信メッセージを検査するために、タスクを一時的に延期するようにプログラムされることもできる。
2009527815.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピュータプロセッサの間で通信する方法であって、
第１のプロセッサを提供することと、
第２のプロセッサを提供することと、
前記第１のプロセッサから前記第２のプロセッサに入力を送ることであって、前記送ることは、前記第２プロセッサの処理機能において割込みを引き起こさないことと
を含むことを特徴とする方法。
【請求項２】
前記入力は、前記第１のプロセッサから前記第２のプロセッサへの書込機能を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記複数のプロセッサのそれぞれは、複数の通信ポートを備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記複数のプロセッサのそれぞれは、入出力（Ｉ／Ｏ）レジスタをさらに備えることを特徴とする請求項３に記載の方法。
【請求項５】
前記入出力（Ｉ／Ｏ）レジスタのそれぞれは、読取状況ビットおよび書込状況ビットを含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記読取状況ビットおよび前記書込状況ビットの状況を検査することをさらに含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記複数のプロセッサは、ダイ上に備えられたプロセッサのアレイを備えることを特徴とする請求項１に記載の方法。
【請求項８】
前記送ることは、前記第１プロセッサと前記第２プロセッサとの間のデータバスを介して行われることを特徴とする請求項７に記載の方法。
【請求項９】
プロセッサの前記アレイは、近接して隣接する４つのプロセッサを伴う少なくとも１つの内側プロセッサを含むことを特徴とする請求項７に記載の方法。
【請求項１０】
プロセッサの前記アレイは、前記アレイの周辺に位置する少なくとも１つのプロセッサを備え、前記少なくとも１つのプロセッサは、入出力（Ｉ／Ｏ）ピンへの接続、及び入出力（Ｉ／Ｏ）状況ビットをさらに備えることを特徴とする請求項７に記載の方法。
【請求項１１】
複数のプロセッサの間で処理タスクを共用する方法であって、
第１のプロセッサを提供することと、
第２のプロセッサを提供することと、
前記第１のプロセッサと前記第２のプロセッサとの間に通信ポートを提供することと、
前記第１のプロセッサから前記第２のプロセッサに入力を送ることと、
前記第２のプロセッサによって前記第１のプロセッサから前記入力を受け取ることであって、前記送ることが、前記第２のプロセッサの処理機能に割り込まないことと
を含むことを特徴とする方法。
【請求項１２】
前記送ることは、前記第２のプロセッサがタスクを実行している時に発生することを特徴とする請求項１１に記載の方法。
【請求項１３】
前記受け取ることは、前記第２のプロセッサが、前記実行を一時的に停止し、前記第１のプロセッサからの前記送ることを受け入れる時に完了することを特徴とする請求項１２に記載の方法。
【請求項１４】
前記第１のプロセッサから入力を送ることは、入力フラグビットをハイにセットすることをさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１５】
前記第２のプロセッサによって前記受け取られた入力に応答することは、前記受け取られた入力のコードを直接前記ポートから実行することを含むことを特徴とする請求項１２に記載の方法。
【請求項１６】
前記ポートから直接コードを実行することは、前記直接コードを実行することの前に、前記コードをメモリ位置に保管することなしで実行されることを特徴とする請求項１５に記載の方法。
【請求項１７】
ソフトウェアプログラムをさらに含み、前記ソフトウェアプログラムは、前記第２のプロセッサのタスクを実行することを一時的に停止し、前記第１のプロセッサからの潜在的入力について前記ポートを検査するステップを含むことを特徴とする請求項１２に記載の方法。
【請求項１８】
第１のプロセッサから第２のプロセッサに入力を送ることであって、前記第２のプロセッサは、前記送ることの時にインアクティブであることと、
前記入力を受け取るために前記第２のプロセッサを覚醒させることと、
前記入力のソースを判定するために前記第２のプロセッサによって入出力（Ｉ／Ｏ）レジスタを検査することと、
前記第２のプロセッサによって前記第１のプロセッサから前記入力を受け取ることと、
前記第２のプロセッサによって前記第１のプロセッサからの前記入力に応答することと
を含むことを特徴とする方法。
【請求項１９】
前記方法は、ソフトウェアループによって実行されることを特徴とする請求項１８に記載の方法。
【請求項２０】
前記覚醒させることは、前記覚醒させることの後に捨てて安全であるメッセージヘッダを含むことを特徴とする請求項１８に記載の方法。
【請求項２１】
前記検査することは、近接するプロセッサの読取ハンドシェーク状況ビットおよび書込ハンドシェーク状況ビットの状況を判定することを含むことを特徴とする請求項１８に記載の方法。
【請求項２２】
前記受け取ることは、前記第１のプロセッサおよび前記第２のプロセッサの前記読取ハンドシェーク状況ビットおよび前記書込ハンドシェーク状況ビットをねかせることが後に続くことを特徴とする請求項２１に記載の方法。
【請求項２３】
前記作用することは、前記第２のプロセッサがインアクティブモードに戻ることが後に続くことを特徴とする請求項１８に記載の方法。
【請求項２４】
前記覚醒させることは、複数ポート読取機能によって引き起こされることを特徴とする請求項１８に記載の方法。
【請求項２５】
前記覚醒させることは、ピンによって引き起こされることを特徴とする請求項１８に記載の方法。
【請求項２６】
前記受け取ることは、前記入力をデータ文として読み取ることを含むことを特徴とする請求項１８に記載の方法。
【請求項２７】
前記方法は、ＲＯＭ内に置かれることを特徴とする請求項１８に記載の方法。
【請求項２８】
前記方法は、ＲＯＭ内のブートアップタスクの一部であることを特徴とする請求項２７に記載の方法。
【請求項２９】
電子デバイスに、請求項１８に記載のステップを実行させるために、その中に実装されたコードを有することを特徴とするコンピュータ可読媒体。
【請求項３０】
複数のコンピュータプロセッサの間で通信する方法であって、
第１のプロセッサを提供することと、
第２のプロセッサを提供することであって、前記第２のプロセッサは、警告だがインアクティブ状況であることと、
前記複数のコンピュータプロセッサのそれぞれについて、Ｉ／Ｏレジスタを提供することと、
前記第１のプロセッサから前記第２のプロセッサに入力を送ることであって、前記送ることは、前記第２のプロセッサをアクティブ状況に変化させることと、
前記入力がどのプロセッサから送られたかを判定するために、前記第２のプロセッサの前記Ｉ／Ｏレジスタを読み取ることと、
前記第２のプロセッサによって前記入力を直接実行することと
を含むことを特徴とする方法。
【請求項３１】
追加入力が前記第２のプロセッサに送られているかどうかを判定するために、追加の回数分前記第２のプロセッサの前記Ｉ／Ｏレジスタを読み取ることと、
前記第２のプロセッサによって前記追加入力を実行することと
をさらに含むことを特徴とする請求項３０に記載の方法。
【請求項３２】
前記追加入力は、第３のプロセッサから送られたことを特徴とする請求項３１に記載の方法。
【請求項３３】
相互接続されたコンピュータプロセッサのアレイであって、各プロセッサが、
Ｉ／Ｏレジスタと、
前記プロセッサの４つの側のそれぞれに置かれた通信ポートと、
他の前記プロセッサに入力を送信する送信機構と、
他の前記プロセッサから入力を受信する受信機構と
をさらに備えるアレイと、
前記入力を受け取る前記プロセッサのそれぞれが前記入力のソースを判定できる監視機構と、
前記入力を受け取る前記プロセッサのそれぞれが前記入力に応答できる実行機構と
を含むことを特徴とする処理システム。
【請求項３４】
前記送信機構は、前記入力を送信する第１のプロセッサ上の第１のポートを備え、前記第１のポートは、所望の受信側プロセッサに近接して置かれ、
前記受信機構は、前記所望の受信側プロセッサ上の第２のポートを備え、前記第２のポートは、前記第１のプロセッサに近接して置かれる
ことを特徴とする請求項３３に記載のシステム。
【請求項３５】
前記受信機構は、前記第１のポートから前記第２のポートに直接前記入力を受け取るラッチング機構をさらに備えることを特徴とする請求項３４に記載のシステム。
【請求項３６】
第１のプロセッサの前記監視機構は、入力が第２のプロセッサによって送られることを試みているかどうかを判定するために、前記第１のプロセッサのアクティブな実行中のタスクを延期することができることを特徴とする請求項３３に記載のシステム。
【請求項３７】
前記入力は、受信側プロセッサによって、送信側プロセッサのポートから直接受け取られることを特徴とする請求項３３に記載のシステム。
【請求項３８】
前記送信機構は、前記入力をあるプロセッサから非近接受信側プロセッサに送る能力を有することを特徴とする請求項３３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、コンピュータおよびコンピュータプロセッサの分野に関し、より具体的には、コンピュータが、外部ソースから命令が受け取られる時にまずその命令を保管することなく命令を実行することを可能にする方法および手段と、コンピュータの間での通信を容易にするために関連する方法と、別のコンピュータの使用可能なリソースを使用する、コンピュータの能力とに関する。本発明の直接実行方法および装置の有力な現在の用途は、単一マイクロチップ上の複数のコンピュータの組合せにあり、動作効率は、高められた動作速度の要請のみならず、より高い効率の結果である電力節約および熱減少のためにも重要である。
【背景技術】
【０００２】
コンピューティングの分野では、処理速度が非常に望まれる品質であり、より高速のコンピュータおよびプロセッサを作成するための探求が進行中である。しかし、少なくとも現在既知のテクノロジを使用するならば、マイクロプロセッサにおける速度向上の限界にすぐに達することになることが、産業界で一般に認められている。したがって、複数のプロセッサの間でコンピュータタスクを共用することによって全体的なコンピュータ速度を高めるために、複数のプロセッサを使用することへの関心が高まっている。
【０００３】
複数のプロセッサの使用は、複数のプロセッサ間の通信の必要性を生じさせる。したがって時間のうちのかなりの部分が、プロセッサの間で命令およびデータを転送するのに費やされる。この通信を達成するために実行されなければならない各追加命令は、プロセスに追加の遅延を課し、この追加の遅延が、累積的に非常に大きくなり得る。あるコンピュータから別のコンピュータに命令またはデータを通信する従来の方法は、まず、受信側のコンピュータにデータまたは命令を保管し、その後、実行のため（命令の場合）またはそれに対する動作のため（データの場合）に、そのデータまたは命令を呼び出すことを必要とする。
【０００４】
従来技術では、時々コンピュータの「注意を引く（get the attention）」ことが必要であることが知られている。コンピュータがあるタスクで忙しい可能性がある場合であっても、そのコンピュータを一時的に第１のタスクからそらすことを必要とする可能性がある、もう１つの時間に敏感なタスク要件（time-sensitive task requirement）が発生し得る。例えば、コンピュータに入力を供給することが挙げられるが、これに限定はされない。そのような場合に、コンピュータは、一時的にその入力に肯定応答し、かつ／またはその入力に従って反応する必要がある場合がある。その後、そのコンピュータは、その入力の前に行っていたことを継続するか、あるいはその入力に基づいて、行っていたことを変更するのかのいずれかを行う。ここでは、外部入力が例として使用されているが、コンピュータの内部の間でＡＬＵの注意に関する潜在的な衝突がある場合にも、同じ状況が発生する。
【０００５】
Ｉ／Ｏポートからデータおよび状況の変化を受け取る場合に、従来技術で使用可能な２つの方法がある。一方は、ポートを「ポーリング（poll）」することであり、これには、固定間隔でポートの状況を読み取って、データが受け取られたかどうかまたは状況の変化が発生したかどうかを判定することが含まれる。しかし、ポートのポーリングは、かなりの時間およびリソースを消費する。よりよい代替案は、多くの場合、「割込み」の使用であった。割込みを使用する時には、プロセッサは、それに割り当てられたタスクの実行に取り掛かることができ、Ｉ／Ｏポート／デバイスが、注意または状況変化を必要とする時に、そのＩ／Ｏポート／デバイスは、割込み要求（ＩＲＱ）をプロセッサに送る。プロセッサは、割込み要求を受け取ると、現在の命令を、たとえば終了し、スタックにいくつかのものを置き、適当な割込みサービスルーチン（ＩＳＲ）を実行する。ＩＳＲが終了したならば、プロセッサは、中止したところに戻ることができる。この方法を使用すると、プロセッサが、Ｉ／Ｏデバイスが注意を必要としているかどうかを調べるために時間を浪費する必要がなくなり、デバイスが、注意を必要とする時に割込みをサービスするのみになる。しかし、割込みの使用は、多くの場合に、望ましいものをはるかに下回る。というのは、割込みの使用に関連する大量のオーバーヘッドがあり得るからである。たとえば、割込みが発生するたびに、コンピュータは、それが前に達成を試みていたタスクに関するある種のデータを一時的に保管し、次に、割込みに関するデータをロードし、次に、割込みが処理されたならば、前のタスクに必要なデータを再ロードしなければならない。
【０００６】
上述のシステムに対する改善は、Ｆｏｒｔｈコンピュータ言語に基づくシステムを使用して見つけることができる。Ｆｏｒｔｈシステムは、コードの複数の「スレッド」を一時に実行させることが以前からできている。これは、しばしば、協力ラウンドロビン（cooperative round-robin）と呼ばれる。スレッドが中央処理装置（ＣＰＵ）を使用する順番を得る順序は固定されており、たとえば、スレッド４は、必ずスレッド３の後、スレッド５の前に順番を得る。各スレッドは、望むだけ長くＣＰＵを持つことを許され、その後、自発的にＣＰＵを解放する。スレッドは、ワードＰＡＵＳＥを呼び出すことによってこれを行う。割込み関数中に保存される必要がある大きいコンテキストとは対照的に、最初のタスクを復元するためには、ごく少数のデータアイテムだけをＰＡＵＳＥ関数中に保存する必要がある。
【０００７】
各スレッドは、行うべき作業を有しても有しなくてもよい。タスク４が、行うべき作業を有し、ラウンドロビン内でそれの前にあるタスク（タスク３）がＰＡＵＳＥを呼び出す場合に、タスク４は、ウェイクアップし、もう一度ＰＡＵＳＥすると判断するまで働く。タスク４が、行うべき作業を有しない場合には、タスク４は、制御をタスク５に渡す。あるタスクが、入出力機能を実行するワードを呼び出し、したがって、その入出力が完了するのを待つ必要がある時には、ＰＡＵＳＥが、その入出力呼出しに組み込まれる。
【０００８】
ＰＡＵＳＥの予測性（predictability）は、非常に効率的なコードを可能にする。しばしば、Ｆｏｒｔｈベースの協力ラウンドロビンは、プリエンプティブマルチタスカ（multitasker）が、どれが次にＣＰＵを得なければならないかを判断するのに要する時間より短い時間で、すべての既存スレッドにＣＰＵでの順番を与えることができる。しかし、特定のタスクが、ＣＰＵを圧倒する、またはＣＰＵを追い越す傾向を持つ場合がある。
【０００９】
動作効率のもう１つの領域は、コンピュータシステムにおける漏れ電流を最小にすることによって見つけることができる。デバイスをより小さくするための探求において、漏れ電流は、絶縁層がより薄くなるので増加する。近い将来に、漏れ電力が、有効電力の５０％もの大きさに達する可能性がある。漏れ電流を抑制する１つの試みは、スリープトランジスタ（sleep transistor）を利用することによって見つけることができる。スリープトランジスタは、電源と、ロジックのブロックとが必要でない場合に、これらを分離する、または切断することによってスイッチのように働く。これは、非特許文献１で開示されているように、２倍から１０００倍の漏れ電力を減らすことができる。
【００１０】
しかし、スリープトランジスタの使用には、複数の短所がある。これらのトランジスタの効率的な使用を組み込むために、システム内の多数の要因を検討する必要がある。スリープトランジスタの閾電圧（threshold voltage）は、高くする必要があり、そうでなければ、スリープトランジスタが大きい漏れ電流を有する。これは、スリープトランジスタ用の高閾電圧デバイスと論理ゲート用の低閾電圧デバイスとの両方をサポートするために、ＣＭＯＳテクノロジプロセスにおける変更を必要とする。さらに、大きいスリープトランジスタは、面積オーバーヘッドと、そのトランジスタをオンおよびオフに切り替えるために消費される動的電力とを増やす。
【００１１】
回路の正しい機能を保証するために、スリープトランジスタは、オンである間の電圧降下を減らすように注意深くサイズを定められなければならない。異なる時にスイッチングする２つのゲートが、１つのスリープトランジスタを共用することができる。しかし、これは、大きい回路について実用的ではない。大きい回路に関するスリープトランジスタの最良の実施態様を判定するために、アルゴリズムが必要である。
【００１２】
スリープトランジスタに関連する他の問題に、非特許文献２で開示されているように、回路内の雑音の生成と、接地または供給電圧からフリップフロップを切断するのに使用される時のデータの消失とが含まれる。漏れ電流を減らし、より効率的でより問題の少ないコンピュータプロセッサシステムを提供するための、方法および／または装置が必要である。
【００１３】
なお、本願は、２００６年９月２９日出願の米国仮出願第６０／８４９４９８号、名称「ＳＥＡＦｏｒｔｈ  Ａｐｐｌｉｃａｔｉｏｎｓ  Ｇｕｉｄｅ」に対する優先権を主張し、２００６年６月３０日出願の米国仮出願第６０／８１８０８４号に対する優先権をも主張し、２００６年５月２６日出願の米国特許出願第１１／４４１８１８号、名称「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｍｏｎｉｔｏｒｉｎｇ  Ｉｎｐｕｔｓ  ｔｏ  ａ  Ｃｏｍｐｕｔｅｒ」の一部継続出願であり、２００６年５月３日出願の米国仮出願第６０／７９７３４５号に対する優先権を主張し、２００６年３月３１日出願の米国仮出願第６０／７８８２６５号に対する優先権をも主張し、２００６年２月１６日出願の米国特許出願第１１／３５５５１３号、名称「Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｐｏｗｅｒ  Ｓａｖｉｎｇ  Ｃｏｍｐｕｔｅｒ」の一部継続出願である。上で引用された特許出願のすべてが、参照によってその全体を本明細書に組み込まれている。
【００１４】
【非特許文献１】Embedded.comで２００６年７月２４日に公開されたBob Creppsによる論文「How to Provide a Power-Efficient Architecture」
【非特許文献２】２００４年に公表されたFarzan Fallah他による論文「Standby and Active Leakage Current Control and Minimization in CMOS VLSI Circuits」
【発明の開示】
【発明が解決しようとする課題】
【００１５】
コンピュータ間で、データまたは命令の形で情報を送り、受け取り、その後に使用するために必要なステップ数を減らすことが、有用であるはずである。また、割込み中に消費される時間およびリソースを減らすか、またはなくすことが、望ましいはずである。さらに、１つのＣＰＵを超えてＰＡＵＳＥ関数を拡張することが、有利であるはずである。しかし、本発明人の知る限り、従来技術のシステムは、上述したプロセスを意味のある形で実現してはこなかった。
【課題を解決するための手段】
【００１６】
電力使用量および熱散逸が最小化され、コンピューティング効率が最大化される、コンピュータプロセッサアレイを開示する。これは、部分的には、コンピュータプロセッサアレイによって実現され、このコンピュータプロセッサアレイ内では、ノードまたはコアとも呼ばれるプロセッサが、動作モードでない時に、インアクティブだが警告を出す。インアクティブノードまたはインアクティブコアは、インアクティブである間には本質的に電力を消費せず、近接するノードまたはピンがそれとの通信を試みる時にアクティブになる。着信タスクの実行の後に、ノードは、別のタスクがそのノードに送られるまで、インアクティブ状態に戻る。
【００１７】
アレイ効率は、あるコアが現在コードまたは命令を実行しつつあり、隣接するコアがその実行中のコアに通信する時にも実現される。従来のコンピューティングシステムのように実行中のコアに割り込むのではなく、コアを、着信メッセージについて検査するために時々一時停止するようにプログラムすることができる。着信メッセージが待っている場合に、実行中のコアは、元のタスクを一時停止した後にその着信メッセージを実行し、その後、元のタスクを継続することができる。
【００１８】
本発明の上記および他の目的は、本明細書で説明され、図面の複数の図に示された、本発明を実行する態様の説明およびその産業上の利用可能性に鑑みて、当業者に明白になるであろう。記載された目的および利点は、本発明のすべての可能な利点の網羅的な一覧ではない。さらに、所期の目的および／または利点のうちの１つまたは複数が応用例に存在しないか、または不要である可能性がある場合であっても、本発明を実践することが可能である。
【００１９】
さらに、当業者は、本発明のさまざまな実施形態が、説明される目的および／または利点の、必ずしもすべてではなく１つまたは複数を達成できることを認めるであろう。したがって、本明細書に記載の目的および／または利点は、本発明の必須要素ではなく、限定と解釈されてはならない。
【発明を実施するための最良の形態】
【００２０】
本発明を図面を参照して説明するが、図面では、類似する符号が、同一の要素または類似する要素を表す。本発明を、本発明の目的を達成する態様に関して説明するが、当業者は、特許請求された本発明の趣旨または範囲から逸脱せずにこれらの教示に鑑みて変形形態を達成できることを諒解するであろう。
【００２１】
本明細書で説明され、かつ／または図面に示された実施形態および変形形態は、例としてのみ提示されるものであって、本発明の範囲を限定するものではない。本発明は、多数の変形形態に適用可能であることが意図されているので、そうでないと特に述べられない限り、本発明の個々の態様および構成要素は、請求される発明の趣旨および範囲の中に留まりながら、さまざまな応用のために省略するか変更することができる。
【００２２】
次の発明は、「眠っているが警告を出す（asleep but alert）」または「インアクティブだが警告を出す（inactive but alert）」と称されるモードで動作するプロセッサ（コンピュータ、ノード、またはコアとも呼ばれる）であり、これらのモードはいずれも、プロセッサの機能が一時的に延期され、停止され、または止められ、本質的に電力が利用されていない動作のモードを指す。一方、このプロセッサは、警告、すなわち、そうするように指示された時に即座に処理を開始する準備ができている状態である。インアクティブプロセッサが、処理命令を受け取る時に、これを、「覚醒される（being awakened）」または「アクティブ化される（becoming activated）」と称する。
【００２３】
本発明を実行する態様は、個々のコンピュータプロセッサのアレイによって与えられる。このアレイは、図１の概略図に示され、図１では全体的な符号１０によって指定されている。プロセッサアレイ１０は、複数（図示の例では２４個）のコンピュータプロセッサ１２（時々、アレイの例で「コア」または「ノード」とも称する）を有する。図示の例では、プロセッサ１２のすべてが、単一のダイ１４上に設置されている。本発明によれば、プロセッサ１２のそれぞれは、後でより詳細に述べるように、一般に独立に機能するプロセッサである。プロセッサ１２は、複数の（その量は、後で詳細に述べる）相互接続するデータバス１６によって相互接続される。この例では、データバス１６が、両方向非同期高速並列データバスであるが、他の相互接続する手段をこの目的に使用できることが、本発明の範囲内である。アレイ１０の本実施形態では、プロセッサ１２間のデータ通信が非同期であるだけではなく、個々のプロセッサ１２も、内部的に非同期モードで動作する。これは、本発明人によって、重要な利点をもたらすことが見つけられている。たとえば、クロック信号を、プロセッサアレイ１０全体に分配する必要がないので、大量の電力が節約される。さらに、クロック信号を分配する必要がないことは、アレイ１０のサイズを制限し得る、または他の既知の問題を引き起こし得る多数のタイミング問題を排除する。また、個々のプロセッサが非同期に動作するという事実は、大量の電力を節約する。というのは、各プロセッサが、命令を実行していない時に、その中で動作するクロックがないので、本質的に電力を消費しないかからである。
【００２４】
当業者は、図を明瞭にするために図１の図から省略されている、ダイ１４上の追加構成要素があることを認めるであろう。そのような追加構成要素に、電力バス、外部接続パッド、およびその他のマイクロプロセッサチップの共通の態様が含まれるが、これらに限定はされない。
【００２５】
プロセッサ１２ｅは、アレイ１０の周囲部（periphery）にはないプロセッサ１２のうちの１つの例である。すなわち、プロセッサ１２ｅは、４つの直交に近接するプロセッサ１２ａ、１２ｂ、１２ｃ、および１２ｄを有するが、４つより多くの近接するプロセッサを利用できることが、本発明の範囲内である。プロセッサ１２ａから１２ｅのこのグループ化は、たとえば以下に、アレイ１０のプロセッサ１２の間の通信のより詳細な説明に関して使用される。図１の図からわかるように、プロセッサ１２ｅなどの内部プロセッサは、少なくとも４つの他のプロセッサ１２を有し、この４つの他のプロセッサと、バス１６を介して直接に通信することができる。次の説明では、述べられる原理は、アレイ１０の周辺部にあるプロセッサ１２が３つの他のプロセッサだけと直接に通信し、角のプロセッサ１２の場合にはプロセッサ１２のうちの他の２つだけと直接に通信することを除いて、プロセッサ１２のすべてにあてはまる。
【００２６】
図２は、プロセッサ１２のうちの一部だけ、具体的には両端を含んでプロセッサ１２ａから１２ｅまでを示す、図１の一部のより詳細な図である。図２の図には、それぞれが、読取信号線（read line）１８、書込信号線（write line）２０、および複数の（この例では１８本の）データ信号線（data line）２２を有するデータバス１６も示されている。データ信号線２２は、１つの１８ビット命令ワードの全ビットを同時に並列に転送することができる。本発明の一実施形態で、プロセッサ１２のうちのいくつかが、近接するプロセッサのミラーイメージであることに留意されたい。しかし、プロセッサ１２が、すべてが同一にまたは近接プロセッサのミラーイメージとして配置されているかどうかは、本発明の限定態様ではない。
【００２７】
本発明的方法の一態様によれば、プロセッサ１２ｅなどのプロセッサ１２は、その読取信号線１８のうちの１つ、２つ、３つ、または４つすべてをハイにセットし、各々の１つ、２つ、３つ、または４つすべての近接するプロセッサ１２からデータを受け取る準備をすることができる。同様に、プロセッサ１２が、その書込信号線２０のうちの１つ、２つ、３つ、または４つすべてをハイにセットすることも可能である。
【００２８】
近接するプロセッサ１２ａ、１２ｂ、１２ｃ、または１２ｄのうちの１つが、それ自体とプロセッサ１２ｅとの間の書込信号線２０をハイにセットした時に、プロセッサ１２ｅが、対応する読取信号線１８をすでにハイにセットしている場合には、ワードが、そのプロセッサ１２ａ、１２ｂ、１２ｃ、または１２ｄからプロセッサ１２ｅに、関連するデータ信号線２２上で転送される。その後、送信側プロセッサ１２は、書込信号線２０を解放し、受信側プロセッサ（この例では１２ｅ）は、書込信号線２０と読取信号線１８との両方をロウにプルする。後者のアクションは、送信側プロセッサ１２に、データが受け取られたことを肯定応答する。上の説明が、必ずしも順番にイベントのシーケンスを表すことを意図していないことに留意されたい。実際の実践では、送信側プロセッサ１２がその書込信号線２０を解放する（ハイにプルするのを止める）よりわずかに前に、受信側プロセッサが、書込信号線２０をロウにセットすることを試みる場合がある。そのような場合に、送信側プロセッサ１２がその書込信号線２０を解放するや否や、書込信号線２０は、受信側プロセッサ１２ｅによってロウにプルされる。送信側プロセッサ１２の書込信号線２０がハイになる時に、データまたはコードがすでに転送されており、したがって、受信側プロセッサ（この例では１２ｅ）は、単に、本質的に瞬間的な応答のためにそのデータ／コードをラッチ（latch）する必要があることに留意することが重要である。
【００２９】
プロセッサ１２ｅが、プロセッサ１２ａに書き込むことを試みている場合に、プロセッサ１２ｅは、プロセッサ１２ｅとプロセッサ１２ａとの間の書込信号線２０をハイにセットする。プロセッサ１２ｅとプロセッサ１２ａとの間の読取信号線１８が、まだプロセッサ１２ａによってハイにセットされていない場合には、プロセッサ１２ｅは、プロセッサ１２ａがその書込信号線２０をハイにセットするまで単純に待つ。書込信号線１８および読取信号線２０の対応する対の両方がハイにセットされる時に、データ信号線２２での転送を待っているデータが転送される。その後、受信側のプロセッサ１２（この例ではプロセッサ１２ａ）は、送信側プロセッサ１２ｅが書込信号線１８を解放するや否や、この２つのプロセッサ（この例では１２ｅおよび１２ａ）の間の読取信号線１８と書込信号線２０との両方をロウにセットする。
【００３０】
プロセッサ１２ｅなどのプロセッサ１２が、書込を予期してその書込信号線２０のうちの１つをハイにセットしている時に、必ず、そのプロセッサ１２は、データが送られるプロセッサ１２がその読取信号線１８をすでにハイにセットしている（この場合にはデータが即座に送られる）のでない限り、適当な近接するプロセッサ１２から、上で説明したようにデータが「要求」されるまで、基本的に電力を使用せずに単純に待つ。同様に、プロセッサ１２が、読取を予期してその読取信号線１８のうちの１つまたは複数をハイにセットしている時には、必ず、そのプロセッサ１２は、選択されたプロセッサ１２に接続された書込信号線２０がこの２つのプロセッサ１２の間で命令ワードを転送するためにハイになるまで、基本的に電力を使用せずに単純に待つ。
【００３１】
上で述べたように、プロセッサ１２を、説明したように機能させる複数の潜在的な手段および／または方法が存在する可能性がある。しかし、本実施例では、プロセッサ１２は、単に全般的に非同期に内部的に動作している（説明される非同期な形でのそれらの間のデータの転送に加えて）ので、そのように振る舞う。すなわち、命令は、一般に、順番に完了される。書込命令または読取命令のいずれかが発生する時には、その命令が完了するまで（または、おそらくはその代わりに、「リセット」などによってその命令が打ち切られるまで）、さらなるアクションはあり得ない。従来技術の意味での規則的なクロックパルスはない。むしろ、パルスは、実行されている命令が読取タイプ命令もしくは書込タイプ命令ではない（読取タイプ命令または書込タイプ命令が、しばしば別の実体による、完了を必要とすると仮定して）時または読取タイプ動作もしくは書込タイプ動作が実際に完了した時のいずれかのみに、次の命令を達成するために生成される。
【００３２】
図３は、図１および２のプロセッサ１２のうちの１つの例の全体的なレイアウトを示すブロック図である。図３の図からわかるように、プロセッサ１２のそれぞれは、一般的に、それ自体のＲＡＭ  ２４およびＲＯＭ  ２６を有する自己完結型のコンピュータである。前に述べたように、プロセッサ１２は、これらが本実施例において単一チップ上で組み合わされる場合に、時々、個々の「ノード」とも称される。
【００３３】
プロセッサ１２のその他の基本的な構成要素は、リターンスタック２８（後で述べるＲレジスタ２９を含む）、命令エリア３０、算術論理ユニット（「ＡＬＵ」または「プロセッサ」）３２、データスタック３４、命令をデコードするデコード論理セクション３６、およびスロットシーケンサ４２である。当業者は、一般に、本実施例のプロセッサ１２などのスタックベースのコンピュータの動作に精通しているであろう。プロセッサ１２は、データスタック３４および別々のリターンスタック２８を有する、デュアルスタックプロセッサである。図３には、データスタック３４のＴレジスタ４４およびＳレジスタ４６と一緒に、それぞれリターンスタック用およびデータスタック用の円形（circular）レジスタアレイ２８ａおよび３４ａも示されている。
【００３４】
本発明の本実施形態では、プロセッサ１２は、近接するプロセッサ１２との通信用の４つの通信ポート３８を有する。通信ポート３８は、オフ状況、受信状況（プロセッサ１２に信号を駆動するための）、および送信状況（プロセッサ１２から信号を駆動するための）を有するトライステートドライバ（tri-state driver）である。特定のプロセッサ１２が、プロセッサ１２ｅの例など、アレイ（図１）の内側にあるのではない場合に、通信ポート３８のうちの１つまたは複数が、少なくとも上で説明した理由から、その特定のプロセッサ内では使用されない。しかし、ダイ１４のエッジに接する通信ポート３８は、そのようなプロセッサ１２内に設計されるまたはプロセッサ１２の外部であるがこれに関連する、いずれかである追加回路を有して、そのような通信ポート３８に外部Ｉ／Ｏポート３９（図１）として働かせることができる。そのような外部Ｉ／Ｏポート３９の例には、ＵＳＢ（universal serial bus）ポート、ＲＳ２３２シリアルバスポート、並列通信ポート、アナログ−ディジタル変換ポートおよび／またはディジタル−アナログ変換ポート、ならびに多数の他の可能な変形形態が含まれるが、これらに限定はされない。どのタイプの追加回路または変更された回路がこの目的に使用されるかにかかわりなく、本発明の本実施形態によれば、それから受け取られる命令および／またはデータの処理に関する「外部」Ｉ／Ｏポート３９の動作の方法は、本明細書で「内部」通信ポート３８に関して説明されるものに類似する。図１では、「エッジ」プロセッサ１２ｆが、外部Ｉ／Ｏポート３９を介して外部デバイス８２と通信するための関連するインターフェース回路８０（ブロック概略形式で図示）と共に示されている。
【００３５】
本実施形態では、命令エリア３０には、複数のレジスタ４０が含まれ、レジスタ４０には、本実施例では、Ａレジスタ４０ａ、Ｂレジスタ４０ｂ、およびＰレジスタ４０ｃが含まれる。本実施例では、Ａレジスタ４０ａは、完全な１８ビットレジスタであるが、Ｂレジスタ４０ｂおよびＰレジスタ４０ｃは、９ビットレジスタである。Ｉ／Ｏレジスタ４７（１８ビット）が、メモリ（ＲＯＭ  ２６およびＲＡＭ  ２４）と通信ポート３８との間に置かれる。Ｉ／Ｏレジスタ４７は、本明細書で後でより詳細に開示する。
【００３６】
本発明は、本実施例によって限定されないが、このプロセッサ１２は、ネイティブＦｏｒｔｈ言語命令を実行するように実施される。Ｆｏｒｔｈコンピュータ言語に精通した者が諒解するであろう通り、Ｆｏｒｔｈ「ワード」として知られる複雑なＦｏｒｔｈ命令は、プロセッサに設計されたネイティブプロセッサ命令から構成される。Ｆｏｒｔｈワードの集合は、「辞書」として知られる。後でより詳細に説明するように、プロセッサ１２は、ＲＡＭ  ２４、ＲＯＭ  ２６から、または直接にデータバス１６（図２）のうちの１つから、一時に１８ビットを読み取る。しかし、Ｆｏｒｔｈでは、ほとんどの命令（オペランドレス命令として知られる）が、そのオペランドをスタック２８および３４から直接に入手するので、これらの命令は、長さにおいて一般に５ビットのみであり、グループ内の最後の命令が３ビットだけを必要とする命令の限られたセットから選択されるという条件付きで、４つまでの命令を、単一の１８ビット命令ワードに含めることができる。
【００３７】
図４は、命令ワード４８の概略図である（命令ワード４８が、実際には命令、データ、またはそれらの組合せを含むことができることに留意されたい）。命令ワード４８は、１８個のビット５０からなる。これはバイナリコンピュータなので、ビット５０のそれぞれは、「１」または「０」になる。本明細書で前に述べたように、１８ビット幅の命令ワード４８は、スロット０  ５４ａ、スロット１  ５４ｂ、スロット２  ５４ｃ、およびスロット３  ５４ｄと呼ばれる４つのスロット５４内に４つまでの命令５２を含むことができる。本発明の好ましい実施形態では、１８ビットの命令ワード４８は、必ずまとめて読み取られる。したがって、命令ワード４８に４つまでの命令を有する可能性が必ずあるので、ＮＯＰ（ノーオペレーション）命令が、使用可能なスロット５４のすべてを使用することが不必要または望ましくない場合に備えるために、プロセッサ１２の命令セットに含まれる。
【００３８】
本明細書で前に述べたレジスタの他に、命令エリア３０は、現在使用されている命令ワード４８を保持する１８ビットの命令レジスタ３０ａと、現在実行されている特定の命令内の命令用の追加の５ビットのオペコード（opcode）レジスタ３０ｂとを有する。
【００３９】
上で述べたように、各命令５２のｉ４ビット６６は、その命令が入力または出力を必要としない命令であるのではなく、その命令が読取タイプまたは書込タイプの命令のいずれであるかに従ってセットされる。命令５２内の残りのビット５０は、その命令についての特定のオペコードの残りを提供する。読取タイプまたは書込タイプの命令の場合に、これらのビットのうちの１つまたは複数を使用して、データがその特定のプロセッサ１２から読み取られるのか、またはこれに書き込まれるのかを示すことができる。本発明の本実施例では、書き込まれるデータは、必ずＴレジスタ４４（データスタック３４の最上部）から来るが、データを、Ｔレジスタ４４またはそこからそのデータを実行できる命令エリア３０のいずれかに選択的に読み込むことができる。本発明のこの特定の実施形態では、データまたは命令のいずれかを、本明細書に記載の形で通信することができ、したがって、命令をデータバス１６から直接に実行できる。
【００４０】
ビット５０のうちの１つまたは複数が、ポート３８のいずれかが読取または書込のためにセットされる場合に、どのポート３８がセットされるかを示すのに使用される。この後者の動作は、任意選択として、Ａレジスタ４０ａ、Ｂレジスタ４０ｂなどのレジスタ４０を指定するために１つまたは複数のビットを使用することによって達成される。このような例では、指定されたレジスタ４０には、ポート３８のそれぞれ（および、メモリ（ＲＡＭ  ２４またはＲＯＭ  ２６）、外部通信ポート３９など、プロセッサ１２が通信を試みることができる他の潜在的な実体にも）に対応するビットを有するデータが事前にロードされる。たとえば、特定のレジスタ４０内の４つのビットのそれぞれが、上ポート３８ａ、右ポート３８ｂ、左ポート３８ｃ、または下ポート３８ｄのそれぞれに対応することができる。これらのビット位置のいずれかに「１」がある場合に、通信が、対応するポート３８を介して進行するようにセットされる。本発明の本実施形態では、読取オペコードが、単一の命令で通信についての複数のポート３８をセットすることができると予期されている。
【００４１】
以下の例では、プロセッサ１２ｅがプロセッサ１２ｃへの書込を試みる通信を仮定するが、この例は、すべての近接するプロセッサ１２の間の通信に適用可能である。書込命令が、書き込むプロセッサ１２ｅ内で実行される時に、選択された書込信号線２０（この例では、プロセッサ１２ｅと１２ｃとの間の書込信号線２０）が、ハイにセットされ、対応する読取信号線１８がすでにハイである場合には、データが、選択された位置から選択された通信ポート３８を介して即座に送られる。その代わりに、対応する読取信号線１８がまだハイではない場合には、プロセッサ１２ｅは、対応する読取信号線１８がハイになるまで、単純に動作を停止する。
【００４２】
読取タイプまたは書込タイプの命令が完了した時に、プロセッサ１２ｅの動作がどのように再開されるかに関しては、そのための機構が、以下に説明される。プロセッサ１２ｅと１２ｃとの間の読取信号線１８と、それに対応する書込信号線２０との両方がハイの場合、次いで、信号線１８と２０との両方が、それをハイに保持している各々のプロセッサ１２のそれぞれによって解放される（この例では、送信側のプロセッサ１２ｅが、書込信号線１８をハイに保持しており、受信側のプロセッサ１２ｃが、読取信号線２０をハイに保持している）。次に、受信側のプロセッサ１２ｃが、信号線１８と２０との両方をロウにプルする。実際の実践では、受信側のプロセッサ１２ｃは、送信側のプロセッサ１２ｅが書込信号線１８を解放する前に、信号線１８および２０をロウにプルすることを試みることができる。しかし、信号線１８および２０は、ハイにプルされ、ロウには弱く保持される（ラッチされる）のみなので、信号線１８または２０をロウにプルするすべての試みは、その信号線１８または２０がそれをハイに保持しているプロセッサ１２によって解放されるまでは、実際には成功しない。
【００４３】
データバス１６内の信号線１８及び２０の両方がロウにプルされる場合、これが、「肯定応答」状態である。プロセッサ１２ｅおよびプロセッサ１２ｃのそれぞれは、肯定応答状態の際に、それ自体の内部の肯定応答信号線をハイにセットする。
【００４４】
上の説明に鑑みて理解される通り、これらの動作は、プロセッサ１２ｅがまずプロセッサ１２ｃへの書込を試みているのか、またはプロセッサ１２ｃがまずプロセッサ１２ｅからの読取を試みているのかにかかわりなく、基本的に同一である。この動作は、両方のプロセッサ１２ｅ及び１２ｃの準備ができるまで完了することができず、プロセッサ１２ｅまたは１２ｃのどちらが先に準備ができても、そのコンピュータは、他方のプロセッサ１２ｅまたは１２ｃが転送を完了するまで、第１のプロセッサ１２は単純に「インアクティブになる」。上で説明したプロセスを見るもう１つの形は、実際に、書き込むプロセッサ１２ｅと受け取るプロセッサ１２ｃとの両方が、それぞれ書込命令および読取命令を実行する時にインアクティブになるが、このトランザクションに最後に入るプロセッサは、読取信号線１８と書込信号線２０との両方がハイである時にほぼ瞬間的に再覚醒し（reactive）、このトランザクションを開始した第１のプロセッサ１２は、第２のプロセッサ１２がこのプロセスを完了する準備ができるまで、ほぼ無期限にインアクティブのままになることができるということである。
【００４５】
本発明人は、デバイス間の効率的な非同期通信を可能にするための主要な特徴が、ある種の肯定応答信号または肯定応答状態であると考える。従来技術では、デバイス間のほとんどの通信が、刻時され、受信側デバイスがデータを正しく受け取ったことを送信側デバイスが知る直接的な方法はない。チェックサムオペレーションなどの方法が、データが正しく受け取られたことを保証することを試みるのに使用されているが、送信側デバイスは、動作が完了したことの直接的な表示を有しない。本発明に係る方法は、本明細書で説明するように、デバイス間の非同期通信を可能にするか、または少なくとも実用的にする、必要な肯定応答条件を提供する。さらに、この肯定応答条件は、デバイスのうちの１つまたは複数が、肯定応答条件が発生するまで「インアクティブになる」ことを可能にもする。肯定応答条件は、プロセッサ１２の間で（相互接続するデータバス１６、または別々の信号線のいずれかを介して）送られる別々の信号によって、プロセッサ１２の間で通信することができ、そのような肯定応答信号は、本発明の本態様の範囲に含まれ得る。しかし、本明細書で説明される発明の実施形態によれば、肯定応答の方法が、追加の信号、クロックサイクル、タイミングパルス、または説明したもの以上の任意のそのようなリソースを必要とせずに、実際に通信に影響を及ぼすという点において、ここに含まれるさらなる経済（economy）があることを諒解することができる。
【００４６】
４つの命令５２を、１つの命令ワード４８に含めることができ、本発明によれば、命令ワード４８全体を、プロセッサ１２の間で一時に通信することができるので、これは、非常に小さいプログラムを１つの動作で送る理想的な機会を提供する。たとえば、小さい「Ｆｏｒ／Ｎｅｘｔ」ループのほとんどを、単一の命令ワード４８内で実施することができる。図５は、マイクロループ（micro-loop）１００の概略図である。マイクロループ１００は、他の従来技術のループとは異なり、ＦＯＲ命令１０２およびＮＥＸＴ命令１０４を有する。命令ワード４８（図４）には、４つもの命令５２が含まれるので、命令ワード４８は、単一の命令ワード４８内に３つの動作命令１０６を含むことができる。動作命令１０６は、基本的に、プログラマがマイクロループ１００内に含めることを望む可能性がある使用可能な命令のどれにでもすることができる。あるプロセッサ１２から別のプロセッサに送ることができるマイクロループ１００の通常の例は、第１のプロセッサ１２が使用可能なＲＡＭ  ２４の容量を「借りる」ことができるように、第２のプロセッサ１２のＲＡＭ  ２４から読み取るか、またはこれに書き込む命令の組とすることができる。
【００４７】
ＦＯＲ命令１０２は、所望の反復の回数を表す値をリターンスタック２８にプッシュする。すなわち、データスタック３４の最上部にあるＴレジスタ４４の値が、リターンスタック２８のＲレジスタ２９にプッシュされる。ＦＯＲ命令１０２は、実際にはどのスロット５４にも置くことができる。ＦＯＲ命令１０２がスロット３  ５４ｄに置かれていない場合には、命令ワード４８内の残りの命令５２は、マイクロループ１００に進む前に実行され、このマイクロループ１００は、一般に、次にロードされる命令ワード４８になる。
【００４８】
本発明の本実施形態によれば、図５の図に示されたＮＥＸＴ命令１０４は、特定のタイプのＮＥＸＴ命令１０４である。これは、この命令がスロット３  ５４ｄ（図４）に置かれているからである。本発明のこの実施形態によれば、「普通の」ＮＥＸＴ命令（図示せず）に続く特定の命令ワード４８内のすべてのデータは、アドレス（ｆｏｒ／ｎｅｘｔループが始まるアドレス）であると仮定される。ＮＥＸＴ命令１０４のオペコードは、それが４つのスロット５４のうちのどれにあるかにかかわりなく同一である（本明細書で前に述べたように、これがスロット３  ５４ｄにある場合に、最後の２桁が、明示的に書き込まれるのではなく、仮定されるという明白な例外がある）。しかし、ＮＥＸＴ命令１０４がスロット３  ５４ｄにある時には、これに続くアドレスデータは存在し得ないので、スロット３  ５４ｄにあるＮＥＸＴ命令１０４は、ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａであると仮定することもできる。ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａは、リターンすべきアドレスとして、それが置かれているのと同一の命令ワード４８のスロット０  ５４ａに置かれた最初の命令５２のアドレスを使用する。ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａはまた、Ｒレジスタ２９から（最初にＦＯＲ命令１０２によってそこにプッシュされた）値をとり、これを１つだけ減分し、次に、これをＲレジスタ２９に返す。Ｒレジスタ２９の値が、所定の値（０など）に達した時に、ＭＩＣＲＯ−ＮＥＸＴ命令は、次の命令ワード４８をロードし、本明細書で前に説明したように継続する。しかし、ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａが、所定の値より大きい値をＲレジスタ２９から読み取る時には、ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａは、それ自体の命令ワード４８のスロット０  ５４ａの動作を再開し、そのスロット０からスロット３（両端を含む）に置かれた３つの命令５２を実行する。すなわち、ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａは、必ず、本発明の本実施形態では、３つの動作命令１０６を実行する。いくつかの例で、３つの潜在的に使用可能な命令５２のすべてを使用することが望まれない場合があるので、「ＮＯＰ」命令が、必要に応じてスロット５４のうちの１つまたは２つを充填するのに使用可能である。
【００４９】
マイクロループ１００を、完全に単一のプロセッサ１２内で使用できることに留意されたい。実際に、使用可能な機械語命令のセット全体が、動作命令１０６として使用可能であり、マイクロループの応用および使用は、プログラマの想像力によってのみ制限される。しかし、単一の命令ワード４８内のマイクロループ１００全体を実行する能力が、プロセッサ１２が命令ワード４８を近傍のプロセッサ１２に送ってその中の命令５２を基本的にデータバス１６から直接的に実行することを可能にする能力と組み合わされた時に、これは、プロセッサ１２がその近傍のリソースを利用することを可能にする強力なツールをもたらす。
【００５０】
単一の命令ワード４８内にすべてが含まれる、小さいマイクロループ１００を、本明細書で説明するようにプロセッサ１２の間で通信することができ、これを、本明細書で説明するように、命令ワード４８に含まれる命令のすべての他のセットと全く同様に、受信側のプロセッサ１２の通信ポート３８から直接的に実行することができる。この種の「マイクロループ」１００には多数の用途があるが、通常の使用は、１つのプロセッサ１２があるデータを近傍のプロセッサ１２のメモリに保管することを望む場合であろう。たとえば、コンピュータは、まず、着信データワードを特定のメモリアドレスに保管し、次に、そのアドレスを増分し、次に、所与の回数の反復（転送されるデータワードの個数）について繰り返すように指示する命令をその近傍のコンピュータに送る。そのデータを読み戻すために、第１のプロセッサは、類似するマイクロループを使用して、保管されたデータを第１のプロセッサに書き戻すように第２のプロセッサ（ここではストレージに使用されたコンピュータ）に指示するだけである。
【００５１】
本明細書で説明する直接実行態様と共にマイクロループ１００構造を使用することによって、データストレージの必要量が個々のプロセッサ１２に組み込まれた比較的小さい容量を超える場合に、プロセッサ１２は、超過データのストレージのために、そうでなければ休んでいる近傍のプロセッサ１２を使用することができる。ここでは、データストレージに関して説明したが、同一の技法を、他のプロセッサ１２にある動作を実行させ、その結果を保管させ、所与の回数だけ繰り返させるマイクロループ１００を作成することによって、プロセッサ１２がその近傍にその計算リソースを共用させることを可能にするのに同等に使用することができる。理解されるように、本発明に係るマイクロループ１００構造を使用できる方法の数は、ほぼ無限である。
【００５２】
本明細書で前に述べたように、本発明の本実施形態では、データまたは命令のいずれかを、本明細書で説明する方法で通信することができ、したがって、命令を、基本的にデータバス１６から直接的に実行することができる。すなわち、命令をＲＡＭ  ２４に保管し、その後、実行の前にこれらをリコールする必要はない。そうではなく、本発明の本態様によれば、通信ポート３８で受け取られた命令ワード４８は、ＲＡＭ  ２４またはＲＯＭ  ２６からリコールされた場合と基本的に異なって扱われるのではない。
【００５３】
使用可能な機械語命令の１つが、ＦＥＴＣＨ命令である。ＦＥＴＣＨ命令は、Ａレジスタ４０ａのアドレスを使用して、どこから１８ビットワードをフェッチするかを決定する。もちろん、プログラムは、Ａレジスタ４０ａに正しいアドレスを置くことをすでに実現している必要がある。本明細書で前に述べたように、Ａレジスタ４０ａは、１８ビットレジスタであり、フェッチを行うことができる潜在的なソースのすべてを区別できる使用可能なアドレスデータの十分な範囲がある。すなわち、ＲＯＭに割り当てられたアドレスの範囲、ＲＡＭに割り当てられたアドレスの異なる範囲、ポート３８のそれぞれおよび外部Ｉ／Ｏポート３９のための特定のアドレスがある。ＦＥＴＣＨ命令は、必ず、フェッチする１８ビットをＴレジスタ４４に置く。ここで、重要な利点は、ループの内側に命令フェッチがないということにある。したがって、効率が約３０％向上し、電力消費がその分減少する。
【００５４】
対照的に、本明細書で前に述べたように、（データではなく）実行可能命令は、命令レジスタ３０ａに一時的に保管される。１８ビットの命令ワード４８を命令レジスタ３０ａに「フェッチする」特定のコマンドはない。そうではなく、命令レジスタ３０ａに実行可能命令が残っていない時には、プロセッサは、「次の」命令ワード４８を自動的にフェッチする。「次の」命令ワードが置かれている場所は、「プログラムカウンタ」または「ｐｃ」（ここでは、Ｐレジスタ４０ｃと称する）によって決定される。Ｐレジスタ４０ｃは、命令ワード４８のシーケンスがＲＡＭ  ２４またはＲＯＭ  ２６からフェッチされる場合にそうであるように、しばしば自動的に増分される。しかし、この一般的なルールには複数の例外がある。たとえば、ＪＵＭＰ命令またはＣＡＬＬ命令は、増分されるのではなく、Ｐレジスタ４０ｃに、そのＪＵＭＰ命令またはＣＡＬＬ命令の後に、前にロードされた命令ワード４８の残りに含まれるデータによって指定されるアドレスがロードされることを引き起こす。Ｐレジスタ４０ｃが、その後、ポート３８のうちの１つまたは複数に対応するアドレスをロードされる時に、次の命令ワード４８は、そのポート３８から命令レジスタ３０ａにロードされる。Ｐレジスタ４０ｃは、命令ワード４８がポート３８から命令レジスタ３０ａに取り出されたばかりである時にも、増分されない。そうではなく、Ｐレジスタ４０ｃは、特定のＪＵＭＰ命令またはＣＡＬＬ命令が実行されてＰレジスタ４０ｃが変更されるまで、その同一のポートアドレスを保持し続ける。すなわち、プロセッサ１２が、次の命令をポート３８から探すように指示されたならば、そのプロセッサ１２は、次の命令ワード４８についてメモリ（ＲＡＭ  ２４またはＲＯＭ  ２６）に戻るなど、他の場所を探すように指示されるまで、その同一のポート３８（１つまたは複数のポート）から命令を探し続ける。
【００５５】
上述したように、プロセッサ１２は、現在の命令ワード４８内に実行可能命令がもう残っていない時に、次にフェッチされる１８ビットを命令レジスタ３０ａに置かなければならないことを知っている。デフォルトで、ＪＵＭＰ命令またはＣＡＬＬ命令の後には（あるいは、本明細書で具体的には述べないある種の他の命令の後にも）、現在の命令ワード４８内に実行可能命令はもう残っていない。というのは、定義により、ＪＵＭＰ命令またはＣＡＬＬ命令に続く１８ビット命令ワードの残りが、そのＪＵＭＰ命令またはＣＡＬＬ命令によって参照されるアドレス専用であるからである。これを述べるもう１つの方法は、上で説明したプロセスが、ＪＵＭＰ命令またはＣＡＬＬ命令を、任意選択としてメモリアドレスだけではなくポート３８などへのＪＵＭＰ命令またはＣＡＬＬ命令とすることができるという事実を含むがこれには限定されない多くの方法においてユニークであることである。
【００５６】
本明細書で前に述べたように、プロセッサ１２が、次の命令を１つのポート３８からまたはポート３８のグループのいずれかから探すことができることを想起されたい。したがって、ポート３８のさまざまな組合せに対応するために、アドレスが供給される。たとえば、プロセッサが、ポート３８のグループから命令をＦＥＴＣＨするように指示される時に、そのプロセッサは、選択されたポート３８のいずれかから、最初に使用可能な命令ワード４８を受け入れる。近傍のプロセッサ１２のどれもが、まだこれらのポート３８のいずれかへの書込を試みていない場合には、当のプロセッサ１２は、上で詳細に説明したように、近傍が選択されたポート３８に実際に書き込むまで、「インアクティブになる」。
【００５７】
図６は、上で説明した直接実行方法１２０の例を示す流れ図である。動作の「普通の」流れは、本明細書で前に述べたように、命令レジスタ３０ａに実行可能命令がもう残っていない時に開始される。そのような時に、プロセッサ１２は、「ワードをフェッチする」動作１２２によって示されるように、もう１つの命令ワードを「フェッチする」（用語「フェッチ」が、本明細書では、実際のＦＥＴＣＨ命令が使用されないという点で、一般的な意味で使用されることに留意されたい）。その動作は、Ｐレジスタ４０ｃ内のアドレスに従って達成される（図６の流れ図で「アドレス」判断動作１２４によって示されるように）。Ｐレジスタ４０ｃ内のアドレスが、ＲＡＭ  ２４またはＲＯＭ  ２６のアドレスである場合には、次の命令ワード４８は、「メモリからフェッチする」動作１２６で、指定されたメモリ位置から取り出される。その一方で、Ｐレジスタ４０ｃ内のアドレスが、１つまたは複数のポート３８のアドレスである（メモリアドレスではない）場合には、次の命令ワード４８は、「ポートからフェッチする」動作１２８で、指定されたポート位置から取り出される。どちらの場合でも、取り出された命令ワード４８は、「命令ワードを取り出す」動作１３０で、命令レジスタ３０ａ内に置かれる。「命令ワードを実行する」動作１３２で、命令ワード４８のスロット５４内の命令が、本明細書で前に説明したように、順次達成される。
【００５８】
「ジャンプ」判断動作１３４では、命令ワード４８内の動作の１つが、ＪＵＭＰ命令、または本明細書で前に説明した継続される「普通の」進行から動作をそらせるその他の命令であるかどうかを判定する。そうである場合には、ＪＵＭＰ（または他のそのような）命令の後の命令ワード４８内で供給されるアドレスが、「Ｐレジスタにロードする」動作１３６でＰレジスタ４０ｃに供給され、このシーケンスは、図６の図に示されているように、もう一度「ワードをフェッチする」動作１２２で開始される。そうでない場合には、次のアクションは、「ポートアドレス」判断動作１３８に示されているように、最後にＦＥＴＣＨされた命令がポート３８からまたはメモリアドレスからのどちらであるかに依存する。最後にＦＥＴＣＨされた命令がポート３８からであった場合には、Ｐレジスタ３０ａに対する変更は行われず、このシーケンスが、「ワードをフェッチする」動作１２２から開始して繰り返される。その一方で、最後にＦＥＴＣＨされた命令がメモリアドレス（ＲＡＭ  ２４またはＲＯＭ  ２６）からであった場合には、「ワードをフェッチする」動作１２２が達成される前に、Ｐレジスタ３０ａ内のアドレスが、図６の「Ｐレジスタを増分する」動作１４０によって示されるように増分される。
【００５９】
上の説明は、実際の動作ステップを表すことを意図したものではない。そうではなく、これは、本発明の説明される実施形態に従って実行される、さまざまな判断とそれから生じる動作との図である。実際に、この流れ図は、説明され図示された各動作が別々の別個の順次ステップを必要とすることを意味すると理解されてはならない。実際に、図６の流れ図の説明された動作の多数が、実践において、一般に同時に達成される。
【００６０】
図７は、プロセッサ１５０に警告する方法の例を示す流れ図である。本明細書で前に説明したように、説明される実施形態のプロセッサ１２は、入力を待っている間に「インアクティブになる」。そのような入力は、図１から４に関して説明された実施形態のように、隣接するプロセッサ１２からとすることができる。その代わりに、やはり本明細書で前に述べたように、ダイ１４のエッジに接する通信ポート３８を有するプロセッサ１２は、そのようなプロセッサ１２内に設計されるまたはプロセッサ１２の外部であるがこれに関連するかのいずれかである追加回路を有して、そのような通信ポート３８に外部Ｉ／Ｏポート３９として働かせることができる。どちらの場合でも、本発明に係る組合せは、「インアクティブな」プロセッサ１２を、入力が受け取られた時に覚醒し、ある規定されたアクションに飛び込む用意を整え、準備をさせることができるという追加の利点をもたらすことができる。このプロセスを、ワーカーモード（worker mode）と称する。
【００６１】
各プロセッサ１２は、始動される時に、あるアドレスにＪＵＭＰするようにプログラムされる。そのアドレスは、その特定のプロセッサ１２を、それに指定されたジョブに対して開始する最初の命令ワード４８のアドレスである。この命令ワードは、たとえばＲＯＭ  ２６内に置くことができる。コールドスタートの後に、プロセッサ１２は、ワーカーモードループとして知られるプログラムなどのプログラムをロードすることができる。中央のプロセッサ１２、エッジのプロセッサ１２、および角のプロセッサ１２のワーカーモードループは異なる。さらに、いくつかのプロセッサ１２が、アレイ１０内のそのプロセッサの位置に関連する、ＲＯＭ内のブートアップ時の特定のタスクを有することができる。ワーカーモードループは、本明細書で後でより詳細に説明する。
【００６２】
この特徴を使用できる多数の方法があるが、単に１つのそのような「コンピュータ警告方法」を示すように働く例を、図７の図に示し、符号１５０によって本明細書に列挙する。図７の図からわかるように、「インアクティブだが警告状態」の動作１５２で、プロセッサ１２が、「インアクティブになる」ようにされ、１つの近傍のプロセッサ１２もしくは複数の（４つすべてもの多数の）近傍のプロセッサ、または「エッジ」プロセッサ１２の場合には外部入力からの入力、あるいは外部入力および／または近傍のプロセッサ１２からの入力のある組合せを待っているようになる。本明細書で前に説明したように、プロセッサ１２は、読取動作または書込動作のいずれかの完了を待ちながら「インアクティブになる」ことができる。プロセッサ１２が、この例で説明するように、ある可能な「入力」を待つのに使用されている場合に、待っているプロセッサが、近傍または外側のソースからの「書込」を待って、その読取信号線１８をハイにセットしていると仮定することが自然であるはずである。実際に、これが通常の条件になることが、現在は予期されている。しかし、待っているプロセッサ１２が、その書込信号線２０をハイにセットすること、したがって、近傍または外側のソースがそのプロセッサから「読み取る」時にアクティブ化されることは、本発明の範囲内である。
【００６３】
「アクティブ化」動作１５４で、インアクティブなプロセッサ１２は、隣接するプロセッサ１２または外部デバイス３９が、待たれているトランザクションを完了したので、動作を再開させられる。待たれているトランザクションが、実行される命令ワード４８の受取であった場合に、プロセッサ１２は、その中の命令の実行に進む。待たれているトランザクションが、データの受取であった場合に、プロセッサ１２は、キュー内の次の命令の実行に進み、この命令は、現在の命令ワード４８内の次のスロット５４内の命令であるか、次の命令ワード４８がロードされ、次の命令が、その、次の命令ワード４８のスロット０内にあるかのいずれかである。どの場合でも、説明される方法で使用されている間に、その、次の命令が、受け取られたばかりの入力を処理するための１つまたは複数の命令のシーケンスを開始する。そのような入力を処理するオプションには、ある事前定義された機能を内部で実行するために反応すること、アレイ１０内の他のプロセッサ１２のうちの１つまたは複数と通信すること、または入力を無視することさえ（普通の従来技術の割込みを規定された条件の下で無視できるのと同様に）含めることができる。このオプションは、図７の図では「入力に作用する」動作１５６として示されている。いくつかの場合に、入力の内容が重要でない場合があることに留意されたい。いくつかの場合に、入力の内容は、たとえば、外部デバイスが、関心を持たれている通信を試みたという事実そのものにすぎない場合がある。
【００６４】
当業者は、上で説明されたこの動作モードが、割込みの普通の使用に対するより効率的な代替案として有用になることを認めるであろう。プロセッサ１２が、その読取信号線１８（または書込信号線２０）のうちの１つまたは複数をハイにセットしている時に、そのプロセッサ１２を、「警告」状態にあると言うことができる。警告状態では、プロセッサ１２は、ハイにセットされている１つまたは複数の読取信号線１８に対応するデータバス１６でそのプロセッサ１２に送られたすべての命令を即座に実行する準備ができており、あるいは、その代わりに、データバス１６を介して転送されたデータに作用する準備ができている。使用可能なプロセッサ１２のアレイがある場合に、その１つまたは複数を、入力の規定された組のどれもがアクションを起こすようにそれをトリガするように、いつでも、上で説明した警告状態になるように使用することができる。これは、プロセッサの「注意を引く」のに普通の割込み技法を使用することより好ましい。というのは、割込みは、プロセッサが、割込み要求に応答して、ある種のデータを保管する、ある種のデータをロードするなどを行わなければならなくするからである。本発明によれば、プロセッサを、警告状態にし、関心を持たれている入力を待つこと専用にすることができ、単一の命令期間すら、そのような入力によってトリガされる命令の実行を開始するのに浪費されなくなる。やはり、現在説明されている実施形態で、警告状態のプロセッサが、実際には「インアクティブ」であり、これは、それらのプロセッサが、基本的に電力を使用していないが、入力によってアクションを起こすように瞬間的にトリガされるという点で「警告」であることを意味する。しかし、「警告」状態を、「インアクティブ」でない場合であってもプロセッサ内で実施できることは、本発明のこの態様の範囲内である。説明された警告状態は、基本的に、普通の従来技術の割込み（ハードウェア割込みまたはソフトウェア割込みのいずれか）がそうでなければ使用されていた可能性があるすべての状況で使用することができる。
【００６５】
図８は、プロセッサ警告方法１５０ａのもう１つの例である。これは、監視するプロセッサ１２ｆ（図１）と、ある他のタスクに割り当てられたもう１つのプロセッサ１２ｇ（図１）との間の相互作用が望ましいか必要である１つの例にすぎない。図８の図からわかるように、プロセッサ１２ｆおよび１２ｇのそれぞれについて１つの、２つの全般的に独立の流れ図がある。これは、本発明の協力するコプロセッサ手法の性質を示し、ここで、プロセッサ１２のそれぞれは、相互作用が本明細書に記載のように達成されるこれらの機会を除いて、そのプロセッサが全般的に独立に実行するそれ自体の割当を有する。本発明は、入力が外部入力デバイスまたはアレイ１０内の別のプロセッサ１２のどちらから来るかにかかわらず、そのような入力を処理するための割込みの使用に対する代替案を提供する。割込みを処理するために、プロセッサ１２に、それが行っていることを停止させるのではなく、本明細書で説明する発明に係る組合せは、前に説明したように、プロセッサ１２が「インアクティブだが警告」状態になることを可能にする。したがって、１つまたは複数のプロセッサ１２を、ある種の入力を受け取り、これに作用するように割り当てることができる。
【００６６】
プロセッサ１２ｆおよび、「インアクティブだが警告状況に入る」動作１５２に関して、「アクティブ化」動作１５４、および「入力に作用する」動作１５６のそれぞれは、プロセッサ警告方法１５０の第１の例に関して本明細書で前に説明したように達成される。しかし、この例は、プロセッサ１２ｆと１２ｇとの間の相互作用の可能な必要性を予期しているので、「入力に作用する」動作１５６に続いて、プロセッサ１２ｆは、「情報を送るか」判断動作１５８に入り、ここで、そのプログラミングに従って、受け取られたばかりの入力が他方のプロセッサ１２ｇの注意を必要とするかどうかが判定される。そうでない場合には、プロセッサ１２ｆは、インアクティブだが警告状況または本明細書で前に述べたものなどの他の代替物に戻る。そうである場合には、プロセッサ１２ｆは、「他方に送る」動作１６０で、本明細書で前に詳細に説明したように、プロセッサ１２ｇとの通信を開始する。プログラマの選択に従って、プロセッサ１２ｆが、外部デバイス８２からの入力に応答して内部的に生成したものなどの命令を送ることができることに留意されたい。代替案では、プロセッサ１２ｆが、プロセッサ１２ｇにデータを渡すことができ、そのようなデータは、プロセッサ１２で内部的に生成するか、外部デバイス８２から「パススルー」されたものとすることができる。もう１つの代替案は、プロセッサ１２ｆが、いくつかの状況で、プロセッサ１２ｇが外部デバイス８２から入力を受け取る時に、プロセッサ１２ｇからの読取を試みることができることとすることができる。これらの機会のすべてを、プログラマが使用可能である。
【００６７】
プロセッサ１２ｇは、一般に、「主機能を実行する」動作１６２に示されているように、割り当てられた主タスクが何であれ、その主タスクを達成するためにコードを実行している。しかし、プログラマが、プロセッサ１２ｆと１２ｇとの間の随時の相互作用が望ましいと判断した場合に、そのプログラマは、プロセッサ１２ｇが時折一時停止して、「入力を探す」動作１６６に示されているように、その近傍のうちの１つまたは複数が通信を試みたかどうかを調べることを提供する。「入力か」判断動作１６８は、待っている通信がある場合（たとえば、プロセッサ１２ｆがすでにプロセッサ１２ｇへの書込を開始している場合など）に行われる。開始された通信がある場合（ｙｅｓ）、プロセッサ１２ｇは、「他方から受け取る」動作１７０で、本明細書で前に詳細に説明したように、その通信を完了する。そうでない場合には、プロセッサ１２ｇは、図８に示されているように、割り当てられた機能の実行に戻る。「他方から受け取る」動作１７０の後に、プロセッサ１２ｇは、「入力に作用する」動作１７２で、受け取られた入力に作用する。上で述べたように、プログラマは、プロセッサ１２ｇが、入力などの命令を期待していることを提供することができ、この場合に、プロセッサ１２ｇは、本明細書で前に述べたように、その命令を実行する。その代わりに、プロセッサ１２ｇを、作用されるデータを期待しているようにプログラムすることができる。
【００６８】
図８の例では、「入力に作用する」動作１７２に続いて、プロセッサ１２ｇが、その主機能の達成に戻る（すなわち、「主機能を実行する」動作１６２に戻る）ことが示されている。しかし、さらに複雑な例の可能性が、確かに存在する。たとえば、プログラミングを、プロセッサ１２ｆから受け取られたある種の入力が、前に割り当てられた主機能を打ち切らせ、新しい機能を開始させるものとすることができ、あるいは、プロセッサ１２ｆが、単純に一時的に停止し、さらなる入力を待つものとすることができる。当業者が認める通り、ここでのアクションに関するさまざまな可能性は、プログラマの想像力によってのみ制限される。
【００６９】
本明細書で説明される本発明の実施形態によれば、別のプロセッサ１２が、ほかの割込みを必要とする可能性がある入力の監視および処理というタスクを割り当てられるので、所与のプロセッサ１２は、タスクを実行している間に割り込まれる必要がないことに留意されたい。しかし、興味深いことに、別のタスクの処理で忙しいプロセッサ１２は、入力についてそのポート３８を調べることをそのプログラミングがもたらさない限り、かつ、それがもたらされるまで、邪魔されることもできない。したがって、プロセッサ１２に他の入力を調べるために現在のタスクを一時停止または延期させることが、時には望ましい。「Ｐａｕｓｅ（一時停止）」の概念、及びそれがどのように使用されるかは、後でより詳細に述べる。
【００７０】
プロセッサ１２間の各ポート３８には、データ信号線２２、１つの読取信号線１８、および１つの書込信号線２０が含まれ、これらが、包括的にデータバス１６を構成する。データバス１６の他に、各ポート３８には、ハンドシェーク制御信号も含まれる。データ信号線２２は、２つの近接するプロセッサ１２のポート３８の間を接続する。たとえば、ワードまたはオペコードが、ＳＴＯＲＥ（書込）命令中にプロセッサ１２ｅのＴレジスタ４４に常駐することができ、プロセッサ１２ｅの書込信号線２０が、その結果、ハイにセットされる。プロセッサ１２ｃの読取信号線１８が、ハイにセットされている時には、データが、ＦＥＴＣＨ（読取）命令でプロセッサ１２ｃのＴレジスタ４４に転送される。この転送が完了した後に、読取信号線１８と書込信号線２０との両方が、ロウにセットされる。この例では、このデータは、Ｐレジスタ４０ｃによって読み取られる時に、命令になる。
【００７１】
プロセッサ１２がメッセージを読み取る時に、そのメッセージは、データ、命令、または信号の形であるものとすることができる。命令は、メモリに保管し、後に同一のプロセッサ１２によって使用することができ、あるいは、メモリに保管し、異なるプロセッサ１２によってポート３８から直接に実行することができる。あるプロセッサ１２が、そのＰレジスタ４０ｃを使用してメモリから読み取っている場合に、そのプロセッサ１２は、その命令を命令レジスタ３０ａに置くことによってその命令を即座に実行するか、あるいはメッセージをデータとして読み取り、Ｔレジスタ４４に置くかのいずれかを行う。ＦＥＴＣＨ命令は、そのＦＥＴＣＨ命令がポート３８に向けられるかポート３８にアドレッシングされる時に、データとしてメッセージを読み取る。ＪＵＭＰ命令またはＣＡＬＬ命令が、ポート３８に対するものである場合、またはＲＥＴＵＲＮ命令がポート３８アドレスに対するものである場合に、Ｐレジスタ４０ｃは、ポート３８に書き込まれるものを命令として読み取り、その命令は、実行可能コードとして扱われる。
【００７２】
受信側のプロセッサ１２は、データとしてメッセージを読み取り、その後、データとしてメッセージを書き込むことができる。ルーティングされる（すなわち、あるプロセッサ１２から仲介のプロセッサ１２を介して非近接プロセッサ１２に送られる）メッセージは、データとして解釈され、所望の受信側に達するまで、各連続するプロセッサ１２のＴレジスタ４４に読み込まれ、その後、このメッセージは、コードとして解釈され（Ｐレジスタ４０ｃから読み取られ）、その後、実行される。したがって、あるメッセージが、ＦＥＴＣＨ  Ａ（Ａレジスタ４０ａによって指定されるメモリの内容を読み取ることと定義される）またはＦＥＴＣＨ  Ａ＋（Ａレジスタ４０ａによって指定されるメモリの内容を読み取り、Ａレジスタ４０ａに１を加算することと定義される）またはＦＥＴＣＨ  Ｐ＋（Ｐレジスタ４０ｃによって指定される内容を読み取り、Ｐレジスタ４０ｃに１を加算することと定義される）中に読み取られる場合に、そのメッセージは、読取を行うプロセッサ１２のＴレジスタ４４に転送される。プロセッサ１２が、Ｐレジスタ４０ｃからメッセージを読み取りつつある場合には、その後そのメッセージは、受信側のプロセッサ１２の命令レジスタ３０ａに転送される。
【００７３】
図１に、単一のダイ１４上に置かれた、相互接続されたプロセッサ１２のアレイ１０を示した。そこでは、合計２４個のプロセッサ１２が例として与えられ、各プロセッサ１２は、その周辺部に配置された複数のピンを有する。各プロセッサ１２は、右、下、左、および上（ＲＤＬＵ）と指定された４つのポート３８を有する。図１では、プロセッサ１２ｅが、４つの近傍のプロセッサ１２を有し、中央のプロセッサ１２ｅに関して、プロセッサ１２ｂは、右近傍であり、プロセッサ１２ｄは、下近傍であり、プロセッサ１２ｃは、左近傍であり、プロセッサ１２ａは、上近傍である。エッジのプロセッサ１２は、３つの近接する近傍だけを有し、角のプロセッサ１２は、２つの近接する近傍だけを有するが、これらのエッジおよび角のプロセッサ１２は、それでも、やはりＲＤＬＵと指定される４つのポート３８を有する。
【００７４】
図９は、代替のアレイ１０ａのブロック概略図である。本発明のこの例では、アレイ１０ａは、２４個のプロセッサ１２を有する。また、本発明のこの実施形態では、プロセッサ１２は、「ミラーリング」と称する特定の相対方位で配置されている。すなわち、アレイ１０ａの最上部から２番目および４番目の行１７３内のプロセッサ１２は、そのｘ軸１７４に関して裏返しにされており、したがって、下ポート３８ｄが、現在は上向きに面している。アレイ１０ａの左側に関して２番目、４番目、および６番目の列１７６内のプロセッサ１２のすべては、そのｙ軸１７８に関して裏返しにされており、右ポート３８ｂが、現在はアレイ１０の左側に向かって面している。これは、プロセッサＮ６、Ｎ８、Ｎ１０、Ｎ１８、Ｎ２０、およびＮ２２が、その最初のＲＤＬＵ方位を維持することと、プロセッサＮ０、Ｎ２、Ｎ４、Ｎ１２、Ｎ１４、およびＮ１６が、そのｘ軸１７４だけの回りで裏返しにされていることと、プロセッサＮ７、Ｎ９、Ｎ１１、Ｎ１９、Ｎ２１、およびＮ２３が、そのｙ軸１７８だけの回りで裏返しにされていることと、ノードＮ１、Ｎ３、Ｎ５、Ｎ１３、Ｎ１５、およびＮ１７が、そのｘ軸１７４とｙ軸１７８との両方に関して裏返しにされていることとをもたらす。アレイ１０ａの角およびエッジに置かれたプロセッサ１２を除いて、これらの回転は、右ポート３８ｂのすべてが、互いに直接に面することと、下ポート３８ｄのすべてが、互いに直接に面することと、左ポート３８ｃのすべてが、互いに直接に面することと、上ポート３８ａのすべてが、互いに直接に面することとをもたらす。本明細書で後でより詳細に述べるように、これは、プロセッサ１２が、最も近い近傍のプロセッサに直接に位置合わせされ、接続されることを可能にする。というのは、プロセッサ１２の相互接続が、近接して接続する近傍のプロセッサ１２の相互接続を「ミラーリング」するからである。
【００７５】
その中のプロセッサ１２がミラーリングされる形に従って変化しない、アレイ１０ａ内の方向に言及する方法を持つために、本発明人は、用語東、西、南、および北（ＮＳＥＷ）を使用することを選択した。方向東、西、南、および北は、ミラーリングを用いる場合であっても、その相対方向を維持する。これは、ルーティング中に適切であり、ルーティングは、あるプロセッサ１２から仲介のプロセッサ１２を介してもう１つの非近接プロセッサ１２にメッセージを送ることとして前に説明した。方向（ＮＳＥＷ）は、ＲＯＭ  ２６内に置かれたテーブル内にある。
【００７６】
左ポート３８ｃおよび上ポート３８ａは、アレイ１０ａの外側境界にある時にはアレイ１０ａの内部の何にも接続されないが、本明細書で前に述べたように、おそらく、外部Ｉ／Ｏポート３９（図１）に接続される。下ポート３８ｄおよび右ポート３８ｂは、行および列の個数が偶数である限り、必ずもう１つのプロセッサ１２に接続される。例として、プロセッサＮ７は、４つの直交に近接する近傍すなわち、右ポート３８ｂに接続されたＮ６と、下ポート３８ｄに接続されたＮ１と、左ポート３８ｃに接続されたＮ８と、上ポート３８ａに接続されたＮ１３とを有する。図９ａは、右ポート３８ｂ、下ポート３８ｄ、左ポート３８ｃ、および上ポート３８ａの表記を用いる、図９からの４つのノードすなわち、Ｎ７、Ｎ８、Ｎ１３、およびＮ１４の拡大図である。
【００７７】
各プロセッサ１２は、図３に示されているように、１８ビットのＩ／Ｏレジスタ４７を有する。各Ｉ／Ｏレジスタ４７には、とりわけ、近接する近傍がそのポート３８から読み取りつつあるのか、あるいはそれに書き込みつつあるのかに関する情報が含まれる。図１０は、プロセッサ１２のＩ／Ｏレジスタ４７の部分図である。ビットＢ９からＢ１６は、プロセッサ１２の読取および書込の状況を示す。Ｉ／Ｏレジスタ４７には、その通信ポート３８に関する読取および書込ハンドシェーク状況ビット５０が含まれる。これらは、読取専用のビット５０である。これらを読み取ることによって、プロセッサ１２は、近傍がそのポート３８のうちの１つへの書込を待ってインアクティブであるのか、あるいはそのポート３８のうちの１つからの読取を待ってインアクティブであるのかを知ることができる。近傍が、プロセッサ１２への書込を待っている場合には、プロセッサ１２のＩ／Ｏレジスタ４７の書込信号線状況ビットが、ハイになり、その特定の近傍からの書込メッセージが、送られるのを待っていることを示す。同様に、近傍が、プロセッサ１２からの読取を待っている場合には、プロセッサ１２のＩ／Ｏレジスタ４７の読取信号線状況ビットが、ハイになり、その特定の近傍からの読取メッセージが、受け取られるのを待っていることを示す。
【００７８】
図９、９ａ、および１０に関する次の例は、さらに、上の手順を例示するものである。ノード７のＩ／Ｏレジスタ４７は、右ポート３８ｂの読取状況ビットおよび書込状況ビット（それぞれＢ１６およびＢ１５）を示し、この右ポート３８ｂは、この例ではプロセッサＮ６に接続される。ビットＢ１４およびＢ１３は、それぞれ下ポート３８ｄ（プロセッサＮ１に接続される）の読取状況ビットおよび書込状況ビットであり、ビットＢ１２およびＢ１１は、それぞれ左ポート３８ｃ（プロセッサＮ８に接続される）の読取状況ビットおよび書込状況ビットであり、ビットＢ１０およびＢ９は、それぞれ上ポート３８ａ（プロセッサＮ１３に接続される）の読取状況ビットおよび書込状況ビットである。この例では、ビット１６〜９は、必ず、右、下、左、および上（ＲＤＬＵ）の順番で近接ノードの読取状況および書込状況を与える。Ｉ／Ｏレジスタ４７についてのほかの説明を、ノード７の部分的Ｉ／Ｏレジスタを示す図１０を継続して参照して、次に述べる。すなわち、ビットＢ１６がハイである場合に、その後プロセッサＮ６からの読取要求がある、ビットＢ１５がハイである場合に、その後プロセッサＮ６からの書込要求がある、ビットＢ１４がハイである場合に、その後プロセッサＮ１からの読取要求がある、などである。
【００７９】
前に述べたように、ＰＡＵＳＥは、着信データまたは着信命令を検査するために、プロセッサ１２に、その処理タスクを一時的に延期させるか、またはインアクティブのままにさせる。ＰＡＵＳＥルーチンの使用に関する２つの実例がある。第１の実例は、プロセッサ１２が、前のインアクティブ状態からアクティブ化された後に発生する。第２の実例は、プロセッサ１２が、プログラムを実行しつつあるが、着信メッセージを探すために中断するまたは一時停止する時に発生する。
【００８０】
ＮＯＰ（「ｎｏ−ｏｐ」とも称する）は、ノーオペレーション命令であり、命令コード内では４つのドット（．．．．）によって指定される。図４を参照すると、ＮＯＰは、使用可能なスロット５４のうちのいくつかまたはすべてを使用することが不必要または望ましくない可能性がある場合に、使用することができる。たとえば、メッセージ内で、４つのＮＯＰ（．．．．）が、メッセージヘッダとして使用されるが、これは、（アクティブ化された後に）ヘッダを捨てることが安全でなければならず、（プロセッサ自体のコードをすでに実行している時またはその実行を中断している時などに）ヘッダを実行することも安全でなければならないことに部分的に起因し、この両方の条件が、ＮＯＰ命令によって満足される。複数のメッセージが異なる方向から全般的に同時に到着することも、安全でなければならない。各メッセージが４つのＮＯＰから始まる場合、複数の異なるメッセージの同時読取は、各プロセッサが同一のメッセージヘッダを読み取りつつあるので、崩壊的にはならない。
【００８１】
プロセッサ１２を、主にワーカーまたは「プロダクションタイプ（production type）」プロセッサ１２として指定することができる。他の指示が全くない場合に、このプロセッサ１２は、デフォルトでワーカーになることができ、図１１のワーカーモードループ２００を実行することができ、このループは、ＲＯＭ内に置かれる。このワーカープロセッサ１２は、ワーカーモードループ２００の始めで、４つのＮＯＰを含むメッセージヘッダがこのワーカープロセッサ１２に送られるまで、眠ったまま、すなわちインアクティブのままである。図１１は、ＰＡＵＳＥルーチンを利用するワーカーモードループ２００の例を表す流れ図である。ワーカープロセッサ１２がＲＯＭ内のデフォルトワーカーモードループ２００内でインアクティブである時に、メッセージヘッダの４つのＮＯＰは、「メッセージを読み取る」動作２１０でデータとして読み取られる。そのメッセージが到着すると、ＦＥＴＣＨ  Ａ命令が、１ワードをデータとして読み取る。このデータは、近傍プロセッサ１２からの４つのＮＯＰであり、ワーカープロセッサ１２のＴレジスタ４４に置かれる。これらの４つのＮＯＰの読取は、図１１の流れ図の「ウェイクアップ」動作２１１によって示されるように、ワーカープロセッサ１２をウェイクアップする。この「ウェイクアップ」メッセージは、ワーカープロセッサ１２をアクティブ化する。ワーカーモードループ２００の一部として、Ｂレジスタ４０ｂの内容またはアドレスは、デフォルトセッティングとしてＩ／Ｏレジスタ４７でポイントされ、したがって、ＦＥＴＣＨ  Ｂ命令は、「Ｉ／Ｏレジスタを読み取る」動作２１２でＩ／Ｏレジスタ４７の内容を読み取って、どのポートからメッセージが送られたかを判定する。
【００８２】
「ＰＡＵＳＥを開始する」動作２１３では、ワーカープロセッサ１２は、前のステップ２１２で読み取られたＩ／Ｏレジスタ４７の内容に従って「適当なポートを検査する」動作２１４という次のステップの準備をするために、処理アクティビティが全くない状態である。次に、適当なポートからの「メッセージを実行する」動作２１５のステップが行われる。着信メッセージのすべてが実行された後に、ＰＡＵＳＥは、「ＰＡＵＳＥを終了する」動作２１６で終わる。「眠る／インアクティブ」動作２１７で、ワーカープロセッサ１２はインアクティブになり、ほかのメッセージヘッダが到着してそのワーカープロセッサ１２をアクティブ化し、または起こすまで待つ。
【００８３】
要約すると、すべてのワーカープロセッサ１２が、眠り、ＰＡＵＳＥする。ワーカープロセッサ１２は、眠り、ウェイクアップし、Ｉ／Ｏレジスタ４７を読み取り（ここで、すべての近傍プロセッサ１２の書込要求が検査される）、ＰＡＵＳＥを開始し、その後、着信メッセージを実行する。着信メッセージの終りには、リターン（；）またはリターン（；）を伴うポート３８へのＪＵＭＰがある。その後、ワーカープロセッサ１２は、ＰＡＵＳＥルーチンに戻り、ほかのメッセージについてＩ／Ｏレジスタ４７内の次のビットを検査し、メッセージがある場合にはそのメッセージを実行し、その後、ワーカーループに戻り、さらなるメッセージを待ちながら眠る。
【００８４】
メッセージは、タスクとして扱われる。ＰＡＵＳＥは、存在する着信メッセージを、ウェイクするタスクとして扱い、何もないポート３８を、スリープするタスクとして扱う。
【００８５】
ＰＡＵＳＥの使用の第２の発生が、図１２に示されており、図１２では、プロセッサ１２は、「主機能を処理する」動作２２０を行っている。時々、プロセッサ１２は、「Ｉ／Ｏレジスタを読み取る」動作２２１でＩ／Ｏレジスタ４７を検査して、近接するプロセッサ１２の着信状況を検査する。Ｉ／Ｏレジスタ４７が、着信メッセージがあることを示す場合には、プロセッサ１２は、「ＰＡＵＳＥを呼び出す」動作２２２でＰＡＵＳＥする。次に、プロセッサ１２は、「入力についてポートを検査する」動作２２３で、Ｉ／Ｏレジスタ４７によって示されたポート３８を検査する。「入力か」判断動作２２４で示されるように、指定されたポート３８にメッセージがある場合には、プロセッサ１２は、４つのＮＯＰを含む「着信メッセージ内のすべてのコードを実行する」動作２２５を行う。着信メッセージを実行した後に、メッセージの送出を待っている他のポート３８があるかどうかに関して行われる、「最後のポートが終わったか」判断動作２２６がある。他のポートが、可能な入力について検査される必要がある場合には、ステップ２２３で「入力についてポートを検査する」動作から始めて、動作を繰り返す。判断２２４によって示されるように、入力がない場合には、プロセッサ１２は、その最初のタスクに戻り（ステップ２２０）、この条件の下では決して眠らない。着信メッセージについて右、下、左、および上（ＲＤＬＵ）の順番ですべてのポート３８を検査し、すべてのコードを実行した後に、最後のポートが終了し（ステップ２２６）、プロセッサ１２は、ステップ２２０でその最初の主機能に戻る。
【００８６】
大体の場合、異なるプロセッサ１２上での通信される順次プロセスは、プロセッサ１２のグループによって実行される。近接するプロセッサ１２が、メッセージを受け入れる準備ができていない場合には、送信側のプロセッサ１２は、眠るか、別のタスクに取り組み、メッセージを探すためにＩ／Ｏレジスタ４７をポーリングする必要がある。しかし、大体の場合、グループが異なるプロセッサ１２上での通信された順次プロセスを行っている時に、プロセッサ１２は、単にポート３８に書き込み、近接するプロセッサ１２は、単にそのポート３８から読み取る。４つすべてのポート３８からの読取を、プロセッサ１２によって実行することができ、次に、そのプロセッサ１２は、４つの近傍プロセッサ１２のうちのいずれかが書き込むまで眠る。読取側プロセッサ１２は、覚醒された後に、どのプロセッサ１２が書き込んだかを調べるためにＩ／Ｏレジスタ４７を検査する必要がある。そのプロセッサ１２は、データが読み取られた状態でウェイクアップする。そのプロセッサ１２は、Ａレジスタ４０ａ（データ）もしくはＢレジスタ４０ｂ（データ）またはＰレジスタ４０ｃ（データもしくはコード）を用いて読み取ることができる。Ｐレジスタ４０ｃを用いるメッセージ全体の読取は、そのプロセッサが、４つのＮＯＰを含むメッセージ全体を実行することを意味する。
【００８７】
プロセッサ１２は、ワーカーとして４つのすべてのポート３８を読み取り、その後、メッセージが待っていない場合に眠ることができる（図１１）。プロセッサ１２が、タスクの実行で忙しい（ループ）場合には、ＰＡＵＳＥ呼出しをタスクリング（task ring）に組み込んで、最初のタスクを延期することができる。主タスクが延期され、プロセッサは、４つのポート３８を読み取り、これによって、さらに４つのタスクがタスクリングに追加され、プロセッサは、延期された主タスクに戻る（図１２）。
【００８８】
接続されたＩ／Ｏピンを有するプロセッサは、セットされ、これらのピンの状況を示すＩ／Ｏポート３９内のビットを有する。いくつかのピンは、読取専用であり、Ｉ／Ｏポート３９内のビットを読み取ることによって読み取ることができる。いくつかのピンは、読取／書込であり、Ｉ／Ｏレジスタ４７内のビットを読み取るかまたはこれに書き込むことによって、読み取るかまたは書き込むことができる。読取または書込が完了した後、ハンドシェーク信号は送られ、それらはＩ／Ｏレジスタ４７内で読取ることはできない。未接続ポートのウェイクアップピンハンドシェーク回路に接続されたピンは、Ｉ／Ｏレジスタ４７内で可視ではない。ウェイクアップピンを含むアドレスが読み取られると、その後プロセッサ１２は、信号がそのピンに現れる時にウェイクアップするが、Ｉ／Ｏレジスタ４７が読み取られると、その後そのプロセッサ１２は、ウェイクアップハンドシェークを参照しない。ピンウェイクアップは、ウェイクアップ回路だけに接続され、Ｉ／Ｏレジスタ４７には接続されない。したがって、ピンは、そのピンがプロセッサ１２を覚醒させたかどうかを知るために、直接読み取られなければならない。ピンが０として読み取られる場合、他のポート３８のうちの１つが、そのプロセッサ１２を覚醒させた。これが、シリアルワーカープロセッサ内のＲＯＭコードが機能する仕組みである。
【００８９】
シリアルプロセッサは、Ｉ／Ｏレジスタビット（ビット１７）に接続されたシリアル入力ピンを備え、このＩ／Ｏレジスタビットで、シリアル入力ピンをデータとして読み取ることができ、シリアル入力ピンは、未接続通信ポートのハンドシェーク信号線にも接続される。その未接続通信ポートを読み取るプロセッサ１２は、そのピンまたはファントムポート（phantom port）への書込が行われつつあることをそのピンのデータがそのプロセッサ１２に伝える時に、ウェイクアップする。実際のポート３８が読み取られる時には、プロセッサ１２は、書込ハンドシェーク信号を得るまで眠り、その後、ウェイクアップし、データを読み取る。ＲＯＭコードは、プロセッサ１２が覚醒した後にピンを読み取ることによって、プロセッサ１２がピンによって覚醒されることとポート３８によって覚醒されることとを区別する。ピンがロウである場合には、プロセッサ１２は、Ｉ／Ｏレジスタ４７を読み取り、一時停止する。ピンがハイである場合には、プロセッサ１２は、シリアルブートコードを実行する。
【００９０】
読取または書込が開始される時に、読取ハンドシェークビットまたは書込ハンドシェークビットが立てられる。対にされた読取ハンドシェークビットまたは書込ハンドシェークビットが、他のプロセッサ１２によって立てられる時に、そのプロセッサ１２によって立てられたすべてのビットがねかされ、そのプロセッサ１２がウェイクアップし、データが転送される。データが転送された後に、立てられていたすべての読取／書込ハンドシェークフラグビットがねかされる。
【００９１】
プロセッサ１２が、ＲＤＬＵ（４つの近傍ポート３８のアドレスの名前）にＪＵＭＰする場合、そのプロセッサ１２は、４つのすべてのポート３８でフラグを読み取ることを試み、読み取られたフラグを立てる。次に、そのプロセッサ１２は、基本的に無電力モードで眠る。近傍が、これらのポート３８のうちの１つまたは複数に書き込み、書込フラグを立てる時に、すべてのポート３８のフラグがリセットされ、第１のプロセッサ１２がウェイクアップする。プロセッサ１２が、Ａレジスタ４０ａまたはＢレジスタ４０ｂと、データのＦＥＴＣＨまたはＳＴＯＲＥとを使用してアドレスを読み取る場合に、同一のことが発生する。プロセッサ１２は、４つ（または３つもしくは２つ）の近傍のうちの１つがデータを用いてそのプロセッサ１２をウェイクアップするまで眠る。
【００９２】
ウェイクアップピンが、読み取られるポート３８についてのアドレスの一部として読み取られ、そのピンがハイではない場合に、プロセッサ１２は、ウェイクアップが他の３つの近傍のうちの１つから来たことを知る。シリアルブートプロセッサ１２上のＲＯＭ内のシリアルブートは、そのプロセッサ１２をウェイクアップするピンから来る。そのピンがハイである場合には、コードがシリアルピンからロードされ、プロセッサ１２によってブートされる。
【００９３】
Ｘ０パケットを使用することによる、何とも衝突しない推奨されるルートの経路がある。Ｘ０は、ＲＡＭサーバの０ノードでの実行を表し、ある経路上のノード０に向けられたメッセージは、ＲＯＭ内で定義される。互いに向けてメッセージをルーティングしてはならない。ＰＡＵＳＥは、メッセージを安全にルーティングすることを可能にする。ＲＡＭサーババッファ（ノード６すなわちＲＡＭサーバの隣のノード上）は、ＲＡＭサーバのノード０への着信メッセージをノード６上のＲＡＭ内でバッファリングすることを可能にし、その結果、これらが後退せず、ＲＡＭサーバから外に送られるメッセージをブロックしなくなる。これは、Ｘ０と衝突しない推奨されるルーティング経路である。
【００９４】
本明細書で説明されているものが、複数のプロセッサ１２の間の「協力マルチタスキング」であることを認めることが重要である。タスクの組は、１つまたは複数のポート３８およびローカルメモリに常駐する。ＦＥＴＣＨ  ＢおよびＰＡＵＳＥは、着信実行可能コードについてすべてのポート３８を順次調べ、ポート３８をタスクとして扱う。ポート３８上の命令を、まずプロセッサのＲＡＭにロードすることなく、ポート３８から直接に実行することができる。
【００９５】
複数のプロセッサ１２の間のＰＡＵＳＥルーチンを、Ｆｏｒｔｈに関して本明細書で開示したが、複数のプロセッサ１２の間のＰＡＵＳＥルーチンの概念のすべてを、他のプログラミング言語にも適用することができる。
【００９６】
上の例のすべてが、本発明の使用可能な実施形態の例の一部にすぎない。当業者は、本発明の趣旨および範囲から逸脱せずに、多数の他の修正形態および変更形態を作ることができることをたやすく観察するであろう。したがって、本明細書の開示は、限定的として意図されたものではなく、添付の特許請求の範囲は、本発明の範囲全体を含むものとして解釈されなければならない。
【図面の簡単な説明】
【００９７】
【図１】本発明によるコンピュータプロセッサアレイを示す概略図である。
【図２】図１のコンピュータプロセッサのサブセットと、図１の相互接続するデータバスのより詳細な図とを示す詳細図である。
【図３】図１および２のプロセッサのうちの１つの全般的レイアウトを示すブロック図である。
【図４】本発明による命令ワードを示す概略図である。
【図５】本発明によるマイクロループの例を示す流れ図である。
【図６】ポートからの命令を実行する発明的方法の例を示す流れ図である。
【図７】プロセッサに警告する発明的な改善された方法の例を示す流れ図である。
【図８】プロセッサを覚醒させ、実行中のプロセッサに入力を送る方法を示す流れ図である。
【図９】プロセッサ識別またはノード識別を有し、ミラーリングを利用して近接するプロセッサとポートを共用する図１のプロセッサアレイを示す概略図である。
【図９ａ】追加のポートの詳細を伴う、図９の部分図である。
【図１０】Ｉ／Ｏレジスタを示す部分図である。
【図１１】ワーカーモードループを示す流れ図である。
【図１２】ＰＡＵＳＥルーチンを有する実行中のプロセッサを示す流れ図である。
【図１】
2009527815.tif 000003
【図２】
2009527815.tif 000004
【図３】
2009527815.tif 000005
【図４】
2009527815.tif 000006
【図５】
2009527815.tif 000007
【図６】
2009527815.tif 000008
【図７】
2009527815.tif 000009
【図８】
2009527815.tif 000010
【図９】
2009527815.tif 000011
【図９ａ】
2009527815.tif 000012
【図１０】
2009527815.tif 000013
【図１１】
2009527815.tif 000014
【図１２】
2009527815.tif 000015
【国際調査報告】
2009527815.tif 000016