(57)【特許請求の範囲】
【請求項１】
メッセージバス（１４２０）と制御ノード（１４０６）とにより特徴付けられる装置であって、
前記制御ノードが、
ホストプロセッサ（１３１６）と通信するように構成されるホストインタフェース（１４０５）と、
各々が前記メッセージバスに結合される、複数のパーティションメッセージパイプライン（６１３４−１〜６１３４−Ｒ、６１３６−１〜６１３６−Ｒ、６１３８−１〜６１３８−Ｒ）と、
前記メッセージバスに結合されるロード／保存メッセージパイプライン（６１３４−（Ｒ＋２）、６１３６−（Ｒ＋２）、６１３８−（Ｒ＋２））と、
各パーティションメッセージパイプラインと前記ロード／保存メッセージパイプラインと前記ホストインタフェースとに結合されるメッセージキュー（６１０２）と、
各パーティションメッセージパイプラインと前記ロード／保存メッセージパイプラインとに結合されるシーケンシャルプロセッサ（６１４０）と、
前記ホストインタフェースと前記メッセージキューとに結合される制御ノードメモリ（６１１４）と、
を有する、装置。
【請求項２】
請求項１に記載の装置であって、
前記パーティションメッセージパイプラインと前記ロード／保存メッセージパイプラインとの各々が、
前記メッセージバスに結合されるスレーブインタフェース（６１３４−１〜６１３４−Ｒ、６１３４−（Ｒ＋２））と、
前記メッセージキューと前記シーケンシャルプロセッサと前記スレーブインタフェースとに結合されるメッセージプレプロセッサ（６１３６−１〜６１３４−Ｒ、６１３６−（Ｒ＋２））と、
前記メッセージバスと前記メッセージプレプロセッサとに結合されるマスタインタフェース（６１３８−１〜６１３８−Ｒ、６１３８−（Ｒ＋２））と、
により更に特徴付けられる、装置。
【請求項３】
請求項１又は２に記載の装置であって、
前記制御ノードが、
前記シーケンシャルプロセッサと前記制御ノードメモリとの間に結合され、且つ、前記パーティションメッセージパイプラインの各々と前記ロード／保存メッセージパイプラインとに結合されるエクストラクタ（６１４２）により更に特徴付けられる、装置。
【請求項４】
請求項１、２又は３に記載の装置であって、
前記制御ノードが、前記制御ノードメモリに結合されるレジスタ（６１４４）により更に特徴付けられる、装置。
【請求項５】
請求項１、２、３又は４に記載の装置であって、
前記制御ノードが、前記メッセージキューと前記ホストインタフェースとの間に結合されるアービタ（６１４６）により更に特徴付けられる、装置。
【請求項６】
ホストプロセッサ（１３１６）と、
システムメモリ（１４１６）と、
前記システムメモリに結合される処理クラスタと、
により特徴付けられるシステムであって、
前記処理クラスタが、
メッセージバス（１４２０）と、
データバス（１４２２）と、
パーティション（１４０２−１〜１４０２−Ｒ）に配される複数の処理ノード（８０８−１〜８０８−Ｎ）であって、各パーティションが前記データバスに結合されるバスインタフェースユニット（４７１０−１〜４７１０−Ｒ）を有し、各処理ノードが前記メッセージバスに結合される、前記複数の処理ノードと、
前記メッセージバスと前記データバスとに結合されるロード／保存ユニット（１４０８）と、
制御ノード（１４０６）と、
を含み、
前記制御ノードが、
前記ホストプロセッサに結合されるホストインタフェース（１４０５）と、
各々が前記メッセージバスに結合される、複数のパーティションメッセージパイプライン（６１３４−１〜６１３４−Ｒ、６１３６−１〜６１３６−Ｒ、６１３８−１〜６１３８−Ｒ）と、
前記メッセージバスに結合されるロード／保存メッセージパイプライン（６１３４−（Ｒ＋２）、６１３６−（Ｒ＋２）、６１３８−（Ｒ＋２））と、
各パーティションメッセージパイプラインと前記ロード／保存メッセージパイプラインと前記ホストインタフェースとに結合されるメッセージキュー（６１０２）と、
各パーティションメッセージパイプラインと前記ロード／保存メッセージパイプラインとに結合されるシーケンシャルプロセッサ（６１４０）と、
前記ホストインタフェースと前記メッセージキューとに結合される制御ノードメモリ（６１１４）と、
を有する、システム。
【請求項７】
請求項６に記載のシステムであって、
前記パーティションメッセージパイプラインと前記ロード／保存メッセージパイプラインとの各々が、
前記メッセージバスに結合されるスレーブインタフェース（６１３４−１〜６１３４−Ｒ、６１３４−（Ｒ＋２））と、
前記メッセージキューと前記シーケンシャルプロセッサと前記スレーブインタフェースとに結合されるメッセージプレプロセッサ（６１３６−１〜６１３６−Ｒ、６１３６−（Ｒ＋２））と、
前記メッセージバスと前記メッセージプレプロセッサとに結合されるマスタインタフェース（６１３８−１〜６１３８−Ｒ、６１３８−（Ｒ＋２））と、
により更に特徴付けられる、システム。
【請求項８】
請求項６又は７に記載のシステムであって、
前記制御ノードが、
前記シーケンシャルプロセッサと前記制御ノードメモリとの間に結合され、且つ、前記パーティションメッセージパイプラインの各々と前記ロード／保存メッセージパイプラインとに結合されるエクストラクタ（６１４２）により更に特徴付けられる、システム。
【請求項９】
請求項６、７又は８に記載のシステムであって、
前記制御ノードが、前記制御ノードメモリに結合されるレジスタ（６１４４）により更に特徴付けられる、システム。
【請求項１０】
請求項６、７、８又は９に記載のシステムであって、
前記制御ノードが、前記メッセージキューと前記ホストインタフェースとの間に結合されるアービタ（６１４６）により更に特徴付けられる、システム。
【請求項１１】
請求項６、７、８、９又は１０に記載のシステムであって、
前記システムが、前記データバスと前記ロード／保存ユニットとの間に結合されるデータインターコネクト（８１４）により更に特徴付けられる、システム。
【請求項１２】
請求項６、７、８、９、１０又は１１に記載のシステムであって、
前記システムが、
前記制御ノードと前記ホストプロセッサとに結合されるシステムバス（１３２６、１３２８）と、
前記システムバスに結合されるメモリコントローラ（１３０４）と、
前記システムバスに結合されるシステムメモリ（１４１６）と、
により更に特徴付けられる、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概してプロセッサに関し、より具体的には処理クラスタに関する。
【背景技術】
【０００２】
図１はマルチコアシステム（２〜１６コアの範囲）についての実行速度のスピードアップ対並列オーバーヘッドを示すグラフである。スピードアップとは、単一プロセッサの実行時間を並列プロセッサの実行時間で除したものである。図からわかるように、多数のコアから有意な利益を得るために、並列オーバーヘッドはゼロに近くなければならない。しかし並列プログラム間に何らかの相互作用が存在する場合、オーバーヘッドは極めて高くなる傾向があるため、完全に分離されたプログラムでなければ２又は３以上のプロセッサを効率的に使用するのは通常極めて難しい。従って、改善された処理クラスタが必要とされている。
【発明の概要】
【０００３】
従って、本開示の実施形態は装置を提供する。この装置は、メッセージバス（１４２０）、及び制御ノード（１４０６）により特徴付けられる。制御ノードは、ホストプロセッサ（１３１６）と通信するように構成されるホストインタフェース（１４０５）、各々前記メッセージバスに結合される複数のパーティションメッセージパイプライン（６１３４−１〜６１３４−Ｒ、６１３６−１〜６１３６−Ｒ、及び６１３８−１〜６１３８−Ｒ）、前記メッセージバスに結合されるロード／保存メッセージパイプライン（６１３４−（Ｒ＋２）、６１３６−（Ｒ＋２）、及び６１３８−（Ｒ＋２））、各パーティションメッセージパイプライン、前記ロード／保存メッセージパイプライン、及び前記ホストインタフェースに結合されるメッセージキュー（６１０２）、各パーティションメッセージパイプライン及び前記ロード／保存メッセージパイプラインに結合されるシーケンシャルプロセッサ（６１４０）、及び前記ホストインタフェース及び前記メッセージキューに結合される制御ノードメモリ（６１１４）を有する。
【図面の簡単な説明】
【０００４】
【図１】マルチコアのスピードアップパラメータのグラフである。
【０００５】
【図２】本開示の実施形態に従ったシステムの図である。
【０００６】
【図３】本開示の実施形態に従ったＳＯＣの図である。
【０００７】
【図４Ａ】本開示の実施形態に従った並列処理クラスタの図である。
【図４Ｂ】本開示の実施形態に従った並列処理クラスタの図である。
【０００８】
【図５】制御ノードの一例の図である。
【図６】制御ノードの一例の図である。
【０００９】
【図７】スレーブとマスタとの間のプロトコルの一例のタイミング図である。
【００１０】
【図８】メッセージの図である。
【００１１】
【図９】終了メッセージのフォーマットの一例の図である。
【００１２】
【図１０】終了メッセージ処理フローの一例の図である。
【００１３】
【図１１】「パックド」形式の書き込まれたエントリを送信する制御ノードの図である。
【００１４】
【図１２】ヘッダー及びメッセージペイロードから概して構成されるアクションの図である。
【００１５】
【図１３】制御ノードメモリのための特殊なアクション更新の図である。
【発明を実施するための形態】
【００１６】
図２では、並列処理を実行するＳＯＣ用アプリケーションの例が見られる。この例では、撮像デバイス１２５０が示される。この（例えば携帯電話又はカメラであり得る）撮像デバイス１２５０は、概して、画像センサ１２５２、ＳＯＣ１３００、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）１３１５、フラッシュメモリ１３１４、ディスプレイ１２５４、及び電力管理集積回路（ＰＭＩＣ）１２５６を含む。動作では、画像センサ１２５２は、（静止画像又はビデオであり得る）画像情報を捕捉することができ、この画像情報はＳＯＣ１３００及びＤＲＡＭ１３１５によって処理され得、不揮発性メモリ（即ち、フラッシュメモリ１３１４）に保存され得る。また、フラッシュメモリ１３１４に保存される画像情報は、ＳＯＣ１３００及びＤＲＡＭ１３１５の使用によって、ディスプレイ１２５４上で使用するために表示され得る。また、撮像デバイス１２５０は、可搬型であることが多く、電源としてバッテリを含む。（ＳＯＣ１３００によって制御され得る）ＰＭＩＣ１２５６は、バッテリ寿命を長持ちさせるために電力使用量の調整を補助し得る。
【００１７】
図３では、本開示の実施形態に従ったシステムオンチップ又はＳＯＣ１３００の例が図示されている。この（典型的には、ＯＭＡＰ（登録商標）等の集積回路又はＩＣである）ＳＯＣ１３００は、（概して上述の並列処理を実行する）処理クラスタ１４００、及び、（上で説明及び参照された）ホスト環境を提供するホストプロセッサ１３１６を概して含む。ホストプロセッサ１３１６は、ワイド（即ち、３２ビット、６４ビット等）ＲＩＳＣプロセッサ（例えばＡＲＭ  Ｃｏｒｔｅｘ−Ａ９等）であり得、バスアービトレータ１３１０、バッファ１３０６、（ホストプロセッサ１３１６がインタフェースバス又はＩバス１３３０上で周辺インタフェース１３２４にアクセスすることを許可する）バスブリッジ１３２０、ハードウェアアプリケーションプログラミングインタフェース（ＡＰＩ）１３０８、及び割り込みコントローラ１３２２と、ホストプロセッサバス又はＨＰバス１３２８上で通信する。処理クラスタ１４００は、典型的に、（例えば荷電結合デバイス、又はＣＣＤインタフェースであり得、オフチップデバイスと通信し得る）機能回路要素１３０２、バッファ１３０６、バスアービトレータ１３１０、及び周辺インタフェース１３２４と、処理クラスタバス又はＰＣバス１３２６上で、通信する。この構成を用いて、ホストプロセッサ１３１６は、ＡＰＩ１３０８を介して情報を提供する（即ち、所望の並列実装に適合するように処理クラスタ１４００を構成する）ことができ、一方、処理クラスタ１４００及びホストプロセッサ１３１６はいずれも、（フラッシュインタフェース１３１２を介して）フラッシュメモリ１３１４に、（メモリコントローラ１３０４を介して）ＤＲＡＭ１３１５に、直接アクセスできる。また、Ｊｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ（ＪＴＡＧ）インタフェース１３１８を介して、テスト及びバウンダリスキャンが実行され得る。
【００１８】
図４を参照すると、本開示の実施形態に従った並列処理クラスタ１４００の例が示されている。典型的には、処理クラスタ１４００はハードウェア７２２に対応する。処理クラスタ１４００は、概して、パーティション１４０２−１〜１４０２−Ｒを含む。これらは、ノード８０８−１〜８０８−Ｎ、ノードラッパー８１０−１〜８１０−Ｎ、命令メモリ１４０４−１〜１４０４−Ｒ、及び（以下で詳しく説明する）バスインタフェースユニット又は（ＢＩＵ）４７１０−１〜４７１０−Ｒを含む。ノード８０８−１〜８０８−Ｎは、各々データインターコネクト８１４に（各々のＢＩＵ４７１０−１〜４７１０−Ｒ及びデータバス１４２２を介して）結合され、パーティション１４０２−１〜１４０２−Ｒのための制御及びメッセージが制御ノード１４０６からメッセージ１４２０を介して提供される。また、グローバルロード／保存（ＧＬＳ）ユニット１４０８及び共有機能メモリ１４１０は、（後述のように）データ移動のための付加的な機能を提供する。それに加えて、レベル３又はＬ３キャッシュ１４１２、（概して、ＩＣ内には含まれない）周辺装置１４１４、（典型的にはフラッシュメモリ１３１４及び／又はＤＲＡＭ１３１５、並びにＳＯＣ１３００内に含まれないその他のメモリである）メモリ１４１６、及びハードウェアアクセラレータ（ＨＷＡ）ユニット１４１８が処理クラスタ１４００と共に用いられる。また、データ及びアドレスを制御ノード１４０６に通信するように、インタフェース１４０５が提供される。
【００１９】
処理クラスタ１４００は、概して、データ伝送のために「プッシュ」モデルを使用する。データ伝送は要求応答型のアクセスではなく、概してポステッドライトとして現れる。これは、データ伝送が一方向であるため要求応答アクセスに比べてグローバルインターコネクト（即ち、データインターコネクト８１４）の占有を２分の１に減らすという利点を有する。概して、インターコネクト８１４を介して要求をルーティングし、その後、応答が要求元へルーティングされ、その結果インターコネクト８１４上で２つの遷移が生成されることは望まれない。プッシュモデルは単一伝送を生成する。これは、ネットワークサイズが増大するとネットワークレイテンシが増大するため、またこのことが要求応答型トランザクションのパフォーマンスを低下させることは避けられないことであるため、スケーラビリティに関して重要である。
【００２０】
プッシュモデルは、データフロープロトコル（即ち、８１２−１〜８１２−Ｎ）と同様に、グローバルデータトラフィックを、正確さのために用いられるものまで概して最小化する一方、ローカルノードの利用率に対するグローバルデータフローの影響も概して最小化する。大量のグローバルトラフィックであってもノード（即ち、８０８−ｉ）のパフォーマンスに対する影響は、通常、皆無に近い。ソースはデータを（後述する）グローバル出力バッファに書き込み、伝送成功の確認を要求することなく継続する。データフロープロトコル（即ち、８１２−１〜８１２−Ｎ）は、概して、インターコネクト８１４で単一伝送を用い、データをあて先へ移動する最初の試みでの伝送が成功することを確実にする。（後述する）グローバル出力バッファは（例えば）最大１６出力まで保持することができるため、出力のための瞬時グローバル帯域幅が不充分になることに起因するノード（即ち、８０８−ｉ）のストールの可能性が非常に低くなる。更に、瞬時帯域幅は、要求応答トランザクション又は伝送失敗の繰り返しによる影響を受けない。
【００２１】
最後に、プッシュモデルはプログラミングモデルに一層密接に適合する。言い換えるとプログラムは自己データを「フェッチ」せずに、その代わりに、プログラムの入力変数及び／又はパラメータは呼び出される前に書き込まれる。プログラミング環境では、入力変数の初期化は、ソースプログラムによるメモリへの書き込みとして行われる。処理クラスタ１４００内では、これらの書き込みがポステッドライトに変換され、変数の値をノードコンテキストにポピュレートさせる。
【００２２】
（後述する）グローバル入力バッファは、ソースノードからデータを受け取るために用いられる。各ノード８０８−１〜８０８−Ｎのためのデータメモリが単一ポートであるため、入力データの書き込みが、ローカルの単一入力多重データ（ＳＩＭＤ）による読み出しとコンフリクトすることがあり得る。入力データをグローバル入力バッファへ受け入れ、そこで入力データが空きのデータメモリサイクルを待つことができることによって、この競合は回避される（即ち、ＳＩＭＤアクセスとのバンクコンフリクトはない）。データメモリは、（例えば）３２バンクを有し得るため、直ちにバッファがフリーになる可能性が非常に高い。しかしながら、伝送を確認するためのハンドシェイキングがないので、ノード（即ち、８０８−ｉ）はフリーのバッファエントリを持つはずである。所望とされる場合は、グローバル入力バッファは、バッファ位置をフリーにするために、ローカルノード（即ち、８０８−ｉ）をストールさせてデータメモリに強制的に書き込みを行うことができるが、このイベントは極めて希であるべきである。典型的には、グローバル入力バッファは２つの別々のランダムアクセスメモリ（ＲＡＭ）として実装されて、一方がデータメモリへ読み出されるべき状態にある間、他方がグローバルデータを書き込むための状態になり得るようにする。メッセージングインターコネクトは、グローバルデータインターコネクトとは分かれているが、同様にプッシュモデルを使用する。
【００２３】
システムレベルでは、所望のスループットにスケーリングされた多数のノードを備えるＳＭＰ又は対称型多重処理のように、ノード８０８−１〜８０８−Ｎが処理クラスタ１４００内で複製される。処理クラスタ１４００は極めて多数のノードにまでスケーリングし得る。ノード８０８−１〜８０８−Ｎはパーティション１４０２−１〜１４０２−Ｒにグループ分けされ、各パーティションは１つ又は複数のノードを有する。パーティション１４０２−１〜１４０２−Ｒは、ノード間のローカル通信を増大させることによって及びより大きなプログラムで一層大量の出力データを計算させることによってスケーラビィリティを促進し、その結果、所望のスループット要件を達成する可能性を更に高める。パーティション（即ち、１４０２−ｉ）内では、ノードはローカルインターコネクトを用いて通信し、グローバルリソースを必要としない。また、パーティション（即ち、１４０４−ｉ）内のノードは、排他的命令メモリを用いる各ノードから共通命令メモリを用いる全てのノードまで、任意の粒度で、命令メモリ（即ち、１４０４−ｉ）を共有することができる。例えば３つのノードが命令メモリの３つのバンクを共有し、第４のノードが命令メモリの排他的バンクを有することができる。ノードが命令メモリ（即ち、１４０４−ｉ）を共有するとき、それらのノードは、概して、同じプログラムを同期的に実行する。
【００２４】
また、処理クラスタ１４００は非常に多数のノード（即ち、８０８−ｉ）及びパーティション（即ち、１４０２−ｉ）をサポートし得る。しかしながら、１つのパーティションについて４以上のノードを持つと概してノンユニフォームメモリアクセス（ＮＵＭＡ）アーキテクチャに類似するため、パーティション毎のノードの数は通常は４つに限定されている。この例では、パーティションは、（後でインターコネクト８１４に関連して説明する）１つ（又は複数）のクロスバーを介して接続される。クロスバーは概して横断帯域幅が一定している。処理クラスタ１４００は、現在、サイクル毎に１ノード幅のデータ（例えば６４、１６ビットピクセル）を伝送するように設計されており、４サイクルに亘り、１サイクルにつき１６ピクセルの４伝送に区分される。処理クラスタ１４００は、概して、レイテンシトレラントであり、インターコネクト８１４がほぼ飽和（この状態を達成するのは合成プログラム以外では極めて難しいことに留意されたい）であっても、ノードバッファリングが、概して、ノードストールを防止する。
【００２５】
典型的には、処理クラスタ１４００はパーティション間で共有する下記のグローバルリソースを含む。
（１）  制御ノード１４０６。これは（メッセージバス１４２０で）システムワイドのメッセージングインターコネクト、イベント処理及びスケジューリング、及びホストプロセッサ及びデバッガ（これらは全て後で詳しく説明する）へのインタフェースを提供する。
（２）  ＧＬＳユニット１４０８。これはプログラマブルＲＩＳＣプロセッサを含み、システムデータ移動を可能にする。システムデータ移動は、ＧＬＳデータ移動スレッドとして直接コンパイルされ得るＣ＋＋プログラムによって記述され得る。これによって、ソースコードを修正することなく、クロスホスト環境でのシステムコードの実行が可能になり、また、システム又は（後述する）ＳＩＭＤデータメモリ内の任意のアドレス（変数）のセットから別の任意のアドレス（変数）のセットに移動できるため、ダイレクトメモリアクセスよりもより一般的である。ＧＬＳユニット１４０８は、（例えば）０−サイクルのコンテキストスイッチを備え、マルチスレッド化され、例えば最大１６スレッドまでサポートする。
（３）  共有機能メモリ１４１０。これは、一般的なルックアップテーブル（ＬＵＴ）及び統計収集機能（ヒストグラム）を提供する大型共有メモリである。また、これは大型共有メモリを使用して、リサンプリング及び歪補正等のノードＳＩＭＤにより（コストの理由で）充分サポートされていないピクセル処理をサポートし得る。この処理はネイティブタイプとして、スカラ、ベクトル、及び２Ｄアレイを実装する（例えば）６発行命令ＲＩＳＣプロセッサ（即ち、後で詳しく説明するＳＦＭプロセッサ７６１４）を用いる。
（４）  ハードウェアアクセラレータ１４１８。これは、プログラマビリティを必要としない機能のため、或いは電力及び／又は面積を最適化するために組み込まれ得る。アクセラレータは、サブシステムにはシステム内の他のノードとして現れ、制御及びデータフローに参加し、イベントを作成可能であり、スケジューリング可能である。またデバッガにとっては可視的である。（ハードウェアアクセラレータは、適用可能であるときは、専用のＬＵＴ及び統計収集を有し得る。）
（５）  データインターコネクト８１４及びシステムオープンコアプロトコル（ＯＣＰ）Ｌ３接続１４１２。これらは、ノードパーティション、ハードウェアアクセラレータ、及びシステムメモリ、及び、データバス１４２２上の周辺装置の間のデータ移動を管理する。（ハードウェアアクセラレータは、Ｌ３へのプライベート接続も有し得る）。
（６）  デバッグインタフェース。これらは、図には示されていないが、本明細書中に記載される。
【００２６】
制御ノード１４０６は、パーティション１４０２−１〜１４０２−Ｒ、共有された機能メモリ１４１０、ＧＬＳユニット１４０８、及びハードウェアアクセラレータ１４１８間を流れるメッセージトラフィックを扱うことを担い得る。これらのメッセージは、初期化メッセージ及び安定状態メッセージとして分類され得る。初期化メッセージは、メッセージノード１４０６自体を制御することが意図される、例えば、ＧＬＳユニット１４０８又は制御ノードデータメモリ初期化メッセージからのアクション更新リストメッセージを含む。制御ノード１４０６に対し意図されるメッセージは、アクションリストメモリを初期化するためか又は制御ノード１４０６から何らかの種類のインタラプトを生じるためいずれかのアクションリストメッセージ（例えばＨＡＬＴ＿ＡＣＫメッセージ）である。これらのメッセージは、｛ＳＥＧＩＤ、ノードＩＤ｝組合せを用いることにより識別される。
【００２７】
しかし、図５及び６に移ると、制御ノード１４０８のための一般的構造を見ることができる。好ましくは、制御ノード１４０８は、システムワイドメッセージングインターコネクト、事象処理及びスケジューリング、及びホストプロセッサ（スレーブ）へのインタフェースを実装することができる。制御ノード１４０８により実装され得る機能の一例は次の通りである：
（１）  メッセージの配路及び分布。典型的に、全てのメッセージは制御ノード１４０６を介して配路され得、制御ノード１４０６は、デバッグのためのメッセージトレースを生成する手段を提供することができる。これは、この中央集中分布ポイントがないと生じ得る競合条件を避けるために、事象通知をシリアル化することもできる。
（２）  シーケンス化及び制御のためのメッセージの処理。
（３）  データ／アドレス及びインタラプトインタフェースを含み、ホストプロセッサをインタフェースすること。
（４）  ホストプロセッサ又は特殊化されたデバッグポートのいずれかによりデバッグをサポートすること。
（５）  トレースポートを介してトレースメッセージを提供すること。
（６）  メッセージキューを提供すること。
また、制御ノードは下記を担っている：
（１）  入力｛セグメントＩＤ。ノードＩＤ｝ヘッダー情報に基づいて、入力処理クラスタ１４００メッセージを適切なポートに配路すること。
（２）  そのアクションリストＲＡＭにおける情報に基づいて、プロセス終了メッセージ内部的に処理すること。
（３）  ホストインタフェースが内部レジスタを構成できるようにすること。
（４）  （ホストがアクセスしていない場合）デバッグインタフェースが内部レジスタを構成できるようにすること。
（５）  アクションリストＲＡＭが、ホスト／デバッガインタフェースにより又はメッセージングインタフェースを介してアクセスされ得るようにすること。
（６）  「制限なしの」メッセージ処理を可能にするアクションリスト更新メッセージのためのメッセージングキューをサポートすること。
（７）  メッセージキューにおけるアクションリストタイプ符号化を扱うこと。
（８）  アップストリーム監視／デバッグのため全ての処理されたメッセージをＡＴＢトレースインタフェースに配路すること。
（９）  「メッセージング」要求に基づいてインタラプトをアサートすること。
【００２８】
図５に示すように、制御ノード１４０６は概して、メッセージキュー６１０２、ノード入力バッファ６１３４、及び出力バッファ６１２４で構成される。典型的に、メッセージキュー６１０２は、ホストプロセッサからインタフェース１４０５を介して入力メッセージ６１０４を受け取る。これらの入力メッセージ６１０４は、データ（即ち、メッセージコンテンツ６１０６）及びアドレス（即ち、オペコード６１０８、セグメントＩＤ６１１０、及びノードＩＤ６１１２）を概して含む。ノード入力バッファ６１３４は、概して、ノード（即ち、８０８−ｉ）からメッセージを受け取り、アクションリストエントリ処理又はアクションリスト６１１６（これは、プログラムＩＤ／スレッドＩＤ６１１８、セグメントＩＤ６１２０、及びノードＩＤ６１２２を含み得る）を保存することができる制御ノードメモリ６１１４を概して含む。出力バッファ６１２４は概して、データ（即ち、メッセージコンテンツ６１３２）及びアドレス（即ち、オペコード６１２６、セグメントＩＤ６１２８、及びノードＩＤ６１３０）を有する出力メッセージを保存し、これらは、ノード（即ち、８０８−ｉ）又はトレース及びデバッグハードウェアへ送信され得る。
【００２９】
図６に移ると、制御ノード１４０６のアーキテクチャを更に詳細に見ることができる。図示するように、制御ノード１４０６は、スレーブインタフェース６１３４−１〜６１３４−Ｒ及びマスタインタフェース６１３８−１〜６１３８−Ｒを介してパーティション１４０２−１〜１４０２−Ｒ（又はノード）と、スレーブインタフェース６１３４−（Ｒ＋１）及びマスタインタフェース６１３８−（Ｒ＋１）を介してＧＬＳユニット１４０８と、インタフェース１４０５、デバッガを介してインタフェース６１３３を介してホストプロセッサと、及びインタフェース６１３５を介してトレースと、相互作用することができる。また、制御ノード１４０６は更に、メッセージプレプロセッサ６１３６−１〜６１３６−（Ｒ＋１）、シーケンシャルプロセッサ６１４０、エクストラクタ６１４２、レジスタ６１４４、及びアービタ６１４６を概して含む。
【００３０】
典型的に、入力スレーブインタフェース６１３４−１〜６１３４−（Ｒ＋１）は概して、アップストリームモジュール（即ち、ＧＬＳユニット１４０８）からの全ての進入スレーブアクセスを扱うことを担っている。スレーブとマスタとの間のプロトコルの一例を図７で見ることができる。これは、スレーブインタフェース（即ち、６１３４−１）に提供されるデータは、制御ノード１４０６により受け取られると仮定され得るが、大抵の場合そうはならない。データストールは内部的に生成され、これはマスタへＳＤＡＴＡＡＣＣＥＰＴをゲートする。マスタは、対応するＳＤＡＴＡＡＣＣＥＰＴがスレーブインタフェースにより送られるまで、ＭＤＡＴＡ値を保持すると予期される。
【００３１】
メッセージプレプロセッサ６１３８−１〜６１３８−（Ｒ＋１）は、概して、制御ノード１４０６が現在のメッセージで動作するべきか又はそれを転送するべきか判定することを担っている。これは、先ずラッチされたヘッダーバイトを復号することによって決まる。下記の表１は、制御ノード１４０６がアップストリームマスタから受信したとき復号及び動作することができる、メッセージのリストの例を示す。
【表１】
0005859017.tif 000002
示すように、｛ＳＥＧＩＤ、ノードＩＤ｝組合せが有効出力ポートを示すとき、メッセージが適切な退出ノードに転送される。
【００３２】
制御ノードデータメモリ初期化メッセージは、アクションＲＡＭ初期化のために用いられる。一例として、制御ノード１４１０がこのメッセージを受け取るとき、制御ノード１４１０は、データフィールド内に含まれる＃エントリ情報を検査する。＃エントリフィールドは通常、終了ヘッダーを除いたアクションリストエントリの数を示す。例えば、更新されるべきアクションリストエントリの数が１である（即ち、アクションリスト０）場合、＃エントリ＝１であり、アクションリスト０及びアクションリストｌが更新されるべき場合、＃エントリ＝２である。従って、＃エントリの有効範囲は１−＞２４６である。アクションリストエントリの数をビートの総数を超える（例えば）３２とする（ここで、最大ビートカウントは例えば３２である）場合がある。例えばアクションリストエントリの数が１９である場合、メッセージに対するデータビートの総数は１（＃エントリ）＋８（ノード終了ヘッダー）＋８（スレッド終了ヘッダー）＋２０（１５のアクションリストエントリは、２０ビートに変換する）＝３７ビートである。アップストリームは、これを２ビート（第１のパケットで３２ビート及び次のパケットで５ビート）に分割すると考えられる。
【００３３】
シーケンシャルプロセッサ又はシーケンサ６１４０は、種々のメッセージプレプロセッサ６１３６−１〜６１３６−（Ｒ＋１）から受け取るインディケーションに少なくとも部分的に基づいて、制御ノードメモリ６１１４へのアクセスをシーケンス化する。シーケンサ６１４０が、概して終了メッセージに用いられるそのアクションを終了した後、それは、メッセージが伝送のため準備できていることをメッセージフォワーダ又はマスタインタフェース６１３８−１〜６１３８−（Ｒ＋１）に示す。メッセージフォワーダ（即ち、６１３８−１）がメッセージ受け取り、シーケンサ６１４０をリリースすると、それは次の終了メッセージへ移る。同時に、それは更に、メッセージプレプロセッサ（即ち、６１３６−１）に、終了メッセージに対しアクションが終了したことを示す。これは、新しいメッセージを受け取るためのメッセージバッファのメッセージプレプロセッサ（即ち、６１３６−１）のリリースをトリガする。
【００３４】
メッセージフォワーダ（即ち、６１３８−１）は、それがそのメッセージプレプロセッサ（即ち、６１３６−１）だけでなくシーケンサ６１４０から受け取った全てのメッセージを転送する。メッセージフォワーダ（即ち、６１３８−１）は、制御ノード１４０６により構築された／転送されたメッセージを送るため、マスタ退出ブロックと通信することができる。対応するマスタが伝送の終了を示すと、メッセージフォワーダ（即ち、６１３８−１）は、対応するメッセージプレプロセッサ（即ち、６１３６−１）をリリースするべきであり、これがメッセージバッファをリリースする。
【００３５】
図８に移ると、メッセージ６１０４を更に詳細に見ることができる。図示するように、メッセージ６１０４（これは制御ノード１４０６により受け取られ得る）は概して、９ビットヘッダー（これは概して、メッセージ６１０４のアドレス部に対応し得る）及び１又はそれ以上であり、例えば３２ビットまでの、データビット（これは概して、データ部又はメッセージ６１０４のメッセージコンテンツ６１０６に対応し得る）を含む。オペコード６１０８（これは概して３ビットを含む）はどのアクションが制御ノード１４０６により取られるべきかを判定することができる。オペコード６１０８に加えて及び例えば、メッセージコンテンツ６１０６の上位４ビット（即ち、ビット２８〜３１）は、オペコード拡張ビット６２０２として機能し得る。下記の表２は、オペコード（オペコード拡張ビットを含む）の例を示す。
【表２】
0005859017.tif 000003
0005859017.tif 000004
0005859017.tif 000005
0005859017.tif 000006
【００３６】
多くの場合、制御ノード１４０６は典型的に、それを正しい宛先マスタポートに転送することを除き、メッセージ（即ち、６１０４）で動作しない。しかし、制御ノードは、メッセージが、それにアドレス指定されたセグメントＩＤ６１１０及びノードＩＤ６１１２組合せを含むとき、アクションを取ることができる。下記の表３は、制御ノード１４０６によりサポートされ得る、種々のセグメントＩＤ６１１０及びノードＩＤ６１１２組合せの例を示す。
【表３】
0005859017.tif 000007
【００３７】
図９に移ると、終了メッセージ６３００のフォーマットの一例を見ることができる。制御ノード１４０６が終了メッセージ６３００を受け取ると、制御ノード１４０６は下記のステップを取ることができる。先ず、制御ノード１４０６は、終了メッセージ６３００がノード（即ち、８０８−ｉ）からか又はＧＬＳユニット１４０８からかを判定し、これはセグメント６３１４及び６３１０に基づき得、この結果は、制御ノードメモリ６１１４へのベースアドレスを形成することできる。次に、制御ノード１４０６は、それがスレッド終了か又はプログラム終了かを判定することができる（これは、セグメント６３１２に基づき得る）。スレッド終了の場合、データビット６３０４内（即ち、セグメント６３０８内）に含まれるスレッドＩＤを、アクションヘッダーを抽出するためのインデックスとして用いることができる。プログラム終了の場合、データビット６３０４（即ちセグメント６３１０）に含まれるノードＩＤを、ノードメモリ６１１４を制御するためのインデックスとして用いることができる。
【００３８】
図１０において、終了メッセージ扱いフロー６４００の一例を見ることができる。制御ノード１４０６が、終了メッセージ（即ち、６３００）が受け取られ、終了メッセージ（即ち、６３００）のソースに応じているとを判定すると、アクションアドレス（ノード終了で０〜３及びＧＬＳユニット終了で４〜７）が読み取られる。即ち、アクションは、ノード終了アクションヘッダー６４０２又はロード／保存終了アクションヘッダー６４０４から判定され得る。スレッドＩＤ又はノードＩＤはその後、正確なヘッダーワード６４０６を判定するために用いられ得る。典型的に、各ヘッダーワード６４０６は、例えば１０ビットであり得、制御ノードメモリ６１１４内のワード毎に４ヘッダービットがあり得る（そのうちの１つが抽出され得る）。その後、ヘッダーワード６４０６は有効性がチェックされ得、スレッド用又はプログラムスレッド用として用いられるアクションテーブルベース（即ち、ビット７：０）が抽出され得る。プログラムスレッドに用いられるとき、下記の式を用いることができる。
ベースアドレス＝Ａｃｔｉｏｎ＿ｔａｂｌｅ＿ｂａｓｅ＋（ＰｒｏｇＩＤ＊２）、又は
ベースアドレス＝Ａｃｔｉｏｎ＿ｔａｂｌｅ＿ｂａｓｅ＋（ＰｒｏｇＩＤ＊４）
ヘッダーワード６４０６のビット−８は、乗算器を制御することができ（即ち、＊２では０であり、＊４では１）、一方、ＰｒｏｇＩＤはプログラム終了メッセージから抽出され得る。その後、メモリ６１１４からアクションリスト６１１６を抽出するためにベースアドレスを用いることができる。この４１ビットワードは、例えば、宛先ノードへのメッセージとして送られるべきヘッダーワード及びデータ−ワードに分割される。
【００３９】
アクションリスト内のメッセージエントリのフォーマットは概して、ヘッダー（即ち、メッセージオペコード、セグメントＩＤ、及びノードＩＤ）及びメッセージペイロードを含む。このメッセージエントリは、通常のエントリだけでなく特殊な符号化の両方を表し得る（それらの例は、下記の表４で見ることができる）。
【表４】
0005859017.tif 000008
【００４０】
（上記表２８に示すような）「アクションリストエンド」は概して、アクションリストメッセージの終わりを知らせる。典型的に、この符号化では制御ノード１４０６は、メッセージＩＤ及びセグメントＩＤが「０」に等しいかどうかを判定することができる。等しくない場合、ヘッダー及びデータワードが送られ、そうでない場合、エンドに達する。
【００４１】
メッセージの数が許容可能なエントリリストを超えるとき、（上記表２８に示すような）「次のリストエントリ」及び「メッセージ継続」符号化を用いることができる。典型的に、「次のリストエントリ」符号化では制御ノード１４０６は、メッセージＩＤ及びセグメントＩＤが「０」に等しいかを判定することができる。等しくない場合、ヘッダー及びデータワードが送られ、そうでない場合、次のエントリへの移動がある。ノードＩＤが４’ｂ１０００（例えば）に等しい場合、「次のリストエントリ」のための情報が抽出されて、制御ノードメモリ６１１４内の新しいアドレスへのベースアドレスを安定させる。しかし、ノードＩＤが「１」に等しい場合、符号化が「メッセージ継続」であり、次のアドレスを読み取らせる。
【００４２】
「ホストインタラプトインフォエンド」符号化（上記表２８に示すような）は概して、ホストプロセッサをインタラプトするための特殊な符号化である。この符号化が制御ノード１４０６により復号されるとき、符号化されたワードビット（即ち、ビット３１：０）のコンテンツは、内部レジスタに書き込まれ得、ホストインタラプトがアサートされる。ホストは、状態レジスタを読み出し得、インタラプトをクリアにし得る。メッセージオペコード、セグメントＩＤ、及びノードＩＤの例は、それぞれ、０００’ｂ、００’ｂ、及び００１０’ｂであり得る。
【００４３】
「デバッグ通知インフォエンド」符号化（上記表２８に示すような）は概して、「ホストインタラプトインフォエンド」符号化に類似する。しかし、違いは、この種の符号化がデバッグとして遭遇されるときインタラプトがアサートされる点である。デバッガは状態レジスタを読み出し得、インタラプトをクリアし得る。メッセージオペコード、セグメントＩＤ、及びノードＩＤの例は、それぞれ、０００’ｂ、００’ｂ、及び００１０’ｂであり得る。
【００４４】
受け取られるヘッダーワードは、進入側のソースマスタによって送られるマスタアドレスである。退出側では、典型的に、考慮すべき２つのケースがある：転送及び終了である。転送では、バッファされたマスタアドレスは、メッセージが転送されるべき場合、退出マスタで転送され得る。終了では、進入メッセージが終了メッセージである場合、退出マスタアドレスは、メッセージ、セグメント、及びノードＩＤの組み合わせであり得る。また、進入側のデータワードは、進入ポートのスレーブデータバスから抽出され得る。退出側では、（こちらも）典型的に、考慮すべき２つのケースがある：転送及び終了である。転送では、退出側のデータワードは、進入側からのバッファされたメッセージであり得、終了では、（例えば）３２ビットメッセージペイロードが転送され得る。
【００４５】
制御ノード１４０６は、ペイロードカウントなしに一連のアクションリストエントリを扱うことができる。即ち、ペイロードカウント又はリンクリストエントリなしのアクションリストエントリのシーケンスは、制御ノード１４０６により扱われ得る。最終的にはアクションリストエンドメッセージがどこかに挿入されると仮定される。しかしこのシナリオでは、制御ノード１４０６は概して、それが第１の「新しいアクションリストエントリ」に遭遇するまで、第１の一連のペイロードをバーストして送り得る。その後、後続のサブセットがバーストとして設定される。アクションリストエンドが遭遇されるまでこのプロセスが反復される。上記シーケンスは、制御ノードメモリ６１１４に保存され得る。このシーケンスの例外は、送るべき単一ビートシーケンスがあるとき生じ得る。この場合、アクションリストエンドは各ビート後に付加されることを要求する。
【００４６】
次のリストエントリを用いて、制御ノードは、任意の長さのリンクされたエントリをつくる方式を提供する。次のリストエントリが遭遇されると常に、読み出しポインタは新しいアドレスで更新され、制御ノードは通常通り処理を継続する。この状況では、最終的にはアクションリストエンドメッセージがどこかに挿入されると仮定される。また、制御ノード１４０６は、次のリストエントリによりポイントされる通りにその内部ポインタを継続的に調節し得る。このプロセスは、アクションリストエンド又はエントリ開始の新しいシリーズが遭遇されるまで反復され得る。上述のシーケンスは、制御ノードメモリ６１１４に保存され得る。
【００４７】
制御ノード１４０６は更に、多数のペイロードカウントを扱うこともできる。一連のメッセージ内でアクションリストエンド又はエントリの新しいシリーズに遭遇することなく多数のペイロードカウントが遭遇する場合、制御ノード１４０６はその内部バーストカウンタ長さを自動で更新し得る。
【００４８】
制御ノード１４０６により扱われるビートの最大数は、（例えば）３２とし得る。何らかの理由でビート長さが３２より大きい場合、終了メッセージの場合は、制御ノード１４０６がそのビートを更に小さなサブセットに分け得る。各サブセットは（この例では）最大３２ビートを有し得る。このシナリオは典型的に、ペイロードカウントが３２より大きい値に設定される、又は多数のペイロードカウントが遭遇される、又は一連のメッセージ継続メッセージがアクションリスト又は新しいシーケンス開始なしに遭遇されるときに起こる。例えばシーケンス内のペイロードカウントが４８に設定される場合、制御ノード１４０６は、これを３２ビートシーケンスに分けられ得、その後１７ビートシーケンス（１６＋１）が続き、それを同じ退出ノードに送る。
【００４９】
メッセージプレプロセッサ６１３６−１〜６１３６−（Ｒ＋１）もＨＡＬＴ＿ＡＣＫ、ブレークポイント、トレースポイント、ノード状態応答、及びプロセッサデータメモリ読み出し応答メッセージを扱うことができる。パーティション（即ち、１４０２−１）がこれらのメッセージの一つを送信するとき、メッセージプレプロセッサ（即ち、６１３６−１）は、データを抽出し、それを、デバッガ又はホストのいずれかによりアクセスされるべきデバッガＦＩＦＯに保存することができる。
【００５０】
ＨＡＬＴ＿ＡＣＫメッセージは概して、ヘッダー及びデータ（これらは集合的に符号化ビット、コンテキスト番号、セグメントＩＤ、ノードＩＤ、及び現在のプログラムカウンタを含む）を含む。ＨＡＬＴ＿ＡＣＫメッセージが進入ポートの一つで受け取られると、制御ノード１４０６は、データ（これは概して２つの３２ビットデータセグメント又はビートを含む）を抽出し、それをデバッガＦＩＦＯ（ＤＥＢＵＧ＿ＲＥＡＤ＿ＰＡＲＴレジスタを介してアクセスされ得る）に保存することができる。概して、制御ノード１４０６によりアサートされるインタラプトはない。ソフトウェアは、概してシステム同期化を維持することを担っており、進入ノード毎に両方のワードを読み出すべきである。
【００５１】
ブレークポイントメッセージは概して、ヘッダー及びデータ（これらは集合的に符号化ビット、トレースポイントマッチ（これは、「０」に設定される）、ブレークポイント識別子、コンテキスト番号、セグメントＩＤ、ノードＩＤ、及び現在のプログラムカウンタを含む）を含む。ブレークポイントメッセージが進入ポートの一つで受け取られると、制御ノード１４０６は、データ（これは概して２つの３２ビットデータセグメント又はビートを含む）を抽出し、それを（ＤＥＢＵＧ＿ＲＥＡＤ＿ＰＡＲＴレジスタを介してアクセス可能な）デバッガＦＩＦＯに保存することができる。概して、インタラプトが、制御ノード１４０６によりデバッガへアサートされ得る（ホストは、概してインタラプトを受け取らない）。ソフトウェアは、進入ノード（即ち、８０８−ｉ）毎に両方のワードを読み出すべきである。
【００５２】
ノード状態読み出し応答メッセージは概して、ヘッダー及びデータ（これらは集合的に符号化ビット、データワードの数、及び後続のビートに対するデータを含む）を含む。ノード状態読み出し応答メッセージが進入ポートの一つで受け取られると、制御ノード１４０６は、データビート（全部で１＋ＤＡＴＡ＿ＣＯＵＮＴ）を抽出し、それをデバッガＦＩＦＯ（ＤＥＢＵＧ＿ＲＥＡＤ＿ＰＡＲＴレジスタを介してアクセスされ得る）に保存するべきである。概して、制御ノード１４０６によりアサートされるべきインタラプトはない。ソフトウェアは、概してシステム同期化を維持することを担っており、進入ノード毎に全てのワードを読み出すべきである。
【００５３】
シーケンシャルプロセッサ６１４０は概して、種々のメッセージプレプロセッサ６１３６−１〜６１３６−（Ｒ＋１）から受け取られたインディケーションに少なくとも部分的に基づいて、制御ノードメモリ６１１４へのアクセスをシーケンス化する。プロセッサ６１４０は、制御ノードメモリ６１４０へのシーケンシャルアクセスを開始する。シーケンサが終了メッセージのためのそのアクションを終了した後、それは、メッセージが伝送のため準備できていることをメッセージフォワーダに示す。メッセージフォワーダが、そのメッセージを受け取り、シーケンサ６１４０をリリースすると、それは次の終了メッセージへ移る。同時にそれはまた、メッセージプレプロセッサ（即ち、６１３６−１）に、終了メッセージに対するアクションが終了したことを示す。これは、新しいメッセージを受け取るためのメッセージバッファのメッセージプリプロセッサリリースをトリガする。
【００５４】
メッセージフォワーダは、その名の通り、それがメッセージプレプロセッサ６１３６−１〜６１３６−（Ｒ＋１）だけでなくシーケンサ６１４０から受け取った全てのメッセージを転送する（転送メッセージ）。メッセージフォワーダブロックは、制御ノードにより構築された／転送されたメッセージを送るため、ＯＣＰマスタ退出ブロックと通信する。対応するＯＣＰマスタが伝送の終了を示すと、メッセージフォワーダは、対応するメッセージプレプロセッサをリリースし、これがメッセージバッファをリリースする。
【００５５】
ホストインタフェース及び構成レジスタモジュールは、制御ノード１４０６を制御するため、ホストプロセッサ１３１６のためのスレーブインタフェースを提供する。ホストインタフェース１４０５は、ホストプロセッサ１３１６への非バースト単一読み出し／書き込みインタフェースである。これは、同じ非ポステッドライト方式でポステッド及び非ポステッドＯＣＰ書き込みの両方を扱う。
【００５６】
アクションリスト６１１６内のエントリは、概して、ホスト読み出し用に又はホストライト用に（通常成されない）マッピングされたメモリである。エントリが書き込まれるべきとき、制御ノード１４０６は、コンテンツを「パックド」形式で送り、これは図１１で見ることができる。「パックド」フォーマット７１００を、３２ビットデータラインを用いて４１ビットコンテンツを表すために用いることができる。例えば及び図示するように、４１ビットリストエントリ−０を書き込むため、２つの書き込みがホストによって実行されるべきである。図１１では、エントリ７１０２〜７１２２は、ａｃｔｉｏｎ＿ｌｉｓｔ＿ｅｎｔｒｙ＿０〜ａｃｔｉｏｎ＿ｌｉｓｔ＿ｅｎｔｒｙ＿Ｎの書き込みを示す。この例に示すように、第１の書き込みは、ａｃｔｉｏｎ＿ｌｉｓｔ＿ｅｎｔｒｙ＿０の下位３２ビット（即ち、ビット３１：０）を有するべきであり（これはエントリ７１０２で見ることができる）、第２の書き込みは上位９ビット（即ち、ビット４０：３２）を有し得、これは、エントリ７１０４の下位ビット（即ち、ビット８：０）を占有し得る。ａｃｔｉｏｎ＿ｌｉｓｔ＿ｅｎｔｒｙ＿０に対し第２の３２ビットワードを書き込む間、ａｃｔｉｏｎ＿ｌｉｓｔ＿ｅｎｔｒｙ＿１ビット［２０：０］が「コラプト」しないようにも注意すべきである。このリザーブはアクションエントリ−１に書き込む間にもあてはまる。この場合、ａｃｔｉｏｎ＿ｌｉｓｔ＿ｅｎｔｒｙ＿０上位９ビットは「コラプト」すべきではない。
【００５７】
制御ノード１４０６はまた、概して、或る場合（例えば、エントリ７１０４及び７１０６のａｃｔｉｏｎ＿ｌｉｓｔ＿ｅｎｔｒｙ＿１ビット２０：０及びビット４０：２１）にデュアル書き込みを扱い得る。エントリ−１ビット７１０４はエントリ−０ビット７１０４と共にホストにより先ず書き込まれる。この例では、制御ノード１４０６は先ずエントリ−０データ７１０２を書き込み得、その後エントリ−１データ７１０４が続く。ホストｓｒｅｓｐは通常、２つの書き込みが終了した後送られる。
【００５８】
また、ホストによって書き込まれるべき、ノード７２０２〜７２１２に対する及びスレッド７２１４〜７２２に対する終了ヘッダーは、概して１０ビットヘッダーである。制御ノード１４０６は、ヘッダーの制御ノードメモリ６１１４のラインエントリへの連結を内部的に扱うことができる。読み出し側で制御ノード１４０６は、図示するように終了ヘッダー値に戻るべきである。アクションリストエントリは、ＣＯＮＴＲＯＬ＿ＮＯＤＥ＿ＣＮＴＬレジスタのビット−２を設定する（下位３２ビットを読むため「０」に設定し、９ビットを読むため−１に設定する）ことにより、アンパックドフォーマットでアクセスされ得る。典型的に、「パックド」フォーマット読み出しサポートはない。
【００５９】
デバッガインタフェース６１３３は、ホスト又はシステムインタフェース１４０５に類似する。しかし、これは概して、ホストインタフェース１４０５より低い優先度を有する。そのため、ホストインタフェース１４０５とデバッガインタフェース６１３３との間にアクセス衝突がある場合は常に、ホストインタフェース１４０５が制御する。制御ノード１４０６は、概して、ホストが制御ノード１４０６へのそのアクセスを終了するまで如何なる受領又は応答信号を送信しない。
【００６０】
制御ノード１４０６は、制御ノードメモリ６１１４の更新、及び進入ポートの一つにより又はホスト／デバッガによりパックドフォーマットで送られたメッセージの転送に関連するメッセージを処理することができるメッセージキュー６１０２をサポートすることができる。メッセージキュー６１０２は、パックドフォーマットメッセージをＭＥＳＳＡＧＥ＿ＱＵＥＵＥ＿ＷＲＩＴＥレジスタに書き込むことにより、ホスト又はデバッガによりアクセスされ得る。進入ポートも、マスタアドレスを「ｂｌ００＿１１＿０００１」（オペコード＝４、セグメントＩＤ＝３、ノードＩＤ＝１）に設定することにより、メッセージキュー６１０２にアクセスすることができる。メッセージキュー６１０２は概して、ペイロードデータ（即ち、アクション０〜アクションＮ）がパックドフォーマットとなることを予期する。
【００６１】
典型的に、各アクション（即ち、アクション０〜アクションＮ）内の上位９ビットは、メッセージキュー６１０２に、メッセージキュー６１０２が取るべきアクションのタイプを示すことができる。図１２に示すように、各アクション又はメッセージは概して、ヘッダー（即ち、メッセージオペコード７４０２、セグメントＩＤ７４０４、及びノードＩＤ７４０６）及びメッセージペイロードで構成される。上位９ビット又はヘッダーは更に、図１２においてメッセージ７４１０〜７４２０に対して示される特殊な符号化方式を用いることもできる。図示するように、メッセージ７４０２のペイロードカウントは、メッセージキュー６１１６から転送されたメッセージのバースト寸法を示すために用いることができる（制御ノード１４０６は、最終バースト寸法を得るためにそれに「１」を付加すべきである）。ペイロードカウントは、ＣＯＮＴＲＯＬ＿ＤＭＥＭ＿ＩＮＩＴメッセージについては無視され得る。（メッセージ７４２０に示すような）ＮＯＰメッセージは、制御ノード１４０６に現在のアクションワードに対し動作しないよう示すために用いることができる。メッセージの残り（メッセージ７４０４〜７４１０に示す）は上述のアクションリストエントリと同じ機能を実行できる。
【００６２】
また、メッセージキュー６１１６は、図１３に示すように制御ノードメモリ６１１４に対する特殊なアクション更新メッセージ７５００を扱う。図で見ることができるように、このメッセージ３５００は概してヘッダー７５０２及びデータ７５０４を含む。データ７５０４のセグメント７５０６、７５０８、及び７５１０は概して、制御ノードメモリ６１１４内の符号化ビット、エントリ上位９ビット、及びライン番号に対応する。このメッセージ７５００は概して、メッセージキュー６１０２を介して制御ノードメモリ６１１４のライン更新によりラインをイネーブルするように提供される。
【００６３】
制御ノード１４０６は典型的に、２つのインタラプトラインを含む。これらのインタラプトは概してアクティブローインタラプトであり、例えばホストインタラプト及びデバッグインタラプトである。
【００６４】
ホストインタラプトは、下記の事象のためにアサートされ得る：すなわち、一連のアクションリストアクションの終わりのアクションリスト符号化が、ホストインタラプトを備えたアクションリストエンドである場合；メッセージキューによって処理されるアクションがホストインタラプトを備えたアクションリストエンドを有する場合；又は、事象トランスレータがアンダーフロー又はオーバーフロー状態を示す場合、である。これらの場合において、ＨＯＳＴ＿ＩＲＱＳＴＡＴＵＳ＿ＲＡＷレジスタ及びＨＯＳＴ＿ＩＲＱＳＴＡＴＵＳを読み出すこととは別としてホストは更に、アクション事象によって生じるインタラプトに対しＡＣＴＩＯＮ＿ＨＯＳＴ＿ＩＮＴＲレジスタを読み出すことによりアクセスされ得るＦＩＦＯを読み出すことができる。事象トランスレータによって生じる事象では、ホスト（即ち、１３１６）は、ＥＴ＿ＨＯＳＴ＿ＩＮＴＲレジスタを読み出す。インタラプトは、ＨＯＳＴ＿ＩＲＱＥＮＡＢＬＥ＿ＳＥＴレジスタに「１」を書き込むことによりイネーブルされ得る。イネーブルされたインタラプトは、ＨＯＳＴ＿ＩＲＱＳＴＡＴＵＳ＿ＣＬＲレジスタに「１」を書き込むことによりディセーブルされ得る。ホストがインタラプトの処理を終了したとき、これは概して、ＨＯＳＴ＿ＩＲＱ＿ＥＯＩレジスタに「０」を書き込むと予期される。これらに加えて、インタラプトは、（ＨＯＳＴ＿ＩＲＱＥＮＡＢＬＥ＿ＳＥＴレジスタを用いてインタラプトをイネーブルした後）ＨＯＳＴ＿ＩＲＱＳＴＡＴＵＳ＿ＲＡＷレジスタのビットに「１」を書き込むことにより、テスト目的のためにアサートされ得る。インタラプトをクリアするため、ホストは、ＨＯＳＴ＿ＩＲＱＳＴＡＴＵＳレジスタに「１」を書き込むべきである。これは通常、インタラプトのアサート及びディアサートをテストするために用いられる。ノーマルモードにおいて、インタラプトは、ＡＣＴＩＯＮ＿ＨＯＳＴ＿ＩＮＴＲレジスタ及びＥＴ＿ＨＯＳＴ＿ＩＮＴＲレジスタによりポイントされたＦＩＦＯが空でない限り、アサートされたままであるべきである。ソフトウェアは、概してＦＩＦＯから全てのワードを読むことを担っており、ＣＯＮＴＲＯＬ＿ＮＯＤＥ＿ＳＴＡＴＵＳレジスタ又はＥＴ＿ＳＴＡＴＵＳレジスタのいずれかを読み出すことによりＦＩＦＯの状態を得ることができる。
【００６５】
デバッグインタラプトは、下記の事象のためにアサートされ得る：すなわち、一連のアクションリストアクションの終わりのアクションリスト符号化が、デバッグインタラプトを備えたアクションリストエンドである場合；メッセージキューによって処理されるアクションがデバッグインタラプトを備えたアクションリストエンドを有する場合；又は、事象トランスレータがアンダーフロー又はオーバーフロー状態を示す場合、である。これらの場合において、ＤＥＢＵＧ＿ＩＲＱＳＴＡＴＵＳ＿ＲＡＷレジスタ及びＤＥＢＵＧ＿ＩＲＱＳＴＡＴＵＳレジスタを読み出すこととは別としてホスト／デバッガは更に、アクション事象によって生じるインタラプトに対しＤＥＢＵＧ＿ＨＯＳＴ＿ＩＮＴＲレジスタによりアクセスされ得るＦＩＦＯを読み出すことができる。事象トランスレータによって生じる事象では、ホスト（即ち、１３１６）は、ＥＴ＿ＤＥＢＵＧ＿ＩＮＴＲレジスタを読み出す。この場合、ＤＥＢＵＧ＿ＩＲＱＳＴＡＴＵＳＲＡＷレジスタ及びＤＥＢＵＧ＿ＩＲＱＳＴＡＴＵＳレジスタを読み出すこととは別としてデバッガは更に、ＤＥＢＵＧ＿ＲＥＡＤ＿ＰＡＲＴレジスタを読み出すことによりアクセスされ得るＦＩＦＯを読むことができる。インタラプトは、ＤＥＢＵＧ＿ＩＲＱＥＮＡＢＬＥ＿ＳＥＴレジスタ内のビットの一つに「１」を書き込むことによりイネーブルされるべきである。イネーブルされたインタラプトは、ＤＥＢＵＧ＿ＩＲＱＥＮＡＢＬＥ＿ＣＬＲレジスタに「１」を書き込むことによりディセーブルされ得る。デバッガがインタラプトの処理を終了すると、それはＤＥＢＵＧ＿ＩＲＱ＿ＥＯＩレジスタに「１」を書き込むことが予期されるべきである。これらに加えて、インタラプトは、（ＤＥＢＵＧ＿ＩＲＱＥＮＡＢＬＥ＿ＳＥＴレジスタを用いてインタラプトをイネーブルした後）ＤＥＢＵＧ＿ＩＲＱＳＴＡＴＵＳ＿ＲＡＷレジスタのビットに「１」を書き込むことにより、テスト目的のためにアサートされ得る。インタラプトをクリアするため、ホストは、ＤＥＢＵＧ＿ＩＲＱＳＴＡＴＵＳレジスタにおける対応するビットに「１」を書き込むべきである。これは通常、インタラプトのアサート及びディアサートをテストするために用いられる。ノーマルモードでは、インタラプトは、ＤＥＢＵＧ＿ＨＯＳＴ＿ＩＮＴＲレジスタ及びＥＴ＿ＤＥＢＵＧ＿ＩＮＴＲレジスタによりポイントされたＦＩＦＯが空でない限り、アサートされたままであるべきである。ソフトウェアは、ＦＩＦＯから全てのワードを読むことを概して担っており、ＣＯＮＴＲＯＬ＿ＮＯＤＥ＿ＳＴＡＴＵＳレジスタ又はＥＴ＿ＳＴＡＴＵＳレジスタのいずれかを読み出すことにより、ＦＩＦＯの状態を得ることができる。
【００６６】
事象トランスレータは、それが、外部ＩＰからインタラプトを扱う一方で、オーバーフロー又はアンダーフロー状態を検出すると常に、ベクトル番号及び制御ノードへのオーバーフロー／アンダーフローインディケーションと共にｅｔ＿ｉｎｔｅｒｒｕｐｔ＿ｅｎをアサートする。制御ノード１４０６は、読むホスト又はデバッガのためＦＩＦＯ内のこれらのインディケーションをバッファする。オーバーフロー／アンダーフローインディケーションがＥＴブロックから来るとき、制御ノード１４０６は、ＦＩＦＯ内のベクトル番号と共にオーバーフロー／アンダーフローインディケーションを保存し、エラーが生じたとインタラプトを介してホスト／デバッガに示す。ホスト又はデバッガは、対応するＦＩＦＯを読み出すことを担っている。
【００６７】
本発明に関連する分野の当業者であれば、記載された実施形態及び実現された付加的な実施形態に本発明の請求の範囲内から逸脱することなく変更が行われることが理解されるであろう。
【図４】
0005859017.tif 000009
【図７】
0005859017.tif 000010
【図１】
0005859017.tif 000011
【図２】
0005859017.tif 000012
【図３】
0005859017.tif 000013
【図４Ａ】
0005859017.tif 000014
【図４Ｂ】
0005859017.tif 000015
【図５】
0005859017.tif 000016
【図６】
0005859017.tif 000017
【図８】
0005859017.tif 000018
【図９】
0005859017.tif 000019
【図１０】
0005859017.tif 000020
【図１１】
0005859017.tif 000021
【図１２】
0005859017.tif 000022
【図１３】
0005859017.tif 000023