IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特許7108135並び替えの間のキャッシュ一貫性を維持する方法
<>
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図1
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図2
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図3
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図4
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図5
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図6
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図7
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図8
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図9
  • 特許-並び替えの間のキャッシュ一貫性を維持する方法 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-07-19
(45)【発行日】2022-07-27
(54)【発明の名称】並び替えの間のキャッシュ一貫性を維持する方法
(51)【国際特許分類】
   G06F 12/0806 20160101AFI20220720BHJP
   G06F 12/0864 20160101ALI20220720BHJP
【FI】
G06F12/0806 100
G06F12/0864
【請求項の数】 20
(21)【出願番号】P 2021517642
(86)(22)【出願日】2019-06-28
(65)【公表番号】
(43)【公表日】2022-01-31
(86)【国際出願番号】 US2019039919
(87)【国際公開番号】W WO2020072112
(87)【国際公開日】2020-04-09
【審査請求日】2021-05-28
(31)【優先権主張番号】16/150,520
(32)【優先日】2018-10-03
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】グレゴリー ディー. ダンリー
(72)【発明者】
【氏名】ブライアン ピー. ブルッサール
【審査官】後藤 彰
(56)【参考文献】
【文献】米国特許出願公開第2018/0052631(US,A1)
【文献】特表2019-525354(JP,A)
【文献】米国特許出願公開第2007/0106874(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/0806
G06F 12/0864
(57)【特許請求の範囲】
【請求項1】
各々のタイプの要求を記憶するように構成された複数のキューと、
各々が要求アドレスを記憶するように構成された1つ以上のアドレス履歴キャッシュと、
制御ロジックと、を備え、
前記制御ロジックは、
アドレスを含む受信した第1の要求について、前記複数のキューのうち何れかのキューを選択することと、
前記第1の要求について、第1のエントリを選択されたキューに割り当てることと、
第1の指標と、第2の指標と、を前記第1のエントリに記憶することと、
を行うように構成されており、
前記第1の指標は、
前記アドレスが、前記1つ以上のアドレス履歴キャッシュのうち何れかのアドレス履歴キャッシュ内で発見されたことを示し、
前記第2の指標は、
第2の要求が、前記第1の要求と同じ送信元を有しており、アドレスが受信機に記憶されるという指標を含む前記選択されたキューのエントリに記憶されており、前記第1の要求より古い1つ以上の要求のうち最も新しい要求である、ことを判別したことに応じて、前記選択されたキューが、前記第2の要求によって前記アドレスの記憶のために割り当てられた第2のエントリを有することを示す、
装置。
【請求項2】
前記制御ロジックは、
前記第1の要求が発行のために選択され、前記第1の要求について前記選択されたキューの前記第1のエントリが、前記第1の指標を未だ記憶しており、前記第2の指標を記憶していない、と判別したことに応じて、前記アドレス履歴キャッシュ内の前記アドレスの位置の識別情報と、前記アドレスの全体よりも少ない前記アドレスの一部と、を含む、前記第1の要求に対応する圧縮パケットを生成するように構成されている、
請求項1の装置。
【請求項3】
前記制御ロジックは、
前記第1の要求が発行のために選択され、前記第1の要求について前記選択されたキューの前記第1のエントリが、前記第1の指標を未だ記憶しており、前記第2の指標を未だ記憶している、と判別したことに応じて、前記アドレスを含む、前記第1の要求に対応する非圧縮パケットを生成するように構成されている、
請求項1の装置。
【請求項4】
前記制御ロジックは、
前記選択されたキューに対応する前記アドレス履歴キャッシュ内の前記第1の要求に対応する前記アドレスを発見しなかったことに応じて、
前記アドレスが前記アドレス履歴キャッシュ内で発見されなかったという指標を前記第1のエントリに記憶することと、
前記アドレスの少なくとも一部を記憶するための前記アドレス履歴キャッシュ内の位置を識別することと、
前記アドレスの一部を前記位置に記憶することと、
前記位置の識別情報を前記第1のエントリに記憶することと、
を行うように構成されている、
請求項1の装置。
【請求項5】
前記制御ロジックは、
前記第2の要求が発行のために選択されると判別したことに応じて、前記選択されたキュー内で割り当てられたエントリを有する、前記第2の要求より古い1つ以上のマッチする古い要求を検索するように構成されており、
前記1つ以上のマッチする古い要求は、前記第2の要求と同じ送信元、及び、前記アドレス履歴キャッシュ内の位置の同じ識別情報を有する、
請求項1の装置。
【請求項6】
前記制御ロジックは、
前記1つ以上のマッチする古い要求を発見したことに応じて、
前記1つ以上のマッチする古い要求の前記割り当てられたエントリ内のアドレス履歴キャッシュヒットの指標を消去することと、
前記1つ以上のマッチする古い要求の前記割り当てられたエントリ内の前記受信機に記憶するアドレスの指標を消去することと、
を行うように構成されている、
請求項5の装置。
【請求項7】
前記制御ロジックは、
前記第2の要求が発行のために選択されると判別したことに応じて、前記選択されたキュー内の割り当てられたエントリを有する、前記第2の要求より新しい複数のマッチする新しい要求を検索するように構成されており、
前記複数のマッチする新しい要求は、前記第2の要求と同じ送信元、及び、前記アドレス履歴キャッシュ内の同じ位置の識別情報を有する、
請求項5の装置。
【請求項8】
前記制御ロジックは、
前記1つ以上のマッチする新しい要求を発見したことに応じて、
前記第2の要求と、第3の要求より古い第4の要求と、の間のエイジによって、前記第3の要求を識別することであって、前記第4の要求に対する前記選択されたキュー内のエントリは、前記受信機のアドレス履歴キャッシュに記憶される前記第4の要求のアドレスを指定する指標を記憶する、ことと、
前記第3の要求のアドレスを前記受信機のアドレス履歴キャッシュに記憶するために前記第3の要求が前記第2の要求に依存することを指定する指標であって、識別された第3の要求に対する前記選択されたキューに記憶された指標を消去することと、
を行うよう構成されている、
請求項7の装置。
【請求項9】
要求を、各々のタイプの要求を記憶するように構成された複数のキューに記憶することと、
要求アドレスを、1つ以上のアドレス履歴キャッシュに記憶することと、
アドレスを含む受信した第1の要求について、前記複数のキューのうち何れかのキューを選択することと、
前記第1の要求について、第1のエントリを選択されたキューに割り当てることと、
第1の指標と、第2の指標と、を前記第1のエントリに記憶することと、を含み、
前記第1の指標は、
前記アドレスが、前記1つ以上のアドレス履歴キャッシュのうち何れかのアドレス履歴キャッシュ内で発見されたことを示し、
前記第2の指標は、
第2の要求が、前記第1の要求と同じ送信元を有しており、アドレスが受信機に記憶されるという指標を含む前記選択されたキューのエントリに記憶されており、前記第1の要求より古い1つ以上の要求のうち最も新しい要求である、ことを判別したことに応じて、前記選択されたキューが、前記第2の要求によって前記アドレスの記憶のために割り当てられた第2のエントリを有することを示す、
方法。
【請求項10】
前記第1の要求が発行のために選択され、前記第1の要求について前記選択されたキューの前記第1のエントリが、前記第1の指標を未だ記憶しており、前記第2の指標を記憶していない、と判別したことに応じて、前記アドレス履歴キャッシュ内の前記アドレスの位置の識別情報と、前記アドレスの全体よりも少ない前記アドレスの一部と、を含む、前記第1の要求に対応する圧縮パケットを生成することを含む、
請求項9の方法。
【請求項11】
前記第1の要求が発行のために選択され、前記第1の要求について前記選択されたキューの前記第1のエントリが、前記第1の指標を未だ記憶しており、前記第2の指標を未だ記憶している、と判別したことに応じて、前記アドレスを含む、前記第1の要求に対応する非圧縮パケットを生成することを含む、
請求項9の方法。
【請求項12】
前記選択されたキューに対応する前記アドレス履歴キャッシュ内の前記第1の要求に対応する前記アドレスを発見しなかったことに応じて、
前記アドレスが前記アドレス履歴キャッシュ内で発見されなかったという指標を前記第1のエントリに記憶することと、
前記アドレスの少なくとも一部を記憶するための前記アドレス履歴キャッシュ内の位置を識別することと、
前記アドレスの一部を前記位置に記憶することと、
前記位置の識別情報を前記第1のエントリに記憶することと、を含む、
請求項9の方法。
【請求項13】
前記第2の要求が発行のために選択されると判別したことに応じて、前記選択されたキュー内で割り当てられたエントリを有する、前記第2の要求より古い1つ以上のマッチする古い要求を検索することを含み、
前記1つ以上のマッチする古い要求は、前記第2の要求と同じ送信元、及び、前記アドレス履歴キャッシュ内の位置の同じ識別情報を有する、
請求項9の方法。
【請求項14】
前記1つ以上のマッチする古い要求を発見したことに応じて、
前記1つ以上のマッチする古い要求の前記割り当てられたエントリ内のアドレス履歴キャッシュヒットの指標を消去することと、
前記1つ以上のマッチする古い要求の前記割り当てられたエントリ内の前記受信機に記憶するアドレスの指標を消去することと、を含む、
請求項13の方法。
【請求項15】
前記第2の要求が発行のために選択されると判別したことに応じて、前記キュー内の前記割り当てられたエントリを有する、前記第2の要求より新しい複数のマッチする新しい要求を検索することを含み、
前記複数のマッチする新しい要求は、前記第2の要求と同じ送信元、及び、前記アドレス履歴キャッシュ内の同じ位置の識別情報を有する、
請求項13の方法。
【請求項16】
プログラム命令を記憶するコンピュータ可読記憶媒体であって、
前記プログラム命令は、
要求を、各々のタイプの要求を記憶するように構成された複数のキューに記憶することと、
要求アドレスを、1つ以上のアドレス履歴キャッシュに記憶することと、
アドレスを含む受信した第1の要求について、前記複数のキューのうち何れかのキューを選択することと、
前記第1の要求について、第1のエントリを選択されたキューに割り当てることと、
第1の指標と、第2の指標と、を前記第1のエントリに記憶することと、
をプロセッサに実行させ、
前記第1の指標は、
前記アドレスが、前記1つ以上のアドレス履歴キャッシュのうち何れかのアドレス履歴キャッシュ内で発見されたことを示し、
前記第2の指標は、
第2の要求が、前記第1の要求と同じ送信元を有しており、アドレスが受信機に記憶されるという指標を含む前記選択されたキューのエントリに記憶されており、前記第1の要求より古い1つ以上の要求のうち最も新しい要求である、ことを判別したことに応じて、前記選択されたキューが、前記第2の要求によって前記アドレスの記憶のために割り当てられた第2のエントリを有することを示す、
コンピュータ可読記憶媒体。
【請求項17】
前記プログラム命令は、
前記第1の要求が発行のために選択され、前記第1の要求について前記選択されたキューの前記第1のエントリが、前記第1の指標を未だ記憶しており、前記第2の指標を記憶していない、と判別したことに応じて、前記アドレス履歴キャッシュ内の前記アドレスの位置の識別情報と、前記アドレスの全体よりも少ない前記アドレスの一部と、を含む、前記第1の要求に対応する圧縮パケットを生成すること、をプロセッサに実行させる、
請求項16のコンピュータ可読記憶媒体。
【請求項18】
前記プログラム命令は、
前記第1の要求が発行のために選択され、前記第1の要求について前記選択されたキューの前記第1のエントリが、前記第1の指標を未だ記憶しており、前記第2の指標を未だ記憶している、と判別したことに応じて、前記アドレスを含む、前記第1の要求に対応する非圧縮パケットを生成すること、をプロセッサに実行させる、
請求項16のコンピュータ可読記憶媒体。
【請求項19】
前記プログラム命令は、
前記キューに対応する前記アドレス履歴キャッシュ内の前記第1の要求に対応する前記アドレスを発見しなかったことに応じて、
前記アドレスが前記アドレス履歴キャッシュ内で発見されなかったという指標を前記第1のエントリに記憶することと、
前記アドレスの少なくとも一部を記憶するための前記アドレス履歴キャッシュ内の位置を識別することと、
前記アドレスの一部を前記位置に記憶することと、
前記位置の識別情報を前記位置に記憶することと、
をプロセッサに実行させる、
請求項16のコンピュータ可読記憶媒体。
【請求項20】
前記プログラム命令は、
前記第2の要求が発行のために選択されると判別したことに応じて、前記選択されたキュー内で割り当てられたエントリを有する、前記第2の要求より古い1つ以上のマッチする古い要求を検索することをプロセッサに実行させ、
前記1つ以上のマッチする古い要求は、前記第2の要求と同じ送信元、及び、前記アドレス履歴キャッシュ内の位置の同じ識別情報を有する、
請求項16のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
コンピューティングシステムでは、或るタイプのアプリケーションは、他のアプリケーションよりも良好に並列処理及び共有メモリを利用することの可能な機能を実行する。このようなアプリケーションの例は、機械学習アプリケーション、エンタテインメントアプリケーション及びリアルタイムアプリケーションと共に、いくつかのビジネスアプリケーション、科学的アプリケーション、医療用アプリケーション及び他のアプリケーションを含む。或るプロセッサアーキテクチャは、複数のプロセッシングユニット(例えば、CPU、GPU等)又はプロセッシングコアを含むが、いくつかのケースでは、メモリに結合された追加のプロセッシングユニットは、所望のレベルの性能を提供しない。
【0002】
一般的に、コンピューティングシステムは、通信ファブリック(又は、「ファブリック」)を介して通信メッセージを転送する。通信メッセージの例は、コヒーレンシプローブ、割り込み、読み出しコマンド及び書き込みコマンド、並びに、対応するデータを含む。ファブリックにおける相互接続の例は、バスアーキテクチャ、クロスバーベースのアーキテクチャ、ネットワークオンチップ(NoC)通信サブシステム、ダイ間の通信チャネル、シリコンインタポーザ、及び、シリコン貫通電極(TSV)である。多くのケースでは、ファブリックは、複数の物理チャネルを有し、その各々は、比較的広範囲のパケットをサポートする。単一のファブリック内でデータを転送する間、ファブリックを介したレイテンシを低減するために、多数の利用可能な物理ワイヤが使用されることがある。このようにして、ファブリックを通じた帯域幅は、全体として比較的大きくなることがある。しかしながら、ファブリックを介して別々のダイを一緒に接続する場合、データを転送するために、別々のダイ上のより少ない数の利用可能な物理ワイヤが一般的に使用される。同様に、各々がファブリックを有する別々の処理ノードを一緒に接続する場合、処理ノード間の利用可能な物理ワイヤの数が少ないと、帯域幅が制限される。結果として、このようなコンピューティングシステムでは、ファブリックの境界においてデータ転送効率が低下することが多い。
【0003】
上記に鑑みて、コンピューティングシステムにおいて効率的なデータ転送を実行する効率的な方法及びシステムが望まれている。
【0004】
添付図面と併せて以下の説明を参照することによって、本明細書で説明する方法及びメカニズムの利点をより良好に理解することができる。
【図面の簡単な説明】
【0005】
図1】コンピューティングシステムの一実施形態のブロック図である。
図2】パケット送信機の一実施形態のブロック図である。
図3】要求キューの一実施形態のブロック図である。
図4】パケット送信機の一実施形態のブロック図である。
図5】コンピューティングシステムにおいて効率的なデータ転送を実行する方法の別の実施形態のフローチャートである。
図6】コンピューティングシステムにおいて効率的なデータ転送を実行する方法の別の実施形態のフローチャートである。
図7】コンピューティングシステムにおいて効率的なデータ転送を実行する方法の別の実施形態のフローチャートである。
図8】コンピューティングシステムにおいて効率的なデータ転送を実行する方法の別の実施形態のフローチャートである。
図9】パケット受信機の一実施形態のブロック図である。
図10】コンピューティングシステムにおいて効率的なデータ転送を実行する方法の別の実施形態のフローチャートである。
【発明を実施するための形態】
【0006】
本発明は、様々な修正及び代替形態を受け入れることができるが、特定の実施形態が、図面において例として示され、本明細書で詳細に説明される。しかしながら、図面及びその詳細な説明は、本発明を、開示された特定の形態に限定することを意図しておらず、むしろ、本発明は、添付の特許請求の範囲によって定義されるように、本発明の範囲に含まれる全ての修正物、均等物及び代替物をカバーすることを意図している。
【0007】
以下の説明では、本明細書で提示される方法及びメカニズムの十分な理解を提供するために、多数の具体的な詳細が示されている。しかしながら、当業者は、様々な実施形態がこれらの具体的な詳細無しに実施され得ることを認識すべきである。いくつかの例では、周知の構造、構成要素、信号、コンピュータプログラム命令及び技術は、本明細書で説明されるアプローチを曖昧にするのを回避するために、詳細に示されていない。説明を簡単且つ明確にするために、図面に示される要素は、必ずしも縮尺通りに描かれていないことが理解されよう。例えば、いくつかの要素の寸法は、他の要素に対して誇張されてもよい。
【0008】
コンピューティングシステムにおいて効率的なデータ転送を実行する様々なシステム、装置、方法及びコンピュータ可読記憶媒体が開示される。コンピューティングシステム内の1つ以上のクライアントは、アプリケーションを処理する。このようなクライアントの例は、汎用中央処理装置(CPU)、グラフィックス処理ユニット(GPU)、アクセラレーテッド処理ユニット(APU)、及び、入力/出力(I/O)デバイス等を含む。コンピューティングシステムは、電力コントローラと、クライアント間でデータを転送するための複数のリンクインタフェースと、を少なくとも含む。また、1つ以上のクライアントの各々と、クライアント間の通信ファブリックとは、パケット送信機及びパケット受信機を有するファブリックインタフェースを含む。様々な実施形態では、パケット送信機は、異なるパケットタイプの要求を記憶するための複数の要求キューを含む。パケット送信機における複数の要求キューの各々は、各々のパケットタイプの要求を記憶する。パケットタイプの例は、要求タイプ、応答タイプ、プローブタイプ、制御タイプ、トークンタイプ又はクレジットタイプ等を含む。様々な実施形態では、パケット送信機は、書き込み要求を、書き込みコマンド及び書き込みデータに分割する。パケット送信機は、書き込みコマンドをコマンド又は制御パケットに挿入し、書き込みデータを、書き込みコマンドに対応する別の書き込みデータパケットに挿入する。同様に、パケット送信機は、読み出し応答を、読み出しメッセージ及び読み出し応答データに分割する。パケット送信機は、読み出しメッセージをコマンド又は制御パケットに挿入し、読み出し応答データを別のデータパケットに挿入する。応答データを含まない読み出し要求について、パケット送信機は、分割するステップを実行しない。むしろ、パケット送信機は、読み出し要求を読み出しコマンドとしてコマンド又は制御パケットに挿入する。
【0009】
いくつかのケースでは、複数の要求キューのうち2つ以上は、異なるサイズのパケットをパケット送信機に記憶する。また、パケット送信機及びパケット受信機は、1つ以上の要求キューに対応する1つ以上のアドレス履歴キャッシュを含む。アドレス履歴キャッシュは、要求アドレスの少なくとも一部を記憶する。異なる物理デバイスからの要求のストリームがアドレスローカリティ(address locality)を有することができるので、アドレス履歴キャッシュは、リンクの両側のアドレスの上位部分を記憶する。アドレスローカリティは、「空間ローカリティ」とも呼ばれ、互いに比較的近い複数のメモリアクセス要求を指す。例えば、いくつかのケースでは、要求アドレスが連続する場合がある(例えば、連続するメモリアクセス要求の各々は、直前にアクセスされたキャッシュラインに隣接するキャッシュライン、バイト等にアクセスする)。他の例では、アクセスパターンは、要求アドレスが各メモリアクセス要求間で固定数だけインクリメントされるように、特定の一定のオフセットを有する。さらに他の例では、各要求アドレスは、直前の要求アドレスと比較して増加するオフセットを有する。
【0010】
パケット送信機は、特定のアドレスをローカルアドレス履歴キャッシュにいつ記憶するかを決定する。また、パケット送信機は、パケット受信機が特定のアドレスの少なくとも一部を記憶する記憶位置を識別する指標(又は、「識別子」)を、関連する要求パケットに記憶する。いくつかの実施形態では、特定のアドレスと同じアドレス範囲内の後続の要求に対して、パケット送信機は、これらの後続の要求に対応するアドレスの少なくとも一部を有しないパケットを送信する。パケット送信機は、アドレスの省略された部分を含むのではなく、記憶位置の識別子を送信する。アドレスの一部をパケットに含めないことで、パケット内のデータ量を低減させる。したがって、パケットは、要求アドレス全体を記憶するパケットと比較して、サイズが圧縮される。いくつかの実施形態では、パケット送信機及びパケット受信機の各々は、各々のアドレス履歴キャッシュに対して同じ記憶位置の識別情報を使用する。パケット受信機は、受信した記憶位置の識別情報を使用して要求アドレス全体を決定し、要求アドレスを使用して、受信した要求を処理する。
【0011】
また、パケット送信機は、複数の要求キューの各々から候補パケットを選択するための複数のキューアービタを含む。さらに、パケット送信機は、リンクパケットを記憶するためのバッファを含む。リンクパケットは、複数の候補パケットを記憶するためのデータ記憶空間を含む。候補パケットが、要求アドレス全体を使用する代わりにアドレス履歴キャッシュ内の記憶位置の識別情報を使用することによって圧縮されたパケットである場合、リンクパケットは、より多くの候補パケットを記憶することが可能である。したがって、より多くの候補パケットを一度に伝送することができ、リンクの使用がより効率的になる。
【0012】
上述したキューアービタの各々は、対応する要求キューから要求を選択し、パッキングアービタは、1つ以上の属性に基づいて、候補パケットを選択してリンクバッファに挿入する。このような属性の例は、エイジ(age)、パケットタイプの優先度レベル、サービス品質パラメータ、送信元識別子、アプリケーション識別子又はタイプ(例えば、リアルタイムアプリケーション等)、トラフィックタイプの指標(例えば、リアルタイムトラフィック等)、帯域幅要件またはレイテンシ許容要件、及び、仮想チャネル識別子等を含む。いくつかのケースでは、キューアービタは、要求キューからアウトオブオーダ発行のための要求を選択する。
【0013】
様々な実施形態では、調停ロジックは、アウトオブオーダのエントリを割り当て解除するか無効にする場合に、要求キューのエントリに記憶されたフィールドを更新する。一実施例では、調停ロジックは、特定の要求キュー内の古い第1の要求の前に、新しい第2の要求を選択する。古い第1の要求のための要求キューエントリは、アドレスの一部を受信機に記憶するための指標を記憶する。新しい第2の要求は、第1の要求によって受信機に記憶されるアドレスの少なくとも一部に依存する。アウトオブオーダ発行の間に第2の要求が第1の要求をバイパスし、アドレスの少なくとも一部が受信機において利用可能でない場合に、データ破損が発生する。様々な実施形態では、調停ロジックは、このケースがいつ発生するかを決定し、新しい第2の要求を圧縮フォーマットから非圧縮フォーマットに変更する。圧縮フォーマットは、アドレス履歴キャッシュ内の記憶位置の識別情報を記憶し、アドレス履歴キャッシュは、アドレスの一部を記憶するのに対し、非圧縮フォーマットは、アドレスの一部を記憶する。したがって、調停ロジックは、データ破損を回避するために、発行の間にアウトオブオーダ競合がいつ存在するかを検出し、発信パケット(outbound packets)を調整する。
【0014】
図1を参照すると、コンピューティングシステム100の一実施形態の一般化されたブロック図が示されている。図示するように、コンピューティングシステム100は、クライアント110と、メモリコントローラ130と、電力コントローラ170と、リンクインタフェース180と、の各々の間の通信ファブリック120を含む。いくつかの実施形態では、コンピューティングシステム100の構成要素は、システムオンチップ(SOC)等の集積回路(IC)上の個々のダイである。他の実施形態では、構成要素は、システムインパッケージ(SiP)又はマルチチップモジュール(MCM)内の個々のダイである。図示するように、クライアント110は、中央処理装置(CPU)112と、グラフィックス処理ユニット(GPU)114と、ハブ116と、マルチメディアエンジン118と、を含む。CPU112、GPU114及びマルチメディアエンジン118は、アプリケーションを処理することが可能なコンピューティングリソースの例である。図示していないが、他の実施形態では、他のタイプのコンピューティングリソースがクライアント110に含まれる。
【0015】
一般的に、CPU112は、所定の命令セットアーキテクチャ(ISA)に従って命令を実行する1つ以上のプロセッサコアを含む。1つ以上のプロセッサコアは、命令を処理するためのスーパースカラ及びマルチスレッドマイクロアーキテクチャを使用する。GPU114は、複数の並列実行レーンを含む並列データマイクロアーキテクチャ(例えば、単一命令複数データ、すなわち、「SIMD」)を使用する。マルチメディアエンジン118は、マルチメディアアプリケーションの音声データ及びビデオデータを処理するプロセッサを含む。ハブ116は、マルチメディアエンジン118と、ビデオポート及び音声ポート等の外部構成要素と、の間の通信のためのインタフェースロジックを含む。また、ハブ116は、マルチメディアエンジン118と、コンピューティングシステム100内の複数のローカルコンピューティングリソースと、の間の通信のためのインタフェースロジックを含む。
【0016】
電力コントローラ170は、所定のサンプル間隔の間に所定のサンプリングされた信号等のデータをクライアント110から収集する。ダイ上の電流センサ及び温度センサ(図示省略)は、情報を電力コントローラ170に送信する。電力コントローラ170は、クライアント110及びメモリコントローラ130内のコンピューティングリソースの少なくとも1つ以上について、各々の電力性能状態(P状態)を選択する。P状態は、動作電圧及び動作クロック周波数を少なくとも含む。
【0017】
単一のメモリコントローラ130が示されているが、他の実施形態では、コンピューティングシステム100は、別の数のメモリコントローラを使用する。メモリコントローラ130は、ファブリック120を介してクライアント110からメモリ要求を受信し、メモリ要求をスケジュールし、スケジュールされたメモリ要求を、システムメモリ及びメインメモリのうち1つ以上に送信する。また、メモリコントローラ130は、システムメモリ及びメインメモリから応答を受信し、応答を、クライアント110内の当該要求に対応する送信元に送信する。メインメモリは、I/Oコントローラ、バス160及びメモリバス150を介して、システムメモリをデータで満たす。メインメモリは、元のメモリ要求を完了するために、要求されたブロックを有するキャッシュ埋め込みラインを、クライアント110内のキャッシュメモリサブシステムのうち対応する1つに送信する。クライアント110内のキャッシュメモリサブシステムのうち対応する1つは、キャッシュ埋め込みラインを、キャッシュの1つ以上のレベルに配置する。
【0018】
コンピューティングシステム100のアドレス空間は、少なくともCPU112、GPU114、マルチメディアエンジン118、1つ以上の他の構成要素(例えば、入力/出力(I/O)周辺デバイス(図示省略)等)、及び、他のタイプのコンピューティングリソースの間で分割される。メモリマップは、何れのアドレスが何れの構成要素にマッピングされ、したがって、特定のアドレスに対するメモリ要求が、CPU112、GPU114、及びマルチメディアエンジン118の何れにルーティングされるかを決定するために維持される。システムメモリは、様々なダイナミックランダムアクセスメモリ(DRAM)の1つであり、メモリコントローラ130は、対応するプロトコルをサポートする。プロトコルは、例えば、クロックサイクル毎のデータ転送の回数、信号電圧レベル、信号タイミング、信号及びクロックフェーズ、クロック周波数等のように、情報転送に使用される値を決定する。メインメモリは、様々なタイプのデータ不揮発性ランダムアクセス二次記憶装置の何れかである。メインメモリの例は、ハードディスクドライブ(HDD)及びソリッドステートディスク(SSD)である。
【0019】
通信ファブリック120(又は、ファブリック120)は、クライアント110とメモリコントローラ130との間でトラフィックを転送し、各通信プロトコルをサポートするためのインタフェースを含む。「トラフィック」は、コマンド、メッセージ、プローブ、割り込み、並びに、コマンド及びメッセージに対応するデータ等のデータを含む。ファブリック120は、要求及び応答を記憶するためのキューを含む。また、ファブリック120は、内部ネットワークを介して要求を送信する前に、受信した要求間を調停する選択ロジックを含む。ファブリック120内の追加のロジックは、パケットを構築及び復号し、パケットの経路を選択する。
【0020】
ファブリックトランスポートインタフェース(FTI)180は、リンク上でトラフィックを転送することによって、コンピューティングシステム100と、他のコンピューティングシステム又は処理ノードと、の間の通信をサポートする。リンクを介して送信されるトラフィックは、1つ以上の処理ノードの動作状態の指標、パワーダウン要求、要求に対する応答、割り込み、及び、他の情報を含む。図示するように、クライアント110は、CPU112に対するFTI113と、GPU114に対するFTI115と、ハブ116に対するFTI117と、を含む。また、メモリコントローラ130は、FTI132を含むのに対し、電力コントローラ170は、FTI172を含む。ファブリックトランスポートインタフェース113,115,117,132,172,180の各々は、パケット送信機及びパケット受信機を含む。ファブリック120は、説明を容易にするために示されていない複数のファブリックトランスポートインタフェースを含む。いくつかの実施形態では、ファブリックトランスポートインタフェースに接続された各リンクは、ポイントツーポイント通信チャネルである。他の実施形態では、ファブリックトランスポートインタフェースに接続された1つ以上のリンクは、エンドツーエンド通信チャネルである。
【0021】
ファブリックトランスポートインタフェースは、通信用の制御ロジック及びバッファ又はキューを含む。物理レベルにおいて、リンクは、1つ以上のレーンを含む。ファブリックトランスポートインタフェース及び対応するリンクは、PCIe(Peripheral Component Interconnect Express)、InfiniBand、RapidIO、HyperTransport、AXI(Advanced eXtensible Interface)等の通信プロトコル接続を含む。ファブリックトランスポートインタフェース113,115,117,132,172,180の各々は、各々のタイプの要求を記憶するための複数の要求キューを含む。また、ファブリックトランスポートインタフェース113,115,117,132,172,180の各々は、1つ以上の要求キューに対応する1つ以上のアドレス履歴キャッシュを含む。アドレス履歴キャッシュは、要求アドレスの少なくとも一部を記憶する。異なる物理デバイスからの要求のストリームがアドレスローカリティを有するので、アドレス履歴キャッシュは、要求アドレスの上位部分をリンクの両側に記憶する。
【0022】
ファブリックトランスポートインタフェース113,115,117,132,172,180の各々は、様々な目的のための制御ロジックを含む。例えば、要求を受信し、要求キューにエントリを割り当てる場合、制御ロジックは、アドレス履歴キャッシュにアクセスして、アドレス履歴キャッシュが要求アドレスの一部を既に記憶しているかどうかを判別する。要求キューへのエントリの割り当て中に、制御ロジックは、キューエントリ内のフィールドを更新して、発信パケットがアドレス履歴キャッシュ内の記憶位置の識別情報を使用するかどうか、又は、要求アドレスを使用するかどうかを示す。また、制御ロジックは、複数の要求キューの各々から要求を選択するための複数のキューアービタを含む。キューアービタは、アウトオブオーダ発行のために、要求キューから要求を選択する。キューアービタは、データ破損を回避するために、アウトオブオーダ競合がいつ存在するかを決定し、発信パケット及びキューエントリに記憶されたフィールドの両方を調整する。
【0023】
一例では、キューアービタは、発行のために新しい第2の要求を選択することによって、要求キュー内の古い第1の要求をバイパスする。第1の要求に対するキューエントリは、要求アドレスの一部を受信機に記憶する指標を記憶する。したがって、この要求アドレスの一部は、受信機に未だ記憶されていない。第2の要求に対するキューエントリは、要求アドレスの一部を受信機のリモートアドレス履歴キャッシュから取得する指標を記憶する。この第2の要求に対するキューエントリは、記憶位置の識別情報を受信機のリモートアドレス履歴キャッシュに記憶する。キューアービタは、このケースがいつ発生するかを決定し、新しい第2の要求を、記憶位置の識別情報を使用する圧縮フォーマットから、要求アドレスの一部を使用する非圧縮フォーマットに変更する。第2の要求を、予測される圧縮フォーマットから非圧縮フォーマットに変更することによって、送信機のキューアービタは、受信機におけるデータ破損を回避する。
【0024】
コンピューティングシステム100内のファブリックトランスポートインタフェース113,115,117,132,172,180のうち1つ以上は、複数の候補パケットを記憶するためのデータ記憶空間を含むリンクパケットを記憶するためのバッファを含む。いくつかの実施形態では、複数の要求キューのうち2つ以上は、異なるサイズの候補パケットを記憶する。ファブリックトランスポートインタフェースにおけるパッキングアービタは、複数の要求キューから適格な候補パケットを選択し、これらの候補パケットをリンクパケットに挿入する。候補パケットが、記憶位置の識別情報を受信機のリモートアドレス履歴キャッシュに記憶する圧縮パケットである場合、パッキングアービタは、より多くの候補パケットをリンクパケットに挿入することが可能である。また、パッキングアービタは、リンクパケットが、所定の候補パケットについて所定の境界上で調整された残りの利用可能なデータ記憶空間を有しているかどうかを判別する。ファブリックトランスポートインタフェースにおけるパケット受信機は、パケット送信機によって送信されたリンクパケットを受信するための受信キューを含む。
【0025】
図2を参照すると、パケット送信機200の一実施形態の一般的なブロック図が示されている。パケット送信機200は、要求キュー230及び対応するアドレス履歴キャッシュ220を含む。パケット送信機200は、単一の要求キュー及び単一の対応するアドレス履歴キャッシュを含むが、他の実施形態では、パケット送信機200は、別の数のこれらの構成要素を使用する。パケット送信機200は、オンチップネットワーク又はファブリックから要求210を受信し、発信オフチップリンクに送信する。要求210は、送信元識別子(ID)及びアドレス216を少なくとも含む。図示するように、送信元識別子は、プロセッサ識別子(PID)212及びスレッド識別子(TID)214を含む。他の実施形態では、送信元識別子は、プロセスID及びアプリケーションIDのうち1つ以上をさらに含む。要求210内の他の情報(図示省略)は、要求210が読み出し動作又は書き込み動作であることを示すための要求タイプを含む。
【0026】
説明を容易にするために示されていない制御ロジックは、送信元識別子を用いてアドレス履歴キャッシュ220にインデックス付けする。いくつかの設計では、アドレス履歴キャッシュ220は、直接マッピングされたキャッシュである。他の設計では、アドレス履歴キャッシュ220は、任意のセットアソシアティビティを有する。送信元識別子がインデックスとして使用される場合、送信元識別子は、アドレス履歴キャッシュ220内の特定のセットを識別する。制御ロジックは、アドレス216の一部をタグとして使用して、識別されたセット内の何れかのウェイがキャッシュヒットを生じさせるかどうかを決定する。異なる物理デバイスからの要求のストリームがアドレスローカリティを有するので、アドレス履歴キャッシュ220は、要求に関するアドレス216の一部を記憶する。一例では、アドレス履歴キャッシュ220は、アドレス216の上位部分を記憶する。したがって、本明細書で使用されるように、アドレス履歴キャッシュ220の「ウェイ」は、「ストリーム」とも呼ばれる。アドレス履歴キャッシュ220のルックアップによってキャッシュヒットが生じる場合、アドレス履歴キャッシュ220の制御ロジックは、ヒットを生じさせた特定のウェイのウェイ識別子(ID)を、要求キュー230の制御ロジックに送信する。図示した実施形態では、アドレス履歴キャッシュ220から要求キュー230に送信されるキュー更新222は、少なくともウェイIDを含む。
【0027】
アドレス履歴キャッシュ220のルックアップがキャッシュミスを生じさせる場合、アドレス履歴キャッシュ220の制御ロジックは、セット内の特定のウェイを選択する。いくつかのケースでは、制御ロジックは、LRU(Least Recently Used)スキームを使用して、セット内の特定のウェイを選択する。他のケースでは、制御ロジックは、セット内の特定のウェイを選択するために、様々な他のスキームのうち何れかを使用する。その後、制御ロジックは、アドレス履歴キャッシュ220の選択されたセット内の特定のウェイにおけるアドレス216の少なくとも一部(例えば、上位部分等)を記憶する。図示するように、アドレス履歴キャッシュ220から要求キュー230に送信されるキュー更新222は、少なくともキャッシュヒット/ミス結果の指標を含む。図示するように、キュー更新222は、アドレス216の少なくとも一部を現在記憶するウェイIDを含む。
【0028】
要求キュー230は、情報を記憶するための複数のエントリ232a~232gを含む。様々な実施形態では、エントリ232a~232gの各々は、少なくともフィールド240~254を記憶する。フィールド240,242は、プロセッサID及びスレッドID等の送信元識別子情報を記憶する。他の実施形態では、送信元識別子は、プロセスID及びアプリケーションID等の他の情報をさらに含む。図示するように、フィールド244は、仮想チャネルIDを記憶する。複数の異なる物理デバイスからの要求ストリームは、同じ物理リンク上の仮想チャネル(VC)を介して流れる。調停ロジックは、発行要求を選択する場合に、エントリ232a~232g内の仮想チャネルの優先度レベル及び記憶された仮想チャネルIDを少なくとも使用する。
【0029】
フィールド246は、アドレス216の少なくとも一部を記憶する。フィールド248は、キャッシュロード(cache load)の指標を記憶する。例えば、アドレス履歴キャッシュ220へのルックアップがキャッシュミスをもたらし、受信したアドレス216の少なくとも一部がアドレス履歴キャッシュ220に記憶又はロードされている場合、フィールド248は、アサートされた値を記憶する。一例では、アサートされた値はバイナリ「1」であり、受信した要求210に対してキャッシュロードが発生したことを示す。別の例では、アサートされた値を示すためにバイナリ「0」が使用される。フィールド250は、アドレス履歴キャッシュ220の以前の検索が、受信した要求210に対応するアドレスを発見したことを示す指標を記憶する。言い換えると、キャッシュヒットフィールド250は、受信した要求210に対するアドレス履歴キャッシュ220の以前のルックアップの間にキャッシュヒットが発生したかどうかの指標を記憶する。アドレス履歴キャッシュ220へのルックアップがキャッシュヒットをもたらした場合、フィールド250は、アサートされた値を記憶する。
【0030】
フィールド252は、受信したアドレス216の少なくとも一部を現在記憶している、選択されたセット内のアドレス履歴キャッシュ220内のウェイの指標を記憶する。キャッシュヒットが発生した場合、フィールド252によって識別された特定のウェイは、受信したアドレス216の少なくとも一部を既に記憶している。しかしながら、キャッシュミスが発生した場合、置換スキームは、フィールド252によって識別された特定のウェイを選択しており、この特定のウェイは、キャッシュミスの後にロードされた受信したアドレス216の少なくとも一部を有している。図示していないが、エントリ232a~232gに含まれる他のフィールドは、割り当てられたエントリの情報をエントリが記憶しているかどうかを示す状態フィールドを含む。このような指標は、有効ビットを含む。別のフィールドは、要求タイプの指標を記憶する。いくつかの実施形態では、追加のフィールドは、エントリ位置がエイジを示さない場合、エイジを記憶する。
【0031】
いくつかの実施形態では、キューアービタ260が、アサートされた値をフィールド250に記憶するエントリを選択すると、パケット送信機200は、圧縮パケットとしてFTI候補パケット270を送信する。例えば、パケット送信機200は、要求アドレス全体の代わりに、発信圧縮パケット内の送信元識別子及びウェイIDを送信する。受信機において、制御ロジックは、受信機のアドレス履歴キャッシュにアクセスするために、フィールド240~242及びフィールド252等のように、送信元識別子及びウェイIDを使用する。パケット送信機200内のローカルアドレス履歴キャッシュ220と同様に、受信機のリモートアドレス履歴キャッシュは、要求アドレスの少なくとも一部を記憶する。したがって、パケット送信機200は、リンクを介して発信圧縮パケットを送信する場合に、要求アドレスの少なくとも一部を、リンクを介して受信機に転送しない。
【0032】
いくつかの実施形態では、制御ロジックは、インオーダ方式で要求キュー230にエントリ232a~232gを割り当てるので、エントリ232a~232gのエントリ位置は、エイジを示す。制御ロジックが、アウトオブオーダ方式で要求キュー230にエントリ232a~232gを割り当てる場合、エントリ232a~232gは、追加のエイジフィールドを記憶する。様々な実施形態では、制御ロジックは、アウトオブオーダ方式で、要求キュー230内のエントリ232a~232gを割り当て解除する。既に説明したように、複数の異なる物理デバイスからの要求ストリームは、同じ物理リンク上の仮想チャネル(VC)を通じて流れる。クライアントは、パケット送信機200が要求を受信した順序とは異なる順序で、発信リンクを介して異なるVCから要求を送信することがある。例えば、キューアービタ260は、1つ以上の属性に基づいて、FTI候補パケット270を生成するために使用するエントリ232a~232gのうち1つを選択する。1つ以上の属性の例は、要求タイプの優先度レベル、サービス品質パラメータ、送信元識別子、リアルタイムアプリケーション等のアプリケーション識別子又はタイプ、リアルタイムトラフィック等のトラフィックタイプの指標、帯域幅要件又はレイテンシ許容要件、及び、仮想チャネル識別子等である。異なる順序によって、システムレベルのデッドロックを回避する。
【0033】
フィールド254は、キャッシュロードマッチ(cache load match)の指標を記憶する。第2の要求に対するキャッシュロードマッチは、キャッシュロードフィールド248に対したアサートされた値を記憶する、同一の送信元からの要求キュー230内の、第2の要求より古い第1の要求を示す。したがって、この古い第1の要求は、受信機のリモートアドレス履歴キャッシュにロードされたアドレスの少なくとも一部を有しているはずである。言い換えると、キャッシュロードマッチフィールド254は、新しい第2の要求に対応するアドレスを受信機に記憶することになる、第1の要求に対する有効な第2のエントリを要求キュー230が有するかどうかを指定する。第1の要求及び第2の要求の各々は、同じ送信元からのものである。言い換えると、第1の要求及び第2の要求の各々に対する要求キュー230内のエントリは、同じ値をフィールド240,242,252に記憶する。制御ロジックが、第1の要求が、要求キュー230に記憶された第2の要求よりも古い要求のうち最も新しい要求であり、アドレスが受信機に記憶されることを指定する指標を有すると判別した場合、キャッシュロードマッチフィールド254は、アサートされた値を記憶する。したがって、古い第1の要求が、要求アドレスの少なくとも一部を受信機に記憶しているはずなので、第2の要求は、古い第1の要求に依存する。要求アドレスの少なくとも一部が受信機に記憶されていると場合、制御ロジックは、新しい第2の要求を圧縮パケットとして送信する。
【0034】
キューアービタ260又は他の制御ロジックは、キューアービタ260がアウトオブオーダでエントリを割り当て解除するように、要求キュー230のエントリ232a~232gに記憶されたフィールド240~254のうち1つ以上を更新する。一例では、キューアービタ260は、要求キュー230内の古い第1の要求をバイパスして、割り当て解除のための新しい第2の要求を選択する。古い第1の要求を記憶する要求キュー230内のエントリは、アドレスの一部を受信機に記憶する指標を含む。新しい第2の要求は、受信機に既に記憶されているアドレスの一部に依存する。キューアービタ260は、このケースがいつ発生するかを決定し、新しい第2の要求を、圧縮フォーマットから非圧縮フォーマットに変更する。圧縮フォーマットは、少なくともフィールド240,242,252に記憶された値等のような記憶位置の識別情報を記憶する。非圧縮フォーマットは、フィールド246に記憶された値等のようなアドレスの一部を記憶する。要求キュー230からのアウトオブオーダ発行によって生じる上記のケースを検出することによって、キューアービタ260は、データ破損が受信機において発生することを回避する。
【0035】
図3を参照すると、要求キュー300の一実施形態の一般化されたブロック図が示されている。上述した回路及びロジックには、同一の符号が付されている。図示するように、要求キュー300は、キュー310及び制御ロジック320を含む。要求キュー310は、少なくともフィールド240~254を有するエントリ内に情報を記憶する。キュー310のエントリは、状態フィールド等のように、図示されていない他のフィールドを記憶する。状態フィールドは、エントリが割り当てられるかどうかの指標を記憶する。このような指標は、一例では、有効ビットを含む。別のフィールドは、要求タイプの指標を記憶する。いくつかの実施形態では、要求キュー300は、テーブル330を含み、テーブル330は、特定のエントリに依存する、アサートされた値を記憶するキャッシュロードフィールド248を有する特定のエントリと、アサートされた値を記憶するキャッシュヒットフィールド250を有するキュー310内の対応する数の割り当てられたエントリと、を追跡する。例えば、テーブル330内の第1のエントリは、エントリ8の指標を記憶する。キュー310のエントリ8は、キャッシュロードフィールド248にアサートされた値を記憶する。また、テーブル330の第1のエントリは、エントリ8に対応するアサートされたキャッシュヒットフィールド250を有するキュー310内の割り当てられたエントリ数について1のカウントを記憶する。ここで、1のカウントは、エントリ7を指す。
【0036】
制御ロジック320が、エイジを示すためにエントリ位置を使用しない場合、キュー310のエントリ内の追加のフィールド(図示省略)は、エイジを記憶する。図示するように、制御ロジック320は、エイジによってインオーダ方式でキュー310を割り当て、新しい要求をキュー310の上部に記憶するのに対し、制御ロジック320は、古い要求をキュー310の下部に記憶する。他の実施形態では、制御ロジック320は、要求をキュー310に記憶するために逆エイジオーダを使用する。キュー310のエントリ7~8,15,20,32,43~44の各々は、ID2を有するプロセッサ、ID6を有するスレッド、ID3を有するウェイ等の同じ送信元からの情報を記憶する。エントリ44に記憶された要求は、このグループの最も古い要求であるのに対し、エントリ7に記憶された要求は、このグループの最も新しい要求である。
【0037】
エントリ8,32,44に割り当てられた要求は、アサートされた値をキャッシュロードフィールド248に記憶する。上述したように、いくつかのケースでは、バイナリ「1」は、アサートされた値を示す。したがって、エントリ8,32,44に対応する要求は、送信機のローカルアドレス履歴キャッシュのルックアップの間にキャッシュミスを生じさせており、これらの各々のアドレス又はアドレスの一部は、送信機のローカルアドレス履歴キャッシュにロードされている。エントリ44に割り当てられた要求は、キャッシュミスによって、送信機のローカルアドレス履歴キャッシュにロードされた要求アドレス0x670を有する。ここで、指標「0x」は、16進数値フォーマットを示す。エントリ32に割り当てられた要求は、キャッシュミスによって、送信機のローカルアドレス履歴キャッシュにロードされた要求アドレス0x100を有する。エントリ8に割り当てられた要求は、キャッシュミスによって、送信機のローカルアドレス履歴キャッシュにロードされた要求アドレス0x330を有する。
【0038】
エントリ7,15,20,43に割り当てられた要求の各々は、アサートされた値をキャッシュヒットフィールド250に記憶する。したがって、対応する要求は、送信機のローカルアドレス履歴キャッシュのルックアップの間にキャッシュヒットを生じさせている。外部発行ロジックが、各々のアドレス又はアドレスの一部を、対応するパケットに挿入しない場合、これらのパケットは、圧縮パケットであり、リンクの効率性を改善する。圧縮パケットについて、受信機は、受信機のリモートアドレス履歴キャッシュにアクセスして、以前に受信機に記憶された要求アドレスを取得するために、フィールド240~242,252を使用する。
【0039】
図示するように、エントリ44に割り当てられた要求のみが、クリアされた(ネゲートされた)値をフィールド254(キャッシュロードマッチフィールド)に記憶する。上述したように、第2の要求に対するキャッシュロードマッチは、同じ送信元からのキュー310内の古い第1の要求が、キャッシュロードフィールド248に対してアサートされた値を記憶することを示す。したがって、制御ロジック320がこの古い第1の要求を受信機に送信した直後に、この古い第1の要求は、送信機のローカルアドレス履歴キャッシュ及び受信機のリモートアドレス履歴キャッシュの各々にロードされたアドレスの少なくとも一部を有しているはずである。図示した例では、エントリ44に割り当てられた要求のみが、少なくとも送信機のローカルアドレス履歴キャッシュに記憶された要求アドレスを有する同じ送信元からの古い要求を有しない。
【0040】
上述したように、いくつかの実施形態では、制御ロジック320は、アウトオブオーダ方式で、キュー310内のエントリを割り当て解除する。いくつかのケースでは、制御ロジック320は、アウトオブオーダ方式での割り当て解除のためにキュー310内のエントリを選択するが、実際の割り当て解除は、後の時点で行われる。調停ロジックは、いくつかの設計では制御ロジック320に含まれるが、他の設計では、制御ロジック320とは別に配置される。キュー310の下では、要求を発行する場合にキュー310内のエントリを割り当て解除する(無効にする)4つのケースが示されている。
【0041】
ケース1:エントリ20がエントリ32より前の発行対象として選択される場合
【0042】
ケース1の場合、制御ロジック320は、エントリ32に割り当てられた古い要求よりも先に、割り当て解除のためにエントリ20に割り当てられた新しい要求を選択する。このようなケースでは、制御ロジック320は、エントリ20に割り当てられた新しい要求の結果として生じるパケットを、予測される圧縮パケットではなく、非圧縮パケットとして送信する。受信機が、エントリ32に割り当てられた古い要求からの要求アドレスを未だ有していないので、制御ロジック320は、非圧縮パケット内のアドレスフィールド246内の要求アドレス(例えば、0x100)を送信する。
【0043】
図示した実施形態では、キャッシュロードマッチフィールド254内のアサートされた値は、制御ロジック320が、エントリ20に割り当てられた、選択された新しい要求を、予測される圧縮パケットから非圧縮パケットに変換すべきであることを示す。エントリ20,32に割り当てられた要求の場合と同様に、エントリ15,32に割り当てられた要求は、制御ロジック320がエントリ32より前に発行するエントリ15を選択する場合等、これらに対してケース1を発生させる。同様に、ケース1は、制御ロジック320がエントリ8より前に発行するエントリ7を選択する場合等、エントリ7~8に割り当てられた要求に対しても発生する。同様に、ケース1は、制御ロジック320がエントリ44より前に発行するエントリ43を選択する場合等、エントリ7~8,43~44に割り当てられた要求に対しても発生する。他のケースでは、制御ロジック320は、エントリ32に割り当てられた古い要求の後の、エントリ20に割り当てられた新しい要求を選択する。それらのケースでは、フィールド254内の消去された値又は無効にされた値は、エントリ20に割り当てられた、選択された新しい要求が、予測される圧縮パケットとして残ることを示す。
【0044】
ケース2:エントリ15,20,32,43~44よりも前に発行するためのエントリ8の選択
【0045】
ケース2では、制御ロジック320は、エントリ15,20,32,43~44に割り当てられた古い要求のうち1つ以上に先立って、エントリ8に割り当てられた新しい要求を、割り当て解除のために選択する。このようなケースでは、制御ロジック320は、エントリ8に割り当てられた新しい要求に対して生成されたパケットを、予測される非圧縮パケットとして送信する。上述したように、エントリ8に割り当てられた要求は、アサートされた値をキャッシュロードフィールド248に記憶する。したがって、要求は、送信機におけるローカルアドレス履歴キャッシュのルックアップの間にキャッシュミスを生成し、そのアドレス又はアドレスの一部が、ローカルアドレス履歴キャッシュにロードされている。制御ロジック320は、エントリ8に割り当てられた、選択された要求に対して予測される非圧縮パケットを生成するが、制御ロジック320は、エントリ15,20,32,43~44に割り当てられた、未だ割り当てられている1つ以上の古い要求に対する更新を実行する。制御ロジック320は、アウトオブオーダ発行と、エントリ15,20に割り当てられた要求によって使用されるアドレス0x100、及び、エントリ43に割り当てられた要求によって使用されるアドレス0x670の記憶の代わりに、受信機へのアドレス0x330の記憶と、によって、これらの古い要求に対して生成されたパケットを圧縮パケットとして送信することができない。したがって、更新を実行するために、制御ロジック320は、エントリ8に割り当てられた要求と同じ送信元からの全ての古い要求を検索し、この検索から発見された要求の特定のフィールドを更新する。
【0046】
上述したように、制御ロジック320は、フィールド240~242,252(例えば、PID2、TID6、ウェイ3)を用いて送信元を識別する。エントリ8に割り当てられた要求と同じ送信元からの要求を記憶するエントリは、エントリ15,20,32,43~44に割り当てられた古い要求を含む。識別されたエントリ15,20,32,43~44に対し、制御ロジック320は、キャッシュロードフィールド248及びキャッシュヒットフィールド250の各々を消去する。したがって、受信機は、エントリ15,20,32,43~44に割り当てられた要求に対応する受信パケットに対して、リモートアドレス履歴キャッシュを使用しない。
【0047】
上述したように、要求キュー300に記憶された古い要求を更新することに加えて、制御ロジック320は、キャッシュロードフィールド248が、アサートされた値をエントリ8に記憶する場合に、エントリ8に割り当てられた要求よりも新しい要求を更新する。図示した例では、制御ロジック320は、キュー310内の新しいエントリを、キャッシュロードフィールド248に記憶されたアサートされた値を有する同じ送信元から検索する。このようなエントリは存在しない。したがって、制御ロジック320は、エントリ8とエントリ1との間の検索を、最も古いものから最も新しいものまでエイジによって実行して、同じ送信元からの要求に対して割り当てられたエントリを識別する。この特定のケースでは、検索によりエントリ7が発見され、アサートされた値がキャッシュヒットフィールド250に記憶される。制御ロジック320は、エントリ7のキャッシュロードマッチフィールド254を消去する。したがって、制御ロジック320がエントリ7に割り当てられた要求を選択するときの後の時点において、制御ロジック320は、圧縮パケットを生成する。制御ロジック320が古いエントリ8を既に発行していたことに起因して、要求アドレス又は要求アドレスの一部が受信機のリモートアドレス履歴キャッシュに記憶されるので、制御ロジック320は、圧縮パケットを生成する。
【0048】
ケース3:発行のためのエントリ32の最初の選択
【0049】
ケース3の場合、制御ロジック320は、エントリ43~44に割り当てられた古い要求のうち1つ以上に先立って、及び、エントリ7~8,15,20に割り当てられた新しい要求のうち1つ以上に先立って、エントリ32に割り当てられた新しい要求を、割り当て解除のために選択する。ケース3は、ケース2と同様であるが、同じ送信元からの複数の新しい要求が存在し、キャッシュロードフィールド248に記憶された、アサートされた値を有する新しい要求が存在する。ケース3の場合、制御ロジック320は、エントリ32に割り当てられた要求に対して生成されたパケットを、予測される非圧縮パケットとして送信する。上述したように、エントリ32に割り当てられた要求は、アサートされた値をキャッシュロードフィールド248に記憶する。したがって、要求は、送信機におけるローカルアドレス履歴キャッシュのルックアップの間にキャッシュミスを生成し、そのアドレス又はアドレスの一部は、ローカルアドレス履歴キャッシュにロードされている。
【0050】
制御ロジック320は、エントリ32に割り当てられた選択された要求に対して、予測される非圧縮パケットを生成しているが、制御ロジック320は、エントリ43~44に割り当てられた、未だ割り当てられている1つ以上の古い要求に対する更新と共に、エントリ7~8,15,20に割り当てられた、未だ割り当てられている1つ以上の新しい要求に対する更新を実行する。制御ロジック320は、エントリ43に割り当てられた古い要求に対して生成されたパケットを、圧縮パケットとして送信することができない。図示するように、エントリ43に割り当てられた古い要求は、アサートされた値をキャッシュヒットフィールド250に記憶する。アウトオブオーダ発行と、エントリ43に割り当てられた要求によって使用されるアドレス0x670の代わりにアドレス0x100の受信機への記憶とは、制御ロジック320がパケットを圧縮パケットとして送信した場合にデータ破損を生じさせる。データ破損を回避するために、制御ロジック320は、キュー310内で、エントリ32に割り当てられた要求と同じ送信元からの古い要求を検索する。エントリ32に割り当てられた要求と同じ送信元からの古い要求を記憶するエントリは、エントリ43~44に割り当てられた要求を含む。識別されたエントリ43~44内の古い要求に対し、制御ロジック320は、キャッシュロードフィールド248及びキャッシュヒットフィールド250の各々を消去する。したがって、受信機は、エントリ43~44に割り当てられた要求に対応する受信パケットに対して、そのリモートアドレス履歴キャッシュを使用しない。
【0051】
上述したように、キュー310に記憶された古い要求を更新することに加えて、キャッシュロードフィールド248がアサートされた値を記憶する場合に、制御ロジック320は、エントリ32に割り当てられた要求より新しい要求も更新する。図示した例では、制御ロジック320は、キャッシュロードフィールド248に記憶されたアサートされた値を有する、同じ送信元からの新しいエントリを検索する。制御ロジック320は、エントリ8を発見する。したがって、制御ロジック320は、同じ送信元からの要求に対して割り当てられたエントリを識別するために、エントリ8とエントリ32との間で、エイジによって最も古いものから最も新しいものまで検索を実行する。この特定のケースでは、制御ロジック320は、エントリ15,20を発見し、エントリ15,20の各々は、アサートされた値をキャッシュヒットフィールド250に記憶している。制御ロジック320は、エントリ15,20についてフィールド254を消去する。したがって、制御ロジック320がエントリ15,20に割り当てられた要求を選択するときの後の時点において、制御ロジック320は、圧縮パケットを生成する。制御ロジック320が古いエントリ32を既に発行していることに起因して、要求アドレス又は要求アドレスの一部が受信機のリモートアドレス履歴キャッシュに記憶されるので、制御ロジック320は、圧縮パケットを生成する。
【0052】
ケース4:発行のためのエントリ44の最初の選択
【0053】
ケース4の場合、制御ロジック320は、エントリ7~8,15,20,43に割り当てられた要求のうち1つ以上に先立って、エントリ44に割り当てられた要求を、割り当て解除のために選択する。ケース4の場合、制御ロジック320は、エントリ44に割り当てられた要求に対して生成されたパケットを、予測される非圧縮パケットとして送信する。上述したように、エントリ44に割り当てられた要求は、アサートされた値をキャッシュロードフィールド248に記憶する。したがって、要求は、送信機におけるローカルアドレス履歴キャッシュのルックアップの間にキャッシュミスを生成し、そのアドレス又はアドレスの一部は、ローカルアドレス履歴キャッシュにロードされている。要求キュー300の制御ロジック320は、エントリ44に割り当てられた要求と同じ送信元からの古い要求を検索する。図示するように、ケース4の場合、キュー310に割り当てられた同じ送信元からの古い要求が存在しない。したがって、制御ロジック320は、古い要求のキャッシュロードフィールド248及びキャッシュヒットフィールド250を消去するための更新を実行しない。
【0054】
キュー310に記憶されたフィールドを更新する可能性がある古い要求を検索することに加えて、キャッシュロードフィールド248がアサートされた値を記憶する場合、制御ロジック320は、エントリ44に割り当てられた要求より新しい要求も検索する。図示した例では、要求キュー300の制御ロジック320は、キャッシュロードフィールド248に記憶されたアサートされた値を有する、同じ送信元からの新しいエントリを検索する。制御ロジック320は、エントリ32を発見する。したがって、制御ロジック320は、同じ送信元からの要求に対して割り当てられたエントリを識別するために、エイジによって最も古いものから最も新しいものまで、エントリ32とエントリ44との間で検索を実行する。この特定のケースでは、制御ロジック320は、キャッシュヒットフィールド250に記憶されたアサートされた値を有する、エントリ43を発見する。制御ロジック320は、エントリ43のキャッシュロードマッチフィールド254を消去する。したがって、制御ロジック320がエントリ43に割り当てられた要求を選択するときの後の時点において、制御ロジック320は、圧縮パケットを生成する。制御ロジック320が古いエントリ44を既に発行したことに起因して、要求アドレス又は要求アドレスの一部が受信機のリモートアドレス履歴キャッシュに記憶されるので、制御ロジック320は、圧縮パケットを生成する。
【0055】
キャッシュヒット数の追跡
【0056】
上述したように、制御ロジック320は、テーブル330を使用して、アサートされたキャッシュロードフィールド248を有する特定のエントリに対応する、アサートされたキャッシュヒットフィールド250を有するキュー310内の割り当てられたエントリの数を追跡する。図示するように、テーブル330内の第1のエントリは、アサートされたキャッシュロードフィールド248を有する、エントリ8の指標を記憶する。また、テーブル330の第1のエントリは、エントリ8に対応するアサートされたキャッシュヒットフィールド250を有する、キュー310内の割り当てられたエントリの数に対する1のカウントを記憶する。1のカウントは、エントリ7を指す。同様に、テーブル330内の第2のエントリは、アサートされたキャッシュロードフィールド248を有する、エントリ32の指標を記憶する。また、テーブル330の第2のエントリは、エントリ32に対応するアサートされたキャッシュヒットフィールド250を有する、キュー310内の割り当てられたエントリ15,20に対する2のカウントを記憶する。第3のエントリは、エントリ44の指標と、エントリ43に対応する1のカウントと、を記憶する。
【0057】
上述したケース2を再度参照すると、制御ロジック320が発行のためにエントリ8を選択し、対応するキャッシュロードフィールド248がアサートされた値を記憶すると判別した場合、制御ロジック320は、テーブル330にアクセスする。制御ロジック320は、キュー310のエントリ8の指標を使用してテーブル330を検索し、第1のエントリを発見し、エントリ8内の要求に依存する、キュー310に割り当てられた1つの要求が現在存在すると判別する。このケースでは、1のカウントは、エントリ7に対応する。2のカウントを有する第2のエントリ等のように、テーブル330内の少なくとも1つの他の割り当てられたエントリが、より高いカウントを記憶すると制御ロジック320が判別した場合、いくつかの実施形態では、制御ロジック320は、他の要求を検索する前のステップを実行しない。むしろ、制御ロジック320は、エントリ8に対する予測される非圧縮パケットを送信し、他のエントリのフィールドに対する更新を実行しない。また、制御ロジック320は、エントリ8に割り当てられた要求に対する要求アドレスの少なくとも一部を記憶するアドレス履歴キャッシュ内の記憶位置を無効にする。例えば、制御ロジック320は、プロセッサ識別子2及びスレッド識別子6によってインデックスが付けられたセット内のキャッシュウェイ3を無効にする。したがって、同じ要求アドレスの一部を有する同じ送信元からの後の要求は、アドレス履歴キャッシュ内でヒットしない。
【0058】
キュー310のエントリ7に対するフィールド254に記憶されたアサートされた値は、エントリ7に対して後に発行されるパケットが非圧縮パケットであることを保証する。他の実施形態では、テーブル330内の少なくとも1つの他の割り当てられたエントリがより高いカウントを記憶すると制御ロジック320が判別した場合、制御ロジック320は、エントリ7等の新しい要求を検索し、キャッシュヒットフィールド250を消去又は無効にする。エントリ8に対する非圧縮パケットは、アサートされたキャッシュロードフィールドの指標を含まず、したがって、受信機において要求アドレス(例えば、アドレス0x330)の少なくとも一部のロードが行われない。したがって、制御ロジック320がエントリ8の直後のエントリ32を選択する場合、制御ロジック320は、後の時点において、エントリ15,20に対する2つのパケットを圧縮パケットとして送信することが可能である。制御ロジック320がキュー310のエントリ8を発行した場合、制御ロジック320は、エントリ15,20に対する2つのパケットのキャッシュヒットフィールド250を消去していない。
【0059】
いくつかの実施形態では、制御ロジック320は、テーブル330内の1つのエントリが別のエントリよりも高いカウントを有しているかどうかを判別するために、閾値を使用している。上記の例では、制御ロジック320は、閾値0を使用している。他の実施形態では、制御ロジック320は、閾値として、0ではない正の整数を使用する。例えば、閾値が3である場合、制御ロジック320は、7が6よりも大きいので(3のカウント+3の閾値)、7のカウントを有するテーブル330内の第5のエントリ(図示省略)が、3のカウントを有する第9のエントリ(図示省略)よりも高いとみなす。しかしながら、制御ロジック320は、7が7よりも大きいとみなされないので(4のカウント+3の閾値)、7のカウントを有する第5のエントリが、少なくとも4のカウントを有する他のエントリよりも高いとみなさない。
【0060】
いくつかの実施形態では、制御ロジック320が、アサートされたキャッシュロードフィールド248を有する要求をキュー310に割り当てる場合、制御ロジック320は、所定のエントリをテーブル330に割り当てる。アサートされたキャッシュヒットフィールド250を有する要求が所定のエントリに対応する要求と同じ要求アドレスを有する場合、制御ロジック320は、テーブル330内の所定のエントリにおける対応するカウントを更新する(インクリメントする)。例えば、制御ロジック320がキュー310にエントリ20を割り当てると、キュー310のエントリ32の指標を記憶するテーブル330の第2のエントリは、そのカウントを1にインクリメントする。制御ロジック320がキュー310にエントリ15を割り当てると、このカウントは、1から2にインクリメントされる。また、制御ロジック320は、制御ロジック320が対応する圧縮パケットを発行すると、対応するカウントを更新する(デクリメントする)。例えば、外部調停ロジックが発行するエントリ15を選択し、圧縮発信パケットがエントリ15のリンクを介して送信される場合、制御ロジック320は、テーブル330の第2のエントリにおいてカウントを2から1にデクリメントする。
【0061】
いくつかの実施形態では、より高いカウント状態に起因して、制御ロジック320が、キュー310内の他のエントリのフィールドを更新することなく、キュー310の示されたエントリに対する要求を発行する場合に、テーブル330内の所定のエントリが割り当て解除される。他の実施形態では、制御ロジック320が、アサートされたキャッシュロードフィールド248を有する新しい要求をキュー310に割り当て、カウントが所定のエントリについて0に到達した場合、テーブル330内の所定のエントリが割り当て解除される。そのようなケースでは、発行する圧縮パケットが存在しないので、制御ロジックは、所定のエントリを割り当て解除するか無効にする。
【0062】
図4を参照すると、パケット送信機400の一実施形態の一般化されたブロック図が示されている。パケット送信機400は、各々のタイプの要求を記憶する要求キュー411,413,415を含む。要求キュー411,413,415の各々は、対応するローカルアドレス履歴キャッシュ410,412,414を有する。ローカルアドレス履歴キャッシュ410,412,414は、要求アドレスを記憶する。他の実施形態では、要求キュー411,413,415のうち1つ以上は、対応するローカルアドレス履歴キャッシュを使用しない。
【0063】
要求キュー411,413,415に記憶された要求は、フロー制御ユニット(「フリット(flit)」)として知られるタイプのパケットである。フリットは、より大きなパケットのサブセットである。フリットは、概して、データと、例えばより大きなパケットのヘッダ情報及びテール情報等の制御情報と、を伝送する。伝送のためのデータは、ネットワークにおいてルーティングされるパケットとして説明されるが、いくつかの実施形態では、伝送のためのデータは、ポイントツーポイント相互接続におけるビットストリーム又はバイトストリームである。要求キュー411,413,415は、ファブリックリンク上で送信する制御ロジックに対する制御パケットを記憶する。パケット送信機400以外の別の送信元は、フリットに対応するより大きなパケット等の対応するデータパケットを送信する。
【0064】
いくつかのケースでは、より大きなデータパケットに対する送信元等の1つ以上の他の送信元は、パケット送信機400とファブリックリンクを共有する。したがって、ファブリックリンクは、制御パケットを送信するために常に利用可能ではない。また、パケット送信機400は、候補パケット430~434のうち1つ以上をリンクパケット460に挿入するためのパッキングバッファアービタ450を含む。リンクパケット460は、FTI候補パケット430~434のうち1つ以上を記憶するための十分なデータ記憶空間を有する。2つの要件が満たされると制御ロジックが判別した場合、パケット送信機400は、ファブリックリンク上にリンクパケット460を送信する。第1の要件は、ファブリックトランスポートインタフェースが、ファブリックリンクが利用可能であることを示す信号をパケット送信機400に送信することである。第2の要件は、パケット送信機400が、リンクパケット460が空でないと判別することである。
【0065】
キュー411~415に記憶される制御パケットタイプの例は、要求タイプ、応答タイプ、プローブタイプ、及び、トークンタイプ又はクレジットタイプである。パケットタイプの他の例も可能であり、考慮される。図示するように、キュー411は、一例では、制御要求タイプである「タイプ1」のパケットを記憶する。キュー413は、いくつかのケースでは、制御応答タイプである「タイプ2」のパケットを記憶し、キュー415は、いくつかのケースでは、制御トークンタイプ又はクレジットタイプである「タイプN」のパケットを記憶する。
【0066】
キューアービタ420は、キュー411からFTI候補パケット430を選択する。いくつかの実施形態では、キューアービタ420は、1つ以上の属性に基づいてFTI候補パケット430を選択する。属性の例は、エイジ、パケットタイプの優先度レベル、パケットの優先度レベル、サービス品質パラメータ、送信元識別子、リアルタイムアプリケーション等のアプリケーション識別子又はタイプ、リアルタイムトラフィック等のトラフィックタイプの指標、及び、帯域幅要件又はレイテンシ許容要件等である。同様に、キューアービタ422~424は、キュー413,415からFTI候補パケット432~434を選択する。
【0067】
図示するように、FTI候補パケット430~434の各々は、異なるデータサイズ440~444を有する。いくつかのケースでは、FTI候補パケット430~434のうち2つ以上は、同じデータサイズを有する。キュー411,413,415のうち1つ以上は、異なるサイズのFTIパケットを記憶することが可能である。したがって、キューアービタ420~424のうち所定の1つがFTI候補パケットを選択する場合、選択されたFTI候補パケットは、同じキューから選択された、以前に選択されたFTI候補パケットとは異なるサイズを有する。一例では、キュー411が要求タイプのパケットを記憶する場合、キュー411は、128ビットのサイズを有する非圧縮要求パケットを記憶し、64ビットのサイズを有する圧縮要求パケットを記憶する。したがって、キュー411のいくつかのエントリは、データサイズ440とは異なるデータサイズを有するFTI候補パケットを記憶する。
【0068】
リンクパケット460は、セクタ462~466に分割される。一例では、各セクタは、32ビットである。セクタ462~466について他のデータサイズが可能であり、考慮される。一例では、リンクパケット460は、8個のセクタを含む。他の数のセクタがリンクパケット460に含まれることも可能である。リンクパケット460は、レジスタ又は他の順次記憶要素(sequential storage elements)に記憶される。制御FTI候補パケット等のデータを記憶することに加えて、リンクパケット460は、他のメタデータ(図示省略)も記憶する。他のメタデータの例は、セクタ462~466のうち何れか(複数可)が利用可能であることの指標である。パッキングバッファアービタ450は、FTI候補パケット430~434を受信し、受信したFTI候補パケット430~434のうち1つ以上を選択して、リンクパケット460内の利用可能なデータ記憶空間に挿入する。
【0069】
図5を参照すると、コンピューティングシステムにおいて効率的なデータ転送を実行する方法500の一実施形態が示されている。説明のために、この実施形態におけるステップ(図6図8及び図10におけるステップと同様に)は、順番通りに示されている。しかしながら、説明する方法の様々な実施形態では、説明する要素のうち1つ以上は、同時に実行されてもよいし、図示した順序とは異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。他の追加の要素も必要に応じて実行される。本明細書で説明する様々なシステム又は装置は、方法500を実施するように構成されている。
【0070】
パケット送信機は、アドレスを含む要求を受信する(ブロック502)。いくつかのケースでは、パケット送信機は、オンチップネットワーク又はファブリックから要求を受信し、パケット送信機は、オフチッププロセッサにパケットを送信するための発信リンクを使用する。パケット送信機における制御ロジックは、要求タイプに基づいて、複数の要求キューのうち所定の要求キューを選択する(ブロック504)。制御ロジックは、受信した要求を所定の要求キューに割り当てる(ブロック506)。いくつかのケースでは、制御ロジックは、エントリ位置が対応する要求のエイジを示すように、インオーダ方式でエントリを割り当てる。
【0071】
対応するアドレス履歴キャッシュ内のアドレスについて検索が行われる(ブロック508)。アドレス履歴キャッシュにインデックスを付けるために、送信元識別子が使用される。実施形態では、送信元識別子は、要求を生成したスレッドを実行するプロセッサを識別するのに使用されるプロセッサ識別子及びスレッド識別子を含む。制御ロジックは、送信元識別子を使用して、アドレス履歴キャッシュ内のインデックスを選択し、制御ロジックは、選択されたインデックス内の複数のウェイの何れかが要求アドレスを記憶するかどうかを判別するために、要求アドレスの一部をタグとして使用する。
【0072】
アドレス履歴キャッシュ内でヒットが存在する場合(条件付きブロック510:「はい」)、アドレス履歴キャッシュヒットの指標は、所定の要求キューの割り当てられたエントリに記憶される(ブロック512)。いくつかのケースでは、制御ロジックは、キャッシュヒットフィールドを更新して、アサートされた値を記憶する。例えば、(図2及び図3の)キャッシュヒットフィールド250が使用される。アドレス履歴キャッシュ内のアドレスの位置の識別が、割り当てられたエントリに記憶される(ブロック522)。例えば、キャッシュヒットは、アドレス履歴キャッシュの選択されたインデックス内の複数のウェイのうち特定のウェイを識別する。実施形態では、識別は、キャッシュヒットの間に発見された特定のウェイであり、この特定のウェイの識別は、所定の要求キューの割り当てられたエントリに記憶される。例えば、上述したように、ウェイ3は、(図3の)要求キュー300に記憶される。
【0073】
所定の要求キューからのアウトオブオーダ発行を実行するために使用する情報は、所定の要求キューの割り当てられたエントリに記憶される(ブロック524)。実施形態では、キャッシュロードの指標を有する古い要求が所定の要求キューに未だ割り当てられている場合、キャッシュロードマッチの指標は、所定の要求キューの割り当てられたエントリに記憶される。一例では、制御ロジックは、アサートされた値で、(図2及び図3の)キャッシュロードマッチフィールド254を更新する。
【0074】
アドレス履歴キャッシュ内でミスが存在する場合(条件付きブロック510:「いいえ」)、アドレス履歴キャッシュミスの指標は、所定の要求キューの割り当てられたエントリに記憶される(ブロック516)。いくつかのケースでは、制御ロジックは、アサートされた値を記憶するように、キャッシュロードフィールドを更新する。例えば、(図2及び図3の)キャッシュロードフィールド248が使用される。要求の要求アドレスの少なくとも一部を記憶するためのアドレス履歴キャッシュ内の位置が識別される(ブロック518)。例えば、選択されたインデックス内の複数のウェイのうち特定のウェイが識別される。無効なウェイが利用可能でない場合、割り当てられたウェイの何れかは、置換のために選択される。例えば、最長未使用(LRU)スキームが使用される。
【0075】
要求アドレスの少なくとも一部は、アドレス履歴キャッシュの識別された位置に記憶される(ブロック520)。その後、方法500の制御フローは、ブロック522に進み、ブロック522では、アドレス履歴キャッシュ内の記憶位置の識別が、所定の要求キューの割り当てられたエントリに記憶される。記憶位置は、要求のアドレスを記憶する。キャッシュヒットの間に発見された特定のウェイの識別子は、所定の要求キューの割り当てられたエントリに記憶される。その後、方法500の制御フローは、ブロック522からブロック524に進み、ブロック524では、所定の要求キューからのアウトオブオーダ発行を実行するために使用される情報が、所定の要求キューの割り当てられたエントリに記憶される。一例では、キャッシュロードの指標を有する古い要求が所定の要求キューに未だ割り当てられている場合、キャッシュロードマッチの指標は、所定の要求キューの割り当てられたエントリに記憶される。
【0076】
図6を参照すると、コンピューティングシステムにおいて効率的なデータ転送を実行する方法600の一実施形態が示されている。要求のアドレスを記憶するアドレス履歴キャッシュ内の記憶位置を識別する、記憶位置の識別情報を受信する(ブロック602)。要求キューの制御ロジックは、記憶位置の識別情報を受信する。一実施形態では、受信した識別は、パケット送信機によって受信された要求に対する要求アドレスの少なくとも一部を記憶するアドレス履歴キャッシュ内の特定のウェイを識別する。例えば、ウェイ3が、(図3の)要求キュー300に送信される。要求キューは、要求の記憶位置の識別及び要求の送信元の識別子を用いて検索される(ブロック604)。上述したように、送信元識別子は、要求を生成したスレッドを実行するプロセッサを識別するために使用されるプロセッサ識別子及びスレッド識別子を含む。
【0077】
要求キュー内でミスが存在する場合(条件付きブロック606:「いいえ」)、要求キュー内のエントリは、要求キュー内に古い要求が存在しないことを指定する要求に対して割り当てられる(ブロック608)。例えば、割り当てられたエントリは、要求に対するアドレス履歴キャッシュのヒット/ミス結果の指標を記憶するが、(図2及び図3の)キャッシュロードマッチフィールド254は、消去された値又は無効にされた値で更新される。しかしながら、要求キュー内でヒットが存在する場合(条件付きブロック606:「はい」)、ヒットエントリが要求アドレスを受信機に記憶することを指定する指標を記憶するかどうかの判別が行われる。一実施形態では、ヒットエントリは、アサートされた値を(図2及び図3の)キャッシュロードフィールド248に記憶する。
【0078】
ヒットエントリが要求アドレスを受信機に記憶することを指定する指標を記憶する場合(条件付きブロック610:「はい」)、エントリは、古い要求が要求アドレスを受信機に記憶することを指定する要求に対して要求キューに割り当てられる(ブロック612)。例えば、割り当てられたエントリは、要求に対するアドレス履歴キャッシュについてのヒット/ミス結果の指標を記憶し、(図2及び図3の)キャッシュロードマッチフィールド254は、アサートされた値で更新される。要求キュー内でヒットが存在する場合(条件付きブロック606:「はい」)、及び、ヒットエントリが要求アドレスを受信機に記憶することを指定する指標を記憶しない場合(条件付きブロック610:「いいえ」)、エントリが要求キューに割り当てられる。割り当てられたエントリは、要求キューに記憶された古い要求が要求アドレスを受信機に記憶しないことを指定する要求に対するものである(ブロック614)。例えば、ヒットエントリは、消去された値を(図2及び図3の)キャッシュロードフィールド248に記憶する。割り当てられたエントリは、要求に対するアドレス履歴キャッシュについてのヒット/ミス結果の指標を記憶するが、(図2及び図3の)キャッシュロードマッチフィールド254は、消去された値又は無効にされた値で更新される。
【0079】
図7を参照すると、コンピューティングシステムにおいて効率的なデータ転送を実行する方法700の一実施形態が示されている。以前のアドレス履歴キャッシュヒットの指標を有する要求は、発行するために要求キューから選択される(ブロック702)。一実施形態では、要求キュー内の選択された要求は、アサートされた値を(図2及び図3の)キャッシュヒットフィールド250に記憶する。選択された要求が、古い要求のアドレスを受信機に記憶することを示す、同じ送信元からの要求キュー内の古い要求を指定する指標を含むかどうかが判別される(ブロック704)。一例では、指標は、(図2及び図3の)キャッシュロードマッチフィールド254に記憶された、アサートされた値である。
【0080】
選択された要求が上記の指標を含む場合(条件付きブロック706:「はい」)、非圧縮候補パケットは、発信リンクパケットにパックするように、選択された要求に対してアドレスと共に生成される(ブロック708)。アドレス履歴キャッシュ内で以前のヒットがあるにも関わらず、選択された要求は、要求アドレスを受信機に記憶する古い要求よりも前に発行するために選択される。この古い要求が未だ発行されていないので、要求アドレスは、受信機に未だ記憶されていない。
【0081】
選択された要求が上記の指標を含まない場合(条件付きブロック706:「いいえ」)、圧縮候補パケットは、発信リンクパケットにパックするように、選択された要求に対してアドレスの一部無しに生成される(ブロック710)。選択された要求が、アドレス履歴キャッシュ内で以前にヒットしており、選択された要求が、要求アドレスを受信機に記憶する古い要求の後での発行のために選択されるので、要求アドレスの少なくとも一部を有しない圧縮パケットは、受信機に送信される。
【0082】
図8を参照すると、コンピューティングシステムにおいて効率的なデータ転送を実行する方法800の一実施形態が示されている。要求のアドレスを記憶することを指定する指標を有する要求は、発行するために要求キューから選択される(ブロック802)。一実施形態では、要求キュー内の選択された要求は、アサートされた値を(図2及び図3の)キャッシュロードフィールド248に記憶する。要求キュー300について上述したテーブル330等のテーブルの使用についてはここで説明しないが、いくつかのケースでは、選択された要求は、他のステップが実行される前に適格にされる。例えば、アサートされたキャッシュヒットフィールドを用いて、カウントを有する保留中の要求以外の選択された要求と同じ要求アドレスを使用して、選択された要求が、対応する要求のより高いカウントを有するものとして発見される場合、選択された要求は、適格であるとみなされる。制御ロジックは、同じ送信元識別子からの要求に対して、及び、アドレス履歴キャッシュ内の記憶位置の同じ識別情報を使用して、選択された要求より古い要求を検索する(ブロック804)。例えば、制御ロジックは、選択された要求と同じ送信元識別子及び記憶位置(キャッシュウェイ)を有する、要求について古い要求を検索する。
【0083】
上記の検索でマッチを発見した場合(条件付きブロック806:「はい」、マッチする要求内のアドレス履歴キャッシュヒットの指標が消去される(ブロック808)。また、いくつかの実施形態では、パケット受信機の制御ロジックは、マッチする要求内の受信機に記憶されているアドレスの指標を消去する(ブロック810)。(図3の)要求キュー300におけるケースの例を再度参照すると、方法800のブロック806~810は、アドレス履歴キャッシュ内の同じ記憶位置を使用して、同じ送信元からの古い要求を検索する間の(図3の)ケース2~4のステップと同様である。
【0084】
制御ロジックが上記の検索からマッチを発見しない場合(条件付きブロック806:「いいえ」)、又は、制御ロジックが1つ以上の古い要求に対する指標を消去することを完了した場合(ブロック808,810)、制御ロジックは、別の検索を実行する。例えば、制御ロジックは、同じ送信元識別子からの要求に対して、アドレス履歴キャッシュ内の記憶位置の同じ識別情報を使用して、選択された要求より新しい要求を検索する(ブロック816)。一実施形態では、制御ロジックは、選択された要求と同じ送信元識別子、及び、記憶位置(キャッシュウェイ)の同じ識別情報を使用して、要求に対する新しい要求を検索する。この検索からマッチが発見される場合(条件付きブロック818:「はい」)、マッチする要求の要求は、受信機に記憶するアドレスの指標を用いて、選択された要求と次に古い要求との間のエイジによって識別される(ブロック820)。図3における例、及び、選択されたエントリ32に対するケース3を再度簡潔に参照すると、制御ロジックは、未だ割り当てられているエントリ8と選択されたエントリ32との間で、未だ割り当てられている新しいエントリ15,20を識別する。
【0085】
識別された要求が存在する場合(条件付きブロック822:「はい」)、選択された要求と同じ送信元情報を共有することを指定する、識別された要求の指標が消去される(ブロック824)。送信元情報は、送信元識別子と、アドレス履歴キャッシュ内の記憶位置の識別と、を含む。一実施形態では、送信元識別子は、プロセッサ識別子及びスレッド識別子を少なくとも含む。いくつかのケースでは、キャッシュロードマッチフィールドは、識別された要求に対して消去又は無効にされる。したがって、後の時点において、調停ロジックが、発行のための1つ以上の識別された要求を選択すると、制御ロジックは、圧縮パケットを生成する。このようなときに圧縮パケットが生成されるが、これは、現在の(及び、古い)選択された要求が発行されることに起因して、要求アドレス又は要求アドレスの一部が受信機のリモートアドレス履歴キャッシュに記憶されるからである。
【0086】
識別された要求が存在しない場合(条件付きブロック822:「いいえ」)、方法800の制御フローは、ブロック826に進み、ブロック826では、選択された要求に対する非圧縮候補パケットが、発信リンクパケットにパックするように、アドレスと共に生成される。(図3の)要求キュー300におけるケースの例を再度参照すると、方法800におけるブロック816~824は、アドレス履歴キャッシュ内の同じ記憶位置を使用して、同じ送信元からの新しい要求を検索する間のケース2~4のステップと同様である。上述したように、制御ロジックは、同じ送信元識別子を有する要求に対する選択された要求より新しい要求であって、アドレス履歴キャッシュ内の記憶位置の同じ識別情報を使用する要求を検索する(ブロック816)。この検索からマッチが発見されない場合(条件付きブロック818:「いいえ」)、方法800の制御フローは、ブロック826に進み、ブロック826では、選択された要求に対する非圧縮候補パケットが、発信リンクパケットにパックするように、アドレスと共に生成される。
【0087】
図9を参照すると、パケット受信機900の一実施形態の一般化されたブロック図が示されている。図示した実施形態では、パケット受信機900は、各々のタイプのパケットを記憶するためのキュー911,913,915を含む。図示するように、要求キュー911,913,915の各々は、対応するアドレス履歴キャッシュ910,912,914を有する。アドレス履歴キャッシュ910,912,914は、受信した圧縮パケットに使用される要求アドレスを記憶する。
【0088】
図示するように、パケット受信機900は、ファブリックリンクからリンクパケット960を受信する。リンクパケット960は、複数のFTIパケットを記憶するのに十分なデータ記憶空間を有する。分散逆多重化(distribution demux)ロジック950(又は、ロジック950)は、リンクパケット900内のセクタ962~966を分析し、何個のFTI制御パケットがリンクパケット960内にあり、これらがリンクパケット960内の何処に位置するかを判別し、FTI制御パケットを記憶のためにキュー911,913,915に送信する。キュー910~914に記憶される制御パケットタイプの例は、要求タイプ、応答タイプ、プローブタイプ、及び、トークンタイプ又はクレジットタイプを含む。他の実施形態では、パケットタイプの他の例も含まれる。図示するように、キュー911は、「タイプ1」のパケットを記憶し、キュー913は、「タイプ2」のパケットを記憶し、キュー915は、「タイプN」のパケットを記憶する。
【0089】
リンクパケット960は、セクタ962~966に分割される。一例では、各セクタは、32ビットである。セクタ962~966について他のデータサイズが可能であり、考慮される。制御FTIパケット等のデータを記憶することに加えて、他のメタデータ(図示省略)が記憶される。他のメタデータの例は、いくつかの実施形態では、制御FTIパケットが可変データサイズを有するので、セクタ962~966の間に割り当てられたセクタの指標、及び、制御FTIパケットが開始する場所の指標である。様々な実施形態では、ロジック950は、組み合わせロジック及び順序要素(sequential elements)の組み合わせを含む。ロジック950は、ハードウェア、ソフトウェア、又は、これらの組み合わせにおいて実装される。ロジック950は、1つ以上の制御FTIパケットをリンクパケット960から除去し、これらをキュー911,913,915に送信する。
【0090】
いくつかのケースでは、FTI候補パケット930~934の各々は、異なるデータサイズ940~944を有する。他のケースでは、FTI候補パケット930~934のうち2つ以上は、同じデータサイズを有する。実施形態では、キュー911~915のうち1つ以上は、異なるサイズのFTIパケットを記憶する。したがって、ロジック950が、FTIパケット930等のFTIパケットをキュー911に送信する場合、FTIパケットは、同じキューに送信された以前のFTIパケットとは異なるサイズを有する。一例では、キュー911が要求タイプのパケットを記憶する場合、キュー911は、128ビットのサイズを有する非圧縮要求パケットを記憶し、64ビットのサイズを有する圧縮要求パケットを記憶する。したがって、キュー911のいくつかのエントリは、データサイズ940とは異なるデータサイズを有するFTI候補パケットを記憶する。
【0091】
様々な実施形態では、FTI候補パケット930~934のうち1つ以上は、要求アドレスの少なくとも一部を記憶しない圧縮パケットである。圧縮パケットについて、ロジック950は、アドレス履歴キャッシュ910~914のうち対応するものにアクセスして、リンクを介して送信された圧縮パケットに存在しない要求アドレスの一部を取得する。いくつかのケースでは、圧縮パケットは、圧縮パケットであることを指定する指標を含む。上述したように、キャッシュヒットフィールド250に対するアサートされた値は、要求アドレスの少なくとも一部が、圧縮パケット内に記憶されるのではなく、アドレス履歴キャッシュ910~914のうち対応するものに記憶されることを示す。要求アドレスの少なくとも一部を有しない圧縮パケットを伝送することによって、リンク効率が増大する。
【0092】
いくつかの実施形態では、FTI候補パケット930~934のうち非圧縮パケットは、非圧縮パケット内の要求アドレスの少なくとも一部を、アドレス履歴キャッシュ910~914のうち対応するものに記憶する指標を含む。上述したように、キャッシュロードフィールド248は、ロジック950に対して、ロジック950が要求アドレスの少なくとも一部をアドレス履歴キャッシュ910~914のうち対応するものに記憶することを示す。ロジック950は、後の時点において受信する圧縮パケットのために、要求アドレスの記憶された部分を使用する。
【0093】
様々な実施形態では、キュー911~915の各々は、割り当てのためのいくつかの利用可能なエントリを維持するための制御ロジック(図示省略)を含む。キュー911~915のエントリは、利用可能なエントリを示す有効ビットを含む。いくつかのケースでは、有効フィールドに記憶された、無効にされた値は、利用可能なエントリを示すのに対し、有効フィールドに記憶された、アサートされた値は、割り当てられたエントリを示す。いくつかの実施形態では、キュー911~915における制御ロジックは、利用可能なエントリの数に基づいて、トークン又はクレジット952の数を判別する。制御ロジックは、トークン952の値を、1つ以上のリンクの他方の側にあるパケット送信機に送信する。例えば、パケット受信機900は、トークン952をパケット送信機に送信するために側波帯を使用する。
【0094】
図10を参照すると、コンピューティングシステムにおいて効率的なデータ転送を実行する方法1000の一実施形態が示されている。要求は、インバウンドリンク(inbound link)から受信される(ブロック1002)。パケット受信機は、リンク上でパケット送信機から要求を受信する。パケット受信機は、要求が、当該要求に対するアドレスを記憶するアドレス履歴キャッシュを指定する指標を含むかどうかを判別する(ブロック1004)。受信した要求は、要求アドレスの少なくとも一部を含まない要求が圧縮パケット内にあるかどうかを指定する指標を記憶する。上述したように、いくつかのケースでは、キャッシュヒットフィールド250は、この指標を記憶する。このような指標が要求に含まれる場合(条件付きブロック1006:「はい」)、パケット受信機は、要求のアドレスを記憶するアドレス履歴キャッシュ内の記憶位置の識別情報を取得する(ブロック1008)。一実施形態では、要求は、キャッシュウェイを含む。送信元識別子と組み合わされると、キャッシュウェイは、パケット受信機のアドレス履歴キャッシュ内の特定の記憶位置を識別する。
【0095】
パケット受信機の制御ロジックは、アドレス履歴キャッシュ内の記憶位置の識別情報を少なくとも使用して、アドレス履歴キャッシュからアドレスを取得する(ブロック1010)。例えば、制御ロジックは、アドレス履歴キャッシュ内の特定のインデックスを選択するための送信元識別子を使用し、要求に含まれるキャッシュウェイを使用して、特定のインデックス内の特定のウェイを選択する。その後、パケット受信機は、取得したアドレスを使用して、要求を処理する(ブロック1022)。
【0096】
アドレス履歴キャッシュが要求に対するアドレスを記憶することを指定する指標が要求に含まれていない場合(条件付きブロック1006:「いいえ」)、パケット受信機は、後の要求に対するアドレスを記憶する指標が要求に存在するかどうかを判別する。上述したように、一実施形態では、パケット受信機は、キャッシュロードフィールド248を使用して判別を行う。このような指標が存在する場合(条件付きブロック1012:「はい」)、パケット受信機は、要求から、アドレス履歴キャッシュ内の記憶位置の識別情報を取得する(ブロック1014)。パケット受信機は、要求からアドレスを取得し(ブロック1016)、記憶位置の識別情報を使用して、アドレスをアドレス履歴キャッシュに記憶する(ブロック1018)。上述したように、送信元識別子も使用される。例えば、パケット受信機は、送信元識別子を使用して、アドレス履歴キャッシュ内の特定のインデックスを選択し、要求に含まれるキャッシュウェイを使用して、特定のインデックス内の特定のウェイを選択する。その後、パケット受信機は、取得したアドレスを使用して、要求を処理する(ブロック1022)。
【0097】
アドレスを対応するアドレス履歴キャッシュに記憶することを指定する指標が存在しない場合(条件付きブロック1012:「いいえ」)、パケット受信機は、アドレスをアドレス履歴キャッシュに記憶することなく、要求からアドレスを取得する(ブロック1020)。一実施形態では、パケット受信機は、上述したキャッシュロードフィールド248及びキャッシュヒットフィールド250の各々を検査し、各フィールドが無効にされた値又は消去された値を記憶すると判別する。そのようなケースでは、パケット受信機は、要求を処理するためにアドレス履歴キャッシュを使用しない(ブロック1022)。
【0098】
様々な実施形態では、上述した方法及び/又はメカニズムを実装するために、ソフトウェアアプリケーションのプログラム命令が使用される。プログラム命令は、C等の高レベルプログラミング言語でハードウェアの動作を記述する。代わりに、Verilog等のハードウェア設計言語(HDL)が使用される。プログラム命令は、非一時的なコンピュータ可読記憶媒体に記憶される。様々なタイプの記憶媒体が利用可能である。記憶媒体は、プログラム実行のためにプログラム命令及び付随するデータをコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。コンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行する1つ以上のプロセッサと、を含む。
【0099】
上述した実施形態は、実装の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に認識されると、多数の変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含するように解釈されることが意図される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10