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

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

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特表2024-520742複数のスレッド間での命令キャッシュのフットプリントの共有
<>
  • 特表-複数のスレッド間での命令キャッシュのフットプリントの共有 図1A
  • 特表-複数のスレッド間での命令キャッシュのフットプリントの共有 図1B
  • 特表-複数のスレッド間での命令キャッシュのフットプリントの共有 図2A
  • 特表-複数のスレッド間での命令キャッシュのフットプリントの共有 図2B
  • 特表-複数のスレッド間での命令キャッシュのフットプリントの共有 図3
  • 特表-複数のスレッド間での命令キャッシュのフットプリントの共有 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-05-24
(54)【発明の名称】複数のスレッド間での命令キャッシュのフットプリントの共有
(51)【国際特許分類】
   G06F 12/084 20160101AFI20240517BHJP
   G06F 12/0842 20160101ALI20240517BHJP
   G06F 12/0864 20160101ALI20240517BHJP
   G06F 12/0811 20160101ALI20240517BHJP
【FI】
G06F12/084
G06F12/0842
G06F12/0864
G06F12/0811
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023574871
(86)(22)【出願日】2022-06-01
(85)【翻訳文提出日】2023-12-05
(86)【国際出願番号】 IB2022055108
(87)【国際公開番号】W WO2022259090
(87)【国際公開日】2022-12-15
(31)【優先権主張番号】17/341,192
(32)【優先日】2021-06-07
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
(74)【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
(72)【発明者】
【氏名】レーベンスタイン、シェルドン、バーナード
(72)【発明者】
【氏名】オルゾル、ニコラス
(72)【発明者】
【氏名】ゼーリン、クリスチャン、ゲルハルト
(72)【発明者】
【氏名】キャンベル、デヴィッド
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205MM02
5B205NN45
5B205NN89
5B205PP03
5B205TT02
(57)【要約】
複数のスレッド間で命令キャッシュのフットプリントを共有するための態様が提供される。命令キャッシュラインのセット/ウェイポインタは、メモリページからの命令フェッチに関連付けられたシステムメモリのアドレスから導出される。命令キャッシュラインは、第1のスレッドと第2のスレッドとの間で共有可能であると判定される。メモリページに関連付けられた他の命令キャッシュラインもスレッド間で共有可能であることを示すエイリアステーブルエントリが作成される。他のスレッドから、メモリページに関連付けられた他のシステムメモリのアドレスからの命令を要求する他の命令フェッチが受信される。他のシステムメモリアドレスから、他の命令キャッシュラインへのさらなるセット/ウェイポインタが導出される。エイリアステーブルエントリに基づいて、他の命令キャッシュラインが共有可能であると判定される。
【特許請求の範囲】
【請求項1】
コンピューティングデバイスであって、
少なくとも第1のスレッドと第2のスレッドとを有する複数のプロセシングスレッドを備えるマルチスレッドプロセッサと、
前記マルチスレッドプロセッサとシステムメモリとに結合された命令キャッシュと、
前記命令キャッシュに結合されたキャッシュマネージャと、を含み、前記プロセッサによって前記キャッシュマネージャを実行することにより、前記コンピューティングデバイスに動作を実行させ、前記動作は、
前記命令キャッシュの命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することと、
システムメモリのメモリページに関連付けられた他の命令キャッシュラインも、前記第1のスレッドと前記第2のスレッドとの間で共有可能であることを示すエイリアステーブルエントリを、エイリアステーブルに作成することと、
前記第2のスレッドからのさらなる命令フェッチを受信することであって、前記さらなる命令フェッチは、前記メモリページに関連付けられた前記システムメモリのさらなるアドレスからの命令を要求する、受信することと、
前記システムメモリの前記さらなるアドレスから、さらなる命令キャッシュラインへのさらなるセット/ウェイポインタを導出することであって、前記さらなる命令キャッシュラインは、前記第1のスレッドによって前記システムメモリの前記さらなるアドレスからフェッチされた命令をキャッシュする、導出することと、
前記エイリアステーブルエントリに基づいて、前記さらなる命令キャッシュラインが前記第2のスレッドと共有可能であると判定することと、を含むコンピューティングデバイス。
【請求項2】
前記第1のスレッドから命令フェッチを受信することであって、前記命令フェッチは、前記メモリページに関連付けられた前記システムメモリのアドレスからの命令を要求する、受信することと、
前記システムメモリの前記アドレスからセット/ウェイポインタを導出することと、
前記第2のスレッドから他の命令フェッチを受信することであって、前記他の命令フェッチは、前記メモリページに関連付けられた前記システムメモリの他のアドレスからの命令を要求する、受信することと、
前記システムメモリの前記他のアドレスから他のセット/ウェイポインタを導出することと、をさらに含み、
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、前記セット/ウェイポインタと前記他のセット/ウェイポインタとが共に前記命令キャッシュラインを指すことを検出することを含み、
前記さらなる命令フェッチを受信することは、前記エイリアステーブルエントリを作成した後に、前記さらなる命令フェッチを受信することを含む、請求項1に記載のコンピューティングデバイス。
【請求項3】
前記さらなる命令フェッチに応答して、前記さらなる命令キャッシュラインを前記第2のスレッドに返すことをさらに含む、請求項1に記載のコンピューティングデバイス。
【請求項4】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、キャッシュデータが前記命令キャッシュラインから戻されるときに、命令キャッシュディレクトリの読み出し修正書き込みを実行することを含む、請求項1に記載のコンピューティングデバイス。
【請求項5】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、トラッキングテーブルからセット/ウェイポインタにアクセスすることを含む、請求項1に記載のコンピューティングデバイス。
【請求項6】
キャッシュマネージャを実行することは、さらに、
スレッドが、前記第1のスレッドまたは前記第2のスレッドから前記命令キャッシュに追加の命令キャッシュラインをフェッチすることと、
前記複数のプロセシングスレッドに含まれる第3のスレッドから、追加の命令に対する追加の命令フェッチを受信することと、
前記追加の命令フェッチに関連するよりさらなるセット/ウェイポインタを導出することと、
前記よりさらなるセット/ウェイポインタを保存することと、
前記追加の命令キャッシュラインの前記第3のスレッドのキャッシュミスを検出することと、
前記追加の命令のリクエストをL2キャッシュに送ることと、を含む、請求項1に記載のコンピューティングデバイス。
【請求項7】
前記キャッシュマネージャを実行することは、さらに、
L2キャッシュラインを受信することと、
前記よりさらなるセット/ウェイポインタをトラッキングテーブルにマッチングさせることと、
前記トラッキングテーブルと前記エイリアステーブルとの間のスレッド共有マスクが重複しているか否かを判定することと、を含む、請求項6に記載のコンピューティングデバイス。
【請求項8】
前記キャッシュマネージャを実行することは、さらに、
前記メモリページに関連付けられた命令キャッシュラインが、前記第1のスレッド、前記第2のスレッド、および前記第3のスレッドの間で共有可能であることを示すために、前記エイリアステーブルを更新することと、
前記第3のスレッドのキャッシュミスを、前記第1のスレッド、前記第2のスレッド、および前記第3のスレッドで共有される前記追加の命令キャッシュラインにマーキングして上書きすることと、を含む、請求項7に記載のコンピューティングデバイス。
【請求項9】
前記命令キャッシュがN-ウェイ連想キャッシュであり、
前記マルチスレッドプロセッサは、3つ以上のスレッドを含むマルチスレッドプロセッサを含む、請求項1に記載のコンピューティングデバイス。
【請求項10】
命令キャッシュのフットプリントを共有するコンピュータ実装方法であって、
命令キャッシュラインが第1のスレッドと第2のスレッドとの間で共有可能であると判定することと、
システムメモリのメモリページに関連付けられた他の命令キャッシュラインも、前記第1のスレッドと前記第2のスレッドとの間で共有可能であることを示すエイリアステーブルエントリを、エイリアステーブルに作成することと、
前記第2のスレッドからのさらなる命令フェッチを受信することであって、前記さらなる命令フェッチは、前記メモリページに関連付けられた前記システムメモリのさらなるアドレスからの命令を要求する、受信することと、
前記システムメモリの前記さらなるアドレスから、さらなる命令キャッシュラインへのさらなるセット/ウェイポインタを導出することであって、前記さらなる命令キャッシュラインは、前記第1のスレッドによって前記システムメモリの前記さらなるアドレスからフェッチされた命令をキャッシュする、導出することと、
前記エイリアステーブルエントリに基づいて、前記さらなる命令キャッシュラインが前記第2のスレッドと共有可能であると判定することと、を含む、コンピュータ実装方法。
【請求項11】
前記第1のスレッドから命令フェッチを受信することであって、前記命令フェッチは、前記メモリページに関連付けられた前記システムメモリのアドレスからの命令を要求する、受信することと、
前記システムメモリの前記アドレスからセット/ウェイポインタを導出することと、
前記第2のスレッドから他の命令フェッチを受信することであって、前記他の命令フェッチは、前記メモリページに関連付けられた前記システムメモリの他のアドレスからの命令を要求する、受信することと、
前記システムメモリの前記他のアドレスから他のセット/ウェイポインタを導出することと、をさらに含み、
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、前記セット/ウェイポインタと前記他のセット/ウェイポインタとが共に前記命令キャッシュラインを指すことを検出することを含み、
前記さらなる命令フェッチを受信することは、前記エイリアステーブルエントリを作成した後に、前記さらなる命令フェッチを受信することを含む、請求項10に記載のコンピュータ実装方法。
【請求項12】
前記さらなる命令フェッチに応答して、前記さらなる命令キャッシュラインを前記第2のスレッドに返すことをさらに含む、請求項10に記載のコンピュータ実装方法。
【請求項13】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、キャッシュデータが前記命令キャッシュラインから戻されるときに、命令キャッシュディレクトリの読み出し修正書き込みを実行することを含む、請求項10に記載のコンピュータ実装方法。
【請求項14】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、トラッキングテーブルからセット/ウェイポインタにアクセスすることを含む、請求項10に記載のコンピュータ実装方法。
【請求項15】
キャッシュマネージャを実行することは、さらに、
スレッドが、前記第1のスレッドまたは前記第2のスレッドから前記命令キャッシュに追加の命令キャッシュラインをフェッチすることと、
第3のスレッドから、追加の命令に対する追加の命令フェッチを受信することと、
前記追加の命令フェッチに関連するよりさらなるセット/ウェイポインタを導出することと、
前記よりさらなるセット/ウェイポインタを保存することと、
前記追加の命令キャッシュラインの前記第3のスレッドのキャッシュミスを検出することと、
前記追加の命令のリクエストをL2キャッシュに送ることと、を含む、請求項10に記載のコンピュータ実装方法。
【請求項16】
前記キャッシュマネージャを実行することは、さらに、
L2キャッシュラインを受信することと、
前記よりさらなるセット/ウェイポインタをトラッキングテーブルにマッチングさせることと、
前記トラッキングテーブルと前記エイリアステーブルとの間のスレッド共有マスクが重複しているか否かを判定することと、を含む、請求項15に記載のコンピュータ実装方法。
【請求項17】
前記キャッシュマネージャを実行することは、さらに、
前記メモリページに関連付けられた命令キャッシュラインが、前記第1のスレッド、前記第2のスレッド、および前記第3のスレッドの間で共有可能であることを示すために、前記エイリアステーブルを更新することと、
前記第3のスレッドのキャッシュミスを、前記第1のスレッド、前記第2のスレッド、および前記第3のスレッドで共有される前記追加の命令キャッシュラインにマーキングして上書きすることと、を含む、請求項16に記載のコンピュータ実装方法。
【請求項18】
コンピュータ可読命令を有するコンピュータ可読プログラムコードを目に見える形で具現化した非一過性のコンピュータ可読記憶媒体であって、前記コンピュータ可読命令は、実行されると、命令キャッシュラインを共有する方法をユーザ機器に実行させ、前記方法は、
命令キャッシュラインが第1のスレッドと第2のスレッドとの間で共有可能であると判定することと、
システムメモリのメモリページに関連付けられた他の命令キャッシュラインも、前記第1のスレッドと前記第2のスレッドとの間で共有可能であることを示すエイリアステーブルエントリを、エイリアステーブルに作成することと、
前記第2のスレッドからのさらなる命令フェッチを受信することであって、前記さらなる命令フェッチは、前記メモリページに関連付けられた前記システムメモリのさらなるアドレスからの命令を要求する、受信することと、
前記システムメモリの前記さらなるアドレスから、さらなる命令キャッシュラインへのさらなるセット/ウェイポインタを導出することであって、前記さらなる命令キャッシュラインは、前記第1のスレッドによって前記システムメモリの前記さらなるアドレスからフェッチされた命令をキャッシュする、導出することと、
前記エイリアステーブルエントリに基づいて、前記さらなる命令キャッシュラインが前記第2のスレッドと共有可能であると判定することと、を含む、非一過性のコンピュータ可読記憶媒体。
【請求項19】
前記第1のスレッドから命令フェッチを受信することであって、前記命令フェッチは、前記メモリページに関連付けられた前記システムメモリのアドレスからの命令を要求する、受信することと、
前記システムメモリの前記アドレスからセット/ウェイポインタを導出することと、
前記第2のスレッドから他の命令フェッチを受信することであって、前記他の命令フェッチは、前記メモリページに関連付けられた前記システムメモリの他のアドレスからの命令を要求する、受信することと、
前記システムメモリの前記他のアドレスから他のセット/ウェイポインタを導出することと、をさらに含み、
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、前記セット/ウェイポインタと前記他のセット/ウェイポインタとが共に前記命令キャッシュラインを指すことを検出することを含み、
前記さらなる命令フェッチを受信することは、前記エイリアステーブルエントリを作成した後に、前記さらなる命令フェッチを受信することを含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項20】
前記第1のスレッドから命令フェッチを受信することは、マルチスレッドプロセッサの前記第1のスレッドから前記命令フェッチを受信することを含み、
前記第2のスレッドから他の命令フェッチを受信することは、前記マルチスレッドプロセッサの前記第2のスレッドから前記他の命令フェッチを受信することを含み、
前記セット/ウェイポインタを導出することは、N-ウェイ連想キャッシュの命令キャッシュラインへのセット/ウェイポインタを導出することを含む、請求項19に記載の非一過性のコンピュータ可読記憶媒体。
【請求項21】
前記他の命令フェッチに応答して、前記さらなる命令キャッシュラインを前記第2のスレッドに返すことをさらに含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項22】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、キャッシュデータが前記命令キャッシュラインから戻されるときに、命令キャッシュディレクトリの読み出し修正書き込みを実行することを含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項23】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、トラッキングテーブルからセット/ウェイポインタにアクセスすることを含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項24】
スレッドが、前記第1のスレッドまたは前記第2のスレッドから前記命令キャッシュに追加の命令キャッシュラインをフェッチすることと、
第3のスレッドから、追加の命令に対する追加の命令フェッチを受信することと、
前記追加の命令フェッチに関連するよりさらなるセット/ウェイポインタを導出することと、
前記よりさらなるセット/ウェイポインタを保存することと、
前記追加の命令キャッシュラインの前記第3のスレッドのキャッシュミスを検出することと、
前記追加の命令のリクエストをL2キャッシュに送ることと、を含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項25】
L2キャッシュラインを受信することと、
前記よりさらなるセット/ウェイポインタをトラッキングテーブルにマッチングさせることと、
前記トラッキングテーブルと前記エイリアステーブルとの間のスレッド共有マスクが重複しているか否かを判定することと、を含む、請求項23に記載の非一過性のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般にメモリキャッシュに関し、より詳細には、複数のプロセッサスレッド間で命令キャッシュのフットプリントを共有するシステムおよび方法に関する。
【背景技術】
【0002】
キャッシュメモリ(または「キャッシュ」)とは、コンピュータの中央プロセッサがより速く処理できるように、頻繁に使用する命令やデータを一時的に保存する補助メモリシステムのことである。キャッシュは、コンピュータのメインメモリを補強し、その延長線上にある。キャッシュは通常、メインメモリに格納されている、より新しく使用頻度の高い情報やプログラムコードのコピーを保持する。キャッシュは通常、システムメモリよりも高速に動作し、キャッシュされたデータや命令を探して中央プロセッサに提供するのに必要な時間を短縮する。
【0003】
EA(実効アドレス)キャッシュを持つマルチスレッド処理環境では、通常、どの命令キャッシュライン(またはセット内のウェイ)がプロセス境界を越えて共有可能かを判定する方法はない。さらに、命令キャッシュライン(またはセット内のウェイ)は通常、スレッドごとに個別にマーキングされる。したがって、命令キャッシュのフットプリントは、通常、マルチスレッドプロセッサ環境の異なるプロセッサスレッド間で共有することができない。
【発明の概要】
【0004】
本開示の様々な実施形態によれば、複数のスレッド間で命令キャッシュのフットプリントを共有するためのコンピューティングデバイス、非一過性のコンピュータ可読記憶媒体、および方法が提供される。
【0005】
本開示の態様は、命令キャッシュ(例えば、L2)セット/ウェイポインタおよびエイリアステーブルを使用して、マルチスレッドプロセッサの複数のスレッド間で命令キャッシュのフットプリントを共有することを含む。エイリアステーブルは、複数のスレッド間で共有が確認されたメモリ領域(例えば、ページ)を表す実効アドレス(EA)を含む。エイリアステーブルには、アクセススレッドのトランスレーションが割り当て時と一致するかどうかを検証するための情報も含まれる。
【0006】
メモリページに関連付けられたシステムメモリアドレスからの命令を要求する命令フェッチが、第1のスレッドから受信される。システムメモリアドレスから命令キャッシュラインへのセット/ウェイポインタが導出される。メモリページに関連付けられた他のシステムメモリアドレスからの命令を要求する他の命令フェッチが、第2のスレッドから受信される。他のシステムメモリアドレスから、他の命令ラインへの他のセット/ウェイポインタが導出される。セット/ウェイポインタと他のセット/ウェイポインタがともに命令キャッシュラインを示すことが検出されると、命令キャッシュラインは第1のスレッドと第2のスレッドとの間で共有可能であると判定される。
【0007】
ある態様では、命令キャッシュラインの共有可能性を判定することは、トラッキングテーブルから他のセット/ウェイポインタにアクセスすることを含む。他のセット/ウェイポインタは、第2のスレッドに関連して命令キャッシュラインに命令をキャッシュすることから導出されたものである。セット/ウェイポインタと他のセット/ウェイポインタの両方が命令キャッシュラインを指すことが検出される。他の態様では、キャッシュデータが戻されるときに、潜在的に共有可能な命令キャッシュラインを探すために命令キャッシュディレクトリの読み出し修正書き込みが実行される。
【0008】
命令キャッシュラインの共有可能性を判定すると、メモリページに関連する他の命令キャッシュラインも第1のスレッドと第2のスレッドとの間で共有可能であることを示すエイリアステーブルエントリがエイリアステーブルに入力される。その後、第2のスレッドからさらなる命令フェッチが受信される。さらなる命令フェッチは、メモリページに関連付けられたさらなるシステムメモリのアドレスからさらなる命令を要求する。さらなる命令キャッシュラインへのさらなるセット/ウェイポインタが、さらなるシステムメモリのアドレスから導出される。さらなる命令キャッシュラインは、第1のスレッドによってさらなるシステムメモリのアドレスからフェッチされた命令をキャッシュする。エイリアステーブルエントリに基づいて、さらなる命令キャッシュラインが第2のスレッドと共有可能であると判定される。
【0009】
命令キャッシュラインとさらなる命令キャッシュラインは、その後、第1のスレッドまたは第2のスレッドからの命令に対する後続の命令フェッチに応答して、第1のスレッドまたは第2のスレッドのいずれかに戻されることができる。
【0010】
これらの特徴および他の特徴は、添付図面と関連して読まれるその例示的実施形態の以下の詳細な説明から明らかになるであろう。
【0011】
以下、本発明の好ましい実施の形態を、例示のためにのみ、以下の図面を参照して説明する。
【図面の簡単な説明】
【0012】
図1A】例示的な実施形態に沿った複数のスレッド間で命令キャッシュのフットプリントを共有することを容易にする例示的なコンピュータアーキテクチャを示す。
図1B】例示的な実施形態に沿った複数のスレッド間で命令キャッシュのフットプリントを共有することを容易にする例示的なコンピュータアーキテクチャを示す。
図2A】例示的な実施形態に沿った複数のスレッド間で命令キャッシュのフットプリントを共有するための例示的な方法のフローチャートを示す。
図2B】例示的な実施形態に沿った複数のスレッド間で命令キャッシュのフットプリントを共有するための例示的な方法のフローチャートを示す。
図3】例示的な実施形態に沿った特に構成されたコンピュータハードウェアプラットフォームを示す。
図4】例示的な実施形態に沿ったメモリアーキテクチャの一例を示す。
【発明を実施するための形態】
【0013】
以下の詳細な説明では、関連する教示を十分に理解できるように、多数の具体的な詳細を例として示す。しかしながら、本教示は、そのような詳細がなくても実施できることは明らかであろう。他の例では、周知の方法、手順、構成要素、もしくは回路またはその組み合わせは、本教示の態様を不必要に曖昧にすることを避けるために、詳細な説明なしに、比較的高い水準で説明される。
【0014】
本開示は一般に、コンピューティングデバイス、非一過性のコンピュータ可読記憶媒体、および複数のスレッド間で命令キャッシュラインを共有する方法に関する。一態様では、複数(例えば4つ)のスレッドが、共通の命令キャッシュ(または「アイキャッシュ」)から命令フェッチを交代で行う。スレッドの数は任意であり、例えば2~Nスレッドの範囲である。
【0015】
態様は、メモリ領域(例えば、ページ)に関連付けられた複数のキャッシュラインを複数のスレッド(例えば、第1のスレッド、第2のスレッドなど)間で共有可能であるタイミングを判定する方法を提供する。第1のスレッドからの命令フェッチは、メモリページに関連付けられたシステムメモリのアドレスからの命令を要求することができる。命令キャッシュラインへの命令キャッシュ(例えば、L2)セット/ウェイポインタ(以下、「L2xy」と呼ぶ)は、システムメモリのアドレスから導出される。一般に、命令キャッシュラインが第1のスレッドと第2のスレッドとの間で共有可能であると判定される。判定に応答して、エイリアステーブルにエイリアステーブルエントリが作成される。エイリアステーブルエントリは、メモリページに関連する他の命令キャッシュラインも、第1のスレッドと第2のスレッドとの間で共有可能であることを示す。さらなる命令フェッチを処理するとき、キャッシュマネージャは、メモリページに関連付けられた他のキャッシュラインが共有可能であることを判定するために、エイリアステーブルエントリを参照することができる。
【0016】
ある態様では、キャッシュデータが返されるときに、命令キャッシュディレクトリ(または「IDIR」)の読み出し修正書き込みが実行され、共有可能な可能性のある個々の命令キャッシュラインを探す。
【0017】
他の態様では、個々のキャッシュラインを複数のスレッド間で共有可能であるタイミングを判定するために、トラッキングテーブルが使用される。L2xyはアイキャッシュディレクトリに格納され、対応する実アドレスの代理/代替アドレスとして使用される。L2xyが2つのフェッチで同じであれば、2つのアイキャッシュミスのメモリデータも同じである。トラッキングテーブルは、潜在的な共有候補を見つけるために利用することができる。トラッキングテーブルはスレッドごとに分割され、スレッドごとに1つのエントリを含むことができる。各エントリは、実効アドレス(EA)、モデル固有レジスタ(MSR)状態、およびL2xyポインタを含むことができる。また、インフライトの各キャッシュミスに対するリロードマシンと、アーキテクチャ的に健全な方法でトランスレーション無効を管理するメカニズムも含まれる。
【0018】
アイキャッシュは、命令キャッシュ(例えばL2)内の連想ポインタとともに実アドレスの数ビットを格納するL2xyポインタを除いて、物理アドレスや実アドレスの概念がないような実効アドレスキャッシュとすることができる。L2xyポインタを使用すると、(1)命令キャッシュ内のキャッシュラインを変更するストアがある場合、または(2)そのラインがL2からタイムアウトされた場合に、命令キャッシュの無効化を実行できる。L2xyポインタは、命令キャッシュラインが無効化されたときにスレッド間で比較することができ、一致するL2xyポインタを持つ新しいスレッドに対してデータが返された場合、命令キャッシュラインを複数のスレッドで共有することができる。
【0019】
スレッド固有のコンテキストタグは、スレッドを識別するために使用することができる。スレッド固有のコンテキストタグは、ハードウェアスレッドに静的にマッピングできる(例えば、ctxttag = tid + 8)。したがって、コンテキストタグからtidを導出することができる。スレッド固有のコンテキストタグは、現在のスレッドまたは現在のスレッドではない他のスレッドをマッピングできる。アイキャッシュラインが共有されていることを追加の共有スレッドコンテキストタグを使用して示すことができる。スレッド固有のコンテキストタグは、トラッキングテーブルエントリを作成する際に、どのスレッドが最初にキャッシュラインをロードしたかを示すために使用できる。そのため、L2xyが一致したとき、および再ロードが命令キャッシュから戻ったときに、どのスレッドがアーキテクチャ的に共有可能であるかを判定することができる。
【0020】
このように、命令フェッチユニット(IFU)(図示せず)は、同じEA(すなわち、L2xyポインタ)を有し、同じ命令キャッシュラインをヒットすることが許可されているキャッシュラインを識別することができる。トラッキングテーブルが共有を検出するために使用され、対応するIDIRミスに対して命令キャッシュディレクトリ(IDIR)が読み込まれたときに、現在のスレッドのL2xyポインタを取得する。共有は、特別なコンテキストタグ値(例えば、0xFや1111)を介して記憶することができる。
【0021】
トラッキングテーブルは、最近の「ほとんどミス」に関連する命令キャッシュディレクトリ(IDIR)情報を含むことができる。ほとんどミスは、IDIRミスがあるが、コンテキストタグ以外のすべてが一致した場合に発生する。
【0022】
一般に、命令キャッシュの有効アドレスディレクトリ(EADIR)/IDIRのミスが発生するたびに、例えば以下のような様々な条件が満たされた場合に、トラッキングテーブルにエントリを書き込むことができる。
1.EAとMSRは一致する。
2.IEADIRのヒットとウェイセレクトは使用されていれば正しかった。
3.セクター有効値は有効である。
4.余計な力のミスはない。
5.現在のIDIRエントリのコンテキストタグは、スレッド固有のコンテキストタグまたは特殊な(例えば0xF)コンテキストタグである。
6.フェッチのコンテキストタグは、スレッド固有のコンテキストタグである。
7.IDIRからのスレッド有効値には、現在のスレッドは含まれない。トラッキングテーブルに保存されるスレッド有効値は、IDIRエントリのコンテキストタグがすでに特別な(例えば0xF)コンテキストタグであったか、スレッド固有のコンテキストタグであったかに依存する。
a.現在のIDIRエントリのコンテキストタグが特別な(例えば0xF)コンテキストタグである場合、保存されるスレッド有効値は、現在のIDIRスレッド有効値と「OR」されたスレッド有効値である。
b.コンテキストタグがスレッド固有のコンテキストタグ(例えば、8、9、A、B)である場合、スレッド有効値は、コンテキストタグビット(2:3)と現在のスレッドとのデコードの「OR」である。条件が一致する場合、コンテキストタグを除くすべてが一致したことを意味するはずであり、「ほとんどヒット」と見なされる。一実施形態では、「ほとんどヒット」には、EAビットのサブセット、例えばEA(39:56)の比較と、他のフィールドの比較ミスが含まれる。比較は、スレッド共有につながる可能性のある条件の近似またはスーパーセットを表す。コンテキストタグがスレッド固有である場合、トラッキングテーブルエントリは、ほとんどヒットしたときに作成することができる。
【0023】
新しいトラッキングテーブルエントリのインストールには、既存のエントリの上書きを含むことができる。トラッキングテーブルは、IDIRとEADIRから保存された上記の情報と、説明したIDIRスレッド有効値とともにインストールされる。
【0024】
トラッキングテーブルのルックアップに基づき、IDIRおよびリロードマシンは、スレッド固有のコンテキストタグから共有スレッドコンテキストタグに変更される。命令キャッシュ(例えば、L2)のL2xy、EA、およびMSRがトラッキングテーブルと一致すると、リロードマシンの様々なフィールドが修正される。例えば、コンテキストタグは、共有を示すために、例えば0xFに修正されることができる。IDIRからのスレッド有効値は、マッチングを含むように修正することができる。下位レベル(例えば、L1)命令キャッシュの命令リロードユニット(Iru)は、オリジナルのミスをトラッキングテーブルに反映するように修正することができる。この修正は、新しいラインが命令キャッシュ内で追加のスペースを取らないようにするのに有用である。
【0025】
例えば0xFの共有スレッドコンテキストタグがEAとmsrに一致し、ディレクトリ共有スレッドビットがアクティブであれば、命令キャッシュヒットとみなされる。
【0026】
キャッシュからデータが返されたときにトラッキングテーブルを比較するタイミングを設定することで、リロードマシンを更新し、アイキャッシュディレクトリエントリを個別ではなく共有で書き込むことができる。同様のタイミングチェーンは、無効化ウィンドウのチェックとともに、キャッシュの無効化にも使用できる。キャッシュはキャッシュデータが戻る1サイクル前にL2xyを返し、キャッシュは同じインターフェース上で一貫した方法で無効化に対してもL2xyを返す。トラッキングテーブルは、L2xyがトラッキングテーブルルックアップのために利用可能となる周期で実装することができる。
【0027】
トラッキングテーブルは、キャッシュデータリターンやキャッシュキルのためにラインが変更されたときに自動的に無効にすることができる。キャッシュキルの流れは、アーキテクチャコンプライアンスのために設計されたIDIRの読み出し修正書き込みルックアップを実装することができる。トラッキングテーブルはまた、ラインを再定義しているキャッシュの外側から返されたキャッシュミスがあった場合に、新しいラインのトラッキングテーブルの一意のL2xyと、インフライトのキャッシュキルを比較しなければならない。
【0028】
ある態様では、IDIRはEADIRヒットがあった特定のウェイに対してアクセスされ、EADIRミスがあったときにはIDIRはアクセスされない。キャッシュデマンドリクエストは、EADIRミスがあったときにのみ送信される。これは電力を節約するが、デマンドリクエストに対して非同期のトラッキングテーブルエントリ生成を利用する。
【0029】
EADIRのスレッド共有マスクは貪欲な共有を実装できるため、複数のミスが同じEA値を持たない限り、EADIRのスレッド共有マスクは通常すべてのビットがアクティブとなる。2つの異なるスレッドが異なるアイキャッシュラインに同じEA値を使用している場合、2つのコピーは、自分のスレッドのアイキャッシュデータをEADIRでヒットできるように、他方のスレッドのスレッド有効値を非アクティブにしている可能性が高い。
【0030】
EADIRスレッド有効値は、EAにieadirがヒットし、スレッドビットが現在オンになっているが、MSRやコンテキストタグなど、通常はスレッド固有である他方のフィールドのいずれかが原因で、完全なアイキャッシュディレクトリがキャッシュミスを引き起こした場合に無効にすることができる。コンテキストタグが、実装がプロセス間で共有したいものである場合、このEADIR無効化は、現在のアイキャッシュディレクトリを保存するトラッキングテーブルエントリも作成する。
【0031】
トラッキングテーブルは、リロードマシンやL2デマンドリクエストとは非同期である。そのため、実装は、キャッシュからデータが戻ってきたときに、現在のスレッドのトラッキングテーブルエントリのEAとMSRを比較して、現在の戻りが一致するかどうかを確認することができる。トラッキングテーブルエントリのEAとMSRを比較することで、トラッキングテーブルが作成された後、キャッシュデマンドリクエストを任意に長い時間遅延させる可能性のあるフラッシュや他のブランチリダイレクトを透過的に処理することが容易となる。このことは、トラッキングテーブルエントリを作成した後、リクエストが送信される前にリダイレクトすることを容易にし、パフォーマンスを向上させる。トラッキングテーブルアイキャッシュラインが将来のある時点でデマンドまたはプリフェッチリクエストとなり、そのデマンドまたはプリフェッチがキャッシュから返されたとき、トラッキングテーブルエントリに一致したと判定されるかもしれない。
【0032】
他のアプローチでは、コンテキストタグ、または修正されたコンテキストタグのスレッド共有マスクが原因で発生するキャッシュデマンドリクエストキャッシュミスがあるかもしれないが、他のディレクトリフィールドは一致する。キャッシュデマンドリクエストが送信されると、そのキャッシュデマンドリクエストリロードマシンをトラッキングするために、トラッキングテーブルエントリが作成される。このアプローチは、IDIRのすべての方法が、デマンドリクエストを伴うアクセスを含むすべてのアクセスに対して読み出し可能であるという事実を利用する。
【0033】
従って、本開示は、複数のスレッド間でキャッシュラインを共有可能であるタイミングを判定する方法を提供する。本教示がなければ、スレッドあたりの有効なキャッシュサイズは全キャッシュの1/Nであり、ここでNはスレッド数である。一態様では、複数のスレッド(例えば、4つのスレッド)が命令キャッシュのフットプリント全体を共有することができ、対称型マルチプロセシングの性能が大幅に向上する。
【0034】
本開示の特徴をよりよく理解するために、例示的なアーキテクチャについて説明することが有用である場合がある。そのために、図1Aおよび図1Bは、複数のスレッド間で命令キャッシュのフットプリントを共有することを容易にする例示的なコンピュータアーキテクチャ100および150を示す。
【0035】
<実施例>
ここで、図1Aを参照すると、例示的な実施形態に沿った複数のスレッド間で命令キャッシュのフットプリントを共有することを容易にする例示的なコンピュータアーキテクチャ100である。アーキテクチャ100は、マルチスレッドプロセッサ101、キャッシュマネージャ102、システムメモリ104、命令キャッシュ108、およびエイリアステーブル117を含む。さらに描かれているように、マルチスレッドプロセッサ101は、スレッド101A、101B、...、101Nを含む。一実施形態では、プロセッサ101は4つのスレッドを含む。
【0036】
キャッシュマネージャ102は、メモリ管理ユニット(例えば、実アドレスとEAとの間で変換するように構成される)、1つ以上のリロードマシン、キャッシュ制御およびデータフローコンポーネント、キャッシュプレデコードコンポーネント、命令キャッシュ書き込みデータフローコンポーネント、命令デコードコンポーネント、バッファ、発行コンポーネント、実行コンポーネント、ロード/ストアコンポーネント、命令フェッチアドレスレジスタ、命令フェッチコンポーネント、分岐予測コンポーネント、命令シーケンスコンポーネントなどを含むが、これらに限定されず、メモリ管理システムの様々な他のコンポーネントを実装し、含み、もしくは相互運用またはその組み合わせとすることができる。
【0037】
命令キャッシュ108は、Mセットを含むN-ウェイ連想キャッシュとすることができ、Nは2(2)から12(12)の間の数であり、Mは4から128の間の数である。一態様では、命令キャッシュ108は64セットの6ウェイを含む。
【0038】
より特定の一実施形態では、命令キャッシュ108は、命令をフェッチするときにアクセスされるメモリ階層の第1レベル(例えば、L1)である。命令キャッシュ108は、命令のPPCビットだけでなく、それぞれに関連するプリデコード/ブランチリコードビットを格納することができる。命令キャッシュ108は、第2レベル(例えば、L2)インターフェースからリロードデータを受け取ることができる。第2レベルキャッシュへの出力は、メモリ管理ユニット(実アドレス(RA)をEAに変換できる)を介して送られる。また、第2レベルキャッシュへの出力は、デコードへの命令、ブランチスキャンロジックへのプリデコード/ブランチリコードビット、デコードおよびフュージョンロジックへのプリデコードビットも供給する。
【0039】
命令キャッシュ108は、以下の属性を含むことができる。
48kB、8マクロとして実装されている。
EAインデックスおよびタグ付けされたEA。
64セット(インデックスはEA[51:56])。
タグはEA[0:50]である。
eadirEAインデックス配列を使用した6ウェイ連想配列によるウェイセレクトの予測。
128バイトのキャッシュライン。
キャッシュラインあたり4つの32バイトセクター。
1つの読み出しポートと1つの書き込みポート。
一度に最大8つの指示を読み出す。
一度にセクターを書き込む。
12マクロ、横4×縦3の配列。
8R/Wバンク。
MRUツリーを使用して実装された擬似LRU消去ポリシー。
6T-SRAMセルを搭載し、デュアルエンドの読み書きが可能。
【0040】
コンピュータアーキテクチャ100において、共有検出器123は、一般に、キャッシュラインが複数のスレッドの間で共有可能であるときを、101A、101B、...、101Nの中から検出するように構成される。例えば、共有検出器123は、キャッシュデータが返されるときに、命令キャッシュディレクトリ(または「IDIR」)、例えばIDir106の読み出し修正を実行して、潜在的に共有可能な個々の命令キャッシュラインを探すことができる。共有検出器123が、101A、101B、...、101Nの中から、キャッシュラインが複数のスレッド間で共有可能であると判定すると、キャッシュマネージャ102は、キャッシュラインに関連付けられたメモリページを特定することができる。キャッシュマネージャ102は、エイリアスエントリをエイリアステーブル117に書き込むことができる。エイリアスエントリは、メモリページに関連付けられた1つ以上の追加の(場合によってはすべての)キャッシュラインが、101A、101B、...、101Nの中から、複数のスレッドの間で共有され得ることを示すことができる。
【0041】
表1にエイリアステーブルエントリの属性例を示す。
【表1】
【0042】
エイリアステーブル117は、2つ以上のスレッド間の共有が識別された(例えば4kの)領域を表すEAを含む構造とすることができる。エイリアステーブル117はまた、アクセスするスレッドの変換が割り当てられたときから一致することを検証するための任意の情報を含むことができる(例えば、MSRビットによって容易になる)。
【0043】
すべてのスレッドに対するそのEAの変換が同じRAにつながる場合、2つのスレッドがエイリアステーブル117内の所定のエントリに対して有効であるとマークされる可能性がある。EAの変換が、そのエントリに対して有効であるとマークされた他方のスレッドと一致しない場合、エイリアステーブル117内のヒットを防ぐことができる。変換が変更されると、MMUはインターフェース上で無効化をドライブすることができる。変換の無効化は、学習された共有も無効にすることができる。そのため、エイリアステーブル117を更新して、アーキテクチャ的に正しい状態を維持することができる。
【0044】
エイリアステーブル117のエントリ数はさまざまである。一態様では、エイリアステーブル117は8または16のエントリを含む。
【0045】
ここで、図1Bを参照すると、例示的な実施形態に沿った複数のスレッド間で命令キャッシュのフットプリントを共有することを容易にする例示的なコンピュータアーキテクチャ150である。アーキテクチャ150は、マルチスレッドプロセッサ101、キャッシュマネージャ102、システムメモリ104、IDir106、トラッキングテーブル107、命令キャッシュ108、エイリアステーブル117、およびEAdir131を含む。
【0046】
キャッシュマネージャ102は、EADir131を使用して、命令キャッシュ108がどの方法でアクセスされるかを選択し、命令キャッシュのミス/ヒットの早い兆候を提供することができる。例えば、EADir131は、EAコンペアおよびスレッド有効ビットに基づくワンホットの6ビットの方法選択を提供することができる。スレッドマスクスレッド有効ビットは、一度に複数のスレッドに対して有効なエントリをサポートすることにより、スレッド間の共有を可能にする。
【0047】
EADir131は、以下の属性を含むことができる。
6ウェイの64セット。
EA(51:56)でインデックスされたセット。
物理的な1ディレクトリ。
1つの読み出しポートと1つの書き込みポート。
同じセルの読み書きは許可されておらず、この衝突はアイキャッシュの外部で検出される。
最初のアイキャッシュ書き込み上にのみ書き込み。
各ウェイをEA(39:50)とスレッド有効ビットと比較し、ウェイセレクトを生成する。
合計:64セット×16ビット/ウェイ×6ウェイ。
バイパスは命令キャッシュ108の外部から来る。
10T-SRAMセル(スピードに最適化された)。
【0048】
表2にEADirビットの定義例を示す。
【表2】
【0049】
IDir106は、命令キャッシュ108のタグストアになり得る。IDir106は、タグ比較を行うことにより、真の命令キャッシュヒット検出を行うために使用することができる。ある態様では、IDir106はまた、有効ビット、パリティビットMSRビット、ページサイズビット、およびSLB/TLB無効を処理するためのビットを格納する。
【0050】
IDir106は以下の属性を含むことができる。
6ウェイの64セット。
アイキャッシュ/EADirをミラーする。
EA(51:56)インデックス。
6つの成長可能なレジファイル。
各ウェイに1つのレジファイル、つまり各レジファイルは64セット×84ビット。
セクターバリューが更新されると、IDir106はキャッシュラインごとに4回(アイキャッシュのセクター書き込みごとに)書き込めるが、EADirは1回しか書き込めない。
【0051】
表3にIDirビットの定義例を示す。
【表3】
【0052】
説明したように、コンテキストタグ(例えば、CTAG)をスレッドごとに使用することができる。一態様では、(例えば、4つのスレッドがある場合)コンテキストタグは、値1000,1001,1010,1011,1111を含む4(4)ビット値とすることができる。
・Ctxt tag=1000 tid0のプロセスのためのtid0のプライベートコンテキストタグ
・Ctxt tag=1001 tid1のプロセスのためのtid1のプライベートコンテキストタグ
・Ctxt tag=1010 tid2のプロセスのためのtid2のプライベートコンテキストタグ
・Ctxt tag=1011 tid3のプロセスのためのtid3のプライベートコンテキストタグ
・Ctxt tag=1111、変更されたコンテキストタグmmuコンテキストタグは、アイキャッシュディレクトリのスレッドビットで示されるスレッドで共有される
・スレッド固有のコンテキストタグは、トラッキングテーブルエントリを作成する際に、どのスレッドが最初にアイキャッシュラインをロードしたかを示すために使用できる
【0053】
スレッド値は、メモリ管理ユニット(MMU)から受け取るか、コンテキストタグに含めることができる。Ctxt tag=1111の場合、スレッドは、キャッシュラインが書き込まれたときに、どのスレッドがそのページを共有するとアーキテクチャ的に判定されているかを示す。
【0054】
コンテキストテーブルはLPID&PIDレジスタへのポインタを含むことができる。コンテキストテーブルが検索されると、指定されたEA(0:1)、LPCR(Radix)、LPCR(UPRT)、MSR(HV)、およびMSR(DR)ビットに対してマルチヒットを持つことはできない。2ビットポインタはLPIDR/PIDRレジスタのいずれか、または場合によっては両方を参照する。スレッドが一致する場合、それらのポインタは同じレジスタのセットを指すため、コンテキストテーブルが検索されるとき、2つのタグがLPIDとPIDの同じ組み合わせを指すことはありえない。
【0055】
命令キャッシュ108は、バイナリツリー擬似LRU(Least Recently Used)置換ポリシーを利用することができる。一態様において、2つのサブツリーは、3(3)ウェイの関連する真のLRUである。
【0056】
EADir131は、L個のスレッド共有ビットを格納することができ、Lはスレッド数(例えば、4)である。EADir131は、エントリに関連付けられたスレッドのための共有メイキングを含むことができる。IDir106もまた、アイキャッシュ/IDir書き込み時にMMUから送られる共有マスクを利用することができる。無効化時に、共有マスクは、あるスレッドが共有キャッシュライン(例えば、命令キャッシュ108内)を無効化した場合に、他のどのスレッドが無効化されるかを示すことができる。
【0057】
共有キャッシュラインの無効化には、さまざまな違いがある。無効化される状況には以下を含む。
(1)EADirヒット、IDirミス:EADirが初期ヒットを誤検知している。IDirミスは後で受信されるため、無効化の方法を判定できる。この無効化シナリオは、アクセスのトラッキングテーブルエントリを作成するためにも使用される。
(2)EADirマルチヒット:プリフェッチによって生成される(EADirはプリフェッチでは検索されないかもしれないが、IDIRは検索される)。プリフェッチは、(rldmから取得した)親デマンドリクエストのマスクをEADirに書き込むことができる。
(3)ライン書き込み中の衝突:L2データのリターン中にL2無効化があると、衝突時に無効化が優先されるため、書き込み中のセクターがドロップされ、部分的なスレッド有効値が得られる。
(4)RLDMは、最初のリクエストのデータがアイキャッシュに書き込まれている間に、後続のミスに対して再割り当てされる。
【0058】
EADirの無効化は、特定の命令フェッチ(IF)段階で発生する読み出し変更書き込み動作であり得る。より早いIF段階で、キャッシュマネージャ102はEADir131を読み出すことができる。この初期のIF段階では、EA(例えば、EA[49:56])とスレッドマスクが既知である。EAおよびスレッドマスクは、無効化ラッチが利用可能な場合に、後のIFステージに運ばれる。キャッシュマネージャ102は、この後のIF段階で、無効化されるスレッドのビットがゼロにされたスレッドマスクでEADir131に書き込むことができる。
【0059】
中間のIFステージ(例えば、前のIFステージと後のIFステージの間)にEADir書き込みがある場合、または後のIFステージにアイキャッシュ書き込みの競合がある場合、無効化を遅らせ、操作が後のIFステージに達した時点でIFARを起動させることができる。このような無効化動作は慎重を期すべきである。次にEADir131/アイキャッシュ108がアクセスされたときに、無効化の状況を再検出して、再度無効化を試みることができる。
【0060】
EADir131は「ほとんどヒット」する可能性がある。EADir131の命令EAが一致した場合、そのEADirエントリはアクセスしているスレッドでは無効だが、他のスレッドでは有効である。一致はEADirアクセス後にラッチアップされ、スレッドマスクはその後のアイキャッシュミスのためにリロードマシンに保存される。EADirのうち、thread_valids(0:3)とalmost_way(0:3)は、6通りのそれぞれについて判定することができる。
【0061】
トラッキングテーブル107は、最近の「ほとんどミス」に関連するIDIR情報を格納することができる。説明したように、「ほとんどミス」は、IDIRミスが発生したが、コンテキストタグ以外のすべてが一致した場合に発生する可能性がある。トラッキングテーブル107は、IDir106のエントリを、IDIRエントリ全体でスレッドを共有する可能性のあるリロードと関連付けることができる。トラッキングテーブル107の割り当てと使用は、スレッド固有のコンテキストタグを持つスレッドに使用できる。現在のスレッドとフェッチスレッドは、両方ともスレッド固有タグに対応することができる。
【0062】
表4にテーブルエントリの属性をトラッキングする例を示す。
【表4】
【0063】
トラッキングテーブル107は、スレッドごとに分割され、スレッドごとに1つのエントリを含むことができる。トラッキングテーブル107は、キャッシュライン粒状共有メカニズムとして独立して使用することができる。
【0064】
トラッキングテーブル107の後続のヒットは、命令キャッシュラインが、101A、101B、...、101Nの中から複数のスレッド間で共有可能であることを示している。したがって、トラッキングテーブル107のヒットが発生すると、キャッシュマネージャ102は、対応する命令キャッシュラインに関連付けられたメモリページを識別することができる。キャッシュマネージャ102は、エイリアスエントリをエイリアステーブル117に書き込むことができる。エイリアスエントリは、メモリページに関連付けられた1つまたは複数の追加の(場合によってはすべての)キャッシュラインが、101A、101B、...、101Nの中から、複数のスレッドの間で共有され得ることを示すことができる。
【0065】
図2は、例示的な実施形態に沿った複数のスレッド間で命令キャッシュラインを共有するための例示的な方法200のフローチャートを示す。方法200は、コンピュータアーキテクチャ100および150の構成要素に関して説明される。
【0066】
スレッド101Aは、命令112の命令フェッチ111Aをキャッシュマネージャ102に送ることができる。キャッシュマネージャ102は、命令112がキャッシュされていないと判定することができる。これに応答して、キャッシュマネージャ102は、システムメモリ104の(メモリ)ページ141から命令112をフェッチすることができる。キャッシュマネージャ102は、ページ141のアドレスからキャッシュライン108AへのL2xy113Aを導出することができる。キャッシュマネージャは、命令112をキャッシュライン108Aにキャッシュすることができる。
【0067】
方法200は、第1のスレッドから命令フェッチを受信することを含み、命令フェッチは、メモリページに関連付けられたシステムメモリのアドレスからの命令を要求する(202)。例えば、キャッシュマネージャ102は、スレッド101Bから命令フェッチ111Aを受信することができる。命令フェッチ111Aは、システムメモリ104のページ141から命令112を要求することができる。方法200は、メモリアドレスのアドレスから命令キャッシュラインへのセット/ウェイポインタを導出する(204)ことを含む。例えば、キャッシュマネージャ102は、ページ141のメモリアドレスからL2xy113Aを導出することができる。キャッシュマネージャ102は、L2xy113Aがキャッシュライン108Aに対応すると判定することができ、命令112をキャッシュライン108Aにキャッシュすることができる。
【0068】
方法200は、第2のスレッドから他の命令フェッチを受信することを含み、他方の命令フェッチは、メモリページに関連付けられたシステムメモリの他のアドレスからの命令を要求する(206)。例えば、キャッシュマネージャ102は、スレッド101Bから命令フェッチ111Bを受信することができる。命令フェッチ111Bは、システムメモリ104のページ141から命令112を要求することができる。方法200は、システムメモリの他方のアドレスから他の命令キャッシュラインへの他のセット/ウェイポインタを導出することを含む(208)。例えば、キャッシュマネージャ102は、ページ141の他方のメモリアドレスからL2xy113Bを導出することができる。
【0069】
セット/ウェイポインタと他方のセット/ウェイポインタとがともに命令キャッシュラインを指すことが検出されると、命令キャッシュラインが第1のスレッドと第2のスレッドとの間で共有可能であると判定する(210)。例えば、図1Aにおいて、共有検出器123は、キャッシュライン108Aがスレッド101Aと101Bとの間で共有可能であるかどうかを判定するために、キャッシュデータがキャッシュライン108Aから返されているときに、IDir106の読み出し修正書き込みを実行することができる。共有検出器は、L2xy113AとL2xy113Bを比較することができる。一態様では、L2xy113AとL2xy113Bとがともにキャッシュライン108Aを指すとき、共有検出器123は、キャッシュライン108Aが(少なくとも)スレッド101Aと101Bとの間で共有可能であると判定する。
【0070】
図1Bに戻って、他の態様では、キャッシュマネージャ102は、命令キャッシュライン108Aのキャッシング命令112と組み合わせて、IDir106にL2xy113Aを格納することができる。その後、命令フェッチ111Bが受信されると、キャッシュマネージャ102は、命令フェッチ111Bに関連するメモリアドレスが共有の候補であると判定することができる。
【0071】
キャッシュマネージャ102は、IDir106からトラッキングテーブル107にL2xy113Aを保存することができる。キャッシュマネージャ102は、命令フェッチ111Bに関連するメモリアドレスからL2xy113Bを導出することができる。キャッシュマネージャ102は、トラッキングテーブル107からL2xy113Aにアクセスすることができる。ポインタ比較器103は、L2xy113AとL2xy113Bを比較することができる。比較に基づいて、ポインタ比較器103は、L2xy113AおよびL2xy113Bがともに命令キャッシュライン108Aを指し、したがって、キャッシュライン108Aが(少なくとも)スレッド101Aと101Bとの間で共有可能であると判定することができる。検出された共有に応答して、キャッシュマネージャ102は、IDir106を更新114して、命令キャッシュライン108Aがスレッド101Aと101Bとの間で共有されていることを示すことができる。命令キャッシュライン108Aの共有を示すことは、IDir106のコンテキストタグを変更することを含むことができる。
【0072】
命令キャッシュライン108Aは、スレッド101Aまたはスレッド101Bからの命令112の後続の要求に応答して、スレッド101Aまたはスレッド101Bのいずれかに戻すこともできる。
【0073】
同様の動作を実施して、キャッシュライン108Aがプロセッサ100の1つ以上の追加スレッドと共有可能であることを判定することができる。その後、命令キャッシュライン108Aは、1つ以上の追加のスレッドのいずれかからの命令112の後続の要求に応答して、1つ以上の追加のスレッドのいずれかに戻され得る。
【0074】
ある態様では、キャッシュマネージャ102はトラッキングテーブルエントリをトラッキングテーブル107にインストールする。キャッシュマネージャ102は、EADirミス/IDIRミスがあり、他の条件が満たされたときに、トラッキングテーブルエントリをインストールすることができる。条件には以下が含まれ得る。
1.EAとMSRは一致する。
2.EADIRのヒットとウェイセレクトは使用されていれば正しかった。
3.セクター有効値は有効である。
4.余計な力のミスはない。
5.現在のIDIRエントリのコンテキストタグは、スレッド固有のコンテキストタグまたは0xFコンテキストタグである。
6.フェッチのコンテキストタグは、スレッド固有のコンテキストタグである。
7.IDIRからのスレッド有効値には、現在のスレッドは含まれない。トラッキングテーブルに保存されるスレッド有効値は、IDIRエントリのコンテキストタグがすでに0xFであったか、スレッド固有のコンテキストタグであったかに依存する。
a.現在のIDIRエントリのコンテキストタグが0xFである場合、保存されるスレッド有効値は、現在のIDIRスレッド有効値と「or」された現在のスレッド有効値である。
b.コンテキストタグが8、9、A、Bのスレッド固有のコンテキストタグである場合、スレッド有効値は、コンテキストタグビット(2:3)を現在のスレッドでデコードしたものとなる。
(これは、LSUがIAMRなどのためにスレッド間で回線を共有できないと言っている場合にも対応できる)。
これらの条件が一致すれば、コンテキストタグ以外はすべて一致したと推測でき、「ほとんどヒット」とみなされる。
【0075】
トラッキングテーブル107は、スレッドごとに1つのエントリを含むことができる。トラッキングテーブル107に新しいトラッキングテーブルエントリをインストールすることは、既存のエントリを上書きすることを含むことができる。トラッキングテーブル107は、IDir106およびEADir131から保存された、例えば条件7aおよび7bで説明したIDIRスレッド有効値とともに、説明した情報を用いてインストールすることができる。一実施形態では、トラッキングテーブル107は、リロード時に使用することができる。
【0076】
トラッキングテーブル107のエントリは、IDir106のエントリへのポインタとみなすことができる。従って、一般的に、IDir106に対する無効化規則は、トラッキングテーブル107のエントリにも適用することができる。
【0077】
方法200は、命令キャッシュラインが第1のスレッドと第2のスレッドとの間で共有可能であると判定すると、メモリページに関連する他の命令キャッシュラインも第1のスレッドと第2のスレッドとの間で共有可能であることを示すエイリアステーブルエントリをエイリアステーブルに作成することを含む(212)。例えば、キャッシュマネージャ102は、エイリアステーブル117にエントリ118を作成することができる。エントリ118は、ページ141に関連する命令キャッシュ108内の他の命令キャッシュラインも(少なくとも)スレッド101Aと101Bとの間で共有可能であることを示すことができる。
【0078】
その後、スレッド101Aはページ141から追加の命令を要求することができる。キャッシュマネージャ102は、ページ141のさらなるメモリアドレスから追加の命令をフェッチし、追加命令をキャッシュライン108Bにキャッシュすることができる。
【0079】
方法200は、エイリアステーブルエントリを作成することに続いて、第2のスレッドからさらなる命令フェッチを受信することを含み、さらなる命令フェッチは、メモリページに関連付けられたさらなるシステムメモリアドレスからの命令を要求する(214)。例えば、キャッシュマネージャ102は、ページ141内の(命令112のメモリアドレスとは異なる)さらなるメモリアドレスからの命令を要求するスレッド101Bからのさらなる命令フェッチを受信することができる。
【0080】
方法200は、さらなるシステムメモリアドレスからさらなる命令キャッシュラインへのさらなるセット/ウェイポインタを導出することを含み、さらなる命令キャッシュラインは、第1のスレッドによってさらなるシステムメモリアドレスからフェッチされた命令をキャッシュする(216)。例えば、キャッシュマネージャ102は、さらなるシステムメモリアドレスから命令キャッシュライン108Bへのセット/ウェイポインタを導出することができる。説明したように、キャッシュライン108Bは、スレッド101Aによってページ141内のさらなるメモリアドレスから以前にフェッチされた追加命令をキャッシュすることができる。
【0081】
方法200は、エイリアステーブルエントリに基づいて、さらなる命令キャッシュラインが第2のスレッドと共有可能であると判定する(218)ことを含む。例えば、キャッシュマネージャ102は、エイリアステーブル117のエントリ118を参照することができる。エントリ118に基づいて、キャッシュマネージャ102は、命令キャッシュライン108Bが(少なくとも)スレッド101Aと101Bとの間で共有可能であると判定することができる。そして、命令キャッシュライン108Bをスレッド101Bに戻すことができる。
【0082】
命令キャッシュラインにキャッシュされた命令がページ141のメモリアドレスに関連付けられていることに基づいて、他のキャッシュライン、例えば命令キャッシュライン108Cが(少なくとも)スレッド101Aおよび101Bと共有可能であることを判定するために、同様の動作を実施することができる。命令キャッシュ108の命令キャッシュラインにキャッシュされた命令は、命令フェッチにおいて応答してプロセッサ100のスレッドに戻すことができる。命令キャッシュラインが共有される場合、あるスレッドは、異なるスレッド用に元々キャッシュされたキャッシュ命令にアクセスすることができる。
【0083】
一態様では、スレッド101Aおよび101Bの中からのスレッドが、命令キャッシュ108によりさらなる命令キャッシュラインをフェッチする。例えば、第3のスレッド(例えば、101N)からのよりさらなる命令に対するよりさらなる命令フェッチが受信される。よりさらなる命令フェッチに関連するよりさらなるセット/ウェイポインタが導出される。さらなるセット/ウェイポインタが保存される。よりさらなる命令ラインの第3のスレッドについてキャッシュミスが検出される。上位の(例えば、L2)キャッシュによりさらなる命令に対する要求が送られる。
命令キャッシュラインが上位のキャッシュから受信される。よりさらなるセット/ウェイポインタはトラッキングテーブル107にマッチングされる。キャッシュマネージャ102は、トラッキングテーブルとエイリアステーブルとの間のスレッド共有マスクが重複するかどうかを判定する。キャッシュマネージャ102は、エイリアステーブル117を更新し、ページ141に関連する命令キャッシュラインがスレッド101A、101B、101N間で共有可能であることを示す。
【0084】
図3は、例示的な実施形態に沿った特に構成されたコンピュータハードウェアプラットフォーム300を示す。コンピュータハードウェアプラットフォーム300は、コンピュータアーキテクチャ100の構成要素を含むコンピュータシステムを実装するために使用することができる。
【0085】
コンピュータプラットフォーム300は、システムバス302に接続された、中央処理装置(CPU)304、ハードディスクドライブ(HDD)306、ランダムアクセスメモリ(RAM)もしくはリードオンリーメモリ(ROM)308またはその両方、キーボード310、マウス312、ディスプレイ314、および通信インターフェース316を含むことができる。
【0086】
HDD306は、実行されるプログラムを記憶する機能を含むことができる。
【0087】
CPU304は、内部にデータを格納し、プログラムを実行する機能を含むことができる。CPU304は、プロセッサ101(および対応するスレッド)、キャッシュマネージャ102、IDir106、トラッキングテーブル107、エイリアステーブル117、命令キャッシュ108、EADir131、および複数のレジスタを含むことができる。本開示の態様は、CPU304内部に実装され得る。
【0088】
RAM/ROM308はシステムメモリ104を含むことができる。
【0089】
CPU304内部で実行されるプログラムは、システムバス302を介してシステムメモリ104のページからデータと命令にアクセスできる。適宜、アクセスされたデータおよび命令は、CPU304内部にキャッシュすることができる。例えば、アクセスされた命令は命令キャッシュ108にキャッシュされることができる。
【0090】
図4は、例示的なメモリアーキテクチャ400を示す。本開示の態様は、メモリアーキテクチャ400または他の類似のメモリアーキテクチャにおいて実装され得る。示されているように、メモリアーキテクチャは、プロセッサスレッド401およびメモリ階層407を含む。プロセッサスレッド401は、スレッド401A、401B、...、401Nを含む。メモリ階層407は、キャッシュ層402(例えば、L1)、キャッシュ層403(例えば、L2)、キャッシュ層404(例えば、L3)およびシステムメモリ406を含む。
【0091】
メモリ階層407内では、プロセッサスレッド401に近いキャッシュ層を形成するために使用されるメモリ素子は、プロセッサスレッド401から遠い層を形成するために使用されるメモリ素子よりも高速になり得る。コストのバランスをとるために、プロセッサスレッド401に近いキャッシュ層は、プロセッサスレッド401から遠いキャッシュ層よりも容量が少ないこともある。例えば、キャッシュ層402は、キャッシュ層403よりも高速であるが、キャッシュ層403よりも容量が少ないことがある。システムメモリ406は、キャッシュ層402、403、404よりも低速であるが、キャッシュ層402、403、404よりもかなり大きな容量を持つことができる。
【0092】
プロセッサスレッド401のうちのスレッドは、命令を要求するメモリ階層に命令フェッチ要求を提出することができる。例えば、スレッド401Bは、命令412を要求する命令フェッチ411をメモリ階層407に提出することができる。キャッシュ層402は、命令412をチェックすることができる。命令412がキャッシュ層402にキャッシュされている場合、命令412をキャッシュ層402からスレッド401Bに戻すことができる。
【0093】
命令412がキャッシュ層402にキャッシュされていない場合、キャッシュ層403は命令412をチェックすることができる。命令412がキャッシュ層403に格納されている場合、命令412をキャッシュ層402にキャッシュし、スレッド401Bに戻すことができる。
【0094】
命令412がキャッシュ層403にキャッシュされていない場合、キャッシュ層404は命令412をチェックすることができる。命令412がキャッシュ層404にキャッシュされている場合、命令412をキャッシュ層403と402にキャッシュし、スレッド401Bに戻すことができる。
【0095】
命令412がキャッシュ層404にキャッシュされていない場合、システムメモリ406は命令412をチェックすることができる。命令412がシステムメモリ406に格納されている場合、命令412をキャッシュ層404、403、402にキャッシュし、スレッド401Bに戻すことができる。
【0096】
命令キャッシュ108は、キャッシュ層402、403、404のいずれかに実装することができる。ある態様では、命令キャッシュ108は層402(L1)に実装される。
【0097】
<オペレーティング・プラットフォームの例>
実装は、例えば、1つまたは複数のコンピュータもしくはハードウェアプロセッサ(中央処理装置(CPU)、もしくはグラフィック処理装置(GPU)、汎用GPU(GPGPU)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、テンソル処理装置(TPU)またはその組み合わせのいずれかを含む)またはその組み合わせ、および以下でさらに詳細に議論されるシステムメモリなどのコンピュータハードウェアを含む、特殊用途または汎用コンピュータを構成または利用することができる。実装はまた、コンピュータ実行可能命令もしくはデータ構造またはその両方を搬送または記憶するための物理的および他のコンピュータ可読媒体を含む。このようなコンピュータ可読媒体は、汎用または特殊目的のコンピュータシステムによってアクセス可能な任意の利用可能な媒体とすることができる。コンピュータ実行可能命令を格納するコンピュータ可読媒体は、コンピュータ記憶媒体(デバイス)である。コンピュータ実行可能命令を伝送するコンピュータ可読媒体は伝送媒体である。このように、限定ではなく例として、実装は、少なくとも2つの異なる種類のコンピュータ可読媒体、すなわちコンピュータ記憶媒体(デバイス)と伝送媒体から構成され得る。コンピュータの記憶媒体(デバイス)には、SCM(およびその他の中間記憶ソリューション)、RAM、ROM、EEPROM、CD-ROM、ソリッドステートドライブ(「SSD」)(例えば、RAMベースまたはフラッシュベース)、Shingled Magnetic Recording(「SMR」)デバイス、フラッシュメモリ、相変化メモリ(「PCM」)、他のタイプのメモリ、他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶装置、またはコンピュータ実行可能命令またはデータ構造の形態で所望のプログラムコード手段を記憶するために使用することができ、汎用コンピュータまたは特殊用途コンピュータによってアクセスすることができる他の任意の媒体が含まれる。
【0098】
一態様では、1つまたは複数のプロセッサは、説明した複数の動作のいずれかを実行するための命令(例えば、コンピュータ可読命令、コンピュータ実行可能命令など)を実行するように構成される。1つまたは複数のプロセッサは、システムメモリから情報にアクセスし、もしくはシステムメモリに情報を記憶し、またはその両方をすることができる。1つまたは複数のプロセッサは、例えば、ボリュームコマンド、ボリュームメタデータ、クエリ、ボリューム構成、ボリューム再設定、永続性損失通知、永続性損失検出などのいずれかの間のような異なるフォーマット間で、情報を(例えば、自動的に)変換することができる。
【0099】
システムメモリは、1つまたは複数のプロセッサに結合することができ、1つまたは複数のプロセッサによって実行される命令(例えば、コンピュータ可読命令、コンピュータ実行可能命令など)を記憶することができる。システムメモリはまた、例えば、ボリュームコマンド、ボリュームメタデータ、クエリ、ボリューム構成、ボリューム再設定、永続性損失通知、永続性損失検出など、説明したコンポーネントによって生成もしくは変換またはその両方がなされる複数の他のタイプのデータのいずれかを記憶するように構成され得る。
【0100】
「ネットワーク」とは、コンピュータシステムもしくはモジュールもしくは他の電子機器またはその組み合わせの間で電子データの伝送を可能にする1つまたは複数のデータリンクとして定義される。情報がネットワークまたは他の通信接続(ハードワイヤード、ワイヤレス、またはハードワイヤードまたはワイヤレスの組み合わせのいずれか)を介してコンピュータに転送または提供される場合、コンピュータは接続を伝送媒体として適切に見なす。伝送媒体は、コンピュータ実行可能命令またはデータ構造の形態で所望のプログラムコード手段を伝送するために使用することができ、汎用または特殊目的のコンピュータによってアクセスすることができるネットワークもしくはデータリンクまたはその両方を含むことができる。上記の組み合わせも、コンピュータ可読媒体の範囲に含まれるべきである。
【0101】
さらに、様々なコンピュータシステムコンポーネントに到達すると、コンピュータ実行可能命令またはデータ構造の形態のプログラムコード手段を、伝送媒体からコンピュータ記憶媒体(デバイス)へ(またはその逆)自動的に転送することができる。例えば、ネットワークまたはデータリンクを介して受信されたコンピュータ実行可能命令またはデータ構造は、ネットワークインターフェースモジュール(例えば、「NIC」)内のRAMにバッファリングされ、その後、最終的にコンピュータシステムのRAMもしくは揮発性の低いコンピュータ記憶媒体(デバイス)またはその両方に転送されることができる。したがって、コンピュータ記憶媒体(デバイス)は、伝送媒体も利用する(または主に利用する)コンピュータシステムの構成要素に含まれ得ることが理解されるべきである。
コンピュータ実行可能命令は、例えば、プロセッサでの実行に応答して、汎用コンピュータ、特殊用途コンピュータ、または特殊用途処理装置に特定の機能または機能群を実行させる命令およびデータから構成される。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語のような中間フォーマット命令、あるいはソースコードであってもよい。主題は、構造的特徴もしくは方法論的行為またはその両方に特有の言語で説明されてきたが、添付の特許請求の範囲に定義される主題は、必ずしも上述の説明された特徴または行為に限定されないことを理解されたい。むしろ、記載された特徴および行為は、特許請求の範囲を実施する例示的な形態として開示されている。
【0102】
当業者であれば、説明した態様は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルドデバイス、ウェアラブルデバイス、マルチコアプロセッサシステム、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブル家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、タブレット、ルータ、スイッチなどを含む、多くのタイプのコンピュータシステム構成を有するネットワークコンピューティング環境において実施され得ることを理解するであろう。また、説明した態様は、ネットワークを介して(ハードワイヤードデータリンク、ワイヤレスデータリンク、またはハードワイヤードデータリンクとワイヤレスデータリンクの組み合わせのいずれかによって)リンクされたローカルコンピュータシステムとリモートコンピュータシステムが共にタスクを実行する分散システム環境においても実施することができる。分散システム環境では、プログラムモジュールは、ローカルとリモートの両方のメモリ記憶装置に配置することができる。
【0103】
さらに、適切な場合、本明細書に記載される機能は、ハードウェア、ソフトウェア、ファームウェア、デジタルコンポーネント、またはアナログコンポーネントのうちの1つまたは複数で実行され得る。例えば、1つまたは複数のフィールドプログラマブルゲートアレイ(FPGA)もしくは1つまたは複数の特定用途向け集積回路(ASIC)もしくは1つまたは複数のテンソル処理ユニット(TPU)またはこれらの組み合わせは、本明細書に記載されるシステムおよび手順の1つまたは複数を実行するようにプログラムされ得る。ハードウェア、ソフトウェア、ファームウェア、デジタルコンポーネント、またはアナログコンポーネントは、永続性の喪失に応答して、より揮発性のストレージデバイスでボリュームを(再)構成するために特別に調整設計され得る。他の例では、コンピュータコードは、1つ以上のプロセッサで実行されるように構成され、コンピュータコードによって制御されるハードウェア論理/電気回路を含むことができる。これらの例示的なデバイスは、本明細書において説明の目的で提供されるものであり、限定することを意図するものではない。本開示の実施形態は、さらなるタイプのデバイスに実装されてもよい。
【0104】
また、説明した態様は、クラウドコンピューティング環境においても実施することができる。本明細書および以下の特許請求の範囲において、「クラウドコンピューティング」は、構成可能なコンピューティングリソースの共有プールへのオンデマンドネットワークアクセスを可能にするモデルとして定義される。例えば、クラウドコンピューティングは、構成可能なコンピューティングリソース(例えば、計算リソース、ネットワークリソース、およびストレージリソース)の共有プールへのユビキタスで便利なオンデマンドアクセスを提供するために、市場で採用され得る。構成可能なコンピューティングリソースの共有プールは、仮想化によってプロビジョニングされ、少ない労力またはサービスプロバイダの相互作用で解放され、その後、それに応じて拡張される。
【0105】
クラウドコンピューティングモデルは、例えば、オンデマンドセルフサービス、ブロードネットワークアクセス、リソースプーリング、迅速な柔軟性、測定されるサービスなどの様々な特性を含むことができる。クラウドコンピューティングモデルは、例えば、Software as a Service(「SaaS」)、Platform as a Service(「PaaS」)、Infrastructure as a Service(「IaaS」)などの様々なサービスモデルを公開することもできる。また、クラウドコンピューティングモデルは、プライベートクラウド、コミュニティクラウド、パブリッククラウド、ハイブリッドクラウドなどの異なる展開モデルを使用して展開することもできる。本明細書および以下の特許請求の範囲において、「クラウドコンピューティング環境」とは、クラウドコンピューティングが採用される環境のことである。
【0106】
<結論>
本教示の様々な実施形態の説明は、例示の目的で提示されているが、網羅的であることを意図するものではなく、開示される実施形態に限定されることを意図するものでもない。記載された実施形態の範囲から逸脱することなく、多くの修正および変更が可能であることは当業者には明らかであろう。本明細書で使用される用語は、実施形態の原理、市場で見られる技術に対する実際の適用または技術的改善を最もよく説明するため、または当業者が本明細書に記載の実施形態を理解できるようにするために選択された。
【0107】
前述では、最良の状態と考えられるものもしくは他の実施例またはその両方を説明したが、そこに様々な改変を加えてもよく、本明細書に開示した主題を様々な形態および実施例で実施してもよく、本教示を多数の用途に適用してもよく、本明細書に記載したのはその一部だけであることを理解されたい。以下の特許請求の範囲により、本教示の真の範囲に入るあらゆる応用、修正および変形を請求することが意図される。
【0108】
本明細書で論じた構成要素、ステップ、特徴、目的、利益および利点は、単なる例示にすぎない。それらのいずれも、またそれらに関連する議論は、保護の範囲を限定することを意図するものではない。本明細書では様々な利点について論じてきたが、全ての実施形態が必ずしも全ての利点を含むわけではないことが理解されよう。別段の記載がない限り、以下の特許請求の範囲を含め、本明細書に記載されるすべての測定値、値、定格、位置、大きさ、サイズ、およびその他の仕様は、厳密ではなく近似値である。それらは、それらが関連する機能およびそれらが関連する技術分野における慣例と一致する合理的な範囲を有することを意図している。
【0109】
多数の他の実施形態も企図される。これらには、より少ない、追加的な、もしくは異なる、またはその組み合わせの構成要素、ステップ、特徴、目的、利益および利点を有する実施形態が含まれる。これらにはまた、構成要素もしくはステップが異なるように配置もしくは順序付けまたはその両方がなされた実施形態も含まれる。
【0110】
本開示の態様は、本開示の実施形態による方法、装置(システム)、およびコンピュータプログラム製品のコールフロー図もしくはブロック図またはその両方を参照して本明細書で説明される。フローチャート図もしくはブロック図またはその両方の各ステップ、ならびにコールフロー図もしくはブロック図またはその両方におけるブロックの組み合わせは、コンピュータ可読プログラム命令によって実施できることが理解されよう。
【0111】
これらのコンピュータ可読プログラム命令は、コンピュータ、特殊用途コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供され、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行される命令が、コールフロープロセスもしくはブロック図のブロックまたは複数のブロックまたはこれらの組み合わせで指定された機能/行為を実施するための手段を作成するような、機械を生成することができる。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラム可能なデータ処理装置、もしくは他の装置に特定の態様で機能するように指示することができるコンピュータ可読記憶媒体またはその組み合わせに記憶されることができ、その中に記憶された命令を有するコンピュータ可読記憶媒体は、コールフローもしくはブロックダイアグラムのブロックまたは複数のブロックまたはその組み合わせで指定された機能/行為の態様を実施する命令を含む製造品を構成する。
【0112】
また、コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブルなデータ処理装置、または他の装置にロードして、コンピュータ、他のプログラマブルな装置、または他の装置上で実行される命令がコールフロープロセスもしくはブロック図のブロックまたは複数のブロックまたはその組み合わせで指定された機能/行為を実施するような、コンピュータ実装プロセスを生成するための一連の動作ステップをコンピュータ、他のプログラマブルな装置、または他の装置上で実行させることもできる。
【0113】
図中のフローチャートおよびブロック図は、本開示の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実装のアーキテクチャ、機能性、および動作を示す。これに関して、コールフロープロセスまたはブロック図の各ブロックは、指定された論理機能を実装するための1つ以上の実行可能命令を構成する、モジュール、セグメント、または命令の一部を表すことができる。いくつかの代替的な実装では、ブロックに記されている機能は、図に記されている順序から外れて発生する可能性がある。例えば、連続して示されている2つのブロックは、実際には、実質的に同時に実行されるかもしれないし、ブロックは、関係する機能に応じて、時には逆の順序で実行されるかもしれない。また、ブロック図もしくはコールフロー図の各ブロックまたはその組み合わせ、ならびにブロック図もしくはコールフロー図のブロックまたはその組み合わせは、指定された機能または行為を実行する、または特別な目的のハードウェアおよびコンピュータ命令の組み合わせを実行する、特別な目的のハードウェアベースのシステムによって実装できることに留意されたい。
【0114】
前述は例示的な実施形態に関連して説明されてきたが、「例示的」という用語は、最良または最適ではなく、単に例示として意味されることが理解される。すぐ上に記載されている場合を除き、記載または図示されたものは、特許請求の範囲に記載されているか否かにかかわらず、いかなる構成要素、ステップ、特徴、目的、利益、利点、または同等のものを一般に献呈させることを意図したものでも、解釈されるべきものでもない。
【0115】
本明細書で使用される用語や表現は、本明細書で特別な意味が規定されている場合を除き、それぞれの対応する調査、研究分野に関して、そのような用語や表現に与えられる通常の意味を有することが理解されよう。第1および第2などの関係用語は、ある実体または行為を他の実体または行為から区別するためにのみ使用され、そのような実体または行為間の実際の関係または順序を必ずしも要求または暗示するものではない。「備える(comprises/comprising)」又はその他の変形は、要素のリストから構成されるプロセス、方法、成形品、又は装置が、それらの要素のみを含むのではなく、明示的に列挙されていない、又はそのようなプロセス、方法、成形品、又は装置に固有の他の要素を含み得るように、非排他的な包含をカバーすることを意図している。「ある/1つの/一の(a)」、「ある/1つの/一の(an)」によって表される要素は、更なる制約なしに、その要素を構成するプロセス、方法、成形品、又は装置における追加の同一の要素の存在を排除しない。
図1A
図1B
図2A
図2B
図3
図4
【手続補正書】
【提出日】2024-01-23
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピューティングデバイスであって、
少なくとも第1のスレッドと第2のスレッドとを有する複数のプロセシングスレッドを備えるマルチスレッドプロセッサと、
前記マルチスレッドプロセッサとシステムメモリとに結合された命令キャッシュと、
前記命令キャッシュに結合されたキャッシュマネージャと、を含み、前記プロセッサによって前記キャッシュマネージャを実行することにより、前記コンピューティングデバイスに動作を実行させ、前記動作は、
前記命令キャッシュの命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することと、
システムメモリのメモリページに関連付けられた他の命令キャッシュラインも、前記第1のスレッドと前記第2のスレッドとの間で共有可能であることを示すエイリアステーブルエントリを、エイリアステーブルに作成することと、
前記第2のスレッドからのさらなる命令フェッチを受信することであって、前記さらなる命令フェッチは、前記メモリページに関連付けられた前記システムメモリのさらなるアドレスからの命令を要求する、受信することと、
前記システムメモリの前記さらなるアドレスから、さらなる命令キャッシュラインへのさらなるセット/ウェイポインタを導出することであって、前記さらなる命令キャッシュラインは、前記第1のスレッドによって前記システムメモリの前記さらなるアドレスからフェッチされた命令をキャッシュする、導出することと、
前記エイリアステーブルエントリに基づいて、前記さらなる命令キャッシュラインが前記第2のスレッドと共有可能であると判定することと、を含むコンピューティングデバイス。
【請求項2】
前記第1のスレッドから命令フェッチを受信することであって、前記命令フェッチは、前記メモリページに関連付けられた前記システムメモリのアドレスからの命令を要求する、受信することと、
前記システムメモリの前記アドレスからセット/ウェイポインタを導出することと、
前記第2のスレッドから他の命令フェッチを受信することであって、前記他の命令フェッチは、前記メモリページに関連付けられた前記システムメモリの他のアドレスからの命令を要求する、受信することと、
前記システムメモリの前記他のアドレスから他のセット/ウェイポインタを導出することと、をさらに含み、
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、前記セット/ウェイポインタと前記他のセット/ウェイポインタとが共に前記命令キャッシュラインを指すことを検出することを含み、
前記さらなる命令フェッチを受信することは、前記エイリアステーブルエントリを作成した後に、前記さらなる命令フェッチを受信することを含む、請求項1に記載のコンピューティングデバイス。
【請求項3】
前記さらなる命令フェッチに応答して、前記さらなる命令キャッシュラインを前記第2のスレッドに返すことをさらに含む、請求項1に記載のコンピューティングデバイス。
【請求項4】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、キャッシュデータが前記命令キャッシュラインから戻されるときに、命令キャッシュディレクトリの読み出し修正書き込みを実行することを含む、請求項1に記載のコンピューティングデバイス。
【請求項5】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、トラッキングテーブルからセット/ウェイポインタにアクセスすることを含む、請求項1に記載のコンピューティングデバイス。
【請求項6】
キャッシュマネージャを実行することは、さらに、
スレッドが、前記第1のスレッドまたは前記第2のスレッドから前記命令キャッシュに追加の命令キャッシュラインをフェッチすることと、
前記複数のプロセシングスレッドに含まれる第3のスレッドから、追加の命令に対する追加の命令フェッチを受信することと、
前記追加の命令フェッチに関連するよりさらなるセット/ウェイポインタを導出することと、
前記よりさらなるセット/ウェイポインタを保存することと、
前記追加の命令キャッシュラインの前記第3のスレッドのキャッシュミスを検出することと、
前記追加の命令のリクエストをL2キャッシュに送ることと、を含む、請求項1に記載のコンピューティングデバイス。
【請求項7】
前記キャッシュマネージャを実行することは、さらに、
L2キャッシュラインを受信することと、
前記よりさらなるセット/ウェイポインタをトラッキングテーブルにマッチングさせることと、
前記トラッキングテーブルと前記エイリアステーブルとの間のスレッド共有マスクが重複しているか否かを判定することと、を含む、請求項6に記載のコンピューティングデバイス。
【請求項8】
前記キャッシュマネージャを実行することは、さらに、
前記メモリページに関連付けられた命令キャッシュラインが、前記第1のスレッド、前記第2のスレッド、および前記第3のスレッドの間で共有可能であることを示すために、前記エイリアステーブルを更新することと、
前記第3のスレッドのキャッシュミスを、前記第1のスレッド、前記第2のスレッド、および前記第3のスレッドで共有される前記追加の命令キャッシュラインにマーキングして上書きすることと、を含む、請求項7に記載のコンピューティングデバイス。
【請求項9】
前記命令キャッシュがN-ウェイ連想キャッシュであり、
前記マルチスレッドプロセッサは、3つ以上のスレッドを含むマルチスレッドプロセッサを含む、請求項1に記載のコンピューティングデバイス。
【請求項10】
命令キャッシュのフットプリントを共有するコンピュータ実装方法であって、
命令キャッシュラインが第1のスレッドと第2のスレッドとの間で共有可能であると判定することと、
システムメモリのメモリページに関連付けられた他の命令キャッシュラインも、前記第1のスレッドと前記第2のスレッドとの間で共有可能であることを示すエイリアステーブルエントリを、エイリアステーブルに作成することと、
前記第2のスレッドからのさらなる命令フェッチを受信することであって、前記さらなる命令フェッチは、前記メモリページに関連付けられた前記システムメモリのさらなるアドレスからの命令を要求する、受信することと、
前記システムメモリの前記さらなるアドレスから、さらなる命令キャッシュラインへのさらなるセット/ウェイポインタを導出することであって、前記さらなる命令キャッシュラインは、前記第1のスレッドによって前記システムメモリの前記さらなるアドレスからフェッチされた命令をキャッシュする、導出することと、
前記エイリアステーブルエントリに基づいて、前記さらなる命令キャッシュラインが前記第2のスレッドと共有可能であると判定することと、を含む、コンピュータ実装方法。
【請求項11】
前記第1のスレッドから命令フェッチを受信することであって、前記命令フェッチは、前記メモリページに関連付けられた前記システムメモリのアドレスからの命令を要求する、受信することと、
前記システムメモリの前記アドレスからセット/ウェイポインタを導出することと、
前記第2のスレッドから他の命令フェッチを受信することであって、前記他の命令フェッチは、前記メモリページに関連付けられた前記システムメモリの他のアドレスからの命令を要求する、受信することと、
前記システムメモリの前記他のアドレスから他のセット/ウェイポインタを導出することと、をさらに含み、
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、前記セット/ウェイポインタと前記他のセット/ウェイポインタとが共に前記命令キャッシュラインを指すことを検出することを含み、
前記さらなる命令フェッチを受信することは、前記エイリアステーブルエントリを作成した後に、前記さらなる命令フェッチを受信することを含む、請求項10に記載のコンピュータ実装方法。
【請求項12】
前記さらなる命令フェッチに応答して、前記さらなる命令キャッシュラインを前記第2のスレッドに返すことをさらに含む、請求項10に記載のコンピュータ実装方法。
【請求項13】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、キャッシュデータが前記命令キャッシュラインから戻されるときに、命令キャッシュディレクトリの読み出し修正書き込みを実行することを含む、請求項10に記載のコンピュータ実装方法。
【請求項14】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、トラッキングテーブルからセット/ウェイポインタにアクセスすることを含む、請求項10に記載のコンピュータ実装方法。
【請求項15】
キャッシュマネージャを実行することは、さらに、
スレッドが、前記第1のスレッドまたは前記第2のスレッドから前記命令キャッシュに追加の命令キャッシュラインをフェッチすることと、
第3のスレッドから、追加の命令に対する追加の命令フェッチを受信することと、
前記追加の命令フェッチに関連するよりさらなるセット/ウェイポインタを導出することと、
前記よりさらなるセット/ウェイポインタを保存することと、
前記追加の命令キャッシュラインの前記第3のスレッドのキャッシュミスを検出することと、
前記追加の命令のリクエストをL2キャッシュに送ることと、を含む、請求項10に記載のコンピュータ実装方法。
【請求項16】
前記キャッシュマネージャを実行することは、さらに、
L2キャッシュラインを受信することと、
前記よりさらなるセット/ウェイポインタをトラッキングテーブルにマッチングさせることと、
前記トラッキングテーブルと前記エイリアステーブルとの間のスレッド共有マスクが重複しているか否かを判定することと、を含む、請求項15に記載のコンピュータ実装方法。
【請求項17】
前記キャッシュマネージャを実行することは、さらに、
前記メモリページに関連付けられた命令キャッシュラインが、前記第1のスレッド、前記第2のスレッド、および前記第3のスレッドの間で共有可能であることを示すために、前記エイリアステーブルを更新することと、
前記第3のスレッドのキャッシュミスを、前記第1のスレッド、前記第2のスレッド、および前記第3のスレッドで共有される前記追加の命令キャッシュラインにマーキングして上書きすることと、を含む、請求項16に記載のコンピュータ実装方法。
【請求項18】
コンピュータ可読命令を有するコンピュータ可読プログラムコードを目に見える形で具現化した非一過性のコンピュータ可読記憶媒体であって、前記コンピュータ可読命令は、実行されると、命令キャッシュラインを共有する方法をユーザ機器に実行させ、前記方法は、
命令キャッシュラインが第1のスレッドと第2のスレッドとの間で共有可能であると判定することと、
システムメモリのメモリページに関連付けられた他の命令キャッシュラインも、前記第1のスレッドと前記第2のスレッドとの間で共有可能であることを示すエイリアステーブルエントリを、エイリアステーブルに作成することと、
前記第2のスレッドからのさらなる命令フェッチを受信することであって、前記さらなる命令フェッチは、前記メモリページに関連付けられた前記システムメモリのさらなるアドレスからの命令を要求する、受信することと、
前記システムメモリの前記さらなるアドレスから、さらなる命令キャッシュラインへのさらなるセット/ウェイポインタを導出することであって、前記さらなる命令キャッシュラインは、前記第1のスレッドによって前記システムメモリの前記さらなるアドレスからフェッチされた命令をキャッシュする、導出することと、
前記エイリアステーブルエントリに基づいて、前記さらなる命令キャッシュラインが前記第2のスレッドと共有可能であると判定することと、を含む、非一過性のコンピュータ可読記憶媒体。
【請求項19】
前記第1のスレッドから命令フェッチを受信することであって、前記命令フェッチは、前記メモリページに関連付けられた前記システムメモリのアドレスからの命令を要求する、受信することと、
前記システムメモリの前記アドレスからセット/ウェイポインタを導出することと、
前記第2のスレッドから他の命令フェッチを受信することであって、前記他の命令フェッチは、前記メモリページに関連付けられた前記システムメモリの他のアドレスからの命令を要求する、受信することと、
前記システムメモリの前記他のアドレスから他のセット/ウェイポインタを導出することと、をさらに含み、
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、前記セット/ウェイポインタと前記他のセット/ウェイポインタとが共に前記命令キャッシュラインを指すことを検出することを含み、
前記さらなる命令フェッチを受信することは、前記エイリアステーブルエントリを作成した後に、前記さらなる命令フェッチを受信することを含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項20】
前記第1のスレッドから命令フェッチを受信することは、マルチスレッドプロセッサの前記第1のスレッドから前記命令フェッチを受信することを含み、
前記第2のスレッドから他の命令フェッチを受信することは、前記マルチスレッドプロセッサの前記第2のスレッドから前記他の命令フェッチを受信することを含み、
前記セット/ウェイポインタを導出することは、N-ウェイ連想キャッシュの命令キャッシュラインへのセット/ウェイポインタを導出することを含む、請求項19に記載の非一過性のコンピュータ可読記憶媒体。
【請求項21】
前記さらなる命令フェッチに応答して、前記さらなる命令キャッシュラインを前記第2のスレッドに返すことをさらに含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項22】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、キャッシュデータが前記命令キャッシュラインから戻されるときに、命令キャッシュディレクトリの読み出し修正書き込みを実行することを含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項23】
前記命令キャッシュラインが前記第1のスレッドと前記第2のスレッドとの間で共有可能であると判定することは、トラッキングテーブルからセット/ウェイポインタにアクセスすることを含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項24】
スレッドが、前記第1のスレッドまたは前記第2のスレッドから前記命令キャッシュに追加の命令キャッシュラインをフェッチすることと、
第3のスレッドから、追加の命令に対する追加の命令フェッチを受信することと、
前記追加の命令フェッチに関連するよりさらなるセット/ウェイポインタを導出することと、
前記よりさらなるセット/ウェイポインタを保存することと、
前記追加の命令キャッシュラインの前記第3のスレッドのキャッシュミスを検出することと、
前記追加の命令のリクエストをL2キャッシュに送ることと、を含む、請求項18に記載の非一過性のコンピュータ可読記憶媒体。
【請求項25】
L2キャッシュラインを受信することと、
前記よりさらなるセット/ウェイポインタをトラッキングテーブルにマッチングさせることと、
前記トラッキングテーブルと前記エイリアステーブルとの間のスレッド共有マスクが重複しているか否かを判定することと、を含む、請求項24に記載の非一過性のコンピュータ可読記憶媒体。
【国際調査報告】