特定のソフトウェア・アプリケーションは、ネットワーク・オン・ア・チップ(NOC)内の種々のノードを1つのジョブのそれぞれ異なる部分に割り振るように、NOCを利用する。たとえば、図1に描写されているNOC102について考慮する。NOC102は、ホスト・コンピュータ104内のユーザ・アプリケーション112から実行可能ソフトウェア命令を受信し、これらの命令を処理し、次に、実行結果を出力装置106(たとえば、モニター、プリンタ、記憶装置など)に出力する。図1に記載されている例では、NOC102内に4つのハードウェア・スレッド108a〜108dが存在し、そのそれぞれがユーザ・アプリケーション112によって記述されたジョブの異なる部分を実行する。それぞれのスレッド108a〜108dは、1つのハードウェア・プロセッサ・ロジックから構成され、ユーザ・アプリケーション112によって実行される全体的なジョブに関する特定のサブタスクを実行するために専門化されたソフトウェア・セットに関連付けることもできる。したがって、スレッド108aは全体的なジョブの第1の部分を処理することができ、その結果、第1の出力がパケット110a内に置かれ、第2のスレッド108bに送信される。次に、第2のスレッドはパケット110aからのデータを処理し、その結果、第2の出力がパケット110b内にパケット化され、第3のスレッド108cに送信される。第3のスレッドはパケット110bからのデータを処理し、その結果、第3の出力がパケット110c内にパケット化され、第4のスレッド108dに送信され、その第4のスレッド108dはパケット110dからのデータを処理する。次に、第4のスレッド108dは、出力装置106に送信される最終出力パケット110dを生成することにより、全体的なジョブに必要な最終操作を完了する。
スレッド108a〜108dのうちの模範的な1つのスレッドの追加の詳細は図2にスレッド208として提示されている。スレッド208内には処理ハードウェア202があり、これは、未圧縮直接スレッド間通信バッファ(UDICB)206からのデータを処理するためのプロセッサ、特定用途向け集積回路(ASIC)などにすることができる。以下に記載するように、UDICB206は、処理ハードウェア202によって実行される計算に使用されるオペランドなどのデータを含む。このデータは、NOC内の複数のスレッド(処理ノード)によってアクセスすることができる。各スレッド208内には、ベクトル・レジスタ・ファイル210と、ベクトル実行パイプライン・データ検索ロジック212があり、このデータ検索ロジック212により、各行のデータ・ワード(すなわち、データ・ワード集合(data word aggregation))が実行のために1つの単位としてまとめて処理ハードウェア202内にロードされる。図2における以下の問題に留意されたい。パケット・バッファ206からの各行のデータは、1行に含まれるデータの種類や有無にかかわらず、固定サイズの単一集合として処理ハードウェア202内にロードされる。すなわち、図2に描写されている例に示されているように、処理ハードウェア202は、実際に1行に含まれるワード数にかかわらず、ロード・コマンドが実行されると必ず、4ワードのライン全体をロードする。したがって、複数のデータ・ワードの集合(行)はそれぞれ異なるサイズのものであるので、UDICB206には「穴(hole)」ができる。すなわち、行214は、3ワードの集合としてデータ・ワード「a、b、c」を含み、「d」というワードをまったく持たないデータ集合を保管する。したがって、UDICB206の行214には空のブロック216が存在する。データ集合(行全体)が4ワード未満であるので、UDICB206内に保管されている他の行のデータも同様に空のブロック・セルを有する。伝送トラフィックが(ヌル・データで)膨張し、UDICBからデータを伝送するために使用されるパケット・バッファはこのような存在しないデータのための空間を確保するのに十分な大きさになるように設計しなければならないので、存在しないワードを伝送し、「バッファリング」すると、システム内、特にNOC内の全体的な効率が低下する。
図2に提示されている問題を本発明によってどのように対処するかを調べる前に、本発明による1つまたは複数のNOCを利用し、図3に描写されている模範的なコンピュータ302について考慮する。描写されている通り、図3は、少なくとも1つのコンピュータ・プロセッサ304を含む、模範的なコンピュータ302のブロック図を明記している。コンピュータ・プロセッサ304は、標準的なノイマン型のプロセッサまたはNOCにすることができる。コンピュータ302は、高速メモリ・バス308およびバス・アダプタ310によりプロセッサ304およびコンピュータ302の他のコンポーネントに結合されるシステム・メモリである、ランダム・アクセス・メモリ(RAM)306も含む。
RAM306には、たとえば、ワード・プロセッシング、スプレッドシート、データベース操作、ビデオ・ゲーム、株式市場シミュレーション、原子量子プロセス・シミュレーション、またはその他のユーザレベル・アプリケーションなどの特定のデータ処理タスクを実行するためのコンピュータ・プログラム命令のモジュールであるアプリケーション・プログラム312が保管されている。また、アプリケーション・プログラム312は、上記の図1〜図2および以下の図8〜図11に記載されているものなどの制御プロセスも含む。また、RAM306には、オペレーティング・システム(OS)314も保管されている。OS314は、アプリケーション・プログラム312などのリソースへの透過的ユーザ・アクセスを可能にするためにシェル316を含む。一般に、シェル316は、ユーザとオペレーティング・システムとの間のインタープリタおよびインターフェースを提供するプログラムである。より具体的には、シェル316は、コマンド・ライン・ユーザ・インターフェースに入力されたかまたはファイルから入力されたコマンドを実行する。したがって、コマンド・プロセッサとも呼ばれるシェル316は、一般に、オペレーティング・システムのソフトウェア階層の最高レベルであり、コマンド・インタープリタとして機能する。シェルは、システム・プロンプトを提供し、キーボード、マウス、またはその他のユーザ入力媒体によって入力されたコマンドを解釈し、解釈されたコマンド(複数も可)を処理のためにオペレーティング・システムの適切な下位レベル(たとえば、カーネル318)に送信する。シェル316はテキストベースで行指向のユーザ・インターフェースであるが、本発明は、図形、音声、ジェスチャなどの他のユーザ・インターフェース・モードも等しくサポートすることに留意されたい。
描写されている通り、OS314は、メモリ管理、プロセスおよびタスク管理、ディスク管理、ならびにマウスおよびキーボード管理を含む、OS314の他の部分およびアプリケーション・プログラム(たとえば、アプリケーション312)によって要求される本質的なサービスの提供を含む、OS314用の下位レベルの機能を含むカーネル318も含む。
図3の例のオペレーティング・システム314およびアプリケーション312はRAM306内に示されているが、このようなソフトウェア・コンポーネントは、データ記憶装置320としてのディスク・ドライブ上などの不揮発性メモリに保管することもできる。
このコンピュータ例302は、NOCビデオ・アダプタ322およびNOCコプロセッサ324という本発明の諸実施形態による2つのNOC例を含む。NOCビデオ・アダプタ322は、ディスプレイ画面またはコンピュータ・モニターなどのディスプレイ装置346への図形出力のために特別に設計されたI/Oアダプタの一例である。NOCビデオ・アダプタ322は、高速ビデオ・バス326、バス・アダプタ310、および同じく高速バスであるフロント・サイド・バス328によりプロセッサ304に接続される。
このNOCコプロセッサ例324は、バス・アダプタ310、フロント・サイド・バス328、および同じく高速バスであるフロント・サイド・バス330によりプロセッサ304に接続される。NOCコプロセッサ324は、メイン・プロセッサ304の命令で特定のデータ処理タスクを加速するように最適化される。
このNOCビデオ・アダプタ例322およびNOCコプロセッサ例324はそれぞれ、統合プロセッサ(「IP:Integrated Processor」)ブロック、ルータ、メモリ通信コントローラ、およびネットワーク・インターフェース・コントローラを含む、本発明の一実施形態によるNOCを含み、各IPブロックはメモリ通信コントローラおよびネットワーク・インターフェース・コントローラによりルータに対して適合され、各メモリ通信コントローラはIPブロックとメモリとの間の通信を制御し、各ネットワーク・インターフェース・コントローラはルータによるIPブロック間通信を制御する。NOCビデオ・アダプタ322およびNOCコプロセッサ324は、並列処理を使用し、共用メモリへの高速ランダム・アクセスも必要とするプログラム用に最適化される。しかし、一実施形態では、本明細書に記載され、本発明によって使用するために企図されているNOCは、共用メモリへの直接アクセスではなく、パケット・データのみを利用する。この場合も、本発明によって使用するために企図されている模範的なNOCアーキテクチャの追加の詳細は以下の図4〜図10に提示されることに留意されたい。
引き続き図3について説明すると、コンピュータ302は、拡張バス334およびバス・アダプタ310によりプロセッサ304およびコンピュータ302の他のコンポーネントに結合されたディスク・ドライブ・アダプタ332を含むことができる。ディスク・ドライブ・アダプタ332は、データ記憶装置320として表されたディスク・ドライブの形で不揮発性データ記憶装置をコンピュータ302に接続する。本発明の諸実施形態によるNOCによるデータ処理のためにコンピュータ内で有用なディスク・ドライブ・アダプタとしては、統合ドライブ・エレクトロニクス(「IDE:Integrated Drive Electronics」)アダプタ、小型コンピュータ・システム・インターフェース(「SCSI:Small Computer System Interface」)アダプタ、当業者にとって思い浮かぶその他のものを含む。当業者にとって思い浮かぶように、光ディスク・ドライブ、電気的消去可能プログラマブル読み取り専用メモリ(いわゆる「EEPROM」または「フラッシュ」メモリ)などの不揮発性コンピュータ・メモリも実現することができる。
このコンピュータ例302は、1つまたは複数の入出力(「I/O」)アダプタ336も含む。I/Oアダプタ(複数も可)336は、たとえば、コンピュータ・ディスプレイ画面などのディスプレイ装置への出力ならびにキーボードおよびマウスなどのユーザ入力装置338からのユーザ入力を制御するためのソフトウェア・ドライバおよびコンピュータ・ハードウェアによるユーザ指向入出力を実現する。
模範的なコンピュータ302は、他のコンピュータ342とのデータ通信のためならびにデータ通信ネットワーク344とのデータ通信のために通信アダプタ340も含むことができる。このようなデータ通信は、RS−232接続により、ユニバーサル・シリアル・バス(「USB」)などの外部バスにより、IPデータ通信ネットワークなどのデータ通信ネットワークにより、さらに当業者にとって思い浮かぶその他の方法で、シリアルに実行することができる。通信アダプタは、直接またはデータ通信ネットワークを介して、あるコンピュータが他のコンピュータにデータ通信を送信するハードウェア・レベルのデータ通信を実現する。本発明の諸実施形態によるNOCとともにデータ処理に有用な通信アダプタの例としては、有線ダイヤルアップ通信のためのモデム、有線データ通信ネットワーク通信のためのイーサネット(IEEE802.3)アダプタ、および無線データ通信ネットワーク通信のためのIEEE802.xアダプタを含む。
NOCビデオ・アダプタ322およびNOCコプロセッサ324はNOCの2つの模範的な使い方に過ぎないが、本明細書に記載されているNOCならびに作業パケットの制御は、NOCがデータ処理に有用であるコンテキストであれば、どのようなコンテキストでも見つけられることに留意されたい。
次に図4に関連して説明すると、本発明の諸実施形態による模範的なNOC402の機能ブロック図が提示されている。NOC402は、図3に示されているNOCビデオ・アダプタ322またはNOCコプロセッサ324あるいはその両方として利用可能な模範的なNOCである。NOC402は、集積回路チップ400上に実現され、ホスト・コンピュータ104(たとえば、図3に示されているプロセッサ304)によって制御される。NOC402は、統合プロセッサ(「IP」)ブロック404と、ルータ410と、メモリ通信コントローラ406と、ネットワーク・インターフェース・コントローラ408とを含む。各IPブロック404は、専用メモリ通信コントローラ406および専用ネットワーク・インターフェース・コントローラ408によりルータ410に対して適合されている。各メモリ通信コントローラ406は、IPブロック404とメモリ(たとえば、オンチップ・メモリ414またはオフチップ・メモリ412あるいはその両方)との間の通信を制御し、各ネットワーク・インターフェース・コントローラ408は、ルータ410によりIPブロック間通信を制御する。
NOC402では、各IPブロック404は、NOC402内のデータ処理のためのビルディング・ブロックとして使用される同期または非同期論理設計の再使用可能ユニットを表す。「IPブロック」という用語は、「知的財産ブロック」と呼ばれることもあり、したがって、IPブロック404は、ある当事者によって所有され、ある当事者の知的財産であり、半導体回路の他のユーザまたは設計者にライセンス供与される設計として指定される。しかし、本発明の範囲では、IPブロックは任意の特定の所有権の対象とするという要件はまったくなく、したがって、この用語は本明細書では必ず「統合プロセッサ・ブロック」として詳述される。したがって、ここで指定されるIPブロック404は、知的財産の主題である場合もあれば、主題ではない場合もある、論理、セル、またはチップ・レイアウト設計の再使用可能ユニットである。さらに、IPブロック404は、特定用途向け集積回路(ASIC)チップ設計またはフィールド・プログラマブル・ゲート・アレイ(FPGA)論理設計として形成可能な論理コアである。
類推によってIPブロックを説明すると、IPブロックがNOC設計のためのものであり、ライブラリがコンピュータ・プログラミングのためのものであり、離散集積回路コンポーネントがプリント回路板設計のためのものであるということになる。本発明の諸実施形態によるNOCでは、IPブロックは、汎用ゲート・ネットリストとして、完全な特殊目的または汎用マイクロプロセッサとして、あるいは当業者にとって思い浮かぶ他の方法で、実現することができる。ネットリストは、高レベル・プログラム・アプリケーションのためのアセンブリ・コード・リストに類似したIPブロックの論理機能のブール代数表現(ゲート、標準セル)である。また、NOCは、たとえば、VerilogまたはVHSICハードウェア記述言語(VHDL)などのハードウェア記述言語で記述された合成可能な形で実現することもできる。ネットリストおよび合成可能な実現例に加えて、NOCは、下位レベルの物理的記述で配布することもできる。シリアライザ/デシリアライザ(SERDES)、フェイズロック・ループ(PLL)、デジタル・アナログ変換器(DAC)、アナログ・デジタル変換器(ADC)などのアナログIPブロック・エレメントは、グラフィック・データ・システムII(GDSII)などのトランジスタレイアウト・フォーマットで配布することができる。IPブロックのデジタル・エレメントもレイアウト・フォーマットで提供されることもある。
図4に示されている各IPブロック404は、メモリ通信コントローラ406によりルータ410に対して適合されている。各メモリ通信コントローラは、IPブロックとメモリとの間のデータ通信を提供するように適合された同期および非同期論理回路の集合である。IPブロックとメモリとの間のこのような通信の例としては、メモリ・ロード命令およびメモリ・ストア命令を含む。メモリ通信コントローラ406については、以下の図5においてより詳細に説明する。
また、図4に描写されている各IPブロック404は、ネットワーク・インターフェース・コントローラ408によりルータ410に対して適合されている。各ネットワーク・インターフェース・コントローラ408は、IPブロック404同士のルータ410による通信を制御する。IPブロック同士の通信の例としては、並列アプリケーションおよびパイプライン化アプリケーションにおいてIPブロック間でデータを処理するための命令とそのデータを伝達するメッセージ(たとえば、メッセージ/データ・パケット)を含む。ネットワーク・インターフェース・コントローラ408については、以下の図5においてより詳細に説明する。
ルータ410およびルータ間のリンク420は、図4に示されているNOC402のネットワーク操作を実現する。リンク420は、すべてのルータを接続する物理的な並列ワイヤ・バス上に実現されたパケット構造である。すなわち、各リンクは、すべてのヘッダ情報およびペイロード・データを含む、データ交換パケット全体を同時に収容するために十分な幅のワイヤ・バス上に実現される。パケット構造が、たとえば、8バイトのヘッダと56バイトのペイロード・データを含む64バイトを含む場合、各リンクの範囲を定めるワイヤ・バスは64バイト幅であり、したがって、512本のワイヤを必要とする。加えて、各リンク420は双方向性であり、したがって、リンク・パケット構造が64バイトを含む場合、ワイヤ・バスは、実際にはネットワーク内の各ルータ410とその隣接ルータ410のそれぞれとの間の1024本のワイヤを含む。1つのメッセージは2つ以上のパケットを含むことができるが、各パケットはワイヤ・バスの幅に正確に収まる。ルータとワイヤ・バスの各セクションとの間の接続をポートという場合、各ルータは、ネットワーク上の4つの方向のデータ伝送のそれぞれについて1つずつと、メモリ通信コントローラおよびネットワーク・インターフェース・コントローラにより特定のIPブロックに対してルータを適合させるための第5のポートという5つのポートを含む。
上記の通り、各メモリ通信コントローラ406は、IPブロックとメモリとの間の通信を制御する。メモリは、オフチップ・メインRAM412、メモリ通信コントローラ406によりIPブロックに直接接続されるオンチップ・メモリ415、IPブロックとして使用可能になっているオンチップ・メモリ414、およびオンチップ・キャッシュを含むことができる。図4に示されているNOC402では、たとえば、オンチップ・メモリ(414、415)のいずれかをオンチップ・キャッシュ・メモリとして実現することができる。これらの形式のメモリはいずれも、IPブロックに直接付加されたメモリの場合でも、物理アドレスまたは仮想アドレスの同じアドレス空間に配置することができる。したがって、このようなメモリはネットワーク上のどこでも任意のIPブロックから直接アドレス指定することができるので、メモリ・アドレス指定メッセージはIPブロックに対して全面的に双方向性にすることができる。IPブロック上のオンチップ・メモリ414は、そのIPブロックまたはNOC内の任意の他のIPブロックからアドレス指定することができる。オンチップ・メモリ415は、メモリ通信コントローラに直接付加され、そのメモリ通信コントローラによってネットワークに対して適合されるIPブロックによってアドレス指定することができる。また、オンチップ・メモリ415は、NOC402内のどこでも任意の他のIPブロック404からアドレス指定することもできる。
模範的なNOC402は、2つのメモリ管理ユニット(「MMU:MemoryManagement Unit」)407および409を含み、本発明の諸実施形態によるNOCのための2つの代替メモリ・アーキテクチャを例示している。MMU407は、特定のIPブロック404で実現され、そのIPブロック404内のプロセッサが仮想メモリで動作できるようにし、NOC402の残りのアーキテクチャ全体が物理的なメモリ・アドレス空間で動作できるようにする。MMU409は、ポート416として参照されるデータ通信ポートによりNOCに接続されたオフチップとして実現される。ポート416は、NOC402とMMU409との間の信号を伝導するために必要なピンおよびその他の相互接続部ならびにNOCパケット・フォーマットから外部MMU409によって要求されるバス・フォーマットにメッセージ・パケットを変換するために十分な知能を含む。MMU409の外部位置とは、NOC402のすべてのIPブロック404内のすべてのプロセッサが仮想メモリ・アドレス空間で動作することができ、オフチップ・メモリの物理アドレスへのすべての変換がオフチップMMU409によって処理されることを意味する。
MMU407および409の使用により例示される2つのメモリ・アーキテクチャに加えて、ポート418として描写されているデータ通信ポートは、本発明の諸実施形態によるNOCにおいて有用な第3のメモリ・アーキテクチャを例示するものである。ポート418は、NOC402のIPブロック404とオフチップ・メモリ412との間の直接接続を提供する。処理経路内にMMUがまったくない場合、このアーキテクチャはNOCのすべてのIPブロックによる物理アドレス空間の利用を可能にする。このアドレス空間を双方向的に共用する際に、NOCのすべてのIPブロックは、ポート418に直接接続されたIPブロックにより向けられた、ロードおよびストアを含む、メモリ・アドレス指定メッセージによりアドレス空間内のメモリにアクセスすることができる。ポート418は、NOCとオフチップ・メモリ412との間の信号を伝導するために必要なピンおよびその他の相互接続部ならびにNOCパケット・フォーマットからオフチップ・メモリ412によって要求されるバス・フォーマットにメッセージ・パケットを変換するために十分な知能を含む。
図4に示されている模範的なNOC402では、IPブロック404の1つはホスト・インターフェース・プロセッサ405として指定される。ホスト・インターフェース・プロセッサ405は、NOC402とホスト・コンピュータ104(図1に紹介されている)との間のインターフェースを提供する。ホスト・インターフェース・プロセッサ405は、たとえば、ホスト・コンピュータからNOCデータ処理要求を受信し、IPブロック間でディスパッチすることを含む、データ処理サービスをNOC上の他のIPブロックに提供する。
ホスト・インターフェース・プロセッサ405は、ポート417などのデータ通信ポートにより、より大型のホスト・コンピュータ104(初めは図1に描写されている)に接続される。ポート417は、NOC402とホスト・コンピュータ104との間の信号を伝導するために必要なピンおよびその他の相互接続部ならびにNOC402からホスト・コンピュータ104によって要求されるバス・フォーマットにメッセージ・パケットを変換するために十分な知能を含む。図3に示されているコンピュータ302内のNOCコプロセッサ324の例では、このようなポートは、NOCコプロセッサ324とバス・アダプタ310との間のフロント・サイド・バス330に必要なプロトコルと、NOCコプロセッサ324のリンク構造とのデータ通信フォーマット変換を可能にするであろう。
各グループの要素404、406、408、および410は、NOC402内のノード422として表示し参照することができることに留意されたい。
次に図5を参照すると、本発明の諸実施形態によるNOC402の追加の詳細が提示されている。図4および図5に描写されている通り、NOC402は、チップ(たとえば、図4に示されているチップ400)上に実現され、統合プロセッサ(「IP」)ブロック404、ルータ410、メモリ通信コントローラ406、およびネットワーク・インターフェース・コントローラ408を含む。各IPブロック404はメモリ通信コントローラ406およびネットワーク・インターフェース・コントローラ408によりルータ410に対して適合される。各メモリ通信コントローラ406はIPブロックとメモリとの間の通信を制御し、各ネットワーク・インターフェース・コントローラ408はルータ410によるIPブロック間通信を制御する。図5の例では、その構造および動作に関するより詳細な説明を支援するために、メモリ通信コントローラ406およびネットワーク・インターフェース・コントローラ408によりルータ410に対して適合されたIPブロック404のセット522が拡大されている。図5の例のIPブロック、メモリ通信コントローラ、ネットワーク・インターフェース・コントローラ、およびルータはいずれも、拡大セット522と同じように構成される。
図5の例では、各IPブロック404は、1つまたは複数のコア550を含むコンピュータ・プロセッサ526と、I/O機能524とを含む。この例では、コンピュータ・メモリは、各IPブロック404内のランダム・アクセス・メモリ(「RAM」)528のセグメントによって表される。図4の例に関連して上述したように、このメモリは、各IPブロック上のその内容がNOC内の任意のIPブロックからアドレス指定可能でありアクセス可能である物理アドレス空間のセグメントを占有することができる。各IPブロック上のプロセッサ526、I/O機能524、およびメモリ(RAM528)は、一般にプログラム可能なマイクロコンピュータとしてIPブロックを効果的に実現する。しかし、上記で説明したように、本発明の範囲では、IPブロックは一般に、NOC内のデータ処理のためのビルディング・ブロックとして使用される同期または非同期論理の再使用可能ユニットを表す。したがって、一般にプログラム可能なマイクロコンピュータとしてIPブロックを実現することは、説明のために有用な共通の一実施形態であるが、本発明の制限ではない。
図5に示されているNOC402では、各メモリ通信コントローラ406は複数のメモリ通信実行エンジン540を含む。各メモリ通信実行エンジン540は、ネットワーク・インターフェース・コントローラ408とIPブロック404との間の双方向メモリ通信命令の流れ(544、545、546)を含む、IPブロック404からのメモリ通信命令を実行できるようになっている。メモリ通信コントローラによって実行されるメモリ通信命令は、特定のメモリ通信コントローラによりルータに対して適合されたIPブロックからだけでなく、NOC402内のどこでも任意のIPブロック404からも発生することができる。すなわち、NOC402内の任意のIPブロック404は、メモリ通信命令を生成し、そのメモリ通信命令の実行のためにNOC402のルータ410により他のIPブロックに関連する他のメモリ通信コントローラにそのメモリ通信命令を伝送することができる。このようなメモリ通信命令は、たとえば、変換索引バッファ制御命令、キャッシュ制御命令、バリア命令、ならびにメモリ・ロードおよびストア命令を含むことができる。
描写されているメモリ通信実行エンジン540のそれぞれは、完全なメモリ通信命令を単独でならびに他のメモリ通信実行エンジン540と並列に実行できるようになっている。メモリ通信実行エンジン540は、メモリ通信命令の同時スループットのために最適化されたスケーラブル・メモリ・トランザクション・プロセッサを実現する。メモリ通信コントローラ406は複数のメモリ通信実行エンジン540をサポートし、そのすべてのエンジンは複数のメモリ通信命令を同時実行するために同時に動作する。新しいメモリ通信命令はメモリ通信コントローラ406によって各メモリ通信実行エンジン540に割り振られ、メモリ通信実行エンジン540は複数の応答イベントを同時に受け入れることができる。この例では、メモリ通信実行エンジン540はすべて同一である。したがって、メモリ通信コントローラ406によって同時に処理できるメモリ通信命令の数のスケーリングは、メモリ通信実行エンジン540の数をスケーリングすることによって実現される。
図5に描写されているNOC402では、各ネットワーク・インターフェース・コントローラ408は、ルータ410によりIPブロック404間で伝送するためにコマンド・フォーマットからネットワーク・パケット・フォーマットに通信命令を変換できるようになっている。通信命令は、IPブロック410によるかまたはメモリ通信コントローラ406によってコマンド・フォーマットで公式化され、コマンド・フォーマットでネットワーク・インターフェース・コントローラ408に提供される。コマンド・フォーマットは、IPブロック404およびメモリ通信コントローラ406のアーキテクチャ・レジスタ・ファイルに準拠するネイティブ・フォーマットである。ネットワーク・パケット・フォーマットは、ネットワークのルータ410による伝送に必要なフォーマットである。このようなメッセージはそれぞれ、1つまたは複数のネットワーク・パケットから構成される。ネットワーク・インターフェース・コントローラでコマンド・フォーマットからパケット・フォーマットに変換されるこのような通信命令の例としては、IPブロックとメモリとの間のメモリ・ロード命令およびメモリ・ストア命令を含む。このような通信命令は、並列アプリケーションおよびパイプライン化アプリケーションにおいてIPブロック間でデータを処理するための命令とそのデータを伝達するIPブロック間でメッセージを送信する通信命令も含むことができる。
図5に示されているNOC402では、各IPブロック404は、IPブロックのメモリ通信コントローラによりメモリとの間でメモリアドレスベースの通信を送信し、次にそのネットワーク・インターフェース・コントローラによりネットワークにメモリアドレスベースの通信を送信できるようになっている。メモリアドレスベースの通信は、IPブロックのメモリ通信コントローラのメモリ通信実行エンジンによって実行される、ロード命令またはストア命令などのメモリ・アクセス命令である。このようなメモリアドレスベースの通信は、典型的には、IPブロックで発生し、コマンド・フォーマットで公式化され、実行のためにメモリ通信コントローラに受け渡される。
アクセスすべきメモリはいずれも、NOC内の任意のメモリ通信コントローラに直接付加されたオンチップまたはオフチップの物理メモリ・アドレス空間内のどこにでも位置することができるか、またはどのIPブロックが任意の特定のメモリアドレスベースの通信を発生したかにかかわらず、NOCの任意のIPブロックにより最終的にアクセスすることができるので、多くのメモリアドレスベースの通信はメッセージ・トラフィックで実行される。メッセージ・トラフィックで実行されるすべてのメモリアドレスベースの通信は、(命令変換ロジック536を使用して)コマンド・フォーマットからパケット・フォーマットに変換し、メッセージに入れてネットワークにより伝送するために、メモリ通信コントローラから関連のネットワーク・インターフェース・コントローラに渡される。パケット・フォーマットに変換する際に、ネットワーク・インターフェース・コントローラは、メモリアドレスベースの通信によってアクセスすべき1つまたは複数のメモリ・アドレスに依存して、そのパケットに関するネットワーク・アドレスも識別する。メモリアドレスベースのメッセージはメモリ・アドレスでアドレス指定される。各メモリ・アドレスは、ネットワーク・インターフェース・コントローラによってネットワーク・アドレスにマッピングされ、典型的には、ある範囲の物理メモリ・アドレスを担当するメモリ通信コントローラのネットワーク位置にマッピングされる。メモリ通信コントローラ406のネットワーク位置は、当然、そのメモリ通信コントローラの関連ルータ410、ネットワーク・インターフェース・コントローラ408、およびIPブロック404のネットワーク位置でもある。各ネットワーク・インターフェース・コントローラ内の命令変換ロジック536は、NOCのルータによりメモリアドレスベースの通信を伝送するために、メモリ・アドレスをネットワーク・アドレスに変換することができる。
ネットワークのルータ410からメッセージ・トラフィックを受信すると、各ネットワーク・インターフェース・コントローラ408は、メモリ命令について各パケットを検査する。メモリ命令を含む各パケットは、受信側ネットワーク・インターフェース・コントローラに関連するメモリ通信コントローラ406に手渡され、そのネットワーク・インターフェース・コントローラは、パケットの残りのペイロードをIPブロックに送信してさらに処理する前に、メモリ命令を実行する。このようにして、メモリ内容はいつでも、IPブロックが特定のメモリ内容に依存するメッセージからの命令の実行を開始する前に、IPブロックによるデータ処理をサポートする準備ができている。
次に図5に描写されているNOC402に戻ると、各IPブロック404は、そのメモリ通信コントローラ406をバイパスし、IPブロックのネットワーク・インターフェース・コントローラ408によりネットワークに直接、IPブロック間のネットワーク・アドレス指定通信546を送信できるようになっている。ネットワーク・アドレス指定通信は、ネットワーク・アドレスによって他のIPブロックに向けられたメッセージである。このようなメッセージは、当業者にとって思い浮かぶように、パイプライン化アプリケーション内の作業データ、SIMDアプリケーション内のIPブロック間の単一プログラム処理のための複数データなどを伝送する。このようなメッセージは、NOCのルータによりメッセージが向けられるネットワーク・アドレスを把握している発生側IPブロックにより、開始からネットワーク・アドレス指定されるという点で、メモリアドレスベースの通信とは異なるものである。このようなネットワーク・アドレス指定通信は、そのI/O機能524によりIPブロックによってコマンド・フォーマットでIPブロックのネットワーク・インターフェース・コントローラに直接渡され、次にネットワーク・インターフェース・コントローラによってパケット・フォーマットに変換され、NOCのルータにより他のIPブロックに伝送される。このようなネットワーク・アドレス指定通信546は、任意の特定のアプリケーションにおけるそれぞれの使い方に応じて、潜在的にNOCの各IPブロックとの間で移行する双方向性である。しかし、各ネットワーク・インターフェース・コントローラは、関連ルータとの間でこのような通信を送受信(通信542)できるようになっており、各ネットワーク・インターフェース・コントローラは、関連IPブロックとの間でこのような通信を直接送受信(通信546)して、関連メモリ通信コントローラ406をバイパスできるようになっている。
図5の例の各ネットワーク・インターフェース・コントローラ408は、タイプ別にネットワーク・パケットを特徴付けて、ネットワーク上の仮想チャネルを実現できるようにもなっている。各ネットワーク・インターフェース・コントローラ408は、NOC上で伝送するためにパケット形式でルータ410に命令を受け渡す前に、各通信命令をタイプ別に分類し、ネットワーク・パケット・フォーマットのフィールドに命令のタイプを記録する仮想チャネル実現ロジック538を含む。通信命令タイプの例としては、IPブロック間ネットワークアドレスベースのメッセージ、要求メッセージ、要求メッセージへの応答、キャッシュに向けられた無効化メッセージ、メモリ・ロードおよびストア・メッセージ、ならびにメモリ・ロード・メッセージへの応答などを含む。
図5の例の各ルータ410は、経路指定ロジック530と、仮想チャネル制御ロジック532と、仮想チャネル・バッファ534とを含む。経路指定ロジックは、典型的には、ルータ410、リンク420、およびルータ間のバス・ワイヤによって形成されたネットワークにおけるデータ通信のためのデータ通信プロトコル・スタックを実現する同期および非同期論理のネットワークとして実現される。経路指定ロジック530は、当業者がオフチップ・ネットワークにおいてルーティング・テーブルと関連付けることができる機能を含み、少なくとも一部の実施形態のルーティング・テーブルはNOCで使用するには遅すぎ厄介なものであると見なされている。同期および非同期論理のネットワークとして実現された経路指定ロジックは、単一クロック・サイクル程度の高速で経路指定決定を行うように構成することができる。この例の経路指定ロジックは、ルータで受信した各パケットを転送するためのポートを選択することによりパケットを経路指定する。各パケットは、そのパケットが経路指定されるネットワーク・アドレスを含む。この例の各ルータは、バス・ワイヤ(520−A、520−B、520−C、520−D)により他のルータに接続された4つのポート521と、ネットワーク・インターフェース・コントローラ408およびメモリ通信コントローラ406により各ルータをその関連IPブロック404に接続する第5のポート523という5つのポートを含む。
上記でメモリアドレスベースの通信について説明する際に、各メモリ・アドレスは、ネットワーク・インターフェース・コントローラによって、メモリ通信コントローラのネットワーク位置であるネットワーク・アドレスにマッピングされたものとして説明されている。メモリ通信コントローラ406のネットワーク位置は、当然、そのメモリ通信コントローラの関連ルータ410、ネットワーク・インターフェース・コントローラ408、およびIPブロック404のネットワーク位置でもある。したがって、IPブロック間通信またはネットワークアドレスベースの通信では、アプリケーションレベルのデータ処理においてNOCのルータ、リンク、およびバス・ワイヤによって形成されたネットワーク内のIPブロックの位置としてネットワーク・アドレスを表示することも典型的なことである。図4は、このようなネットワークの編成の1つが行と列のメッシュになっており、たとえば、そのメッシュの関連ルータ、IPブロック、メモリ通信コントローラ、およびネットワーク・インターフェース・コントローラからなる各セット用の固有の識別子またはそのメッシュ内のこのような各セットのx、y座標のいずれかとして、各ネットワーク・アドレスを実現できることを例示していることに留意されたい。
図5に描写されているNOC402では、各ルータ410は2つまたはそれ以上の仮想通信チャネルを実現し、各仮想通信チャネルは通信タイプによって特徴付けられる。通信命令タイプ、したがって、仮想チャネル・タイプとしては、IPブロック間ネットワークアドレスベースのメッセージ、要求メッセージ、要求メッセージへの応答、キャッシュに向けられた無効化メッセージ、メモリ・ロードおよびストア・メッセージ、ならびにメモリ・ロード・メッセージへの応答など、上述のものを含む。仮想チャネルをサポートして、図5に描写されている各ルータ410は、仮想チャネル制御ロジック532および仮想チャネル・バッファ534も含む。仮想チャネル制御ロジック532は、それに割り当てられた通信タイプについて各受信パケットを検査し、ポートによりNOC上の隣接ルータに伝送するためにその通信タイプに関する発信仮想チャネル・バッファ内に各パケットを置く。
各仮想チャネル・バッファ534は有限の記憶空間を有する。多くのパケットが短期間に受信されると、仮想チャネル・バッファはいっぱいになる可能性があり、したがって、それ以上パケットをバッファに入れることができなくなる。他のプロトコルでは、そのバッファがいっぱいである仮想チャネル上に到着したパケットは除去されるであろう。しかし、この例の各仮想チャネル・バッファ534は、バス・ワイヤの制御信号により、仮想チャネルにおける伝送を中断する、すなわち、特定の通信タイプのパケットの伝送を中断するよう、仮想チャネル制御ロジックにより周囲のルータに勧告できるようになっている。ある仮想チャネルがこのように中断されると、他のすべての仮想チャネルは影響を受けず、全能力で動作し続けることができる。制御信号は、各ルータから各ルータの関連ネットワーク・インターフェース・コントローラ408まで全面的に有線になる。各ネットワーク・インターフェース・コントローラは、このような信号を受信すると、その関連メモリ通信コントローラ406からまたはその関連IPブロック404から、中断された仮想チャネルに関する通信命令を受け入れることを拒否するよう構成される。このようにして、仮想チャネルの中断は、発生側IPブロックまで全面的に、仮想チャネルを実現するすべてのハードウェアに影響する。
仮想チャネルにおけるパケット伝送を中断することによる影響の1つは、図5のアーキテクチャでどのパケットも除去されないことである。たとえば、インターネット・プロトコルなど、何らかの信頼できないプロトコルでパケットが除去される可能性のある状況をルータが検出した場合、バッファ空間がもう一度使用可能になり、パケットを除去する必要性が解消されるまで、図5の例のルータはその仮想チャネル・バッファ534およびその仮想チャネル制御ロジック532により仮想チャネル内のパケットのすべての伝送を中断する。したがって、図5に描写されているNOC402は、極めて薄い層のハードウェアにより高信頼性のネットワーク通信プロトコルを実現する。
次に図6を参照すると、元々は図5に提示されているコア550の追加の模範的な詳細が提示されている。コア550は、統一されたレベル2(L2)キャッシュ616と、それぞれ二叉のレベル1(L1)の命令(I)キャッシュ618およびデータ(D)キャッシュ620とを含む、オンチップ・マルチレベル・キャッシュ階層を含む。当業者にとって周知の通り、キャッシュ616、618、および620は、システム・メモリ(たとえば、図3に示されているRAM306)内のメモリ位置に対応するキャッシュ・ラインへの低待ち時間アクセスを可能にする。
命令取り出しアドレス・レジスタ(IFAR:instructionfetch address register)630内に常駐する有効アドレス(EA:effectiveaddress)に応答して、処理のためにL1 Iキャッシュ618から命令が取り出される。各サイクル中に、条件付き分岐命令の予測による投機的ターゲット経路(speculative target path)および順次アドレスを提供する分岐予測ユニット(BPU:branch prediction unit)636、フラッシュおよび割り込みアドレスを提供するグローバル完了テーブル(GCT:global completion table)638、予測された条件付き分岐命令の解決による非投機的アドレス(non-speculative address)を提供する分岐実行ユニット(BEU:branchexecution unit)692という3つのソースのうちの1つからIFAR630に新しい命令取り出しアドレスをロードすることができる。分岐履歴テーブル(BHT:branch history table)635はBPU636に関連するものであり、今後の分岐命令の予測を支援するために条件付き分岐命令の解決がそこに記録される。
IFAR630内の命令取り出しアドレスなどの有効アドレス(EA)は、プロセッサによって生成された命令またはデータのアドレスである。EAは、セグメント・レジスタおよびそのセグメント内のオフセット情報を指定する。メモリ内のデータ(命令を含む)にアクセスするために、EAは、1つまたは複数のレベルの変換により、そのデータまたは命令が保管されている物理的位置に関連する実アドレス(RA:real address)に変換される。
コア550内では、有効/実アドレス変換は、メモリ管理ユニット(MMU)および関連のアドレス変換機構によって実行される。好ましくは、命令アクセスおよびデータ・アクセスのために別々のMMUが提供される。図6には、明瞭にするために、単一のMMU661が例示されており、命令ストア・ユニット(ISU:Instruction Store Unit)601への接続のみを示している。しかし、当業者であれば、MMU611が好ましくはロード/ストア・ユニット(LSU:load/store unit)696および698ならびにメモリ・アクセスを管理するために必要な他のコンポーネントへの接続(図示せず)も含むことを理解するであろう。MMU611は、データ変換索引バッファ(DTLB:Data Translation Lookaside Buffer)612および命令変換索引バッファ(ITLB:Instruction Translation Lookaside Buffer)613を含む。各TLBは最近参照されたページ・テーブル項目を含み、その項目はデータ(DTLB612)または命令(ITLB613)についてEAをRAに変換するためにアクセスされる。ITLB613からの最近参照されたEA/RA変換は、EOP有効/実アドレス・テーブル(ERAT:effective-to-real address table)632にキャッシュされる。
ERAT632によりIFAR630に含まれるEAを変換し、Iキャッシュ・ディレクトリ634内の実アドレス(RA)をルックアップした後に、IFAR630内のEAに対応する命令のキャッシュ・ラインがL1 Iキャッシュ618に常駐しないことをヒット/ミス・ロジック622が判断した場合、ヒット/ミス・ロジック622は、Iキャッシュ要求バス624を介して要求アドレスとしてL2キャッシュ616にRAを提供する。このような要求アドレスは、最近のアクセス・パターンに基づいてL2キャッシュ616内の事前取り出しロジックによって生成することもできる。要求アドレスに応答して、L2キャッシュ616は複数命令のキャッシュ・ラインを出力し、その命令は、おそらく任意選択の事前デコード・ロジック602を通過した後、Iキャッシュ再ロード・バス626を介して事前取り出しバッファ(PB:prefetch buffer)628およびL1 Iキャッシュ618にロードされる。
IFAR630内のEAによって指定されたキャッシュ・ラインがL1キャッシュ618内に常駐すると、L1 Iキャッシュ618は、分岐予測ユニット(BPU)636および命令取り出しバッファ(IFB)640の両方にキャッシュ・ラインを出力する。BPU636は、複数命令のキャッシュ・ラインを走査して分岐命令を捜し、条件付き分岐命令があれば、その結果を予測する。分岐予測後に、BPU636は、上述の通り、IFAR630に投機的命令取り出しアドレスを供給し、条件付き分岐命令がその後、分岐実行ユニット692によって解決されたときに予測の正確さを決定できるように、分岐命令キュー664にその予測を渡す。
IFB640は、複数命令のキャッシュ・ラインが命令変換ユニット(ITU)642によって変換できるまで、L1 Iキャッシュ618から受信した複数命令のキャッシュ・ラインを一時的にバッファリングする。コア550の例示されている実施形態では、ITU642は、ユーザ命令セット・アーキテクチャ(UISA:user instruction set architecture)命令からの命令を、コア550の実行ユニットによって直接実行可能な、おそらく異なる数の内部ISA(IISA:internal ISA)命令に変換する。このような変換は、たとえば、読み取り専用メモリ(ROM)テンプレートに保管されたマイクロコードを参照することにより、実行することができる。少なくともいくつかの実施形態では、UISA/IISA変換の結果、UISA命令とは異なる数のIISA命令または対応するUISA命令とは異なる長さのIISA命令あるいはその両方が得られる。結果として得られるIISA命令は、次に、グローバル完了テーブル638によって命令グループに割り当てられ、そのメンバは相互に対して順不同にディスパッチし実行することが許可される。グローバル完了テーブル638は、それに関する実行を少なくとも1つの関連EAによって完了する必要がある各命令グループを追跡し、その関連EAは好ましくは命令グループ内の最も古い命令のEAである。
UISA/IISA命令変換後に、命令は、命令タイプに基づいて、おそらく順不同に、ラッチ644、646、648、および650のうちの1つにディスパッチされる。すなわち、分岐命令およびその他の条件レジスタ(CR:condition register)変更命令はラッチ644にディスパッチされ、固定小数点およびロード・ストア命令はラッチ646および648のいずれか一方にディスパッチされ、浮動小数点命令はラッチ650にディスパッチされる。実行結果を一時的に保管するためにリネーム・レジスタを必要とする各命令には、次に、CRマッパ652、リンクおよびカウント(LC:link and count)レジスタ・マッパ654、例外レジスタ(XER:exceptionregister)マッパ656、汎用レジスタ(GPR:general-purpose register)マッパ658、および浮動小数点レジスタ(FPR:floating-point register)マッパ660のうちの適切なマッパによって1つまたは複数のリネーム・レジスタが割り当てられる。
ディスパッチされた命令は、次に、CR発行キュー(CRIQ:CRissue queue)662、分岐発行キュー(BIQ:branch issue queue)664、固定小数点発行キュー(FXIQ:fixed-point issue queue)666および668、ならびに浮動小数点発行キュー(FPIQ:floating-point issue queue)670および672のうちの適切な発行キューに一時的に入れられる。データ依存および逆依存が観察される限り、実行のために発行キュー662、664、666、668、670、および672から、処理装置603の実行ユニットに対し適切な機会に命令を発行することができる。しかし、いずれかの命令を再発行する必要がある場合、命令の実行が完了し、結果データがある場合にそのデータが書き戻されるまで、命令は発行キュー662〜672に維持される。
例示されている通り、コア550の実行ユニットは、CR変更命令を実行するためのCRユニット(CRU)690、分岐命令を実行するための分岐実行ユニット(BEU)692)、固定小数点命令を実行するための2つの固定小数点ユニット(FXU)694および605、ロードおよびストア命令を実行するための2つのロード/ストア・ユニット(LSU)696および698、浮動小数点命令を実行するための2つの浮動小数点ユニット(FPU)606および604を含む。実行ユニット690〜604のそれぞれは、好ましくは、いくつかのパイプライン・ステージを有する実行パイプラインとして実現される。
実行ユニット690〜604のうちの1つにおける実行中に、命令は、実行ユニットに結合されたレジスタ・ファイル内の1つまたは複数の構築レジスタまたはリネーム・レジスタあるいはその両方からのオペランドがある場合にそのオペランドを受信する。CR変更命令またはCR依存命令を実行しているときに、CRU690およびBEU692はCRレジスタ・ファイル680にアクセスし、そのレジスタ・ファイルは好ましい一実施形態では1つのCRと、それぞれが1つまたは複数のビットから形成されたいくつかの個別フィールドを含むいくつかのCRリネーム・レジスタとを含む。これらのフィールドの中には、ある値(典型的には命令の結果またはオペランド)がゼロより小さいか、ゼロより大きいか、またはゼロに等しいかどうかをそれぞれ示すLT、GT、EQフィールドがある。リンクおよびカウント・レジスタ(LCR)ファイル682は、それぞれのカウント・レジスタ(CTR)、リンク・レジスタ(LR)、およびリネーム・レジスタを含み、それによりBEU692は条件付き分岐を解決して経路アドレスを入手することもできる。同期している汎用レジスタ・ファイル(GPR)684および686は、レジスタ・ファイルを複製し、FXU694および605ならびにLSU696および698によってアクセスされ生成された固定小数点値および整数値を保管する。浮動小数点レジスタ・ファイル(FPR)688は、GPR684および686のように、同期レジスタの複製セットとして実現することもでき、FPU606および604による浮動小数点命令の実行ならびにLSU696および698による浮動小数点ロード命令の実行の結果として得られる浮動小数点値を含む。
実行ユニットが命令の実行を終了した後、その実行ユニットはGCT638に通知し、そのGCTはプログラムの順序で命令の完了をスケジュールする。CRU690、FXU694および605、またはFPU606および604のうちの1つによって実行された命令を完了するために、GCT638は実行ユニットに信号を送り、その実行ユニットは、割り当てられたリネーム・レジスタ(複数も可)からの結果データがある場合にそのデータを適切なレジスタ・ファイル内の1つまたは複数の構築レジスタに書き戻す。次に命令は発行キューから除去され、その命令グループ内のすべての命令が完了すると、GCT638から除去される。しかし、他のタイプの命令は異なる方法で完了される。
BEU692が条件付き分岐命令を解決し、取るべき実行経路の経路アドレスを決定すると、その経路アドレスはBPU636によって予測された投機的経路アドレスと比較される。経路アドレスが一致する場合、それ以上の処理は不要である。しかし、計算された経路アドレスが予測された経路アドレスと一致しない場合、BEU692は正しい経路アドレスをIFAR630に供給する。いずれかの場合、次に分岐命令をBIQ664から除去することができ、同じ命令グループ内の他のすべての命令が実行を完了すると、分岐命令をGCT638から除去することができる。
ロード命令の実行後、ロード命令を実行することによって計算された有効アドレスは、データERAT(例示せず)によって実アドレスに変換され、次に要求アドレスとしてL1 Dキャッシュ620に提供される。この時点で、ロード命令はFXIQ666または668から除去され、指示されたロードが実行されるまでロード・リオーダ・キュー(LRQ:load reorder queue)609に入れられる。要求アドレスがL1 Dキャッシュ620で見当たらない場合、要求アドレスはロード・ミス・キュー(LMQ:load miss queue)607に入れられ、それにより要求されたデータがL2キャッシュ616から取り出され、それに失敗すると、他のコア550またはシステム・メモリ(たとえば、図5に示されているRAM528)から取り出される。LRQ609は、排他的アクセス要求(たとえば、変更予定の読み取り(read-with-intent-to-modify))をスヌープし、未完了のロードに対して相互接続ファブリック(図示せず)上でフラッシュまたは強制終了し、ヒットが発生した場合、ロード命令を取り消して再発行する。ストア命令は、ストア命令の実行後にストア用の有効アドレスがそこにロードされるストア・キュー(STQ:store queue)610を利用して同様に完了する。STQ610からL1 Dキャッシュ620およびL2キャッシュ616のいずれか一方または両方にデータを保管することができる。
上記の通り、各ノード(たとえば、スレッド108a〜108dのそれぞれ)は、1つまたは複数のプロセッサ・コア(たとえば、図5に描写されているプロセッサ・コア(複数も可)550のうちの1つ)を含む。このようなプロセッサ・コアの模範的な一実施形態の追加の詳細は図7に提示されている。プロセッサ・コア550内には、有効/実アドレス・テーブル(ERAT:Effective-to-Real Address Table)632(上記の図6に示されている)が存在し、これは、ユーザ・アプリケーション(たとえば、図1に示されているユーザ・アプリケーション112)または作業単位メッセージ(たとえば、図1に示されているパケット110a〜110d)にすることができる作業単位708から種々のソフトウェア・スレッド704a〜704dをディスパッチするために使用される。作業単位708がプロセッサ・コア550によって受信されると、レジスタ710d、実行ユニット712d、および出力バッファ714dから構成された特定のハードウェア・スレッド716は、ソフトウェア・スレッド704d内の命令を実行することができる。上記の図6に関連して説明すると、模範的なハードウェア・スレッドは、FPRマッパ660、FPIQ672、FPR688、およびFPU604から構成することができる。もう1つの模範的なハードウェア・スレッドは、GPRマッパ658、FXIQ668、FXU605、およびGPR686から構成することができる。その他のものはFXU694、LSU698、CRU690、BEU692などを含むものとして企図することができるので、これらは模範的なハードウェア・スレッドである。
もう一度、図7を参照すると、種々のハードウェア・スレッド716、718、720、および722は、作業単位708からの異なるソフトウェア・スレッドを独立してまたは半自律的にあるいはその両方で実行することができる。
次に、図8に関連して、本発明のコンテキスト内で圧縮直接スレッド間通信バッファ802およびオペランド・マルチプレクサ(MUX)特殊目的レジスタ(SPR)804を以下のように模範的に利用する場合について考慮する。グラフィックス・アプリケーション806はNOC808内で実行する予定であると想定する。グラフィックス・アプリケーション806は、ホスト・コンピュータ810からディスパッチされるものであり、CDICB802およびMUX SPR804によって提供される直接スレッド間通信(DITC)を使用してNOC808の高スレッド化性を利用できるリアルタイム3次元(3D)投影およびラスタ化グラフィックス・アプリケーションである。より具体的には、DITCにより、グラフィックス・アプリケーション806からのグラフィックス・ワークロードの種々の部分を実行するためにノード812a〜812d(そのそれぞれは図4に描写されているノード422に類似している)またはスレッド(たとえば、図1に描写されているスレッド108a〜108d)あるいはその両方を割り当てることができる。したがって、ノード812aは、ソフトウェア・パイプラインの状態およびOpenGL glVertex3f()呼び出しなどの着信グラフィックス関数呼び出しを処理するホスト・インターフェース・スレッドにすることができる。次に、ノード812a(ハードウェア・ロジックと、任意選択で、ノード812aに関連する操作の実行に合わせて調整された特定のソフトウェアを含むもの)は、NOC作業パケット814aの形のデータおよび制御情報でそのDITC送信箱バッファ(図示せず)を充填し始める。以下により詳細に記載するプロセスおよびハードウェアを使用し、このチップ・パケットは初めに未圧縮で未整列であるが、NOC808内の次のノード/スレッドに伝送される前に圧縮され整列される。すなわち、図9に示されている未圧縮直接スレッド間通信バッファ(UDICB)902(図2に提示されているUDICB206に類似している)について考慮する。描写されている通り、UDICB902は、グラフィックス・プログラムのための赤(R)、緑(G)、青(B)、およびアルファ合成(A−イメージ透過性を制御するためのもの)データを処理するために使用されるデータを含む。しかし、上記の図2に記載されているものに類似したシナリオでは、UDICB902内のデータは未整列である(a〜c、e〜gなどの種々のワードの集合間に「穴(hole)」がある)。伝送トラフィックおよびバッファ内の無駄な空間を削減するために、UDICB902は直接スレッド間通信バッファ(DICB)圧縮/圧縮解除ロジック904によって圧縮され、このロジックについては以下の図10でより詳細に説明する。このDICB圧縮/圧縮解除ロジック904は、図8で前に紹介されている圧縮直接スレッド間通信バッファ(CDICB)802を生成する。同時に、対応するデータが生成され、オペランドMUX SPR804に格納される。後述の通り、この対応するデータは、CDICB802の編成上の保全性を維持するために、ノード内のプロセッサによって使用される前にCDICB802内に保管されたデータを再整列する(re-align)目的で、ならびにそのプロセッサによって使用された後で処理済みオペランドの整列をずらす目的で、ノード内のMUXを制御するためにMUX SPR804内に保管されたMUX制御データである。
NOC内の各ノード内に異なるMUX SPR804が保管される場合もあれば、NOC内のすべてのノードによって単一のMUX SPR804が利用される場合もある(図示の通り)ことに留意されたい。いずれのシナリオでも、調整ロジック(ハードウェアまたはソフトウェアあるいはその両方)を利用して、CDICB802内に保管されたオペランドの配向(すなわち、行のレイアウト)がCDICB802内に保管された元のオペランドとNOC内のノードによって処理され出力された処理済みオペランドとの間で一貫性を保持することを保証することができる。
図8に戻ると、ホスト・インターフェース・スレッド・ノード812aからの出力は作業パケット814a内にパッケージ化され、その作業パケット814aはNOC808内のネットワーク(図示せず)を介してノード812bに送信され、そのノード812bは作業パケット814aを受信し、頂点3次元変換(vertex 3D transform)、2次元への投影(projection to2D)、照明計算(lighting calculation)など、受信したパケット・データについて操作を実行する。次に、ノード(スレッド)812bは、ノード(スレッド)812cに伝送するために結果データおよび制御情報を作業パケット814bに格納する。ノード812cは、受信データについてラスタ化操作を実行し、ノード812dに伝送するために作業パケット814cに結果を出力する。ノード812dは、グラフィックス・アプリケーション806からのジョブについて最終操作を実行し、そのアプリケーションは表示すべきイメージのテクスチャ処理を含む。この最終操作は、グラフィックス・アプリケーション806によって提示されるジョブの実行を完了し、その結果、画面(たとえば、上記の図1に示されている出力装置106)上にディスプレイ・イメージを生成するための最終信号(たとえば、デジタル・イメージ表現)が得られる。
NOC808内のノード812a〜812dのそれぞれが異なる専用ナノカーネル816a〜816dに関連付けることができることに留意されたい。ナノカーネルは、1)ノード812a〜812d間の作業単位メッセージ(たとえば、パケット814a〜814d)の伝送、および2)MUX SPR804からのオペランド制御データの使用によりCDICB802内のオペランドへのアクセスの管理および制御のみが可能である1つの細かいオペレーティング・システム・ソフトウェア論理として定義される。
次に図10を参照すると、ノード1022(たとえば、図8に示されているノード812a〜812dのうちの1つ)内にDICB圧縮/圧縮解除ロジック904の追加の詳細が示されている。図8のノード812a〜812dのそれぞれについて上述した通り、ノード1022はCDICB802からのデータ・ワード(たとえば、ノード1022内のベクトル実行ユニット1002などの実行ロジックに供給する予定のオペランド)にアクセスする。CDICB802は適切に整列された未圧縮バッファ(たとえば、図9に示されているUDICB902)から整列がずれ/圧縮されているものと想定されることに留意されたい。このような整列ずれ/圧縮は、ハードウェアのみ(図示せず)または次に図10で説明するソフトウェア制御プロセスのいずれかを使用して実行することができる。
初めに、CDICB802からのオペランドは、第1のセットのMUX1004に入力される。第1のセットのMUX1004は、第1のセットのMUX1004に付加された制御ライン(図示せず)を使用して、CDICB802から受信したオペランドの再整列を制御する。これらの制御ラインは、MUX SPR804からの制御データを利用するMUXコントローラ1006の制御下にある。この制御データは、CDICB802が上記のようにUDICB902から整列がずれ/圧縮されたときに作成されたものである。すなわち、MUX SPR804内のMUX制御データは、図9に示されている元のUDICB902内にあるときに結果的にこのようなオペランドが再整列されるように、CDICB802からのオペランドの「アンパック(unpacking)」を可能にする。次に、オペランド(ブランク・ブロックを含む)のこの再整列フォーマットは、本明細書に記載されている例では各読み取りサイクルで4ワードのデータ行を読み取るベクトル実行ユニット1002によって理解し処理することができるフォーマットになっている。
再整列された行のオペランドはバッファ1008に保管され、次にレジスタ・ファイル・アレイ1010に保管される。レジスタ・ファイル・アレイ1010から再整列された行のオペランドがバッファ1012に保管され、そのバッファ1012から特定のオペランドが、同じくMUXコントローラ1006、MUX SPR804、または作業パケット1016(たとえば、図1に示されているパケット110a〜110dまたは図8に示されている作業パケット814a〜814dのうちの1つ)内の情報あるいはこれらの組み合わせの制御下にある第2のセットのMUX1014によって選択的に読み取られる。たとえば、それがオペランドaおよびbのみを必要とすることを作業パケット1016が「把握している(know)」ものと想定する。この「知識(knowledge)」はMUXコントローラ1006に回され、そのコントローラ1006は、MUX SPR804によって提供された整列情報により、オペランドaおよびbのみがベクトル実行ユニット1002のためのバッファ1018に達するように、第2のセットのMUX1014を制御することができる。次にベクトル実行ユニット1002(図7に示されているものなどの複数の並列実行ユニットまたはハードウェア・スレッドを含むもの)は、オペランドaおよびbを処理し、処理済みオペランドa’およびb’をバッファ1020に出力する。次に、処理済みオペランドa’およびb’は、第2のセットのMUX1014によって抽出されて、CDICB802内の適切な記憶セルに挿入されるまで、もう一度システムを通過する。処理済みオペランドa’およびb’は、元の(前処理済み)オペランドaおよびbと同じCDICB802内のセルを占有することに留意されたい。
一実施形態では、第3のセットのMUX(図示せず)は、第1のセットのMUX1004について示されているものと実質的に同様に整列され構成される。第1のセットおよび第2のセットのMUXが提供される場合、第1のセットのMUXはCDICB802からの第1の行のデータの処理専用にすることができ、第3のセットのMUXはCDICB802からの第2の(次の)行のデータの処理専用になる。同様に、2つの単一セットのMUXについて上述したように種々の行のオペランドを同時に処理できるように、追加のセットのMUXを使用して、第2のセットのMUX1014を増強することができる。
本明細書で使用する「圧縮(compressed)」という用語は、上記で論じ例示されているように、バッファ内に空のセルがまったくないように、バッファまたはパケットに保管されたデータ・ワードを記述するものであることに留意されたい。この「圧縮」という用語は、本明細書では、エンコード・アルゴリズムを使用して情報がエンコードされ、その結果、元の未圧縮データを表現するためのビット数が少なくなるデータ圧縮を記述または定義するために使用されるわけではない。
次に図11に関連して説明すると、圧縮直接スレッド間通信バッファ(CDICB)からの整列がずれたオペランドを検索し再整列するために行われる模範的な諸ステップの高レベル流れ図が提示されている。開始ブロック1102の後、未圧縮直接スレッド間通信バッファ(UDICB)で検出されるオペランドは、圧縮直接スレッド間通信バッファ(CDICB)内で圧縮され(整列がずれ)、このように整列がずれた配向で保管される。ブロック1104に記載されているように、この圧縮/整列ずれの時点で、マルチプレクサ(MUX)制御データはMUX特殊目的レジスタ(SPR)に保管される。このMUX制御データは、ネットワーク・オン・ア・チップ(NOC)内のノード内の実行ユニットによって使用するためにオペランドを再整列するための後続ステップで使用されることになる。
ブロック1106に記載されているように、上記の図10に記載されているプロセスを使用して、MUX SPRからのMUX制御データを使用するNOC内のノードによってCDICBからオペランドが検索される。次に、MUX SPRからの整列データを使用して、CDICBからのオペランドをUDICBで検出されたものと同じ整列に再整列する(ブロック1108)。ベクトル実行ユニット内の適切な実行ユニットに適切なオペランドを供給するために、この再整列編成は、特定の順序/配向でオペランドを読み取る必要がある可能性のあるノード内のベクトル実行ユニットによって要求される。
ベクトル実行ユニット内の実行ユニットが選択されたオペランドを処理した後(ブロック1110)、MUX SPRはMUXコントローラに制御情報を提供して、処理済みオペランドを再度整列をずらし、再圧縮し(ブロック1112)、それをCDICBに伝送し、そこに保管する(ブロック1114)。CDICBからの他のオペランドはまったく不要であると想定して、プロセスは終了ブロック1116で終了する。
本発明の少なくともいくつかの態様は代わって、プログラムを含むコンピュータ可読媒体で実現できることを理解されたい。本発明の諸機能を定義するプログラムは、書き込み不能記憶媒体(たとえば、CD−ROM)、書き込み可能記憶媒体(たとえば、ハード・ディスク・ドライブ、読み書きCD−ROM、光学媒体)を無制限に含む、様々な有形信号伝送媒体、ならびに、イーサネット、インターネット、無線ネットワーク、同様のネットワーク・システムなどのコンピュータ・ネットワークおよび電話網などの非有形通信媒体を介して、データ記憶システムまたはコンピュータ・システムに配布することができる。したがって、本発明における方法機能を指示するコンピュータ可読命令を伝達またはエンコードするときに、このような信号伝送媒体が本発明の代替諸実施形態を表すことを理解されたい。さらに、本明細書に記載されているハードウェア、ソフトウェア、またはソフトウェアとハードウェアの組み合わせあるいはそれらと同等の形の手段を有するシステムにより本発明を実現できることは言うまでもない。