(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0016】
図2では、並列処理を実行するSOC用アプリケーションの例が見られる。この例では、撮像デバイス1250が示される。この(例えば携帯電話又はカメラであり得る)撮像デバイス1250は、概して、画像センサ1252、SOC1300、ダイナミックランダムアクセスメモリ(DRAM)1315、フラッシュメモリ1314、ディスプレイ1254、及び電力管理集積回路(PMIC)1256を含む。動作では、画像センサ1252は、(静止画像又はビデオであり得る)画像情報を捕捉することができ、この画像情報はSOC1300及びDRAM1315によって処理され得、不揮発性メモリ(即ち、フラッシュメモリ1314)に保存され得る。また、フラッシュメモリ1314に保存される画像情報は、SOC1300及びDRAM1315の使用によって、ディスプレイ1254上で使用するために表示され得る。また、撮像デバイス1250は、可搬型であることが多く、電源としてバッテリを含む。(SOC1300によって制御され得る)PMIC1256は、バッテリ寿命を長持ちさせるために電力使用量の調整を補助し得る。
【0017】
図3では、本開示の実施形態に従ったシステムオンチップ又はSOC1300の例が図示されている。この(典型的には、OMAP(登録商標)等の集積回路又はICである)SOC1300は、(概して上述の並列処理を実行する)処理クラスタ1400、及び、(上で説明及び参照された)ホスト環境を提供するホストプロセッサ1316を概して含む。ホストプロセッサ1316は、ワイド(即ち、32ビット、64ビット等)RISCプロセッサ(例えばARM Cortex−A9等)であり得、バスアービトレータ1310、バッファ1306、(ホストプロセッサ1316がインタフェースバス又はIバス1330上で周辺インタフェース1324にアクセスすることを許可する)バスブリッジ1320、ハードウェアアプリケーションプログラミングインタフェース(API)1308、及び割り込みコントローラ1322と、ホストプロセッサバス又はHPバス1328上で通信する。処理クラスタ1400は、典型的に、(例えば、荷電結合デバイス、又はCCDインタフェースであり得、オフチップデバイスと通信し得る)機能回路要素1302、バッファ1306、バスアービトレータ1310、及び周辺インタフェース1324と、処理クラスタバス又はPCバス1326上で、通信する。この構成を用いて、ホストプロセッサ1316は、API1308を介して情報を提供する(即ち、所望の並列実装に適合するように処理クラスタ1400を構成する)ことができ、一方、処理クラスタ1400及びホストプロセッサ1316はいずれも、(フラッシュインタフェース1312を介して)フラッシュメモリ1314に、(メモリコントローラ1304を介して)DRAM1315に、直接アクセスできる。また、Joint Test Action Group(JTAG)インタフェース1318を介して、テスト及びバウンダリスキャンが実行され得る。
【0018】
図4を参照すると、本開示の実施形態に従った並列処理クラスタ1400の例が示されている。典型的には、処理クラスタ1400はハードウェア722に対応する。処理クラスタ1400は、概して、パーティション1402−1〜1402−Rを含む。これらは、ノード808−1〜808−N、ノードラッパー810−1〜810−N、命令メモリ1404−1〜1404−R、及び(以下で詳しく説明する)バスインタフェースユニット又は(BIU)4710−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が提供される。
【0019】
処理クラスタ1400は、概して、データ転送のために「プッシュ」モデルを使用する。データ転送は要求応答型のアクセスではなく、概してポステッドライトとして現れる。これは、データ転送が一方向であるため要求応答アクセスに比べてグローバルインターコネクト(即ち、データインターコネクト814)の占有を2分の1に減らすという利点を有する。概して、インターコネクト814を介して要求をルーティングし、その後、応答が要求元へルーティングされ、その結果インターコネクト814上で2つの遷移が生成されることは望まれない。プッシュモデルは単一転送を生成する。これは、ネットワークサイズが増大するとネットワークレイテンシが増大するため、またこのことが要求応答型トランザクションのパフォーマンスを低下させることは避けられないことであるため、スケーラビリティに関して重要である。
【0020】
プッシュモデルは、データフロープロトコル(即ち、812−1〜812−N)と同様に、グローバルデータトラフィックを、正確さのために用いられるものまで概して最小化する一方、ローカルノードの利用率に対するグローバルデータフローの影響も概して最小化する。大量のグローバルトラフィックであってもノード(即ち、808−i)のパフォーマンスに対する影響は、通常、皆無に近い。ソースはデータを(後述する)グローバル出力バッファに書き込み、転送成功の確認を要求することなく継続する。データフロープロトコル(即ち、812−1〜812−N)は、概して、インターコネクト814で単一転送を用い、データをあて先へ移動する最初の試みでの転送が成功することを確実にする。(後述する)グローバル出力バッファは(例えば)最大16出力まで保持することができるため、出力のための瞬時グローバル帯域幅が不充分になることに起因するノード(即ち、808−i)のストールの可能性が非常に低くなる。更に、瞬時帯域幅は、要求応答トランザクション又は転送失敗の繰り返しによる影響を受けない。
【0021】
最後に、プッシュモデルはプログラミングモデルに一層密接に適合する。言い換えるとプログラムは自己データを「フェッチ」せずに、その代わりに、プログラムの入力変数及び/又はパラメータは呼び出される前に書き込まれる。プログラミング環境では、入力変数の初期化は、ソースプログラムによるメモリへの書き込みとして行われる。処理クラスタ1400内では、これらの書き込みがポステッドライトに変換され、変数の値をノードコンテキストにポピュレートさせる。
【0022】
(後述する)グローバル入力バッファは、ソースノードからデータを受け取るために用いられる。各ノード808−1〜808−Nのためのデータメモリが単一ポートであるため、入力データの書き込みが、ローカルの単一入力多重データ(SIMD)による読み出しとコンフリクトすることがあり得る。入力データをグローバル入力バッファへ受け入れ、そこで入力データが空きのデータメモリサイクルを待つことができることによって、この競合は回避される(即ち、SIMDアクセスとのバンクコンフリクトはない)。データメモリは、(例えば)32バンクを有し得るため、直ちにバッファがフリーになる可能性が非常に高い。しかしながら、転送を確認するためのハンドシェイキングがないので、ノード(即ち、808−i)はフリーのバッファエントリを持つはずである。所望とされる場合は、グローバル入力バッファは、バッファ位置をフリーにするために、ローカルノード(即ち、808−i)をストールさせてデータメモリに強制的に書き込みを行うことができるが、このイベントは極めて希であるべきである。典型的には、グローバル入力バッファは2つの別々のランダムアクセスメモリ(RAM)として実装されて、一方がデータメモリへ読み出されるべき状態にある間、他方がグローバルデータを書き込むための状態になり得るようにする。メッセージングインターコネクトは、グローバルデータインターコネクトとは分かれているが、同様にプッシュモデルを使用する。
【0023】
システムレベルでは、所望のスループットにスケーリングされた多数のノードを備える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)を共有するとき、それらのノードは、概して、同時に同じプログラムを実行する。
【0024】
また、処理クラスタ1400は非常に多数のノード(即ち、808−i)及びパーティション(即ち、1402−i)をサポートし得る。しかしながら、1つのパーティションについて4以上のノードを持つと概してノンユニフォームメモリアクセス(NUMA)アーキテクチャに類似するため、パーティション毎のノードの数は通常は4つに限定されている。この例では、パーティションは、(後でインターコネクト814に関連して説明する)1つ(又は複数)のクロスバーを介して接続される。クロスバーは概して横断帯域幅が一定している。処理クラスタ1400は、現在、サイクル毎に1ノード幅のデータ(例えば、64、16ビットピクセル)を転送するように設計されており、4サイクルに亘り、1サイクルにつき16ピクセルの4転送に区分される。処理クラスタ1400は、概して、レイテンシトレラントであり、インターコネクト814がほぼ飽和(この状態を達成するのは合成プログラム以外では極めて難しいことに留意されたい)であっても、ノードバッファリングが、概して、ノードストールを防止する。
【0025】
典型的には、処理クラスタ1400はパーティション間で共有する下記のグローバルリソースを含む。
(1) 制御ノード1406。これは(メッセージバス1420で)システムワイドのメッセージングインターコネクト、イベント処理及びスケジューリング、及びホストプロセッサ及びデバッガ(これらは全て後で詳しく説明する)へのインタフェースを提供する。
(2) GLSユニット1408。これはプログラマブル縮小命令セット(RISC)プロセッサを含み、システムデータ移動を可能にする。システムデータ移動は、GLSデータ移動スレッドとして直接コンパイルされ得るC++プログラムによって記述され得る。これによって、ソースコードを修正することなく、クロスホスト環境でのシステムコードの実行が可能になり、また、システム又は(後述する)SIMDデータメモリ内の任意のアドレス(変数)のセットから別の任意のアドレス(変数)のセットに移動できるため、ダイレクトメモリアクセスよりもより一般的である。GLSユニット1408は、(例えば)0−サイクルのコンテキストスイッチを備え、マルチスレッド化され、例えば、最大16スレッドまでサポートする。
(3) 共有機能メモリ1410。これは、一般のルックアップテーブル(LUT)及び統計収集機能(ヒストグラム)を提供する大型共有メモリである。また、これは大型共有メモリを使用して、リサンプリング及び歪補正等のノードSIMDにより(コストの理由で)充分サポートされていないピクセル処理をサポートし得る。この処理はネイティブタイプとして、スカラ、ベクトル、及び2Dアレイを実装する(例えば)6発行命令RISCプロセッサ(即ち、後で詳しく説明するSFMプロセッサ7614)を用いる。
(4) ハードウェアアクセラレータ1418。これは、プログラマビリティを必要としない機能のため、或いは電力及び/又は面積を最適化するために組み込まれ得る。アクセラレータは、サブシステムにはシステム内の他のノードとして現れ、制御及びデータフローに参加し、イベントを作成可能であり、スケジューリング可能である。またデバッガにとっては可視的である。(ハードウェアアクセラレータは、適用可能であるときは、専用のLUT及び統計収集を有し得る。)
(5) データインターコネクト814及びシステムオープンコアプロトコル(OCP)L3接続1412。これらは、ノードパーティション、ハードウェアアクセラレータ、及びシステムメモリ、及び、データバス1422上の周辺装置の間のデータ移動を管理する。(ハードウェアアクセラレータは、L3へのプライベート接続も有し得る)。
(6) デバッグインタフェース。これらは、図には示されていないが、本明細書中に記載される。
【0026】
図5を参照すると、共有機能メモリ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を含む。
【0027】
全ての処理ノード(即ち、808−i)が機能メモリ7602及びベクトルメモリ7603にアクセスし得るという意味で、機能メモリ7602及びベクトルメモリ7603は、全般的に「共有」されている。機能メモリ7602に提供されるデータは、SFMラッパーを介して(典型的にはライトオンリーの方式で)アクセスされ得る。また、この共有は、全般的に、ノード(即ち、808−i)を処理するための上述のコンテキスト管理と一貫性がある。また、処理ノードと共有機能メモリ1410との間のデータI/Oもデータフロープロトコルを使用し、処理ノードは、典型的には、ベクトルメモリ7603に直接アクセスできない。また、共有機能メモリ1410は、機能メモリ7602に書き込むことができるが、処理ノードによってアクセスされている間は、書き込むことができない。処理ノード(即ち、808−i)は、機能メモリ7602内の共通位置を読み出し及び書き込みできるが、(通常は)リードオンリーLUT操作、又はライトオンリーヒストグラム操作のいずれかとしてである。また、処理ノードが機能メモリ7602領域への読み出し−書き込みアクセスを有することも可能であるが、これは所定のプログラムによるアクセスに限定されるべきである。
【0028】
共有機能メモリ1410の例である
図5には、ノードアクセス用のポート7624−1〜7624−Rがある。(実際の数はコンフィギャラブルであるが、典型的には、パーティション当たり1つのポートがある。)ポート7624−1〜7624−Rは、概して、並列アクセスをサポートするように編成され、そのため、ノードSIMDにおけるデータパスはすべて、任意の所与のノードから、同時LUT又はヒストグラムアクセスを実施し得る。
【0029】
この例での機能メモリ7602の編成は、それぞれ16個の16ビットピクセルを含む16個のバンクを有する。バンク7608−1で始まるように整合される256個のエントリのルックアップテーブル即ちLUTがあると仮定され得る。ノードは、ピクセル値(サイクル当たり16ピクセル、ノード全体で4サイクル)の入力ベクトルを提示し、このテーブルは、LUTにアクセスするベクトル要素を用いて1サイクルでアクセスされる。このテーブルは各バンク(すなわち、7608−1〜7608−J)の単一ライン上に表されているので、すべてのノードは同時アクセスを実施し得る。というのは、任意のベクトルのいずれの要素もバンクコンフリクトをもたらし得ないからである。結果のベクトルが、テーブル値を複製して結果のベクトルの要素にすることによって生成される。結果のベクトルの各要素に対し、入力ベクトルの対応する要素の値によって選択されるLUTエントリによって結果の値が求められる。任意の所与のバンク(すなわち、7608−1〜7608−J)で、2つのノードからの入力ベクトルが同じバンクへの異なるLUTインデックスを生成する場合、最も古い入力が優先されるようにバンクアクセスが優先順位づけられる、又は、すべての入力が同時に生じる場合、最も左側のポート入力が優先される。バンクコンフリクトはあまり頻繁には起こらないか、又は、バンクコンフリクトがスループットに何らかの影響を及ぼす場合でもあまり影響がないと予想される。この理由をいくつか下記に示す。
・多くのテーブルは、同じテーブル内で同時にアクセスされ得るエントリの合計数(すなわち、256)と比較して小さい。
・入力ベクトルは、通常、(例えば)ピクセルの比較的小さく局所的な水平領域によるものであり、概して値は大きく変動しない(そのため、LUTインデックスが大きく変動しないはずである)と予想される。例えば、画像フレームが5400ピクセル幅である場合、サイクル当たり16ピクセルの入力ベクトルは、合計走査線の0.3%未満を表す。
・最後に、LUTにアクセスするプロセッサ命令は、LUT演算の結果を使用する命令から切り離される。プロセッサコンパイラは、初期アクセスから可能な限りこの使用のスケジューリングを試みる。LUTアクセスと使用が充分に離れていれば、いくつかの付加的なサイクルがLUTバンクコンフリクトによって消費されたとしてもストールには至らない。
【0030】
パーティション内で、1つのノード(すなわち、ノード808−i)は、通常、任意の所与の時間に機能メモリ7602にアクセスするが、これは性能に大きな影響を及ぼさないはずである。同じプログラムを実行するノード(すなわち、808−i)は、このプログラム内で異なる位置にあり、時間内に所与のLUTへのアクセスを行う。異なるプログラムを実行するノードの場合でさえ、LUTアクセス頻度は低く、異なるLUTへの同時アクセスが同時に起こる確率は極めて低い。このようなことが起こっても、その影響は概して最小限に抑えられる。これは、コンパイラがこれらの結果の使用から可能な限り遠くLUTアクセスをスケジューリングするからである。
【0031】
異なるパーティション内のノードは、バンクコンフリクトがないと仮定すると、同時に機能メモリ7602にアクセスし得るが、これはまれにしか起こらないはずである。任意の所与のバンクで、2つのパーティションからの入力ベクトルが同じバンクへの異なるLUTインデックスを生成する場合、このバンクアクセスは、最も古い入力が優先されるように優先順位づけられる、又は、すべての入力が同時に生じる場合、最も左側のポート入力が優先される(例えば、ポート1よりもポート0が優先される)。
【0032】
ヒストグラムアクセスは、ノードに戻される結果がないことを除いて、LUTアクセスに類似している。その代わりに、ノードからの入力ベクトルは、ヒストグラムエントリにアクセスするために用いられ、これらのエントリは算術演算によって更新され、その結果がヒストグラムエントリに戻される。入力ベクトルの複数の要素が同じヒストグラムエントリを選択する場合、このエントリはそれに応じて更新される。例えば、3つの入力要素が所与のヒストグラムエントリを選択し、算術演算が単純な増分の場合、このヒストグラムエントリは3だけ増分され得る。ヒストグラムの更新は、典型的には、下記の3つの形態の1つを取り得る。
−エントリは、ヒストグラム命令における定数だけ増分され得る。
−エントリは、プロセッサ内のレジスタにおける変数の値だけ増分され得る。
−エントリは、入力ベクトルとともに送出される別の重みベクトルだけ増分され得る。例えば、これにより、入力ベクトル内のピクセルの相対位置に応じてヒストグラム更新に重み付けされ得る。
【0033】
各記述子は、(バンク整合された)関連するテーブルのベースアドレス、インデックスを形成するために用いられる入力データのサイズ、及びベースアドレスに対する、このテーブルへのインデックスを形成するために用いられる2つの(例えば)16ビットマスクを指定し得る。こういったマスクは、概して、インデックスを形成するために(例えば)ピクセルのどのビットを選択し得るかを決める。選択されるビットは任意の連続ビットであり、それによって、テーブルサイズが間接的に示される。ノードがLUT命令又はヒストグラム命令を実行する際、この命令は、典型的に4ビットフィールドを用いて記述子を選択する。この命令はテーブルに対する演算を決定し、そのため、LUT及びヒストグラムを任意に組み合わせ得る。例えば、ノード(すなわち808−i)は、ヒストグラムにルックアップテーブル演算を実施することによってヒストグラムエントリにアクセスし得る。テーブル記述子は、SFMデータメモリ7618初期化の一部として初期化され得る。ただし、これらの値はハードウェア記述子にもコピーすることができ、そのため、LUT演算及びヒストグラム演算は、SFMデータメモリ7618にアクセスすることを必要とせずに、所望の場合には並列に、これらの記述子にアクセスし得る。
【0034】
図5に戻って、SFMプロセッサ7616は、概して、機能メモリ7602の大きな領域内の比較的広い(例えば)ピクセルコンテキストへの一般的プログラミングアクセスを提供する。これは、(1)一般的なベクトル及びアレイ演算、(2)Lineデータ型と互換性のある、(例えば)水平ピクセルグループに対する演算、及び(3)フレームのビデオマクロブロックまたは矩形領域などのデータへの2次元アクセスをサポートし得る、(例えば)Blockデータ型のピクセルに対する演算を含み得る。そのため、処理クラスタ1400は、走査線ベース及びブロックベースのピクセル処理の両方をサポートし得る。機能メモリ7602のサイズもコンフィギャラブルである(すなわち、48〜1024キロバイト)。典型的には、このメモリ7602のわずかな部分がLUT及びヒストグラム用とされ、そのため、残りのメモリは、例えば関連ピクセルのベクトルを含めて、バンク7608−1〜7608−Jに対する一般的なベクトル演算に用いられ得る。
【0035】
図に示すように、SFMプロセッサ7614は、(例えば)32ビットスカラー処理(すなわち、この場合は二重発行)用のRISCプロセッサを用い、命令セットアーキテクチャを拡張して、(例えば)16個の32ビットデータパスにおけるベクトル及びアレイ処理をサポートし、16ビットパックドデータに対しても動作して最大で動作スループットの2倍が得られ、8ビットパックドデータに対しても動作して最大で動作スループットの4倍が得られ得る。SFMプロセッサ7614は、(例えば)ピクセルのデータ型(Line、Pair、及びuPair)と互換性のある、広いピクセルコンテキストに対する演算を実施する能力を利用可能にする一方で、任意のC++プログラムをコンパイルし得る。SFMプロセッサ7614は、水平及び垂直両方向を含めて、プロセッサによって提供される制限付きサイドコンテキストアクセス及びパッキングではなく、(例えば)ピクセル位置間のより一般的なデータ移動も提供し得る。この一般性は、ノードプロセッサと比較して、SFMプロセッサ7614が、機能メモリ7302の2次元アクセス能力を用いるため、また、4つのロード及び2つのストアではなくどのサイクルでもロード及びストアをサポートし得るため、可能である。
【0036】
SFMプロセッサ7614は、動き推定、リサンプリング、及び離散コサイン変換、並びに歪み補正などのより一般的な演算を実施し得る。命令パケットは120ビット幅とすることができ、1サイクルで最大で2つのスカラー演算及び4つのベクトル演算が並行して発行される。命令並列性の度合いが低い符号領域では、スカラー及びベクトル命令は、サイクル当たり1つの命令を直列に発行することを含めて、幅6未満の任意の組合せで実行され得る。並列性は、前の命令との並列発行を示すため命令ビットを用いることによって検出され、複数の命令は順番に発行される。生成される機能メモリアドレスが線形か2次元かに応じて、SIMDデータパス用の2つの形態のロード及びストア命令がある。機能メモリ7602の第1の種類のアクセスはスカラーデータパスで実施され、第2の種類のアクセスはベクトルデータパスで実施される。後者の場合、これらのアドレスは、(例えば)各データパスの半分における16ビットレジスタ値に基づいて、完全に独立とし得る(それによって、独立なアドレスから最大で例えば32ピクセルにアクセスし得る)。
【0037】
ノードラッパー7626と、SFMプロセッサ7614の制御構造とは、ノードプロセッサのものと類似しており、いつくかの例外を除き、多くの共通の構成要素を共有する。SFMプロセッサ7614は、(例えば)水平方向の極めて一般的なピクセルアクセスをサポートし得、ノード(すなわち、808−i)に用いるサイドコンテキスト管理技術は概して可能ではない。例えば、用いられるオフセットは、プログラム変数に基づくものとすることができ(ノードプロセッサではピクセルオフセットは典型的には命令イミディエート(immediate)である)、そのため、コンパイラ706は、一般に、サイドコンテキスト依存性を満足するためにタスクの境界を検出及び挿入することができない。ノードプロセッサでは、コンパイラ706はこれらの境界の場所を把握しているはずであり、レジスタ値がこれらの境界を越えると有効でなくなると予想されることを保証し得る。SFMプロセッサ7614では、ハードウェアがタスク切り替えを実施すべき時点を決定し、スカラー単位及びSIMDベクトル単位の両方で、すべてのレジスタを保存及び復元するためのハードウェアサポートを提供する。典型的には、保存及び復元に用いられるハードウェアは、コンテキスト保存復元回路要素7610及びコンテキスト状態回路7612である(これらは例えば16×256ビットとし得る)。この回路要素7610は、(例えば)スカラーコンテキスト保存回路(例えば、16×16×32ビットとし得る)及び32個のベクトルコンテキスト保存回路(例えば、各々、16×512ビットとし得る)を含み、これらは、SIMDレジスタを保存及び復元するために用いられ得る。ベクトルメモリ7603は、概して、サイドコンテキストRAMをサポートせず、(例えば)ピクセルオフセットを変数とし得るので、概して、ノードプロセッサで用いられる同じ依存性メカニズムを許容しない。その代わりに、(例えば)フレームの或る領域内のピクセルは、いくつかのコンテキストにわたって分散されておらず、同じコンテキスト内にある。これにより、複数の並列ノードにわたってコンテキストが水平方向に共有されるべきではないことを除いて、ノードコンテキストに類似する機能が得られる。共有機能メモリ1410は、概して、SFMデータメモリ7618、SFM命令メモリ7616、及びグローバルIOバッファ7620も含む。また、共有機能メモリ1410は、優先順位付け、バンク選択、インデックス選択、及び結果総合を実施し得るインタフェース7606も含み、インタフェース7606は、パーティションBIU(すなわち、4710−i)を介してノードポート(すなわち、7624−1〜7624−4)に結合される。
【0038】
図6を参照すると、共有機能メモリ1410のためのSIMDデータパス7800の例が見られる。例えば、8個のSIMDデータパス(これらは、16ビットパックデータを操作できるので、2つの16ビットハーフに区分され得る)が使用され得る。図示されるように、これらのSIMDデータパスは、全般的に、バンクのセット7802−1〜7802−L、関連するレジスタ7804−1〜7804−L、及び関連する機能ユニットのセット7806−1〜7806−Lを含む。
【0039】
図7では、SIMDデータパス(即ち及び例えば、レジスタ7804−1〜7804−Lの1つの一部分、及び機能ユニット7806−1〜7806−Lの1つの一部分)の例が見られる。図示されるように、例えば、このSIMDデータパスは、16−エントリ、32ビットレジスタファイル7902、2つの16ビット乗算器7904及び7906、及び、同様に、1サイクル中に2つの16ビットパック操作を実行し得る、単一の32ビット算術/論理ユニット7908を含み得る。また、例として、各SIMDデータパスは、2つの、独立した16ビット演算、又は組み合わせた32ビット演算を実行し得る。例えば、これは、32ビットの加算器と組み合わせた16ビット乗算器を用いて32ビットの乗算を形成し得る。また、算術/論理ユニット7908は、加算、減算、論理演算(即ち、AND)、比較、及び条件移動を実行することが可能である。
【0040】
図6に戻ると、SIMDデータパスレジスタ7804−1〜7804−Lは、ベクトルメモリ7603へのロード/ストアインタフェースを使用し得る。これらのロード及びストアは、ノード(即ち、808−i)による並列LUT及びヒストグラムアクセスのために提供されるベクトルメモリ7603の特徴を使用し得る。ノードのために各SIMDデータパスハーフは機能メモリ7602内へのインデックスを提供し得る。同様に、SFMプロセッサ7614内の各SIMDデータパスハーフは、独立ベクトルメモリ7603アドレスを提供し得る。アドレス指定は、概して、隣接するデータパスが(例えば)スカラ、ベクトル、及び8、16、又は32ビットデータのアレイなど、データタイプの多数のインスタンス上で同じ操作を実行できるように構成される。これらは、ベクトル暗示アドレス指定モードと称される(ベクトルが、リニアのベクトルメモリ7603アドレス指定を用いて、SIMDによって暗示される)。或いは、各データパスはバンク7608−1〜7608−J内のフレームの領域からのパックされたピクセル上で操作し得る。これらは、ベクトルパック化アドレス指定モードと称される(パックされたピクセルのベクトルは、二次元ベクトルメモリ7603アドレス指定を用いて、SIMDによって暗示される)。両方の場合において、ノードプロセッサ4322と同じように、プログラミングモデルがSIMDの幅を隠すことができ、プログラムはあたかもそれらが単一ピクセル又は他のデータタイプのエレメント上で演算したかのように書き込まれる。
【0041】
ベクトル暗示データタイプは、概して、各SIMDデータパスによって個別に演算される8ビットchar、16ビットハーフワード、又は32ビットint、のいずれかのSIMD実装ベクトルである(即ち、
図9)。これらのベクトルは、概して、プログラム内では明示的でなく、ハードウェア演算によって暗示される。また、これらのデータタイプは、明示的プログラムベクトル又はアレイ内のエレメントとして構成され得る。SIMDは、隠された2次元、又は3次元を、これらのプログラムベクトル又はアレイに、効果的に加算する。実際には、プログラミングビューは専用の32ビットデータメモリを備える単一のSIMDデータパスであり得る。このメモリは従来のアドレス指定モードを用いてアクセスされる。ハードウェアでは、このビューは、32のSIMDデータパスの各々がプライベートデータメモリの外観を有するような方式でマッピングされるが、この機能性を共有機能メモリ1410に実装するために、ベクトルメモリ7603のワイドなバンクされた構成の利点を実装に利用する。
【0042】
SFMプロセッサ7614SIMDは、概して、記述子を用いて、ノードプロセッサ4322コンテキストに類似するベクトルメモリ7603コンテキスト内で動作する。記述子はバンクのセット7802−1に整列され、全体のベクトルメモリ7603にアクセスするのに充分に大きい(即ち、1024kBのサイズの場合、13ビット)ベースアドレスを有する。SIMDデータパスの各ハーフは、一番左のデータパスのための0から始まる6ビット識別子(POSN)で番号付けされる。ベクトル暗示アドレス指定の場合、この値のLSBは、概して無視され、残りの5ビットは、データパスによって生成されたベクトルメモリ7603アドレスをベクトルメモリ7603内のそれぞれのワードに整列させるために用いられる。
【0043】
図8では、アドレス形成の例を見ることができる。典型的には、SIMDの結果によってロード又はストア命令が実行されると、各データパスによって、このデータパスにおけるレジスタ及び/又は命令イミディエート値に基づいて、生成されるアドレスが得られる。これは、プログラミングの観点では、単一のプライベートデータメモリにアクセスするアドレスである。これは、例えば、32ビットアクセスとし得るので、このアドレスの2つのLSBは、ベクトルメモリ7603へのアクセスでは無視することができ、ワード内のバイト又はハーフワードにアドレスするために用いられ得る。このアドレスは、コンテキストベースアドレスに加えられ、その結果、暗示ベクトル用のコンテキストインデックスが得られる。各データパスは、このインデックスをPOSN値(これはワードアクセス用であるため)のビット(すなわち、ビット5:1)に連結し、その結果の値は、このデータパスのコンテキスト内でのベクトルメモリ7603用のインデックスである。このアドレスは、コンテキストベースアドレスに加えられ、その結果、暗示ベクトル用のベクトルメモリ7603のアドレスが得られる。
【0044】
これらのアドレスは、7802−1〜7802−Lの各組(すなわち、16個のバンクの4個)からの或るバンクに整合された値にアクセスし、このアクセスは1サイクルで行われ得る。すべてのアドレスが同じスカラーレジスタ及び/又はイミディエート値に基づいており、LSBのPOSN値が異なるので、バンクコンフリクトは生じない。
【0045】
図9及び
図10は、ソースプログラム内に明示的に存在するベクトル及びアレイに対してアドレス指定がどのように実施され得るかの例を示す。このプログラムは、従来のベース・プラス・オフセット加算を用いて、最初の32ビットデータパスについての所望の要素のアドレスを(データパスの16ビットずつの2つの半分に対するPOSN値0及び1を用いて)演算する。他のデータパスも同じ演算を実施してこのアドレスの同じ値を計算するが、最終的なアドレスは、各データパスに対しそのデータパスの相対位置だけオフセットされている。これにより、(例えば)32個の隣接する32ビット値にアクセスする4つのベクトルメモリバンク(すなわち、7608−1、7608−5、7608−9、及び7608−12)がアクセスされる。これは、アドレス指定モードがベクトルメモリ7603の編成を効率よく利用する典型的方法を示している。各データパスはプライベートな1組の機能メモリ7602エントリにアドレスするので、このローカルデータパス内でストア−ロード依存性がチェックされ、依存性がある場合にはフォワーディングが適用される。一般に、データパス間の依存性のチェックは、極めて複雑なので、望まれない。これらの依存性は、ストアの後、依存ロードが実施され得る前に(サイクル数は3〜4サイクルとなる可能性が高い)遅延スロットをスケジューリングするコンパイラ706によって避けるべきである。
【0046】
ベクトルパックドアドレス指定モードでは、概して、SFMプロセッサ7616のSIMDデータパスを、(例えば)ノード(808−i)におけるパックドピクセルと互換性のあるデータ型で動作させる。これらのデータ型の編成は、ノードデータメモリにおける編成と比較して、機能メモリ7602では大きく異なる。複数のコンテキストにわたる水平グループをストアする代わりに、これらのグループを単一のコンテキストにストアし得る。SFMプロセッサ7614は、ベクトルメモリ7603の編成をうまく利用して、(例えば)任意の水平又は垂直位置からデータパスレジスタに、変数オフセットに基づいて、ピクセルをパックすることができ、それによって、歪み補正などの演算が成される。これに対し、ノード(すなわち、808−i)は、小さな一定オフセットを用いて水平方向のピクセルにアクセスし、これらのピクセルはすべて同じ走査線上にある。共有機能メモリ1410用のアドレス指定モードは、サイクル当たり1つのロード及び1つのストアをサポートすることができ、その性能は、ランダムアクセスによって生じるベクトルメモリバンク(すなわち、7608−1)コンフリクトに応じて変化する。
【0047】
ベクトルパックドアドレス指定モードは、概して、第1の次元がフレーム内の垂直方向に対応し、第2の次元が水平方向に対応する、2次元アレイのアドレス指定に類似のアドレス指定を用いる。(例えば)所与の垂直及び水平インデックスのピクセルにアクセスするは、垂直インデックスに、Lineの場合は水平グループの幅、又はBlockの幅を乗算する。これにより、この垂直オフセットのところに位置する最初のピクセルに対するインデックスが得られる。これが、水平インデックスに加算されて、所与のデータ構造内でアクセスされるピクセルのベクトルメモリ7603のアドレスが得られる。
【0048】
垂直インデックス計算は、プログラムされたパラメータに基づいている。この例が
図11に示されている。このパラメータは、Line及びBlockデータ型の両方の垂直アドレスを制御する。この例でのフィールドは、概して、下記のように定義される(環状バッファは概してLineデータを含む)。
・上部フラグ(Top Flag:TF):これは、環状バッファがフレームの上部縁に近いことを示す。
・底部フラグ(Bottom Flag:BF):これは、環状バッファがフレームの底部縁に近いことを示す。
・モード(Mode:Md):この2ビットフィールドは、アクセスに関連する情報を符号化する。値00’bは、アクセスがBlockに対するものであることを意味する。値01〜11’bは、環状バッファに用いられる境界処理の型を符号化し、01’bは境界にわたってミラーリングし、10’bは境界にわたって境界ピクセルを繰り返し、11’bは飽和値7FFF’h(ピクセルは16ビット値である)を戻す。
・ストアディセーブル(Store Disable:SD):これは、このポインタを用いてライトを抑制して、一連の依存バッファにおける開始遅延の原因となる。
・上部/底部オフセット(Top/Bottom Offset:TBOffset):このフィールドは、環状バッファの相対的位置0に対し、フレームの上部からどのくらい下に位置するか、又はフレームの底部からどのくらい上に位置するかを走査線の数で示す。これにより、位置0から負(上部)又は正(底部)オフセットに対するフレームの境界がわかる。
・ポインタ:これは、垂直方向に相対オフセット0の走査線に対するポインタである。これは、バッファのアドレス範囲内の任意の絶対位置とし得る。
・バッファサイズ(Buffer_Size):これは、環状バッファの総垂直サイズであり、走査線の数で表される。これは、バッファ内でのモジュロアドレス指定を制御する。
・HGサイズ/Block幅(HG_Size/Block_Width):これは、水平グループの幅(HG_Size)又はBlockの幅(Block_Width)であり、32ピクセルを単位とする。これは、ベクトルパックドアドレスを形成するために用いられる第1の次元の大きさである。
このパラメータは、Blockの場合、Block_Widthを除くすべてのフィールドがゼロになるように符号化され、符号生成は、この値を、Block宣言の次元に基づいて、charとして扱い得る。他のフィールドは、通常、環状バッファに対して用いられ、プログラマ及び符号生成の両方によって設定される。
【0049】
図12に移ると、水平グループが機能メモリコンテキスト内にどのようにストアされ得るかを見ることができる。水平グループのこの編成は、複数のノード(すなわち、808−i)にわたって割り当てられる水平グループを模倣したものであるが、ただし、(図に示されるように、且つ、例えば)これらのグループは、複数のノードコンテキストではなく単一の機能メモリコンテキスト内にストアされる。この例は、6つのノードコンテキストの幅に等価な水平グループを示している。このグループの最初の64個のピクセルは、0と番号が振られ、バンク0〜3の連続位置にストアされる。このグループの2番目の64個のピクセルは、1と番号が振られ、バンク4〜7にストアされる。このパターンが、バンクに対して、第2の組の64個のピクセルの1ライン下の、5と番号が振られバンク4〜7にストアされる第6の組の64個のピクセルまで繰り返される。この例では、次の垂直線の最初の64個のピクセルは、0と番号が振られ、第1の走査線の第3の組の64個のピクセルの下のバンク8〜B’hにストアされる。これらのピクセルは、SIMDデータメモリ内の環状バッファに次の走査線にストアされるノードピクセルに対応する。走査線内のピクセルは、データパスによって生成されるパックドアドレスを用いてアクセスされる。データパスの各半分は、データパスのこの半分にパックされるか、又は、データパスのこの半分から機能メモリ7602に書き込まれるピクセルに対するアドレスを生成する。ノードコンテキスト編成を模倣するために、SIMDは概念的に水平グループ内の64個のピクセルの所与の組を中心とし得る。この場合、データパスの各半分は、この組の単一ピクセルを中心とし、データパスのこの半分に対するPOSN値を用いてアドレスされる。ベクトルパックドアドレス指定モードは、このピクセル位置からの符号付きオフセットを定義し、これは、命令イミディエートか、このデータパスの半分に関連するレジスタの半分の中にパックされた符号付き値かのいずれかである。これは、ノードプロセッサ命令セットにおけるピクセルオフセットに匹敵するが、より一般的なものである。というのは、これが、より広い範囲の値を有し、プログラム変数に基づき得るからである。
【0050】
SFMプロセッサ7614はノード(すなわち、808−i)に類似の処理演算を実施するので、類似のコンテキスト編成及びプログラムスケジューリングで、ノードと同様にスケジューリング及び配列される。しかし、ノードとは異なり、データは走査線の水平方向にわたるコンテキスト間で必ずしも共有されない。その代わりに、SFMプロセッサ7614は、はるかに大きくスタンドアロンのコンテキストに対して動作し得る。また、サイドコンテキストは動的に共有され得ないので、コンテキスト間のきめ細かいマルチタスキングをサポートする必要はないが、スケジューラは、データフローのストールを中心にスケジューリングを行うためにプログラムプリエンプションを用い得る。
【0051】
図13に移ると、SFMデータメモリ7618についての編成の例を見ることができる。このメモリ7618は、概して、それぞれ32ビット幅の、例えば2048個のエントリを有し得る、SFMプロセッサ7614用のスカラーデータパスである。このSFMデータメモリ7618内の、例えば最初の8個の区域は、概して、SFMデータメモリ7618のコンテキスト用のコンテキスト記述子8502を含む。このSFMデータメモリ7618の次の、例えば32個の区域は、概して、機能メモリ7602内の最大で(例えば)16個のLUT及びヒストグラムテーブルに対するテーブル記述子8504を含み、各テーブル記述子8504には2つの32ビットワードが用いられる。これらのテーブル記述子8504は、概して、SFMデータメモリ7618内に置かれるが、これらのテーブル記述子8504は、SFMデータメモリ7618の初期化の間、ノード(すなわち、808−i)からのLUT及びヒストグラム演算を制御するために用いられるハードウェアレジスタにコピーされ得る。SFMデータメモリ7618の残りは、概して、可変割り当てを有するプログラムデータメモリコンテキスト8506を含む。また、ベクトルメモリ7603は、SFMプロセッサ7614のSIMD用のデータメモリとして機能し得る。
【0052】
SFMプロセッサ7614は、SIMDレジスタを含めて、充分なコンテキストを保存及びリストアを備えた、充分に一般的なタスクスイッチもサポートし得る。コンテキスト保存/復元RAMは、0サイクルコンテキストスイッチをサポートする。これは、SFMプロセッサ7614のコンテキスト保存/復元RAMに類似しているが、この場合、SIMDレジスタを保存及び復元するための16個の付加的なメモリがあることが異なっている。これにより、プログラムプリエンプションがペナルティなしに実施され、これは、複数のSFMプロセッサ7614のプログラムに入出力されるデータフローをサポートするのに重要である。このアーキテクチャでは、プリエンプションを用いてペナルティ有効ブロックに対する実行を許可し、これによりリソース使用が最適化され得る。というのは、ブロックはその全体の転送に長時間を必要とし得るからである。コンテキスト状態RAMは、ノード(すなわち、808−i)のコンテキスト状態RAMに類似しており、類似の機能性を提供する。コンテキスト記述子とデータフローの状態にはいくらかの差異があり、これはSFM機能性の差異を反映している。これらの差異を以下で説明する。宛先記述子及び保留許可テーブルは、通常、ノード(808−i)と同じである。SFMコンテキストは、様々な種類の入力データに対する依存性チェックと、実行によるLine及びBlock入力の重なりをサポートする多くの方法で編成され得る。
【0053】
SFMノードラッパー7626は、共有機能メモリ1410の構成要素であり、SFMプロセッサ7614周りの制御及びデータフローを実施する。SFMノードラッパー7626は、概して、SFMと処理クラスタ1400内の他のノードとのインタフェースを実装する。すなわち、SFMノードラッパー7626は、下記の機能を実装し得る。ノード構成(IMEM、LUT)の初期化、コンテキスト管理、プログラムのスケジューリング、切り替え及び打ち切り、入力データフロー及び入力依存性チェックのイネーブル、出力データフロー及び出力依存性チェックのイネーブル、コンテキスト間の依存性の取り扱い、並びにノードに対する信号イベント及びノードデバッグ操作のサポートである。
【0054】
SFMノードラッパー7626は、典型的には、処理クラスタ1400中の他のブロックとの3つの主なインタフェースを有する。すなわち、メッセージインタフェース、データインタフェース、及びパーティションインタフェースである。メッセージインタフェースは、入力および出力メッセージがメッセージインターコネクトのスレーブ及びマスタポートにそれぞれマッピングされる、OCPインターコネクトにある。このインタフェースからの入力メッセージは、(例えば)深さが4のメッセージバッファに書き込まれて、OCPインタフェースからメッセージ処理が切り離される。メッセージバッファが一杯でない限り、OCPバーストが受け入れられ、オフラインで処理される。メッセージバッファが一杯になると、OCPインターコネクトはさらなるメッセージが受け入れられ得るまでストールする。データインタフェースは、概して、ベクトルデータ(入力及び出力)を交換するため、及び、命令メモリ7616及び機能メモリLUTを初期化するために用いられる。パーティションインタフェースは、概して、各パーティションに対し共有機能メモリ1410内の少なくとも1つの専用のポートを含む。
【0055】
命令メモリ7616の初期化は、ノード命令メモリ初期化メッセージを用いて成される。このメッセージは初期化処理を設定し、命令ラインがデータインターコネクトに送出される。初期化データは、GLSユニット1408によって複数バーストで送出される。(例えば)MReqInfo[15:14]=「00」は、データインターコネクト814に関するデータを命令メモリ初期化データとして識別し得る。各バーストにおいて、開始命令メモリ位置がMReqInfo[20:19](MSB)及びMReqInfo[8:0](LSB)で送出される。バースト内で、アドレスが内部的に各ビートで増分される。(例えば)Mdata[119:0]は、命令データを担持する。命令メモリ7616の一部は、選択されたプログラムを再初期化するために開始アドレスを提供することによって再初期化され得る。
【0056】
機能メモリ7602のルックアップテーブルすなわちLUTの初期化は、概して、SFM機能メモリ初期化メッセージを用いて実施される。このメッセージは初期化処理を設定し、データワードラインがデータインターコネクト814に送出される。初期化データは、GLSユニット1408によって複数バーストで送出される。MReqInfo[15:14]=「10」は、データインターコネクト814に関するデータを機能メモリ7602の初期化データとして識別し得る。各バーストにおいて、開始機能メモリアドレス位置が、MReqInfo[25:19](MSB)及びMReqInfo[8:0](LSB)で送出される。バースト内で、アドレスが内部的に各ビートで増分される。機能メモリ1410の一部は、開始アドレスを提供することによって再初期化され得る。機能メモリ1410のメモリへの初期化アクセスは、機能メモリ1410へのパーティションアクセスより優先度が低い。
【0057】
SFMの様々な制御設定が、SFM制御初期化メッセージを用いて初期化される。このメッセージは、コンテキスト記述子、機能メモリテーブル記述子、及び宛先記述子を初期化する。SFM制御を初期化するために必要とされるワード数は、メッセージOCPインターコネクトの最大バースト長より多いと予想されるので、このメッセージは、複数のOCPバーストに分割され得る。制御初期化用のメッセージバーストは連続的とし得、他のメッセージタイプを間に含まない。制御初期化用のワードの総数は、(1+#Contexts/2+#Tables+4*#Contexts)となるはずである。SFM制御初期化は、共有機能メモリ7616への任意の入力又はプログラムのスケジューリングの前に完了するべきである。
【0058】
ここで、入力データフロー及び依存性チェックに移ると、入力データフローシーケンスは、概して、ソースからのソース通知メッセージで開始する。SFM宛先コンテキストは、ソース通知メッセージを処理し、ソース許可(Source Permission:SP)メッセージにより応答して、ソースからのデータをイネーブルにする。次いで、ソースは、それぞれのインターコネクトに関するデータと、それに続く(インターコネクトに関するMReqInfoビットに対して符号化された)Set_Validとを送出する。スカラーデータが更新データメモリメッセージを用いて送出されて、データメモリ7618に書き込まれる。ベクトルデータがデータインターコネクト814に送出されて、ベクトルメモリ7603(又はFm=1で同期コンテキスト用の機能メモリ7602)に書き込まれる。SFMラッパー7626も、データフロー状態変数を維持し、これらを用いてデータフローを制御し、SFMプロセッサ7614における依存性チェックもイネーブルにする。
【0059】
OCPインターコネクト1412からの入力ベクトルデータは、まず、(例えば)2つの8エントリグローバル入力バッファ7620に書き込まれ、連続データがピンポン式に、交互バッファに書き込まれ、交互バッファから読み出される。入力データバッファが一杯でない限り、OCPバーストが受け入れられ、オフラインで処理される。このデータは、ベクトルメモリ7603(又は機能メモリ7602)に、SFMプロセッサ7614(又はパーティション)がこのメモリにアクセスしていないときに空いているサイクルで書き込まれる。グローバル入力バッファ7620が一杯になった場合、OCPインターコネクト1412はより多くのデータを受け入れ可能になるまでストールする。入力バッファが一杯の状態では、SFMプロセッサ7614もデータメモリへのライトがストールされ、インターコネクト1412がストールするのを避ける。OCPメッセージインターコネクトに関するスカラーデータは、(例えば)4エントリメッセージバッファにも入れられて、OCPインタフェースからのメッセージ処理が切り離される。メッセージバッファが一杯でない限り、OCPバーストが受け付けられ、データがオフラインで処理される。このデータは、SFMプロセッサ7614がメモリ7618にアクセスしていないときに空いているサイクルでデータメモリ7618に書き込まれる。メッセージバッファが一杯になると、OCPインターコネクト1412はより多くのデータを受け入れ可能になるまでストールされ、SFMプロセッサ7614はメモリ7618へのライトがストールされる。
【0060】
SFMプロセッサ7614によってベクトルメモリ7603からアクセスされるベクトルデータが(入力からすでに受け取られた)有効なデータであることを概略保証するために、入力依存性チェックが用いられる。入力依存性チェックは、ベクトルパックドロード命令に対して成される。ラッパー7626は、メモリ7618内の最大有効インデックスへのポインタ(vaid_inp_ptr)を維持する。依存性チェックは、H_Indexがvaid_input_ptr(RLD)より大きいか、又はBlk_Indexがvaid_index_ptr(ALD)より大きい場合、SFMプロセッサ7614のベクトルユニットにおいて不合格になる。ラッパー7626は、完全な入力が受け取られ、依存性チェックが望まれないことを示すフラグも提供する。SFMプロセッサ7614での入力依存性チェックが不合格になると、ストール又はコンテキスト切り替えも生じ、依存性チェック不合格がラッパーに伝えられ、ラッパーは、別の準備できているプログラムに切り替えるようにタスク切り替えを行う(或いは、準備できているプログラムがない場合にはプロセッサ7614をストールさせる)。依存性チェックが不合格になった後、少なくとも別の入力が受け取られた後で、同じコンテキストプログラムが再び実行され得る(そのため、依存性チェックは合格し得る)。コンテキストプログラムが再び実行するようイネーブルされるとき、同じ命令パケットが再度実行されなければならない。そのために、プロセッサ7614において特殊な取り扱いを採用する。これは、パイプラインの実行段階で入力依存性チェックの不合格が検出されるからである。そのため、これは、依存性チェックが不合格になったことに起因してプロセッサ7614がストールする前に、命令パケット内の他の命令がすでに実行されたことを意味する。この特殊なケースを扱うために、ラッパー7626は、前の依存性チェックの不合格の後でコンテキストプログラムの実行を再度イネーブルにする際に、プロセッサ7614に信号(wp_mask_non_vpld_instr)を提供する。ベクトルパックドロードアクセスは、通常、命令パケット内の特定のスロットにあり、そのため、1つのスロット命令が次回に再度実行され、他のスロット内の命令はマスクされて実行されない。
【0061】
ここでRelease_Inputに移ると、反復用の完全な入力がひとたび受け取られると、ソースからさらなる入力を受け入れることができない。さらなる入力をイネーブルにするソース許可がソースに送出されない。プログラムは、次の反復用の入力を受け取ることができるように、反復の終了前にこれらの入力を放出し得る。これは、Release_Input命令を介して成され、フラグrisc_is_releaseを介してプロセッサ7614に通知される。
【0062】
HG_POSNは、現在の実行又はLineデータの位置である。Lineデータコンテキストでは、HG_POSNは、ピクセルの相対アドレス指定に用いられる。HG_POSNはゼロに初期化され、プロセッサ7614内で分岐命令(TBD)の実行後に増分される。この命令の実行は、フラグrisc_inc_hg_posnによってラッパーに示される。HG_POSNは、それが右端のピクセル(HG_Size)に到達した後ゼロにラップされ、増分フラグが命令実行から受け取られる。
【0063】
ラッパー7626は、プログラムのスケジューリング及び切り替えも提供する。スケジュールノードプログラムメッセージが、概して、プログラムのスケジューリングに用いられ、プログラムスケジューラは下記の機能を実施する。すなわち、スケジュールされたプログラム(アクティブコンテキスト)及び「スケジュールノードプログラム」メッセージからのデータ構造のリストを維持することと、準備ができているコンテキストのリストを維持することである。スケジューラは、コンテキストが実行する準備ができたとき、すなわち、充分な入力の受信時にアクティブコンテキストが準備できたとき、プログラムに「レディ」として印し、実行のため準備ができたプログラムを(ラウンドロビン優先順位に基づいて)スケジュールし、プロセッサ7614にプログラムカウンタ(Start_PC)を提供してスケジュールされているプログラムを初めて実行させ、依存性チェックのためプロセッサ7614にデータフロー変数及び実行のためのいくつかの状態変数を提供する。スケジューラは、次のレディコンテキスト(現在実行中のコンテキストの後で優先順位において次のレディコンテキスト)を連続的に探し続けることもできる。
【0064】
SFMラッパー7626は、即時アクセスのため現在実行中のコンテキストの記述子及び状態ビットのローカルコピーを維持することもできる。これらのビットは、通常、データメモリ7618又はコンテキスト記述子メモリ内にある。SFMラッパー7626は、コンテキスト記述子メモリ内の状態変数が更新されるときローカルコピーをコヒーレントに保つ。実行中のコンテキストに対し、下記のビットは、プロセッサ7614によって実行用に通常用いられる。すなわち、データメモリコンテキストベースアドレス、ベクトルメモリコンテキストベースアドレス、入力依存性チェック状態変数、出力依存性チェック状態変数、HG_POSN、及びhg_posn!=hg_sizeのためのフラグである。SFM_Wrapperは、次のレディコンテキストの記述子及び状態ビットのローカルコピーも維持する。異なるコンテキストが「次のレディコンテキスト」になると、FMラッパー7626は、再度、必要とされる状態変数及び構成ビットをデータメモリ7618及びコンテキスト記述子メモリからロードする。これは、コンテキスト切り替えが効率的になるように成され、メモリアクセスからの設定のリトリーブを待たない。
【0065】
タスク切り替えは、現在実行中のプログラムを中断させ、プロセッサ7614の実行を「次のレディコンテキスト」に移す。共有機能メモリ1410は、万一データフローがストールした場合、動的にタスク切り替えを行う(
図309及び
図310にこの例を見ることができる)。データフローのストールは、入力依存性チェックが不合格になること又は出力依存性チェックが不合格になることである。万一データフローがストールした場合、プロセッサ7614は、SFMラッパー7626に依存性チェック不合格のフラグを伝える。依存性チェック不合格フラグに基づいて、SFMラッパー7626は、異なるレディプログラムへのタスク切り替えを開始する。ラッパーがタスク切り替えを行う間、プロセッサ7614は、IDLE状態に入り、すでにフェッチされ復号化段階にある命令についてパイプラインをクリアにする。これらの命令は、プログラムが次に再開するときに再度フェッチされる。他にレディコンテキストがない場合、それぞれ入力受信時又は出力許可受信時に、データフローのストール状態が解決され得るまで実行は中断されたままである。SFMラッパー7626は、通常、データフローのストールが解決されたか否かを推測することにも留意されたい。これは、SFMラッパー7626が実際のインデックス不合格入力依存性チェック又は実際の宛先不合格出力依存性チェックを把握していないからである。任意の新たな入力(valid_inp_ptrの増分)又は出力許可(任意の宛先からのSPの受信)の受信時に、プログラムは、レディと印される(更に、他のプログラムが実行中でない場合には再開される)。したがって、再開された後で、プログラムが再度依存性チェックに不合格になりタスク切り替えを経る可能性がある。同じコンテキスト内のタスク中断及び再開シーケンスは、異なるコンテキストに対するタスク切り替えシーケンスと同じである。タスク切り替えは、プログラム内のEND命令の実行時に試みされ得る。(
図311及び
図312にこの例を見ることができる。)これにより、すべてのレディプログラムに実行の機会が与えられる。他にレディプログラムがない場合、同じプログラムが継続して実行される。また、下記のステップの後で、SFMラッパー7626がタスク切り替えを行う。
(1)force_ctxz=0をプロセッサ7614にアサートする
i.このプログラムに対しプロセッサ7614の状態をコンテキスト状態メモリに保存する。
ii.新たなプログラムに対しT20及びT80の状態をコンテキスト状態メモリから復元する。
(2)force pcz=0をアサートし、new_pcをプロセッサ7614に提供する
i.中断されたか又は実行が再開されたプログラムに対し、PCが、コンテキスト状態メモリに保存される/コンテキスト状態メモリから復元される。
ii.初めて実行が開始されたプログラムに対し、「スケジュールノードプログラム」メッセージのStart_PCからPCを得る。
(3)「次のレディコンテキスト」の状態変数及びconfigビットのコピーを「現在実行中のコンテキスト」にロードする。
【0066】
ここで異なるデータ型についての出力データプロトコルに移り、一般に、プログラム実行の開始時において、SFMラッパー7626はすべての宛先にソース通知メッセージを送出する。これらの宛先は宛先記述子にプログラムされており、宛先は出力をイネーブルにするソース許可を用いて応答する。ベクトル出力の場合、ソース許可メッセージ内のP_Incrフィールドは、それぞれの宛先への送出を許可された転送(set_validベクトル)の数を示す。OutSt状態機械は、出力データフローの挙動を制御する。SFM1410によって2種類の出力が生成され得る。すなわち、スカラー出力及びベクトル出力である。スカラー出力は、更新データメモリメッセージを用いてメッセージバス1420上に送出され、ベクトル出力は、(データバス1422で)データインターコネクト814上に送出される。スカラー出力は、プロセッサ7614内のOUTPUT命令の実行の結果であり、プロセッサ7614は、出力アドレス(演算値)、制御ワード(U6命令イミディエート)、及び(GPRからの32ビット)出力データワードを提供する。(例えば)6ビット制御ワードのフォーマットは、Set_Valid([5])、Output Data Type(Input Done(00)である[4:3]、ノードライン(01)、Block(10)、又はSFMライン(11))、及び宛先番号(0〜7であり得る[2:0])である。ベクトル出力は、プロセッサ7614内のVOUTPUT命令の実行によって生じ、プロセッサ7614は、出力アドレス(演算値)及び制御ワード(U6命令イミディエート)を提供する。この出力データは、プロセッサ7614内のベクトルユニット(すなわち、512ビット、[ベクトルユニットGPR当たり32ビット]×16個のベクトルユニット)によって提供される。VOUTPUTに対する(例えば)6ビット制御ワードのフォーマットは、OUTPUTと同じである。プロセッサ7614からの出力データ、アドレス、及び制御は、まず、(例えば)8エントリグローバル出力バッファ7620に書き込まれ得る。SFMラッパー7626は、グローバル出力バッファ7620からこれらの出力を読み取り、バス1422上に送り出す。この方式は、出力データがインターコネクト上に送出されている一方で、プロセッサ7614が実行を継続し得るように成される。インターコネクト814がビジーであり、グローバル出力バッファ7620が一杯の場合、プロセッサ7614はストールし得る。
【0067】
出力依存性チェックでは、それぞれの宛先がSFMソースコンテキストにデータ送出許可を与えた場合、プロセッサ7614は出力の実行を許可される。プロセッサ7614が、宛先への出力がイネーブルになっていないときに、OUTPUT又はVOUTPUT命令に遭遇した場合、出力依存性チェックは不合格になり、タスク切り替えが生じる。SFMラッパー7626は、それぞれ、スカラー出力及びベクトル出力に対し、イネーブル、宛先当たりの2つのフラグをプロセッサ7614に提供する。プロセッサ7614は、出力依存性チェック不合格をSFMラッパー7626に通知し、タスク切り替えシーケンスを開始させる。出力依存性チェック不合格は、プロセッサ7614の復号パイプライン段で検出され、プロセッサ7614は、出力依存性チェック不合格に遭遇した場合には、IDLE状態に入り、フェッチ及び復号パイプラインをクリアにする。典型的には、Set_Validを含むOUTPUT又はVOUTPUT命令の間で2つの遅延スロットが用いられ、それによって、Set_Validに基づいてOutSt状態機械が更新され、次のSet_Validの前にプロセッサ7614へのoutput_enableが更新されるようにする。
【0068】
SFMラッパー7626は、SFMコンテキストに対してプログラムの終了も扱う。処理クラスタ1400におけるプログラムの終了には、典型的には、2つのメカニズムがある。仮にスケジュールノードプログラムメッセージがTe=1の値をもつとすれば、プログラムはEND命令で終了する。他方のメカニズムは、データフローの終了に基づいている。データフローが終了すると、プログラムは、すべての入力データに対する実行が完了したとき終了する。これにより、同じプログラムが、終了する前に複数回反復して実行され得る(複数のEND及び入力データの複数回の反復)。ソースが、それが送出すべきさらなるデータを有していないとき、その宛先に出力終了(OT:Output Termination)を通知し、プログラムはもはや反復されない。宛先コンテキストは、このOT信号をストアし、最後の反復の終了時(END)、すなわち、宛先コンテキストが入力データの最後の反復の実行を完了したとき、終了する。或いは、宛先コンテキストは、最後の反復実行を完了した後でOT信号を受け取り得る。この場合、宛先コンテキストは直ちに終了する。
【0069】
ソースは、最後の出力データ(スカラー又はベクトル)として同じインターコネクト経路を介してOTを通知する。仮にソースからの最後の出力データがスカラーである場合、メッセージバス1420(スカラー出力と同じ)上のスカラー出力終了メッセージにより出力終了が通知される。仮にソースからの最後の出力データがベクトルである場合、データインターコネクト814又はバス1422(データと同じ)上のベクトル終了パケットによりに出力終了が通知される。これは、宛先が最後のデータの前にOT信号を受け取らないことを概して保証するためである。終了時、実行中のコンテキストは、その宛先すべてにOTメッセージを送出する。このOTメッセージは、このプログラムからの最後の出力として同じインターコネクト上に送出される。OTの送出を完了した後、コンテキストは、制御ノード1406にノードプログラム終了メッセージを送出する。
【0070】
InTm状態機械も終了に用いられ得る。特に、InTm状態機械は、出力終了メッセージをストアし、終了を順序付けるために用いられ得る。SFM1410は、同じInTm状態機械をノードとして用いるが、ノードの場合と同様の任意のset_validの代わりに、状態遷移に対して「第1のset_valid」を用いる。宛先コンテキストでの入力(set_valid)、OT、及びENDの間で下記のシーケンス順序が可能である。すなわち、Set_Valid〜OT〜ENDを入力し、ENDで終了する;Set_Valid〜END〜OTを入力し、OTで終了する;Set_Valid(反復(n−1)回)〜Release_Inputを入力し、Set_Valid(反復n回)〜OT〜END〜ENDを入力し、2度目のENDで終了し、最後の反復を行う;Set_Valid(反復(n−1)回)〜Release_Inputを入力し、Set_Valid(反復n回)〜END〜OT〜ENDを入力し、2度目のENDで終了し、最後の反復を行う;及びSet_Valid(反復(n−1)回)〜Release_Inputを入力し、Set_Valid(反復n回)〜END〜END〜OTを入力し、OTで終了する、である。
【0071】
ノード状態ライトメッセージは、令メモリ7616(すなわち、256ビット幅)、データメモリ7618(すなわち、1024ビット幅)、及びSIMDレジスタ(すなわち、1024ビット幅)を更新し得る。これらについてのバースト長の例は下記に示すようになり得る。すなわち、命令メモリは9ビート、データメモリは33ビート、及びSIMDレジスタは33ビートである。パーティションBIU(すなわち、4710−i)には、データビートが受け取られるたびに増分するdebug_cntrと呼ばれるカウンタがある。カウンタが(例えば)8個のデータビートを意味する7に到達すると(data_countを有する最初のヘッダビートはカウントしない)、debug_stallがアサートされ、これは、宛先にライトが成されるまでcmd_accept及びdata_acceptをディセーブルにする。debug_stallは、ノードラッパー(すなわち、810−1)によってライトが成されたとき、partition_biuに設定され、node_wrapperによって再設定される状態ビットである。インストールは、パーティションBIU 4710−x内の(パーティション1402−xに対する)nodex_unstall_msg_inの入力後に行われる。バス上でパーティションBIU 4710−xからノードラッパーに送出される32個のデータビートの例は、
・M_DEBUGに設定されるnodex_wp_msg_en[2:0]
・nodex_wp_msg_wdata[’M_DEBUG_OP]==’M_NODE_STATE_WR
ここで、M_DEBUG_OPは、メッセージアドレス[8:6]が110の符号化を有する場合にメッセージトラフィックをノード状態ライトとして識別するビット31:29である。
・次いで、これは、node_wrapperにおいてnode_state_write信号を発する。ここで、2つのカウンタは(partition_biuにおけるものに類似の)debug_cntr及びsimd_wr_cntrと呼ばれる。この符号を探すためにnode_wrapper.vにおけるNODE_STATE_WRITEコメントを探す。
・次いで、32ビットパケットが、256ビットのnode_state_wr_dataフロップに蓄積される。
・この256ビットが一杯の場合には、命令メモリが書き込まれる。
・SIMDデータメモリについても同様に、これが256ビットの場合、SIMDデータメモリが書き込まれる。partition_biuはメッセージインターコネクトをストールさせて、node_wrapperがSIMDデータメモリの更新に成功するまでさらなるデータビートを送出しないようにする。これは、例えばグローバルIOバッファにおけるグローバルデータインターコネクトからのデータのように、他のトラフィックがSIMDデータメモリを更新していることがあるからである。データメモリへの更新が成されると、debug_imem_wr|debug_simd_wr|debug_dmem_wr構成要素を有するdebug_node_state_wr_doneを介してアンストールがイネーブルにされる。これにより、partition_biuがアンストールされて、さらに8個のデータパケットが受け入れられ、1024ビット全体が終了するまで次の256ビットライトを行う。Simd_wr_cntrは、256ビットパケットをカウントする。
【0072】
ノード状態読み取りメッセージが適切なスレーブである命令メモリに入ると、SIMDデータメモリ及びSIMDレジスタが読み取られ、次いで、(例えば)16×1024ビットのグローバル出力バッファ7620に置かれる。ここから、データがパーティションBIU(すなわち、4710−1)に送出され、次いで、パーティションBIUは、データをメッセージバス1420に送り出す。グローバル出力バッファ7620が読み取られると、それに続く信号が(例えば)イネーブルにされてノードラッパーから出ることができる。これらのバスは、典型的には、ベクトル出力についてのトラフィックを搬送するが、ノード状態読み取りデータも搬送するよう過負荷になり、したがって、典型的には、nodeX_io_buffer_ctrlのすべてビットが関連するわけではない。
・nodeX_io_buf_has_dataは、データがnode_wrapperにより送出されていることをpartition_biuに知らせる。
・nodeX_io_buffer_data[255:0]は、命令メモリ読み取りデータ又はデータメモリ(一回に256ビット)又はSIMDレジスタデータ(一回に256ビット)を有する。
・nodeX_read_io_buffer[3:0]は、バスの利用可能性を示す信号を有し、これを用いて出力バッファが読み取られ、データがpartition_biuに送出される。
・nodeX_io_buffer_ctrlは、情報の様々な断片を示す。
関連する情報はビット16:14上にある。
//16:14:3bit op
//000:ノード状態読み取り−IOBUF_CNTL_OP_DEB
//001:LUT
//010:his_i
//011:his_w
//100:his
//101:出力
//110:スカラー出力
//111:nop
32:31
00:imem読み取り
10:SIMDレジスタ
11:SIMD DMEM
パーティションBIU 4720−xでは、コメントSCALAR_OUTPUTSを探し、信号node0_msg_misc_en及びnode0_imem_rd_out_enに従う。次いで、これらは、ocp_msg_masterインスタンスを設定する。様々なカウンタが再び用いられる。debug_cntr_outは、(例えば)256ビットパケットを分解して、メッセージバス1420に送出することが望まれる32ビットパケットにする。送出されるメッセージはノード状態読み取り応答である。
【0073】
データメモリの読み取りはノード状態読み取りに類似している。次いで、適切なスレーブが読み取られ、次いで、グローバル出力バッファに入れられ、そこから、スレーブはパーティションBIU 4710−xに移る。例えば、nodeX_io_buffer_ctrlのビット32:31は01に設定され、送出されるメッセージは(例えば)32ビット幅とし得、データメモリ読み取り応答として送出される。ビット16:14は、IOBUF_CNTL_OP_DEBも示すはずである。これらのスレーブは(例えば)下記とし得る。
1.データメモリ CX=0(別名LS−DMEM)のアプリケーションデータ。コンテキスト番号を使用して、記述子ベースが得られ、次いで、メッセージアドレスビットとともに入力されるオフセットを加算する。
2.データメモリ記述子領域 CX=1、メッセージデータビート[8:7]=00がこの領域を識別する。コンテキスト番号を使用してどの記述子が更新中かを割り出す。
3.SIMD記述子 8:7=01がこの領域を識別する。コンテキスト番号によりアドレスが提供される。
4.コンテキスト保存メモリ 8:7=10がこの領域を識別する。コンテキスト番号によりアドレスが提供される。
5.プロセッサ7614内部のレジスタ ブレイクポイント、トレースポイント、及びイベントレジスタと類似している。8:7=11がこの領域を識別する。
a.次いで、下記の信号がプロセッサ7614用のインタフェースに対し設定される。
i. .dbg_req (dbg_req)
ii. .dbg_addr({15’b000_0000_0000_0000,dbg_addr})
iii. .dbg_din(dbg_din)
iv. .dbg_xrw(dbg_xrw)
b.下記のパラメータがtpic_libraryディレクトリ内のtx_sim_defsで定義される。
v. ’define NODE_EVENT_WIDTH 16
vi. ’define NODE_DBG_ADDR_WIDTH 5
c.ブレイクポイント/トレースポイントについてDbg_addr[4:0]が下記のように設定され、ブレイクポイント/トレースポイントメッセージ設定のビット25:26から入力される。
vii. アドレス0はブレイクポイント/トレースポイントレジスタ0用である。
viii. アドレス1はブレイクポイント/トレースポイントレジスタ1用である。
ix. アドレス2はブレイクポイント/トレースポイントレジスタ2用である。
x. アドレス3はブレイクポイント/トレースポイントレジスタ3用である。
d.イベントレジスタがアドレスされるとき、Dbg_addr[4:0]が、読み取りデータメモリオフセットの下位5ビットに設定され、これらはメッセージ中で4以上に設定されなければならない。
【0074】
プロセッサ7614に対し状態を保持するコンテキスト保存メモリ7610も(例えば)下記のようにアドレスオフセットを有し得る。
1.16個の汎用レジスタは、アドレスオフセット0、4、8、C、10、14、18、1C、20、24、28、2C、30、34、38、及び3Cを有する。
2.これらのレジスタの残りは下記のように更新される。
a.40−CSR−12ビット幅
b.42−IER−4ビット幅
c.44−IRP−16ビット
d.46−LBR−16ビット
e.48−SBR−16ビット
f.4A−SP−16ビット
g.4C−PC−17ビット
【0075】
Haltメッセージが受け取られると、halt_acc信号がイネーブルにされ、次いで、halt_acc信号は、halt_seen状態を設定する。次いで、halt_seen状態は下記のようにバス1420上に送出される。
・Halt_t20[0]:halt_seen
・Halt_t20[l]:コンテキストを保存する
・Halt_t20[2]:コンテキストを復元する
・Halt_t20[3]:ステップ
次いで、halt_seen状態がls_pc.vに送出され、ls_pc.vを用いてimem_rdyをディセーブルにして、さらなる命令がフェッチ及び実行されなくなるようにする。ただし、継続する前にプロセッサ7614及びSIMDパイプの両方を確実に空にすることが望まれる。ひとたびパイプがクリアにされると、すなわち、ストールがなくなると、pipe_stall[0]がノードラッパー(すなわち、810−1)への入力としてイネーブルにされる。この信号を用いて、中断確認メッセージが送出され、プロセッサ7614のコンテキスト全体がコンテキストメモリに保存される。次いで、デバッガが導入され、CX=1の更新データメモリメッセージとコンテキスト保存メモリ7610を示すアドレスビット8:7とを用いて、コンテキストメモリ内の状態を改変し得る。
【0076】
再開メッセージが受け取られると、halt_risc[2]がイネーブルにされ、これにより、コンテキストが復元され、次いで、force_pczがアサートされてPCからの実行がコンテキスト状態から継続される。プロセッサ7614は、force_pczを用いてcmem_wdata_validをイネーブルにし、cmem_wdata_validは、force_pczが再開予定の場合、ノードラッパーによってディセーブルにされる。Resume_seen信号も、例えばhalt_seenやhalt ackメッセージが送出された事実のような、様々の状態を再設定する。
【0077】
ステップNの命令メッセージが受け取られると、進めるための命令数が、(例えば)メッセージデータペイロードのビット20:16の後で入力される。これを用いて、imem_rdyが抑制される。抑制は下記のように行われる。
1.デバッガが変更された状態を有し得るとき、コンテキスト状態からすべてをリロードする。
2.クロック用にmem_rdyがディセーブルされる。1つの命令がフェッチ及び実行される。
3.次いで、命令の実行が完了したかを調べるために、pipe_stall[0]が検査される。
4.ひとたびpipe_stall[0]がハイにアサートされると、これはパイプがクリアにされたことを意味し、コンテキストが保存され、ステップカウンタがゼロになるまで処理が繰り返される。ステップカウンタがゼロになると、中断確認メッセージが送出される。
【0078】
ブレイクポイントの一致/トレースポイントの一致が(例えば)下記のように示され得る。
・risc_brk_trc_match:ブレイクポイント又はトレースポイントの一致が生じた。
・risc_trc_pt_matchは、トレースポイントの一致があったことを意味する。
・risc_brk_trc_match_id[l:0]は、4つのレジスタのどれが一致したかを示す。
ブレイクポイントは、ホールトしたときに生じ得る。ブレイクポイントが生じると、ホールト確認メッセージが送出される。トレースポイントの一致は、ホールトされていないときに生じ得る。連続したトレースポイントの一致は、1番目の一致がホールト確認メッセージを送出する機会を得るまで2番目の一致をストールさせることによって扱われる。
【0079】
共有機能メモリ1410のプログラムスケジューリングは、概して、アクティブコンテキストに基づいており、スケジューリングキューを使用しない。プログラムスケジューリングメッセージは、プログラムが実行するコンテキストを識別し得、プログラム識別子はコンテキスト番号と等価である。2つ以上のコンテキストが同じプログラムを実行する場合、これらのコンテキストは別々にスケジュールされる。コンテキスト内でプログラムをスケジューリングすると、そのコンテキストがアクティブになり、このコンテキストは、スケジューリングメッセージにおいてTe=1でEND命令を実行することによって、またはデータフローの終了によって終了するまでアクティブのままである。
【0080】
アクティブコンテキストは、HG_Input>HG_POSNである限り実行される準備ができている。レディコンテキストは、ラウンドロビン優先順位でスケジュールされ得、各コンテキストは、それがデータフローのストールに遭遇するまで、又はそれがEND命令を実行するまで、実行し得る。データフローのストールは、プログラムが、HG_POSNとHG_Inputに対するアクセスの相対的な水平グループ位置とによって決められるように、無効な入力データを読み込もうとするとき、又はプログラムが出力命令を実行しようとし、且つ、出力がソース許可によってイネーブルにされなかったとき、生じ得る。いずれの場合でも、別のレディプログラムがある場合、ストールされたプログラムは中断され、その状態がコンテキスト保存/復元回路7610にストアされる。スケジューラは、次のレディコンテキストをラウンドロビン順にスケジュールし得、それによって、ストール状態を解決するための時間が提供される。すべてのレディコンテキストは、中断されたコンテキストが再開される前にスケジュールされるべきである。
【0081】
データフローのストールがあり、且つ、他のプログラムの準備ができていない場合、プログラムはこのストール状態でアクティブのままである。このプログラムはストール状態が解決するまでストールしたままであり、この場合、このプログラムはストール時点から再開される。或いは、このプログラムは別のコンテキストの準備ができるまでストールしたままであり、この場合、このプログラムはレディプログラムを実行するために中断される。
【0082】
上述したように、すべてのシステムレベル制御がメッセージによって実現される。メッセージは、特定のシステム構成に適用されるシステムレベルの命令又は指令と考えることができる。また、プログラム及びデータメモリの初期化を含めて、この構成自体及びこの構成内のイベントに対するシステム応答は、初期化メッセージと呼ばれる特殊な形態のメッセージによって設定され得る。
【0083】
本発明に関連する分野の当業者であれば、記載された実施形態及び実現された付加的な実施形態に本発明の請求の範囲内から逸脱することなく変更が行われることが理解されるであろう。