(57)【要約】【課題】先行技術のコンピュータにおいて、命令を実行前に読出して格納しなければならない点を解消する。【解決手段】プログラムとデータとを、複数コンピュータ（１２）の１つと前記複数コンピュータの別の１つとの間で分配するメカニズムを備える。【選択図】図１
2007272895.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピュータ、
前記コンピュータを接続する複数のデータパス、および
プログラムとデータとを、前記複数コンピュータの１つと前記複数コンピュータの別の１つとの間で分配するメカニズム
を備えることを特徴とするコンピュータアレイシステム。
【請求項２】
前記メカニズムは、ラッパをさらに備え、該ラッパは、前記ラッパが前記複数コンピュータの前記１つに遭遇するとき取るべき動作を、少なくとも１つの前記複数コンピュータに指示すること
を特徴とする請求項１に記載のコンピュータアレイシステム。
【請求項３】
前記ラッパは、前記少なくとも数個のコンピュータの前記１つに指示して、前記ラッパに続くデータをロードさせること
を特徴とする請求項２に記載のコンピュータアレイシステム。
【請求項４】
前記ラッパは、前記少なくとも数個のコンピュータの前記１つに指示して、前記ラッパに続く命令をロードさせること
を特徴とする請求項２に記載のコンピュータアレイシステム。
【請求項５】
前記ラッパは、前記少なくとも数個のコンピュータの前記１つに指示して、別の前記コンピュータにキャリアを送信させること
を特徴とする請求項２に記載のコンピュータアレイシステム。
【請求項６】
前記ラッパはポートで直接実行可能であることを特徴とする請求項２に記載のコンピュータアレイシステム。
【請求項７】
前記ラッパはポートで直接実行可能であることを特徴とする請求項２に記載のコンピュータアレイシステム。
【請求項８】
前記ラッパは呼出しを含み、前記呼出しはアドレスをリターンスタック上のアドレスに置き、その後に戻ること
を特徴とする請求項２に記載のコンピュータアレイシステム。
【請求項９】
前記ラッパは、前記ラッパの長さを示すカウンタをさらに備えることを特徴とする請求項２に記載のコンピュータアレイ。
【請求項１０】
前記コンピュータは５行５列のアレイに物理的に配置されることを特徴とする請求項１に記載のコンピュータアレイ。
【請求項１１】
少なくとも数個のコンピュータは４行６列のアレイに物理的に配置されることを特徴とする請求項１に記載のコンピュータアレイ。
【請求項１２】
アレイの各側面に沿ったコンピュータの数は偶数であることを特徴とする請求項１に記載のコンピュータアレイ。
【請求項１３】
少なくとも１つの前記コンピュータは、外部メモリ源と直接通信することを特徴とする請求項１に記載のコンピュータアレイ。
【請求項１４】
少なくとも１つの前記コンピュータは、データを前記外部メモリ源から少なくとも数個の前記複数コンピュータに通信すること
を特徴とする請求項１に記載のコンピュータアレイ。
【請求項１５】
コンピュータ化されたジョブを実行する方法であって、
複数コンピュータを提供すること、および
異なるタスクを少なくとも数個の前記コンピュータに割り当てること
を備えることを特徴とする前記方法。
【請求項１６】
少なくとも１つの前記コンピュータが割り当てられ、フラッシュメモリと通信することを特徴とする請求項１５に記載の方法。
【請求項１７】
少なくとも１つの前記コンピュータが割り当てられ、ランダムアクセスメモリと通信することを特徴とする請求項１５に記載の方法。
【請求項１８】
少なくとも１つの前記コンピュータが割り当てられ、入出力機能を遂行することを特徴とする請求項１５に記載の方法。
【請求項１９】
前記コンピュータの１つは、割り当てを前記コンピュータの残りにルーティングすることを特徴とする請求項１５に記載の方法。
【請求項２０】
複数のコンピュータ、および
前記コンピュータ間の複数のデータ接続
を備えるコンピュータアレイであって、
少なくとも数個の前記コンピュータは異なる機能を実行するようプログラムされること
を特徴とするコンピュータアレイ。
【請求項２１】
前記の異なる機能は、共同で動作してタスクを遂行することを特徴とする請求項２０に記載のコンピュータアレイ。
【請求項２２】
前記機能の各々は、前記コンピュータアレイが初期化されるとき、前記各々のコンピュータにプログラムされることを特徴とする請求項２０に記載のコンピュータアレイ。
【請求項２３】
前記コンピュータ間の通信は非同期であることを特徴とする請求項２０に記載のコンピュータアレイ。
【請求項２４】
複数コンピュータを使用してタスクを遂行する方法であって、
タスクを動作コンポーネントに分割して、前記動作コンポーネントの各々を前記コンピュータの１つに割り当てること、
少なくとも数個の前記コンピュータをプログラムして、前記動作コンポーネントの各々を遂行すること
を備えることを特徴とする前記方法。
【請求項２５】
前記動作コンポーネントは、全地球測位システムレシーバを遂行するために使用される動作群であること
を特徴とする請求項２４に記載のタスク遂行方法。
【請求項２６】
前記タスクが開始される前に、前記コンピュータをプログラムして、前記動作コンポーネントの各々を遂行すること
を特徴とする請求項２４に記載のタスク遂行方法。
【請求項２７】
前記コンピュータは、コンピュータアレイに配置されることを特徴とする請求項２４に記載のタスク遂行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータおよびコンピュータプロセッサの領域に関し、特に、コンピュータ間の一意なタイプの対話方法および手段に関する。現存の独創的なコンピュータアレイの使用例で現状有力なものは、単一マイクロチップ上で複数コンピュータを組み合わせることである。本発明はさらなる特殊性をもってコンピュータおよびコンピュータプロセッサの領域に関し、特に、スタックコンピュータプロセッサ内のスタックをより効率的に使用するための方法および手段に関する。
【背景技術】
【０００２】
先行技術において、協調する複数のコンピュータプロセッサを使用して、タスクを遂行することが知られている。マルチスレッディングおよびいくつかの他のスキームが、プロセッサを協調させることを可能にするために使用されてきた。しかしながら、当該領域において改善できる余地は大量にあると一般的に認識されている。さらに、数個のプロセッサを単一チップ上で組み合わせるのが現在の傾向であり、それが問題を悪化させ、コンピュータを効率的な方法で協調させる解決法の発見の緊急性を高める。いくつかの理由により、多数のアプリケーションに対する複数プロセッサの最適な配置は、それぞれが処理機能と少なくとも数個の専用メモリを有する多数のコンピュータから成るアレイであることが考えられる。上記の例において、コンピュータの各々はそれ自身特に強力ではなく、計算能力はコンピュータの緊密な協調を通して達成される。
【０００３】
同時係属出願において上記コンピュータアレイの多くの独創的な態様が説明および特許請求されており、上記コンピュータの配置方法と上記コンピュータ間の通信チャネルの発生方法とに関するいくつかの詳細が含まれる。しかしながら、最高の効率性で動作するようにコンピュータアレイの比較的新規の概念を実装するためには、さらなる革新が必要である。
【０００４】
明らかに、コンピュータアレイの配置、コンピュータアレイ間の通信、コンピュータアレイ間のタスク分割、およびコンピュータアレイの他の使用の最適な方法に関して解決すべき問題が多数ある。これらの問題のいくつかは解決済みかも知れないが、おそらく既存の解決方法に対してさえも改善余地があるだろう。他の場合においては、先行技術に存在しなかった新規の問題を解決するために、先例なき問題に取り組む必要があるかも知れない。
【０００５】
スタックマシンは、複合命令セットコンピュータ（ＣＩＳＣ）よりも非常に低いプロセッサの複雑度を提供し、縮小命令セットコンピュータ（ＲＩＳＣ）マシンまたはＣＩＳＣマシンのいずれかよりも低いシステム全体の複雑度を提供する。スタックマシンは、良好なパフォーマンスを得るための複雑なコンパイラまたはキャッシュ制御ハードウェアを必要とせずに、これを行う。スタックマシンはさらに、大部分のプログラミング環境において競争力のある生のパフォーマンスと優位なパフォーマンスを所与の価格で実現する。スタックマシンが最初に成功した応用領域はリアルタイムな組込み制御環境であり、その領域ではスタックマシンは他のシステム設計アプローチより大幅に優れている。スタックは主にプログラムメモリに以前は保存されたが、最近のスタックマシンはスタックに対し、別個のメモリチップまたはオンチップメモリの領域を保持する。これらのスタックマシンは、非常に高速なサブルーチン呼出し能力と、割り込み処理およびタスク切り替えに対して優位なパフォーマンスとを提供する。
【０００６】
Ｚａｈｌｒ等（ＵＳＰＮ６，３６７，００５）はレジスタスタックエンジンを開示しており、レジスタスタックエンジンは、レジスタスタックの十分なレジスタをメモリに保存して、スタックオーバフロー発生時に、より多くの利用可能なレジスタを提供する。レジスタスタックエンジンはさらに、スタックアンダーフロー発生時に適切な数のレジスタを復元できるまで、マイクロプロセッサを停止させる。
【０００７】
Ｓｔｏｒｙ（ＵＳＰＮ６，２１９，６８５）は動作結果を閾値と比較する方法を開示している。しかしながら、このアプローチは閾値に切り下げた結果（これは、オーバフロー例外を発生させる）と、ちょうど閾値と偶然に一致した結果とを区別しない。Ｓｔｏｒｙが開示した別の方法は、ハードウェアフラグを読み書きしてオーバフローまたはアンダーフロー条件を識別する。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
メモリ内でスタックを使用すると、オーバフローまたはアンダーフローは、スタック項目を上書きするか、またはスタックの一部として意図していないスタック項目（スタックアイテム）を使用するであろう。スタック内のオーバフローおよびアンダーフローを低減または削除する改善された方法が必要である。
【０００９】
フォースシステム（Ｆｏｒｔｈ  ｓｙｓｔｅｍ）は２つ以上の同時実行「スレッド（ｔｈｒｅａｄ）」を有することができ、これはしばしば協調ラウンドロビンと呼ばれる。中央処理装置（ＣＰＵ）を使用してスレッドが順番を取得する順序は固定され、例えば、スレッド４は常にその順番をスレッド３の後およびスレッド５の前に取得する。各スレッドは所望の時間だけＣＰＵを保持することができ、その後ＣＰＵを自発的に放棄する。スレッドはＰＡＵＳＥの語を呼び出すことでこれを行う。元のタスクを復元するためには少数のデータ項目のみをＰＡＵＳＥ関数の実行中に保存する必要があり、割り込み関数の実行中は多数のコンテキストを保存する必要がある。
【００１０】
各スレッドは行うべき作業を有しても有しなくてもよい。タスク４が行うべき作業を有し、ラウンドロビン内のタスク４の前のタスク（タスク３）がＰＡＵＳＥを呼び出す場合、タスク４が起動し、タスク４はタスク３がＰＡＵＳＥを再度呼び出すまで実行する。行うべき作業をタスク４が有しない場合、タスク４は制御をタスク５に渡す。タスクが入出力関数を実行する語を呼び、従って入出力の完了を待つ必要があるとき、ＰＡＵＳＥは入出力呼出しに組み込まれる。
【００１１】
ＰＡＵＳＥが予測可能であれば、非常に効率的なコードを書くことができる。しばしば、フォースベースの協調ラウンドロビンは、そのＣＰＵで順番を有する全てのスレッドをプリエンプティブのマルチタスカーよりも短時間で与え、次にＣＰＵを取得するタスクを決定することができる。
【００１２】
しかしながら、特定のタスクはＣＰＵを圧倒または上回る傾向にある場合がある。さらに、ＰＡＵＳＥ関数を１つのＣＰＵを超えて拡張させるのが有利である。
【課題を解決するための手段】
【００１３】
簡潔に述べると、本発明は複数のコンピュータのアレイを含み、各コンピュータは自身のメモリを有し、独立した計算機能を実行することができる。タスクを協調的に遂行するため、コンピュータはデータおよび／または命令を互いに渡さなければならない。可能な構成の１つは、直角に隣接したコンピュータ間の接続データ経路（ｃｏｎｎｅｃｔｉｏｎ  ｄａｔａ  ｐａｔｈ）をコンピュータが有し、各コンピュータは４つもの「近傍（ｎｅｉｇｈｂｏｒｓ）」と直接通信できるようなものである。コンピュータが、直接の近傍でない別のコンピュータと通信することが望ましい場合、通信は他のコンピュータを通して所望の宛先に導かれる。
【００１４】
説明した環境によると、４つもの命令を含むデータ語を並列に、コンピュータ間および各コンピュータの内部メモリを行き来して渡すことができるので、単一データ語内のミニプログラムの１つのタイプを本発明ではマイクロループと称する。プロセッサの大規模なアレイにおいては大規模なタスクは複数の小規模なタスクに分割され、小規模なタスクの各々は幾分制限された能力を有するプロセッサにより容易に実行できるのが理想的であることは覚えておくべきである。従って、４つの命令ループが非常に有効であると考えられる。この事実は、次の関連事実によりさらに注目すべきものとなる。即ち、コンピュータは限られた設備を有するため、そのコンピュータがしばしば近傍から設備を「借りる」ことが好都合であるという事実である。これはマイクロループの使用に関する理想的な機会を与える。コンピュータが処理パワー等を近傍から借りる必要がある一方で、そのコンピュータは近傍からいくらかのメモリを借り、それを自身の内部メモリと幾分同じ方法で使用する別の可能性もある。マイクロループを近傍に渡して、近傍に一連のデータを読み書きするよう命令することで、上記のメモリ借り入れを容易に達成することができる。上記のマイクロループは例えば、特定の内部メモリ位置からの書き出し、その位置の増加、および所定回数の反復繰り返しの命令を含むことができる。マイクロループは単一語なので、マイクロループは２回以上命令メモリフェッチを実行することはできない。
【００１５】
マイクロループを近傍へ渡す上記の例は、本発明のさらなる別の態様の例であり、現在「フォースレット（Ｆｏｒｔｈｌｅｔｓ）」と称されている。そのように称される理由は、それらが現在フォースコンピュータ言語で実装されているからである。しかしながら、本発明の適用は、フォースによる使用例に厳密に制限されるわけではない。フォースレットは、実行用コンピュータに直接送信できるミニプログラムである。マイクロループとは対照的に、フォースレットは２語以上の語であり、複数のメモリフェッチを実行することができる。先行技術のコンピュータにおいては、命令を実行前に読出して格納しなければならないが、本明細書の詳細な説明から分かるように、本発明によればそれは不要である。実際、本発明の重要な態様は、コンピュータがフォースレットを生成してそれを別の実行用コンピュータに渡すことができることであると期待される。フォースレットはプログラマが「予め書込み」、格納して使用することができる。実際、フォースレットを必要に応じて、使用するために「ライブラリ」に蓄積することができる。しかしながら、予めプログラムされた基準に従って、フォースレットをコンピュータ内部で生成することができることも本発明の範囲内である。
【００１６】
例として、本発明の実施形態において、Ｉ／Ｏレジスタはメモリアドレスとして扱われ、このことは、メモリを読み書きする同一（または同様）の命令はＩ／Ｏ動作も実行できることを意味する。マルチコアチップの場合、Ｉ／Ｏ構造に対してこれを選択すると強力な効果がある。コアプロセッサは自身のローカルのＲＯＭおよびＲＡＭから命令を読出して実行できるだけでなく、Ｉ／Ｏポートまたはレジスタ上に与えられた命令を読出して実行することもできる。データ送信するタイトなループという概念は非常に強力になる。この概念により、命令ストリームはコアにＩ／Ｏポートで提供され、Ｉ／Ｏポートから直接実行される。従って、あるコアはコードオブジェクトを、それを直接実行可能な隣接コアプロセッサに送信することができる。コードオブジェクトをコア間で渡すことができ、コアはコアオブジェクトをレジスタで実行する。各コードは本質的に完全に自身のローカルアドレス空間内で、コード命令送信に費やす見掛け時間なしに動作するため、コードオブジェクトは非常に高速で到着する。
【００１７】
上述のように、各命令フェッチは複数（今説明した実施形態においては４つ）の命令をコアプロセッサに運ぶ。この種の組み込み「キャッシュ」は確かに小さいが、命令自身がキャッシュを利用するとき、組込みキャッシュは非常に効果的である。例えば、ミクロなｆｏｒ−ｎｅｘｔループを構築することができる。このｆｏｒ−ｎｅｘｔループは、限界である単一の１８ビット命令語に完全に含まれる。これらのタイプの構成は、Ｉ／Ｏレジスタに組み込んだ自動状態信号送信と結合されるときに理想的である。なぜならば、それは大きなデータブロックを単一の命令フェッチだけで送信可能であることを意味するからである。この種の命令パッキングにより、近傍のプロセッサコアから共有Ｉ／Ｏレジスタ上に提供された命令を実行する概念は新しい能力を得る。なぜならば、そのレジスタに現れる各語は、１つではなく４つの命令を表すからである。マルチコアチップにおけるこれらのタイプのソフトウェア／ハードウェア構造およびパフォーマンスに対するその驚異的な影響は、従来の言語に対しては絶対に利用可能ではない。それらは、複数の命令が単一語に包含され、完全なループをその語の内部から実行できるような命令セットにおいてのみ可能である。
【００１８】
本明細書内で説明した装置において、従来のデータスタックとリターンスタックとは、巡回の繰り返しパターンで機能するレジスタアレイにより置換される。データスタックはＴレジスタ、Ｓレジスタ、および交差パターンで電気的に相互接続した８つのハードワイヤードレジスタを備える。これらの８つのハードワイヤードレジスタは、巡回の繰り返しパターンで機能するように相互接続される。この構成は、スタックの外部からの読出しを防止し、意図しない空のレジスタ値の読出しを防止する。
【００１９】
データスタックと同様、リターンスタックはＲレジスタ、および交差パターンで電気的に相互接続した８つのハードワイヤードレジスタを含む。これらの８つのハードワイヤードレジスタは、巡回の繰り返しパターンで機能するように相互接続される。この構成は、スタックの外部からの読出しを防止し、意図しない空のレジスタ値の読出しを防止する。
【００２０】
上述の２相スタックプロセッサは独立に機能するプロセッサとして機能できるか、または相互接続コンピュータアレイにおいて数個の他の同様または異なるプロセッサとともに使用することができる。
【００２１】
本明細書内で説明し、数個の図面で示すように、本発明を実行する形態の説明と本発明の産業的な応用とを考慮すると、本発明は当技術分野の技術者に対して明らかであるであろう。列挙した目的と利点は、本発明の全ての可能な利点の完全なリストではない。さらに本発明は、適用する際に１つまたは複数の意図した目的および／または利点が欠如するかまたは要求されないときでさえ、実践することができるであろう。
【００２２】
さらに当技術分野の技術者は、本発明の様々な実施形態が、必ずしも全てではないが１つまたは複数の上述の目的および／または利点を達成可能であることを認識するであろう。従って、本明細書内で説明した目的および／または利点は本発明の本質的な要素ではなく、制限事項として解釈されるべきではない。
【発明の効果】
【００２３】
本発明のコンピュータアレイ１０、１０ａおよび関連方法は、非常に広範囲の種類のコンピュータアプリケーションにおいて使用されるよう意図されている。それらは、非常に多数の、異なるが関連する関数が遂行される必要のあるコンピュータ集約アプリケーションにおいて特に有用であることが期待されている。本発明のコンピュータアレイ１０、１０ａ、および関連方法に関する最良の応用例のいくつかは、他のコンピュータのものとほぼ等しい計算上の要件をコンピュータ１２の各々が有するように必要なタスクを分割できる場合であることが期待されている。しかしながら、コンピュータ１２のいくつかが時々、または常に、その最大能力をかなり下回って動作する場合でも、本発明者はコンピュータアレイ１０、１０ａの全体の効率性および速度は、タスクを動的に割り当てる先行技術のコンピュータアレイの効率性および速度を一般的に上回ることを発見している。
【００２４】
コンピュータアレイ１０、１０ａを２つ以上有することが有利であるような多くのアプリケーションがありうることは注意すべきである。多くの上記の可能な例の１つは、デジタル無線がＧＰＳ入力を要求する場合であろう。上記の例においては、無線は１つのコンピュータアレイ１０により実装され、ＧＰＳの機能を遂行するよう構成した別個のコンピュータアレイ１０から入力を受信する。
【００２５】
コンピュータ１２は上記の例で述べたように個々のタスクを行うよう最適化できるが、タスクが特定のアプリケーションで必要ない場合、コンピュータ１２は何らかの他のタスクを実行するように簡単にプログラムすることができ、それはプログラマの想像によってのみ制限されることはさらに注意すべきである。
【００２６】
この本発明のコンピュータアレイ１０、１０ａはフォースコンピュータ言語を使用して最も良く実装され、フォースコンピュータ言語は必要に応じて本質的にセグメント化されてタスクを容易に分割し、本発明を実装することが想定されている。カラーフォースはフォース言語の近年の変形であり、等しく適用可能である。
【００２７】
本発明のコンピュータアレイ１０、１０ａおよびコンピュータアレイ方法３６を容易に生成し、既存のタスク、入出力デバイス等と統合することができ、本明細書内で説明した利点が与えられるため、それらは産業界に容易に受け入れられることが期待されている。これらおよび他の理由から、本発明の実用性および産業的適用可能性の両方は、持続期間の範囲と、持続期間が長期に渡ることとにおいて重要であることが期待されている。
【発明を実施するための最良の形態】
【００２８】
本発明の実践方法を、図を参照した以下の記述で説明する。図においては、同じ番号は同一または同様な要素を表す。本発明は、本発明の目的を達成する形態に関して説明されており、これらの教示を考慮して、本発明の精神または範囲から逸脱することなく変更を行うことができることは、当技術分野の技術者により理解されるであろう。
【００２９】
本明細書内で説明したおよび／または図で示す本発明の実際形態および変形形態は、例としてのみ与えられ、本発明の範囲を制限しない。特に述べない限り、本発明の個々の態様および構成要素を省略または修正するか、あるいは従って公知の均等物を代用するか、あるいは将来開発されるかまたは将来受け入れ可能な代用物と認められるような未知の代用物で代用することができる。本発明は、請求した発明の精神と範囲に留まりつつ様々な応用に対して修正することもできる。なぜならば、可能な応用範囲は広く、本発明は上記の多くの変形形態に対して適応可能であるよう意図されているからである。
【００３０】
以下の実施形態は、コンピュータ間の非同期通信と、個々に非同期的に動作するコンピュータとの両方を有するコンピュータアレイの例を使用して説明され、本発明の応用は決してその内容に制限されることはない。
【００３１】
本発明は複数の個別のコンピュータの１つのアレイを含む。本発明のコンピュータアレイを図１の線図に示し、図内では一般的な参照番号１０で指定する。コンピュータアレイ１０は複数（示した例においては２４個）のコンピュータ１２（アレイの例においては時々、「コア」または「ノード」とも称する）を有する。示した例において、コンピュータ１２の全ては単一のダイ（ｄｉｅ）１４上に位置する。コンピュータ１２の各々は、一般的に独立に機能するコンピュータであり、以下に詳細に説明する。コンピュータ１２は複数（その量は、以下でより詳細に説明する）の相互接続データバス１６により相互接続される。この例において、データバス１６は双方向の非同期高速並列データバスであるが、他の相互接続手段をその目的に採用することができることも本発明の範囲内である。アレイ１０の本実施形態において、コンピュータ１２間のデータ通信が非同期であるだけでなく、個々のコンピュータ１２は内部的に非同期モードでも動作する。本発明者は、これは重要な利点を与えると理解している。例えば、クロック信号がコンピュータアレイ１０全体に渡って分散される必要がないため、大量の電力が節約される。さらに、クロック信号を分散させる必要がないため、アレイ１０の大きさを制限する多くのタイミング問題または他の公知の難点の原因となる多くのタイミング問題が除去される。２４個のコンピュータのアレイは制限事項でなく、チップ製造がより精緻になるとコンピュータ数が増加し、実際にスケーラビリティがこの構成の本質であることが期待される。
【００３２】
当技術分野の技術者は、明確にするため図１から省略されたダイ１４上の追加要素があることを認識するであろう。上記の追加要素は、電力バス、外部接続パッド、およびマイクロプロセッサチップの他の上記の一般的態様を含む。
【００３３】
コンピュータ１２ｅは、アレイ１０の周辺上にないコンピュータ１２の１つの例である。即ち、コンピュータ１２ｅは垂直に隣接する４つのコンピュータ１２ａ、１２ｂ、１２ｃおよび１２ｄを有する。コンピュータ１２ａから１２ｅへのこのグループ化は、アレイ１０のコンピュータ１２間の通信をより詳細に説明することに関して、以下で使用する。図１で分かるように、コンピュータ１２ｅなどの内部のコンピュータは４つの他のコンピュータ１２を有し、その４つの他のコンピュータ１２とバス１６経由で直接通信できる。以下の説明において、説明する原理はコンピュータ１２の全てに適用されるが、アレイ１０の周辺上にあるコンピュータ１２は３つのコンピュータ１２とのみ直接通信すること、または、隅のコンピュータ１２の場合は他の２つのコンピュータ１２とのみ直接通信することを除く。
【００３４】
図２は図１の一部をより詳細に示す図であり、コンピュータ１２のうち数個、特にコンピュータ１２ａから１２ｅを示す。図２は、データバス１６の各々が読出し線１８、書込み線２０および複数（この例では１８個）のデータ線２２を有することも示す。データ線２２は、１８ビット命令語の全ビットを一般に同時に並列で送信することができる。本発明の一実施形態において、コンピュータ１２の中には隣接コンピュータの鏡像であるものがあることに注意すべきである。しかしながら、コンピュータ１２が全て理想的に方向づけられるか、または隣接コンピュータの鏡像であるかは、今説明した本発明の一態様ではない。従って、本発明をより良く説明するため、この可能性のある複雑性は本明細書内でさらに説明しない。
【００３５】
本発明の方法によれば、コンピュータ１２ｅなどのコンピュータ１２は、１つ、２つ、３つまたは４つ全ての読出し線１８を設定し、各々の１つ、２つ、３つまたは４つ全ての隣接コンピュータ１２からデータを受信する準備が整うようにすることができる。同様に、コンピュータ１２が１つ、２つ、３つまたは４つ全ての書込み線２０を高に設定することも可能である。ここでは２つ以上のコンピュータ１２の書込み線２０を一度に高に設定することを述べないが、そうすることは本発明の範囲外ではない。なぜならば、例えばマルチポートアドレスに書き込むなど、これが望ましいことが何度かある場合、上記の動作を使用することがあり得るからである。
【００３６】
隣接コンピュータ１２ａ，１２ｂ、１２ｃまたは１２ｄのうち１つが、それ自身とコンピュータ１２ｅとの間の書込み線２０を高に設定するとき、コンピュータ１２ｅが既に対応する読出し線１８を高に設定している場合、語がコンピュータ１２ａ，１２ｂ、１２ｃまたは１２ｄからコンピュータ１２ｅへ関連データ線２２上で送信される。その後、送信コンピュータ１２は書込み線２０を解放し、受信コンピュータ（この例では１２ｅ）は書込み線２０および読出し線１８の両方を低にする。後者の動作は送信コンピュータ１２に対して、データが受信されたことを応答する。上述の説明は、イベント列の順序を示すことを必ずしも意図していないことに注意する。実際に実施する際は、この例において受信コンピュータは、送信コンピュータ１２がその書込み線２０を解放する（高に設定することを止める）前に、書込み線２０を少しだけ低に設定することを試みることができる。上記の事例において、送信コンピュータ１２が自身の書込み線２０を解放するとすぐに、書込み線２０は受信コンピュータ１２ｅにより低に設定される。
【００３７】
この例において、プログラミングの誤りのみが、バス１６の１つの両端上にあるコンピュータ１２の両方がそれらの間の読出し線１８を高に設定しようと試みる原因となる。さらに、バス１６の１つの対向端上にあるコンピュータ１２の両方がそれらの間の読出し線１８を同時に高に設定しようと試みることは誤りである。同様に、上述のように、単一のコンピュータ１２に自身の４つの書込み線２０のうち２つ以上を高に設定させることが望ましいとは今は期待されていない。しかしながら、次のことが望ましい場合があることは期待されている。即ち、読出し線１８の相違なる組み合わせを高に設定して、コンピュータ１２の１つが待機状態にあり、対応する自身の書込み線２０を高に設定するために、選択したコンピュータ１２の最初のものからのデータを待機できるようにすることが望ましい場合があるということである。
【００３８】
上述の例において、（１つまたは複数のコンピュータ１２ａ、１２ｂ、１２ｃまたは１２ｄから選択した）隣接コンピュータが自身の書込み線２０を高に設定する前に、コンピュータ１２ｅが１つまたは複数の自身の読出し線１８を高に設定するとして説明した。しかしながら、このプロセスは逆の順序で生じる場合もある。例えば、コンピュータ１２ｅがコンピュータ１２ａに書き込もうとする場合、コンピュータ１２ｅはコンピュータ１２ｅとコンピュータ１２ａとの間の書込み線２０を高に設定する。コンピュータ１２ｅとコンピュータ１２ａとの間の読出し線１８が、その後コンピュータ１２ａにより既に高に設定されていない場合、コンピュータ１２ｅはコンピュータ１２ａがその読出し線１８を高に設定するまで単に待機するだけである。その後、上述のように、読出し線１８と書込み線２０に対応する組の両方が高のとき、データ線２２上で送信を待機するデータが送信される。その後、受信コンピュータ１２（この例ではコンピュータ１２ａ）は、２つのコンピュータ（この例では１２ｅと１２ａ）間の読出し線１８と書込み線２０との両方を、送信コンピュータ１２ｅがそれを解放するとすぐに、低に設定する。
【００３９】
コンピュータ１２ｅなどのコンピュータ１２が、書込みを期待してその書込み線２０の１つを高に設定する場合、コンピュータ１２は本質的に何ら電力を使用せずに、データが上述のように適切な隣接コンピュータ１２から「要求」されるまで単に待機する。これは、データが送信されるコンピュータ１２がその読出し線１８を高に設定しない場合にそうであり、この場合データは即座に送信される。同様に、コンピュータ１２が、読出しを期待して１つまたは複数のその読出し線１８を高に設定する場合、コンピュータ１２は本質的に何ら電力を使用せずに、選択したコンピュータ１２に接続された書込み線２０が高になり命令語を２つのコンピュータ１２間で送信するまで、単に待機する。
【００４０】
コンピュータ１２を上述のように機能させることが可能な手段および／または方法がいくつかあるかもしれない。しかしながら、この例において、コンピュータ１２がそのように振舞うのは、単にそれらが（説明した非同期な方法で、データをそれらの間で送信することに加えて）一般に非同期に内部で動作しているからである。即ち、命令は逐次的に完了する。書込みまたは読出し命令のいずれかが発生すると、その命令が完了するまで（または、おそらく「リセット」等によりそれが中止されるまで）、さらなる動作はない。先行技術の意味での通常のクロックパルスはない。むしろ、実行されている命令が読出し系または書込み系の命令のいずれでもないときのみ（読出し系または書込み系の命令は別のエンティティによって完了される必要があると仮定する）、あるいは読出し系または書込み系の動作が実際に完了したときに、次の命令を遂行するためにパルスが生成される。
【００４１】
図３は、図１および２のコンピュータ１２の１つの例の一般的な配置を示すブロック図である。図３において分かるように、コンピュータ１２の各々は、自身のＲＡＭ２４およびＲＯＭ２６を有する一般的な内蔵型コンピュータである。前述のように、コンピュータ１２は、この例においてそれらが単一チップ上で結合される場合、個々の「コア」とも称されることがある。
【００４２】
コンピュータ１２の他の基本的な構成要素は、リターンスタック２８、命令領域３０、演算論理装置（「ＡＬＵ」）３２、データスタック３４、および命令をデコードするためのデコード論理部３６である。当技術分野の技術者は一般的に、この例のコンピュータ１２などのスタックベースのコンピュータの動作を熟知しているであろう。コンピュータ１２は、データスタック３４と、独立したリターンスタック２８とを有する２相スタックコンピュータである。
【００４３】
本発明のこの実施形態において、コンピュータ１２は、隣接コンピュータ１２と通信する４つの通信ポートを有する。通信ポート３８は、３つの状態を持つドライバであり、オフ状態、（信号をコンピュータ１２に与える）受信状態、および（信号をコンピュータ１２から引き出す）送信状態を有する。勿論、特定のコンピュータ１２がコンピュータ１２ｅの例のようなアレイ内部（図１）にない場合、１つまたは複数の通信ポートは、少なくとも本明細書内で説明した目的では、その特定のコンピュータにおいて使用されないであろう。ダイの縁に隣接するこれらの通信ポート３８は追加の回路を有することができ、その回路は上記のコンピュータ１２に組み込まれるか、またはコンピュータ１２の外部にあってそれと関連付けるかのいずれかであり、上記の通信ポート３８を外部Ｉ／Ｏポート３９（図１）として動作させる。上記の外部Ｉ／Ｏポート３９の例は、これらに限らないが、ＵＳＢ（ユニバーサルシリアルバス）ポート、ＲＳ２３２シリアルバスポート、並列通信ポート、アナログデジタルおよび／またはデジタルアナログ変換ポート、および多くの他の可能な変形形態を含む。図１において、外部Ｉ／Ｏポート３９を介して外部装置８２と通信するインタフェース回路８０と関連付けて、「縁の」コンピュータ１２ｆを示す。命令領域３０はいくつかのレジスタ４０を含み、この例においては、Ａレジスタ４０ａ、Ｂレジスタ４０ｂおよびＰレジスタ４０ｃを含む。この例において、Ａレジスタ４０ａは完全な１８ビットレジスタであり、Ｂレジスタ４０ｂとＰレジスタ４０ｃは９ビットレジスタである。
【００４４】
計算結果の正確性を保証するため、プロセッサは各操作をチェックして、操作が例外条件を発生させたかどうかを判定する。例えば、算術演算はオーバフローおよびアンダーフロー例外を受ける。オーバフロー例外は、計算後の数値が、その数値に対して指定したフォーマットで表現可能な最大数より大きいときに生じる。アンダーフロー例外は、計算後の数値が、その数値に対して指定したフォーマットで表現可能な最小数より大きいときに生じる（二項演算操作に対するＩＥＥＥ７５４−１９８５基準）。
【００４５】
本発明はスタックコンピュータのプロセッサを開示し、そのプロセッサ内でスタックは相互接続されたレジスタのアレイを備え、レジスタは巡回のパターンで機能する。データスタックおよびリターンスタックは、先行技術のコンピュータの多くに見られるような、スタックポインタがアクセスするメモリ内のアレイではない。
【００４６】
図４は命令語４８の図表示である（命令語４８は実際に命令、データ、またはその組合せのいくつかを含むことができることに注意する）。命令語４８は１８個のビット５０から構成される。これはバイナリコンピュータであり、ビット５０の各々は「１」または「０」である。前述のように、１８ビット幅の命令語４８は、スロット０  ５４ａ、スロット１  ５４ｂ、スロット２  ５４ｃおよびスロット３  ５４ｄと呼ばれる４つのスロット５４内に４つまでの命令５２を含むことができる。本発明のこの実施形態において、１８ビットの命令語４８は常に全体として読み出される。従って、命令語４８内に４つまでの命令を有する可能性が常にあるので、利用可能なスロット５４の全てを使用することが不必要または望ましくないとき、無演算（動作なし）命令をコンピュータ１２の命令セットに含めて、インスタンスを与える。本発明のある特定の実施形態によると、代替スロット（詳細には、スロット１  ５４ｂおよびスロット３  ５４ｃ）内のビット５０の極性（アクティブローと比べてアクティブハイ）が反転されることに注意する。しかしながら、これは今説明した本発明の必要な態様ではなく、従って、本発明をより良く説明するため、この可能性のある複雑性は以下の説明では避けることにする。
【００４７】
図５は図３のスロットシーケンサ４２の略図である。図５において分かるように、スロットシーケンサ４２は、環状に配置した複数（この例では１４個）のインバータ５６および１つのＮＡＮＤゲート５８を有し、信号が１４個のインバータ５６とＮＡＮＤゲート５８を通過するときその信号は奇数回数反転される。ＯＲゲート６０に対する２個の入力のいずれかが高になると、信号がスロットシーケンサ４２内で初期化される。第１のＯＲゲートの入力６２は、実行中の命令５２のビットｉ４６６（図４）から導出される。ビットｉ４が高である場合、その特定の命令５２はＡＬＵ命令であり、ｉ４ビット６６は「１」である。ｉ４ビットが「１」のとき、第１のＯＲゲート入力６２は高であり、スロットシーケンサ４２がトリガされ、次の命令５２を実行させるパルスを初期化する。
【００４８】
高になる第１のＯＲゲート入力６２、または高になる第２のＯＲゲート入力６４（以降説明する）のいずれかによりスロットシーケンサ４２がトリガされるとき、信号はスロットシーケンサ４２の周りを２度通過し、出力をスロットシーケンサ出力６８で毎回生成する。信号がスロットシーケンサ出力６８を最初に通過するとき、出力は低であり、２回目はスロットシーケンサ出力６８での出力は高になる。スロットシーケンサ出力６８からの比較的広範囲の出力は、出力として狭いタイミングパルスを生成するパルス生成器７０（ブロック図の形で示す）に与えられる。当技術分野の技術者は、狭いタイミングパルスは、コンピュータ１２の動作を正確に初期化するために望ましいことを認識するであろう。
【００４９】
実行中の特定の命令５２が読出しまたは書込み命令、または実行中の命令５２がシーケンス内の次の命令５２の即時実行をトリガするのが望ましくないような任意の他の命令であるとき、ｉ４ビット６６は「０」（低）であり、第１のＯＲゲート入力６２も従って低である。当技術分野の技術者は、コンピュータ１２などの装置におけるイベントのタイミングが一般に非常に重要であり、これは例外でないことを認識するであろう。スロットシーケンサ４２を検証すると、当技術分野の技術者は、ＯＲゲート６０からの出力は、信号がＮＡＮＤゲート５８を巡回して輪の第２「ラップ」を開始するまで、高でなければならないことを認識するであろう。その後、ＯＲゲート６０からの出力はその第２の「ラップ」中に低になり、回路が不必要に連続的に振動することを防止する。
【００５０】
上の説明から理解できるように、第２のＯＲゲート入力６６が以下に説明するように高でないと仮定すると、ｉ４ビット６６が「０」のときスロットシーケンサ４２はトリガされない。
【００５１】
上述のように、各命令５２のｉ４ビット６６が、その命令が読出し系または書込み系の命令であるか否かに従って設定される。命令５２内の残りのビット５０は、その命令に対する特定のオペコードの残りを与える。読出し系または書込み系の命令の場合、１つまたは複数のビットを使用して、特定のコンピュータ１２においてどこからデータを読出すか、またはどこに書込むかを示すことができる。本発明のこの例において、書込みデータは常にＴレジスタ４４（データスタック３４の最上部）から来るが、データは、Ｔレジスタ４４または命令領域３０のいずれかに選択的に読込むことができ、命令領域３０からそのデータを実行することができる。この理由は、本発明のこの特定の実施形態においては、データまたは命令のいずれかを本明細書内で説明した方法で通信でき、命令は従って、これは本発明の必要な態様ではないが、データバス１６から直接実行することができるからである。さらに、１つまたは複数のビット５０は、ポート３８があるならば、どのポート３８が読出しまたは書込みに設定されるべきかを示すために使用される。この後者の動作は、１つまたは複数のビットを使用してＡレジスタ４０ａ、Ｂレジスタ等のレジスタ４０を指定することで任意に遂行することができる。上記の例において、指定したレジスタ４０は、ポート３８（および、さらに、メモリ、外部通信ポートなどの、コンピュータ１２が通信を試みる可能性のある任意の他の可能なエンティティ）の各々に対応するビットを有するデータを予めロードする。例えば、特定のレジスタ４０内の４つのビット各々は、上ポート３８ａ、右ポート３８ｂ、左ポート３８ｃまたは下ポート３８ｄの各々に対応することができる。上記の場合、任意のビット位置に「１」がある場合、対応するポート３８を介して通信が進むよう設定される。前述のように、本発明のこの実施形態において、読出しオペコードは通信用に２つ以上のポート３８を単一命令で設定することができるが、書込みオペコードが通信用に２つ以上のポート３８を単一命令で設定することは、可能ではあるが期待されていない。
【００５２】
すぐ下の例は、コンピュータ１２ｅがコンピュータ１２ｃへの書込みを試みる通信を仮定するが、この例は任意の隣接コンピュータ１２間の通信に適用可能である。書込み命令が書込み中のコンピュータ１２ｅ内で実行されるとき、選択された書込み線２０（この例においては、コンピュータ１２ｅおよび１２ｃの間の書込み線２０）が高に設定され、対応する読出し線１８が既に高である場合、データは選択した通信ポート３８を介して選択した位置から即座に送信される。あるいは、対応する読出し線１８が既に高ではない場合、コンピュータ１２ｅは単に、その対応する読出し線１８が高になるまで動作を停止する。読出し系または書込み系の命令があるときのコンピュータ１２ａの停止（または、より正確には、コンピュータ１２ａのさらなる動作を不可にすること）のメカニズムは前述した。要するに、命令５２のオペコードはビット位置ｉ４  ６６の位置に「０」を有し、従ってＯＲゲート６０の第１のＯＲゲート入力６２は低であり、従ってスロットシーケンサ４２は許可パルスを生成するようにトリガされない。
【００５３】
読出し系または書込み系の命令の完了時にコンピュータ１２ｅの動作が再び起動される方法に関して、そのメカニズムは以下の通りである。コンピュータ１２ｅと１２ｃの間の読出し線１８および対応する書込み線２０の両方が高のとき、線１８と２０の両方は、それを高に保持するそれぞれのコンピュータ１２により解放される（この例において、送信コンピュータ１２ｅは書込み線１８を高に保持し、受信コンピュータ１２ｃは読出し線２０を高に保持する）。その後、受信コンピュータ１２ｃは線１８および２０を低にする。実際の実施においては、受信コンピュータ１２ｃは線１８および２０を、送信コンピュータ１２ｅが書込み線１８を解放する前に、低にしようと試みる。しかしながら、線１８および２０は高にされ、弱く低に保持（ラッチ）されるのみであるので、線１８または２０を低にする試みは実際には、線１８または２０がそれを高にラッチしているコンピュータ２０により解放されるまで、成功しない。
【００５４】
データバス１６内の線１８と２０の両方が低になるとき、これは“肯定応答”状態である。コンピュータ１２ｅと１２ｃの各々は、肯定応答状態において、自身の内部の肯定応答線７２を高に設定する。図５から分かるように、肯定応答線７２は第２のＯＲゲート入力６４を提供する。ＯＲゲート６０の入力６２または６４のいずれかに対する入力がＯＲゲート６０の出力を高にするため、この入力はスロットシーケンサ４２の動作を前述の方法で初期化し、命令語４８の次のスロット５４内の命令５２が実行される。肯定応答線７２は、次の命令５２がデコードされるまで高であり、誤ったアドレスがアドレスバスに到着することを防止する。
【００５５】
実行中の命令５２が命令語４８のスロットの３つの位置にあるときはどんな場合でも、勿論ビットｉ４６６が「０」でなければ、コンピュータ１２は次の待機中の１８ビット命令語４８をフェッチする。実際の実施においては、本発明のメカニズムは、命令を「プリフェッチ」する方法と装置を含み、命令語４８内の命令５２全ての実行が終了する前にフェッチを開始することができる。しかしながらこれも、非同期データ通信に対する本発明の方法および装置の必要な態様ではない。
【００５６】
コンピュータ１２ｅがコンピュータ１２ｃに書き込む上述の例を、詳細に説明する。上述の説明から理解できるように、コンピュータ１２ｅがコンピュータ１２ｃに最初に書き込むことを試みようとなかろうと、またはコンピュータ１２ｃがコンピュータ１２ｅから読み出すことを最初に試みようとなかろうと、動作は本質的に同じである。コンピュータ１２ｅまたは１２ｃのどちらが最初に準備できようとも、コンピュータ１２および１２ｃの両方が準備できるまで動作は完了することができず、その最初のコンピュータ１２は他のコンピュータ１２ｅまたは１２ｃが送信を完了するまで「スリープ状態になる」だけである。上述のプロセスを別の観点から見ると、書込みコンピュータ１２ｅと受信コンピュータ１２ｃの両方が、それぞれ書込みおよび読出し命令を実行するときに実際にスリープ状態になるが、トランザクションに最後に入ったものは、読出し線１８と書込み線２０の両方が高になるときほぼ同時に再起動され、トランザクションを開始する第１のコンピュータは、第２のコンピュータ１２がプロセスを完了する準備ができるまで、ほぼ無制限にスリープ状態でいることができる。
【００５７】
装置間の効率的な非同期通信を可能とする方法は、ある種の肯定応答信号または状態である。本明細書で説明するように、この方法は必要な肯定応答状態を提供し、この肯定応答状態により装置間の非同期通信が可能、または少なくとも現実的になる。さらに、肯定応答状態により、１つまたは複数の装置が、肯定応答状態が発生するまで「スリープ状態になる」ことも可能となる。勿論、肯定応答状態は、コンピュータ１２間で（相互接続データバス１６上または別個の信号線上のいずれかで）送信中の別個の信号により、コンピュータ１２間で通信される。上記の肯定応答信号は本発明の態様の範囲内である。しかしながら、本明細書で説明した本発明の実施形態によると、肯定応答の方法が実際に通信に影響する信号、クロック周期、タイミングパルス、または説明した以外の任意のリソースの追加を一切要求しないという意味で、さらに経済的である。
【００５８】
本発明に対して、その価値または範囲を変更することなく、様々な修正を加えることができる。例えば、本発明を読出し命令および書込み命令の点で説明したが、実際の実施においては、２つ以上の読出し系の命令および／または２つ以上の書込み系の命令が存在することができる。唯一の例として、本発明の１実施形態において、レジスタを増加させる書込み命令と、レジスタを増加させない他の書込み命令がある。同様に、書込み命令は、前述のようにレジスタ４０を使用して通信ポート３８を選択することに従って変化することができる。ただコンピュータ１２の設計者が代替的な読出しの振舞いとしてどの変形形態を有用な選択と考えるかによって、いくつかの異なる読出し命令も存在することができる。
【００５９】
同様に、本発明を、単一のダイ１４上のアレイ１０におけるコンピュータ１２間の通信に関して本明細書内で説明したが、同じ原理と方法を使用、または使用するために修正して、コンピュータ１２とその専用メモリ間の通信、またはアレイ１０内のコンピュータ１２と外部デバイス間の（入力／出力ポート等を介した）通信などの他のデバイス間通信を実現することができる。実際、いくつかの応用例は、アレイのアレイ間の通信に適用可能な、今説明した装置間通信方法とともに、アレイのアレイを要求することができると期待される。
【００６０】
図１のコンピュータ１２ｇなどのコンピュータがコードを実行して、主要な割当てタスクを遂行するとき、プログラマは、１２ｆおよび１２ｇなどの２つのコンピュータ間の不定期の相互作用が望ましいと決定することができる。プログラマは、「入力探索」動作１６６で示されるように、コンピュータ１２ｇが不定期に停止して１つまたは複数のその近傍が通信を試みるかどうかを見ることを規定しているであろう。通信が、コンピュータ１２ｆが開始するコンピュータ１２ｇへの書込みなどの、「入力か？」決定動作１６８で示されるように待機している場合、コンピュータ１２ｇは「他から受信」動作１７０で通信を完了する。そうでない場合、コンピュータ１２ｇは図９に示すように、割り当てられた機能の実行に戻る。「他から受信」動作１７０の後、コンピュータ１２ｇは、「入力に従って実行」動作１７２で受信した入力に従って動作する。コンピュータ１２ｇは命令が入力の中にあることを期待し、この場合にコンピュータ１２ｇはその命令を実行することを、プログラマは規定することができる。あるいは、コンピュータ１２ｇを、動作の拠り所となるデータを期待するようプログラムすることができる。
【００６１】
「入力に従って実行」動作１７２に従い、コンピュータ１２ｇはその主要な機能に戻る。即ち、それは「主要機能を実行」動作１６２に戻る。しかしながら、さらにより複雑な例の可能性が確実に存在する。例えば、コンピュータ１２ｆから受信したある入力により、コンピュータ１２ｆが以前割り当てられた主要機能を中止して新しい機能を始めるか、またはコンピュータ１２ｆが単純にさらなる入力を一時的に停止および待機するようにプログラミングすることができる。当技術分野の技術者は理解するであろうが、ここでの動作に対する様々な可能性は、プログラマの想像によってのみ制限される。
【００６２】
本明細書内で説明した本発明の実施形態によると、別に割込みを要求する可能性のある入力監視および入力処理のタスクを別のコンピュータ１２が割り当てられているため、所与のコンピュータ１２はそれがタスクを実行している間は割り込まれる必要がないことに注意すべきである。しかしながら、別のタスクの処理中であるコンピュータ１２を、コンピュータ１２がその入力用ポート３８を見るようプログラミングされていない場合、またはそのようにプログラミングされるまで、妨害することもできないことにも注意する。従って、コンピュータ１２を停止させて他の入力を探すこともしばしば望ましいであろう。
【００６３】
本発明の実例となるのは、ＰＡＵＳＥ命令の動作である。ここで説明されているものは、数個のプロセッサ間の「協調的マルチタスキング」である。タスクのセットがノードまたは複数ノード上に存在する。ＰＡＵＳＥは、全てのノードまたはポートを逐次的に検査して、到着する実行可能コードを求める。ウェイクアップまたはウォームスタートの前に、４つの無演算命令（．．．．）が先行する。ＰＡＵＳＥ命令はリターン（；）命令で終わり、その後次のスレッドがポーリングされる。検査された最後のポートは、４つの無演算命令から成る２つのセットを使用する。コールドスタートがリセット後に発生する。
【００６４】
入出力ピン３９を有するエッジプロセッサ１２ａまたはコーナープロセッサ１２ｆもＰＡＵＳＥによりポーリングされ、例えば外部装置８２によるタスクを実行する。ＰＡＵＳＥは、開始条件の一部としてＲＯＭ内に位置することもできる。初期化ルーチンは停止命令にジャンプし、隣接プロセッサの４点読出し命令に行く。フォースを参照して複数プロセッサ間のＰＡＵＳＥ機能を本明細書内で開示しているが、複数プロセッサ間のＰＡＵＳＥ機能の全ての概念は、他のプログラミング言語に同様に適用することができる。
【００６５】
４つの命令５２を命令語４８に含むことができるため、および、本発明によると命令語４８の全体をコンピュータ１２の間で一度に通信できるため、これは非常に小さなプログラムを１つの動作で送信するための理想的な機会を与える。例えば、小さな「Ｆｏｒ／Ｎｅｘｔ」ループの大部分を単一の命令語４８の内部に実装することができる。図６はマイクロループ１００の図表示である。マイクロループ１００は、他の先行技術のループとは異なり、ＦＯＲ命令１０２とＮＥＸＴ命令１０４を有する。命令語４８（図４）は４つもの命令５２を含むので、命令語４８は単一の命令語４８の内部に３つの動作命令１０６を含むことができる。動作命令１０６は、プログラマがマイクロループ１００に含むことを欲する本質的に任意の利用可能な命令であることができる。あるコンピュータ１２から別のコンピュータ１２へ送信できるマイクロループ１００の典型的な例は、第２のコンピュータ１２のＲＡＭ２４からの読出し命令、またはＲＡＭ２４への書込み命令のセットであり、第１のコンピュータ１２は利用可能なＲＡＭ２４の容量を「借りる」ことができる。
【００６６】
ＦＯＲ命令１０２は値をリターンスタック２８にプッシュし、その値は所望の繰り返し数を表す。即ち、データスタック３４の最上部にあるＴレジスタ４４の値は、リターンスタック２８のＲレジスタ２９にＰＵＳＨされる。ＦＯＲ命令１０２は、命令語４８のスロット３  ５４ｄにしばしば位置するが、実際は、任意のスロット５４に位置することができる。ＦＯＲ命令１０２がスロット３  ５４ｄに位置しない場合、その命令語４８内の内部にある残りの命令５２はマイクロループ１００に行く前に実行され、一般的に次にロードされる命令語４８となる。
【００６７】
本発明の今説明した実施形態によると、図６に示すＮＥＸＴ命令１０４は特別な種類のＮＥＸＴ命令１０４である。これは、ＮＥＸＴ命令１０４がスロット３  ５４ｄ（図４）に位置するからである。本発明のこの実施形態によると、「通常の」ＮＥＸＴ命令（図示せず）に続く特定の命令語４０内のデータ全てはアドレス（ｆｏｒ／ｎｅｘｔループが開始するアドレス）であることが仮定される。ＮＥＸＴ命令１０４に対するオペコードは、４つのスロット５４のうちどのスロットの中にそれがあろうと、同じである（本明細書内で前述したように、スロット３  ５４ｄの場合、最初の２つの数字が推測され、明確に書き込まれないという明らかな例外はある）。しかしながら、ＮＥＸＴ命令１０４がスロット３  ５４ｄ内にあるとき、ＮＥＸＴ命令１０４に続くアドレスデータは存在しえないため、スロット３  ５４ｄ内のＮＥＸＴ命令１０４はＭＩＣＲＯ−ＮＥＸＴ命令１０４ａであることも推測される。ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａは戻り先アドレスとして第１の命令５２のアドレスを使用し、ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａが位置する同じ命令語４８のスロット０  ５４ａ内に位置する。ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａはさらに（ＦＯＲ命令１０２によりＲレジスタ２９に最初にＰＵＳＨされた）値をＲレジスタ２９から取得し、それを１だけ減じ、それをＲレジスタ２９に戻す。Ｒレジスタ２９上の値が（０などの）所定の値に達するとき、ＭＩＣＲＯ−ＮＥＸＴ命令は次の命令語４８をロードし、本明細書内で前述したように継続する。しかしながら、ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａが、所定の値より大きい値をＲレジスタ２９から読出すとき、ＭＩＣＲＯ−ＮＥＸＴ命令は自身の命令語４８のスロット０  ５４ａで動作を再開し、その命令を含めて、スロット０から３に位置する３つの命令５２を実行する。即ち、本発明のこの実施形態において、ＭＩＣＲＯ−ＮＥＸＴ命令１０４ａは常に３つの動作命令１０６を実行する。なぜならば、いくつかのインスタンスにおいて、３つの潜在的に利用可能な命令５２を使用することは望ましくなく、「無演算」命令を必要に応じて１つまたは２つのスロット５４を埋めるのに利用可能であるからである。
【００６８】
マイクロループ１００は単一のコンピュータ１２内で完全に使用することができることは注意すべきである。実際、利用可能な機械語命令のセット全体は、動作命令１０６として使用するために利用可能であり、マイクロループの適用および使用はプログラマの想像によってのみ制限される。しかしながら、マイクロループ１００全体を単一の命令語４８の内部で実行する能力が、コンピュータ１２に命令語４８を近傍コンピュータ１２に送信させてその中の命令５２をデータバス１６から本質的に直接実行させることを可能にする能力と結合されるとき、これは、コンピュータ１２にその近傍のリソースを利用させることを可能とする強力な手段となる。
【００６９】
小さなマイクロループ１００は単一のデータ語４８の内部に全て含まれ、そのマイクロループ１００をコンピュータ１２間で通信することができ、ここで説明したように、命令語４８に含まれる任意の他の命令セットのように、受信コンピュータ１２の通信ポート３８から直接実行することができる。この種の「マイクロループ」１００に対する多数の使用例があり、典型的には、あるコンピュータ１２で何らかのデータを近傍コンピュータ１２のメモリに格納したい場合に使用する。例えば、コンピュータ１２は最初に命令をその近傍コンピュータに送信し、近傍コンピュータに対し、着信データ語を特定メモリアドレスに格納し、そのアドレスを増加させ、規定反復回数だけ繰り返す（データ語の数が送信される）よう指示することができる。データを読み戻すため、第１のコンピュータは第２のコンピュータ（記憶用に使用されるもの）に、同様なマイクロループを使用して格納データを第１のコンピュータに書き戻すよう指示するだけである。
【００７０】
マイクロループ１００の構造を本明細書内で説明した直接実行の態様と併せて使用することで、コンピュータ１２は待機中の近傍コンピュータ１２を使用して、個々のコンピュータ１２の各々に組込まれた相対的に小さな容量をデータ格納要求が上回るときに、超過分のデータを記憶することができる。この例はデータ記憶の観点で説明したが、同様な技術を同様に使用することで、コンピュータ１２はその近傍に自身の計算リソースを共有させることができる。これは、他のコンピュータ１２に何らかの動作、結果の記憶、および所定回数の繰り返しを実行させるマイクロループ１００を作成することで行われる。理解できるように、本発明のマイクロループ１００の構造を使用できる方法の数はほぼ無限である。
【００７１】
前述したように、本発明の説明した実施形態において、データまたは命令のいずれかを本明細書内で説明した方法で通信することができ、従って、命令はデータバス１６から本質的に直接実行することができる。即ち、命令をＲＡＭ２４に格納してそれを実行前に再呼び出しする必要はない。代わりに、本発明のこの態様によると、通信ポート３８上で受信された命令語４８は、ＲＡＭ２４またはＲＯＭ２６から再呼び出しされるのと本質的に異なって扱われることはない。この相違性の欠如は、コンピュータ１２の説明した動作に関する前述の説明において明らかであり、命令語４８がフェッチされ使用される以下のより詳細な説明は本発明の理解の手助けとなるであろう。
【００７２】
利用可能な機械語命令の１つはＦＥＴＣＨ命令である。ＦＥＴＣＨ命令はＡレジスタ４０ａ上のアドレスを使用して、１８ビット語をどこからフェッチするかを決定する。勿論、プログラムは正確なアドレスをＡレジスタ４０ａに置くよう規定していなければならないであろう。前述のように、Ａレジスタ４０ａは１８ビットのレジスタであり、フェッチが生じうる任意の潜在的な源を区別可能な十分な範囲の利用可能なアドレスデータがある。即ち、ＲＯＭに割り当てたアドレス範囲とＲＡＭに割り当てた異なるアドレス範囲とがあり、ポート３８の各々と外部Ｉ／Ｏポート３９とに対して固有なアドレスがある。ＦＥＴＣＨ命令は常に、フェッチする１８ビットをＴレジスタ４４上に置く。
【００７３】
対照的に、前述のように、（データとは反対の）実行可能命令は一時的に命令レジスタ３０ａに格納される。１８ビット命令語４８を命令レジスタ３０ａに「フェッチ」する特定の命令はない。代わりに、命令レジスタ３０ａにもう実行可能命令が残されていないとき、コンピュータは自動的に「次の」命令語４８をフェッチする。その「次の」命令語が位置する場所は「プログラムカウンタ」（Ｐレジスタ４０ｃ）により決定される。命令語４８の列がＲＡＭ２４またはＲＯＭ２６からフェッチされる場合のように、Ｐレジスタ４０ｃはしばしば自動的に増加される。しかしながら、この一般規則にはいくつかの例外がある。例えば、ＪＵＭＰまたはＣＡＬＬ命令によりＰレジスタ４０ｃが、増加されるのではなく、ＪＵＭＰまたはＣＡＬＬ命令の後に現在ロードされている命令語４８の残りにあるデータが指定するアドレスでロードされる。Ｐレジスタ４０ｃがその後に１つまたは複数のポート３８に対応するアドレスでロードされるとき、次の命令語４８はポート３８から命令レジスタ３０ａにロードされる。Ｐレジスタ４０ｃは、命令語４８がポート３８から命令レジスタ３０ａにちょうど抽出されたとき、やはり増加しない。むしろ、Ｐレジスタ４０ｃは、特定のＪＵＭＰまたはＣＡＬＬ命令が実行されてＰレジスタ４０ｃを変更するまで、同じポートアドレスを保持する。即ち、一度コンピュータ１２がポート３８からの次の命令を求めるよう指示されると、次の命令語４８に対してメモリ（ＲＡＭ２４またはＲＯＭ２６）に戻るといったように、別の場所を見るよう指示されるまで、コンピュータ１２は同じポート３８（またはポート３８）から命令を求め続ける。
【００７４】
上述のように、コンピュータ１２は、現在の命令語４８に実行可能命令がもう残されていないとき、フェッチした次の１８ビットが命令レジスタ３０ａに置かれることを認識する。デフォルトでは、ＪＵＭＰまたはＣＡＬＬ命令の後（またはここで詳細に述べない一定の他の命令の後）の現在の命令語４８に残存する実行可能命令はもうない。なぜならば、定義により、ＪＵＭＰまたはＣＡＬＬ命令に続く１８ビットの命令語の残りは、ＪＵＭＰまたはＣＡＬＬ命令により参照されるアドレス専用であるからである。これを別の方法で述べると、上述のプロセスは多くの方法において一意であり、これらに限定されないが、ＪＵＭＰまたはＣＡＬＬ命令がメモリアドレス等だけに対してではなく、任意にポート３８に対して存在できる。
【００７５】
前述のように、コンピュータ１２は次の命令をあるポート３８から、またはポート３８の任意のグループから求めることができることは覚えておくべきである。従って、アドレスは、様々な組合せのポート３８に対応するように与えられる。例えば、コンピュータが命令をポート３８のグループからフェッチするよう指示されるとき、コンピュータは選択したポート３８の任意のものから、第１の利用可能な命令語４８を受け入れる。これらのポート３８の任意のものに書き込むことを既に試みた近傍コンピュータ１２がない場合、問題のコンピュータ１２は上で詳述したように、近傍が選択したポート３８に書き込むまで、「スリープ状態になる」。
【００７６】
図７は上述の直接実行方法１２０の例を示すフロー図である。「通常の」動作フローは、前述のように、命令レジスタ３０ａに実行可能命令がもう残存しないときに開始する。上述の時点で、コンピュータ１２は、「語をフェッチ」動作１２２により示した別の命令語（ここで「フェッチ」という用語は、実際のＦＥＴＣＨ命令を使用しない。一般の意味で使用される。）を「フェッチ」する。その動作は、（図７のフロー図における「アドレス」決定動作１２４で示される）Ｐレジスタ４０ｃ内のアドレスに従って実行される。Ｐレジスタ４０ｃ内のアドレスがＲＡＭ２４またはＲＯＭ２６のアドレスである場合、次の命令語４８は指定メモリ位置から「メモリからフェッチ」動作１２６で抽出される。他方で、Ｐレジスタ４０ｃ内のアドレスがポート３８またはポート（複数）３８のアドレス（メモリアドレスではない）である場合、次の命令語４８は指定メモリ位置から「ポートからフェッチ」動作１２８で抽出される。いずれの場合も、抽出される命令語４８は「命令語を抽出」命令１３０で命令レジスタ３０ｃに置かれる。「命令語を実行」動作１３２において、命令語４８のスロット５４内の命令は、前述のように逐次に実行される。
【００７７】
「ジャンプ」決定動作１３４において、命令語４８内の動作の１つがＪＵＭＰ命令であるか否か、または前述のように継続した「通常の」進行から動作を分岐させる他の命令であるか否かが判定される。もしそうならば、ＪＵＭＰ（または他のそのようなもの）命令の後に命令語４８内に与えられたアドレスは、「Ｐレジスタをロード」動作１３６においてＰレジスタ４０ｃに与えられ、図７に示されるように、命令列が「語をフェッチ」動作１２２で再開される。もしそうでなければ、「ポートアドレス」決定動作１３８で示されるように、次の動作は、最後の命令フェッチがポート３８からかまたはメモリアドレスかによって決まる。最後の命令フェッチがポート３８からである場合、Ｐレジスタ３０ａは変更されず、命令列は「語をフェッチ」動作１２２で開始して繰り返される。他方で、最後の命令フェッチがメモリアドレス（ＲＡＭ２４またはＲＯＭ２６）からである場合、図７の「Ｐレジスタを増加」動作１４０で示されるように、Ｐレジスタ３０ａのアドレスは「語をフェッチ」動作１２２が実行される前に増加される。
【００７８】
上述の説明は、実際の動作ステップを表すよう意図されていない。むしろ、上の説明は、様々な決定とそこから生じる動作の図であり、その図は本発明の説明した実施形態に従って実行される。実際、このフロー図は、説明および示した各動作が別個の異なる逐次ステップを要求することを意味するとは理解すべきでない。実際、図７のフロー図で説明した動作の多くは、実際には、一般に同時に実行される。
【００７９】
図８は、コンピュータに警告を発する本発明の改善方法の例を示すフロー図である。前述のように、説明した実施形態のコンピュータ１２は、入力を待つ間「スリープ状態になる」。上記の入力は、図１から５に関連して説明した実施形態にあるように、近傍のコンピュータ１２から来ることができる。あるいは、やはり前述のように、ダイ１４の縁に隣接する通信ポート３８を有するコンピュータ１２は追加の回路を有することができ、この回路は、上記のコンピュータ１２内に設計されるか、またはコンピュータ１２の外部にあるがそれと関連付けられるかのいずれかであり、上記の通信ポート３８を外部Ｉ／Ｏポート３９として動作させる。いずれの場合も、本発明の組み合わせは、「スリープしている」コンピュータ１２を停止させ、再起動の準備をさせて、入力が受信されるときに何らかの規定動作に移らせることができるというさらなる利点がある。従って、本発明は、上記の入力が外部入力装置から来ようと、またはアレイ１０内の別のコンピュータ１２から来ようと、入力を処理するための割り込みの使用に対して代替手段も与える。
【００８０】
コンピュータ１２に実行中の作業を停止（または一時停止）させて割り込みを処理させる代わりに、本明細書内で説明した本発明の組み合わせにより、コンピュータ１２は上述のように「スリープだが警戒」状態にあることができる。従って、１つまたは複数のコンピュータ１２を、一定の入力を受信およびその入力に基づいて動作するように、割り当てることができる。この特徴を使用する数多くの方法があり、上述の「コンピュータ警告方法」のちょうど１つを示す例を図８に示し、その中で参照番号１５０により列挙する。図８の図において分かるように、「警戒状態に入る」動作１５２において、コンピュータ１２は「スリープ状態」になり、コンピュータ１２は近傍コンピュータ１２、または２つ以上（４つ全部）の近傍コンピュータからの入力、または「縁の」コンピュータ１２の場合は外部入力、または外部入力の何らかの組み合わせおよび／または近傍コンピュータ１２からの入力を待つ。前述のように、コンピュータ１２は「スリープ状態」になり、読出しまたは書込み動作のいずれかの完了を待つことができる。この例において説明したように、コンピュータ１２が何らかの可能な「入力」を待機するために使用される場合、その待機コンピュータが自身の読出し線１８を高に設定して、近傍または外部源からの「書込み」を待機すると仮定するのが自然であろう。実際、これは有用な条件であること現在期待されている。しかしながら、待機コンピュータ１２が自身の書込み線２０を高に設定し、従って、近傍または外部源がそこから「読出す」とき、待機コンピュータ１２は再起動されることは本発明の範囲内である。
【００８１】
「再起動」動作１５４において、スリープしているコンピュータ１２は、近傍コンピュータ１２または外部装置３９が待機中のトランザクションを完了したので、動作を再開する。待機されているトランザクションが、実行されるべき命令語４８の受け手である場合、コンピュータ１２はその中でその命令を実行開始する。待機されているトランザクションがデータの受け手である場合、コンピュータ１２は待ち行列内の次の命令を実行開始し、その命令は、現在の命令語４８内の次のスロット５４における命令であり、または次の命令語４８はロードされ、次の命令はその命令語４８のスロット０に存在する。いずれの場合も、説明した方法で使用され、次の命令は、ちょうど受信した入力を処理する１つまたは複数の命令列を開始する。上記の入力を処理する選択肢には、予め定義された機能のいくつかを内部的に実行するために反応すること、アレイ１０内の１つまたは複数の他のコンピュータ１２と通信すること、または（従来の先行技術の割り込みが規定条件下で無視されるように）入力を無視することを含むことができる。その選択肢は、「入力に基づいて実行」動作１５６として図８の図に示されている。いくつかのインスタンスにおいては、入力の内容は重要でなくともよいことに注意すべきである。例えば、いくつかの場合において、着目している通信を外部装置が試みたということだけが事実だけでもよい。
【００８２】
コンピュータ１２が図８に示した方法で「警告」コンピュータとして動作するタスクを割り当てられる場合、コンピュータ１２は一般的に図８に示すように「スリープだが警戒」状態に戻る。しかしながら、監視されている特定の入力または入力（複数）を監視する必要がこれ以上ないとき、またはそのタスクをアレイ内のいくつかのコンピュータ１２に送信することがより便利なときのように、コンピュータ１２に何らかの他のタスクを割り当てる選択肢が常に可能である。
【００８３】
当技術分野の技術者は、この上述の動作モードは、割り込みの従来の使用例に対するより効率的な代替手段として有用であることを理解するであろう。コンピュータ１２が、高に設定された１つまたは複数の読出し線１８（または書込み線２０）を有するとき、「警戒」状態と呼ぶことができる。警戒状態において、コンピュータ１２は、高に設定した読出し線または読出し線（複数）１８に対応するデータバス１６上でコンピュータ１２に送信された任意の命令を即座に実行する準備ができているか、あるいはデータバス１６上で送信されるデータに基づいて動作する準備ができている。利用可能なコンピュータ１２のアレイがある場合、１つまたは複数のコンピュータ１２を上述の警戒条件にあるように任意の所与の時点で使用して、任意の規定の入力のセットがコンピュータ１２を動作させるようトリガすることができる。これは、従来の割り込み技術を使用してコンピュータの「注意を引く」ために望ましい。なぜならば、割り込みによりコンピュータは、割り込み要求に応答して、一定のデータを格納する、一定のデータをロードする等をしなければならないからである。対照的に、本発明によると、コンピュータを警戒状態に置くことができ、着目している入力を待機するというタスクをコンピュータに割り当てることができ、その結果、その入力により与えられた命令の実行開始において命令周期を無駄にすることがない。この場合も、今説明した実施形態において、警戒状態にあるコンピュータは実際に「スリープだが警戒」であり、これは、そのコンピュータは本質的に電力を使用しないという意味で「スリープ」だが、入力により即座に動作にトリガされるという点で「警戒」であるという意味であることに注意する。しかしながら、コンピュータが「スリープ」でない場合でも「警戒」状態をコンピュータに埋め込むことができることは本発明の範囲内である。説明した警戒状態は、従来の先行技術の割り込み（ハードウェア割り込みまたはソフトウェア割り込み）を別の方法で使用してきた本質的に任意の状況で、使用することができる。
【００８４】
本発明はこの例に制限されないが、現在のコンピュータ１２はネイティブなフォース言語の命令を実行するよう実装されている。フォースコンピュータ言語に詳しい者は理解するであろうが、フォース“語”として知られる複雑なフォース命令は、コンピュータに設計されたネイティブプロセッサ命令から構築される。フォース語の集合は「ディクショナリ」として知られる。他の言語では、これは「ライブラリ」として知られるかもしれない。以下でさらに詳細に説明するように、コンピュータ１２は１８ビットを一度にＲＡＭ２４、ＲＯＭ２６から、またはデータバス１６（図２）の１つから直接、読み出す。フォースにおいて、（オペランド不要命令として知られる）大部分の命令はそのオペランドをスタック２８および３４から直接取得するので、それらの命令は一般的に５ビットのみの長さであり、４つまでの命令を、そのグループ内の最後の命令が３ビットのみを必要とする制限付き命令のセットから選択されるという条件で、単一の１８ビットの命令語に含むことができる。スロットシーケンサ４２を、図３においてブロック図の形式で示す。本発明のこの実施形態において、データスタック３４内の最上部にある２つのレジスタは、Ｔレジスタ４４およびＳレジスタ４６である。
【００８５】
その方法はフォースレットの使用を含む。フォースレットは、正確な表現ではないが、アプレットとフォースを組み合わせて作った用語である。フォースは１９７０年代初期に開発されたコンピュータプログラミング言語である。フォースレットはコードのラッパであり、従ってコードをデータとして扱うことができる。または、フォースレットはラッパにつつまれた機械実行コードの文字列であると定義できるであろう。ラッパは、ヘッダおよびテイルから構成されるか、またはヘッダ単体で構成されることができる。
【００８６】
フォースレットは、スケーラブルエンベデッドアレイスタイルの並列プロセッサの並列プログラミングを支援する部分およびツールである。フォースレットは、ファイルのプロパティのいくつかを有する。そのプロパティには、名前、型、アドレス、長さ、および後述の様々なさらに任意な型領域を含む。フォースレットは、ツールまたはコンパイラによってソースコードまたはテンプレートから構築されるものに対するラッパである。フォースレットはコードおよびデータに対するラッパであり、他のフォースレットをラップすることもできる。フォースレットは、プログラムおよびデータを配布するメカニズム、構築補助のメカニズムおよびプログラムのデバッグのメカニズムである。
【００８７】
これらのハードウェア機能は、単純で高速なリモートプロシージャコールおよびミューテックスを与える。ミューテックスは、スレッド間の相互排他を調整するプログラムオブジェクトに対する共通な名前であり、この理由でミューテックスはしばしばロックと呼ばれる。スケーラブルエンベデッドアレイプロセッサを単純な並列プログラムに適したものにするスケーラブルエンベデッドアレイの特性の１つは、それらがハードウェアチャネルにより接続されるということである。そのハードウェアチャネルは、ペンディングメッセージ交換が完了するまでプロセッサを超低電力スリープ状態に設定することでプロセッサとプロセスを同期させる。
【００８８】
本発明が上述の環境で使用するソフトウェアの１つの特性は、そのソフトウェアが従来のフォーススタイルの協調マルチタスカーを古典的な方法で使用し、ローカルメモリ空間内のプログラムの実行とその実行チャネルにストリーム化されたプログラムの実行との間で各プロセッサをマルチタスクすることである。これは、ハードウェア内のマルチポートアドレス選択ロジックと組み合わせて、並列ハードウェアおよびソフトウェアの単純な組み合わせを与え、マルチタスキングのプログラミングから真の並列マルチプロセッシングのプログラミングへの移行を簡単にする。
【００８９】
２番目の特性は、これらの同期通信チャネルはプロセッサのアドレス空間内の同じ場所に存在し、ポインタを使用したデータ読出しおよび書込みに使用することができ、あるいいはプロセッサのプログラムカウンタに分岐またはプログラムカウンタから呼出および読出されることで実行することができるということである。
【００９０】
３番目の特性は、複数の通信チャネルを、これらの通信ポートのアドレス範囲にあるアドレス内の個々のビットが個々のチャネルを選択するとき、プロセッサによる読出しまたは書込み用に選択できるということである。
【００９１】
ブートフォースレットは、アプリケーション全体のラッパである。これは、従来のｘ８６プロセッサにより代表される従来のコンピュータの動作とは異なる。従来のマイクロプロセッサにおいて、命令は、最初にＣ＋＋やＣ＃などの高レベルコンピュータ言語で記述され、ソースコードと呼ばれる。ソースコードはその後、オブジェクトコードとも呼ばれる機械語に変換される。この変換プロセスはコンパイルと称され、このプロセスを遂行するプログラムまたは機械はコンパイラと呼ばれる。オブジェクトコードはその後プロセッサにより実行される。対照的に、フォースレットは直接実行可能である。しかしながら、本発明は直接実行可能なフォースレットに限定されない。なぜならば、同一のプロセスおよび関数は、フォースレットの全てのプロセスを実行する機械語に高レベルコマンドをコンパイルすることで、実行することができるからである。
【００９２】
ブートフォースレットは、最も基本的なタイプのフォースレットで、分岐を持たずに実行可能である。次に最も複雑なタイプのフォースレットであるストリーム実行可能フォースレットは、呼出しを含み、その呼出しはアドレスをリターンスタック２８上に置く。呼出しが生成されると、ＰＣ内のアドレスがリターンスタックにプッシュされる。メモリにおいて、ＰＣは予め増加され、その結果ＰＣは常に呼出しに続くメモリ内の次の逐次命令を指す。従ってリターン命令がスタック上のアドレスに戻るとき、リターン命令は呼出しに続くオペコードに戻る。以下は、機械フォースで書かれた低レベルフォースレットの例である。このフォースレットは、単純な１語ポート実行可能フォースレットである。
例１
ｔａｒｇｅｔ
Ｆｏｒｔｈｌｅｔ  ｐｏｒｔ−ｆｏｒｔｈｌｅｔ
！ｐ＋！ｐ＋＠ｐ＋＠ｐ＋
Ｆｅｎｄ
【００９３】
この最初の行は環境をセットアップし、２番目の行はプログラムの名前をｐｏｒｔ−ｆｏｒｔｈｌｅｔと宣言する。３番目の行は、最上部の２つのスタック項目をこのプログラムが実行しているポートに送信し、そのポートから２つのスタック項目を読み戻す。フォースレットはその後ポート上でスリープ状態に戻り、誰かが次のフォースレットをこのポートに書き込むのを待機する。最後の行はフォースレットをラップし、それをサーバ上に置き、その結果ｐｏｒｔ−ｆｏｒｔｈｌｅｔという名前がそのパケットのアドレスを返す。
【００９４】
呼出しがポートから生成されるとき、ＰＣ内のアドレスはそのポートである。ポートアドレスは自動で増加されず、むしろ何らかの他のプロセッサがポートを書き換えるのを待機し、アドレスは増加せず、ポートアドレスは同一のポートアドレスを再度読み、ポートが書き込まれるまでスリープする。従って、ポート内で実行しているコードが異なるポートを呼び出すか、あるいはＲＡＭまたはＲＯＭを呼び出す場合、呼出しを生成するポートのリターンアドレスは、呼び出しが生成されるときにリターンスタック上に置かれる。リターン命令が生じるとき、リターン命令は呼出しポートに返る。なぜならば、それがＰＣに戻るアドレスであるからである。
【００９５】
フォースレットの第３のタイプはメモリ実行可能フォースレットである。メモリ実行可能フォースレットは、ラッパとしてブートフォースレットまたはストリーム実行可能フォースレットのいずれかを使用する。メモリ実行可能フォースレットは例えば、メモリノード０アドレス０（ｒｅｖ７ノード０、ｒｅｖ９＄２００）を占有する。メモリ実行可能フォースレットはメモリ内の所与のアドレスで実行する。メモリ実行可能フォースレットは、任意のノード上のアドレス０または１または＄Ｄまたは＄３４で実行してもよい。また、ノード０またはノード１またはノード２上で実行してもよい。
【００９６】
第４のタイプのフォースレットはノード実行可能フォースレットである。ノード実行可能フォースレットも、ラッパとしてブートフォースレットまたはストリーム実行可能フォースレットのいずれかを使用する。ノード実行可能フォースレットは任意のノードから実行する。ノード実行可能フォースレットは、メモリの場所を見る。
【００９７】
５番目のタイプのフォースレット、可変実行可能アドレスフォースレットも、ラッパとしてブートフォースレットまたはストリーム実行可能フォースレットのいずれかを使用する。可変実行可能アドレスフォースレットは、可変ノードから動作する。
【００９８】
例２は、直接ポートストリームオペコード実行を含むフォースレットを示す。
例２
ｔａｒｇｅｔ
＄１４  ｏｒｇ：ｄｏｓａｍｐｌｅ  ＼ｇｅｔｂｉｔはＲＡＭ内のルーチン
＼前もって定義されてない場合、
＼語にｇｅｔｂｉｔの意味を与える
ｆｏｒｔｈｌｅｔ  ｃａｌｌ−ｆｒｏｍ−ｓｔｒｅａｍ
｛＄１２３４５｝＃ｄｏｓａｍｐｌｅ
ｆｅｎｄ
【００９９】
この例は「ｃａｌｌ−ｆｒｏｍ−ｓｔｒｅａｍ」と呼ばれるフォースレットをコンパイルする。この例はリテラルロードで開始し、このリテラルロードは、実行されるときリテラル＄１２３４５をＴにロードして「ｄｏｓａｍｐｌｅ」と呼ばれるサブルーチンを呼び出す。リテラルロード命令、サンプル、ＲＡＭ内のサブルーチンに対する呼び出しはフォースレットにラップされ、ノードに書き込まれる場合、フォースレットにロードを実行させ、ＲＡＭ内のルーチンに対する呼出しを実行させる。そのルーチンが返るとき、フォースレットは、さらなるコードを呼び出したポートに返る。
【０１００】
直接ポートストリームオペコード実行は、５ビットの命令へのアクセスを与える。この５ビットの命令は、フォース言語の大部分の原始的な動作を表し、コンパイラによってプログラムにインラインされる。これらのフォースレットはプロセッサの通信チャネルにストリームされ、１語１語実行される。これらのフォースレットは全く、分岐を持たず、アドレスまたはノードに固有でない。これらのフォースレットは句を形成し、その句は他のフォースレットをデータとしてメッセージにつなぎ合わせる。プログラムカウンタは、ポートを選択するアドレスに留まり、４つまでのｃ１８オペコードを含む語の実行後にプログラムカウンタは増加されない。ストリーム化したコード語の実行完了後、プロセッサは、次のストリーム化した命令語が到着するまでスリープ状態になる。ほとんどの場合、このタイプのフォースレットはリターン命令で終了する。このリターン命令は、ポートを呼び出すルーチン、おそらくＰＡＵＳＥマルチタスカーに対して実行を返す。
【０１０１】
例３は、ＲＡＭ／ＲＯＭ内のコードに対する呼出しを有するコードストリームのポート実行を含むフォースレットを示す。
例３
ｔａｒｇｅｔ
ｆｏｒｔｈｌｅｔ  ｒａｍ−ｂａｓｅｄ−ｓｐｉ−ｄｒｉｖｅｒ
５  ｎｏｄｅ！  ＼これがノード５に対してのみであることを指定
０  ｏｒｇ  ＼これはノード５のアドレス０に存在
：ｓｐｉ−ｃｏｄｅ
ｏｒｄｉｎａｒｙ−ｃｏｄｅ
ｆｅｎｄ
【０１０２】
この例は「ｒａｍ−ｂａｓｅｄ−ｓｐｉ−ｄｒｉｖｅｒ」という名前のフォースレットを詳細に説明している。このフォースレットは、このフォースレットがノード５に対して一意なピンを要求し、使用中はノード５に存在しなければならないというコードを有する。このフォースレットはさらに、その内部で定義した語により指定される特定アドレスに束縛される。語「ｓｐｉ−ｃｏｄｅ」は呼出しをアドレス０に対してコンパイルする。このフォースレットが実行されるとき、コードはノード５上のアドレス０にロードされ、そこで実行される。
【０１０３】
ストリーム化されたフォースレットは、ＲＯＭまたはＲＡＭ内のルーチンに対する呼出しを含むことができる。呼出されるべきルーチンのアドレスは、コンパイラによりそれらの名前から生成される。ＲＡＭ内のルーチンは、それらが呼ばれる前にロードされなければならない。ＲＡＭまたはＲＯＭ内のルーチンがポートから呼ばれる場合、大概、命令ストリームを運ぶプロセッサは、実行用の次のストリーム化された語をポートに提供し、プロセッサがＲＡＭまたはＲＯＭ内の呼ばれたルーチンを実行する間、スリープ状態になる。メッセージのルーティングはポート実行可能ストリームの送信を含み、そのストリームはプロセッサを再起動してそれらにＲＯＭ内の自身のルーティング語を呼ばせる。順にこれらの語は、より多くの命令ストリームを読出し、ストリームをその目的地に向かって次のプロセッサ上にルーティングする。
【０１０４】
例４はｒａｍ実行フォースレットの開始を示す。
例４
ｔａｒｇｅｔ
ｆｏｒｔｈｌｅｔ０  ｒｕｎｓ−ｏｎ−ｒａｍ−ｓｅｒｖｅｒ
ｏｒｄｉｎａｒｙ−ｃｏｄｅ、ｏｔｈｅｒ−ｆｏｒｔｈｌｅｔ−ｅｘｅｃｕｔｉｏｎ等
ｆｅｎｄ
【０１０５】
このフォースレットは、ノード上でアドレス０で実行するよう設計され、「ｒｕｎｓ−ｏｎ−ｒａｍ−ｓｅｒｖｅｒ」フォースレットのアドレスを「Ｘ０」コマンド呼出しに渡すことで、ノード０にロードし、ノード０で実行することができる。そこからロードするためにパッケージ化され、そこから外部ＲＡＭをＲＡＭサーバで使用するためにパッケージ化されたアプリケーションは、そのコマンドによりフォースレット０タイプのフォースレットとしてパッケージ化される。アプリケーションは他のフォーマットで配置することもできる。そのフォーマットには例えば、フォーマットがＲＡＭサーバで使用されるフォーマットと異なるときにＳＰＩまたは非同期シリアルインタフェースからロードするよう要求されるものがある。このタイプのフォースレットは、ＲＡＭの底部に位置するプログラムである。ｒａｍの底部に何らかのアドレスまでロードされた後、フォースレットは実行される。ｒａｍ実行フォースレットはＲＡＭ内で実行するため、ｒａｍ実行フォースレットは分岐命令を有すること、およびＲＡＭ、ＲＯＭまたは通信ポート内のアドレスにジャンプすること、そのアドレスを呼出すこと、またはそのアドレスに返ることができる。これらのフォースレットはＤＯＳにおける．ｃｏｍ実行可能ファイルと類似している。これらのフォースレットはメモリの最初で開始し、長さを有する。これらのフォースレットはロードされて実行される。これらのフォースレットは、ロードされた後に再度呼出すことができる。
【０１０６】
例５は、他のＲＡＭアドレス、コードまたはデータオーバレイでロード、またはロードかつ実行される、ロードされたフォースレットを示す。
例５
ｔａｒｇｅｔ
０  ｎｏｄｅ！
ｆｏｒｔｈｌｅｔ  ｒａｍ−ｂａｓｅｄ−ａｎｙｎｏｄｅ
０  ｏｒｇ
：ｄｏ−ｓｏｍｅｔｈｉｎｇ
ｏｒｄｉｎａｒｙ−ｃｏｄｅ
ｆｅｎｄ
【０１０７】
この例は、アドレス０で実行されるが、フォースレットラッパの内部でどの特定ノードにも束縛されないコードを詳細に説明する。このフォースレットは任意のノード上のアドレス０で実行できる。
【０１０８】
これらのロードされたフォースレットは、コードおよびデータオーバレイ向けである。コードまたはデータはノード上の任意のアドレスにロードすることができる。同一コードをいくつかのノード上のアドレス範囲にロードすることができ、そのアドレスがＲＡＭの開始点であった場合、これらのロードされたフォースレットは図８のものと同様なｒａｍ実行フォースレットであることができる。コードまたはデータがＲＡＭの開始点以外のアドレスにロードされるとき、そのコードまたはデータは、メモリの開始点にあるコードまたはデータとともにしばしば使用することができる。プログラム内のいくつかの頻繁に使用されるサブルーチンを高メモリにロードし、低メモリ内のオーバレイされた異なるコードルーチンがそれを呼ぶことができる。簡単に、コードを低メモリにロードしてそこに残し、高メモリにロードされたコードオーバレイによって繰り返し呼出すことができる。同一コードがいくつかのノード上の同一アドレスに置かれるが、グループ内の各ノードが、コードがデータ操作用にセットアップしたアドレスにある一意なデータのオーバレイを取得する場合に、この例の１つを使用できる。
【０１０９】
例６は特定ノードに束縛されたフォースレットを示す。
例６
ｔａｒｇｅｔ
ｆｏｒｔｈｌｅｔ０  ｒｕｎｓ−ｏｎ−ｒａｍ−ｓｅｒｖｅｒ
ｏｒｄｉｎａｒｙ−ｃｏｄｅ  ｏｔｈｅｒ−ｆｏｒｔｈｌｅｔ−ｅｘｅｃｕｔｉｏｎ等
ｆｅｎｄ
【０１１０】
このフォースレットは、ノード０上でアドレス０で実行するよう設計され、「ｒｕｎｓ−ｏｎ−ｒａｍ−ｓｅｒｖｅｒ」フォースレットのアドレスを「Ｘ０」コマンド呼出しに渡すことで、ノード０にロードし、ノード０で実行することができる。そこからロードするためにパッケージ化され、そこから外部ＲＡＭをＲＡＭサーバで使用するためにパッケージ化されたアプリケーションは、そのコマンドによりフォースレット０タイプのフォースレットとしてパッケージ化される。
【０１１１】
例７はＩＯ回路の特定フォースレットを示す。
例７
ｔａｒｇｅｔ
０  ｎｏｄｅ！
ｆｏｒｔｈｌｅｔ２ｐ  ｒａｍ−ｂａｓｅｄ−ｓｙｎｃ−ｓｅｒｉａｌ−ｄｒｉｖｅｒ
０  ｏｒｇ
：ｓｙｎｃ−ｃｏｄｅ
ｏｒｄｉｎａｒｙ−ｃｏｄｅ
ｆｅｎｄ
【０１１２】
この例は、フォースレットが実行するノードは少なくとも２つのピンを有するという要件に束縛されるフォースレットを生成する。これはＩＯノードに特有である。０または１つのピンを有するノードはこのフォースレットを実行できない。なぜならば、このフォースレットはビット１７で読み出されるピンと、ＩＯＣＳレジスタのビット１で読み出されるピンとを読み書きする必要があるからである。
【０１１３】
これらのフォースレットは、一定のノードに一意なＩＯ回路を読出し、または書込みするコードを含む。ＳＰＩ接続、Ａ／Ｄ、Ｄ／Ａ、またはリセット回路などの物理回路はソフトウェアドライバを有し、このソフトウェアドライバは、これらのフォースレットを実行するハードウェア特性にマッチするノードに対して適切であるのみである。
【０１１４】
Ｘ０フォースレットはノード０上で実行し、上記のネイティブフォースレットはＲＡＭサーバのノード０で実行する。これらのフォースレットは、外部メモリから直接ロードされ、外部メモリからプログラムを読み出すＣＰＵによって実行されるという意味で、大部分のシステムにおける通常のプログラムのように機能する。プロセッサの中にはメモリから一度に１語を読出して実行するものがあり、外部メモリのブロックを実行前にローカルキャッシュメモリに読み込むものがある。キャッシュしたメモリのローカルアドレスを外部メモリアドレスに透過的にマップせず、プロセッサは外部メモリをキャッシュからのみ実行するようなハードウェアにおいて、これらのフォースレットは有用である。このフォースレットは、ＲＡＭまたはＲＯＭ内に既にあるプログラムを実行することで明確にコードを外部メモリからローカルメモリにロードし、その後、既にロードされたコードに分岐する。任意のノードはＲＡＭサーバのノード０にメッセージを送信することができ、そのノード０にネイティブフォースレットのアドレスを与え、ＲＡＭサーバ上のローカルＲＡＭの開始点でロードおよび実行する。任意のプロセッサは単純にアドレスを自身のスタックに置いてＸ０関数を呼出し、Ｘ０メッセージはＲＡＭサーババッファノードを介してＲＡＭサーバに送信され、フォースレットをＲＡＭサーバのアドレスで実行する。その後に生じるのは、サーバ上で実行されるネイティブフォースレットの内容次第である。
【０１１５】
最も基本的なデータ送信フォースレットはｆｓｅｎｄである。ネイティブフォースレットをＲＡＭサーバ上でロードおよび実行するプロセスは、ＲＯＭのＢＩＯＳ内のルーチン、またはＲＡＭ内のルーチンを呼出すことを含む。そのルーチンは、外部メモリから読出し、Ｘ０フォースレットをそのローカルＲＡＭにロードして実行するのに使用される。ＲＡＭサーバ上で実行するフォースレットは、他のフォースレットを外部メモリからロードするが、それらをパイプに送信する。ポート実行可能なフォースレット句はメモリ実行可能なフォースレットと結合されて、やはりフォースレットでありうるデータをある位置から別の位置に送信する。ＳＰＩまたはＩ２Ｃなどの何らかのプロトコル経由で、またはワイヤレスソフトウェアリンクを介してチップ上またはチップ外でデータ送信するドライバは、チップ上またはチップ外のデータ送信を処理し、データ送信フォースレットはチップ上のノード間でのデータ移動を処理する。コンパイラはアプリケーションを構成して、ＲＡＭサーバ経由、またはシリアルフラッシュに接続したＳＰＩポートから、またはシリアルリンクをプロセッサに送信するＰＣ開発システムから、外部メモリ外で実行させることができる。広範囲な外部ＲＡＭ、ＲＯＭ、またはフラッシュ装置に接続したＲＡＭサーバとしてノード０を使用することを保証するのに十分な外部メモリが必要なアプリケーションは、コンパイラによりＲＡＭサーバ上のフォースレットにパッケージされているアプリケーションに依存する。上述のフォースレットタイプを使用して、アプリケーションは協調し、コードオーバレイをロードし、データを互いおよびＲＡＭサーバと交換する。イベントにより周辺プロセッサノードを起動することができ、周辺プロセッサノードは、起動された他のノードと協調してデータを処理することができる。
【０１１６】
例９は、特定ノードに束縛されない再配置可能フォースレットを示す。
例９
ｔａｒｇｅｔ
０  ｎｏｄｅ！
０  ｏｒｇ
ｆｏｒｔｈｌｅｔｒ  ｒａｍ−ｂａｓｅｄ−ｒｅｌｏｃａｔａｂｌｅ−ｗｏｒｄ
：ｍｙｃｏｄｅ
ｉｆ．．．ｔｈｅｎ．．．
ｍｙｃｏｄｅ―；
ｂｅｇｉｎ．．．ｕｎｔｉｌ．．．
ｏｒｄｉｎａｒｙ−ｃｏｄｅ
ｆｅｎｄ
【０１１７】
この例は、ノードに束縛されないが、アドレス依存の内部分岐を有するフォースレットを有する。特定アドレスにロードされるとき、分岐の分岐領域は、特定のアドレスで実行させるためにルーチンを再配置するよう設定される。
【０１１８】
これらのフォースレットはメモリから実行され、分岐命令を含むことができる。しかし、異なる実行アドレスに必要に応じて再配置されるノード上にロードされるとき、これらのフォースレットにメッセージを送信することができる。これらはＤＬＬと同様なメカニズムを与え、呼出し可能な関数群の何らかの組合せを異なるように実行時に配置し、なおコンパイラフォースレットを安全に呼び出すことができる。コンパイラは、異なる原始的フォースレットのタイプを組合せてフォースレットの構築を支援し、より複雑な機能性を与えることができる。フォースレット句のストリーミングは他の既にコンパイルしたフォースレットとコンパイラにより組合せられ、より複雑なフォースレットのタイプを安全に構築する。コンパイラとプログラマは、フォースレットの特性を、より洗練されたオブジェクト操作を可能とするフォースレットに割り当てることができる。これらはまたプログラマに、数学的に証明可能な特性を有するフォースレットのオブジェクトを生成し、安全なプログラム構築を支援するツールを提供する。
【０１１９】
送信フォースレットは、コンパイラによりプログラマに対して構築される。送信フォースレットは、ある位置から別の位置へ特定の経路を使用して別のフォースレットを送信させるフォースレットのタイプである。プログラマは送信タイプのフォースレットを例１０に示すようなコマンドＦＳＥＮＤを使用して構築する。
例１０
ｄａｔａｆｏｒｔｈｌｅｔ  ｍｙｒｏｕｔｅ  ｆｓｅｎｄ  ｍｙｆｏｒｔｈｌｅｔ
【０１２０】
この句は「ｍｙｆｏｒｔｈｌｅｔ」という名前の新しい送信タイプのフォースレットを生成し、「ｍｙｆｏｒｔｈｌｅｔ」は実行時に「ｄａｔａｆｏｒｔｈｌｅｔ」を、経路記述子「ｍｙｒｏｕｔｅ」が記述する経路に沿って送信する。コンパイラにより経路記述子を、経路を記述し、経路を描くことによって、または開始および終了ノードを指定することによって、一連のステップとして構築することができる。
【０１２１】
図１３は実行フォースレットを示す。実行フォースレットは、コンパイラによりプログラマに対して構築される。実行フォースレットは、ある位置から別の位置へ特定の経路を使用してＲＡＭ実行フォースレットを送信させ、ＲＡＭ実行フォースレットをＲＡＭの開始点から実行させるフォースレットのタイプである。プログラマは実行タイプのフォースレットを例１１に示すようにコマンドＦＲＵＮを使用して構築する。
例１１
ａｐｐ２  ｒｏｕｔｅ１−２１  ｆｒｕｎ  ｒｕｎ−ａｐｐ２
【０１２２】
この句は「ｒｕｎ−ａｐｐ２」という名前の新しい実行タイプのフォースレットを生成し、「ｒｕｎ−ａｐｐ２」は実行時に「ａｐｐ２」を、経路記述子「ｒｏｕｔｅ１−２１」が記述する経路に沿って送信する。
【０１２３】
いくつかのフォースレットは送信フォースレットと同様である。取得フォースレットは、逆の意味で送信フォースレットと類似している。取得フォースレットは、それが開けたパイプ内のフォースレットを送信するのではなく、経路を開け、フォースレットを引き出す。ブロードキャストフォースレットはコンパイラにより構築され、１つのフォースレットを複数の位置に送信する。収集および集積フォースレットはコンパイラにより構築され、データを複数の位置から単一の位置に収集または集積する。分配フォースレットはコンパイラにより構築され、収集したデータの一部を１つの位置から複数の位置へ分配する。
【０１２４】
上述の単純なフォースレットに加え、いくつかの中間レベルのフォースレットオブジェクトがある。中間レベルのフォースレットオブジェクトは、プログラマおよびコンパイラが設定し、より高レベルのフォースレットが使用するオブジェクト特性を有し、このオブジェクト特性はプログラマを支援する。
【０１２５】
例１２はテンプレートフォースレットを示す。
例１２
ｔａｒｇｅｔ
０  ｎｏｄｅ！
０  ｏｒｇ
ｆｏｒｔｈｌｅｔｒ  ｃｌｉｐｐｅｒ  ＼データストリームを符号なしｆｍａｘ＃にクリップ
ｉｏｐｏｒｔ＃  ｌａ                ＼未設定の入出力ポートアドレスを特定
ｆｍａｘ＃                          ＼未設定のクリッピング用最大値を特定
：ｃｌｉｐ
・・・                              ＼様々な方法でコーディング
＠ｂ  Ｃｎｔｍｓｇ＃  ａｎｄ        ＼未設定の制御メッセージ用ポートを特定
・・・
ｃｌｉｐ―；
ｆｅｎｄ
【０１２６】
この例は、再配置可能フォースレットとしてのデータクリッパの定義を示す。「ｉｏｐｏｒｔ＃」および「ｆｍａｘ＃」および「Ｃｎｔｍｓｇ＃」という名前を使用することで、このフォースレットがフォースレット内部に相対アドレスを有する３つの領域を有し、テンプレートがインスタンス化されるときその領域はインスタンス変数を含むことが指定される。再配置可能フォースレット内で３つの名前を使用することで、このフォースレットのコピーを作成できること、フォースレットのコピーをメモリ内の適合する任意のノードおよびアドレスに再配置できること、および既知の特性を有するインスタンス化すべき３つの領域をフォースレットのコピーが有することを、コンパイラに伝える。コンパイラは、再配置可能フォースレットの構築時にこれらのキーワードを認識し、２つの近傍アドレスの組み合わせを［ｉｏｐｏｒｔ＃］領域が含むことを理解する。その２つの近傍アドレスの組み合わせから、２つのデータサンプルがこのフォースレットにより読み書きされる。その領域の内容は、このプログラムのインスタンスがアレイ内の位置に置かれて現実のプログラム内のデータサンプルを処理するとき、２つのポートの組合せアドレスを適切な近傍に対して設定する。
【０１２７】
コンパイラは、到着する制御メッセージに対してチェックされるポートのアドレスを［Ｃｎｔｍｓｇ＃］領域が指定すること、およびこのクリッパによりストリームに渡される最大値である値を［ｆｍａｘ＃］領域が含むことも理解する。コンパイラは、このフォースレットが３つのポートを要求するという特性をこのフォースレットがさらに有することを判定し、従ってこのフォースレットを２つのポートしか有さない隅のノードに置くことはできない。ソフトウェアは、従ってテンプレート化されたプログラムをアレイに置き、アレイの各ノードを通るメッセージおよび制御パスが正しくてフローデッドロックが存在しないことを数学的に証明できるようにする。
【０１２８】
テンプレートフォースレットはある特性を有する実行可能フォースレットのタイプであり、その特性はテンプレート種類に関連付けられ、テンプレートフォースレットがそのテンプレート種類である。これらのオブジェクト特性領域は、フォースレットの汎用関数は何か、およびそのフォースレットが安全に操作できる特性は何かをコンパイラとプログラマに伝える。ＦＩＲフィルタ要素テンプレートが例となるであろう。多段ＦＩＲフィルタを、各ノードがフィルタ関数の一部を実行するノードの作業グループ上で構築することができる。全体のフィルタ関数は、カスケード化されたフィルタ要素の各段階上で特定の設定により判定される。各フィルタ要素内のコードはタップフィードバックに対する遅延、各タップでフィードバックされるデータを乗ずる定数、およびデータが次のフィルタ段階において読み込まれ、次のフィルタ段階に書込まれるポートを除いて同じである。テンプレートフォースレットはこのコードから構成され、このコードは、操作可能なパラメータの場所とそれらのパラメータが何を表すかの仕様を有する。
【０１２９】
コンパイラによって安全に関数にマップされる予め定義した関数テンプレートを使用することで、多くの問題を解決することができる。これらの特性を、プログラマに対してグラフィカルに表すこともでき、可視化により設計を支援し、設計の正確性を確認することができる。より高レベルなフォースレットは、これらのテンプレートフォースレット特性の領域を使用して、モジュールが近傍モジュールとマッチする部分で構築され、デッドロックを許すようにモジュールが接続する場合のコード構築を防止することを保証する。
【０１３０】
高レベルフォースレットはフォースレットウィザードとも呼ばれ、要望どおりに高レベルであることができる。高レベルフォースレットはコンパイラの一部であり、プログラマがコードを設計、構築、検証することを支援する。高レベルフォースレットはフォースレットのオブジェクト特性を使用して、プログラマ用のオブジェクトを構築する。フォースレットライブラリ内にいくつかのフォースレットウィザードがあり、交互にフォースレットウィザードが使用して新しいフォースレットウィザードの構築を支援できる付属文書がある。
【０１３１】
ＦＩＲフィルタテンプレートフォースレットの前例において、フィルタビルダウィザードフォースレットは、フィルタの高レベル記述を受け入れることができ、各ノードが並列分散多段階ＦＩＲフィルタをノードグループ上で生成するために必要な、遅延、タップ、定数、およびポートの向きを決定する計算を実行することができる。フィルタビルダウィザードフォースレットは、ＦＩＲフィルタフォースレットを各ノードに対してインスタンス化し、ソフトウェアをロードおよび開始するのに必要なフォースレットラッパをノードの作業グループ全体に追加することができる。
【０１３２】
上述のウィザードは、アナログコンポーネントオブジェクト、Ｒ／Ｆコンポーネントオブジェクトの構築において支援することができる。Ｒ／Ｆコンポーネントは、トランスミッタ、レシーバ、フィルタ、プロトコルトランスレータ、またはライブラリに追加される任意のものを含むことができる。
【０１３３】
診断フォースレットはプロセッサのポート上で実行し、そのプロセッサの状態の完全なビュー、またはその状態に関する任意の特定情報を、ＰＣ上の開発システムなどのいくつかの他の位置に対して、または無線リンク上で遠隔地に対しても、返すことができる。
【０１３４】
フォースレットインタプリタは、それがフォースレットアドレスの一覧からフォースレットを実行するという点で、従来のフォースシステムと非常に類似する。その一覧は外部メモリに存在し、１つのアドレスが１度にその一覧から読出される。このアドレスはその後、Ｘ０を有するＲＡＭサーバ上で実行される。内部の詳細は、従来のスレッド化したフォースシステムに非常に類似する。分岐は、フォースレットインタプリタポインタ等のｒａｍ実行をリセットする。このように動作するフォースレットインタプリタは、従来のプロセッサのようにあたかも非常に大きなアドレス空間から動作する非常に大きなプログラムを書かせる。フォース語の大きさは、我々のローカルノードの１つの上にあるメモリサイズに制限されないが、外部メモリのサイズにより制限される。フォースレットインタプリタの使用により、我々は、コンパイル時に生じるとして前述した多くのことを実行時に行うことができる。フォースレットの構築および配布に関してコンパイラができる高性能な点は、実行時に任意に行うことができることである。動的フィルタビルダタイプのプログラムが例となるであろう。動的フィルタビルダタイプのプログラムは、実行時に組込みチップ上で実行し、それにより分散プロセッサ上でロードおよび実行されるフォースレットコードを圧縮できる方法を利用する。ランタイムフォースレットインタプリタオブジェクトとして含まれるテンプレートおよびインスタンス化プログラムは、各時点でフィルタ要素が複製されるインスタンス化ノードの完全なセットよりも、小さい場合もある。
【０１３５】
動的フォースレットディスパッチャは高レベルフォースレットである。動的ランタイム負荷調整が、実行可能なフォースレットおよびフォースレットの作業グループを動的にディスパッチするフォースレットを使用して、いくつかのアプリケーションに対して達成される。この動的なディスパッチは、その時点で利用可能なノード数、あるいは物理またはＲ／Ｆリンクを使用してネットワーク化されたチップの数に基づく。
【０１３６】
高レベルフォースレットは、可視化ツールおよびプロファイラとして動作することもできる。高レベルフォースレットはコンパイルされたフォースレットのオブジェクト特性を検査し、アプリケーションの配布、利用、および効率性の有用な可視化を提供することができる。可視化ツールおよびプロファイラは、従来のフォースコマンドインタプリタとして振舞う完全に対話的な環境を含むことができる。従来のフォースコマンドインタプリタは、プロセッサおよびコードとライブベースで対話する能力を有する全てのコア上で実行する。このことはフォースに関する従来の強みであり、アプリケーションを素早くデバッグするのに必要な煩わしく目障りなインサーキットエミュレーションハードウェアの必要がなくなる。
【０１３７】
本発明のコンピュータアレイ１０およびコンピュータ１２の特定の例を本明細書内で説明してきたが、まだ想定していない非常に多くのアプリケーションがこれらに対して存在するであろう。実際、本発明の方法および装置を非常に様々な用途に対して適用可能であることが、本発明の利点の一つである。
【０１３８】
上記の全ては、本発明の利用可能な実施形態の例のいくつかでしかない。当技術分野の技術者は、本発明の精神および範囲から逸脱することなく多数の他の修正および変更が可能であることに容易に気づくであろう。従って、本開示は制限事項として意図しておらず、付属請求項が本発明の範囲全体を網羅するとして理解されるべきである。
【０１３９】
構成要素のリスト
１０  コンピュータアレイ
１２  コンピュータ
１２ａ  メモリ制御コンピュータ
１４  ダイ
１６  データ線
１８  フラッシュメモリ
２０  ＲＡＭ
２２  シリアルデータ線
２４  並列データバス
２６ａから２６ｐ  入出力回路
２８  プロセッサ
３０  ＲＯＭ
３２  コンピュータＲＡＭ
３４  計算コア
３６  コンピュータアレイの方法
３８  相互接続されたコンピュータを提供する
４０  コンピュータをタスクに対して構成する
４２  タスクをコンピュータに割り当てる
４４  コンピュータを初期化する
【図面の簡単な説明】
【０１４０】
【図１】本発明のコンピュータアレイの線図である。
【図２】図１のコンピュータのサブセットを示す詳細図であり、図１の相互接続データバスのより詳細な図である。
【図３】図１および図２のコンピュータの１つの一般的な配置を示すブロック図である。
【図４】命令語４８の図表示である。
【図５】図３のスロットシーケンサ４２の略図である。
【図６】本発明のマイクロループの例を示すフロー図である。
【図７】ポートからの命令を実行する本発明の方法の例を示すフロー図である。
【図８】コンピュータに警告を発する本発明の改善した方法の例を示すフロー図である。
【図９】コンピュータ１２ｆおよび１２ｇの動作を示す図である。
【符号の説明】
【０１４１】
２４  ランダムアクセスメモリ（ＲＡＭ）
２６  読み取り専用メモリ（ＲＯＭ）
３８ａ  上ポート
３８ｃ  左ポート
３８ｂ  右ポート
３８ｄ  下ポート
２８  リターンスタック
３０  命令
３２  演算論理装置
３４  データ
７２  肯定応答線
【図１】
2007272895.tif 000003
【図２】
2007272895.tif 000004
【図３】
2007272895.tif 000005
【図４】
2007272895.tif 000006
【図５】
2007272895.tif 000007
【図６】
2007272895.tif 000008
【図７】
2007272895.tif 000009
【図８】
2007272895.tif 000010
【図９】
2007272895.tif 000011
【外国語明細書】
2007272895000001.pdf