(57)【特許請求の範囲】
【請求項１】
複数の処理コア内に配設される複数のハードウェア・スレッドであって、各処理コアが、レジスタ・ファイル、および前記複数のハードウェア・スレッドのうちの少なくとも１つのハードウェア・スレッドを含み、各処理コア内の前記レジスタ・ファイルが前記ハードウェア・スレッドに対応する複数のローカル・レジスタを含む、前記複数のハードウェア・スレッドと、
前記複数の処理コア間で結合される変数伝達ネットワークであって、前記複数の処理コアのうちの送信元処理コア内の送信元ハードウェア・スレッドと前記複数の処理コアのうちの送信先処理コア内の送信先ハードウェア・スレッドとの間で変数を通信するように構成される、前記変数伝達ネットワークと
前記レジスタ・ファイルに含まれる複数の変数レジスタであって、各変数レジスタが前記複数のハードウェア・スレッドのうちの個別のハードウェア・スレッドに割り振られる、前記複数の変数レジスタをさらに備え、前記送信先ハードウェア・スレッドに割り振られる前記変数レジスタ内の前記変数の格納に応答して前記送信先処理コアに前記変数を通信するように前記変数伝達ネットワークが構成される、前記複数の変数レジスタと
を備える、回路装置。
【請求項２】
前記複数の変数レジスタが各処理コアの前記レジスタ・ファイル内に設計され、各処理コア内に配設される依存性論理部が、前記レジスタ・ファイル内の複数のローカル・レジスタおよび前記複数の変数レジスタの両方についての依存性を取り扱う、請求項１に記載の回路装置。
【請求項３】
前記送信元ハードウェア・スレッドにより実行される命令に応答して前記送信先処理コアに前記変数を通信するように前記変数伝達ネットワークが構成される、請求項１に記載の回路装置。
【請求項４】
前記命令が、前記送信元処理コアの前記レジスタ・ファイル内の複数のローカル・レジスタのうちのローカル・レジスタから前記送信先ハードウェア・スレッドに割り振られる前記変数レジスタに前記変数を移動させるｐｕｔ命令を含む、請求項３に記載の回路装置。
【請求項５】
前記送信先ハードウェア・スレッドが前記変数伝達ネットワークを介して変数を受け取る準備ができているかどうかを示すクレジット・フラグを、前記送信先ハードウェア・スレッドに割り振られる前記変数レジスタが含み、前記送信先ハードウェア・スレッドが変数を受け取る準備ができていることを前記クレジット・フラグが示すまで、前記ｐｕｔ命令をストールするように前記送信元処理コアが構成される、請求項４に記載の回路装置。
【請求項６】
前記送信元処理コア内の前記送信先ハードウェア・スレッドに割り振られる前記変数レジスタ内の前記変数を、送信元処理コア内の送信元ハードウェア・スレッドが格納することに応答して、前記送信先処理コア内の前記送信元ハードウェア・スレッドに関連する前記変数レジスタで前記変数を提示するように前記変数伝達ネットワークが構成され、前記送信先ハードウェア・スレッドにより実行される命令に応答して、前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタから前記送信先処理コアの前記レジスタ・ファイル内のローカル・レジスタに前記変数を移動するように前記送信先ハードウェア・スレッドが構成される、請求項１に記載の回路装置。
【請求項７】
前記命令がｇｅｔ命令を含み、前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタが、前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタ内に有効なデータが記憶されているかどうかを示す有効フラグを含み、前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタ内に有効なデータが記憶されていることを前記有効フラグが示すまで、前記ｇｅｔ命令をストールするように前記送信先処理コアが構成される、請求項６に記載の回路装置。
【請求項８】
前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタから前記送信先処理コアの前記レジスタ・ファイル内のローカル・レジスタに前記変数を移動することに応答して、前記変数伝達ネットワークを介してクレジットを返すように前記送信先処理コアが構成される、請求項６に記載の回路装置。
【請求項９】
前記変数伝達ネットワークが、前記送信元処理コアと前記送信先処理コアとの間に結合される送信バスを備え、前記送信バスが、前記変数を通信するように構成される複数のデータ線、前記送信先ハードウェア・スレッド用に識別子を通信するように構成される少なくとも１つのスレッド識別子線、および有効なデータが前記複数のデータ線を介して通信されていることを示すように構成される有効線を含む、請求項１に記載の回路装置。
【請求項１０】
前記データ線、スレッド識別子線、および有効線のそれぞれが前記送信元処理コアにより駆動され、前記送信先処理コアにより駆動され前記送信先ハードウェア・スレッドによる前記変数の伝達が成功したことに応答して前記送信元処理コアにクレジットを返すように構成されるクレジット線を前記送信バスがさらに備える、請求項９に記載の回路装置。
【請求項１１】
前記送信バスが前記送信元処理コアから前記送信先処理コアに専用バスを備え、前記変数伝達ネットワークが複数の送信バスを備え、そのため、前記複数の処理コアのそれぞれが前記複数の処理コアのうちのそれぞれの他の処理コアへの専用バスを含む、請求項９に記載の回路装置。
【請求項１２】
前記送信バスが前記送信元処理コアから前記複数の処理コアのうちのそれぞれの他の処理コアに結合され、前記送信先処理コア用に識別子を通信するように構成される少なくとも１つのコア識別子線を前記送信バスがさらに含む、請求項９に記載の回路装置。
【請求項１３】
請求項１に記載の回路装置を含む、集積回路デバイス。
【請求項１４】
複数の処理コア内に配設される複数のハードウェア・スレッド間で変数を通信する方法であって、各処理コアがレジスタ・ファイルおよび前記複数のハードウェア・スレッドのうちの少なくとも１つのハードウェア・スレッドを含み、各処理コア内の前記レジスタ・ファイルが前記ハードウェア・スレッドに対応する複数のローカル・レジスタを含み、前記レジスタ・ファイルが複数の変数レジスタを含み、
前記複数の処理コアのうちの送信元処理コア内の送信元ハードウェア・スレッドを用いて、前記複数の処理コアのうちの送信先処理コア内の送信先ハードウェア・スレッドへの変数の伝達を開始するステップと、
前記変数の前記伝達を開始するステップに応答して、前記送信元処理コアから前記送信先処理コアに、前記送信元処理コアおよび前記送信先処理コアに結合された変数伝達ネットワークを介して前記変数を通信するステップと
を含み、
前記変数の前記伝達を開始するステップが、前記送信先ハードウェア・スレッドに割り振られる変数レジスタ内に前記変数を格納するステップを含み、前記変数レジスタが、マルチコア処理チップ上に配設される複数の変数レジスタの中にあり、各変数レジスタが前記複数のハードウェア・スレッドの中の個別のハードウェア・スレッドに割り振られる、
方法。
【請求項１５】
前記複数の変数レジスタが各処理コアの前記レジスタ・ファイル内に設計され、各処理コア内に配設される依存性論理部が、前記レジスタ・ファイル内の複数のローカル・レジスタおよび前記複数の変数レジスタの両方についての依存性を取り扱う、請求項１４に記載の方法。
【請求項１６】
前記変数の前記伝達を開始するステップが、前記送信元ハードウェア・スレッドを用いてｐｕｔ命令を実行するステップを含み、前記ｐｕｔ命令が前記送信元処理コアの前記レジスタ・ファイル内の複数のローカル・レジスタのうちのローカル・レジスタから前記送信先ハードウェア・スレッドに割り振られる前記変数レジスタに前記変数を移動させる、請求項１４に記載の方法。
【請求項１７】
前記送信先ハードウェア・スレッドが前記変数伝達ネットワークを介して変数を受け取る準備ができているかどうかを示すクレジット・フラグを、前記送信先ハードウェア・スレッドに割り振られる前記変数レジスタが含み、前記送信先ハードウェア・スレッドが変数を受け取る準備ができていることを前記クレジット・フラグが示すまで前記ｐｕｔ命令をストールするステップをさらに含む、請求項１６に記載の方法。
【請求項１８】
前記送信元処理コア内の前記送信先ハードウェア・スレッドに割り振られる前記変数レジスタ内の前記変数を、送信元処理コア内の送信元ハードウェア・スレッドが格納することに応答して、前記送信先処理コア内の前記送信元ハードウェア・スレッドに関連する前記変数レジスタで前記変数を提示するように前記変数伝達ネットワークが構成され、前記方法が、前記送信先ハードウェア・スレッドにより実行されるｇｅｔ命令に応答して、前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタから前記送信先処理コアの前記レジスタ・ファイル内の複数のローカル・レジスタのうちのローカル・レジスタに前記変数を移動するステップをさらに含み、前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタが、有効なデータが前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタに記憶されているかどうかを示す有効フラグを含み、前記方法が、有効なデータが前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタに記憶されていることを前記有効フラグが示すまで前記ｇｅｔ命令をストールするステップをさらに含む、請求項１４に記載の方法。
【請求項１９】
前記送信先処理コア内の前記送信元ハードウェア・スレッドに割り振られる前記変数レジスタから前記送信先処理コアの前記レジスタ・ファイル内の複数のローカル・レジスタのうちのローカル・レジスタに前記変数を移動するステップに応答して、前記変数伝達ネットワークを介してクレジットを返すステップをさらに含む、請求項１８に記載の方法。
【請求項２０】
前記変数伝達ネットワークが前記送信元処理コアと前記送信先処理コアとの間に結合される送信バスを備え、前記送信バスが、前記変数を通信するように構成される複数のデータ線、前記送信先ハードウェア・スレッド用に識別子を通信するように構成される少なくとも１つのスレッド識別子線、および有効なデータが前記複数のデータ線を介して通信されていることを示すように構成される有効線を含み、前記データ線、スレッド識別子線、および有効線のそれぞれが前記送信元処理コアにより駆動され、前記送信先処理コアにより駆動され前記送信先ハードウェア・スレッドへの前記変数の伝達が成功したことに応答して前記送信元処理コアにクレジットを返すように構成されるクレジット線を前記送信バスがさらに含む、請求項１４に記載の方法。
【請求項２１】
前記送信バスが前記送信元処理コアから前記送信先処理コアに専用バスを備え、前記変数伝達ネットワークが複数の送信バスを備え、そのため、前記複数の処理コアのそれぞれが前記複数の処理コアのうちのそれぞれの他の処理コアへの専用バスを含む、請求項２０に記載の方法。
【請求項２２】
前記送信バスが前記送信元処理コアから前記複数の処理コアのうちのそれぞれの他の処理コアに結合され、前記送信先処理コア用に識別子を通信するように構成される少なくとも１つのコア識別子線を前記送信バスがさらに含む、請求項２０に記載の方法。 
【請求項２３】
請求項１４〜２２の何れかに記載の方法の各ステップを、コンピュータに実行させるプログラム・コードを備える、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にデータ処理に関し、詳細には、プロセッサ・アーキテクチャおよびマルチスレッドに関する。
【背景技術】
【０００２】
半導体技術がクロック速度の増加に関して実質的な限界に刻々と近づき続けているので、設計者は、性能改善を得るために、プロセッサのアーキテクチャにおける並列処理にますます着目している。集積回路デバイスまたはチップのレベルでは、複数の処理コアが同じチップ上に配設され、別個のプロセッサ・チップ、またはある程度までは完全に別個のコンピュータと、ほとんど同じように機能することがしばしばある。加えて、コア内部でさえ、一定のタイプの動作を取り扱うことに特殊化した複数の実行ユニットを使用することで、並列処理が採用されている。実施するのに複数のクロック・サイクルがかかる場合がある一定の動作をステージに分割し、前の動作が完了する前に他の動作が開始されることが可能になるように、パイプライン化も多くの例で採用されている。複数の命令ストリームが並列に処理されることを可能にし、全体としてより多くの仕事が任意の所与のクロック・サイクルで実施されることを可能にするために、マルチスレッドも採用されている。
【０００３】
上述の技法を適用することの最終結果は、ハードウェア・スレッドのプールが、１つまたは複数のプロセッサ・チップ内および１つまたは複数のコンピュータ内の１つまたは複数の処理コア間に分散されるマルチスレッド化した処理環境を提供することができることであって、複数の命令ストリームを並列に処理することができる。技術が高くなると、プロセッサ・アーキテクチャは、数百または数千のハードウェア・スレッドをサポートすることが可能となり、複数のプロセッサがスーパーコンピュータおよび超並列コンピュータなどの高性能コンピューティング・システムに組み合わされると、数百万のハードウェア・スレッドをサポートする潜在能力があることが予想される。
【０００４】
しかし、効果的な並列処理には、マルチスレッド化した処理環境で動作するソフトウェア・アプリケーションが、マルチスレッド化能力を適切に利用することが必要となる。ソフトウェア開発者は、典型的には、シングル・スレッド化されたアプリケーションを開発することがより楽である。というのは、シングル・スレッド化されたアプリケーションは、典型的には、所望のタスクを実施するのに必要なステップのシーケンスに従うからである。マルチスレッド化のサポートは、直感で理解できないことがしばしばあり、スレッド自体の仕事をスレッドが完了することができる前にスレッドが必要とする、他のスレッドが仕事を完了するのを待つことに費やす可能性のある頻度を最小化するために、コンフリクトおよび依存性を最小化するよう考察する必要がしばしばある。例えば、他のスレッドにより計算されている値の、いくつかの組の平均を計算することを１つのスレッドが必要とする場合、そのスレッドは、他のスレッドの全てがそれぞれの値を計算するまで、スレッドの動作を実施できないことになる。一方、完全に独立したタスクを実施するスレッドは、典型的には、依存性問題からは影響を受けない。そのため、マルチスレッド化したアプリケーションを開発することに関連する努力の多くは、スレッド間依存性が最小化するように、タスクを比較的独立したスレッドに分割することに捧げられている。
【０００５】
マルチスレッド化したアプリケーションを開発することに関連する難点があるので、マルチスレッド化したアプリケーションの開発を簡略化するための技法について、当技術分野で、かなりの必要性が存在してきた。例えば、シングル・スレッド化されたアプリケーション・コードをマルチスレッド化したアプリケーション・コードに、例えば最適化コンパイラを使用して、コンパイル期間にプログラムで変換するために、かなりの努力がなされてきた。例えば、１つの方法論では、細粒化並列処理が採用されて、命令ストリーム中の順序付けたコードを複数の小さな順序付けないコード・セグメントに変換し、命令が命令ストリーム中に挿入され、データをコード・セグメント間で変数の形で受け渡す。１つのタイプの命令は、「ｐｕｔ」命令であり、これは、変数を別のスレッドに送る。別のタイプの命令は、「ｇｅｔ」命令であり、これは、変数を別のスレッドから取り出す。これらの命令の使用を介して、特定の変数へのｇｅｔ文を発行したコード・セグメントを、別のコード・セグメントがその変数に対応するｐｕｔ命令を発行するまでストールすることにより、複数のスレッド上で実行するコード・セグメント間の同期を維持することができる。
【０００６】
ｐｕｔ命令およびｇｅｔ命令の使用によって、異なるハードウェア・スレッド上で実行している依存性のあるコード・セグメント間の同期を効果的に維持することができる一方で、別のスレッドからの変数を待ってスレッドがストールしている全ての時間は、生産性が損失することを表しており、そのため、スレッド間での変数を通信することに関連する遅延を最小化することが望ましい。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
したがって、スレッド間依存性についての遅延を最小化するため、マルチスレッド化した処理環境内の複数のスレッド間でデータを効果的に通信する方法について、当技術分野にかなりの必要性がある。
【課題を解決するための手段】
【０００８】
本発明は、マルチコア・プロセッサ・チップ内の複数の処理コアのレジスタ・ファイル間の低遅延変数伝達ネットワークを利用して、複数のハードウェア・スレッドにわたる仮想スレッドの細粒化並列処理をサポートする、方法および回路装置を提供することによって、従来技術に関連するこれらおよび他の問題に対処する。本発明のいつくかの実施形態では、変数伝達ネットワークを介する変数の通信は、送信元処理コアのレジスタ・ファイル中のローカル・レジスタから、送信先処理コア内の送信先ハードウェア・スレッドに割り振られる変数レジスタへの移動により開始され、その結果、次いで送信先ハードウェア・スレッドが、変数レジスタから送信先処理コア内のローカル・レジスタに変数を移動させることができる。
【０００９】
本発明の１つの態様に一致して、変数伝達ネットワークが複数の処理コア間で結合され、複数のハードウェア・スレッドが複数の処理コア内に配設され、各処理コアがレジスタ・ファイルおよび複数のハードウェア・スレッドのうちの少なくとも１つのハードウェア・スレッドを含む。変数伝達ネットワークは、複数の処理コアのうちの送信元処理コア内の送信元ハードウェア・スレッドと複数の処理コアのうちの送信先処理コア内の送信先ハードウェア・スレッドとの間で、変数を通信するように構成される。
【００１０】
本発明を特徴付けるこれらおよび他の利点および特徴は、本明細書に添付し、本明細書のさらなる部分を形成する請求項に記載される。しかし、本発明および本発明の使用を通じて得られる利点および目的をより良好に理解するために、図面および本発明の例示的な実施形態が記載される添付の記載事項への参照をするべきである。
【００１１】
第１の態様から見ると、本発明は、複数の処理コア内に配設される複数のハードウェア・スレッドであって、各処理コアがレジスタ・ファイルおよび複数のハードウェア・スレッドのうちの少なくとも１つのハードウェア・スレッドを含む、複数のハードウェア・スレッドと、複数の処理コア間で結合される変数伝達ネットワークであって、複数の処理コアのうちの送信元処理コア内の送信元ハードウェア・スレッドと複数の処理コアのうちの送信先処理コア内の送信先ハードウェア・スレッドとの間で変数を通信するように構成される、変数伝達ネットワークとを備える、回路装置を提供する。
【００１２】
好ましくは、本発明は、複数の変数レジスタであって、各変数レジスタが複数のハードウェア・スレッドのうちの個別のハードウェア・スレッドに割り振られる複数の変数レジスタをさらに備え、送信先ハードウェア・スレッドに割り振られる変数レジスタ内の変数の記憶に応答して送信先処理コアに変数を通信するように変数伝達ネットワークが構成される、回路装置を提供する。
【００１３】
好ましくは、本発明は、複数の変数レジスタが各処理コアのレジスタ・ファイル内に設計され、各処理コア内に配設される依存性論理部が、レジスタ・ファイル内の複数のローカル・レジスタおよび複数の変数レジスタの両方についての依存性を取り扱う、回路装置を提供する。
【００１４】
好ましくは、本発明は、送信元ハードウェア・スレッドにより実行される命令に応答して送信先処理コアに変数を通信するように変数伝達ネットワークが構成される、回路装置を提供する。
【００１５】
好ましくは、本発明は、命令が、送信元処理コアのレジスタ・ファイル内のローカル・レジスタから送信先ハードウェア・スレッドに割り振られる変数レジスタに変数を移動させるｐｕｔ命令を含む、回路装置を提供する。
【００１６】
好ましくは、本発明は、送信先ハードウェア・スレッドが変数伝達ネットワークを介して変数を受け取る準備ができているかどうかを示すクレジット・フラグを、送信先ハードウェア・スレッドに割り振られる変数レジスタが含み、送信先ハードウェア・スレッドが変数を受け取る準備ができていることをクレジット・フラグが示すまで、ｐｕｔ命令をストールするように送信元処理コアが構成される、回路装置を提供する。
【００１７】
好ましくは、本発明は、送信元処理コア内の送信先ハードウェア・スレッドに割り振られる変数レジスタ内の変数の記憶に応答して、送信先処理コア内の送信元スレッドに関連する変数レジスタで変数を提示するように変数伝達ネットワークが構成され、送信先ハードウェア・スレッドにより実行される命令に応答して、送信元ハードウェア・スレッドに割り振られる変数レジスタから送信先処理コアのレジスタ・ファイル内のローカル・レジスタに変数を移動するように送信先ハードウェア・スレッドが構成される、回路装置を提供する。
【００１８】
好ましくは、本発明は、命令がｇｅｔ命令を含み、送信先処理コア内の送信元ハードウェア・スレッドに割り振られる変数レジスタが、送信先処理コア内の送信元ハードウェア・スレッドに割り振られる変数レジスタ内に有効なデータが記憶されているかどうかを示す有効フラグを含み、送信先処理コア内の送信元ハードウェア・スレッドに割り振られる変数レジスタ内に有効なデータが記憶されていることを有効フラグが示すまで、ｇｅｔ命令をストールするように送信先処理コアが構成される、回路装置を提供する。
【００１９】
好ましくは、本発明は、送信先処理コア内の送信元ハードウェア・スレッドに割り振られる変数レジスタから送信先処理コアのレジスタ・ファイル内のローカル・レジスタに変数を移動することに応答して、変数伝達ネットワークを介してクレジットを返すように送信先処理コアが構成される、回路装置を提供する。
【００２０】
好ましくは、本発明は、変数伝達ネットワークが送信元処理コアと送信先処理コアとの間に結合される送信バスを備え、送信バスが、変数を通信するように構成される複数のデータ線、送信先ハードウェア・スレッド用に識別子を通信するように構成される少なくとも１つのスレッド識別子線、および有効なデータが複数のデータ線を介して通信されていることを示すように構成される有効線を含む、回路装置を提供する。
【００２１】
好ましくは、本発明は、データ線、スレッド識別子線、および有効線のそれぞれが送信元処理コアにより駆動され、送信先処理コアにより駆動され、送信先ハードウェア・スレッドによる変数の伝達が成功したことに応答して送信元処理コアにクレジットを返すように構成されるクレジット線を送信バスがさらに備える、回路装置を提供する。
【００２２】
好ましくは、本発明は、送信バスが送信元処理コアから送信先処理コアへの専用バスを備え、変数伝達ネットワークが複数の送信バスを備え、そのため、複数の処理コアのそれぞれが複数の処理コアのうちのそれぞれの他の処理コアへの専用バスを含む、回路装置を提供する。
【００２３】
好ましくは、本発明は、送信バスが送信元処理コアから複数の処理コアのうちのそれぞれの他の処理コアに結合され、送信先処理コア用に識別子を通信するように構成される少なくとも１つのコア識別子線を送信バスがさらに含む、回路装置を提供する。
【００２４】
別の態様から見ると、本発明は、上記のような回路装置を含む集積回路デバイスを提供する。
【００２５】
別の態様から見ると、本発明は、コンピュータ可読媒体およびコンピュータ可読媒体上に記憶されて上記のような回路装置を規定する論理規定プログラム・コードを備えるプログラム製品を提供する。
【００２６】
別の態様から見ると、本発明は、複数の処理コア内に配設される複数のハードウェア・スレッド間で変数を通信する方法であって、各処理コアがレジスタ・ファイルおよび複数のハードウェア・スレッドのうちの少なくとも１つのハードウェア・スレッドを含み、複数の処理コアのうちの送信元処理コア内の送信元ハードウェア・スレッドを用いて、複数の処理コアのうちの送信先処理コア内の送信先ハードウェア・スレッドへの変数の伝達を開始するステップと、変数の伝達を開始するステップに応答して、送信元処理コアから送信先処理コアに、送信元処理コアおよび送信先処理コアに結合された変数伝達ネットワークを介して変数を通信するステップとを含む、方法を提供する。
【００２７】
好ましくは、本発明は、変数の伝達を開始するステップが送信先ハードウェア・スレッドに割り振られる変数レジスタ内に変数を記憶するステップを含み、変数レジスタが、マルチコア処理チップ上に配設される複数の変数レジスタの中にあり、各変数レジスタが複数のハードウェア・スレッドの中の個別のハードウェア・スレッドに割り振られる、方法を提供する。
【００２８】
好ましくは、本発明は、複数の変数レジスタが各処理コアのレジスタ・ファイル内に設計され、各処理コア内に配設される依存性論理部が、レジスタ・ファイル内の複数のローカル・レジスタおよび複数の変数レジスタの両方についての依存性を取り扱う、方法を提供する。
【００２９】
好ましくは、本発明は、変数の伝達を開始するステップが、送信元ハードウェア・スレッドを用いてｐｕｔ命令を実行するステップを含み、ｐｕｔ命令が送信元処理コアのレジスタ・ファイル内のローカル・レジスタから送信先ハードウェア・スレッドに割り振られる変数レジスタに変数を移動させる、方法を提供する。
【００３０】
好ましくは、本発明は、送信先ハードウェア・スレッドが変数伝達ネットワークを介して変数を受け取る準備ができているかどうかを示すクレジット・フラグを、送信先ハードウェア・スレッドに割り振られる変数レジスタが含み、送信先ハードウェア・スレッドが変数を受け取る準備ができていることをクレジット・フラグが示すまで、ｐｕｔ命令をストールするステップをさらに含む、方法を提供する。
【００３１】
好ましくは、本発明は、送信元処理コア内の送信先ハードウェア・スレッドに割り振られる変数レジスタ内の変数の記憶に応答して、送信先処理コア内の送信元スレッドに関連する変数レジスタで変数を提示するように変数伝達ネットワークが構成され、送信先ハードウェア・スレッドにより実行されるｇｅｔ命令に応答して、送信先処理コア内の送信元スレッドに割り振られる変数レジスタから送信先処理コアのレジスタ・ファイル内のローカル・レジスタに変数を移動するステップを方法がさらに含み、送信先処理コア内の送信元スレッドに割り振られる変数レジスタが、有効なデータが送信先処理コア内の送信元スレッドに割り振られる変数レジスタに記憶されるかどうかを示す有効フラグを含み、有効なデータが送信先処理コア内の送信元スレッドに割り振られる変数レジスタに記憶されることを有効フラグが示すまでｇｅｔ命令をストールするステップを方法がさらに含む、方法を提供する。
【００３２】
好ましくは、本発明は、送信先処理コア内の送信元スレッドに割り振られる変数レジスタから送信先処理コアのレジスタ・ファイル内のローカル・レジスタに変数を移動するステップに応答して、変数伝達ネットワークを介してクレジットを返すステップをさらに含む、方法を提供する。
【００３３】
好ましくは、本発明は、変数伝達ネットワークが送信元処理コアと送信先処理コアとの間に結合される送信バスを備え、送信バスが、変数を通信するように構成される複数のデータ線、送信先ハードウェア・スレッド用に識別子を通信するように構成される少なくとも１つのスレッド識別子線、および有効なデータが複数のデータ線を介して通信されていることを示すように構成される有効線を含み、データ線、スレッド識別子線、および有効線のそれぞれが送信元処理コアにより駆動され、送信先処理コアにより駆動され、送信先ハードウェア・スレッドへの変数の伝達が成功したことに応答して送信元処理コアにクレジットを返すように構成されるクレジット線を送信バスがさらに含む、方法を提供する。
【００３４】
好ましくは、本発明は、送信バスが送信元処理コアから送信先処理コアへの専用バスを備え、変数伝達ネットワークが複数の送信バスを備え、そのため、複数の処理コアのそれぞれが複数の処理コアのうちのそれぞれの他の処理コアへの専用バスを含む、方法を提供する。
【００３５】
好ましくは、本発明は、送信バスが送信元処理コアから複数の処理コアのうちのそれぞれの他の処理コアに結合され、送信先処理コア用に識別子を通信するように構成される少なくとも１つのコア識別子線を送信バスがさらに含む、方法を提供する。
【００３６】
ここで、本発明の好ましい実施形態は、添付の図面を参照して、単に例として記載されることとなる。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施形態に一致するデータ処理で有用な例示的なコンピュータを含む、例示的な自動化されたコンピューティング機械のブロック図である。
【図２】図１のコンピュータに実装された例示的なＮＯＣのブロック図である。
【図３】図２のＮＯＣからのノードの例示的な実装を詳細に示すブロック図である。
【図４】図２のＮＯＣからのＩＰブロックの例示的な実装を示すブロック図である。
【図５】シングル・スレッド化されたコードを複数のハードウェア・スレッドにより実行可能な複数のコード・セグメントに分割するために使用される、細粒化並列処理を示すブロック図である。
【図６】本発明に一致する低遅延変数伝達ネットワークを組み込んだマルチコア・プロセッサ・チップを含む、例示的なデータ処理システムのブロック図である。
【図７】図６で参照される拡張されたレジスタ・ファイルの例示的な実装のブロック図である。
【図８】図６で参照される変数伝達ネットワーク内の送信バスの例示的な実装のブロック図である。
【図９】図８で参照される送信バスを介する例示的な変数伝送を示すタイミング図である。
【図１０】図８に示される送信バスの代替の実装のブロック図である。
【図１１】図６のマルチコア・プロセッサ・チップ内の変数伝達ネットワークを介して変数を送信するためｐｕｔ命令を実行するときに実施される動作の、例示的なシーケンスを示す流れ図である。
【図１２】図６のマルチコア・プロセッサ・チップ内の変数伝達ネットワークから変数を受け取るためｇｅｔ命令を実行するときに実施される動作の、例示的なシーケンスを示す流れ図である。
【発明を実施するための形態】
【００３８】
本発明に一致する実施形態は、マルチコア・プロセッサ・チップ内の複数の処理コアのレジスタ・ファイル間に結合される低遅延変数伝達ネットワークを利用して、マルチスレッド化した処理環境内のスレッド間で変数を通信する。以下で議論される実施形態では、任意選択で拡張されたレジスタ・ファイル内に設計される、複数の変数レジスタのそれぞれは、複数のハードウェア・スレッドのうちの個別のハードウェア・スレッドに割り振られ、そのため、その送信先ハードウェア・スレッドに割り振られる変数レジスタへの変数の記憶に応答して、変数伝達ネットワークが送信先処理コアに変数を通信する。加えて、以下に記載される実施形態では、変数レジスタが各処理コアのレジスタ・ファイル内に設計され、そのため、変数レジスタは、レジスタ・ファイル内のローカル・レジスタとほとんど同じようにアクセス可能であり、そのため、各処理コア内に配設される依存性論理部が、レジスタ・ファイル内のローカル・レジスタおよび変数レジスタの両方についての依存性を取り扱う。
【００３９】
他の変形形態および変更形態が当業者には明らかであろう。したがって、本発明は、本明細書で議論される特定の実装に限定されない。
【００４０】
ハードウェア環境およびソフトウェア環境
ここで、図面に戻ると、複数の図を通して同様の番号は同様の部分を示しているが、図１では、本発明の実施形態に一致するデータ処理で有用な例示的なホスト・コンピュータ１０を含む、例示的な自動化されたコンピューティング機械を示している。図１のホスト・コンピュータ１０は、少なくとも１つのコンピュータ・プロセッサ１２または「ＣＰＵ」ならびにランダム・アクセス・メモリ１４（「ＲＡＭ」）を含み、ＲＡＭ１４は、高速メモリ・バス１６およびバス・アダプタ１８を介してコンピュータ・プロセッサ１２、およびホスト・コンピュータ１０の他の構成要素に接続される。
【００４１】
ＲＡＭ１４には、アプリケーション・プログラム２０、例えば、ワード・プロセシング、スプレッドシート、データベース操作、ビデオ・ゲーム、株式市場シミュレーション、原子の量子プロセス・シミュレーション、または他のユーザレベルのアプリケーションなどの特定のデータ処理タスクを実行するための、ユーザレベルのコンピュータ・プログラム命令のモジュールが記憶される。ＲＡＭ１４には、オペレーティング・システム２２も記憶される。本発明の実施形態に関して有用なオペレーティング・システムとしては、ＵＮＩＸ（Ｒ）、Ｌｉｎｕｘ（Ｒ）、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  ＸＰ（Ｒ）、ＡＩＸ（Ｒ）、ＩＢＭのｉ５／ＯＳ（Ｒ）および当業者に想到される他のオペレーティング・システムが挙げられる。図１の例の中のオペレーティング・システム２２およびアプリケーション・プログラム２０はＲＡＭ１４内に示されるが、そのようなソフトウェアの多くの構成要素が、典型的には、例えばディスク・ドライブ２４上といった、不揮発性メモリにも記憶される。
【００４２】
以下でより明らかになるように、本発明に一致する実施形態は、ネットワーク・オン・チップ（ＮＯＣ）集積回路デバイス、またはチップ内に実装することができ、したがって、ホスト・コンピュータ１０は、２つの例示的なＮＯＣ、すなわち、ＮＯＣビデオ・アダプタ２６およびＮＯＣコプロセッサ２８を含んで示されている。ＮＯＣビデオ・アダプタ２６は、代替的にグラフィックス・アダプタと呼ぶことができるが、表示スクリーンまたはコンピュータ・モニタなどの表示デバイス３０へのグラフィックス出力のため特に設計されたＩ／Ｏアダプタの例である。ＮＯＣビデオ・アダプタ２６は、高速ビデオ・バス３２、バス・アダプタ１８、およびやはり高速バスであるフロント・サイド・バス３４を介してコンピュータ・プロセッサ１２に接続される。ＮＯＣコプロセッサ２８は、バス・アダプタ１８、ならびにやはり高速バスであるフロント・サイド・バス３４および３６を介してコンピュータ・プロセッサ１２に接続される。図１のＮＯＣコプロセッサは、例えば、コンピュータ・プロセッサ１２の指令で特定のデータ処理タスクを加速するように最適化することができる。
【００４３】
図１の例示的なＮＯＣビデオ・アダプタ２６およびＮＯＣコプロセッサ２８のそれぞれは、統合プロセッサ（「ＩＰ」）ブロック、ルータ、メモリ通信コントローラ、およびネットワーク・インターフェイス・コントローラを含むＮＯＣを含み、その詳細は、図２〜図３に関連して以下でさらに詳細に議論されることとなる。ＮＯＣビデオ・アダプタおよびＮＯＣコプロセッサは、それぞれ、並列処理を使用し、共有メモリへの高速なランダム・アクセスが必要でもあるプログラム用に最適化される。しかし、本発明がＮＯＣデバイスおよびＮＯＣデバイス・アーキテクチャ以外のデバイスおよびデバイス・アーキテクチャに実装可能であることが、本開示の恩恵を被る当業者には理解されよう。したがって、本発明は、ＮＯＣデバイス内の実装に限定されない。
【００４４】
図１のホスト・コンピュータ１０は、拡張バス４０を介して結合されるディスク・ドライブ・アダプタ３８およびコンピュータ・プロセッサ１２およびホスト・コンピュータ１０の他の構成要素へのバス・アダプタ１８を含む。ディスク・ドライブ・アダプタ３８は、不揮発性データ記憶装置をディスク・ドライブ２４の形でホスト・コンピュータ１０に接続し、例えば、インテグレーテッド・ドライブ・エレクトロニクス（「ＩＤＥ」）アダプタ、スモール・コンピュータ・システム・インターフェイス（「ＳＣＳＩ」）アダプタ、および当業者に想到される他のものを使用して実装することができる。不揮発性コンピュータ・メモリは、当業者に想到されるような、光ディスク・ドライブ、電気的消去可能プログラム可能読取り専用メモリ（いわゆる「ＥＥＰＲＯＭ」または「Ｆｌａｓｈ」メモリ）、ＲＡＭドライブなどとして実装することもできる。
【００４５】
ホスト・コンピュータ１０は、例えば、コンピュータ表示スクリーンなどの表示デバイスへの出力ならびにキーボードおよびマウスなどのユーザ入力デバイス４４からのユーザ入力を制御するための、ソフトウェア・ドライバおよびコンピュータ・ハードウェアを介してユーザ指向の入出力装置を実装する、１つまたは複数の入出力（「Ｉ／Ｏ」）アダプタ４２も含む。加えて、ホスト・コンピュータ１０は、他のコンピュータ４８とのデータ通信およびデータ通信ネットワーク５０とのデータ通信のための通信アダプタ４６を含む。そのようなデータ通信は、ＲＳ−２３２接続を介して、ユニバーサル・シリアル・バス（「ＵＳＢ」）などの外部バスを介して、ＩＰデータ通信ネットワークなどのデータ通信ネットワークを介して、ならびに当業者に想到される他の方法で直列に実行することができる。通信アダプタは、１つのコンピュータが他のコンピュータに直接またはデータ通信ネットワークを介してデータ通信を送信する、データ通信のハードウェア・レベルを実装する。ホスト・コンピュータ１０で使用するために好適な通信アダプタの例としては、有線ダイアルアップ通信用モデム、有線データ通信ネットワークの通信用のイーサネット（Ｒ）（ＩＥＥＥ  ８０２．３）アダプタ、および無線データ通信ネットワークの通信用の８０２．１１アダプタが挙げられる。
【００４６】
さらに説明するために、図２では、本発明の実施形態による例示的なＮＯＣ１０２の機能ブロック図を記載する。図２のＮＯＣは、「チップ」１００上、すなわち集積回路上に実装される。ＮＯＣ１０２は、相互接続されるノードへとグループ化される、統合プロセッサ（「ＩＰ」）ブロック１０４、ルータ１１０、メモリ通信コントローラ１０６、およびネットワーク・インターフェイス・コントローラ１０８を含む。各ＩＰブロック１０４は、メモリ通信コントローラ１０６およびネットワーク・インターフェイス・コントローラ１０８を介してルータ１１０に適合される。各メモリ通信コントローラは、ＩＰブロックとメモリとの間の通信を制御し、各ネットワーク・インターフェイス・コントローラ１０８は、ルータ１１０を介してＩＰブロック間通信を制御する。
【００４７】
ＮＯＣ１０２では、各ＩＰブロックは、ＮＯＣ内のデータ処理用ビルディング・ブロックとして使用される、同期または非同期の論理部設計の再使用可能なユニットを表す。用語「ＩＰブロック」は、関係者により所有され、他のユーザまたは半導体回路の設計者にライセンスが与えられる、関係者の知的財産である設計としてＩＰブロックを有効に表している「知的財産ブロック」として展開されることがある。しかし、本発明の範囲では、ＩＰブロックが、何らかの特定の所有権を施されることについての要件はない。そのため、その用語は、この明細書では、「統合プロセッサ・ブロック」として常に展開される。ここで指定されるように、ＩＰブロックは、知的財産の対象であってもなくてもよい、論理部、セル、またはチップ・レイアウト設計の再使用可能なユニットである。ＩＰブロックは、ＡＳＩＣチップ設計またはＦＰＧＡ論理部設計として形成することができる論理部コアである。
【００４８】
ＩＰブロックを類推によって述べる、１つの方法では、コンピュータ・プログラミングにとってライブラリがあり、またはプリント回路板設計にとって個別集積回路装置要素があるように、ＮＯＣ設計にとってＩＰブロックがある。本発明の実施形態に一致するＮＯＣでは、ＩＰブロックは、完全な専用マイクロプロセッサまたは汎用マイクロプロセッサとして、一般的なゲート・ネットリストとして実装することができ、または当業者が想到することができる他の方法で実装することができる。ネットリストは、高水準プログラム・アプリケーションにとってのアセンブリコード・リストに類似している、ＩＰブロックの論理機能のブール代数表現（ゲート、標準セル）である。ＮＯＣは、例えば、ＶｅｒｉｌｏｇまたはＶＨＤＬなどのハードウェア記述言語で記載される合成可能形式で実装することもできる。ネットリストおよび合成可能実装に加えて、ＮＯＣは、低水準の物理的記述で伝えることもできる。ＳＥＲＤＥＳ、ＰＬＬ、ＤＡＣ、ＡＤＣなどのアナログＩＰブロック要素は、ＧＤＳＩＩなどのトランジスタ・レイアウト形式で供給することができる。ＩＰブロックのデジタル要素が同様にレイアウト形式で提供されることがある。本発明に一致して実装されるＩＰブロックならびに他のロジック回路は、そのようなロジックを実装する回路装置の機能性またはレイアウトあるいはその両方を、様々なレベルの詳細さで規定する例えば論理規定プログラム・コードといった、コンピュータ・データ・ファイルの形で供給できることも理解されよう。したがって、本発明は、完全に機能する集積回路デバイス、そのようなデバイスを利用するデータ処理システム、および他の有形の物理的なハードウェア回路に実装される回路装置の文脈で記載されてきており、以降も記載されることになるが、本開示の恩恵を被る当業者なら、本発明がプログラム製品内で実装することもでき、プログラム製品を供給するために使用されるコンピュータ可読記憶媒体の特定のタイプに関わらず、本発明が等しく適用されることを理解されよう。コンピュータ可読記憶媒体の例としては、限定するものではないが、（とりわけ）揮発性および不揮発性のメモリ・デバイス、フロッピ・ディスク、ハード・ディスク・ドライブ、ＣＤ−ＲＯＭ、およびＤＶＤなどの物理的で記録可能なタイプの媒体が挙げられる。
【００４９】
図２の例の中の各ＩＰブロック１０４は、メモリ通信コントローラ１０６を介してルータ１１０に適合される。各メモリ通信コントローラは、ＩＰブロックとメモリとの間でデータ通信を実現するように適合される、同期論理回路および非同期論理回路の集合である。ＩＰブロックとメモリとの間のそのような通信の例としては、メモリ・ロード命令およびメモリ・ストア命令が挙げられる。メモリ通信コントローラ１０６は、図３を参照して以下でより詳細に記載される。各ＩＰブロック１０４は、やはり、ＩＰブロック１０４間でルータ１１０を介して通信を制御するネットワーク・インターフェイス・コントローラ１０８を介して、ルータ１１０に適合される。ＩＰブロック間の通信の例としては、並列アプリケーションおよびパイプライン化アプリケーションで、ＩＰブロック間でデータおよびそのデータを処理するための命令を搬送するメッセージが挙げられる。ネットワーク・インターフェイス・コントローラ１０８は、やはり、図３を参照して以下でより詳細に記載される。
【００５０】
ルータ１１０およびルータ１１０間の対応するリンク１１８は、ＮＯＣのネットワーク動作を実装する。リンク１１８は、全てのルータを接続する、物理的な並列ワイヤ・バス上に実装されるパケット構造であってよい。すなわち、各リンクは、全てのヘッダ情報およびペイロード・データを含む、全データ交換パケットを同時に収めるのに十分な幅のワイヤ・バス上に実装することができる。パケット構造が、例えば８バイトのヘッダおよび５６バイトのペイロード・データを含む６４バイトを含む場合、各リンクに対するワイヤ・バスは、６４バイト幅、５１２本のワイヤとなる。加えて、各リンクは双方向性である場合があり、その結果、リンク・パケット構造が６４バイトを含む場合、ワイヤ・バスは、各ルータとネットワーク内のその隣接先のそれぞれとの間に、実際には１０２４本のワイヤを含む。そのような実装では、メッセージは、２パケット以上を含むことができるが、各パケットは、ワイヤ・バスの幅に正確に合うことになる。代替では、パケットの一部を収めるのに十分なだけの幅であるワイヤ・バス上にリンクを実装することができ、そのためパケットが複数のビートに分割されることになり、例えばその結果、リンクが幅１６バイト、すなわち１２８本のワイヤで実装される場合、６４バイトのパケットは４つのビートに分割することができる。実質的な物理的制限ならびに所望の性能特性に基づいて、異なる実装では異なるバス幅を使用できることが理解されよう。ルータとワイヤ・バスの各セクションとの間の接続をポートと呼ぶ場合、各ルータは５つのポート、すなわち、ネットワーク上のデータ伝送の４つの方向それぞれに１つずつ、および、ルータを特定のＩＰブロックにメモリ通信コントローラおよびネットワーク・インターフェイス・コントローラを介して適合させるための５番目のポートを含む。
【００５１】
各メモリ通信コントローラ１０６が、ＩＰブロックとメモリとの間の通信を制御する。メモリは、オフチップ・メインＲＡＭ１１２、メモリ通信コントローラ１０６を介してＩＰブロックに直接接続されるオンチップ・メモリ１１４、ＩＰブロックとして使用可能なオンチップ・メモリ１１６、およびオンチップ・キャッシュを含むことができる。ＮＯＣ１０２では、オンチップ・メモリ１１４、１１６の両方を、例えばオンチップ・キャッシュ・メモリとして実装することができる。全てのこれらの形のメモリは、本当に、ＩＰブロックに直接取り付けられるメモリに関してさえ、同じアドレス空間、物理アドレスまたは仮想アドレス内に配設することができる。したがって、メモリ・アドレス指定メッセージは、ＩＰブロックに関して完全に双方向性であることができる。というのは、そのようなメモリは、ネットワーク上の任意の場所の任意のＩＰブロックから直接アドレス指定することができるからである。ＩＰブロック上のオンチップ・メモリ１１６は、そのＩＰブロックまたはＮＯＣ内の任意の他のＩＰブロックからアドレス指定することができる。メモリ通信コントローラに直接取り付けられるオンチップ・メモリ１１４は、そのメモリ通信コントローラによりネットワークに適合されるＩＰブロックによってアドレス指定することができ、ＮＯＣ内の任意の場所の任意の他のＩＰブロックからアドレス指定することもできる。
【００５２】
ＮＯＣ１０２は、本発明の実施形態に一致するＮＯＣについての、２つの代替のメモリ・アーキテクチャを示す、２つのメモリ管理ユニット（「ＭＭＵ」）１２０、１２２を含む。ＭＭＵ１２０は、ＩＰブロック内に実装され、ＩＰブロック内のプロセッサが、仮想メモリで動作することを可能にする一方で、ＮＯＣの残りのアーキテクチャ全体が、物理的なメモリ・アドレス空間で動作することを可能にする。ＭＭＵ１２２は、オフチップで実装され、データ通信ポート１２４を介してＮＯＣと接続される。データ通信ポート１２４は、ＮＯＣとＭＭＵとの間で信号を伝導するのに必要なピンおよび他の相互接続、ならびにＮＯＣパケット形式から外部のＭＭＵ１２２により必要とされるバス形式にメッセージ・パケットを変換するのに十分なインテリジェンスを含む。ＭＭＵが外部に配置されていることは、ＮＯＣの全てのＩＰブロック内の全てのプロセッサが仮想メモリ・アドレス空間で動作することができ、オフチップ・メモリの物理アドレスへの全ての変換をオフチップのＭＭＵ１２２により取り扱うことができることを意味する。
【００５３】
ＭＭＵ１２０、１２２の使用により示される２つのメモリ・アーキテクチャに加えて、データ通信ポート１２６は、本発明の実施形態で利用することができる、ＮＯＣ内で有用な第３のメモリ・アーキテクチャを示す。データ通信ポート１２６は、ＮＯＣ１０２のＩＰブロック１０４とオフチップ・メインＲＡＭ１１２との間で直接接続を実現する。処理経路内にＭＭＵがないので、このアーキテクチャによって、ＮＯＣの全てのＩＰブロックによる物理的なアドレス空間の利用が可能になる。アドレス空間を双方向で共有することで、ＮＯＣの全てのＩＰブロックは、データ通信ポート１２６に直接接続されるＩＰブロックを介して導かれる、ロードおよびストアを含む、メモリ・アドレス指定メッセージによりアドレス空間内のメモリにアクセスすることができる。データ通信ポート１２６は、ＮＯＣとオフチップ・メインＲＡＭ１１２との間で信号を伝導するのに必要なピンおよび他の相互接続、ならびにＮＯＣパケット形式からオフチップ・メインＲＡＭ１１２により必要とされるバス形式にメッセージ・パケットを変換するのに十分なインテリジェンスを含む。
【００５４】
図２の例では、ＩＰブロックのうちの１つはホスト・インターフェイス・プロセッサ１２８と表される。ホスト・インターフェイス・プロセッサ１２８は、ＮＯＣとＮＯＣを設置することができるホスト・コンピュータ１０との間にインターフェイスをもうけ、例えば、ホスト・コンピュータからＮＯＣのＩＰブロック間でデータ処理要求を受け取り、送ることを含む、ＮＯＣ上の他のＩＰブロックへのデータ処理サービスも実現する。例えば、ＮＯＣは、図１を参照して上で記載したような、より大きなホスト・コンピュータ１０上にＮＯＣビデオ・アダプタ２６またはＮＯＣコプロセッサ２８を実装することができる。図２の例では、ホスト・インターフェイス・プロセッサ１２８は、より大きなホスト・コンピュータにデータ通信ポート１３０を介して接続される。データ通信ポート１３０は、ＮＯＣとホスト・コンピュータとの間で信号を伝導するのに必要なピンおよび他の相互接続、ならびにＮＯＣからのメッセージ・パケットをホスト・コンピュータ１０により必要とされるバス形式に変換するのに十分なインテリジェンスを含む。図１のコンピュータ内のＮＯＣコプロセッサの例では、そのようなポートは、ＮＯＣコプロセッサ２８のリンク構造と、ＮＯＣコプロセッサ２８とバス・アダプタ１８との間のフロント・サイド・バス３６で必要なプロトコルとの間の、データ通信形式変換を実現することになる。
【００５５】
次いで、図３は、１３２でまとめて示される、ＮＯＣ１０２内の、ＩＰブロック１０４、メモリ通信コントローラ１０６、ネットワーク・インターフェイス・コントローラ１０８、およびルータ１１０の中に実装される構成要素をさらに詳細に示す機能ブロック図である。ＩＰブロック１０４は、コンピュータ・プロセッサ１３４およびＩ／Ｏ機能部１３６を含む。この例では、コンピュータ・メモリは、ＩＰブロック１０４内のランダム・アクセス・メモリ（「ＲＡＭ」）１３８のセグメントにより表される。図２を参照して上で記載されたように、メモリは、各ＩＰブロックのその内容がＮＯＣ内の任意のＩＰブロックからアドレス指定可能およびアクセス可能である、物理的なアドレス空間のセグメントを占めることができる。各ＩＰブロック内のコンピュータ・プロセッサ１３４、Ｉ／Ｏ機能部１３６、およびランダム・アクセス・メモリ１３８は、ＩＰブロックを一般的にプログラム可能なマイクロコンピュータとして有効に実装する。しかし、上で説明したように、本発明の範囲では、ＩＰブロックは、ＮＯＣ内のデータ処理用ビルディング・ブロックとして使用される、同期または非同期の論理部の再使用可能なユニットを全体として表す。したがって、一般的にプログラム可能なマイクロコンピュータとしてＩＰブロックを実装することは、説明のために有用な共通の実施形態であるが、本発明を制限するものではない。
【００５６】
図３のＮＯＣ１０２では、各メモリ通信コントローラ１０６は、複数のメモリ通信実行エンジン１４０を含む。各メモリ通信実行エンジン１４０がイネーブルとなり、ネットワークとＩＰブロック１０４との間の双方向性のメモリ通信命令の流れ１４１、１４２、１４４を含む、ＩＰブロック１０４からのメモリ通信命令を実行する。メモリ通信コントローラにより実行されるメモリ通信命令は、特定のメモリ通信コントローラを介してルータに適合されるＩＰブロックからのみならず、ＮＯＣ１０２内の任意の場所のＩＰブロック１０４からでも始めることができる。すなわち、ＮＯＣ内の任意のＩＰブロックがメモリ通信命令を生成し、そのメモリ通信命令を実行するために、別のＩＰブロックに関連する別のメモリ通信コントローラに、ＮＯＣのルータを介してそのメモリ通信命令を伝送することができる。そのようなメモリ通信命令としては、例えば、変換索引バッファ制御命令、キャッシュ制御命令、バリア命令、ならびにメモリ・ロードおよびメモリ・ストア命令が挙げられる。
【００５７】
各メモリ通信実行エンジン１４０がイネーブルとなり、別個かつ他のメモリ通信実行エンジンと並列に、完全なメモリ通信命令を実行する。メモリ通信実行エンジンは、メモリ通信命令の並行処理能力に最適化されたスケーラブル・メモリ・トランザクション・プロセッサを実装する。メモリ通信コントローラ１０６は、その全てが複数のメモリ通信命令の同時実行のため並行して動作する、複数のメモリ通信実行エンジン１４０をサポートする。新しいメモリ通信命令は、メモリ通信コントローラ１０６によりメモリ通信実行エンジン１４０に割り振られ、メモリ通信実行エンジン１４０は、複数の応答イベントを同時に受け入れることができる。この例では、メモリ通信実行エンジン１４０の全てが同一である。したがって、メモリ通信コントローラ１０６により同時に取り扱うことができるメモリ通信命令の数をスケーリングすることは、メモリ通信実行エンジン１４０の数をスケーリングすることにより実装される。
【００５８】
図３のＮＯＣ１０２では、各ネットワーク・インターフェイス・コントローラ１０８がイネーブルとなり、ＩＰブロック１０４間でルータ１１０を介して伝送するため、通信命令をコマンド形式からネットワーク・パケット形式に変換する。通信命令は、ＩＰブロック１０４により、またはメモリ通信コントローラ１０６によりコマンド形式で公式化され、コマンド形式でネットワーク・インターフェイス・コントローラ１０８に提供することができる。コマンド形式は、ＩＰブロック１０４およびメモリ通信コントローラ１０６のアーキテクチャ上のレジスタ・ファイルに準拠する、固有形式であってよい。ネットワーク・パケット形式は、典型的には、ネットワークのルータ１１０を介して伝送するのに必要な形式である。それぞれのそのようなメッセージは、１つまたは複数のネットワーク・パケットから構成される。ネットワーク・インターフェイス・コントローラ内でコマンド形式からパケット形式に変換されるそのような通信命令の例としては、ＩＰブロックとメモリとの間の、メモリ・ロード命令およびメモリ・ストア命令が挙げられる。そのような通信命令としては、並列アプリケーションおよびパイプライン化したアプリケーションで、ＩＰブロック間でデータおよびそのデータを処理するための命令を搬送するメッセージをＩＰブロック間で送信する通信命令も挙げられる。
【００５９】
図３のＮＯＣ１０２では、各ＩＰブロックがイネーブルとなり、メモリ・アドレス・ベースの通信を、ＩＰブロックのメモリ通信コントローラを介してメモリとの間で、次いでＩＰブロックのネットワーク・インターフェイス・コントローラを介してネットワークにも送信する。メモリ・アドレス・ベースの通信は、ロード命令またはストア命令などの、ＩＰブロックのメモリ通信コントローラのメモリ通信実行エンジンにより実行される、メモリ・アクセス命令である。そのようなメモリ・アドレス・ベースの通信は、典型的には、ＩＰブロックで始まり、コマンド形式で公式化され、実行するためにメモリ通信コントローラにハンドオフされる。
【００６０】
多くのメモリ・アドレス・ベースの通信がメッセージ・トラフィックで実行される。というのは、どのＩＰブロックが任意の特定のメモリ・アドレス・ベースの通信を始めたのかに関わらず、アクセスされる任意のメモリは、物理的なメモリ・アドレス空間の中で、オンチップまたはオフチップの、ＮＯＣ内の任意のメモリ通信コントローラに直接取り付けられる、または究極的にはＮＯＣの任意のＩＰブロックを介してアクセスされる、任意の場所に配置することができるからである。したがって、ＮＯＣ１０２では、メッセージ・トラフィックで実行される全てのメモリ・アドレス・ベースの通信は、コマンド形式からパケット形式へ変換しネットワークを介してメッセージで伝送するために、メモリ通信コントローラから関連するネットワーク・インターフェイス・コントローラに受け渡される。パケット形式への変換では、ネットワーク・インターフェイス・コントローラは、メモリ・アドレス・ベースの通信によりアクセスされる１つのメモリ・アドレスまたは複数のメモリ・アドレスに依存して、パケットのネットワーク・アドレスも識別する。メモリ・アドレス・ベースのメッセージは、メモリ・アドレスでアドレス指定される。各メモリ・アドレスは、ネットワーク・インターフェイス・コントローラによって、ネットワーク・アドレス、典型的にはある範囲の物理的なメモリ・アドレスを担当するメモリ通信コントローラのネットワーク位置にマッピングされる。メモリ通信コントローラ１０６のネットワーク位置は、当然、そのメモリ通信コントローラの関連するルータ１１０、ネットワーク・インターフェイス・コントローラ１０８、およびＩＰブロック１０４のネットワーク位置でもある。各ネットワーク・インターフェイス・コントローラ内の命令変換論理部１５０は、メモリ・アドレス・ベースの通信をＮＯＣのルータを介して伝送するために、メモリ・アドレスをネットワーク・アドレスに変換することが可能である。
【００６１】
ネットワークのルータ１１０からメッセージ・トラフィックを受け取ると、各ネットワーク・インターフェイス・コントローラ１０８は、メモリ命令のため各パケットを調べる。メモリ命令を含む各パケットは、受け取ったネットワーク・インターフェイス・コントローラに関連するメモリ通信コントローラ１０６に渡され、さらなる処理のためにパケットの残りのペイロードをＩＰブロックに送る前に、メモリ命令を実行する。このようにして、メモリの内容は、特定のメモリの内容に依存するメッセージからの命令の実行をＩＰブロックが始める前に、ＩＰブロックによるデータ処理をサポートするように常に準備される。
【００６２】
図３のＮＯＣ１０２では、各ＩＰブロック１０４がイネーブルとなり、そのメモリ通信コントローラ１０６をバイパスし、ＩＰブロック間のネットワーク・アドレス指定通信１４６を、ＩＰブロックのネットワーク・インターフェイス・コントローラ１０８を介してネットワークに直接送信する。ネットワーク・アドレス指定通信は、ネットワーク・アドレスによって別のＩＰブロックに導かれるメッセージである。当業者には想到されるように、そのようなメッセージは、パイプライン化したアプリケーションではワーキング・データを伝送し、ＳＩＭＤアプリケーションでのＩＰブロック間の単一プログラム処理では複数のデータを伝送し、以下同様である。ＮＯＣのルータを介してメッセージが導かれるネットワーク・アドレスを知っている発信側ＩＰブロックによって、メモリ・アドレス・ベースの通信が最初からネットワーク・アドレス指定されているという点で、そのようなメッセージは、メモリ・アドレス・ベースの通信とは異なっている。そのようなネットワーク・アドレス指定通信は、ＩＰブロックによりＩ／Ｏ機能部１３６を介して直接ＩＰブロックのネットワーク・インターフェイス・コントローラにコマンド形式で受け渡され、次いで、ネットワーク・インターフェイス・コントローラによりパケット形式に変換され、別のＩＰブロックにＮＯＣのルータを介して伝送される。そのようなネットワーク・アドレス指定通信１４６は双方向性であり、任意の特定のアプリケーション内でのネットワーク・アドレス指定通信１４６の使用に依存して、場合によって、ＮＯＣの各ＩＰブロックに行ったり来たりする。しかし、各ネットワーク・インターフェイス・コントローラがイネーブルとなり、関連するルータとの間でそのような通信の送信および受信の両方を行い、各ネットワーク・インターフェイス・コントローラがイネーブルとなり、関連するＩＰブロックとの間でそのような通信の直接送信および直接受信の両方を行って、関連するメモリ通信コントローラ１０６をバイパスする。
【００６３】
図３の例の中の各ネットワーク・インターフェイス・コントローラ１０８もイネーブルとなり、ネットワーク上に仮想チャネルを実装し、タイプによりネットワーク・パケットを特徴付ける。各ネットワーク・インターフェイス・コントローラ１０８は、各通信命令をタイプにより分類し、ＮＯＣ上で伝送するためルータ１１０にパケット形式で命令をハンドオフする前に、命令のタイプをネットワーク・パケット形式の領域で記録する、仮想チャネル実装論理部１４８を含む。通信命令のタイプの例としては、ＩＰブロック間ネットワーク・アドレス・ベースのメッセージ、要求メッセージ、要求メッセージへの応答、キャッシュに向けた無効化メッセージ、メモリ・ロード・メッセージおよびメモリ・ストア・メッセージ、ならびにメモリ・ロード・メッセージへの応答などが挙げられる。
【００６４】
図３の例の中の各ルータ１１０は、ルーティング論理部１５２、仮想チャネル制御論理部１５４、および仮想チャネル・バッファ１５６を含む。ルーティング論理部は、典型的には、ルータ１１０、リンク１１８、およびルータ間のバス・ワイヤにより形成されるネットワーク内のデータ通信用の、データ通信プロトコル・スタックを実装する同期論理部および非同期論理部のネットワークとして実装される。ルーティング論理部１５２は、当業者がオフチップ・ネットワークでルーティング・テーブルと関連付ける可能性がある機能部を含むが、少なくともいくつかの実施形態のルーティング・テーブルは、ＮＯＣで使用するには遅くて煩雑すぎると考えられる。同期論理部および非同期論理部のネットワークとして実装されるルーティング論理部は、単一のクロック・サイクルと同じくらい速いルーティング決定を行うように構成することができる。この例でのルーティング論理部は、ルータで受け取った各パケットを転送するためにポートを選択することによりパケットをルーティングする。各パケットは、各パケットがルーティングされるネットワーク・アドレスを含む。
【００６５】
上のメモリ・アドレス・ベースの通信の記載では、各メモリ・アドレスは、ネットワーク・インターフェイス・コントローラによってネットワーク・アドレス、すなわちメモリ通信コントローラのネットワーク位置にマッピングされるものとして記載された。メモリ通信コントローラ１０６のネットワーク位置は、当然、そのメモリ通信コントローラの関連するルータ１１０、ネットワーク・インターフェイス・コントローラ１０８、およびＩＰブロック１０４のネットワーク位置でもある。ＩＰブロック間、またはネットワーク・アドレス・ベースの通信では、したがって、アプリケーション・レベルのデータ処理が、ネットワーク・アドレスを、ＮＯＣのルータ、リンク、およびバス・ワイヤにより形成されるネットワーク内のＩＰブロックの位置として見ることも一般的である。図２では、そのようなネットワークの１つの組織が行および列のメッシュであり、例えば、メッシュの関連するルータ、ＩＰブロック、メモリ通信コントローラ、およびネットワーク・インターフェイス・コントローラの各組の一意の識別子、またはメッシュ内のそのような各組のｘ、ｙ座標のいずれかとして各ネットワーク・アドレスを実装できることを示す。
【００６６】
図３のＮＯＣ１０２では、各ルータ１１０が２つ以上の仮想通信チャネルを実装し、各仮想通信チャネルは、通信のタイプにより特徴付けられる。通信命令のタイプ、およびしたがって仮想チャネルのタイプとしては、上に述べられたもの、すなわち、ＩＰブロック間ネットワーク・アドレス・ベースのメッセージ、要求メッセージ、要求メッセージへの応答、キャッシュに向けた無効化メッセージ、メモリ・ロード・メッセージおよびメモリ・ストア・メッセージ、ならびにメモリ・ロード・メッセージへの応答などが挙げられる。仮想チャネルをサポートして、図３の例の中の各ルータ１１０は、仮想チャネル制御論理部１５４および仮想チャネル・バッファ１５６も含むことができる。仮想チャネル制御論理部１５４は、それぞれの受け取ったパケットをその割り当てられた通信のタイプについて検査し、ＮＯＣ上の隣接するルータにポートを介して伝送するため、その通信のタイプの発信用仮想チャネル・バッファに各パケットを入れる。
【００６７】
各仮想チャネル・バッファ１５６は、有限の記憶空間を有する。多くのパケットを短期間に受け取ると、仮想チャネル・バッファがいっぱいになる場合があり、その結果、それ以上のパケットをバッファに入れることができない場合がある。他のプロトコルでは、バッファがいっぱいの仮想チャネルに到達するパケットは欠落することになる。しかし、この例の各仮想チャネル・バッファ１５６は、バス・ワイヤの制御信号でイネーブルとなり、仮想チャネル制御論理部を介して周りのルータに通知して、仮想チャネルでの伝送を一時停止する、すなわち特定の通信タイプのパケットの伝送を一時停止する。１つの仮想チャネルがそのように一時停止されるとき、全ての他の仮想チャネルは影響を受けず、全容量で動作を続けることができる。制御信号は、各ルータに関連するネットワーク・インターフェイス・コントローラ１０８へと各ルータを介してずっと戻って配線される。各ネットワーク・インターフェイス・コントローラは、そのような信号を受信すると、その関連するメモリ通信コントローラ１０６またはその関連するＩＰブロック１０４から、一時停止された仮想チャネルへの通信命令を受け入れることを拒否するように構成される。このようにして、仮想チャネルの一時停止は、発信側ＩＰブロックまでずっと戻って、仮想チャネルを実装する全てのハードウェアに影響をおよぼす。
【００６８】
仮想チャネルでのパケット伝送を一時停止することの１つの効果は、欠落するパケットが全くなくなることである。例えばインターネット・プロトコルなどのいくつかの信頼できないプロトコルでパケットが欠落した可能性がある状況にルータが遭遇する場合、図３の例の中のルータは、バッファ空間が再び利用可能になるまで、仮想チャネルでの全てのパケットの伝送を、ルータの仮想チャネル・バッファ１５６およびルータの仮想チャネル制御論理部１５４により一時停止して、パケットを欠落させる必要をなくすことができる。したがって、図３のＮＯＣは、ハードウェアの極めて薄い層で、高い信頼性のネットワーク通信プロトコルを実装することができる。
【００６９】
図３の例のＮＯＣは、オンチップのメモリ・キャッシュとオフチップのメモリ・キャッシュとの両方の間のキャッシュ・コヒーレンシを維持するように構成することもできる。各ＮＯＣは、複数のキャッシュをサポートすることができ、キャッシュのそれぞれは、同じ基礎となるメモリ・アドレス空間に対して動作する。例えば、キャッシュは、ＩＰブロックにより、メモリ通信コントローラにより、またはＮＯＣの外部のキャッシュ・コントローラにより制御することができる。図２の例の中のオンチップ・メモリ１１４、１１６のいずれかが、オンチップのキャッシュとしても実装することができ、本発明の範囲内で、キャッシュ・メモリは、オフチップでも実装することができる。
【００７０】
図３に示される各ルータ１１０は、４つのポート１５８Ａ〜Ｄがリンク１１８を介して他のルータに接続され、５番目のポート１６０が各ルータをその関連するＩＰブロック１０４にネットワーク・インターフェイス・コントローラ１０８を介して接続している５つのポート、およびメモリ通信コントローラ１０６を含む。図２および図３の説明から理解できるように、ＮＯＣ１０２のルータ１１０およびリンク１１８は、各ルータ内の垂直ポートおよび水平ポートを接続する垂直リンクおよび水平リンクでメッシュ・ネットワークを形成する。例えば、図３の説明では、ポート１５８Ａ、１５８Ｃ、および１６０が垂直ポートと呼ばれ、ポート１５８Ｂおよび１５８Ｄが水平ポートと呼ばれる。
【００７１】
次いで、図４は、発行または命令ユニット（ＩＵ）１６２、実行ユニット（ＸＵ）１６４、および補助実行ユニット（ＡＸＵ）１６６に仕切られた処理要素として実装される、本発明に一致するＩＰブロック１０４の１つの例示的な実装を、別の方法で示す。示された実装では、ＩＵ１６２はＬ１命令キャッシュ（ｉＣＡＣＨＥ）１７０からの命令を受け取る複数の命令バッファ１６８を含む。各命令バッファ１６８は、複数例えば４つの対称的なマルチスレッド化（ＳＭＴ）ハードウェア・スレッドのうちの１つに専用である。有効アドレス−実アドレス変換ユニット（ｉＥＲＡＴ）１７２がｉＣＡＣＨＥ１７０に結合され、より低次のメモリからの命令を取り出すために、複数のスレッド・フェッチ・シーケンサ１７４からの命令フェッチ要求を実アドレスに変換するために使用される。各スレッド・フェッチ・シーケンサ１７４は、特定のハードウェア・スレッドに専用であり、関連するスレッドにより実行される命令が適切な実行ユニットへ発送するためｉＣＡＣＨＥに確実にフェッチされるように使用される。図４にやはり示されるように、命令バッファ１６８内にフェッチされる命令は、分岐予測論理部１７６により監視することもでき、このことによって、スレッドの実行での分岐から生じる命令キャッシュ・ミスを最小化するため、手がかりを各スレッド・フェッチ・シーケンサ１７４へ提供する。
【００７２】
ＩＵ１６２は、各ハードウェア・スレッドに専用の、依存性／発行論理ブロック１７８も含み、依存性を解決して命令バッファ１６８からＸＵ１６４への命令の発行を制御するように構成される。加えて、示された実施形態では、別個の依存性／発行論理部１８０がＡＸＵ１６６にもうけられ、したがって、異なるスレッドにより別個の命令をＸＵ１６４およびＡＸＵ１６６へ同時に発行することを可能にする。代替の実施形態では、依存性／発行論理部１８０をＩＵ１６２内に配設することができ、またはその全体を省略することができ、そのため、依存性／発行論理ブロック１７８がＡＸＵ１６６に命令を発行する。
【００７３】
ＸＵ１６４は、固定小数点論理部１８４、分岐論理部１８６、およびロード／ストア論理部１８８に結合される汎用レジスタ（ＧＰＲ）１８２の組を含む、固定小数点実行ユニットとして実装される。ロード／ストア論理部１８８は、ｄＥＲＡＴ論理部１９２により提供される有効アドレス−実アドレス変換でＬ１データ・キャッシュ（ｄＣＡＣＨＥ）１９０に結合される。ＸＵ１６４は、例えば３２ｂまたは６４ｂのＰｏｗｅｒＰＣ命令セットの全てまたは一部といった、事実上任意の命令セットを実装するように構成することができる。
【００７４】
ＡＸＵ１６６は、専用の依存性／発行論理部１８０ならびに１つまたは複数の実行ブロック１９４を含む補助実行ユニットとして動作する。ＡＸＵ１６６は、任意の数の実行ブロックを含むことができ、例えば、浮動小数点ユニット、あるいは暗号化／復号化ユニット、コプロセッサ、ベクトル処理ユニット、画像処理ユニット、ＸＭＬ処理ユニットなど１つまたは複数の特殊化した実行ユニットといった、事実上任意のタイプの実行ユニットを実装することができる。示された実施形態では、ＡＸＵ１６６は、例えば、ＡＸＵ設計された状態とＸＵ設計された状態との間で直接動くことをサポートするために、ＸＵ１６４への高速補助インターフェイスを含む。
【００７５】
ＩＰブロック１０４での通信は、ＮＯＣ１０２に結合されたネットワーク・インターフェイス・コントローラ１０８を介して、図２に関して上で議論されたように管理することができる。例えばＬ２キャッシュ・メモリにアクセスするためといった、アドレス・ベースの通信は、メッセージ・ベースの通信と一緒に提供することができる。例えば、各ＩＰブロック１０４は、ＩＰブロック間のノード間通信を取り扱うために、専用の受信ボックスまたは送信ボックスあるいはその両方を含むことができる。
【００７６】
本発明の実施形態は、図１〜図４に関して上で記載されたハードウェア環境およびソフトウェア環境内に実装することができる。しかし、本発明が数多くの異なる環境で実装することができ、本発明の精神および範囲から逸脱することなく上記のハードウェアおよびソフトウェアの実施形態に他の変更を加えることができることは、本開示の恩恵を被る当業者には理解されよう。したがって本発明は、本明細書に開示される特定のハードウェアおよびソフトウェア環境に限定されない。
【００７７】
低遅延変数伝達ネットワーク
拡張されたハードウェア・スレッド化を介してシングル・スレッドのコード実行性能をより高くすることは、処理能力の計算において、長い間の目標であった。この目標を達するための１つのコンパイラのオプションは、シングル・スレッド化されたコードを多くの小さいコード・セグメントに分割し、それらを複数のハードウェア・スレッド上で並列に実行することである。例えば、図５に示されるように、シングル・スレッド化されたコード２００は、場合によって、Ａ〜Ｄと表される、複数のより小さいコード・セグメントに分割され、２０２、２０４、２０６、および２０８で示されるように複数のスレッドＴ０〜Ｔ３でそれぞれ実行することができる。
【００７８】
しかし、シングル・スレッド化されたコードを複数のセグメントに分割することは、ハードウェア・スレッド間に緊密な相互依存性をもたらすことがしばしばあり、その結果、完了するべき他のスレッドの結果を待つ間、スレッドがストールまたは遅延することになる。例えば、本発明に一致するいくつかの実施形態では、異なるスレッドで実行するコード・セグメント間で、本明細書では変数と呼ぶデータを伝達するために、コンパイラによって依存性のあるコード・セグメント内にｐｕｔ命令およびｇｅｔ命令が挿入される。例えば、図５は、Ｒ１に記憶された値を変数Ｘに割り当てる、スレッドＴ０で実行するコード・セグメントＡ内のｐｕｔ命令、および変数Ｘを取り出してその変数の内容をレジスタＲ７２内に記憶する、スレッドＴ２で実行するコード・セグメントＣ内のｇｅｔ命令を示す。
【００７９】
データが１つのスレッドにより変数に記憶され、次いで別のスレッドにより取り出すことができる速度は、システム性能にかなりの影響をおよぼす可能性があり、比較的高遅延のデータ伝達は、全ての並列化の有効性を必然的に減少させることになる。というのは、変数が他のスレッドから到達するのを待って、より頻繁にスレッドがストールされるからである。
【００８０】
したがって本発明に一致する実施形態は、ハードウェア・スレッド間に本明細書では変数伝達ネットワークと呼ばれる低遅延レジスタ伝達機構をもうけることにより、マルチスレッド化した処理環境で１つまたは複数の処理コアに配設されるスレッド間で変数を通信する細粒化並列処理を容易にする。恩恵の中でもとりわけ、本発明に一致する実施形態は、単一のプロセス・スレッドを複数のスレッドの実行にわたって拡げ、シングル・スレッド化されたコードからそれ以上の性能を引き出すことを可能にすることができる。
【００８１】
以下でより詳細に議論される実施形態では、マルチスレッド化した処理環境が、ハードウェア・スレッド間で低遅延変数伝達を可能にする命令セットのアーキテクチャでの命令の組をサポートする。１つの実施形態では、拡張されたレジスタ・ファイルのエントリのグループが、他のハードウェア・スレッドから送信された変数を受け取るために使用されるＦＩＦＯのヘッドとして機能する。各ＦＩＦＯは１つのエントリと同じくらい小さくてよく、またはシステム要件に基づいて、多数のエントリを含むことができる。次いで、これらのレジスタに依存する命令が既存の依存性チェック・ハードウェアを利用して、入力レジスタが利用可能となるまで、パイプライン・レベルのストールを可能にすることができる。したがって、ソース・オペランドが利用可能になるまで、依存性命令は、命令発行待ち行列で待つ。入力レジスタは、それが送信側ハードウェア・スレッドから受け取られるとすぐに利用可能となり、クレジット・スキームが望ましくは使用されてＦＩＦＯを管理し、そのため、利用可能なスロットがあるときは、レジスタ値を伝送するのに遅延がない。送信先ハードウェア・スレッド上で、レジスタ値が設計されたレジスタに移動され、ＦＩＦＯレジスタのヘッドをクリアし、送信側ハードウェア・スレッドにクレジットを直ちに返して、次の伝達を可能にする。
【００８２】
異なる実施形態では、拡張されたレジスタのエントリは、固定小数点部内、浮動小数点部内、またはハードウェア・スレッド間で完全なベクトル・レジスタ変数までを伝達するのを可能にするベクトル・レジスタ・ファイル内、あるいはそれらの組合せ内に含むことができる。しかし、他の実施形態では、ＦＩＦＯレジスタは、任意のレジスタ・ファイルから別個に実装することができ、そのため本発明は、そのように限定されない。
【００８３】
例えば、図６は、マルチスレッド化した処理環境の例示的な実装、すなわちデータ処理システム２１０を示し、そこでは、本発明に一致した方法で、低遅延変数伝達ネットワークを実装することができる。データ処理システム２１０は、４つの処理コア２１２（コアＡ〜Ｄとも表される）を含んで実装され、それぞれが、４つのハードウェア・スレッド２１４（スレッドＴ０〜Ｔ３とも表される）、および低遅延変数伝達ネットワーク２１８により互いに結合される、ハードウェア・スレッド２１４により共有される共通レジスタ・ファイル２１６を含む。したがって、合計１６のスレッドが４つの処理コア２１２間でサポートされる。
【００８４】
処理コア２１２は、典型的には、マルチコア・プロセッサ・チップまたはＳＯＣデバイスなどの共通の集積回路デバイス上に配設され、コアは、典型的には、（例えば、ＮＯＣ構成で）他の通信バスまたはネットワークあるいはその両方を介して互いに結合され、チップ上の他の構成要素を共有することが理解されよう。しかし、これらの追加の通信バス、ネットワーク、および構成要素は、本発明の議論を簡略化するため、図６から省略される。
【００８５】
データ処理システム２１０に低遅延変数伝達ネットワークを実装するために、各処理コアは、共通レジスタ・ファイル２１６に拡張されたレジスタとして実装される複数の変数レジスタ２２０を含み、変数伝達ネットワーク制御論理部２２２がこれらの変数レジスタ２２０を低遅延変数伝達ネットワーク２１８とインターフェイスする。例えば、図７に示されるように、共通レジスタ・ファイル２１６は、４つのスレッドに特定のグループに仕切られる、１２８個のローカル・レジスタＲ０〜Ｒ１２７を含むことができ、そのため、各スレッドＴ０〜Ｔ３は３２個のローカル・レジスタに割り振られる。加えて、共通レジスタ・ファイル２１６は、ＶＲ０〜ＶＲ１５とも呼ばれる複数の変数レジスタ２２０で拡張することができ、１つの変数レジスタが、データ処理システム内の各個別スレッドに割り振られるまたは割り当てられる。
【００８６】
加えて、ハードウェア・スレッド間の変数の伝達を調整するために、各変数レジスタは、関連するクレジット・フラグ２２４および有効フラグ２２６を有する。クレジット・フラグ２２４は、クレジット・ベースのプロトコルで使用され、送信元スレッドが利用可能クレジットを有するときだけ、送信元スレッドが送信先スレッドに新しい変数を通信することを可能にし、一方有効フラグ２２６は、送信元スレッドにより使用され、いつ有効なデータが変数レジスタに書き込まれたかを示す。有効フラグ２２６は、送信先スレッドが変数を読み取り、送信元スレッドにクレジットを送り返すことに応答してクリアされる。
【００８７】
変数伝達ネットワークが実装される方法は、異なる実施形態で変化することができる。例えば、図８に示されるように、変数伝達ネットワークは、各処理コア２１２用に、別個の専用の送信バス２３０をそれぞれの他の処理コア２１２にもうけることにより実装することができる。特に、図８は、コアＡをイネーブルにして、コアＢ、コアＣ、およびコアＤのそれぞれに変数を送信するために実装することができる、３つの専用の送信バス２３０を示す。それぞれの他のコアＢ、コアＣ、およびコアＤは、それ自体の専用の送信バスを備えることができ、このことにより、合計１２個の送信バス、すなわちコアの対当たり２つがもうけられることを理解されよう。
【００８８】
各送信バス２３０は、主に、送信側コア内の変数伝達ネットワーク制御論理部２２２により駆動され、内部コアの送信バス２３２を介して変数レジスタ２２０に結合される。図８を簡略化するために、コアＡからコアＣへの送信バス２３０だけが、その個別の信号経路に分割されているが、コアＡからコアＢおよびコアＡからコアＤの送信バスが同様に構成されることを理解されよう。
【００８９】
この実施形態では、変数レジスタ２２０を含む、共通レジスタ・ファイル２１６内のレジスタは、６４ビット幅であり、したがって、６４本のデータ線の組が各送信バス２３０にもうけられ、同じクロック・サイクルで変数レジスタの内容を通信する。データ線を介して変数を通信することと同時に、２ビットスレッド識別子（スレッドＩＤ）と同様に、１ビッド有効信号がアサートされる。単一のビットを返す線が使用され、変数が送信先スレッドにより読み取られたときに、送信先コアから送信元コアにクレジットを返す。したがって各送信バス２３０は６８個の信号経路を用いて実装され、クレジット線は送信先コアにより駆動され、他の全ての線は送信元コアにより駆動される。
【００９０】
図９は、送信バス２３０を介した典型的な変数伝送のタイミング図を示し、これにより、変数が特定の送信先スレッドに向けて変数レジスタに書き込まれると、変数レジスタ用の有効フラグが設定され、送信先スレッドが常駐する処理コアに結合される送信バス上にデータがアサートされる（時間Ａ）。加えて、送信先スレッド用の識別子（Ｔ０〜Ｔ３）がスレッドＩＤ線上にアサートされ、そのため、送信先処理コア内の適切な変数レジスタにデータをルーティングすることができる。下でより詳細に議論されるように、データが変数レジスタに記憶され、変数レジスタ内の有効フラグが送信先コア内で設定される。
【００９１】
その後のある時（時間Ｂ）に、送信先処理コア内の送信先スレッドが変数レジスタを読み取り、送信先コアの変数レジスタ内の有効フラグをクリアし、クレジットを送信側処理コアに返させ、送信側処理コアに、送信側処理コア内の変数レジスタの有効ビットをクリアさせる。
【００９２】
変数伝達ネットワークは、いくつかの実施形態で、異なる処理コア間の通信に使用されるものと同じプロトコルを利用して、同じ処理コア上のスレッド間の変数の、スレッド間通信を可能にし、またはいくつかの実施形態で所望であれば、スレッドがそれ自体に変数を送ることを可能にさえするように構成できることも理解されよう。
【００９３】
各処理コアから他の処理コアのそれぞれへの別個の送信バスを使用することによって、スレッド間のコンフリクトの可能性を最小化した非常に低遅延の動作が可能になる。しかし、他の実施形態では、他の実装を使用することができる。例えば、図１０は、各処理コアに別個の送信バスを利用するのではなく、各処理コア２１２用に他の３つの処理コアへ単一の送信バス２３２’がもうけられる場合の代替実装を示す。したがって、図１０では、コアＡ用に単一の送信バス２３２’を示しているが、コアＢ〜コアＤのそれぞれがそれ自体の送信バス２３２’を含み、合計４つのバスとなることが理解されよう。送信バス２３２’は、送信バス２３２と同様に構成することができるが、変数用に送信先コアを符号化する２つのコアＩＤ線を追加し、その結果、３つの処理コア全てが送信バス２３２’を介して通信される各変数を探るのだが、送信先スレッドを有する処理コアだけがプロトコルに関与する。この点に関連して、４つのコアＩＤ線およびスレッドＩＤ線が集合的に、１６個のハードウェア・スレッドのうちの単一のスレッドを識別する。
【００９４】
本発明の他の実施形態では、他のネットワーク通信を使用することができる。例えば、いくつかの実装では、例えばバッファ２３４といった１つまたは複数のバッファを組み込むことが望ましい場合がある。というのは、信号伝搬遅延を考慮すると、処理コア間のより長い相互接続で必要な場合があるからである。それにも関わらず、本明細書で開示されるプロトコルでは、変数の送信および受信は非同期で取り扱われるので、１つまたは複数のバッファを追加することは、伝送の遅延を増加させる一方で、それにも関わらず、伝送プロトコルに影響をおよぼすことがない。加えて、同じ処理コア内のスレッド間のスレッド間変数伝送は、コア間通信に要求される信号経路の長さと比較して、コア内の信号経路の長さが実質的により短いことに起因して、コア間伝送に要求されうるプロトコルに依拠しない最適化されたプロトコルを利用できることを理解されよう。さらに、いくつかの実装では、各スレッドは、変数伝達ネットワークに関与する全ての他の一意のスレッドに専用送信バスを有することができ、このことによってスレッドＩＤ線またはコアＩＤ線の必要を完全になくすことになる。
【００９５】
いくつかの実施形態では、変数伝達ネットワーク内の信号経路の数を減少させるために、より狭いバスを利用することが望ましい場合もある。例えば、６４ビットの変数に関して、２、４、または８サイクルにわたって通信される３２ビット、１６ビット、または８ビットの部片に変数を分割することができる。あるいは、直列伝送プロトコルを使用することができる。これらの変形形態のそれぞれでは、より少ない信号経路が要求されるが、遅延が増加することを代償としており、このことは、性能を最大化するため最小の遅延が望まれる用途では、望ましくない可能性がある。
【００９６】
次いで、図１１および図１２は、本発明に一致する低遅延変数伝達ネットワークを利用することができる例示的なｐｕｔ命令およびｇｅｔ命令を示す。ｐｕｔ命令（送信元スレッドにより実行され、ローカル・レジスタＲｘに記憶された値を、送信先スレッドｙに関して変数レジスタＶＲｙに送信する、ｐｕｔ  ＶＲｙ、Ｒｘ）は、図１１の２５０で示されるように、最初にブロック２５２で、変数レジスタＶＲｙ内のクレジット・フラグを送信先スレッドｙに関してチェックして、クレジットがレジスタに関して利用可能であるかどうか決定することによって取り扱われる。利用可能でない場合、送信元スレッドは、クレジットが利用可能になるまで、従来型の依存性論理部を使用してストールする。
【００９７】
しかし、クレジットが利用可能である場合、制御はブロック２５４に進み、送信先スレッドが常駐するコアに関して送信バスを選択し、次いでブロック２５６に進み、レジスタＲｘの内容を送信バスに移動し、レジスタＲｘに記憶された値をデータ線にアサートし、送信バスの有効線をアサートし、送信バスのスレッドＩＤ線に送信先コア内の送信先スレッドの識別子をアサートする。このデータが送信バスに一度アサートされたら、送信側スレッドは解放されて次に進み、命令ストリーム中の後続の命令を実行する。
【００９８】
ｇｅｔ命令（送信先スレッドにより実行され、送信元スレッドｙの変数レジスタに記憶された変数をローカル・レジスタＲｘに移動する、ｇｅｔ  Ｒｘ、ＶＲｙ）は、図１２の２６０で示されるように、最初にブロック２６２で、変数レジスタＶＲｙ内の有効フラグをチェックして、有効なデータが変数レジスタに記憶されているかどうか決定することによって取り扱われる。記憶されていない場合、送信先スレッドは、有効なデータが変数レジスタに示されるまで従来型の依存性論理部を使用してストールする。
【００９９】
しかし、有効なデータが変数レジスタに記憶されている場合、制御はブロック２６４に進み、変数レジスタ内の有効フラグをクリアし、次いでブロック２６６に進み、送信元スレッドが常駐するコアに関して送信バスを選択する。次いで、ブロック２６８で、クレジットが送信バスを介して返され、変数が読み取られたことを送信元コアに通知する。クレジットが送信バスに一度アサートされたら、送信先スレッドは解放されて次に進み、命令ストリーム中の後続の命令を実行する。
【０１００】
図１１〜図１２に示されたｐｕｔ命令およびｇｅｔ命令に関して、送信元スレッド内のｐｕｔ命令が送信先スレッドに関連する変数レジスタに移動するが、送信元スレッドに関連する変数レジスタ内の送信先スレッドにデータが提示され、その結果、送信先スレッド内のｇｅｔ命令が、送信元スレッドに関連する変数レジスタから移動し、送信元スレッド自体ではないように変数伝達ネットワークが構成されることを理解されよう。
【０１０１】
したがって、例えば、１つの処理コア上のローカル・レジスタＲ１に記憶されたデータを、その処理コア上で実行しているスレッド０を使用して、別の処理コア上のローカル・レジスタＲ２９に、その別の処理コア上のスレッド１（グローバルには、スレッド１３として識別される）によりアクセスするため移動することが求められる場合、スレッド０は、典型的には、「ｐｕｔ  ＶＲ１３、Ｒ１」動作を実施し、そのローカル・レジスタＲ１の内容を、スレッド１３に関して変数レジスタＶＲ１３に移動させることになる。その別の処理コア上のスレッド１３は、典型的には、次いで「ｇｅｔ  Ｒ２９、ＶＲ０」動作を実施し、変数レジスタＶＲ０の内容を、スレッド０に関してそのローカル・レジスタＲ２９に移動させることになる。
【０１０２】
示された実施形態では、ｐｕｔ命令およびｇｅｔ命令は、典型的には、例えば、アプリケーションの開発およびコンパイルの期間に、最適化コンパイラによりアプリケーションの１つまたは複数の命令ストリームに組み込まれる。上記のように、命令は、シングル・スレッド化されたコードを複数の仮想スレッドに並列化することに関して使用することができる。コンパイル期間に、遅延を最小化するため可能なときはいつでも、同じ処理コア上で互いの間で変数を頻繁に受け渡す仮想スレッドを、コンパイラがコロケートすることが典型的には望ましいことを理解されたい。さらに、例えば、同じプロセッサ・チップ上で互いから遠いコア間のより長い経路を取り扱うために、変数伝達ネットワーク内にバッファを挿入することに起因して、異なる処理コア間で遅延が異なる場合、またはいくつかの処理コアが異なるチップ上に配設される可能性があるとき、コンパイラはそのことを、仮想スレッドを処理コアに割り当てるときに、考慮することができる。
【０１０３】
本発明に一致する変数伝達ネットワークは、コンパイラ・スレッド仮想化に関連して使用される必要はなく、低遅延スレッド間通信を必要とする他のアプリケーションに有用性を見いだすことができることも理解されよう。
【０１０４】
上記のように、示された実施形態内の各変数レジスタは、その関連するハードウェア・スレッド用の受信ボックスにそっくりの、単一エントリの待ち行列またはＦＩＦＯデータ構造体のヘッドとして機能する。しかし、変数レジスタは、複数のエントリの待ち行列またはＦＩＦＯを使用して実装することができ、クレジット・ベースのプロトコルは、送信元スレッドに複数のクレジットを付与して、送信先スレッドが以降に消費するため複数の変数をバッファすることを可能にできることが理解されよう。
【０１０５】
加えて、示された実施形態内の各変数レジスタは、レジスタ・ファイル内の他のレジスタとほとんど同じようにアクセス可能であり、各処理コアの既存の依存性論理部に結合され、その結果、既存の依存性論理部を活用して、命令間遅延が同期される同じように変数レジスタへのアクセスを同期することができる。
【０１０６】
様々な実施形態では、変数レジスタが異なるレジスタ・ファイル内に組み込まれ、異なる実行ユニットにより利用されて、例えば、その結果、低遅延変数伝達ネットワークが固定小数点実行ユニット、浮動小数点実行ユニット、スカラー実行ユニット、ベクトル実行ユニットまたはこれらの様々な組合せのためにだけ実装される場合があることを理解されよう。
【０１０７】
さらに、示された実施形態は、１６個のスレッドが、４つの処理コア間の４つのグループに分散されるプロセッサ・チップを開示するが、本発明は、任意の数のスレッドおよび任意の数の処理コアに関連して利用できることを理解されよう。加えて、本明細書に開示された、クレジット・ベースの単一のエントリの待ち行列プロトコルの代替として、他の同期プロトコル、待ち行列プロトコル、またはハンドシェイク・プロトコルあるいはその組合せを使用でき、本明細書で開示されたネットワーク・トポロジー以外の他のネットワーク・トポロジーを使用できることを理解されよう。したがって、本発明は、本明細書に開示された特定の実装の詳細に限定されない。
【０１０８】
加えて、変数レジスタは、変数伝達ネットワーク内に関与するあらゆるハードウェア・スレッド用にあらゆるコア内に完全に設計されているが、本発明に一致する実施形態は、あらゆるコア内の各レジスタ用に完全な論理回路を実装する必要はないことを理解されよう。例えば、いくつかの実施形態で、共有化した受信ボックス／送信ボックスとして機能する共有化したバッファを使用して、変数がレジスタ・ファイル内のローカル・レジスタに受け渡される前に変数を一時的に記憶し、このことにより、あらゆるコア内のあらゆる変数レジスタ用に記憶装置を割り振る必要を回避する。また、スレッドが割り振られた変数レジスタにスレッドがデータを送ることを可能にすることが望ましい場合がある。そのようにすることによって、各スレッドにそれ自体のスクラッチ・レジスタを効果的に提供することになる。加えて、いくつかの実施形態では、所与のコア内のローカル・スレッドについて変数レジスタを省略すること、またはいくつかの実装で有効インジケータもしくはクレジット・インジケータを省略することが望ましい場合がある。いくつかの実施形態では、変数レジスタ内の直接的とは異なるデータ構造体でクレジット・インジケータまたは有効インジケータあるいはその両方を実装することが望ましい場合もある。加えて、いくつかの実施形態では、各処理コア内のスレッドのサブセットだけが変数伝達ネットワークをサポートする場合があり、このことによって、変数伝達を必要とする任意の作業負荷をそれらのスレッド上で実行し、変数伝達を必要としない他の作業負荷を他のスレッド上で実行することを可能にしながら、変数伝達ネットワークを実装するのに必要な論理回路の削減を可能にすることができる。本発明の範囲から逸脱することなく、開示された実施形態に対し、様々な追加の変更を行うことができる。
【図１】
0005764265.tif 000002
【図２】
0005764265.tif 000003
【図３】
0005764265.tif 000004
【図４】
0005764265.tif 000005
【図５】
0005764265.tif 000006
【図６】
0005764265.tif 000007
【図７】
0005764265.tif 000008
【図８】
0005764265.tif 000009
【図９】
0005764265.tif 000010
【図１０】
0005764265.tif 000011
【図１１】
0005764265.tif 000012
【図１２】
0005764265.tif 000013