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