(57)【要約】【課題】一連のコンピュータでデータを処理するシステムおよび方法を提供すること。【解決手段】一連のコンピュータが第１コンピュータおよび最終コンピュータを含む。第１コンピュータを除く各コンピュータが前のコンピュータに先行され、最終コンピュータを除くそれぞれのコンピュータに後続のコンピュータが続く。ロジックは第１データ経路を介して新データを読取り、ロジックは第２データ経路を介して旧データを書き込む。ロジックは、新しいデータを処理して旧データを生成し、最終コンピュータを除いて、記憶素子が旧データを格納する。書き込むロジックは、読み取るロジックの後に動作し、書き込むロジックは、処理するロジックの前に動作する。【選択図】なし【特許請求の範囲】
【請求項１】
データを処理する一連のコンピュータのための方法において、前記一連のコンピュータは第１コンピュータおよび最終コンピュータを含み、前記第１コンピュータを除く前記コンピュータのそれぞれが前のコンピュータに先行され、前記最終コンピュータを除く前記コンピュータのそれぞれに後続のコンピュータが続く方法であって、
現コンピュータと考えられる前記コンピュータのそれぞれで、
（ａ）前記現コンピュータで新データを読み取ること、
（ｂ）前記（ａ）の後、現コンピュータで旧データを書き込むこと、
（ｃ）前記（ｂ）の後、前記現コンピュータで前記新データを処理し、前記旧データを生成すること、
（ｄ）前記（ｃ）の後、前記現コンピュータが前記最終コンピュータではない場合、前記現コンピュータ内に前記旧データを保持すること
を備えることを特徴とする方法。
【請求項２】
前記（ａ）は、前記前のコンピュータから前記旧データを前記新データとして読み取ることを含み、または前記第１コンピュータの場合、前記一連のコンピュータの外部からデータを前記新データとして読み取ることを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記（ｂ）は、前記旧データを前記後続のコンピュータに書き込むことを含み、または前記最終コンピュータの場合、前記旧データを前記一連のコンピュータの外部に書き込むことを含むことを特徴とする請求項１または２に記載の方法。
【請求項４】
前記一連のコンピュータは、相互通信のために２つ以上の次元でデータ経路と接続されたコンピュータのアレイであることを特徴とする請求項１、２または３に記載の方法。
【請求項５】
プログラム式にセット可能なビットで少なくとも前記前のコンピュータおよび前記後続のコンピュータに対して前記データ経路をアドレス指定し、それによって前記現コンピュータは、前記ビットのどれが同時にセットされているかに基づいて、前記データ経路を介して通信することができること
をさらに備えることを特徴とする請求項４に記載の方法。
【請求項６】
前記（ａ）は、前記ビットによって同時に指定されている複数の前記コンピュータのうちの１つから前記新データを読み取ることを含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記（ｂ）は、前記ビットによって同時に指定されている複数の前記コンピュータのうちの１つに前記旧データを書き込むことを含むことを特徴とする請求項５または６に記載の方法。
【請求項８】
前記（ａ）は、スタックに対して前記新データをプッシュすることを含み、
前記（ｂ）は、スタックから前記旧データをポップオフすることを含む
ことを特徴とする請求項１乃至７のいずれか一項に記載の方法。
【請求項９】
データを処理する一連のコンピュータであって、
前記一連のコンピュータは、第１コンピュータおよび最終コンピュータを含み、前記第１コンピュータを除く前記コンピュータのそれぞれが前のコンピュータに先行され、前記最終コンピュータを除く前記コンピュータのそれぞれに後続のコンピュータが続き、前記コンピュータはそれぞれ、
第１データ経路を介して新データを読み取るロジックと、
第２データ経路を介して旧データを書き込むロジックと、
前記新データを処理して前記旧データを生成するロジックと、
前記最終コンピュータを除いて、前記旧データを格納する記憶素子と
を備え、
前記書き込むロジックは、前記読み取るロジックの後に動作し、前記書き込むロジックは、前記新データを処理して旧データを生成するロジックの前に動作することを特徴とする一連のコンピュータ。
【請求項１０】
前記読み取るロジックは、前記前のコンピュータから前記旧データを前記新データとして読み取り、または第１コンピュータの場合、前記一連のコンピュータの外部からデータを前記新データとして読み取ることを特徴とする請求項９に記載の一連のコンピュータ。
【請求項１１】
前記書き込むロジックは、前記旧データを前記後続のコンピュータに書き込み、または前記最終コンピュータの場合、前記旧データを前記一連のコンピュータの外部に書き込むことを特徴とする請求項９または１０に記載の一連のコンピュータ。
【請求項１２】
前記一連のコンピュータは、前記第１データ経路のうちの複数および前記第２データ経路のうちの複数と、２つ以上の次元で接続されたコンピュータのアレイであることを特徴とする請求項９、１０または１１に記載の一連のコンピュータ。
【請求項１３】
前記データ経路のそれぞれをアドレス指定するようにプログラム式にセット可能であるビットを有するレジスタをさらに備え、それによって前記コンピュータは、前記ビットのどれが同時にセットされているかに基づいて、前記データ経路のうちの複数を介して通信することができ、それによって前記レジスタ内の単一アドレスが、前記データに対するソースおよび宛先のどちらも表すことを可能にすることを特徴とする請求項１２に記載の一連のコンピュータ。
【請求項１４】
前記読み取るロジックは、スタックに対して前記新データをプッシュし、
前記書き込むロジックは、前記スタックから前記旧データをポップオフする
ことを特徴とする請求項９乃至１３のいずれか一項に記載の一連のコンピュータ。
【請求項１５】
一連のコンピュータ上で実行されたとき、請求項１から８のうちの一項の方法を前記一連のコンピュータに実施させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般には、処理アーキテクチャを有し、命令処理を実行する電気的コンピュータおよびデジタル処理システムに関し、より詳細には、データ転送オペレーションをサポートまたは実行する具体的な命令データの処理に関する。
【背景技術】
【０００２】
コンピューティングの技術分野では、処理速度はよく要求される品質であり、より高速なコンピュータおよびプロセッサを作成する探究が進行中である。しかし、少なくとも現在周知の技術を用いると、マイクロプロセッサの速度を向上させることに関する限界に急速に近づきつつあることがこの業界では一般に知られている。したがって、複数のプロセッサを使用して、プロセッサ間でコンピュータタスクを共有することによって全体のコンピュータ速度を向上させることへの関心が高まっている。しかし、ワークロードの共有に関係する全体の効率がほぼ必然的にある程度低下することも一般に認識されている。すなわち、１人の人が杭穴を６０分で掘ることができるということだけでは、必ずしも６０人の人々が杭穴を１分で掘ることができることにはならないという古い格言が当てはまることになる。ほぼどんなタスクの分割にも同じ原理が当てはまり、プロセッサ間のタスクの分割は例外ではない。
【０００３】
もちろん、コンピュータプロセッサ間のタスクの共有をより効率的にするための努力は行われている。厳密にどのようにタスクを割り当てるべきかという問題が検討されており、プロセスが改善した。この領域での作業中に、ある状況下では、複数ＣＰＵ環境で、あるＣＰＵから別のＣＰＵにデータを転送することは非常に厄介なものとなることがあるということが本発明者らの意見であった。例えば、データをあるＣＰＵから別のＣＰＵに転送しなければならず、ターゲットＣＰＵとソースＣＰＵとの間のあるＣＰＵによってターゲットＣＰＵがソースＣＰＵから隔てられる場合、ソースＣＰＵは、直に並ぶＣＰＵにデータを書き込まなければならず、次いでそのＣＰＵはデータを読み取り、次いでそれをターゲットＣＰＵに書き込まなければならず、次いでターゲットＣＰＵはデータを読み取らなければならない。そのようなプロセスは、多くの読取りオペレーションおよび書込みオペレーションを必要とし、大量のデータが転送されている場合、非常に多くの読取りコマンドおよび書込みコマンドがシステムオペレーションを妨げる可能性がある。
【０００４】
様々な異なる方向で、すなわち、同一のシステム内の様々な他のＣＰＵのいずれかの間で、複数の読取りおよび書込みオペレーションをすべて同時に可能にするための必要を満たすために、マルチポート読取りおよび書込みオペレーションのためのシステムおよび方法が開発された。これらは上記で論じた問題の大部分に対処するが、どんな大きな進歩の場合とも同様に、これらのシステムおよび方法は新しい課題を引き起こした。例えば、ＣＰＵがパイプラインまたは多次元アレイとして配置される複数ＣＰＵ環境では、ＣＰＵが後続のＣＰＵではなく、前のＣＰＵに書き込む反転が生じる可能性がある。これを防止するための機構を作成することができるが、こうした機構は、ハードウェア修正またはかなりのプログラミングとＣＰＵ間通信を伴う。別の例として、今日の多くの応用例はリアルタイム処理を必要とし、または単に処理速度および効率を向上させることが望ましい。そのことから、マルチポート読取りおよび書込みオペレーションの最適化が有益となるはずである。同様の趣旨で、マルチポートオペレーションが利用可能となった以上は、こうしたオペレーションのセットアップおよび性能をより柔軟にすることも有益となるはずである。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
したがって、本発明の目的は、コンピュータのパイプラインおよびアレイでデータを処理する改良型のシステムおよび方法を提供することである。
【課題を解決するための手段】
【０００６】
簡潔には、本発明の一態様は、一連のコンピュータがデータを処理する方法である。その一連のコンピュータは、第１コンピュータおよび最終コンピュータを含み、第１コンピュータを除く各コンピュータが、前のコンピュータに先行され、最終コンピュータを除くそれぞれのコンピュータの後に、後続のコンピュータが続く。各コンピュータを現コンピュータとみなすものとしてプロセスを考えることができる。新データが（ａ）現コンピュータで読み取られる。次いで（ｂ）旧データが現コンピュータで書き込まれる。次いで（ｃ）新データが現コンピュータで処理され、次の旧データが生成される。この後、（ｄ）現コンピュータが最終コンピュータではない場合、旧データが現コンピュータ内に保持される。ステップ（ｃ）は、命令語中の複数の命令を実行することを含み得る。ステップ（ａ）および（ｂ）は単一の命令語として実行され得る。（ａ）、（ｂ）、および（ｃ）のうちの少なくとも１つは非同期式で実行され得る。
【０００７】
簡潔には、本発明の別の態様は、データを処理する一連のコンピュータである。この一連のコンピュータは第１コンピュータおよび最終コンピュータを含み、第１コンピュータを除く各コンピュータが、前のコンピュータに先行され、最終コンピュータを除くそれぞれ後続のコンピュータが続く。コンピュータはそれぞれ、第１データ経路を介して新データを読み取るロジックと、第２データ経路を介して旧データを書き込むロジックと、新データを処理して次の旧データを生成するロジックとを有する。最終コンピュータを除いて、記憶素子が旧データを格納する。書き込むロジックは、読み取るロジックの後に動作し、書き込むロジックは、処理するロジックの前に動作する。前記読み取るロジックと、前記書き込むロジックは、プログラムで単一の命令語として実行し得る。読み取るロジック、書き込むロジック、および処理するロジックのうちの少なくとも１つは非同期式で実行し得る。
【０００８】
本発明はまた、一連のコンピュータ上で動作したときに、本発明の前記一態様の方法をその一連のコンピュータに実施させるコンピュータプログラムを提供する。プログラムはキャリア上でよい。キャリアは信号またはストアでよい。ストアは、他の例の中でもとりわけ、記録媒体またはメモリ装置でよい。
【０００９】
本発明の一実施形態の一利点は、高位コンピュータから低位コンピュータにデータが書き込まれる反転が生じることが回避されることである。
【００１０】
本発明の一実施形態の別の利点は、コンピュータのパイプラインまたはアレイを介するデータの初期送達が改善され、それによってそれぞれの処理をより早く開始できることである。
【００１１】
本発明の一実施形態の別の利点は、同一の初期データ値を一連のコンピュータのすべてに提供する必要がある場合の使用に特に適していることである。
【００１２】
本発明の一実施形態の別の利点は、非同期マルチポート読取りおよびマルチポート通信が可能なコンピュータのパイプラインまたはアレイと共に使用するのに特に適していることである。
【００１３】
本発明の実施形態の上記およびその他の目的および利点は、本明細書に説明され、図面の各図に示される、現在知られている本発明を実施する最良の形態の説明と、好ましい実施形態の産業上の利用可能性の説明に鑑みて、当業者にはより明らかとなるであろう。
【００１４】
本発明の実施形態の目的および利点は、添付の図面の各図と共に、以下の詳細な説明から明らかとなるであろう。
【００１５】
図面の様々な図では、同様または類似の要素またはステップを示すのに同様の参照が使用される。
【発明を実施するための最良の形態】
【００１６】
目的を達成するための形態に関して本発明の一実施形態を説明するが、本発明の精神または範囲から逸脱することなく、こうした教示に鑑みて変形形態を実施できることを当業者は理解されよう。
【００１７】
本明細書で説明し、かつ／または図面に示される本発明の実施形態および変形形態は、例として提示されるに過ぎず、本発明の範囲に関して限定するものではない。具体的に述べるのでない限り、本発明の個々の態様および構成要素を省略または変更することができ、あるいはそれらの代わりに、周知の均等物、または将来に開発される可能性のあるような、もしくは将来に受け入れられる代用品であることが判明する可能性のあるような、まだ未知の代用品を代用することができる。潜在的な応用例の範囲が広く、本発明が多くのそのような変形形態に適合可能であることが意図されるので、特許請求される発明の精神および範囲内にとどまりながら、様々な応用例に本発明を変更することもできる。
【００１８】
本発明の好ましい実施形態は、コンピュータのパイプラインおよびアレイでデータを処理する改良型のシステムおよび方法である。本明細書の様々な図面、特に図１２ｂに示されるように、本発明の好ましい実施形態が、全体参照番号１０００で示される。
【００１９】
本発明に対する背景および基礎として、非同期コンピュータ通信の詳細なバックグラウンド例がまず提示され、次いで、そのような非同期コンピュータ通信でのマルチポート読取りオペレーションおよびマルチポート書込みオペレーションの詳細なバックグラウンド例がさらに提示される。
【００２０】
最初のバックグラウンド例について、コンピュータアレイが図１で示され、その中で全体参照番号１０によって指定される。コンピュータアレイ１０は、複数の（図示される例では２４個）コンピュータ１２を有する（アレイの例では「コア」または「ノード」と呼ばれることもある）。図示される例では、コンピュータ１２のすべてが、単一のダイ１４上に配置される。以下でより詳細に論じるが、コンピュータ１２のそれぞれは、一般には独立に機能するコンピュータである。コンピュータ１２は、複数の相互接続データバス１６によって相互接続される（その量は、以下でより詳細に論じる）。この例では、データバス１６は双方向非同期高速並列データバスであるが、この目的で他の相互接続手段を利用できることは本技術の範囲内にある。アレイ１０のこの実施形態では、コンピュータ１２間のデータ通信が非同期であるだけでなく、個々のコンピュータ１２も内部非同期モードで動作する。これが重要な利点をもたらすことが判明した。例えば、クロック信号をコンピュータアレイ１０全体にわたって配布する必要がないので、非常に多くの電力が節約される。さらに、クロック信号を配布する必要がないことにより、アレイ１０のサイズを制限する可能性があり、または他の困難を引き起こす可能性のある、多くのタイミング問題が解消される。
【００２１】
理解しやすいように図１からは省略されている、ダイ１４上の追加の構成要素があることを当業者は理解されよう。そのような追加の構成要素は、電源バス、外部接続パッド、およびマイクロプロセッサチップの他のそのような一般的な態様を含む。
【００２２】
コンピュータ１２ｅは、アレイ１０の縁部にないコンピュータ１２のうちの１つの一例である。すなわち、コンピュータ１２ｅは、４つの直交して隣接するコンピュータ１２ａ、１２ｂ、１２ｃ、および１２ｄを有する。アレイ１０のコンピュータ１２間の通信のより詳細な議論に関連して、このコンピュータ１２ａから１２ｅのグループ化が以下で使用される。図１からわかるように、コンピュータ１２ｅなどの内側のコンピュータは、バス１６を介して直接通信することのできる４つの他のコンピュータを有する。以下の議論では、論じられる原理は、アレイ１０の縁部のコンピュータ１２がコンピュータ１２のうちの３つのみと直接通信し、または隅のコンピュータ１２の場合にはコンピュータ１２の他の２つのみと直接通信することを除いて、コンピュータ１２のすべてに当てはまる。
【００２３】
図２は、コンピュータ１２の一部のみを示す、具体的にはコンピュータ１２ａから１２ｅが含まれる、図１の一部のより詳細な図である。図２はまた、読取り線１８、書込み線２０、および複数（この例では１８本）のデータ線２２をそれぞれ有するデータバス１６を示す。データ線２２は、１つの１８ビット命令語の各ビットをすべて、並列に概して同時に転送することができる。代替実施形態では、コンピュータ１２の一部が隣接するコンピュータの鏡像であることに留意されたい。しかし、コンピュータ１２がすべてまったく同様に配向されるか、それとも隣接するコンピュータの鏡像として配向されるかはここでは重要ではなく、本明細書ではこの潜在的な複雑さをさらには論じない。
【００２４】
コンピュータ１２ｅなどのコンピュータ１２は、その読取り線１８の１、２、３、または４本すべてをセットすることができ、それによってそれぞれの１、２、３、または４つすべての隣接するコンピュータ１２からデータを受信する準備ができる。同様に、コンピュータ１２がその書込み線２０の１、２、３、または４本すべてを「ハイ」にセットすることも可能である（どちらのケースも以下でより詳細に論じる）。
【００２５】
隣接するコンピュータ１２ａ、１２ｂ、１２ｃ、または１２ｄのうちの１つが、それ自体とコンピュータ１２ｅとの間の書込み線２０を「ハイ」にセットしたとき、コンピュータ１２ｅが既に対応する読取り線１８を「ハイ」にセットしている場合、ワードが、関連するデータ線２２上で、コンピュータ１２ａ、１２ｂ、１２ｃ、または１２ｄからコンピュータ１２ｅに転送される。次いで、送信側コンピュータ１２は書込み線２０を解放し、（この例では）受信側コンピュータ１２ｅが書込み線２０と読取り線１８をどちらも「ロー」に引き下げる。後者の動作は、データが受信されたことを送信側コンピュータ１２に対して肯定応答することになる。上記の説明は、必ずしもイベントのシーケンスを順番に示すことを意図するものではないことに留意されたい。実際には、受信側コンピュータは、送信側コンピュータ１２がその書込み線２０を解放する（「ハイ」に引き上げることを停止する）より少し前に、書込み線２０を「ロー」にセットするように試みてもよい。そのような場合、送信側コンピュータ１２がその書込み線２０を解放するとすぐに、書込み線２０が受信側コンピュータ１２ｃによって「ロー」に引き下げられる。
【００２６】
この例では、プログラミングエラーのみが、１つのバス１６の両側にある両方のコンピュータ１２に、それらの間の読取り線１８の両方を同時に「ハイ」にセットし、またはそれらの間の書込み線２０の両方を同時に「ハイ」にセットするように試行させる。しかし、コンピュータ１２のうちの１つが、その対応する書込み線２０を「ハイ」にセットするために、選ばれたコンピュータ１２のうちの最初の１つからのデータを待機する待ち状態となることができるように、異なる組合せの読取り線１８を「ハイ」にセットすることが望ましい場合があることが現在は予想される。
【００２７】
上記で論じた例では、隣接するコンピュータ（コンピュータ１２ａ、１２ｂ、１２ｃ、または１２ｄのうちの１つまたは複数から選択された）がその書込み線２０を「ハイ」にセットする前に、コンピュータ１２ｅの読取り線１８の１つまたは複数を「ハイ」にセットするものとしてコンピュータ１２ｅを説明した。しかし、このプロセスは確かに、逆の順序で行うことができる。例えば、コンピュータ１２ｅがコンピュータ１２ａに書き込むことを試みていた場合、コンピュータ１２ｅは、コンピュータ１２ｅとコンピュータ１２ａとの間の書込み線２０を「ハイ」にセットする。コンピュータ１２ｅとコンピュータ１２ａとの間の読取り線１８がまだコンピュータ１２ａによって「ハイ」にセットされていない場合、コンピュータ１２ｅは、コンピュータ１２ａが読取り線１８を「ハイ」にセットするまで単に待機することになる。次いで、上記で論じたように、読取り線１８と書込み線２０の対応する対の両方が「ハイ」であるとき、データ線２２上での転送を待機中のデータが転送される。その後に、送信側コンピュータ１２ｅが書込み線２０を解放するとすぐに、（この例では）受信側コンピュータ１２ａが、（この例では）２つのコンピュータ１２ｅと１２ａの間の読取り線１８と書込み線２０の両方を「ロー」にセットする。
【００２８】
コンピュータ１２ｅなどのコンピュータ１２が書込みを予想してその書込み線２０の１つを「ハイ」にセットしたときはいつでも、コンピュータ１２は、データが送信されるべきコンピュータ１２が既にその読取り線１８を「ハイ」にセットしていない限り、適切な隣接するコンピュータ１２からデータが上述のように「要求される」まで、本質的に電力を使用せずに単に待機し、データが送信されるべきコンピュータ１２が既にその読取り線１８を「ハイ」にセットしている場合、データが直ちに送信される。同様に、コンピュータ１２が読み取りを予想してその読取り線１８の１つまたは複数を「ハイ」にセットしたときはいつでも、コンピュータ１２は、２つのコンピュータ１２間で命令語を転送するために、選択されたコンピュータ１２に接続された書込み線２０が「ハイ」となるまで、本質的に電力を使用せずに単に待機する。
【００２９】
コンピュータ１２を上述のように機能させるためのいくつかの潜在的な手段および／または方法が存在する可能性がある。しかし、この例では、コンピュータ１２は（コンピュータ１２間のデータの非同期式の転送に加えて）内部的に概して非同期で動作するので、コンピュータ１２はそのように単純に振る舞う。すなわち、命令は順次完了する。書込み命令または読取り命令が行われるとき、その命令が完了するまで（または、恐らくは別法として、「リセット」などによってアボートされるまで）、次の動作がない可能性がある。従来技術の認識では、規則的なクロックパルスは存在しない。むしろ、実行中の命令が読取り型または書込み型命令ではないとき（読取り型または書込み型命令は別の実体による完了を必要とすると仮定すると）、または読取り型または書込み型オペレーションが実際に完了したときにのみ、次の命令を実施するためにパルスが生成される。
【００３０】
図３は、図１および２のコンピュータ１２のうちの１つの一例の一般的レイアウトを示すブロック図である。図３からわかるように、コンピュータ１２のそれぞれは、それ自体のＲＡＭ２４およびＲＯＭ２６を有する、概して内蔵式のコンピュータ（ｇｅｎｅｒａｌｌｙ  ｓｅｌｆ  ｃｏｎｔａｉｎｅｄ  ｃｏｍｐｕｔｅｒ）である。この例でコンピュータ１２が単一のチップ上に組み合わされると仮定すると、前述のように、コンピュータ１２は、個々の「コア」と呼ばれることもある。
【００３１】
コンピュータ１２の他の基本的構成要素は、リターンスタック２８、命令エリア３０、算術論理演算部（ＡＬＵ３２）、データスタック３４、および命令を復号化する復号化論理区域３６である。この例のコンピュータ１２などのスタックベースのコンピュータの動作に当業者は一般に通じているであろう。コンピュータ１２は、データスタック３４および別々のリターンスタック２８を有するデュアルスタックコンピュータである。
【００３２】
この実施形態では、コンピュータ１２は、隣接するコンピュータ１２と通信する４つの通信ポート３８を有する。通信ポート３８は、オフステータス、受信ステータス（信号をコンピュータ１２内に駆動する）、および送信ステータス（信号をコンピュータ１２の外に駆動する）を有するトライステートドライバである。もちろん、特定のコンピュータ１２がコンピュータ１２ｅの例などのようにアレイの内側にない場合（図１）、通信ポートのうちの１つまたは複数は、少なくとも本明細書に記載の目的では、その特定のコンピュータでは使用されない。命令エリア３０は、いくつかのレジスタ４０を含み、この例では、Ａレジスタ４０ａ、Ｂレジスタ４０ｂ、Ｐレジスタ４０ｃ、ならびにＩ／Ｏ制御およびステータスレジスタ（ＩＯＣＳレジスタ４０ｄ）である。この例では、Ａレジスタ４０ａおよびＩＯＣＳレジスタ４０ｄはフル１８ビットレジスタであり、Ｂレジスタ４０ｂおよびＰレジスタ４０ｃは９ビットレジスタである。
【００３３】
本技術はこの例によって限定されるわけではないが、このコンピュータ１２は、ネイティブＦｏｒｔｈ言語命令を実行するように実装される。Ｆｏｒｔｈコンピュータ言語に通じている人は理解するであろうが、Ｆｏｒｔｈ「ワード」と呼ばれる複雑なＦｏｒｔｈ命令が、コンピュータ内に設計されたネイティブプロセッサ命令から構築される。Ｆｏｒｔｈワードの集まりは「辞書」と呼ばれる。他の言語では、これは「ライブラリ」と呼ばれることがある。以下でより詳細に説明するように、コンピュータ１２は、ＲＡＭ２４、ＲＯＭ２６、または直接的にデータバス１６（図２）のうちの１つから、一度に１８ビットを読み取る。しかし、Ｆｏｒｔｈの大部分の命令（オペランドなし命令として知られる）は、スタック２８および３４から直接的にそのオペランドを得るので、一般にはわずか５ビット長のビットを生成し、それによって、グループ内の最後の命令が３ビットのみを必要とする限定された命令のセットから選択されることを条件として、最大４つの命令を単一の１８ビット命令語内に含めることができる。この実施形態では、データスタック３４内の上端の２つのレジスタはＴレジスタ４４およびＳレジスタ４６である。図３には、スロットシーケンサ４２もブロック図形式で示されている（以下で詳細に論じる）。
【００３４】
図４は、命令語４８の図式表現である（命令語４８は、実際には命令、データ、またはその組合せを含むことができることに留意されたい）。命令語４８は１８ビット５０からなる。これは、ビット５０のそれぞれが「１」または「０」となる２進コンピュータである。本明細書で先に論じたように、１８ビット幅の命令語４８は、スロット０  ５４ａ、スロット１  ５４ｂ、スロット２  ５４ｃ、およびスロット３  ５４ｄと呼ばれる４つのスロット５４内に最大で４つの命令５２を含むことができる。この実施形態では、１８ビット命令語４８は常に全体として読み取られる。したがって、命令語４８内に最大で４つの命令を有する可能性が常に存在するので、ｎｏ−ｏｐ（ノーオペレーション）命令が、利用可能なスロット５４のすべてを使用することが不必要であるとき、さらには望ましくないときのインスタンスを与えるために、コンピュータ１２の命令セット内に含まれる。特定の一実施形態によれば、交互スロット（具体的にはスロット１  ５４ｂおよびスロット３  ５４ｄ）内のビット５０の極性（アクティブ「ロー」に対するアクティブ「ハイ」）が反転されることに留意されたい。しかし、これは必要なものではなく、したがって、本技術をより良く説明するために、以下の議論では、この潜在的な複雑さも回避される。
【００３５】
図５は、図３のスロットシーケンサ４２の略図表現である。図５からわかるように、スロットシーケンサ４２は、環に配置された複数（この例では１４個）のインバータ５６と１つのＮＡＮＤゲート５８とを有し、それによって、信号が１４個のインバータ５６およびＮＡＮＤゲート５８を通過するときに奇数回反転される。ＯＲゲート６０への２つの入力の一方が「ハイ」となったときに、信号がスロットシーケンサ４２で開始する。第１ＯＲゲート入力６２が、実行中の命令５２のｉ４ビット６６（図４）から導出される。ｉ４ビット６６が「ハイ」である場合、その特定の命令５２はＡＬＵ命令であり、ｉ４ビット６６は「１」である。ｉ４ビット６６が「１」である場合、第１ＯＲゲート入力６２は「ハイ」であり、スロットシーケンサ４２がトリガされ、次の命令５２の実行を引き起こすパルスが開始される。
【００３６】
第１ＯＲゲート入力６２が「ハイ」となることによって、または第２ＯＲゲート入力６４が「ハイ」となることによってスロットシーケンサ４２がトリガされたとき（以下で説明する）、信号はスロットシーケンサ４２を２周し、その度にスロットシーケンサ出力６８で出力を生成する。信号がスロットシーケンサ出力６８を通過する１回目は、「ロー」となり、２回目は、スロットシーケンサ出力６８での出力は「ハイ」となる。スロットシーケンサ出力６８からの比較的広い出力がパルス発生器７０（ブロック図形式で示す）に供給され、パルス発生器７０は、狭いタイミングパルスを出力として生成する。コンピュータ１２の動作を正確に開始するために狭いタイミングパルスが望ましいことを当業者は理解するであろう。
【００３７】
実行中の特定の命令５２が読取り命令または書込み命令であるとき、または実行中の命令５２がシーケンス中の次の命令５２の即時実行をトリガすることが望ましくない任意の他の命令であるとき、ｉ４ビット６６は「０」（「ロー」）であり、したがって第１ＯＲゲート入力６２も「ロー」である。コンピュータ１２などの装置内のイベントのタイミングは一般に非常に重要であり、これには例外はないことを当業者は理解されよう。スロットシーケンサ４２の検査時に、当該環の第２周目を開始するために、信号がＮＡＮＤゲート５８を通過して循環した後になるまで、ＯＲゲート６０からの出力が「ハイ」のままでなければならないことを当業者は理解されよう。その後に、望ましくない回路の発振の継続を防止するために、第２周目中にＯＲゲート６０からの出力が「ロー」となる。
【００３８】
上記の議論に照らして理解することができるように、ｉ４ビット６６が「０」であるとき、以下で論じる第２ＯＲゲート入力６４が「ハイ」でないと仮定すると、スロットシーケンサ４２はトリガされない。
【００３９】
上記で論じたように、各命令５２のｉ４ビット６６は、その命令が読取り型または書込み型命令であるかどうかに従ってセットされる。命令５２内の残りのビット５０は、その命令に関する特定の演算コードの残りを与える。読取り型または書込み型命令の場合、データをその特定のコンピュータ１２内のどこから読むべきか、またはどこに書き込むべきかを示すためにビットのうちの１つまたは複数を使用することができる。この例では、書き込むべきデータは常にＴレジスタ４４（データスタック３４の上端）から来るが、データは、それを実行できるところからＴレジスタ４４または命令領域３０のいずれかに選択的に読み込むことができる。これは、この特定の実施形態では、データまたは命令を本明細書に記載の方式で通信することができ、したがって必須ではないがデータバス１６から命令を直接的に実行することができるからである。さらに、ポート３８のうちのいずれかを読取りまたは書込みのためにセットすべきである場合にそれがポート３８のうちのどれであるかを示すのに、ビット５０のうちの１つまたは複数が使用される。この後者のオペレーションは、１つまたは複数のビットを使用してＡレジスタ４０ａ、Ｂレジスタ４０ｂなどのレジスタ４０を指定することによって任意に実施される。そのような例では、指定されたレジスタ４０には、ポート３８のそれぞれ（さらには、メモリ、外部通信ポートなど、コンピュータ１２が通信しようと試みている可能性のある他の潜在的実体）に対応するビットを有するデータがプリロードされる。例えば、特定のレジスタ４０内の４つのビットのそれぞれは、上ポート３８ａ、右ポート３８ｂ、左ポート３８ｃ、下ポート３８ｄに対応することができる。そのような場合、そうしたビット位置のいずれかに「１」が存在する場合、通信は、対応するポート３８を介して行うようにセットされる。
【００４０】
すぐ後に続く例は、コンピュータ１２ｅがコンピュータ１２ｃに書き込むことを試みている通信を仮定するが、この例は、任意の隣接するコンピュータ１２間の通信に適用可能である。書込み側コンピュータ１２ｅで書込み命令が実行されるとき、選択された書込み線２０が「ハイ」にセットされる（この例では、コンピュータ１２ｅと１２ｃの間の書込み線２０）。対応する読取り線１８が既に「ハイ」である場合、選択された位置から、選択された通信ポート３８を介してデータが直ちに送られる。あるいは、対応する読取り線１８がまだ「ハイ」でない場合、コンピュータ１２ｅは、対応する読取り線１８が「ハイ」になるまで動作を単に停止する。読取り型または書込み型命令が存在するときにコンピュータ１２ａを停止する（またはより正確には、コンピュータ１２ａの次のオペレーションを可能にしない）機構は、本明細書で先に論じた。簡単に言えば、命令５２の演算コードは、ｉ４ビット６６位置で「０」を有し、したがってＯＲゲート６０の第１ＯＲゲート入力６２は「ロー」であり、したがってスロットシーケンサ４２は、イネーブリングパルスを生成するようにトリガされない。
【００４１】
読取り型または書込み型命令が完了したときにコンピュータ１２ｅの動作がどのように再開されるかに関して、それに関する機構は以下の通りである。コンピュータ１２ｅと１２ｃの間の読取り線１８と対応する書込み線２０がどちらも「ハイ」であるとき、両方の線１８および２０は、それを「ハイ」に保っているそれぞれのコンピュータ１２によって解放される（この例では、送信側コンピュータ１２ｅが書込み線２０を「ハイ」に保っていることになり、受信側コンピュータ１２ｃが読取り線１８を「ハイ」に保っていることになる）。次いで、受信側コンピュータ１２ｃは両方の線１８および２０を「ロー」に引き下げる。実際には、受信側コンピュータ１２ｃは、送信側コンピュータ１２ｅが書込み線２０を解放する前に、線１８および２０を「ロー」に引き下げるのを試みることがある。しかし、線１８および２０が「ハイ」に引き上げられ、「ロー」に弱く保たれる（ラッチされる）だけなので、線１８または２０を「ハイ」にラッチしているコンピュータ１２によって線１８または２０が解放されるまで、線１８または２０を「ロー」に引き下げるどんな試みも実際には成功しない。
【００４２】
データバス１６内の両方の線１８および２０が「ロー」に引き下げられるとき、これが「肯定応答」条件である。肯定応答条件時に、コンピュータ１２ｅおよび１２ｃのそれぞれがそれ自体の内部肯定応答線７２を「ハイ」にセットする。図５からわかるように、肯定応答線７２は第２ＯＲゲート入力６４を供給する。ＯＲゲート６０入力６２または６４のいずれかへの入力がＯＲゲート６０の出力を「ハイ」にするので、これにより、本明細書で先に述べた方式でスロットシーケンサ４２の動作が開始し、それによって命令語４８の次のスロット５４の命令５２が実行される。スプリアスアドレスがアドレスバスに到達するのを防止するために、次の命令５２が復号化されるまで、肯定応答線７２は「ハイ」のままとどまる。
【００４３】
命令５２が命令語４８のスロット３位置で実行中であるいずれのケースでも、コンピュータ１２は、もちろんｉ４ビット６６が「０」でない限り、次の待機中の１８ビット命令語４８をフェッチする。実際には、フェッチが命令語４８内のすべての命令５２の実行の終了前に開始することができるように、命令を「プリフェッチ」する方法および装置を含めることができる。しかし、これもまた非同期データ通信には不可欠ではない。
【００４４】
コンピュータ１２ｅがコンピュータ１２ｃに書き込んでいる上記の例を詳細に説明した。上記の議論に照らして理解することができるように、コンピュータ１２ｅがまずコンピュータ１２ｃに書き込むことを試みるとしても、またはコンピュータ１２ｃがまずコンピュータ１２ｅから読み取ることを試みるとしても、動作は本質的に同じである。コンピュータ１２ｅと１２ｃの両方の準備ができるまで、動作は完了することができず、コンピュータ１２ｅと１２ｃのどちらが最初に準備ができるとしても、第１コンピュータ１２は、他方のコンピュータ１２ｅまたは１２ｃが転送を完了するまで、単に「スリープに移る」。上述のプロセスを見る別の方法は、実際には、書込み側コンピュータ１２ｅと受信側コンピュータ１２ｃがそれぞれ書込み命令および読取り命令をそれぞれ実行するときにどちらもスリープに移るが、最後にトランザクションに入ったものが、読取り線１８と書込み線２０がどちらも「ハイ」となったときにほぼ瞬間的に覚醒するのに対して、トランザクションを開始する第１コンピュータ１２は、第２コンピュータ１２がプロセスを完了する準備ができるまで、ほぼ無期限にスリープのままとどまることができる。
【００４５】
装置間の効率的な非同期通信を可能にするために重要な機能は、何らかの種類の肯定応答信号または条件であると考えられる。従来技術では、装置間の大部分の通信がクロック同期されており、受信側装置が適切にデータを受信したことを送信側装置が知るための直接的な方法はない。データが正しく受信されたことを保証するのを試みるためにチェックサムオペレーションなどの方法を使用することもできたが、送信側装置は、動作が完了したという直接的な表示を有さない。本明細書に記載のこの方法は、装置間の非同期通信を可能にし、または少なくとも現実的にする、必要な肯定応答条件を提供する。さらに、肯定応答条件は、１つまたは複数の装置が肯定応答条件が生じるまで「スリープに移る」ことをも可能にする。もちろん、コンピュータ１２間で送信されている別々の信号によってコンピュータ１２間で肯定応答条件を通信することができる（データバス１６を介して、または別々の信号線を介して）。しかし、通信を実際に実施するために、肯定応答のための方法がどんな追加の信号、クロックサイクル、タイミングパルスも必要とせず、説明したもの以上のそのようなどんな資源も必要としないという点で、ここではさらに節約が関係することを理解することができる。
【００４６】
それらを実施する手順および手段の上記の議論に照らして、以下のバックグラウンド方法の一例の簡潔な説明がここで理解される。図６は、この方法例を示すフロー図７４である。「通信開始」オペレーション７６では、あるコンピュータ１２が命令５２を実行し、命令５２は、そのコンピュータ１２に別のコンピュータ１２と通信することを試みさせる。これは、書込みの試行でもまたは読取りの試行でもよい。「通信開始」オペレーション７６と概して同時に行われる、「第１線を「ハイ」にセット」オペレーション７８では、（第１コンピュータ１２が読取りを試みているか、それとも書込みを試みているかに応じて）読取り線１８または書込み線２０が「ハイ」にセットされる。本明細書で先に詳細に説明したように、「第１線を「ハイ」にセット」オペレーション７８の一部として、そのように行うコンピュータ１２は、オペレーションの現在説明している実施形態に従って、オペレーションを中止する。「第２線を「ハイ」にセット」オペレーション８０では、第２線（書込み線２０または読取り線１８）が第２コンピュータ１２によって「ハイ」にセットされる。「データを通信オペレーション」８２では、データ（または命令など）がデータ線２２を介して送信および受信される。「線を「ロー」に引き下げ」オペレーション８４では、読取り線１８および書込み線２０が解放され、次いで「ロー」に引き下げられる。「続行」オペレーション８６では、肯定応答条件がコンピュータ１２にそれらのオペレーションを再開させる。この例の場合、肯定応答条件は肯定応答信号８８（図５）を引き起こし、この場合は肯定応答信号８８は、単に肯定応答線７２の「「ハイ」」条件である。
【００４７】
第２のバックグラウンド例について、図７は、図１および２のコンピュータ１２のコンピュータアレイ１０の区域１００を示す詳細図である。しかし、区域１００が第１バックグラウンド例の技術を基に構築されることを強調するために、コンピュータ（ノート、コアなど）をＣＰＵ１２と呼ぶ。
【００４８】
図７からわかるように、中央ＣＰＵ１２ｅが、隣接するＣＰＵ１２ａ、１２ｂ、１２ｃ、および１２ｄにそれぞれのデータバス１６を介して接続され、データバス１６はそれぞれ、読取り線１８、書込み線２０、および１８本のデータ線２２を含む。しかし、ＣＰＵ１２では、バス１６は内部的に接続され、複数のポート３８（図３）を同時に読み取るべき場合、未定義のハードウェア状態を生み出すことができる。そのような状況からの回復を可能にするために、この条件はソフトウェア設計に反映されるべきである。
【００４９】
ＣＰＵ１２ｅは、それ自体のメモリ１０２（例えば図３に示されるＲＡＭ２４およびＲＯＭ２６）を有し、メモリ１０２は、それ自体のソフトウェア１０４を含むことができる。ＣＰＵ１２ｅは、オペレーションのための操作ポインタを保有するための１組のレジスタ４０も有することができる。これらは、データオペレーション用のＡレジスタ４０ａおよびＢレジスタ４０ｂと、プログラムポインタを保持するためのＰレジスタ４０ｃと、Ｉ／Ｏ制御およびステータスレジスタ（ＩＯＣＳレジスタ４０ｄ）を含む（図３も参照）。
【００５０】
図８ａ〜ｆは、図７の区域１００のＣＰＵ１２で使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。図８ａは、レジスタ４０内のハイアドレスビット１０８が「１」にセットされたときに、レジスタ４０が通常はポート３８のうちの１つまたは複数をアドレス指定することを示す。逆に、図示していないが、ハイアドレスビット１０８が「０」であるとき、レジスタ４０は、メモリ１０２内の位置をアドレス指定している。ハイアドレスビット１０８が「ハイ」にセットされるとき、次の８ビットは選択ビット１１０として働き、次いで選択ビットは、特定のどのポート３８が選択され、それを読み取るべきか、それとも書き込むべきかを指定する。したがって、ＣＰＵ１２ｅ内のレジスタ４０では、「Ｒｉｇｈｔ」は、隣接する右側または東側のＣＰＵ１２ａを示し、「Ｄｏｗｎ」は、隣接する下側または南側のＣＰＵ１２ｂを示し、「Ｌｅｆｔ」は、隣接する左側または西側のＣＰＵ１２ｃを示し、「Ｕｐ」は、隣接する上側または北側のＣＰＵ１２ｄを示す。アクション「ＲＲ」に関してセットされる選択ビット１１０は、保留中の読取り要求を示し、アクション「ＷＲ」に関してセットされる選択ビット１１０は、保留中の書込み要求を示す。
【００５１】
整合性と、混乱を最小限に抑えるために、「ハイ」値または「１」が真条件を示し、「ロー」値または「０」が偽条件を示すという一般的規約を守る。しかし、これは要件ではなく、代替規約を使用することができる。例えば、ＣＰＵ１２の現在のところ好ましいある実施形態は、ＲＲビット位置では真に対して「０」を使用し、ＷＲビット位置では真に対して「１」を使用する。
【００５２】
ちなみに、このポートアドレス復号化手法は、ハイアドレスビット１０８を「１」にセットし、選択ビット１１０のいずれもセットしないことも可能にすることに留意されたい。有益なことに、このことを使用して、ＣＰＵ１２内の別の要素をアドレス指定することができる。例えば、ＩＯＣＳレジスタ４０ｄをこの方式でアドレス指定することができる。
【００５３】
ＣＰＵ１２のこの実施形態では、ＩＯＣＳレジスタ４０ｄは、ポート３８の読取り線１８および書込み線２０の現ステータスをレポートするのに同一のポートアドレス構成を使用する。これにより、Ｉ／Ｏオペレーションのステータスをプログラム式にテストすることを可能にするのにＩＯＣＳレジスタ４０ｄ内のこうしたそれぞれのビットが有用なものとなる。例えば、ＣＰＵ１２ｅにＣＰＵ１２ｂからの非同期読取りを委ねて、ＣＰＵ１２ｂがまだ共有書込み線２０を「ハイ」にセットしていない場合にＣＰＵ１２ｅがスリープに移ることになるのではなく、ＣＰＵ１２ｅは、ＩＯＣＳレジスタ４０ｄ内のビット１３（Ｄｏｗｎ／ＷＲ）の状態（ＣＰＵ１２ｂをＣＰＵ１２ｅに接続する書込み線２０の状態を反映する）をテストし、レディデータに分岐し、ＣＰＵ１２ｂからレディデータを直ちに読み取るか、または別の命令に分岐し、別の命令を直ちに実行することができる。
【００５４】
図８ｂは単純な第１の例を示す。ここでは、Ｒｉｇｈｔ／ＲＲに関する選択ビット１１０がセットされ、ポート３８ｂが読み取られるべきであることを示す。図８ｃは単純な第２の例を示す。ここでは、Ｒｉｇｈｔ／ＷＲに関する選択ビット１１０がセットされ、この場合、ポート３８ｂが書き込まれるべきことを示す。
【００５５】
通常、１つの選択ビット１１０のみがイネーブルされ、単一ポート３８および任意の所与の時間での単一動作（読取りまたは書込み）が指定される。次いで、複数のハイビットはエラー条件として復号化される。しかし、本明細書で開示される新規な手法は、この規約に従わない。むしろ、有益なことに、ポート３８に関する選択ビット１１０のうちの複数を同時にイネーブルすることができ、複数の読取りおよび／または書込みオペレーションを要求する。そのような場合、新しいデータが存在するという信号を含むデータがそれぞれのポート３８のすべてに対して提示される。
【００５６】
図８ｄ〜ｆは、複数の読取りおよび／または書込みオペレーションの例を示す。図８ｄは、ＣＰＵ１２ｅ内のレジスタ４０がどのようにＣＰＵ１２ｂからの読取りとＣＰＵ１２ａへの書込みを同時に指定することができるかを示す。図８ｅは、ＣＰＵ１２ｂからの読取りとＣＰＵ１２ｃへの書込みをどのように同時に指定することができるかを示す。図８ｆは、ＣＰＵ１２ｂからの読取りと、ＣＰＵ１２ａまたはＣＰＵ１２ｃへの書込みを指定することを示す（予示として、図８ｄ〜ｆを、図９およびそこでの矢印１３２および１３４で表されるデータ転送経路と比較することができる）。
【００５７】
実際には、複数の書込み中に、ＣＰＵ１２ｅはデータを提示し、ターゲットＣＰＵ１２ａ、１２ｂ、１２ｃ、または１２ｄのうちの１つまたは複数と共有するバス１６上で書込み線２０を「ハイ」にセットする。次いでソースＣＰＵ１２ｅは、データが読み取られたという表示を受信するまで待機する。ある最終的な時点で、恐らくは、ターゲットＣＰＵ１２ａ、１２ｂ、１２ｃ、または１２ｄのうちの１つまたは複数が、ＣＰＵ１２ｅと共有するバス１６上でそのそれぞれの読取り線１８を「ハイ」にセットする。次いで、ターゲットＣＰＵ１２はデータを正式に読み取り、ＣＰＵ１２ｅと共有するバス１６上でそれぞれの読取り線１８と書込み線２０をどちらも「ロー」に引き下げ、したがってＣＰＵ１２ｅからのデータの受信を肯定応答する。
【００５８】
図９は、図７および図８ｄ〜ｆに示される複数書込み手法を１つのデータ語１２０内に最大で４つの命令を含める能力とどのように組み合わせることができるかを示す概略ブロック図である。各命令は通常は５ビットであり、したがって１８ビット幅のデータ語１２０は、約４つの命令を保持することができる。その場合、最後の命令は３ビットのみとなる可能性があるが、これは多くの命令にとって十分である。この特に有益な一態様は、非常に効率的なデータ転送機構を使用することを可能にすることである。
【００５９】
以下では、＠＝ｆｅｔｃｈ、！＝ｓｔｏｒｅであり、ｐが「プログラムカウンタ」またはＰレジスタ４０ｃを指す。＠ｐ＋および！ｐ＋中の「＋」は、レジスタ内容が別のレジスタまたはポートをアドレス指定する場合にレジスタ内容が増分されないことを除いて、実行後にレジスタ内のメモリアドレスを増分することを指す。したがって、これらの後者のケースでの「＋」は、これらの命令を通常の＠ｐ命令および！ｐ命令ではなく、「特別」なものとして区別する。
【００６０】
図９は、あるＣＰＵ１２から別のＣＰＵ１２にデータを転送する単一命令シーケンスプログラムを、データの読取りおよび書込みに使用されるＰレジスタ４０ｃのみと共にどのように１８ビットデータ語１２０内に含めることができるかについての一例を提示する。ここで、「＠ｐ＋」は、スロット０  ５４ａ内にロードされた命令１２２である。これは、Ｐレジスタ４０ｃで指定される現アドレスから次の１８ビットデータ語１２０をフェッチし、データ語１２０をデータスタック３４上にプッシュするリテラルオペレーションである（かつ、一般には、Ｐレジスタ４０ｃ内のアドレスを増分するが、そのアドレスがレジスタまたはポートに関するものであるときにこれが行われないことを除く。またここでは、Ｐレジスタ４０ｃ内のハイアドレスビット１０８は、ポートが指定されていることを示す）。次に、「．」はスロット１  ５４ｂ内にロードされた命令１２４である。これは、何も行わない単純なｎｏｐオペレーション（ノーオペレーション）である。次に、「！ｐ＋」は、スロット２  ５４ｃにロードされた命令１２６である。これは、データスタック３４から上端のデータ語１２０をポップし、この１８ビットデータ語１２０をＰレジスタ４０ｃで指定された現アドレスに書き込むストアオペレーションである。Ｐレジスタ４０ｃで指定されたアドレスは変化しておらず、単に機能的に、別個の隣接するＣＰＵ１２にアクセスさせることに留意されたい。最後に「ｕｎｅｘｔ」は、スロット３  ５４ｄにロードされる命令１２８である。これは、リターンスタック２８の上端が０であるかどうかに応じて異なる仕方で動作するｍｉｃｒｏ−ｎｅｘｔオペレーションである。リターンスタック２８が０でないとき、ｍｉｃｒｏ−ｎｅｘｔはリターンスタック２８を減分させ、実行のために、現在キャッシュされているデータ語１２０のスロット０  ５４ａ内の命令（すなわちここでの例では命令１２２）に進む。具体的には、ここでのｍｉｃｒｏ−ｎｅｘｔの使用は新しいデータ語１２０をフェッチすることを必要としないことに留意されたい。対照的に、リターンスタック２８が０であるとき、ｍｉｃｒｏ−ｎｅｘｔは、Ｐレジスタ４０ｃで指定された現アドレスから次のデータ語１２０をフェッチし、新しいデータ語１２０のスロット０  ５４ａ内の命令で実行を開始させる。
【００６１】
この特定の例では、Ｐレジスタ４０ｃに１０１１０００００ｂをロードすることができ、リターンスタック２８の上端は１０１ｂ（１０進数の５）を含むことができる。Ｐレジスタ４０ｃは１０１１０００００ｂを含むので（例えば、図８ａおよび８ｄを参照）、ここでの命令１２２内の「＠ｐ＋」は、ＣＰＵ１２ｅに（そのポート３８ｂを介して）ＣＰＵ１２ｂから次のデータ語１２０を読み取り、そのデータ語１２０をデータスタック３４上にプッシュするように命令する。しかし、Ｐレジスタ４０ｃ内のアドレスはポートに関するものであるので、そのアドレスは増分されない。ここでの命令１２４内の「．」ｎｏｐは単にフィラーであり、現データ語１２０の１８ビットを満たす働きをする。次に、Ｐレジスタ４０ｃは依然として１０１１０００００ｂを含むので、ここでの命令１２６内の「！ｐ＋」は、ＣＰＵ１２ｅにデータスタック３４の上端のデータ語１２０（命令１２２によってプットされたのとまさに同じデータ語１２０）をポップオフし、そのデータ語１２０を（ポート３８ａを介して）ＣＰＵ１２ａ書き込むように命令する。この場合も、アドレスがポートに関するものであるので、Ｐレジスタ４０ｃ内のアドレスは増分されない。次いで、命令１２８内の「ｕｎｅｘｔ」が、リターンスタック２８を１００ｂ（１０進数の４）まで減分させ、実行のために命令１２２に進む。命令１２２、１２４、１２６、および１２８内の単一語プログラムはこの方式で続行し、リターンスタック２８を０１１ｂ、０１０ｂ、００１ｂ、最終的には０００ｂ（１０進数の０）に減分し、ＣＰＵ１２ｂから次のデータ語１２０をフェッチし、この新しいデータ語１２０のスロット０  ５４ａ内の命令を実行する。
【００６２】
要約すると、ここでの例におけるＰレジスタ４０ｃには、ソースと宛先（ポート３８ｂおよび３８ａ、したがってＣＰＵ１２ｂおよび１２ａ）の両方を指定する１つのアドレス値がロードされ、リターンスタック２８には反復カウント（５）がロードされる。次いで５つのデータ語１２０がＣＰＵ１２ｅを介して効率的に転送され（「パイプラインされる」）、次いでＣＰＵ１２ｅは、やはりＣＰＵ１２ｂによって提供される第６データ語１２０のスロット０  ５４ａ内の命令に進む。
【００６３】
様々な他の利点は、この単純であるが洗練された手法の使用から生じる。例えば、Ａレジスタ４０ａおよびＢレジスタ４０ｂを使用する必要がなく、したがって他のデータ目的でそれらをＣＰＵ１２ｅで利用することができる。これに続いて、データ転送を実施するときにポインタスワッピング（トラッシング）も省略することができる。
【００６４】
例えば、データパイプライン化のための従来型ソフトウェアルーチンは、ある時点で、入力ポートからデータを読み取り、別の時点で、データを出力ポートに書き込む。この場合、使用中のそれぞれの入力ポートおよび出力ポートへのポインタに加えて、メモリへの少なくとも１つのポインタが必要となる。ポートは異なるアドレスを有するので、ここで続行するための最も直接的な方式は、スタックに対する入力ポートアドレスにリテラル命令をロードし、そのアドレスをアドレス指定レジスタにプットし、入力ポートからの読取りを実施し、次いで、スタックに対する出力ポートのアドレスにリテラル命令をロードし、そのアドレスをアドレス指定レジスタにプットし、出力ポートに対する書込みを実施することである。
【００６５】
この手法での２つのリテラルロードはそれぞれ４サイクルかかり、２つのレジスタセット命令はそれぞれ１サイクルかかる。これは、入力ポインタおよび出力ポインタのまさに設定時にループの内部で費やされる合計１０サイクルである。さらに、そのようなポインタスワッピングが必要となるときに追加のペナルティが存在する。ループの内部でメモリの３ワードが必要となり、したがって単一の１８ビットワード内部に含まれるループの使用を可能にしないからである。したがって、この例での命令ループは、メモリアクセスを伴う分岐を必要とし、それにより、４サイクルの別のオーバヘッドが加えられ、合計のポインタ交換およびループオーバヘッドが少なくとも１４サイクルとなる。
【００６６】
しかし対照的に、ＣＰＵ１２ではマルチポートアドレス指定が可能であるので、入力ポート３８と出力ポート３８の両方を選択するアドレスをＩ／Ｏループの外部にロードし、入力と出力の両方のために使用することができる。マルチポート読取り中に１つの隣接ＣＰＵのみからのデータが読み取られ、マルチポート書込み中に１つ隣接ＣＰＵのみが読み取るので、この手法は機能する。したがって、伝統的に入力ポインタおよび出力ポインタをセットするのに費やされるループの内部の１４サイクルオーバヘッドが不要となる。ループは依然として読取り命令および書込み命令を有するが、ここでは同一のポインタを共に使用することができ、それを変更する必要がない。
【００６７】
このことは、マルチポート書込み技法の使用により、あるタイプのＩ／Ｏループのオーバヘッドを１４サイクル（またはそれ以上）削減することができることを意味する。最良のケースでは、これにより、ＣＰＵ１２の処理ループで２３サイクルから６サイクルまで削減が可能となるということが本発明者らの意見であった。１サイクルが約１ナノ秒かかる状況では、このことは、実効プロセッサ速度が４３ＭＨｚから１６７ＭＨｚに増加することを表し、これはかなりの改善を表す。
【００６８】
少しの間、次に図８ｆおよび再度図９に進むと、これらは、単一語プログラムであっても複数書込みをどのように実施することができるかを示す。ここでは、ＣＰＵ１２ｅはＣＰＵ１２ｂから読み取り、ＣＰＵ１２ａまたはＣＰＵ１２ｃのいずれかに書き込む。実際には、ここでのパイプライン処理は、ＣＰＵ１２ａまたはＣＰＵ１２ｃの最初に利用可能なものに対するものである。このことは、ＣＰＵ１２で可能な柔軟性が加わることを示し、本発明によるＣＰＵ１２が以前は非常に困難または非現実的であると感じられた方式でどのように有用であるかについての単なる１つの可能な例である。
【００６９】
要約すると、ＣＰＵ１２は、ポート３８の読取りおよびポート３８へのジャンピングの両方を処理しなければならない。マルチポートアドレスから読み取り、またはマルチポートアドレスにジャンピングする際に、データまたは命令がどのポート３８から得られるかは、明示的コードが実行されて発見されることなしには未知である（最も高速な方式は、ポート３８が両方のＣＰＵ１２について同一であることに依拠する）。伝統的には、このことは、回避すべき問題と理解されるはずである。異なるデータまたはコードが異なるポートから来るからである。しかし、仮定される協調的環境では、本発明者らは、すべてを利点に変える方法を見つけ出してきた。そしてこれがそのようなケースであった。
【００７０】
ＣＰＵ１２が複数ポートアドレスから実行し、アドレス指定された隣接ＣＰＵ１２のすべてが協調的に（すなわち、同期して）書込み中である場合、ある隣接ＣＰＵ１２は命令ストリームを供給中でよく、異なるＣＰＵ１２はリテラルデータを提供する。リテラルフェッチ演算コード（＠ｐ＋）は、異なる隣接するＣＰＵ１２によって選択的に（すべてのリテラルがこれを行う必要はない）満たすことのできるＰレジスタ４０ｃ内のマルチポートアドレスからの読取りを生じさせる。このことは単に、隣接するＣＰＵ１２間の広範囲の「協調」を必要とする。
【００７１】
しかし、パイプラインマルチポート使用では、ある隣接ＣＰＵ１２が読取り中であり、あるＣＰＵ１２が書込み中である場合、同一のマルチポートアドレスに対する読取りおよび書込みは問題を引き起こさない。この概念は、そのようなマルチポートアドレスへのジャンピングおよびリテラルストア演算コード（！ｐ＋）の実行により、Ｐレジスタ４０ｃが、まったく安全に２つのポート３８をアドレス指定することが可能となることである。これにより、Ａレジスタ４０ａとＢレジスタ４０ｂの両方がローカル使用のために解放される。
【００７２】
データ（実際のデータまたはデータとして転送されている命令）が伝播するときに、ＣＰＵ１２に他の最適化を施すこともできる。図１０〜１２は一例を示し、現在の発明を提示する。
【００７３】
図１０は、上述のマルチリード／マルチライトシステムで伝播が反転しないように保証するための処理規則１０００の表である。規則１は直接的なものであり、各ＣＰＵがそのソースとして前のＣＰＵを「見る」べきであるというものである。規則２および規則３は少し理解しにくいが、液体を搬送するパイプラインをＣＰＵのパイプラインと比較することによって全般的に理解することができる。
【００７４】
規則２は、ＣＰＵのパイプラインが「ボトルネック」となることを回避する。明らかに、ＣＰＵのパイプラインがそれに供給されているデータについていけない場合、リアルタイムで動作できることにはならないことになる。そのことから、前のＣＰＵが書込みの準備ができる前、またはまさにその瞬間に、各ＣＰＵが最適に読取りの準備ができているべきであるということになる。もちろん、このことは（図１２ａ〜ｂが示すように）常に可能であるわけではないが、ＣＰＵをプログラムするときに、このことを目標として念頭に置いておくことは助けになる。図１１は、一連の接続されたＣＰＵ１１０２、１１０４、１１０６、１１０８を介してデータが左から右に順次転送されるときの、一連の時刻での最適化されたパイプライン１１００の状態を示すことによってこのことを示すブロック図である。時刻ｔでは、ＣＰＵ１１０２はＣＰＵ１１０４に書き込み（Ｗ）、ＣＰＵ１１０４、１１０６、１１０８はすべて読取り中である（Ｒ）。時刻ｔ＋１では、ＣＰＵ１１０４がデータを有し、ＣＰＵ１１０６、１１０８が読取り中にＣＰＵ１１０４はこれをＣＰＵ１１０６に書き込む。時刻ｔ＋２では、ＣＰＵ１１０６がデータを有し、ＣＰＵ１１０８が読取り中にＣＰＵ１１０６はこれをＣＰＵ１１０８に書き込む。
【００７５】
規則３は、ＣＰＵのパイプラインが「中断」するのを回避する（液体を搬送するパイプラインがここである程度損傷を受けるのと類似している）。図１２ａ〜ｂは、規則３に従わない場合、次いで従う場合の両方の場合に、図１１のパイプライン１１００内のデータの初期フローをスタイリスティックに示す略図である（時間は左から右に進む）。
【００７６】
図１２ａは、従来の読取り（Ｒ）、処理（Ｐ）、および書込み（Ｗ）の順序のオペレーションが使用された場合に、パイプライン１１００を通るデータフローを示す。オペレーションのすべては、実行のための最小限の時間を要するが（話を簡単にするためにここでは同じものとして示した）、読取り（Ｒ）および書込み（Ｗ）オペレーションは、対応する書込み（Ｗ）または読取り（Ｒ）が行われるのを待機する間に、最小限を超える追加の時間を必要とする可能性がある。手元のタスクに応じて、プロセス（Ｐ）オペレーションのための時間はかなり変化し、非同期ＣＰＵでは特にそうである。したがって、実際の応用例では、プロセス（Ｐ）オペレーションは通常、ここで示すよりも長い時間がかかり、図１２ａと共に示されるそのような問題は悪化する可能性が高い。
【００７７】
図１２ａでは、反転１１１２が示される。書込みオペレーション１１１４がここで開始したとき、２つの読取りオペレーション１１１６、１１１８が待機中であり、ＣＰＵ１１０８がＣＰＵ１１０６に書き込む。さらにパイプライン１１００では、このことがさらに悪化する可能性がある。例えば、ＣＰＵ１１０８が書込みを開始するとき、ＣＰＵ１１１０が処理または書込みでビジーである可能性があり、次いでＣＰＵ１１０６のみが読取りを試みていることがある。反転１１１２はほぼ確実にパイプライン１１００のプログラマが望むことまたは期待することではなく、計算の正確さを破壊し、またはパイプライン１１００が実行中のアプリケーションをクラッシュさせる可能性が高い。
【００７８】
図１２ａはまた、反転１１１２が、ＣＰＵ１１１０が作業を開始するためにデータの読取り（すなわち、待機中）に費やす時間をどれほど大幅に増すことになるかも示している。しかし、そのことについて、図１２ａと図１２ｂとを比較することからわかるように、図１２ａのパイプライン１１００全体にわたるタイミングが、他の点でも最適以下である可能性がある。
【００７９】
図１２ｂは、読取り（Ｒ）、書込み（Ｗ）、およびプロセス（Ｐ）の順序のオペレーションが使用される場合の、パイプライン１１００を通るデータフローを示す。ここからわかるように、反転は存在せず、ＣＰＵ１１０２、１１０４、１１０６、１１０８、１１１０はすべて、可能な限り早く、データを受信して作業を開始する。
【００８０】
図１２ｂに示す接合１１２０は、ここでのパイプライン１１００の有用な追加の特徴を示す（これらは分岐オペレーションと混同するはずである）。ＣＰＵでの読取り（Ｒ）および書込み（Ｗ）オペレーションの後、例えばＣＰＵ１１０２を取り上げると、ＣＰＵ１１０４に書き込まれたばかりのデータは必ずしもＣＰＵ１１０２から来たものではない。したがって、このデータは、ＣＰＵ１１０２での後続プロセス（Ｐ）オペレーションが共に作業するために利用可能とすることができる。このことは、同一の値でＣＰＵを初期化する（例えば、記憶位置を０にする、またはカウンタをリセットする）のに有用である。さらに、あるクラスのアルゴリズムは、このことによって益を受けることができる。例えば、単一のデータサンプルが複数のＣＰＵに提示され、次いでそれぞれで異なる係数値に対して処理される場合である。
【００８１】
交替で、ＣＰＵ１１０２、１１０４、１１０６、１１０８、１１１０のそれぞれが、パイプライン中のすべてのＣＰＵがデータを有するまで、初期読取り（Ｒ）、書込み（Ｗ）、および単一ｎｏｐ命令をプロセス（Ｐ）として使用することによって異なる第１データ値を備えることができ、それを用いて、それらのＣＰＵがすべて、実際の処理を並列に実行する。
【００８２】
本発明の実施形態に対して、その価値または範囲を変更することなく様々な追加の変更を行うことができる。例えば、本明細書では読取り命令および書込み命令に関して本発明を説明したが、実際には、複数の読取り型命令および／または複数の書込み型命令が存在することができる。ほんの一例として、コンピュータ１２の一実施形態では、レジスタを増分する書込み命令と、レジスタを増分しない別の書込み命令が存在することができる。同様に、本明細書で先に論じたように、書込み命令は、通信ポート３８などを選択するのにどのレジスタ４０が使用されるかに従って変化することができる。コンピュータ１２の設計者がどの変形形態を代替の読取り挙動の有用な選択肢とみなすかということのみに応じて、いくつかの異なる読取り命令も存在することができる。
【００８３】
同様に、本明細書では単一ダイ１４上のアレイ１０内のコンピュータ１２間の通信に関して本発明の実施形態を説明したが、コンピュータ１２とその専用メモリとの間の通信、またはアレイ１０内のコンピュータ１２と外部装置との間の（入力／出力ポートなどを介する）通信などの他の装置間通信を実施するのに、同じ原理および方法を使用することができ、または使用のために変更することができる。実際に、いくつかの応用例は、アレイのアレイを必要とする可能性があることが予想され、現在説明する装置間通信方法は、潜在的にアレイのアレイ間の通信に適用可能である。
【００８４】
コンピュータアレイ１０およびコンピュータ１２の特定の例と、規則１０００の特定の例を本明細書で説明したが、まだ想定されていないものに対する非常に多数の応用例が存在することが予期される。実際、本発明の利点の１つは、本発明の方法および装置を非常に様々な用途に適合させることができることである。
【００８５】
本発明はまた、一連のコンピュータ上で実行されるときに、本明細書の上記で説明した本発明の方法をその一連のコンピュータに実施させるコンピュータプログラムを提供する。プログラムはキャリア上でよい。キャリアは信号またはストアでよい。ストアは、他の例の中でもとりわけ、記録媒体またはメモリ装置でよい。
【００８６】
上記のすべては、本発明の利用可能な実施形態の例のほんのいくつかに過ぎない。本発明の精神および範囲から逸脱することなく、多数の他の修正および変更を行えることを当業者は容易に観察するであろう。したがって、本明細書の開示は限定として意図されるものではなく、添付の特許請求の範囲は、本発明の範囲全体を包含するものとして解釈すべきである。
【図面の簡単な説明】
【００８７】
【図１】本発明によるコンピュータアレイの図である。
【図２】図１のコンピュータのサブセットを示す詳細な図と、図１の相互接続データバスの詳細な図である。
【図３】図１および２のコンピュータのうちの１つの一般的レイアウトを示すブロック図である。
【図４】図１および２のコンピュータで使用可能な命令語の図式表現である。
【図５】図３のスロットシーケンサの略図表現である。
【図６】本発明による方法の一例を示すフロー図である。
【図７】本発明による例示的実施形態を論じるのに使用される図１および２のコンピュータアレイの区域を示す詳細図である。
【図８ａ】図７の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。
【図８ｂ】図７の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。
【図８ｃ】図７の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。
【図８ｄ】図７の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。
【図８ｅ】図７の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。
【図８ｆ】図７の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。
【図９】図７および図８ｄ〜ｆに示される複数書込み手法を単一の命令語内に複数の命令を含める能力とどのように組み合わせることができるかを示す概略ブロック図である。
【図１０】上述のマルチリード／マルチライトシステムで伝播が反転しないように保証するための処理規則の表である。
【図１１】一連の接続されたＣＰＵを介してデータが左から右に順次転送されるときの、一連の時刻での最適化されたパイプライン１１００の状態を示すブロック図である。
【図１２ａ】図１１のパイプライン中のデータの初期フローをスタイリスティックに示す略図であり、規則３に従わない場合に生じる反転を示す図である。
【図１２ｂ】図１１のパイプライン中のデータの初期フローをスタイリスティックに示す略図であり、規則３に従う場合に反転が発生することなくパイプラインを通るデータフローを示す図である。
【図１】
2009009549.tif 000002
【図２】
2009009549.tif 000003
【図３】
2009009549.tif 000004
【図４】
2009009549.tif 000005
【図５】
2009009549.tif 000006
【図６】
2009009549.tif 000007
【図７】
2009009549.tif 000008
【図８ａ】
2009009549.tif 000009
【図８ｂ】
2009009549.tif 000010
【図８ｃ】
2009009549.tif 000011
【図８ｄ】
2009009549.tif 000012
【図８ｅ】
2009009549.tif 000013
【図８ｆ】
2009009549.tif 000014
【図９】
2009009549.tif 000015
【図１０】
2009009549.tif 000016
【図１１】
2009009549.tif 000017
【図１２ａ】
2009009549.tif 000018
【図１２ｂ】
2009009549.tif 000019
【外国語明細書】
2009009549000001.pdf