"所定の深さのパイプラインを有するプロセッサ808-1~808-N、1410、1408上で第1のコンテキストから第2のコンテキストに切り替えるための方法であって、前記プロセッサ4324、4326、5414、7610上で前記第1のコンテキストにおける第1のタスクを、前記第1のタスクが前記パイプラインを横断するように実行するステップ、前記プロセッサ808-1~808-N、1410、1408用の切替えリードforce_pcz、force_ctxzを、前記切替えリードに対する信号の状態を変更することを介してアサートすることによってコンテキスト切替えを呼び出すステップ、保存/復元メモリ4324、4326、5414、7610から第2のタスクに対し前記第2のコンテキストを読み取るステップ、前記第2のタスクに対する前記第2のコンテキストを入力リードnew_ctx、new_pcを介して前記プロセッサ808-1~808-N、1410、1408に提供するステップ、前記第2のタスクに対応する命令をフェッチするステップ、前記プロセッサ808-1~808-N、1410、1408上で前記第2のコンテキストにおける前記第2のタスクを実行するステップ、及び前記第1のタスクがその所定のパイプライン深さまで前記パイプラインを横断した後、前記プロセッサ4324、4326、5414、7610の保存/復元リードcmem_wrzをアサートするステップ、を特徴とする、方法。請求項1に記載の方法であって、前記呼び出すステップが、プログラムカウンタ切替えリードforce_pczをアサートするステップ、及びコンテキスト切替えリードforce_ctxzアサートするステップ、を更に特徴とする、方法。請求項2に記載の方法であって、前記プログラムカウンタ切替えリード及びコンテキスト切替えリードのそれぞれが1ビット幅である、方法。請求項1、2、又は3に記載の方法であって、前記提供するステップが、プログラムカウン入力リードnew_pcを介してプログラムカウンタ値を提供するステップ、及びコンテキスト入力リードnew_ctxを介して機械状態を提供するステップ、を更に特徴とする、方法。請求項4に記載の方法であって、前記プログラムカウンタ入力リードが17ビット幅であり、前記コンテキスト入力リードが592ビット幅である、方法。請求項1、2、3、4、又は5に記載の方法であって、前記第1のタスクを実行する前記ステップが、前記第1のコンテキストで複数の第1のタスクを実行することを更に特徴とする、方法。請求項1、2、3、4、5、又は6に記載の方法であって、前記第2のタスクを実行する前記ステップが更に、前記第2のコンテキストで複数の第2のタスクを実行することを特徴とする、方法。装置であって、保存/復元メモリ4324、4326、5414、7610、命令メモリ1404-1~1404-R、5405、7616、データメモリ4328、5403、7618、及び前記保存/復元メモリ、前記命令メモリ、及び前記データメモリに結合され、所定のパイプライン深さを有するプロセッサ4322、5402、7614、を特徴とし、前記プロセッサが、切替えリードforce_pcz、force_ctxzであって、前記切替えリード上の信号の状態を変更することによってコンテキスト切替えを呼び出すための切替えリード、前記保存/復元メモリからコンテキストデータを提供するための入力リードnew_ctx、new_pc、命令メモリアドレスを提供する命令アドレスリードimem_addr、命令データを受け取るための命令データリードimem_rdata、及びコンテキスト書込みをイネーブルにするための書込みイネーブルリードcmem_wrz、を含む、装置。請求項8に記載の装置であって、前記切替えリードが、プログラムカウンタ切替えリードforce_pcz及びコンテキスト切替えリードforce_ctxzを更に特徴とする、装置。請求項9に記載の装置であって、前記プログラムカウンタ切替えリード及びコンテキスト切替えリードのそれぞれが1ビット幅である、装置。請求項8、9、又は10に記載の装置であって、前記入力リードが、プログラムカウンタ値を提供するためのプログラムカウンタ入力リードnew_pc、及び機械状態を提供するためのコンテキスト入力リードnew_ctx、を更に特徴とする、装置。請求項11に記載の装置であって、前記プログラムカウンタ入力リードが17ビット幅であり、前記コンテキスト入力リードが592ビット幅である、装置。所定の深さのパイプラインを有するプロセッサ808-1~808-N、1410、1408上で第1のコンテキストから第2のコンテキストに切り替えるためのシステムであって、前記プロセッサ4324、4326、5414、7610上で前記第1のコンテキストにおける第1のタスクを、前記第1のタスクが前記パイプラインを横断するように実行するための手段、プロセッサ808-1~808-N、1410、1408用の切替えリードforce_pcz、force_ctxzを、前記切替えリードに対する信号の状態を変更することを介してアサートすることによってコンテキスト切替えを呼び出すための手段、保存/復元メモリ4324、4326、5414、7610から第2のタスクの前記第2のコンテキストを読み取るための手段、前記第2のタスクに対する前記第2のコンテキストを、入力リードnew_ctx、new_pcを介して前記プロセッサ808-1~808-N、1410、1408に提供するための手段、前記第2のタスクに対応する命令をフェッチするための手段、前記プロセッサ808-1~808-N、1410、1408上で前記第2のコンテキストにおける前記第2のタスクを実行するための手段、及び前記第1のタスクがその所定のパイプライン深さまで前記パイプラインを横断した後、前記プロセッサ4324、4326、5414、7610の保存/復元リードcmem_wrzをアサートするための手段、を特徴とする、システム。請求項13に記載のシステムであって、前記呼び出すための手段が更に、プログラムカウンタ切替えリードforce_pczをアサートするための手段、及びコンテキスト切替えリードforce_ctxzアサートするための手段、を特徴とする、システム。請求項14に記載のシステムであって、前記プログラムカウンタ切替えリード及びコンテキスト切替えリードのそれぞれが1ビット幅である、システム。請求項13、14、又は15に記載のシステムであって、前記提供するための手段が更に、プログラムカウン入力リードnew_pcを介してプログラムカウンタ値を提供するための手段、及びコンテキスト入力リードnew_ctxを介して機械状態を提供するための手段、を特徴とする、システム。請求項16に記載のシステムであって、前記プログラムカウンタ入力リードが17ビット幅であり、前記コンテキスト入力リードが592ビット幅である、システム。請求項13、14、15、16、又は17に記載のシステムであって、前記第1のタスクを実行するための前記手段が、前記第1のコンテキストで複数の第1のタスクを実行するための手段を更に特徴とする、システム。請求項1、2、3、4、5、又は6に記載の方法であって、前記第2のタスクを実行する前記ステップが更に、前記第2のコンテキストで複数の第2のタスクを実行することを特徴とする、方法。図2では、並列処理を実行するSOC用アプリケーションの例が見られる。この例では、撮像デバイス1250が示される。この例えば携帯電話又はカメラであり得る撮像デバイス1250は、概して、画像センサ1252、SOC1300、ダイナミックランダムアクセスメモリDRAM1315、フラッシュメモリ1314、ディスプレイ1254、及び電力管理集積回路PMIC1256を含む。動作では、画像センサ1252は、静止画像又はビデオであり得る画像情報を捕捉することができ、この画像情報はSOC1300及びDRAM1315によって処理され得、不揮発性メモリ即ち、フラッシュメモリ1314に保存され得る。また、フラッシュメモリ1314に保存される画像情報は、SOC1300及びDRAM1315の使用によって、ディスプレイ1254上で使用するために表示され得る。また、撮像デバイス1250は、可搬型であることが多く、電源としてバッテリを含む。SOC1300によって制御され得るPMIC1256は、バッテリ寿命を長持ちさせるために電力使用量の調整を補助し得る。図3では、本開示の実施形態に従ったシステムオンチップ又はSOC1300の例が図示されている。この典型的には、OMAP登録商標等の集積回路又はICであるSOC1300は、概して上述の並列処理を実行する処理クラスタ1400、及び、上で説明及び参照されたホスト環境を提供するホストプロセッサ1316を概して含む。ホストプロセッサ1316は、ワイド即ち、32ビット、64ビット等RISCプロセッサ例えばARMCortex-A9等であり得、バスアービトレータ1310、バッファ1306、ホストプロセッサ1316がインタフェースバス又はIバス1330上で周辺インタフェース1324にアクセスすることを許可するバスブリッジ1320、ハードウェアアプリケーションプログラミングインタフェースAPI1308、及び割り込みコントローラ1322と、ホストプロセッサバス又はHPバス1328上で通信する。処理クラスタ1400は、典型的に、例えば、荷電結合デバイス、又はCCDインタフェースであり得、オフチップデバイスと通信し得る機能回路要素1302、バッファ1306、バスアービトレータ1310、及び周辺インタフェース1324と、処理クラスタバス又はPCバス1326上で、通信する。この構成を用いて、ホストプロセッサ1316は、API1308を介して情報を提供する即ち、所望の並列実装に適合するように処理クラスタ1400を構成することができ、一方、処理クラスタ1400及びホストプロセッサ1316はいずれも、フラッシュインタフェース1312を介してフラッシュメモリ1314に、メモリコントローラ1304を介してDRAM1315に、直接アクセスできる。また、JointTestActionGroupJTAGインタフェース1318を介して、テスト及びバウンダリスキャンが実行され得る。図4を参照すると、本開示の実施形態に従った並列処理クラスタ1400の例が示されている。典型的には、処理クラスタ1400はハードウェア722に対応する。処理クラスタ1400は、概して、パーティション1402-1~1402-Rを含む。これらは、ノード808-1~808-N、ノードラッパー810-1~810-N、命令メモリ1404-1~1404-R、及び以下で詳しく説明するバスインタフェースユニット又はBIU4710-1~4710-Rを含む。ノード808-1~808-Nは、各々データインターコネクト814に各々のBIU4710-1~4710-R及びデータバス1422を介して結合され、パーティション1402-1~1402-Rのための制御及びメッセージが制御ノード1406からメッセージ1420を介して提供される。また、グローバルロード/ストアGLSユニット1408及び共有機能メモリ1410は、後述のようにデータ移動のための付加的な機能を提供する。それに加えて、レベル3又はL3キャッシュ1412、概して、IC内には含まれない周辺装置1414、典型的にはフラッシュメモリ1314及び/又はDRAM1315、並びにSOC1300内に含まれないその他のメモリであるメモリ1416、及びハードウェアアクセラレータHWAユニット1418が処理クラスタ1400と共に用いられる。また、データ及びアドレスを制御ノード1406に通信するように、インタフェース1405が提供される。処理クラスタ1400は、概して、データ転送のためにプッシュモデルを使用する。データ転送は要求応答型のアクセスではなく、概してポステッドライトとして現れる。これは、データ転送が一方向であるため要求応答アクセスに比べてグローバルインターコネクト即ち、データインターコネクト814の占有を2分の1に減らすという利点を有する。概して、インターコネクト814を介して要求をルーティングし、その後、応答が要求元へルーティングされ、その結果インターコネクト814上で2つの遷移が生成されることは望まれない。プッシュモデルは単一転送を生成する。これは、ネットワークサイズが増大するとネットワークレイテンシが増大するため、またこのことが要求応答型トランザクションのパフォーマンスを低下させることは避けられないことであるため、スケーラビリティに関して重要である。プッシュモデルは、データフロープロトコル即ち、812-1~812-Nと同様に、グローバルデータトラフィックを、正確さのために用いられるものまで概して最小化する一方、ローカルノードの利用率に対するグローバルデータフローの影響も概して最小化する。大量のグローバルトラフィックであってもノード即ち、808-iのパフォーマンスに対する影響は、通常、皆無に近い。ソースはデータを後述するグローバル出力バッファに書き込み、転送成功の確認を要求することなく継続する。データフロープロトコル即ち、812-1~812-Nは、概して、インターコネクト814で単一転送を用い、データをあて先へ移動する最初の試みでの転送が成功することを確実にする。後述するグローバル出力バッファは例えば最大16出力まで保持することができるため、出力のための瞬時グローバル帯域幅が不充分になることに起因するノード即ち、808-iのストールの可能性が非常に低くなる。更に、瞬時帯域幅は、要求応答トランザクション又は転送失敗の繰り返しによる影響を受けない。最後に、プッシュモデルはプログラミングモデルに一層密接に適合する。言い換えるとプログラムは自己データをフェッチせずに、その代わりに、プログラムの入力変数及び/又はパラメータは呼び出される前に書き込まれる。プログラミング環境では、入力変数の初期化は、ソースプログラムによるメモリへの書き込みとして行われる。処理クラスタ1400内では、これらの書き込みがポステッドライトに変換され、変数の値をノードコンテキストにポピュレートさせる。後述するグローバル入力バッファは、ソースノードからデータを受け取るために用いられる。各ノード808-1~808-Nのためのデータメモリが単一ポートであるため、入力データの書き込みが、ローカルの単一入力多重データSIMDによる読み出しとコンフリクトすることがあり得る。入力データをグローバル入力バッファへ受け入れ、そこで入力データが空きのデータメモリサイクルを待つことができることによって、この競合は回避される即ち、SIMDアクセスとのバンクコンフリクトはない。データメモリは、例えば32バンクを有し得るため、直ちにバッファがフリーになる可能性が非常に高い。しかしながら、転送を確認するためのハンドシェイキングがないので、ノード即ち、808-iはフリーのバッファエントリを持つはずである。所望とされる場合は、グローバル入力バッファは、バッファ位置をフリーにするために、ローカルノード即ち、808-iをストールさせてデータメモリに強制的に書き込みを行うことができるが、このイベントは極めて希であるべきである。典型的には、グローバル入力バッファは2つの別々のランダムアクセスメモリRAMとして実装されて、一方がデータメモリへ読み出されるべき状態にある間、他方がグローバルデータを書き込むための状態になり得るようにする。メッセージングインターコネクトは、グローバルデータインターコネクトとは分かれているが、同様にプッシュモデルを使用する。システムレベルでは、所望のスループットにスケーリングされた多数のノードを備えるSMP又は対称型多重処理のように、ノード808-1~808-Nが処理クラスタ1400内で複製される。処理クラスタ1400は極めて多数のノードにまでスケーリングし得る。ノード808-1~808-Nはパーティション1402-1~1402-Rにグループ分けされ、各パーティションは1つ又は複数のノードを有する。パーティション1402-1~1402-Rは、ノード間のローカル通信を増大させることによって及びより大きなプログラムで一層大量の出力データを計算させることによってスケーラビィリティを促進し、その結果、所望のスループット要件を達成する可能性を更に高める。パーティション即ち、1402-i内では、ノードはローカルインターコネクトを用いて通信し、グローバルリソースを必要としない。また、パーティション即ち、1404-i内のノードは、排他的命令メモリを用いる各ノードから共通命令メモリを用いる全てのノードまで、任意の粒度で、命令メモリ即ち、1404-iを共有することができる。例えば、3つのノードが命令メモリの3つのバンクを共有し、第4のノードが命令メモリの排他的バンクを有することができる。ノードが命令メモリ即ち、1404-iを共有するとき、それらのノードは、概して、同期して同じプログラムを実行する。また、処理クラスタ1400は非常に多数のノード即ち、808-i及びパーティション即ち、1402-iをサポートし得る。しかしながら、1つのパーティションについて4以上のノードを持つと概してノンユニフォームメモリアクセスNUMAアーキテクチャに類似するため、パーティション毎のノードの数は通常は4つに限定されている。この例では、パーティションは、後でインターコネクト814に関連して説明する1つ又は複数のクロスバーを介して接続される。クロスバーは概して横断帯域幅が一定している。処理クラスタ1400は、現在、サイクル毎に1ノード幅のデータ例えば、64、16ビットピクセルを転送するように設計されており、4サイクルに亘り、1サイクルにつき16ピクセルの4転送に区分される。処理クラスタ1400は、概して、レイテンシトレラントであり、インターコネクト814がほぼ飽和この状態を達成するのは合成プログラム以外では極めて難しいことに留意されたいであっても、ノードバッファリングが、概して、ノードストールを防止する。典型的には、処理クラスタ1400はパーティション間で共有する下記のグローバルリソースを含む。1制御ノード1406。これはメッセージバス1420でシステムワイドのメッセージングインターコネクト、イベント処理及びスケジューリング、及びホストプロセッサ及びデバッガこれらは全て後で詳しく説明するへのインタフェースを提供する。2GLSユニット1408。これはプログラマブル縮小命令セットRISCプロセッサを含み、システムデータ移動を可能にする。システムデータ移動は、GLSデータ移動スレッドとして直接コンパイルされ得るCプログラムによって記述され得る。これによって、ソースコードを修正することなく、クロスホスト環境でのシステムコードの実行が可能になり、また、システム又は後述するSIMDデータメモリ内の任意のアドレス変数のセットから別の任意のアドレス変数のセットに移動できるため、ダイレクトメモリアクセスよりもより一般的である。GLSユニット1408は、例えば0-サイクルのコンテキストスイッチを備え、マルチスレッド化され、例えば、最大16スレッドまでサポートする。3共有機能メモリ1410。これは、一般のルックアップテーブルLUT及び統計収集機能ヒストグラムを提供する大型共有メモリである。また、これは大型共有メモリを使用して、リサンプリング及び歪補正等のノードSIMDによりコストの理由で充分サポートされていないピクセル処理をサポートし得る。この処理はネイティブタイプとして、スカラ、ベクトル、及び2Dアレイを実装する例えば6発行命令RISCプロセッサ即ち、後で詳しく説明するSFMプロセッサ7614を用いる。4ハードウェアアクセラレータ1418。これは、プログラマビリティを必要としない機能のため、或いは電力及び/又は面積を最適化するために組み込まれ得る。アクセラレータは、サブシステムにはシステム内の他のノードとして現れ、制御及びデータフローに参加し、イベントを作成可能であり、スケジューリング可能である。またデバッガにとっては可視的である。ハードウェアアクセラレータは、適用可能であるときは、専用のLUT及び統計収集を有し得る。5データインターコネクト814及びシステムオープンコアプロトコルOCPL3接続1412。これらは、ノードパーティション、ハードウェアアクセラレータ、及びシステムメモリ、及び、データバス1422上の周辺装置の間のデータ移動を管理する。ハードウェアアクセラレータは、L3へのプライベート接続も有し得る。6デバッグインタフェース。これらは、図には示されていないが、本明細書中に記載される。図5を参照すると、ノード808-iの例の更なる詳細が見られる。ノード808-iは、処理クラスタ1400内の計算要素であり、アドレス指定及びプログラムフロー制御のための基本要素はRISCプロセッサ又はノードプロセッサ4322である。典型的には、このノードプロセッサ4322は、40ビット命令内の20ビットイミディエートimmediateフィールドの可能性のある20ビット命令を備える、32ビットのデータパスを有することができる。ピクセル操作は、例えば32ピクセル機能ユニットのセットで、SIMD構成で、SIMDレジスタとSIMDデータメモリとの間で例えば4つのロードと例えば2つのストアを用いて並列に実行されるノードプロセッサ4322の命令セットは以下のセクション7で説明する。命令パケットは、すべてのSIMD機能ユニット4308-1~4308-Mによって実行される3発行SIMD命令と並列に、例えば1つのRISCプロセッサコア命令、4つのSIMDロード、及び2つのSIMDストアを記述する。典型的には、ロードストアユニット4318-iからのロード及びストアは、SIMDデータメモリ位置と、例えば、最大64、16ビットピクセルまで表すことができる、SIMDローカルレジスタとの間でデータを移動する。SIMDロード及びストアは間接アドレス指定直接アドレス指定もサポートされているに共有レジスタ4320-iを用いるが、SIMDアドレス指定処理はこれらのレジスタを読み出し、アドレス指定コンテキストはコア4320によって管理される。コア4320は、レジスタのスピル/フィル、アドレス指定コンテキスト、及び入力パラメータのためのローカルメモリ4328を有する。ノード毎にパーティション命令メモリ1404-iが提供され、そこでは、多数のノードに及ぶデータセット上で、より大きなプログラムを実行するために、多数のノードがパーティション命令メモリ1404-iを共有することも可能である。また、ノード808-iは、並列処理をサポートするための幾つかの機能を組み込む。Lf及びRtバッファ4314-i及び4312-iに関連し、概してノード808-iのための入力/出力IO回路要素を含むグローバル入力バッファ4316-i及びグローバル出力バッファ4310-iは、ノード808-i入力及び出力を命令実行から切り離し、システムIOに起因してノードがストールする可能性を極めて低くする。入力は、通常、SIMDデータメモリ4306-1~4306-M及び機能ユニット4308-1~4308-Mによる処理よりも、充分前に受け取られ、空きサイクルを用いてSIMDデータメモリ4306-1~4306-M内に保存されるこれらは非常に一般的である。SIMD出力データは、グローバル出力バッファ4210-iに書き込まれ、そこから処理クラスタ1400を介してルーティングされ、たとえ、システムのパフォーマンスがその限界に近づいた場合これも可能性が低いでも、ノード即ち、808-iがストールする可能性を低くする。SIMDデータメモリ4308-1~4306-M及び対応するSIMD機能ユニット4306-1~4306-Mは、各々、集合的にSIMDユニットと称される。SIMDデータメモリ4306-1~4306-Mは、重複しないコンテキスト内に構成され、可変サイズであり、関連又は非関連タスクのいずれかへ割り振られる。コンテキストは、水平及び垂直の両方向で充分に共有可能である。水平方向での共有はリードオンリーメモリ4330-i及び4332-iを使用し、それらは、典型的には、プログラムについてはリードオンリーであるが、書き込みバッファ4302-i及び4304-i、ロード/ストアLSユニット4318-i、又は他のハードウェアによって書き込み可能である。また、これらのメモリ4330-i及び4332-iのサイズは、約512×2ビットである。概してこれらのメモリ4330-i及び4332-iはその上で操作される中央ピクセル位置に対して、左方向及び右方向へのピクセル位置に対応する。これらのメモリ4330-i及び4332-iは、書き込みをスケジューリングするために、書き込み-バッファリング機構即ち、書き込みバッファ4302-i及び4304-iを使用し、そこでは、サイド-コンテキスト書き込みは、通常、ローカルアクセスとは同期されていない。バッファ4302-iは、概して、同時に動作する例えば隣接するピクセルコンテキストとのコヒーレンスを維持する。垂直方向の共有はSIMDデータメモリ4306-1~4306-M内のサーキュラーバッファを用いる。サーキュラーアドレス指定は、LSユニット4318-iによって適用されるロード及びストア命令によってサポートされているモードである。共有データは、概して、上述のシステムレベル依存性プロトコルを用いてコヒーレントに保たれる。コンテキスト割り振り及び共有は、SIMDデータメモリ4306-1~4306-Mコンテキスト記述子によって、ノードプロセッサ4322に関連付けられるコンテキスト状態メモリ4326内に特定される。このメモリ4326は、例えば、16×16×32ビット又は2×16×256ビットRAMであり得る。また、これらの記述子は、コンテキスト間でデータがどのように共有されるかを、充分に一般的な方式で特定し、コンテキスト間のデータ依存性を取り扱うための情報を保持する。コンテキスト保存/復元メモリ4324は、レジスタ4320-iを並列に保存及び復元させることによって、後で説明する0-サイクルタスク切り替えをサポートするように使用される。SIMDデータメモリ4306-1~4306-M、及びプロセッサデータメモリ4328コンテキストは、各々のタスクのための非依存コンテキストエリアを用いて保存される。SIMDデータメモリ4306-1~4306-M、及びプロセッサデータメモリ4328は、可変サイズの可変数コンテキストに区分される。垂直フレーム方向のデータは、そのコンテキスト自体の中で保持及び再使用される。水平フレーム方向のデータは、コンテキストを共に水平グループにリンクさせることによって共有される。なお、コンテキスト構成は、計算に関係するノード数及びそれらが互いにどのように相関するかとはほぼ無関係であることに留意することが重要である。コンテキストの主目的は、画像データを、このデータを操作するノードの構成に関係なく、保持、共有、及び再使用することである。典型的には、SIMDデータメモリ4306-1~4306-Mは、機能ユニット4308-1~4308-Mによって操作される例えばピクセル及び中間コンテキストを含む。SIMDデータメモリ4306-1~4306-Mは、概して、例えば最大16の分離コンテキストエリアに区分される。各分離コンテキストエリアは、プログラマブルベースアドレスを備え、コンパイラによってレジスタのスピル/フィルに使用される全てのコンテキストからアクセス可能な共通エリアを備える。プロセッサデータメモリ4328は、入力パラメータ、アドレス指定コンテキスト、及びレジスタ4320-iのためのスピル/フィルエリアを含む。プロセッサデータメモリ4328は、各々プログラマブルベースアドレスを備える、SIMDデータメモリ4306-1~4306-Mコンテキストに対応する例えば最大16の分離ローカルコンテキストエリアを有し得る。典型的には、ノード即ち、ノード808-iは、8個のSIMDレジスタ第1の構成、32個のSIMDレジスタ第2の構成、及び32個のSIMDレジスタと、より小さい機能ユニットの各々に3つの予備実行ユニット第3の構成の例えば3つの構成を有する。図6を参照すると、グローバルロードストアGLSユニット1408がより詳細に示されている。GLSユニット1408の主な処理構成要素はGLSプロセッサ5402である。GLSプロセッサ5402は、上述したノードプロセッサ4322と同様の一般的な32ビットRISCプロセッサであり得るが、GLSユニット1408内での使用にカスタマイズされてもよい。例えば、コンパイルされたプログラムが所望に応じてノード変数のアドレスを生成できるように、GLSプロセッサ5402がノード即ち、808-iのためのSIMDデータメモリのためのアドレッシングモードを複製することができるようカスタマイズされてもよい。また、GLSユニット1408は、概して、コンテキスト保存メモリ5414、スレッドスケジューリング機構即ち、メッセージリスト処理5402及びスレッドラッパー5404、GLS命令メモリ5405、GLSデータメモリ5403、リクエストキュー及び制御回路5408、データフロー状態メモリ5410、スカラ出力バッファ5412、グローバルデータIOバッファ5406、及びシステムインタフェース5416を含み得る。また、GLSユニット5402は、インターリーブされたシステムデータをデインターリーブされた処理クラスタデータに変換及びその逆を行う、インターリービング及びデインターリービング用の回路要素、及び構成読み出しスレッドConfigurationReadthreadを実装するための回路要素を含み得る。構成読み出しスレッドは、処理クラスタ1400のための構成即ち、並列化されたシリアルプログラムのために、処理クラスタ1400の計算及びメモリリソースに少なくとも部分的に基づくデータ構造をプログラム、ハードウェア初期化等を含むメモリ1416からフェッチし、それを処理クラスタ1400にディストリビュートする。GLSユニット1408では3つのメインインタフェース即ち、システムインタフェース5416、ノードインタフェース5420、及びメッセージングインタフェース5418があり得る。システムインタフェース5416では、典型的に、システムメモリ1416及び周辺装置1414へのアクセスのため、システムL3インターコネクトへの接続がある。このインタフェース5416は概して、各々256ビットL3パケットの例えば128ラインを格納するために充分な大きさの2つのバッファピンポン配置を有する。メッセージングインタフェース5418では、GLSユニット1408はオペレーショナルメッセージ即ち、スレッドスケジューリング、シグナルリング終了イベント、及びグローバルLSユニット構成を送信/受信が可能であり、処理クラスタ1400に対するフェッチされた構成をディストリビュートすることが可能であり、送信スカラ値を宛て先コンテキストを送信することが可能である。ノードインタフェース5420では、グローバルIOバッファ5406は概してグローバルデータインターコネクト814に結合される。概して、このバッファ5406は、ノードSIMDデータの64ライン例えば、各ラインは16ビットの64ピクセルを含み得るを格納するために充分な大きさである。また、バッファ5406は、1サイクル当たり16ピクセルのグローバル転送幅にマッチングするように、256×16×16ビットとして編成され得る。ここで、メモリ5403、5405、及び5410を参照すると、各々が概してレジデントスレッドに関連する情報を含む。GLS命令メモリ5405は、スレッドがアクティブであるか否かに拘らず、全てのレジデントスレッドのための命令を概して含む。GLSデータメモリ5403は、全てのレジデントスレッドのための変数、テンポラリ、及びレジスタスピル/フィル値を概して含む。また、GLSデータメモリ5403は、スレッドコンテキスト記述子及び宛て先リストノード内の宛て先記述子に似ているを含む、スレッドコードから隠されたエリアを有し得る。また、宛て先コンテキストへの出力を含み得るスカラ出力バッファ5412がある。このデータは水平グループ内の多数の宛て先コンテキストへコピーされるべき順番に概して保たれ、処理クラスタ1400の処理パイプラインにマッチングするようにスカラデータの転送をパイプライン化する。データフロー状態メモリ5410は処理クラスタ1400からスカラ入力を受け取る各スレッドのためのデータフロー状態を概して含み、この入力に依存するスレッドのスケジューリングを制御する。典型的に、GLSユニット1408のためのデータメモリは、いくつかの部分に構成される。データメモリ5403のスレッドコンテキストエリアはGLSプロセッサ5402のためのプログラムには可視であるが、データメモリ5403の残りの部分及びコンテキスト保存メモリ5414はプライベートのままである。コンテキスト保存/復元又はコンテキスト保存メモリは、通常、全ての中断されたスレッド即ち、16×l6×32ビットのレジスタコンテントのためのGLSプロセッサ5402レジスタのコピーである。データメモリ5403内の他の2つのプライベートエリアは、コンテキスト記述子及び宛て先リストを含む。リクエストキュー及び制御5408は、GLSプロセッサ5402のためのロード及びストアアクセスをGLSデータメモリ5403の外で概して監視する。これらのロード及びストアアクセスは、スレッドにより、システムデータを処理クラスタ1400へ移動及びその逆を行うように実行されるが、データは通常GLSプロセッサ5402の中を物理的に流れることはなく、またそれはデータ上で動作を概して実行しない。代わりに、リクエストキュー5408がスレッドの移動をシステムレベルでの物理的移動に変換し、ロードを移動のためのストアアクセスにマッチングさせ、且つシステムL3及び処理クラスタ1400データフロープロトコルを用いて、アドレス及びデータシーケンシング、バッファ割り付け、フォーマッティング、及び、転送制御を実行する。コンテキスト保存/復元エリア又はコンテキスト保存メモリ5414は概して、GLSプロセッサ5402のための全てのレジスタを一度に保存及び復元し得るワイドランダムアクセスメモリ又はRAMであり、0-サイクルコンテキスト切り替えをサポートする。スレッドプログラムは、アドレス計算、状態試験、ループ制御等のための1データアクセス当たり数サイクルを必要とし得る。大量の潜在的スレッドがあるため、且つ、目的が、ピークスループットをサポートするために充分なように全てのスレッドをアクティブに保持することであるため、最小サイクルオーバヘッドでコンテキスト切り替えが起こることが重要であり得る。また、単一スレッドの移動が全てのノードコンテキストのためのデータ例えば、水平グループの1コンテキスト当たりの1変数当たり64ピクセルを転送するという事実によって、スレッド実行時間が部分的にオフセットされ得ることに留意すべきであろう。これは、ピークピクセルスループットをサポートする一方で、相当大きな数のスレッドサイクルを可能にし得る。ここで、スレッドスケジューリング機構を参照すると、この機構はメッセージリスト処理5401及びスレッドラッパー5404を概して含む。スレッドラッパー5404は、典型的に、GLSユニット1408のためのスレッドをスケジューリングするために、入ってくるメッセージをメールボックスに受け取る。概して、1スレッド当たり1つのメールボックスエントリがあり、メールボックスエントリは、そのスレッドのための初期プログラムカウントや、スレッドの宛て先リストのプロセッサデータメモリ即ち、4328内の位置等の情報を含み得る。また、このメッセージは、オフセット0で始まり、スレッドのプロセッサデータメモリ即ち、4328コンテキストエリアに書き込まれる、パラメータリストを含み得る。また、スレッドが中断されるときスレッドプログラムカウントを保存するため、及びデータフロープロトコルを実装するために宛て先情報を置くために、スレッド実行中にもメールボックスエントリが用いられる。GLSユニット1408は、メッセージングに加えて、構成処理も実行する。典型的に、この構成処理は構成読み出しスレッドを実装し得る。構成読み出しスレッドは、処理クラスタ1400のための構成プログラム、ハードウェア初期化等を含むをメモリからフェッチし、処理クラスタ1400の残りの部分にディストリビュートする。典型的に、この構成処理は、ノードインタフェース5420で実行される。加えて、GLSデータメモリ5403は、コンテキスト記述子、宛て先リスト、及びスレッドコンテキストのためのセクション又はエリアを概して含む。典型的に、スレッドコンテキストエリアはGLSプロセッサ5402に対して可視であり得るが、GLSデータメモリ5403の残りのセクション又はエリアは可視でなくてもよい。図7を参照すると、共有機能メモリ1410が見られる。共有機能メモリ1410は、概して、ノードによりコストの理由で充分サポートされない操作をサポートする、大型の集中メモリである。共有機能メモリ1410の主な構成要素は、各々が、例えば48~1024Kバイトの間で構成可能なサイズ及び構成を有する2つの大型メモリ、機能メモリ7602及びベクトルメモリ7603である。この機能メモリ7602は、高帯域、ベクトルベースのルックアップテーブルLUT、及びヒストグラムの、同期、命令駆動型の実装を提供する。ベクトルメモリ7603は、上記のセクション8で説明したようにベクトル命令を暗示する、例えば6発行命令プロセッサ即ち、SFMプロセッサ7614による操作をサポートし得る。ベクトル命令は、例えば、ブロックベースのピクセル処理のために用いられ得る。典型的には、このSFMプロセッサ7614は、メッセージングインタフェース1420及びデータバス1422を用いてアクセスされ得る。SFMプロセッサ7614は、例えば、ノード内のSIMDデータメモリに比べて、より一般的な構成、及びより大きな総メモリサイズを有し、より一般的な処理がデータに適用される得る、ワイドピクセルコンテキスト64ピクセル上で動作し得る。それは、標準C整数データタイプ上で、スカラ、ベクトル、及びアレイ操作、並びに、各種のデータタイプと適合性のある、パックされたピクセル上の操作をサポートする。例えば、図示されるように、ベクトルメモリ7603及び機能メモリ7602に関連するSIMDデータパスは、概して、ポート7605-1~7605-Q及び機能ユニット7607-1~7607-Pを含む。全ての処理ノード即ち、808-iが機能メモリ7602及びベクトルメモリ7603にアクセスし得るという意味で、機能メモリ7602及びベクトルメモリ7603は、全般的に共有されている。機能メモリ7602に提供されるデータは、SFMラッパーを介して典型的にはライトオンリーの方式でアクセスされ得る。また、この共有は、全般的に、ノード即ち、808-iを処理するための上述のコンテキスト管理と一貫性がある。また、処理ノードと共有機能メモリ1410との間のデータI/Oもデータフロープロトコルを使用し、処理ノードは、典型的には、ベクトルメモリ7603に直接アクセスできない。また、共有機能メモリ1410は、機能メモリ7602に書き込むことができるが、処理ノードによってアクセスされている間は、書き込むことができない。処理ノード即ち、808-iは、機能メモリ7602内の共通位置を読み出し及び書き込みできるが、通常はリードオンリーLUT操作、又はライトオンリーヒストグラム操作のいずれかとしてである。また、処理ノードが機能メモリ7602領域への読み出し-書き込みアクセスを有することも可能であるが、これは所定のプログラムによるアクセスに限定されるべきである。データを共有する様式は多く存在するので、共有の種類及び依存性条件が満足されることを概ね保証するために用いられるプロトコルを区別するために用語が導入される。下記のリストは、図8の用語を定義したものであり、依存性の解決を説明するために用いられる他の用語も導入している。中心入力コンテキストCin:これは、1つ又は複数のソースコンテキストすなわち3502-1から主要SIMDデータメモリ読み取り専用の左側及び右側コンテキストランダムアクセスメモリすなわちRAMを除くへのデータである。左入力コンテキストLin:これは、中心入力コンテキストとして書き込まれる1つ又は複数のソースコンテキストすなわち3502-1から別の宛先へのデータである。ここで、この宛先の右コンテキストポインタはこのコンテキストを指す。データは、ソースノードによって、そのコンテキストが書き込まれるときに左コンテキストRAMにコピーされる。右入力コンテキストRin:Linに類似しているが、ここではこのコンテキストはソースコンテキストの左コンテキストポインタによって指し示される。中心ローカルコンテキストClc:これは、コンテキストにおいて実行されるプログラムによって生成される中間データ変数、一時値などである。左ローカルコンテキストLlc:これは、中心ローカルコンテキストに類似している。ただし、これは、このコンテキスト内では生成されず、データを共有しているコンテキストによってその右コンテキストポインタを介して生成され、左側コンテキストRAMにコピーされる。右ローカルコンテキストRlc:左ローカルコンテキストに類似しているが、ここでは、このコンテキストはソースコンテキストの左コンテキストポインタによって指し示される。有効に設定Set_Valid:最後の転送を示すデータの外部ソースからの信号であり、最後の転送により、この入力セットについて入力コンテキストを完了する。この信号は最後のデータ転送に同期して送出される。出力停止Output_Kill:フレーム境界の一番下で、環状バッファは境界よりも早く提供されたデータに対して境界処理を実施し得る。この場合、ソースは、Set_Validを用いて実行のトリガをかけることができるが、通常は、新たなデータは提供しない。そうすると境界処理に必要とされるデータを上書きしてしまうからである。この場合、データには、このデータは書き込まれるべきではないことを示すためにこの信号が付随する。ソース数Sources:コンテキスト記述子によって指定される入力ソース数。コンテキストは、実行が開始され得る前に各ソースから必要とされる全データを受け取るはずである。ノードプロセッサデータメモリ4328へのスカラー入力は、SIMDデータメモリすなわち4306-1へのベクトル入力とは別とみ成される。全部で4つの可能なデータソースがあり得、ソースはスカラー又はベクトル或いはその両方を提供し得る。Input_Done:これは、ソースから信号として送られ、このソースからはさらなる入力がないことを示す。この状態は、ソースプログラム内のフロー制御によって検出され、データ出力には同期しないので、付随するデータは無効である。これにより、受取側コンテキストは、例えば初期化用に一度提供されたデータのソースからのSet_Validを待つのをやめる。Release_Input:これは、入力データがもはや求められずソースによって上書きされ得ることを示すコンパイラによって決定される命令フラグである。左有効入力Lvin:これは、左側コンテキストRAMにおいて入力コンテキストが有効であることを示すハードウェア状態である。これは、左側のコンテキストが正確な数のSet_Valid信号を受け取った後で、このコンテキストが最後のデータを左側RAMにコピーするときに設定される。この状態は、入力データがもはや求められずソースによって上書きされ得ることを示すコンパイラ706によって決定される命令フラグによってリセットされる。左有効ローカルLvlc:この依存性プロトコルは、概して、プログラムが実行されるときにLlcデータが通常は有効であることを保証する。ただし、Llcデータは実行と同時に又は実行からずれて提供され得るので、2つの依存性プロトコルがある。この選択は、タスクが開始されるときにコンテキストがすでに有効かどうかに基づいて成される。更に、このデータのソースは、概して、このデータが使用されるまでこのデータへの上書きが禁止される。Lvlcがリセットされる場合、これは、Llcデータがコンテキストに書き込まれ得ることを示す。中心有効入力Cvin:これは、中心コンテキストが正確な数のSet_Valid信号を受け取ったことを示すハードウェア状態である。この状態は、入力データがもはや求められずソースによって上書きされ得ることを示すコンパイラ706によって決定される命令フラグによってリセットされる。右有効入力Rvin:右側コンテキストRAMであることを除いてLvinに類似している。右有効ローカルRvlc:この依存性プロトコルは、右側コンテキストRAMが通常はRlcデータを受け取るのに利用可能であることを保証する。ただし、このデータは、関連するタスクが他の方式で実行する準備ができているときに有効であるとは限らない。Rvlcは、コンテキストにおいてRlcデータが有効であることを示すハードウェア状態である。左側右有効入力LRvin:これは、左側コンテキストのRvinビットのローカルコピーである。中心コンテキストへの入力は左側コンテキストにも入力され、そのため、この入力は概してさらなる左側入力が求められなくなるまでイネーブルにされ得ないLRvin=0。これは、アクセスを容易にするローカル状態として維持される。右側左有効入力RLvin:これは、右側コンテキストのLvinビットのローカルコピーである。この使用目的はLRvinに類似しており、入力に利用可能でもある右側コンテキストに基づいてローカルコンテキストへの入力をイネーブルにする。イネーブル入力InEn:これは、コンテキストに対して入力がイネーブルにされたことを示す。これは、入力が中心コンテキスト、左側コンテキスト、及び右側コンテキストに対してリリースされたときに設定される。この条件は、Cvin=LRvin=RLvin=0のときに満足される。水平方向に共有されるコンテキストは、左右いずれの方向にも依存性を有する。コンテキストすなわち3502-1は、その左右のコンテキストからLlc及びRlcデータを受け取り、また、これらのコンテキストにRlc及びLlcデータを提供する。これによって、データ依存性に循環性が導入される。すなわち、コンテキストは、その左のコンテキストから、左のコンテキストにRlcデータを提供し得る前にLlcデータを受け取るはずであるが、左のコンテキストはこのコンテキスト、すなわち右側のコンテキストから、左のコンテキストがLlcコンテキストを提供し得る前にRlcデータを要求する。この循環性は、きめの細かいマルチタスキングを用いて破られる。例えば、図9のタスク3306-1~3306-6は、同一命令シーケンスとし得、6つの異なるコンテキスト内で動作する。これらのコンテキストは、そのフレームの隣接する水平領域でサイドコンテキストデータを共有する。この図は、それぞれ同じタスクセット及びコンテキスト構成を有する2つのノードも示すノード808-i1についてシーケンスの一部が示されている。図示の都合上、タスク3306-1は左境界にあると仮定する。そのため、このタスクはLlc依存性を有さない。同じノードすなわち808-iで異なる時間帯に実行されるタスクによってマルチタスキングが示されており、タスク3306-1~3306-6は、フレーム内での水平位置の関係を強調するために水平方向に広がっている。タスク3306-1は、実行されると、タスク3306-2に対する左ローカルコンテキストデータを生成する。タスク3306-1は、それが右ローカルコンテキストデータを要求し得る時点に達すると、前に進み得ない。というのは、このデータが利用可能でないからである。それ自体のコンテキストにおいて実行されるタスク3306-2によって、タスク3306-1のRlcデータが、必要な場合にはタスク3306-1によって生成される左ローカルコンテキストデータを用いて生成される。タスク3306-2は、いずれのタスクも同じノード808-iで実行されるハードウェア競合のためにまだ実行されていない。この時点で、タスク3306-1は中断され、タスク3306-2が実行される。タスク3306-2は、その実行中、タスク3306-3に左ローカルコンテキストデータを提供し、また、タスク3308-1にはRlcデータを提供する。ここで、タスク3308-1は、単に同じプログラムの継続であるが、有効なRlcデータを有する。この図はノード内編成のための図であるが、同じ問題がノード間編成にも当てはまる。ノード間編成は、単に一般化したノード内編成であり、例えば、ノード808-iを2つ以上のノードで置き換えたものである。プログラムは、Lvin、Cvin、及びRvinの状態によって決まるように、或るコンテキストに対して必要な場合、Lin、Cin、及びRinデータがいずれも有効であるときこのコンテキストにおいて実行が開始され得る。このプログラムは、実行の間、この入力コンテキストを用いて結果を生成し、Llc及びClcデータを更新する。このデータは、制約なしに使用され得る。Rlcコンテキストは有効ではないが、Rvlc状態は、ハードウェアがストールせずにRinコンテキストを使用し得るように設定される。プログラムにおいてRlcデータへのアクセスに遭遇すると、プログラムはこの時点より先に進めない。というのは、このデータがまだ演算されていないかもしれないからであるこれを演算するプログラムは、ノード数がコンテキスト数よりも少ないために必ずしも実行されないことがあり、そのため、全てのコンテキストは並列に演算され得ない。Rlcデータがアクセスされる前に命令が終了すると、タスク切替えが行われ、現在のタスクを中断し、別のタスクを開始させる。タスク切替えが行われるときRvlc状態がリセットされる。タスク切替えは、右側中間コンテキストがプログラムフローにおいて初めてアクセスされていることを認識するコンパイラ706によって設定される命令フラグに基づいて行われる。コンパイラ706は、入力変数と中間コンテキストを区別することができ、そのため、求められなくなるまで有効である入力データに対してこのタスク切替えが行われないようにし得る。タスク切替えによりノードが解放されて、新たなコンテキスト、通常は最初のタスクによって更新されたLlcデータを有するコンテキストにおいて演算が成される例外については後で述べる。このタスクは、Lvin、Cvin、及びRvinが設定されていると仮定して、最初のタスクと同じコードを、ただし新たなコンテキストで実行する。Llcデータは、すでに左側コンテキストRAMにコピーされているので有効である。この新たなタスクが生成する結果は、Llc及びClcデータを更新し、前のコンテキストにおけるRlcデータも更新する。この新たなタスクは最初と同じコードを実行するので、やはり同じタスク境界に行き当たり、それに続いてタスク切替えが行われる。このタスク切替えは、その左側のコンテキストに信号を送ってRvlc状態を設定する。というのは、タスクの終了は、実行のこの時点まですべてのRlcが有効であることを暗に示しているからである。2番目のタスク切替えでは、次のタスクのスケジューリングに関して2つの選択肢が可能である。3番目のタスクは、少し前に説明したように、右側の次のコンテキストにおいて同じコードを実行し得るか、又は、中断されたところから最初のタスクが再開され得る。というのは、この時点では、最初のタスクは、有効なLin、Cin、Rin、Llc、Clc、及びRlcデータを有するからである。いずれのタスクも同じ時点で実行されるはずであるが、順序は正確さの点で概して問題にならない。スケジューリングアルゴリズムは、通常、二者択一の最初を選択しようと試みて、可能な限り左から右におそらくは右境界に至るまで進む。これにより依存性がより満足される。というのは、この順序では有効なLlc及びRlcデータがともに生成されるが、最初のタスクが再開されるとLlcデータが前と同様に生成されるからである。依存性をより満足させると、再開される準備ができているタスクの数が最大になり、それによって、タスク切替えが生じたときに何らかのタスクが実行する準備ができている可能性が高くなる。実行準備ができているタスクの数を最大にすることは重要である。というのは、マルチタスキングは、演算リソースの使用を最適化するためにも用いられるからである。ここで、多数のリソース依存性と相互作用する多数のデータ依存性が存在する。依存性及びリソース競合がともに存在する状態でハードウェアを充分に使用し続け得る既定のタスクスケジューリングは存在しない。何らかの理由で概して、依存性が満足されていないためにノードすなわち808-iが左から右に進めない場合、スケジューラは、最初のコンテキストにおいて、すなわち、ノードすなわち808-iの左端のコンテキストにおいてタスクを再開させる。左側のコンテキストのいずれかが実行準備ができているはずであるが、左端のコンテキストで再開させると、実行順序の変更の原因となったこれらの依存性を解決するために利用可能なサイクル数が最大になる。というのは、これにより、最大数のコンテキストでタスクが実行され得るからである。その結果、タスクスケジューリングが改変される期間であるプリエンプションすなわちプリエンプション3802を用い得る。図10に移ると、プリエンプションの例を見ることができる。ここで、タスク3310-6は、タスク3310-5の直後には実行し得ないが、タスク3312-1~3312-4は実行する準備ができている。タスク3312-5は、タスク3310-6に依存しているので、実行する準備ができていない。ノード810-iに対するノードスケジューリングハードウェアすなわちノードラッパー810-iは、タスク3310-6が、Rvlcが設定されていないために準備ができていないことを認識し、このノードスケジューリングハードウェアすなわちノードラッパー810-iは、左端のコンテキストにおいて準備ができている次のタスクすなわちタスク3312-1を開始させる。タスク3310-6の準備が整うまで、連続したコンテキストにおいてこのタスクの実行が継続される。この状態は、可能な限り早く、例えば、タスク3314-1のプリエンプション2212-5だけで、元のスケジュールに戻る。左から右の実行を優先することは依然として重要である。要約すると、タスクは、それらの水平位置に対して左端のコンテキストで開始され、左から右に可能な限り、ストールが発生するか、又は右端のコンテキストに到達するまで進み、次いで、左端のコンテキストで再開される。これにより、依存性ストールの可能性を最小限にすることによってノードの使用が最大になるノード808-iのようなノードは、最大で8つのスケジューリングされるプログラムを有し得、これらのいずれかからのタスクがスケジューリングされ得る。ここまで、サイドコンテキスト依存性に関する考察では、真の依存性に焦点を当ててきたが、サイドコンテキストを介した反依存性もある。プログラムは、所与のコンテキスト位置を2回以上書き込むことができ、通常、メモリ要件を最小限にするためにそうする。プログラムがこれらの書込みの間にその位置でLlcデータを読み込む場合、これは、右側のコンテキストもこのデータの読込みを要求することを暗に示しているが、このコンテキストでのタスクがまだ実行されていないので、2番目の書込みは、最初の書込みのデータを、2番目のタスクがそれを読み込む前に上書きする。この依存性のケースは、2番目の書込みの前にタスク切替えを導入することによって取り扱われ、タスクスケジューリングにより、このタスクが右側のコンテキストにおいて実行されることが保証される。というのは、スケジューリングは、Rlcデータを提供するためにこのタスクが実行されなければならないことが仮定しているからである。ただし、この場合は、タスク境界により、2番目のタスクは、Llcデータを、それが2回目に改変される前に読み込むことができる。タスク切替えは、例えば2ビットフラグを用いるソフトウェアによって示される。タスク切替えは、nop動作なし、リリース入力コンテキスト、出力用の有効設定、又はタスク切替えを示し得る。この2ビットフラグは、命令メモリすなわち1404-iの段階で復号される。例えば、タスク1の最初のクロックサイクルにより2番目のクロックサイクルでタスク切替えが生じ得、2番目のクロックサイクルでは、命令メモリすなわち1404-iからの新たな命令がタスク2用にフェッチされると仮定し得る。この2ビットフラグは、cs_instrと呼ばれるバス上にある。また、PCは、概して、1タスクがBKビットに遭遇していない場合にはプログラムからのノードラッパーすなわち810-iから、と2BKに遭遇し、タスクの実行がラップされた場合にはコンテキスト保存メモリから、の2つの位置から得られる。タスクプリエンプションは、図10の2つのノード808-i及び808-i1を用いて説明され得る。この例のノード808-kは、プログラムに割り当てられる3つのコンテキストコンテキスト0、コンテキスト1、及びコンテキスト2を有する。また、この例では、ノード808-i及び808-i1はノード内構成で動作し、ノード808-k1もそうであり、ノード808-k1のコンテキスト0に対する左側のコンテキストポインタはノード808-kの右側のコンテキスト2を指す。ノード808-kにおける様々なコンテキストとset_validの受取りの間には関係がある。コンテキスト0に対してset_validが受け取られると、set_validは、コンテキスト0に対してCvinを設定し、コンテキスト1に対してRvinを設定する。Lf=1は左境界を示すので、左コンテキストには何も成されないはずである。同様に、Rfが設定されると、Rvinは伝わらないはずである。コンテキスト1がCvinを受け取ると、コンテキスト1はコンテキスト0にRvinを伝え、Lf=1なので、コンテキスト0の実行準備が整う。コンテキスト1では、概して、実行前にRvin、Cvin、及びLvinが1に設定されるはずであり、同じことがコンテキスト2に当てはまる。また、コンテキスト2では、ノード808-k1がset_validを受け取るとき、Rvinが1に設定され得る。Rvlc及びLvlcは、概して、Bkが1になるまで検査されず、Bkが1になった後でタスクの実行がラップされ、この時点で、Rlvc及びLvlcが検査されるはずである。Bkが1になる前は、PCは別のプログラムから得られ、その後、PCはコンテキスト保存メモリから得られる。同時タスクは、書込みバッファを介して左コンテキスト依存性を解決し得る。これについては上述した。右コンテキスト依存性は、上述のプログラミング規則を用いて解決され得る。有効なローカル値は、ストア値のように取り扱われ、ストア値と対にもされ得る。有効なローカル値はノードラッパーすなわち810-iに送信され、そこから、直接、局所、又は遠隔経路が取られて有効なローカル値が更新され得る。これらのビットはフリップフロップで実装され、設定されるビットは上述のバスではSET_VLCである。コンテキスト番号はDIR_CONTに担持される。VLCビットのリセットは、1サイクル遅れのCS_INSTR制御を用いてタスク切替えの前に保存された前のコンテキスト番号を用いてローカルに行われる。上述のように、タスクの準備ができているかどうかを決定するために確認される様々なパラメータがある。ここでは、入力有効値及びローカル有効値を用いてタスクプリエンプションを説明する。ただし、これは、他のパラメータにも拡張され得る。Cvin、Rvin、及びLvinが1になると、Bk=1に遭遇しなかった場合タスクは実行準備が整う。タスクの実行がラップされると、Cvin、Rvin、及びLvinに加えてRvlc及びLvlcも確認されることがある。同時タスクでは、リアルタイム依存性確認に切り替わるので、Lvlcは無視され得る。また、タスク間すなわち、タスク1とタスク2の間から移行するとき、タスク0でコンテキスト切替えが生じたときタスク1についてのLvlcが設定され得る。タスク間隔カウンタを用いてタスク0が終了しようとしている前にタスク1の記述子が検査されるこの時点では、Lvlcが設定されないのでタスク1は準備ができていない。ただし、タスク1は、現在のタスクが0で次のタスクが1であることを把握しており、準備ができていると仮定される。同様に、タスク2が例えばタスク1に戻るとき、タスク1についてのRvlcはタスク2によってまた設定され得る。Rvlcは、コンテキスト切替えを示すものがタスク2に対して存在するとき設定され得る。したがって、タスク2が完了しようとしている前にタスク1が検査されるとき、タスク1は準備ができていない。ここでも、タスク1が、現在のコンテキストが2であり、次に実行されるコンテキストが1であることを把握しており、準備ができていると仮定する。当然のことながら、入力有効値及び有効ローカル値のようなすべての他の変数は設定されるはずである。タスク間隔カウンタは、実行中のタスクのサイクル数を示し、このデータはベースコンテキストが実行を完了したとき取得され得る。この例でまたタスク0及びタスク1を用いると、タスク0が実行されるとき、タスク間隔カウンタは有効ではない。したがって、タスク0が記述子の推定読取りを実行した後でタスク0の段階1の実行の間、プロセッサデータメモリがセットされる。実際の読み取りは、タスク0の後続の段階の実行の際に行われ、推定有効ビットがタスク切替えを想定して設定される。次のタスク切替えの間、この推定コピーにより、前述のアーキテクチャコピーが更新される。次のコンテキストの情報へのアクセスは、タスク間隔カウンタを用いるのと同じ程度には理想的ではない。というのは、次のコンテキストが有効か否かを確認しても、タスクの準備ができていないという結果にただちにつながるかもしれず、タスクの終了まで待機すると実際にタスクが準備完了になり得るが、タスク準備確認により長い時間がかかるからである。しかし、カウンタが有効でないので、他になすすべがない。タスクの準備ができているかどうか確認する前にタスク切替えを待つことにより遅延がある場合、タスク切替えは遅れる。どのタスクを実行するかなどのすべての決定がタスク切替えフラグの出現前に成され、出現後はタスク切替えが即座に行われ得ることが概して重要である。当然のことながら、フラグの出現後、次のタスクが入力を待っており、他に実行予定のタスク/プログラムがないのでタスク切替えが生じ得ないようにするケースがある。カウンタが有効になると、タスクが完了しようとする前の幾つかのすなわち10サイクルで、次に実行されるコンテキストの準備ができているかどうかが確認される。コンテキストの準備ができていない場合、タスクプリエンプションが考えられる。タスクプリエンプションがすでに成されているためタスクプリエンプションを成し得ない場合タスクプリエンプションの1つのレベルは成され得る、プログラムプリエンプションが考えられる。他のプログラムの準備ができていない場合、現在のプログラムがタスクの準備ができるまで待機し得る。タスクがストールすると、このタスクは、上述したようにNxtコンテキスト番号にあるコンテキスト番号に対する有効な入力又は有効なローカル値によって起動され得る。Nxtコンテキスト番号は、プログラムが更新されるときベースコンテキスト番号とともにコピーされ得る。また、プログラムプリエンプションが行われるとき、プリエンプションされるコンテキストの番号がNxtコンテキスト番号にストアされる。Bkに遭遇せず、タスクプリエンプションが行われる場合も、Nxtコンテキスト番号は実行されるべき次のコンテキストを有する。起動条件によりプログラムが初期化され、プログラムエントリが、エントリ0から、準備ができているエントリが検出されるまで1つずつ確認される。準備ができているエントリがない場合、プロセスは準備ができているエントリが検出されるまで継続され、準備ができているエントリが検出された時点で、プログラム切替えが生じる。起動条件は、プログラムプリエンプションを検出するために用いられ得る条件である。タスクが完了しようとするときにタスク間隔カウンタが幾つかのすなわち22のサイクルプログラム可能な値であるとき、各プログラムエントリは、準備ができているか否か確認される。準備ができている場合、準備ができているビットが、現在のプログラムに準備ができているタスクがない場合に用いられ得るプログラム内に設定される。タスクプリエンプションを見てみると、プログラムは、先入れ先出しFIGOとして記述され得、任意の順序で読み出され得る。この順序は、次にどのプログラムの準備ができているかによって決定され得る。プログラムの準備ができているかは、現在実行中のタスクが完了しようとする幾すなわち22サイクルが前で決定される。このプログラム探索すなわち22サイクルは、選択されるプログラム/タスクに対する最後の探索が成される前すなわち10サイクル前に完了するはずである。どのタスク又はプログラムも準備ができていない場合、有効な入力又は有効なローカル値が入力されるときはいつも、どのエントリの準備ができているかを見つけるために探索が再開される。ノードプロセッサ4322に対するPC値は幾つかのすなわち17個のビットであり、この値はプログラムからこれら幾つかのすなわち16個のビットを例えば1ビットだけ左にシフトすることによって得られる。コンテキスト保存メモリからPCを用いてタスク切替えを実施するとき、シフト操作は必要とされない。アルゴリズムを記述するノードレベルプログラム内のタスクは、このタスクの間に演算される変数のサイドコンテキストが要求されるときに有効でありタスク切替えである、入力又は要求される入力のサイドコンテキストから開始される命令の集合である。下記にノードレベルプログラムの例を示す。/A_dumb_algorithm.c/LineA,B,C;/input/LineD,E,F;G/sometemps/LineS;/output/D=A.centerA.leftA.right;D=C.left-D.centerC.right;E=B.left2D.centerB.right;<タスク切替え>F=D.leftB.centerD.right;F=2F.centerA.center;G=E.leftF.centerE.right;G=2G.center;<タスク切替え>S=G.leftG.right;次いで図11でタスク切替えが生じる。というのは、Dの右コンテキストがコンテキスト1で演算されていないからである。図12で、反復が完了し、コンテキスト0が保存される。図13で、前のタスクが完了するとともに次のタスクが実施され、その後、タスク切替えが生じる。処理クラスタ1400内で、汎用RISCプロセッサは様々な目的に用いられる。例えば、RISCプロセッサとし得るノードプロセッサ4322は、プログラムフロー制御に用いられ得る。下記にRISCアーキテクチャの例を説明する。図14に移ると、RISCプロセッサ5200すなわちノードプロセッサ4322のより詳細な例を見ることができる。プロセッサ5200が用いるパイプラインは、処理クラスタ1400における一般のハイレベル言語すなわちC/Cの実行を概ねサポートする。動作においては、プロセッサ5200は、フェッチ、復号、及び実行の3段階のパイプラインを用いる。典型的には、コンテキストインターフェース5214及びLSポート5212が命令をプログラムキャッシュ5208に提供し、命令フェッチ5204によってこれらの命令がプログラムキャッシュ5208からフェッチされ得る。命令フェッチ5204とプログラムキャッシュ5208の間のバスは例えば40ビット幅とし得、そのためプロセッサ5200は2発行命令をサポートし得るすなわち、命令は40ビット又は20ビット幅とし得る。概して、処理ユニット5202内のA側及びB側の機能ユニットは小さいほうの命令すなわち20ビット命令を実行し、B側の機能ユニットは大きいほうの命令すなわち40ビット命令を実行する。提供される命令を実行するために、処理ユニットは、レジスタファイル5206をスクラッチパッドとして使用し得る。このレジスタファイル5206は、A側とB側の間で共有される例えば16エントリ32ビットレジスタファイルとし得る。また、プロセッサ5200は、制御レジスタファイル5216及びプログラムカウンタ5218を含む。また、プロセッサ5200は、境界ピン又はリードを介してアクセスされ得る。各ピン又はリードの例が表1に記載されている。zはアクティブローのピンを表す。図15に移ると、プロセッサ5200をパイプライン5300とともにより詳細に見ることができる。ここで、フェッチ段5306に対応する命令フェッチ5204はA側とB側に分割され、A側は、1つの40ビット命令又は2つの20ビット命令を有する40ビット幅の命令ワードとし得るフェッチパケットの最初の20ビットすなわち19:0を受け取り、B側は、フェッチパケットの最後の20ビットすなわち39:20を受け取る。典型的には、命令フェッチ5204は、フェッチパケット内の命令の構造及びサイズを決定し、それに従って命令を送り出す以上は下記のセクション7.3で説明する。復号段5308及び処理ユニット5202の一部である復号器5221は、命令フェッチ5204からの命令を復号する。復号器5221は、概して、それぞれB側及びA側のインターミディエイトintermediatesを生成する演算子フォーマット回路5223-1及び5223-2並びに復号回路5225-1及び5225-2を含む。次いで、復号器5221からの出力が、やはり復号段5308及び処理ユニット5202の一部である復号‐実行ユニット5220によって受け取られる。復号‐実行ユニット5220は、フェッチパケットを介して受け取られた命令に対応する実行ユニット5227用コマンドを生成する。実行ユニット5227のA側及びB側は更に分割される。実行ユニット5227のB側及びA側はそれぞれ、乗算ユニット5222-1/5222-2、ブールユニット5226-1/5226-2、加算/減算ユニット5228-1/5228-2、及び移動ユニット5330-1/5330-2を含む。実行ユニット5227のB側は、ロード/ストアユニット5224及び分岐ユニット5232も含む。乗算ユニット5222-1/5222-2、ブールユニット5226-1/5226-2、加算/減算ユニット5228-1/5228-2、及び移動ユニット5330-1/5330-2はそれぞれ、A側及びB側のそれぞれのための読み取りアドレスも含む汎用レジスタファイル5206内にロードされるデータに対して乗算演算、論理ブール演算、加算/減算演算、及びデータ移動演算を実施し得る。移動演算は、制御レジスタファイル5216でも実施され得る。ベクトル処理モジュールを有するRISCプロセッサは、概して、共有機能メモリ1410とともに用いられる。このRISCプロセッサは、プロセッサ5200に用いられるRISCプロセッサと概ね同じであるが、演算及びロード/ストア帯域幅を拡張するベクトル処理モジュールを含む。このモジュールは、それぞれサイクル当たり4演算実行パケットを実行し得る16個のベクトルユニットを含み得る。典型的な実行パケットは、概して、ベクトルユニットアレイ、2つのレジスタ-レジスタ演算、及びベクトルメモリアレイにストアされる結果からロードされるデータを含む。この種のRISCプロセッサは、概して、80ビット幅又は120ビット幅の命令ワードを用い、いずれの幅の命令ワードも概してフェッチパケットを構成し、不整号命令を含み得る。フェッチパケットは、40ビット命令と20ビット命令の混合を含み得、この混合は、プロセッサ5200によって用いられる命令に類似のベクトルユニット命令及びスカラー命令を含み得る。典型的には、ベクトルユニット命令は20ビット幅とし得、他の命令は20ビット又は40ビット幅とし得るプロセッサ5200と同様。ベクトル命令は、命令フェッチバスのすべてのレーン上にも提示され得るが、フェッチパケットがスカラー及びベクトルユニット命令をいずれも含む場合、例えば命令フェッチバスビット[39:0]上にベクトル命令が提示され、例えば命令フェッチバスビット[79:40]上にスカラー命令が提示される。また、未使用命令フェッチバスレーンはNOPで埋められる。次いで、1つ又は複数のフェッチパケットから実行パケットが形成され得る。部分実行パケットは、完了するまで命令キュー内に保持される。典型的には、完全な実行パケットが実行段すなわち5310に提示される。例えば4つのベクトルユニット命令、例えば2つのスカラー命令、又は例えば20ビット命令と40ビット命令の組合せが、1サイクル内で実行され得る。連続20ビット命令もシリアルに実行され得る。現在の20ビット命令の第19ビットが設定される場合、これは、現在の命令及び後続の20ビット命令が実行パケットを形成することを示す。第19ビットは、一般に、Pビット又は並列ビットと呼ばれることがある。Pビットが設定されていない場合、これは実行パケットの終わりを示す。Pビットが設定されていない連続20ビット命令では、これらの20ビット命令がシリアルに実行される。ベクトル処理モジュールを有するRISCプロセッサは以下の制約のいずれかを含み得ることにも留意されたい。1例えば40ビット命令ではPビットを1に設定することは禁じられている。2ロード又はストア命令は、命令フェッチバスすなわち、40ビットロード及びストアではビット79:40、又は20ビットロード又はストアではフェッチバスのビット79:60のB側に現れるべきである。3単一のスカラーロード又はストアは許される。4ベクトルユニットに対して、単一のロード及び単一のストアがともにフェッチパケットに存在し得る。540ビット命令の前にPビットが1に等しい20ビット命令がくることは禁止されている。6これらの禁止条件を検出するためにハードウェアを配置してはならない。これらの制約は、システムプログラミングツール718によって実施されると予想される。図16に移ると、ベクトルモジュールの例を見ることができる。このベクトルモジュールは、ベクトル復号器5246、復号‐実行ユニット5250、及び実行ユニット5251を含む。ベクトル復号器は、命令フェッチ5204から命令を受け取るスロット復号器5248-1~5248-4を含む。典型的には、スロット復号器5248-1及び5248-2は互いに類似の方法で動作し、スロット復号器5248-3及び5248-4はロード/ストア復号回路を含む。次いで、復号‐実行ユニット5250は、ベクトル復号器5246の復号済み出力に基づいて実行ユニット5251用の命令を生成し得る。これらのスロット復号器のそれぞれは、それぞれ汎用レジスタ5206内のデータ及びアドレスを使用する乗算ユニット5252、加算/減算ユニット5254、移動ユニット5256、及びブールユニット5258が使用し得る命令を生成し得る。また、スロット復号器5248-3及び5248-4は、ロード/ストアユニット5260及び5262用のロード及びストア命令を生成し得る。図17に移ると、ゼロサイクルコンテキスト切替えの例のタイミングチャートを見ることができる。ゼロサイクルコンテキスト切替えの特徴は、現在実行中のタスクから新たなタスクにプログラムの実行を変更するために、又は、前に実行されていたタスクの実行をリストアするために用い得る。ハードウェアの実装により上記のことがペナルティなしに可能である。タスクが中断され、異なるタスクがサイクルペナルティなしで呼び出されて、コンテキスト切替えが行われ得る。図17では、タスクZが現在実行されている。タスクAのオブジェクトコードが現在命令メモリにロードされており、タスクAのプログラム実行コンテキストがコンテキスト保存メモリに保存されている。サイクル0では、force_pcz及びforce_ctxzピンへの制御信号のアサートによってコンテキスト切替えが呼び出される。タスクAのコンテキストが、コンテキスト保存メモリから読み取られ、プロセッサ入力ピンnew_ctx及びnew_pcに供給される。new_ctxピンは、タスクAの中断に続く解決済み機械状態を含み、new_pcピンは、次に実行されるタスクA命令のアドレスを示すタスクA用プログラムカウンタ値である。出力ピンimem_addrは命令メモリにも供給される。force_pczがアサートされると、組合せ論理によりimem_addrに対してnew_pcの値が駆動される。これを図17ではAと示す。サイクル1では、位置Aの命令がフェッチされ、図17ではAiと標識され、サイクル1|2の境界でプロセッサ命令復号器に供給される。3段パイプラインを仮定すると、前に実行されていたタスクZからの命令が依然としてサイクル1/2/3でパイプラインを進んでいる。サイクル3の終了時には、タスクZのすべての保留命令が実行パイプフェーズを完了しているすなわち、この時点でタスクZのコンテキストは完全に解決され保存され得る。サイクル4で、プロセッサは、コンテキスト保存メモリ書込みイネーブルピンcmem_wrzをアサートし、コンテキスト保存メモリデータ入力ピンcmem_wdataに対して解決済みのタスクZコンテキストを駆動することによってコンテキスト保存メモリに対してコンテキスト保存操作を実施する。この操作は、完全にパイプライン化されており、ペナルティ又はストールなしでforce_pcz/force_ctxzの連続シーケンスをサポートし得る。この例は、これらの信号の連続アサートにより各タスク毎に1つの命令が実行されるので、作為的であるが、タスクのサイズにもタスク切替えの頻度にも概ね何ら制約はなく、コンテキスト切替えの頻度及びタスクのオブジェクトコードのサイズにかかわらずシステムは充分な性能を維持する。下記の表2は、プロセッサ5200用の命令セットアーキテクチャの例を示す。ここで、1ユニットの指定.SA及び.SBは、どの発行スロットで20ビット命令が実行されるかを区別するために用いられ、240ビット命令は、慣例によりB側.SBで実行され、3基本フォームは、<ニューモニック>、<ユニット>、<カンマで分離されたオペランドリスト>であり、4擬似コードは、Cシンタックスを有し、適切なライブラリが直接、シミュレータ又は他の優れたモデルに含まれ得る。本発明の特許請求の範囲から逸脱することなく、説明した実施形態に改良を加え得ること、及び付加的な実施形態が実現され得ることが本発明に関係する当業者には理解されよう。"