特許第6243935号(P6243935)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本テキサス・インスツルメンツ株式会社の特許一覧
<>
  • 特許6243935-コンテキスト切替方法及び装置 図000004
  • 特許6243935-コンテキスト切替方法及び装置 図000005
  • 特許6243935-コンテキスト切替方法及び装置 図000006
  • 特許6243935-コンテキスト切替方法及び装置 図000007
  • 特許6243935-コンテキスト切替方法及び装置 図000008
  • 特許6243935-コンテキスト切替方法及び装置 図000009
  • 特許6243935-コンテキスト切替方法及び装置 図000010
  • 特許6243935-コンテキスト切替方法及び装置 図000011
  • 特許6243935-コンテキスト切替方法及び装置 図000012
  • 特許6243935-コンテキスト切替方法及び装置 図000013
  • 特許6243935-コンテキスト切替方法及び装置 図000014
  • 特許6243935-コンテキスト切替方法及び装置 図000015
  • 特許6243935-コンテキスト切替方法及び装置 図000016
  • 特許6243935-コンテキスト切替方法及び装置 図000017
  • 特許6243935-コンテキスト切替方法及び装置 図000018
  • 特許6243935-コンテキスト切替方法及び装置 図000019
  • 特許6243935-コンテキスト切替方法及び装置 図000020
  • 特許6243935-コンテキスト切替方法及び装置 図000021
  • 特許6243935-コンテキスト切替方法及び装置 図000022
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6243935
(24)【登録日】2017年11月17日
(45)【発行日】2017年12月6日
(54)【発明の名称】コンテキスト切替方法及び装置
(51)【国際特許分類】
   G06F 9/38 20060101AFI20171127BHJP
   G06F 15/80 20060101ALI20171127BHJP
【FI】
   G06F9/38 370C
   G06F15/80
