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