【請求項の数】5
【全頁数】30
(21)【出願番号】特願2016-24486(P2016-24486)
(22)【出願日】2016年2月12日
(62)【分割の表示】特願2013-540064(P2013-540064)の分割
【原出願日】2011年11月18日
(65)【公開番号】特開2016-129039(P2016-129039A)
(43)【公開日】2016年7月14日
【審査請求日】2016年2月17日
(31)【優先権主張番号】61/415,210
(32)【優先日】2010年11月18日
(33)【優先権主張国】US
(31)【優先権主張番号】13/232,774
(32)【優先日】2011年9月14日
(33)【優先権主張国】US
(31)【優先権主張番号】61/415,205
(32)【優先日】2010年11月18日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】390020248
【氏名又は名称】日本テキサス・インスツルメンツ株式会社
(73)【特許権者】
【識別番号】507107291
【氏名又は名称】テキサス インスツルメンツ インコーポレイテッド
(74)【上記1名の代理人】
【識別番号】100098497
【弁理士】
【氏名又は名称】片寄 恭三
(72)【発明者】
【氏名】ウィリアム ジョンソン
(72)【発明者】
【氏名】ジョン ダブリュー グロツバック
(72)【発明者】
【氏名】ハミッド シェイク
(72)【発明者】
【氏名】アジェイ ジャヤライ
(72)【発明者】
【氏名】スティーブン ブッシュ
(72)【発明者】
【氏名】ミュラリ チナコンダ
(72)【発明者】
【氏名】ジェフェリー エル ナイ
(72)【発明者】
【氏名】永田 敏雄
(72)【発明者】
【氏名】シャリニ グプタ
(72)【発明者】
【氏名】ロバート ジェイ ニチカ
(72)【発明者】
【氏名】デビッド エイチ バートレイ
(72)【発明者】
【氏名】ガネーシャ サンダララジャン
【審査官】 清木 泰
(56)【参考文献】
【文献】 特表平07−505003(JP,A)
【文献】 特開平01−114982(JP,A)
【文献】 特開平06−195309(JP,A)
【文献】 特開平04−218861(JP,A)
【文献】 特開平07−287700(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F15/80
G06F15/16−15/177
G06T 1/00− 1/40
G06T 3/00− 5/50
G06T 9/00− 9/40
G06F13/20−13/378
(57)【特許請求の範囲】
【請求項1】
処理クラスタバスと、
ホストプロセッサバスと、
前記ホストプロセッサバス上で通信するホストプロセッサと、
前記処理クラスタバス上で通信す機能回路要素と、
前記処理クラスタバス上で通信し、前記ホストプロセッサからの情報を受信す処理クラスタと、
を含む集積回路であって、
前記処理クラスタが、
データアドレスとを前記ホストプロセッサと通信するインターフェースと、
制御又はメッセージを通信し、前記インターフェースから分離されているメッセージバスと、
前記インターフェースと前記メッセージバスとから分離されていデータバスと、
前記インターフェース上でアドレスとデータとを通信し、前記メッセージバス上で制御又はメッセージを通信し、前記データバスへの接続がない、制御ノード
複数のパーティションであって、各パーティションが、ノードとノードラッパーとバスインターフェースユニットとを含み、前記ノードが、それぞれのバスインターフェースユニットを介して前記データバスと通信し、各ノードラッパーが、前記メッセージバス上でメッセージ入力とメッセージ出力とを通信し、各パーティションに前記インターフェースへの接続がない、前記複数のパーティションと、
を含む、集積回路。
【請求項2】
請求項1に記載の集積回路であって、
前記ホストプロセッサバス上と前記処理クラスタバス上で通信すバッファを更に含む、集積回路。
【請求項3】
請求項1に記載の集積回路であって、
前記処理クラスタバス上で通信する周辺インターフェースと、前記周辺インターフェースと通信し、前記ホストプロセッサバス上で通信する、バスブリッジとを更に含む、集積回路。
【請求項4】
請求項1に記載の集積回路であって、
前記処理クラスタ共有機能メモリを含み、前記共有機能メモリが、前記メッセージバス上でメッセージ入力とメッセージ出力とを通信し、データインターコネクトを介して前記データバスと通信し、前記共有機能メモリに前記インターフェースへの接続が無い、集積回路。
【請求項5】
請求項1に記載の集積回路であって、
前記処理クラスタがグローバルロード/ストアユニットを含み、前記グローバロード/ストアユニットが、前記メッセージバス上でメッセージ入力とメッセージ出力とを通信し、データインターコネクトを介して前記データバスと通信し、前記グローバルロード/ストアユニットに前記インターフェースへの接続がない、集積回路。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、全般的にプロセッサに関し、より具体的には処理クラスタに関する。
【背景技術】
【0002】
図1はマルチコアシステム(2〜16コアの範囲)についての実行速度のスピードアップ対並列オーバーヘッドを示すグラフである。スピードアップとは、単一プロセッサの実行時間を並列プロセッサの実行時間で除したものである。図からわかるように、多数のコアから有意な利益を得るために、並列オーバーヘッドはゼロに近くなければならない。しかし並列プログラム間に何らかの相互作用が存在する場合、オーバーヘッドは極めて高くなる傾向があるため、完全に分離されたプログラムでなければ2又は3以上のプロセッサを効率的に使用するのは通常極めて難しい。従って、改善された処理クラスタが必要とされている。
【発明の概要】
【0003】
従って、本開示の実施形態は、所定の深さのパイプラインを有するプロセッサ(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)をアサートすることである。
【図面の簡単な説明】
【0004】
図1】マルチコアのスピードアップパラメータのグラフである。
【0005】
図2】本開示の実施形態に従ったシステムの図である。
【0006】
図3】本開示の実施形態に従ったSOCの図である。
【0007】
図4A】本開示の実施形態に従った並列処理クラスタの図である。
図4B】本開示の実施形態に従った並列処理クラスタの図である。
【0008】
図5】処理クラスタ内のノード又は計算要素の一部分の図である。
【0009】
図6】グローバルロード/ストア(GLS)ユニットの一例の図である。
【0010】
図7】共有機能メモリのブロック図である。
【0011】
図8】コンテキストに対する用語を示す図である。
【0012】
図9】例示のシステムのアプリケーションの実行の図である。
【0013】
図10】例示のシステムのアプリケーションの実行におけるプリエンプションの例の図である。
【0014】
図11】タスクスイッチの例である。
図12】タスクスイッチの例である。
図13】タスクスイッチの例である。
【0015】
図14】ノードプロセッサ又はRISCプロセッサのより詳細な図である。
【0016】
図15】ノードプロセッサ又はRISCプロセッサの一部の例の図である。
図16】ノードプロセッサ又はRISCプロセッサの一部の例の図である。
【0017】
図17】ゼロサイクルコンテキスト切替えの例の図である。
【発明を実施するための形態】
【0018】
図2では、並列処理を実行するSOC用アプリケーションの例が見られる。この例では、撮像デバイス1250が示される。この(例えば携帯電話又はカメラであり得る)撮像デバイス1250は、概して、画像センサ1252、SOC1300、ダイナミックランダムアクセスメモリ(DRAM)1315、フラッシュメモリ1314、ディスプレイ1254、及び電力管理集積回路(PMIC)1256を含む。動作では、画像センサ1252は、(静止画像又はビデオであり得る)画像情報を捕捉することができ、この画像情報はSOC1300及びDRAM1315によって処理され得、不揮発性メモリ(即ち、フラッシュメモリ1314)に保存され得る。また、フラッシュメモリ1314に保存される画像情報は、SOC1300及びDRAM1315の使用によって、ディスプレイ1254上で使用するために表示され得る。また、撮像デバイス1250は、可搬型であることが多く、電源としてバッテリを含む。(SOC1300によって制御され得る)PMIC1256は、バッテリ寿命を長持ちさせるために電力使用量の調整を補助し得る。
【0019】
図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を介して、テスト及びバウンダリスキャンが実行され得る。
【0020】
図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が提供される。
【0021】
処理クラスタ1400は、概して、データ転送のために「プッシュ」モデルを使用する。データ転送は要求応答型のアクセスではなく、概してポステッドライトとして現れる。これは、データ転送が一方向であるため要求応答アクセスに比べてグローバルインターコネクト(即ち、データインターコネクト814)の占有を2分の1に減らすという利点を有する。概して、インターコネクト814を介して要求をルーティングし、その後、応答が要求元へルーティングされ、その結果インターコネクト814上で2つの遷移が生成されることは望まれない。プッシュモデルは単一転送を生成する。これは、ネットワークサイズが増大するとネットワークレイテンシが増大するため、またこのことが要求応答型トランザクションのパフォーマンスを低下させることは避けられないことであるため、スケーラビリティに関して重要である。
【0022】
プッシュモデルは、データフロープロトコル(即ち、812−1〜812−N)と同様に、グローバルデータトラフィックを、正確さのために用いられるものまで概して最小化する一方、ローカルノードの利用率に対するグローバルデータフローの影響も概して最小化する。大量のグローバルトラフィックであってもノード(即ち、808−i)のパフォーマンスに対する影響は、通常、皆無に近い。ソースはデータを(後述する)グローバル出力バッファに書き込み、転送成功の確認を要求することなく継続する。データフロープロトコル(即ち、812−1〜812−N)は、概して、インターコネクト814で単一転送を用い、データをあて先へ移動する最初の試みでの転送が成功することを確実にする。(後述する)グローバル出力バッファは(例えば)最大16出力まで保持することができるため、出力のための瞬時グローバル帯域幅が不充分になることに起因するノード(即ち、808−i)のストールの可能性が非常に低くなる。更に、瞬時帯域幅は、要求応答トランザクション又は転送失敗の繰り返しによる影響を受けない。
【0023】
最後に、プッシュモデルはプログラミングモデルに一層密接に適合する。言い換えるとプログラムは自己データを「フェッチ」せずに、その代わりに、プログラムの入力変数及び/又はパラメータは呼び出される前に書き込まれる。プログラミング環境では、入力変数の初期化は、ソースプログラムによるメモリへの書き込みとして行われる。処理クラスタ1400内では、これらの書き込みがポステッドライトに変換され、変数の値をノードコンテキストにポピュレートさせる。
【0024】
(後述する)グローバル入力バッファは、ソースノードからデータを受け取るために用いられる。各ノード808−1〜808−Nのためのデータメモリが単一ポートであるため、入力データの書き込みが、ローカルの単一入力多重データ(SIMD)による読み出しとコンフリクトすることがあり得る。入力データをグローバル入力バッファへ受け入れ、そこで入力データが空きのデータメモリサイクルを待つことができることによって、この競合は回避される(即ち、SIMDアクセスとのバンクコンフリクトはない)。データメモリは、(例えば)32バンクを有し得るため、直ちにバッファがフリーになる可能性が非常に高い。しかしながら、転送を確認するためのハンドシェイキングがないので、ノード(即ち、808−i)はフリーのバッファエントリを持つはずである。所望とされる場合は、グローバル入力バッファは、バッファ位置をフリーにするために、ローカルノード(即ち、808−i)をストールさせてデータメモリに強制的に書き込みを行うことができるが、このイベントは極めて希であるべきである。典型的には、グローバル入力バッファは2つの別々のランダムアクセスメモリ(RAM)として実装されて、一方がデータメモリへ読み出されるべき状態にある間、他方がグローバルデータを書き込むための状態になり得るようにする。メッセージングインターコネクトは、グローバルデータインターコネクトとは分かれているが、同様にプッシュモデルを使用する。
【0025】
システムレベルでは、所望のスループットにスケーリングされた多数のノードを備える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)を共有するとき、それらのノードは、概して、同期して同じプログラムを実行する。
【0026】
また、処理クラスタ1400は非常に多数のノード(即ち、808−i)及びパーティション(即ち、1402−i)をサポートし得る。しかしながら、1つのパーティションについて4以上のノードを持つと概してノンユニフォームメモリアクセス(NUMA)アーキテクチャに類似するため、パーティション毎のノードの数は通常は4つに限定されている。この例では、パーティションは、(後でインターコネクト814に関連して説明する)1つ(又は複数)のクロスバーを介して接続される。クロスバーは概して横断帯域幅が一定している。処理クラスタ1400は、現在、サイクル毎に1ノード幅のデータ(例えば、64、16ビットピクセル)を転送するように設計されており、4サイクルに亘り、1サイクルにつき16ピクセルの4転送に区分される。処理クラスタ1400は、概して、レイテンシトレラントであり、インターコネクト814がほぼ飽和(この状態を達成するのは合成プログラム以外では極めて難しいことに留意されたい)であっても、ノードバッファリングが、概して、ノードストールを防止する。
【0027】
典型的には、処理クラスタ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)デバッグインタフェース。これらは、図には示されていないが、本明細書中に記載される。
【0028】
図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ストアを記述する。
【0029】
典型的には、(ロードストアユニット4318−iからの)ロード及びストアは、SIMDデータメモリ位置と、例えば、最大64、16ビットピクセルまで表すことができる、SIMDローカルレジスタとの間でデータを移動する。SIMDロード及びストアは間接アドレス指定(直接アドレス指定もサポートされている)に共有レジスタ4320−iを用いるが、SIMDアドレス指定処理はこれらのレジスタを読み出し、アドレス指定コンテキストはコア4320によって管理される。コア4320は、レジスタのスピル/フィル、アドレス指定コンテキスト、及び入力パラメータのためのローカルメモリ4328を有する。ノード毎にパーティション命令メモリ1404−iが提供され、そこでは、多数のノードに及ぶデータセット上で、より大きなプログラムを実行するために、多数のノードがパーティション命令メモリ1404−iを共有することも可能である。
【0030】
また、ノード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ユニット」と称される。
【0031】
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によって適用されるロード及びストア命令によってサポートされているモードである。共有データは、概して、上述のシステムレベル依存性プロトコルを用いてコヒーレントに保たれる。
【0032】
コンテキスト割り振り及び共有は、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コンテキストは、各々のタスクのための非依存コンテキストエリアを用いて保存される。
【0033】
SIMDデータメモリ4306−1〜4306−M、及びプロセッサデータメモリ4328は、可変サイズの可変数コンテキストに区分される。垂直フレーム方向のデータは、そのコンテキスト自体の中で保持及び再使用される。水平フレーム方向のデータは、コンテキストを共に水平グループにリンクさせることによって共有される。なお、コンテキスト構成は、計算に関係するノード数及びそれらが互いにどのように相関するかとはほぼ無関係であることに留意することが重要である。コンテキストの主目的は、画像データを、このデータを操作するノードの構成に関係なく、保持、共有、及び再使用することである。
【0034】
典型的には、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の分離ローカルコンテキストエリアを有し得る。
【0035】
典型的には、ノード(即ち、ノード808−i)は、8個のSIMDレジスタ(第1の構成)、32個のSIMDレジスタ(第2の構成)、及び32個のSIMDレジスタと、より小さい機能ユニットの各々に3つの予備実行ユニット(第3の構成)の例えば3つの構成を有する。
【0036】
図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は、インターリーブされたシステムデータをデインターリーブされた処理クラスタデータに変換及びその逆を行う、インターリービング及びデインターリービング用の回路要素、及び構成読み出しスレッド(Configuration Read thread)を実装するための回路要素を含み得る。構成読み出しスレッドは、処理クラスタ1400のための構成(即ち、並列化されたシリアルプログラムのために、処理クラスタ1400の計算及びメモリリソースに少なくとも部分的に基づくデータ構造)を(プログラム、ハードウェア初期化等を含む)メモリ1416からフェッチし、それを処理クラスタ1400にディストリビュートする。
【0037】
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ビットとして編成され得る。
【0038】
ここで、メモリ5403、5405、及び5410を参照すると、各々が概してレジデントスレッドに関連する情報を含む。GLS命令メモリ5405は、スレッドがアクティブであるか否かに拘らず、全てのレジデントスレッドのための命令を概して含む。GLSデータメモリ5403は、全てのレジデントスレッドのための変数、テンポラリ、及びレジスタスピル/フィル値を概して含む。また、GLSデータメモリ5403は、スレッドコンテキスト記述子及び宛て先リスト(ノード内の宛て先記述子に似ている)を含む、スレッドコードから隠されたエリアを有し得る。また、宛て先コンテキストへの出力を含み得るスカラ出力バッファ5412がある。このデータは水平グループ内の多数の宛て先コンテキストへコピーされるべき順番に概して保たれ、処理クラスタ1400の処理パイプラインにマッチングするようにスカラデータの転送をパイプライン化する。データフロー状態メモリ5410は処理クラスタ1400からスカラ入力を受け取る各スレッドのためのデータフロー状態を概して含み、この入力に依存するスレッドのスケジューリングを制御する。
【0039】
典型的に、GLSユニット1408のためのデータメモリは、いくつかの部分に構成される。データメモリ5403のスレッドコンテキストエリアはGLSプロセッサ5402のためのプログラムには可視であるが、データメモリ5403の残りの部分及びコンテキスト保存メモリ5414はプライベートのままである。コンテキスト保存/復元又はコンテキスト保存メモリは、通常、全ての中断されたスレッド(即ち、16×l6×32ビットのレジスタコンテント)のためのGLSプロセッサ5402レジスタのコピーである。データメモリ5403内の他の2つのプライベートエリアは、コンテキスト記述子及び宛て先リストを含む。
【0040】
リクエストキュー及び制御5408は、GLSプロセッサ5402のためのロード及びストアアクセスをGLSデータメモリ5403の外で概して監視する。これらのロード及びストアアクセスは、スレッドにより、システムデータを処理クラスタ1400へ移動及びその逆を行うように実行されるが、データは通常GLSプロセッサ5402の中を物理的に流れることはなく、またそれはデータ上で動作を概して実行しない。代わりに、リクエストキュー5408がスレッドの「移動」をシステムレベルでの物理的移動に変換し、ロードを移動のためのストアアクセスにマッチングさせ、且つシステムL3及び処理クラスタ1400データフロープロトコルを用いて、アドレス及びデータシーケンシング、バッファ割り付け、フォーマッティング、及び、転送制御を実行する。
【0041】
コンテキスト保存/復元エリア又はコンテキスト保存メモリ5414は概して、GLSプロセッサ5402のための全てのレジスタを一度に保存及び復元し得るワイドランダムアクセスメモリ又はRAMであり、0−サイクルコンテキスト切り替えをサポートする。スレッドプログラムは、アドレス計算、状態試験、ループ制御等のための1データアクセス当たり数サイクルを必要とし得る。大量の潜在的スレッドがあるため、且つ、目的が、ピークスループットをサポートするために充分なように全てのスレッドをアクティブに保持することであるため、最小サイクルオーバヘッドでコンテキスト切り替えが起こることが重要であり得る。また、単一スレッドの「移動」が全てのノードコンテキストのためのデータ(例えば、水平グループの1コンテキスト当たりの1変数当たり64ピクセル)を転送するという事実によって、スレッド実行時間が部分的にオフセットされ得ることに留意すべきであろう。これは、ピークピクセルスループットをサポートする一方で、相当大きな数のスレッドサイクルを可能にし得る。
【0042】
ここで、スレッドスケジューリング機構を参照すると、この機構はメッセージリスト処理5401及びスレッドラッパー5404を概して含む。スレッドラッパー5404は、典型的に、GLSユニット1408のためのスレッドをスケジューリングするために、入ってくるメッセージをメールボックスに受け取る。概して、1スレッド当たり1つのメールボックスエントリがあり、メールボックスエントリは、そのスレッドのための初期プログラムカウントや、スレッドの宛て先リストのプロセッサデータメモリ(即ち、4328)内の位置等の情報を含み得る。また、このメッセージは、オフセット0で始まり、スレッドのプロセッサデータメモリ(即ち、4328)コンテキストエリアに書き込まれる、パラメータリストを含み得る。また、スレッドが中断されるときスレッドプログラムカウントを保存するため、及びデータフロープロトコルを実装するために宛て先情報を置くために、スレッド実行中にもメールボックスエントリが用いられる。
【0043】
GLSユニット1408は、メッセージングに加えて、構成処理も実行する。典型的に、この構成処理は構成読み出しスレッドを実装し得る。構成読み出しスレッドは、処理クラスタ1400のための構成(プログラム、ハードウェア初期化等を含む)をメモリからフェッチし、処理クラスタ1400の残りの部分にディストリビュートする。典型的に、この構成処理は、ノードインタフェース5420で実行される。加えて、GLSデータメモリ5403は、コンテキスト記述子、宛て先リスト、及びスレッドコンテキストのためのセクション又はエリアを概して含む。典型的に、スレッドコンテキストエリアはGLSプロセッサ5402に対して可視であり得るが、GLSデータメモリ5403の残りのセクション又はエリアは可視でなくてもよい。
【0044】
図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を含む。
【0045】
全ての処理ノード(即ち、808−i)が機能メモリ7602及びベクトルメモリ7603にアクセスし得るという意味で、機能メモリ7602及びベクトルメモリ7603は、全般的に「共有」されている。機能メモリ7602に提供されるデータは、SFMラッパーを介して(典型的にはライトオンリーの方式で)アクセスされ得る。また、この共有は、全般的に、ノード(即ち、808−i)を処理するための上述のコンテキスト管理と一貫性がある。また、処理ノードと共有機能メモリ1410との間のデータI/Oもデータフロープロトコルを使用し、処理ノードは、典型的には、ベクトルメモリ7603に直接アクセスできない。また、共有機能メモリ1410は、機能メモリ7602に書き込むことができるが、処理ノードによってアクセスされている間は、書き込むことができない。処理ノード(即ち、808−i)は、機能メモリ7602内の共通位置を読み出し及び書き込みできるが、(通常は)リードオンリーLUT操作、又はライトオンリーヒストグラム操作のいずれかとしてである。また、処理ノードが機能メモリ7602領域への読み出し−書き込みアクセスを有することも可能であるが、これは所定のプログラムによるアクセスに限定されるべきである。
【0046】
データを共有する様式は多く存在するので、共有の種類及び依存性条件が満足されることを概ね保証するために用いられるプロトコルを区別するために用語が導入される。下記のリストは、図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のときに満足される。
【0047】
水平方向に共有されるコンテキストは、左右いずれの方向にも依存性を有する。コンテキスト(すなわち3502−1)は、その左右のコンテキストからLlc及びRlcデータを受け取り、また、これらのコンテキストにRlc及びLlcデータを提供する。これによって、データ依存性に循環性が導入される。すなわち、コンテキストは、その左のコンテキストから、左のコンテキストにRlcデータを提供し得る前にLlcデータを受け取るはずであるが、左のコンテキストはこのコンテキスト、すなわち右側のコンテキストから、左のコンテキストがLlcコンテキストを提供し得る前にRlcデータを要求する。
【0048】
この循環性は、きめの細かいマルチタスキングを用いて破られる。例えば、(図9の)タスク3306−1〜3306−6は、同一命令シーケンスとし得、6つの異なるコンテキスト内で動作する。これらのコンテキストは、そのフレームの隣接する水平領域でサイドコンテキストデータを共有する。この図は、それぞれ同じタスクセット及びコンテキスト構成を有する2つのノードも示す(ノード808−(i+1)についてシーケンスの一部が示されている)。図示の都合上、タスク3306−1は左境界にあると仮定する。そのため、このタスクはLlc依存性を有さない。同じノード(すなわち808−i)で異なる時間帯に実行されるタスクによってマルチタスキングが示されており、タスク3306−1〜3306−6は、フレーム内での水平位置の関係を強調するために水平方向に広がっている。
【0049】
タスク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つ以上のノードで置き換えたものである。
【0050】
プログラムは、Lvin、Cvin、及びRvinの状態によって決まるように、或るコンテキストに対して(必要な場合)、Lin、Cin、及びRinデータがいずれも有効であるときこのコンテキストにおいて実行が開始され得る。このプログラムは、実行の間、この入力コンテキストを用いて結果を生成し、Llc及びClcデータを更新する。このデータは、制約なしに使用され得る。Rlcコンテキストは有効ではないが、Rvlc状態は、ハードウェアがストールせずにRinコンテキストを使用し得るように設定される。プログラムにおいてRlcデータへのアクセスに遭遇すると、プログラムはこの時点より先に進めない。というのは、このデータがまだ演算されていないかもしれないからである(これを演算するプログラムは、ノード数がコンテキスト数よりも少ないために必ずしも実行されないことがあり、そのため、全てのコンテキストは並列に演算され得ない)。Rlcデータがアクセスされる前に命令が終了すると、タスク切替えが行われ、現在のタスクを中断し、別のタスクを開始させる。タスク切替えが行われるときRvlc状態がリセットされる。
【0051】
タスク切替えは、右側中間コンテキストがプログラムフローにおいて初めてアクセスされていることを認識するコンパイラ706によって設定される命令フラグに基づいて行われる。コンパイラ706は、入力変数と中間コンテキストを区別することができ、そのため、求められなくなるまで有効である入力データに対してこのタスク切替えが行われないようにし得る。タスク切替えによりノードが解放されて、新たなコンテキスト、通常は最初のタスクによって更新されたLlcデータを有するコンテキストにおいて演算が成される(例外については後で述べる)。このタスクは、Lvin、Cvin、及びRvinが設定されていると仮定して、最初のタスクと同じコードを、ただし新たなコンテキストで実行する。Llcデータは、すでに左側コンテキストRAMにコピーされているので有効である。この新たなタスクが生成する結果は、Llc及びClcデータを更新し、前のコンテキストにおけるRlcデータも更新する。この新たなタスクは最初と同じコードを実行するので、やはり同じタスク境界に行き当たり、それに続いてタスク切替えが行われる。このタスク切替えは、その左側のコンテキストに信号を送ってRvlc状態を設定する。というのは、タスクの終了は、実行のこの時点まですべてのRlcが有効であることを暗に示しているからである。
【0052】
2番目のタスク切替えでは、次のタスクのスケジューリングに関して2つの選択肢が可能である。3番目のタスクは、少し前に説明したように、右側の次のコンテキストにおいて同じコードを実行し得るか、又は、中断されたところから最初のタスクが再開され得る。というのは、この時点では、最初のタスクは、有効なLin、Cin、Rin、Llc、Clc、及びRlcデータを有するからである。いずれのタスクも同じ時点で実行されるはずであるが、順序は正確さの点で概して問題にならない。スケジューリングアルゴリズムは、通常、二者択一の最初を選択しようと試みて、可能な限り左から右に(おそらくは右境界に至るまで)進む。これにより依存性がより満足される。というのは、この順序では有効なLlc及びRlcデータがともに生成されるが、最初のタスクが再開されるとLlcデータが前と同様に生成されるからである。依存性をより満足させると、再開される準備ができているタスクの数が最大になり、それによって、タスク切替えが生じたときに何らかのタスクが実行する準備ができている可能性が高くなる。
【0053】
実行準備ができているタスクの数を最大にすることは重要である。というのは、マルチタスキングは、演算リソースの使用を最適化するためにも用いられるからである。ここで、多数のリソース依存性と相互作用する多数のデータ依存性が存在する。依存性及びリソース競合がともに存在する状態でハードウェアを充分に使用し続け得る既定のタスクスケジューリングは存在しない。何らかの理由で(概して、依存性が満足されていないために)ノード(すなわち808−i)が左から右に進めない場合、スケジューラは、最初のコンテキストにおいて、すなわち、ノード(すなわち808−i)の左端のコンテキストにおいてタスクを再開させる。左側のコンテキストのいずれかが実行準備ができているはずであるが、左端のコンテキストで再開させると、実行順序の変更の原因となったこれらの依存性を解決するために利用可能なサイクル数が最大になる。というのは、これにより、最大数のコンテキストでタスクが実行され得るからである。その結果、タスクスケジューリングが改変される期間であるプリエンプション(すなわちプリエンプション3802)を用い得る。
【0054】
図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だけで、元のスケジュールに戻る。左から右の実行を優先することは依然として重要である。
【0055】
要約すると、タスクは、それらの水平位置に対して左端のコンテキストで開始され、左から右に可能な限り、ストールが発生するか、又は右端のコンテキストに到達するまで進み、次いで、左端のコンテキストで再開される。これにより、依存性ストールの可能性を最小限にすることによってノードの使用が最大になる(ノード808−iのようなノードは、最大で8つのスケジューリングされるプログラムを有し得、これらのいずれかからのタスクがスケジューリングされ得る)。
【0056】
ここまで、サイドコンテキスト依存性に関する考察では、真の依存性に焦点を当ててきたが、サイドコンテキストを介した反依存性もある。プログラムは、所与のコンテキスト位置を2回以上書き込むことができ、通常、メモリ要件を最小限にするためにそうする。プログラムがこれらの書込みの間にその位置でLlcデータを読み込む場合、これは、右側のコンテキストもこのデータの読込みを要求することを暗に示しているが、このコンテキストでのタスクがまだ実行されていないので、2番目の書込みは、最初の書込みのデータを、2番目のタスクがそれを読み込む前に上書きする。この依存性のケースは、2番目の書込みの前にタスク切替えを導入することによって取り扱われ、タスクスケジューリングにより、このタスクが右側のコンテキストにおいて実行されることが保証される。というのは、スケジューリングは、Rlcデータを提供するためにこのタスクが実行されなければならないことが仮定しているからである。ただし、この場合は、タスク境界により、2番目のタスクは、Llcデータを、それが2回目に改変される前に読み込むことができる。
【0057】
タスク切替えは、(例えば)2ビットフラグを用いるソフトウェアによって示される。タスク切替えは、nop動作なし、リリース入力コンテキスト、出力用の有効設定、又はタスク切替えを示し得る。この2ビットフラグは、命令メモリ(すなわち1404−i)の段階で復号される。例えば、タスク1の最初のクロックサイクルにより2番目のクロックサイクルでタスク切替えが生じ得、2番目のクロックサイクルでは、命令メモリ(すなわち1404−i)からの新たな命令がタスク2用にフェッチされると仮定し得る。この2ビットフラグは、cs_instrと呼ばれるバス上にある。また、PCは、概して、(1)タスクがBKビットに遭遇していない場合にはプログラムからのノードラッパー(すなわち810−i)から、と(2)BKに遭遇し、タスクの実行がラップされた場合にはコンテキスト保存メモリから、の2つの位置から得られる。
【0058】
タスクプリエンプションは、図10の2つのノード808−i及び808−(i+1)を用いて説明され得る。この例のノード808−kは、プログラムに割り当てられる3つのコンテキスト(コンテキスト0、コンテキスト1、及びコンテキスト2)を有する。また、この例では、ノード808−i及び808−(i+1)はノード内構成で動作し、ノード808−(k+1)もそうであり、ノード808−(k+1)のコンテキスト0に対する左側のコンテキストポインタはノード808−kの右側のコンテキスト2を指す。
【0059】
ノード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−(k+1)がset_validを受け取るとき、Rvinが1に設定され得る。
【0060】
Rvlc及びLvlcは、概して、Bkが1になるまで検査されず、Bkが1になった後でタスクの実行がラップされ、この時点で、Rlvc及びLvlcが検査されるはずである。Bkが1になる前は、PCは別のプログラムから得られ、その後、PCはコンテキスト保存メモリから得られる。同時タスクは、書込みバッファを介して左コンテキスト依存性を解決し得る。これについては上述した。右コンテキスト依存性は、上述のプログラミング規則を用いて解決され得る。
【0061】
有効なローカル値は、ストア値のように取り扱われ、ストア値と対にもされ得る。有効なローカル値はノードラッパー(すなわち810−i)に送信され、そこから、直接、局所、又は遠隔経路が取られて有効なローカル値が更新され得る。これらのビットはフリップフロップで実装され、設定されるビットは上述のバスではSET_VLCである。コンテキスト番号はDIR_CONTに担持される。VLCビットのリセットは、1サイクル遅れのCS_INSTR制御を用いてタスク切替えの前に保存された前のコンテキスト番号を用いてローカルに行われる。
【0062】
上述のように、タスクの準備ができているかどうかを決定するために確認される様々なパラメータがある。ここでは、入力有効値及びローカル有効値を用いてタスクプリエンプションを説明する。ただし、これは、他のパラメータにも拡張され得る。Cvin、Rvin、及びLvinが1になると、(Bk=1に遭遇しなかった場合)タスクは実行準備が整う。タスクの実行がラップされると、Cvin、Rvin、及びLvinに加えてRvlc及びLvlcも確認されることがある。同時タスクでは、リアルタイム依存性確認に切り替わるので、Lvlcは無視され得る。
【0063】
また、タスク間(すなわち、タスク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であることを把握しており、準備ができていると仮定する。当然のことながら、(入力有効値及び有効ローカル値のような)すべての他の変数は設定されるはずである。
【0064】
タスク間隔カウンタは、実行中のタスクのサイクル数を示し、このデータはベースコンテキストが実行を完了したとき取得され得る。この例でまたタスク0及びタスク1を用いると、タスク0が実行されるとき、タスク間隔カウンタは有効ではない。したがって、タスク0が記述子の推定読取りを実行した後で(タスク0の段階1の実行の間)、プロセッサデータメモリがセットされる。実際の読み取りは、タスク0の後続の段階の実行の際に行われ、推定有効ビットがタスク切替えを想定して設定される。次のタスク切替えの間、この推定コピーにより、前述のアーキテクチャコピーが更新される。次のコンテキストの情報へのアクセスは、タスク間隔カウンタを用いるのと同じ程度には理想的ではない。というのは、次のコンテキストが有効か否かを確認しても、タスクの準備ができていないという結果にただちにつながるかもしれず、タスクの終了まで待機すると実際にタスクが準備完了になり得るが、タスク準備確認により長い時間がかかるからである。しかし、カウンタが有効でないので、他になすすべがない。タスクの準備ができているかどうか確認する前にタスク切替えを待つことにより遅延がある場合、タスク切替えは遅れる。どのタスクを実行するかなどのすべての決定がタスク切替えフラグの出現前に成され、出現後はタスク切替えが即座に行われ得ることが概して重要である。当然のことながら、フラグの出現後、次のタスクが入力を待っており、他に実行予定のタスク/プログラムがないのでタスク切替えが生じ得ないようにするケースがある。
【0065】
カウンタが有効になると、タスクが完了しようとする前の幾つかの(すなわち10)サイクルで、次に実行されるコンテキストの準備ができているかどうかが確認される。コンテキストの準備ができていない場合、タスクプリエンプションが考えられる。タスクプリエンプションがすでに成されているためタスクプリエンプションを成し得ない場合(タスクプリエンプションの1つのレベルは成され得る)、プログラムプリエンプションが考えられる。他のプログラムの準備ができていない場合、現在のプログラムがタスクの準備ができるまで待機し得る。
【0066】
タスクがストールすると、このタスクは、上述したようにNxtコンテキスト番号にあるコンテキスト番号に対する有効な入力又は有効なローカル値によって起動され得る。Nxtコンテキスト番号は、プログラムが更新されるときベースコンテキスト番号とともにコピーされ得る。また、プログラムプリエンプションが行われるとき、プリエンプションされるコンテキストの番号がNxtコンテキスト番号にストアされる。Bkに遭遇せず、タスクプリエンプションが行われる場合も、Nxtコンテキスト番号は実行されるべき次のコンテキストを有する。起動条件によりプログラムが初期化され、プログラムエントリが、エントリ0から、準備ができているエントリが検出されるまで1つずつ確認される。準備ができているエントリがない場合、プロセスは準備ができているエントリが検出されるまで継続され、準備ができているエントリが検出された時点で、プログラム切替えが生じる。起動条件は、プログラムプリエンプションを検出するために用いられ得る条件である。タスクが完了しようとするときにタスク間隔カウンタが幾つかの(すなわち22)のサイクル(プログラム可能な値)であるとき、各プログラムエントリは、準備ができているか否か確認される。準備ができている場合、準備ができているビットが、現在のプログラムに準備ができているタスクがない場合に用いられ得るプログラム内に設定される。
【0067】
タスクプリエンプションを見てみると、プログラムは、先入れ先出し(FIGO)として記述され得、任意の順序で読み出され得る。この順序は、次にどのプログラムの準備ができているかによって決定され得る。プログラムの準備ができているかは、現在実行中のタスクが完了しようとする幾(すなわち22)サイクルが前で決定される。このプログラム探索(すなわち22サイクル)は、選択されるプログラム/タスクに対する最後の探索が成される前(すなわち10サイクル前)に完了するはずである。どのタスク又はプログラムも準備ができていない場合、有効な入力又は有効なローカル値が入力されるときはいつも、どのエントリの準備ができているかを見つけるために探索が再開される。
【0068】
ノードプロセッサ4322に対するPC値は幾つかの(すなわち17個の)ビットであり、この値はプログラムからこれら幾つかの(すなわち16個の)ビットを(例えば)1ビットだけ左にシフトすることによって得られる。コンテキスト保存メモリからPCを用いてタスク切替えを実施するとき、シフト操作は必要とされない。
【0069】
(アルゴリズムを記述する)ノードレベルプログラム内のタスクは、このタスクの間に演算される変数のサイドコンテキストが要求されるときに有効でありタスク切替えである、入力又は要求される入力のサイドコンテキストから開始される命令の集合である。下記にノードレベルプログラムの例を示す。
/* A_dumb_algorithm.c */
Line A,B,C;/*input*/
Line D,E,F;G/*some temps*/
Line S;/*output*/
D=A.center+A.left+A.right;
D=C.left−D.center+C.right;
E=B.left+2*D.center+B.right;
<タスク切替え>
F=D.left+B.center+D.right;
F=2*F.center+A.center;
G=E.left+F.center+E.right;
G=2*G.center;
<タスク切替え>
S=G.left+G.right;
次いで図11でタスク切替えが生じる。というのは、「D」の右コンテキストがコンテキスト1で演算されていないからである。図12で、反復が完了し、コンテキスト0が保存される。図13で、前のタスクが完了するとともに次のタスクが実施され、その後、タスク切替えが生じる。
【0070】
処理クラスタ1400内で、汎用RISCプロセッサは様々な目的に用いられる。例えば、(RISCプロセッサとし得る)ノードプロセッサ4322は、プログラムフロー制御に用いられ得る。下記にRISCアーキテクチャの例を説明する。
【0071】
図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」はアクティブローのピンを表す)。
【表1】
【0072】
図15に移ると、プロセッサ5200をパイプライン5300とともにより詳細に見ることができる。ここで、(フェッチ段5306に対応する)命令フェッチ5204はA側とB側に分割され、A側は、(1つの40ビット命令又は2つの20ビット命令を有する40ビット幅の命令ワードとし得る)「フェッチパケット」の最初の20ビット(すなわち「19:0」)を受け取り、B側は、フェッチパケットの最後の20ビット(すなわち「39:20」)を受け取る。典型的には、命令フェッチ5204は、フェッチパケット内の命令の構造及びサイズを決定し、それに従って命令を送り出す(以上は下記のセクション7.3で説明する)。
【0073】
(復号段5308及び処理ユニット5202の一部である)復号器5221は、命令フェッチ5204からの命令を復号する。復号器5221は、概して、それぞれB側及びA側の(インターミディエイト(intermediates)を生成する)演算子フォーマット回路5223−1及び5223−2並びに復号回路5225−1及び5225−2を含む。次いで、復号器5221からの出力が、(やはり復号段5308及び処理ユニット5202の一部である)復号‐実行ユニット5220によって受け取られる。復号‐実行ユニット5220は、フェッチパケットを介して受け取られた命令に対応する実行ユニット5227用コマンドを生成する。
【0074】
実行ユニット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でも実施され得る。
【0075】
ベクトル処理モジュールを有するRISCプロセッサは、概して、共有機能メモリ1410とともに用いられる。このRISCプロセッサは、プロセッサ5200に用いられるRISCプロセッサと概ね同じであるが、演算及びロード/ストア帯域幅を拡張するベクトル処理モジュールを含む。このモジュールは、それぞれサイクル当たり4演算実行パケットを実行し得る16個のベクトルユニットを含み得る。典型的な実行パケットは、概して、ベクトルユニットアレイ、2つのレジスタ−レジスタ演算、及びベクトルメモリアレイにストアされる結果からロードされるデータを含む。この種のRISCプロセッサは、概して、80ビット幅又は120ビット幅の命令ワードを用い、いずれの幅の命令ワードも概して「フェッチパケット」を構成し、不整号命令を含み得る。フェッチパケットは、40ビット命令と20ビット命令の混合を含み得、この混合は、プロセッサ5200によって用いられる命令に類似のベクトルユニット命令及びスカラー命令を含み得る。典型的には、ベクトルユニット命令は20ビット幅とし得、他の命令は20ビット又は40ビット幅とし得る(プロセッサ5200と同様)。ベクトル命令は、命令フェッチバスのすべてのレーン上にも提示され得るが、フェッチパケットがスカラー及びベクトルユニット命令をいずれも含む場合、(例えば)命令フェッチバスビット[39:0]上にベクトル命令が提示され、(例えば)命令フェッチバスビット[79:40]上にスカラー命令が提示される。また、未使用命令フェッチバスレーンはNOPで埋められる。
【0076】
次いで、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)ベクトルユニットに対して、単一のロード及び単一のストアがともにフェッチパケットに存在し得る。
(5)40ビット命令の前にPビットが1に等しい20ビット命令がくることは禁止されている。
(6)これらの禁止条件を検出するためにハードウェアを配置してはならない。これらの制約は、システムプログラミングツール718によって実施されると予想される。
【0077】
図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用のロード及びストア命令を生成し得る。
【0078】
図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つの命令が実行されるので、作為的であるが、タスクのサイズにもタスク切替えの頻度にも概ね何ら制約はなく、コンテキスト切替えの頻度及びタスクのオブジェクトコードのサイズにかかわらずシステムは充分な性能を維持する。
【0079】
下記の表2は、プロセッサ5200用の命令セットアーキテクチャの例を示す。ここで、
(1)ユニットの指定.SA及び.SBは、どの発行スロットで20ビット命令が実行されるかを区別するために用いられ、
(2)40ビット命令は、慣例によりB側(.SB)で実行され、
(3)基本フォームは、<ニューモニック>、<ユニット>、<カンマで分離されたオペランドリスト>であり、
(4)擬似コードは、C++シンタックスを有し、適切なライブラリが直接、シミュレータ又は他の優れたモデルに含まれ得る。
【表2】
【0080】
本発明の特許請求の範囲から逸脱することなく、説明した実施形態に改良を加え得ること、及び付加的な実施形態が実現され得ることが本発明に関係する当業者には理解されよう。
図1
図2
図3
図4
図4A
図4B
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17