(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-11-30
(54)【発明の名称】スレッド調停を通じて実施されるスレッド共有リソースのソフトウォーターマーキング
(51)【国際特許分類】
G06F 9/50 20060101AFI20221122BHJP
【FI】
G06F9/50 120A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022519137
(86)(22)【出願日】2020-09-03
(85)【翻訳文提出日】2022-05-19
(86)【国際出願番号】 US2020049220
(87)【国際公開番号】W WO2021061367
(87)【国際公開日】2021-04-01
(32)【優先日】2019-09-27
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】カイ トロエステル
(57)【要約】
スレッド調停を通じて実施されるスレッド共有リソースのソフトウォーターマーキングのための、マイクロプロセッサコアで使用するための技術を開示する。現在のクロックサイクルにおいてスレッドに割り当てられていると推定される共有リソース内のエントリ数に基づいて、現在のクロックサイクルにおいて共有リソースの使用のために競合又は要求している複数のスレッドを含むスレッド調停判断からスレッドが除外される。スレッド調停判断からスレッドを除外することにより、そのスレッドは、共有リソース内の追加のエントリの割り当てが停止される。
【選択図】
図2
【特許請求の範囲】
【請求項1】
複数のスレッドによって使用される複数のエントリを有する共有リソース(210)と、
スレッド調停ロジック(220)と、を備え、
前記スレッド調停ロジック(220)は、
前記複数のスレッドのうち何れかのスレッドと前記共有リソースとに関する割り当て数推定値を計算すること(530)であって、前記割り当て数推定値は、前記複数のエントリのうち、現在のクロックサイクルにおいて前記スレッドに割り当てられているエントリのセットの基数の推定値である、こと(530)と、
前記割り当て数推定値が割り当て目標(221)を満たしているかどうかを判定すること(540)であって、前記割り当て目標は、前記スレッドに割り当てられる超過しない数のエントリの基数である、こと(540)と、
前記スレッドの前記割り当て数推定値が前記割り当て目標を満たすとの判定に基づいて、スレッド調停判断から前記スレッドを除外すること(550)と、
を行うように構成されている、
マルチスレッドマイクロプロセッサコア(100)。
【請求項2】
前記スレッド調停ロジックは、
前記複数のエントリのうち、前記現在のクロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの前記基数に基づいて、前記割り当て数推定値を計算すること(530)を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項3】
前記スレッド調停ロジック(220)は、
前記現在のクロックサイクルの前に前記スレッドが前記共有リソースを使用するように選択された回数に基づいて、前記割り当て数推定値を計算すること(530)を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項4】
前記スレッド調停ロジックは、
(a)前記複数のエントリのうち、前記現在のクロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの基数と、
(b)(b1)前記現在のクロックサイクルの前に前記スレッドが前記共有リソースを使用するように選択された回数及び(b2)所定のエントリ数の積と、
の和に基づいて、前記割り当て数推定値を計算すること(530)を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項5】
前記スレッド調停ロジックは、
複数のクロックサイクル毎に割り当てカウント(222)を保持すること(510)であって、前記複数のクロックサイクル毎の前記割り当てカウントは、前記複数のエントリのうち、各クロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの前記基数である、こと(510)と、
前記現在のクロックサイクルにおける前記割り当てカウントに基づいて、前記現在のクロックサイクルにおいて前記スレッドに割り当てられている前記エントリのセットの前記基数の前記推定値を計算すること(530)と、
を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項6】
前記スレッド調停ロジックは、
複数のクロックサイクルのスライディングウィンドウにわたって選択カウント(223)を保持すること(520)であって、前記現在のクロックサイクルにおける前記選択カウントは、前記現在のクロックサイクルに先行する複数のクロックサイクルのウィンドウの間にスレッド調停判断によって前記スレッドが前記共有リソースを使用するように選択された回数である、こと(520)と、
前記現在のクロックサイクルにおける前記選択カウントに基づいて、前記現在のクロックサイクルにおいて前記スレッドに割り当てられている前記エントリのセットの前記基数の前記推定値を計算すること(530)と、
を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項7】
前記スレッド調停ロジックは、
前記複数のエントリのうち、前記スレッドが前記共有リソースを使用するように選択された場合に前記スレッドが割り当てると予想されるエントリの数の想定に基づいて、前記割り当て数推定値を計算すること(530)を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項8】
前記複数のスレッドの各スレッドについて、前記各スレッド及び前記共有リソースに関する割り当てカウント(222)を保持するための対応するレジスタと、
前記複数のスレッドの各スレッドについて、前記各スレッド及び前記共有リソースに関する選択カウント(223)を保持するための対応するレジスタと、をさらに備え、
前記スレッド調停ロジックは、前記スレッドの前記割り当てカウントを保持する前記対応するレジスタと、前記スレッドの前記選択カウントを保持する前記対応するレジスタと、に基づいて、前記割り当て数推定値を決定するようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項9】
前記スレッド調停ロジックは、
前記スレッド調停判断の結果として、前記複数のスレッドのうち、前記共有リソースを使用するように前記スレッド以外のスレッドを選択することを行うようにさらに構成されている、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項10】
前記割り当て目標は、静的に設定される、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項11】
前記割り当て目標は、動的且つ自動的に決定される、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項12】
前記共有リソースは、前記マルチスレッドマイクロプロセッサコアのロードキュー、リザベーションステーション、又は、レジスタファイルである、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項13】
前記共有リソースは、所定の総数のエントリを有し、エントリの前記超過しない数は、エントリの前記総数である、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項14】
前記共有リソースは、所定の総数のエントリを有し、エントリの前記超過しない数は、エントリの前記総数未満である、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項15】
前記スレッド調停ロジック(220)は、
前記スレッドの前記割り当て数推定値が前記割り当て目標に等しいという判定に基づいて、前記スレッドをスレッド調停判断から除外すること(550)を行うようにさらに構成されている、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項16】
前記スレッド調停ロジックは、
前記スレッドの前記割り当て数推定値が前記割り当て目標を超えているという判定に基づいて、前記スレッドをスレッド調停判断から除外すること(550)を行うようにさらに構成されている、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項17】
マルチスレッドマイクロプロセッサコアにおいて実行される方法であって、
複数のエントリを有する共有リソースを使用する複数のスレッドのうち何れかのスレッドに関する割り当て数推定値を計算すること(530)であって、前記割り当て数推定値は、前記複数のエントリのうち、現在のクロックサイクルにおいて前記スレッドに割り当てられているエントリのセットの基数の推定値である、こと(530)と、
前記割り当て数推定値が割り当て目標(221)を満たしているかどうかを判定すること(540)であって、前記割り当て目標は、前記スレッドに割り当てられる超過しない数のエントリの基数である、こと(540)と、
前記スレッドの前記割り当て数推定値が前記割り当て目標を満たすとの判定に基づいて、スレッド調停判断から前記スレッドを除外すること(550)と、を含む、
方法。
【請求項18】
前記複数のエントリのうち、前記現在のクロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの前記基数に基づいて、前記割り当て数推定値を計算すること(530)をさらに含む、
請求項17の方法。
【請求項19】
前記現在のクロックサイクルの前に前記スレッドが前記共有リソースを使用するように選択された回数に基づいて、前記割り当て数推定値を計算すること(530)をさらに含む、
請求項17の方法。
【請求項20】
(a)前記複数のエントリのうち、前記現在のクロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの基数と、
(b)(b1)前記現在のクロックサイクルの前に前記スレッドが前記共有リソースを使用するように選択された回数及び(b2)所定のエントリ数の積と、
の和に基づいて、前記割り当て数推定値を計算すること(530)をさらに含む、
請求項17の方法。
【請求項21】
複数のクロックサイクル毎に割り当てカウント(222)を保持すること(510)であって、前記複数のクロックサイクル毎の前記割り当てカウントは、前記複数のエントリのうち、各クロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの前記基数である、こと(510)と、
前記現在のクロックサイクルにおける前記割り当てカウントに基づいて、前記現在のクロックサイクルにおいて前記スレッドに割り当てられている前記エントリのセットの前記基数の前記推定値を計算すること(530)と、をさらに含む、
請求項17の方法。
【請求項22】
複数のクロックサイクルのスライディングウィンドウにわたって選択カウント(223)を保持すること(520)であって、前記現在のクロックサイクルにおける前記選択カウントは、前記現在のクロックサイクルに先行する複数のクロックサイクルのウィンドウの間にスレッド調停判断によって前記スレッドが前記共有リソースを使用するように選択された回数である、こと(520)と、
前記現在のクロックサイクルにおける前記選択カウントに基づいて、前記現在のクロックサイクルにおいて前記スレッドに割り当てられている前記エントリのセットの前記基数の前記推定値を計算すること(530)と、をさらに含む、
請求項17の方法。
【請求項23】
前記複数のエントリのうち、前記スレッドが前記共有リソースを使用するように選択された場合に前記スレッドが割り当てると予想されるエントリの数の想定に基づいて、前記割り当て数推定値を計算すること(530)をさらに含む、
請求項17の方法。
【請求項24】
前記スレッド調停判断の結果として、前記複数のスレッドのうち、前記共有リソースを使用するように前記スレッド以外のスレッドを選択することをさらに含む、
請求項17の方法。
【請求項25】
前記割り当て目標は、静的に設定される、
請求項17~24の何れかの方法。
【請求項26】
前記割り当て目標は、動的且つ自動的に決定される、
請求項17~24の何れかの方法。
【請求項27】
前記共有リソースは、前記マルチスレッドマイクロプロセッサコアのロードキュー、リザベーションステーション、又は、レジスタファイルである、
請求項17~24の何れかの方法。
【請求項28】
前記共有リソースは、所定の総数のエントリを有し、エントリの前記超過しない数は、エントリの前記総数である、
請求項17~24の何れかの方法。
【請求項29】
前記共有リソースは、所定の総数のエントリを有し、エントリの前記超過しない数は、エントリの前記総数未満である、
請求項17~24の何れかの方法。
【請求項30】
前記スレッドの前記割り当て数推定値が前記割り当て目標に等しいという判定に基づいて、前記スレッドをスレッド調停判断から除外すること(550)をさらに含む、
請求項17~24の何れかの方法。
【請求項31】
前記スレッドの前記割り当て数推定値が前記割り当て目標を超えているという判定に基づいて、前記スレッドをスレッド調停判断から除外すること(550)をさらに含む、
請求項17~24の何れかの方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示はマルチスレッドマイクロプロセッサに関する。より詳細には、本開示は、マルチスレッドマイクロプロセッサにおけるスレッド調停(mediation)を通じて実施されるスレッド共有リソースのソフトウォーターマーキングに関する。
【背景技術】
【0002】
ハードウェアレベルでは、マルチスレッドマイクロプロセッサコアは、異なるスレッドのハードウェア命令を同時に実行することができる。多くの場合、異なるスレッドは、リソースを共有する。マイクロプロセッサパイプラインの様々なコンポーネントは、複数のスレッドによって競合的に共有される共有リソースを含むことができる。そのような共有リソースのいくつかの例には、コンピューティングユニット、ロードキュー、リザベーションステーション、L1及びL2キャッシュ、トランスレーションルックアサイドバッファ等が含まれる。
【0003】
マイクロプロセッサに存在する並列処理のレベルによって、マイクロプロセッサコア内の共有リソースが逼迫し得る。例えば、2~8スレッド又はそれ以上のスレッドが、ロードキュー、リザベーションステーション、レジスタファイル又は算術論理演算ユニット(ALU)を求めて競合し得る。他の例として、複数のスレッドが、実行ユニットに発行される前に、ロードキュー内でエントリの割り当てを保留し得る。並列処理のレベルによって引き起こされる共有リソースの逼迫は、ハザードにつながり得る。これを軽減するために、ラウンドロビン及び最長時間未使用(LRU:least-recently-used)等のように、リソースを共有するためのスレッド調停スキームを利用することができる。
【0004】
しかしながら、ラウンドロビン及びLRU等の単純なスレッド調停スキームでは不十分な場合がある。例えば、L1及びL2キャッシュでミスするロード等のように、スレッドのレイテンシの長いオペレーションでは、そのスレッドが共有リソースの不公平な共有分を蓄積し、その共有分の割り当てを解除するのが遅くなることがある。同様に、命令の依存関係及びレジスタの依存関係によっても、スレッドは、依存関係が満たされるのを待っている間、共有リソースの不公平な共有分を蓄積する場合がある。そのようなスレッドは、「活用不十分(poor use)」スレッドと呼ばれることがある。スレッドが能動的に使用しているよりも不釣り合いに大きい共有リソースの共有分がスレッドに割り当てられている場合に、活用不十分スレッドが生じ得る。特定のプロセッサワークロードの下で、活用不十分スレッドに共有リソースを割り当てると、他のスレッドのスループットが大幅に低下し得る。
【0005】
本明細書に記載の実施形態は、これら及び他の問題に対処する。
【0006】
本セクションで説明しているアプローチは、追求され得るアプローチであるが、必ずしも以前に考案され又は追求されたアプローチではない。したがって、特に断りのない限り、本セクションで説明しているアプローチの何れかが、単に本セクションに含まれているという理由だけで、従来技術とみなされ、よく理解されたルーチン又は従来例であると想定されるべきではない。
【図面の簡単な説明】
【0007】
【
図1】いくつかの可能な実施形態による、スレッド調停を通じて実施されるスレッド共有リソースのソフトウォーターマーキングのための技術を使用し得るマイクロプロセッサコアの一例を概略的に示す図である。
【
図2】いくつかの可能な実施形態による、スレッド調停を通じて実施されるスレッド共有リソースのソフトウォーターマーキングのための技術を使用し得るマルチスレッドマイクロプロセッサコアの一例のブロック図である。
【
図3】いくつかの可能な実施形態による、スレッド調停判断の例をテーブル形式で示す図である。
【
図4】いくつかの可能な実施形態による、ソフトウォーターマーキングの例をテーブル形式で示す図である。
【
図5】いくつかの可能な実施形態による、ソフトウェアウォーターマーキング処理のフローチャートである。
【発明を実施するための形態】
【0008】
以下の説明では、説明のために、本願の十分な理解を提供するために多くの特定の詳細を示している。しかしながら、これらの特定の詳細がなくとも、本明細書に記載の実施形態が実施され得ることは明らかであろう。他の例では、特定の特徴を不要に不明瞭にしないように、一部の構造及びデバイスをブロック図で示している。
【0009】
(概説)
スレッド調停を通じて実施されるスレッド共有リソースのソフトウォーターマーキングのための、マイクロプロセッサで使用するための技術を開示する。本技術は、いくつかの実施形態では、共有リソース内でスレッドに割り当てられているエントリ数と、そのスレッドの静的な又は動的に調整された割り当て目標と、に基づくスレッド選択の制御を可能にする。また、本技術は、いくつかの実施形態では、スレッドの実際の割り当てカウントが更新される前にスレッド選択が行われるときにスレッドによる予想リソース割り当て数を考慮することによって、共有リソースを使用するようにスレッド選択が行われるときと、スレッドの実際の割り当てカウントが更新されるときと、の間のクロックサイクルを補う(bridge)ことを可能にする。スレッドが選択されるときに予想リソース割り当て数を考慮することにより、スレッド選択と、スレッドの実際の割り当てカウントの更新時と、の間に相当数のクロックサイクルが存在する場合に、リソース割り当て数の大きな変動が防止される。
【0010】
いくつかの可能な実施形態では、例えば、マイクロプロセッサは共有リソースを有する。共有リソースは、複数のスレッドが使用するための複数のエントリを有する。また、マイクロプロセッサは、スレッド調停ロジックを含む。スレッド調停ロジックは、複数のスレッドの各スレッドの割り当て数推定値を決定する。割り当て数推定値は、スレッド調停判断が行われる現在のクロックサイクルにおいてスレッドが消費している、複数のエントリのうちエントリのセットの基数(cardinality)の推定値であり得る。この推定値は、より正確な推定値を生成するためのハードウェア回路に関連するさらなる複雑性及びコストを招くことのない、将来のクロックサイクルにおいてスレッドが消費する共有リソースのエントリ数の十分に良好な推定値であり得る。
【0011】
また、スレッド調停ロジックは、割り当て数推定値が割り当て目標を満たしている(例えば、それ以上である)かどうかを判定する。割り当て目標は、現在のクロックサイクルにおいてスレッドに割り当てられる、共有リソースの複数のエントリのうち超過すべきでない個数のエントリの基数であり得る。
【0012】
スレッド調停ロジックは、スレッドの割り当て数推定値が割り当て目標を満たしている(例えば、それ以上である)という判定に基づいて、スレッド調停判断からスレッドを除外する。スレッド調停判断からスレッドを除外することにより、スレッドは、共有リソース内の追加のエントリの割り当てが停止(stall)され、スレッドが活用不十分スレッドになることが潜在的に予防される。現在のクロックサイクルの後に、スレッドのその時の割り当て数推定値がその時の割り当て目標を満たしていない場合、そのスレッドはスレッド調停判断に含められ、共有リソース内のエントリの割り当てが停止されなくなる。
【0013】
これら及び他の可能な実施形態は、以下の説明及び添付の図を参照することでより明らかになるであろう。
【0014】
(マイクロプロセッサコアの例)
図1は、いくつかの可能な実施形態による、スレッド調停を通じて実施されるスレッド共有リソースのソフトウォーターマーキングのための技術を使用するマイクロプロセッサコア100の例を概略的に示している。コア100は、マルチスレッド中央処理装置(CPU)、シングルコアマルチスレッドマイクロプロセッサのコア、又は、マルチコアマルチスレッドマイクロプロセッサのうち何れかのコアである。コア100は、スーパースカラアーキテクチャ、同時マルチスレッディング、細粒度マルチスレッディング、投機的実行、分岐予測、アウトオブオーダ実行、及び/又は、レジスタリネーミングを含むがこれらに限定されない、既知のプロセッサ設計技術を利用する。
【0015】
コア100は、所定の命令セットアーキテクチャに従って命令を実行するための回路を含む。例えば、所定の命令セットアーキテクチャは、x86(登録商標)、ARM(登録商標)、PowerPC(登録商標)、MIPS(登録商標)、Sparc(登録商標)、RISC-V(登録商標)、又は、他の複雑な若しくは縮小された命令セットアーキテクチャのうち何れかであり得る。
【0016】
コア100は、複数のスレッドの実行をサポートしている。所定のスレッドは、他のスレッドの命令とは独立して実行され得る命令のセットを含み得る。コア100は、例えば、2~8個の同時に実行中のスレッド等のように、いくつかのスレッドの命令を同時に実行し得る。
【0017】
コア100は、よりI/Oバウンドなワークロード(例えば、ネットワーク及び/又はファイルシステムバウンドなワークロード)から、よりプロセッサバウンドなワークロード(例えば、暗号、コンピュータグラフィックス、又は、集約的な数理解析に関与するワークロード)まで、一連のワークロードタイプにわたる様々なタイプの計算ワークロードを効率的に処理することが可能である。
【0018】
コア100は、複数のスレッド間で共有リソースを動的に割り当てる。そのような共有リソースには、分岐リソース(例えば、分岐予測器構造)、ロード/ストアリソース(例えば、ロード/ストアバッファ及びキュー)、命令完了リソース(例えば、リオーダバッファ及びコミットロジック)、命令発行リソース(例えば、命令選択及びスケジューリング構造、リザベーションステーション)、レジスタリネーミングリソース(例えば、レジスタマッピングテーブル)、及び/又は、メモリ管理ユニットリソース(例えば、トランスレーションルックアサイドバッファ、ページウォークリソース)が含まれ得るが、これらに限定されない。
【0019】
コア100に含まれ得るハードウェアコンポーネントの非排他的なセットには、命令フェッチユニット110と、命令キャッシュ115と、デコードユニット120と、レジスタリネーミングユニット125と、命令キュー130と、実行ユニット135と、ロード/ストアユニット140と、データキャッシュ145と、が含まれる。コア100に含まれ得るが
図1に示されていない他のコンポーネントには、プリフェッチバッファ、分岐予測ロジック、グローバル/バイモーダルロジック、ループロジック、間接ジャンプロジック、ループストリームデコーダ、マイクロ命令シーケンサ、リタイアメントレジスタファイル、レジスタ割り当てテーブル、リオーダバッファ、リザベーションステーション、算術論理演算ユニット、及び/又は、メモリオーダバッファが含まれ得るが、これらに限定されない。
【0020】
(マルチスレッドマイクロプロセッサコアの例)
図2は、共有リソース210と、スレッド調停ロジック220と、スレッドレジスタ230と、制御ユニット240と、算術論理演算ユニット(ALU)250と、を含む
図1の例示的なマルチスレッドマイクロプロセッサコア100を示すブロック図である。スレッドレジスタ230は、特定のスレッド専用のレジスタである。コア100は、任意のスレッド数をサポートすることができ、実施形態は、特定のスレッド数に限定されない。共有リソース210は、マルチスレッドマイクロプロセッサコア100内の複数のスレッドによって使用される任意のタイプのリソースであり得る。共有リソース210の例には、ロードキュー、レジスタファイル、リザベーションステーション等が含まれるが、これらに限定されない。
【0021】
スレッド調停ロジック220は、以下でより詳細に説明するように、ソフトウォーターマーキングに従って共有リソース210内のエントリを割り当てるためのスレッドからの要求を調停する。スレッド調停ロジック220は、コンピュータハードウェア、コンピュータソフトウェア、又は、コンピュータハードウェア及びソフトウェアの任意の組み合わせによって実装され得る。スレッド調停ロジック220は、
図2では説明のみを目的として個別の要素として示されており、スレッド調停ロジック220は、マルチスレッドマイクロプロセッサコア100内の他の要素(例えば、リソース割り当てロジック、スレッド切替ロジック、ディスパッチ制限ロジック)に組み込まれ得る。マルチスレッドマイクロプロセッサコア100は、
図2に示されていない、実施形態によって異なり得る追加の要素を含み得る。
【0022】
いくつかの可能な実施形態では、共有リソース210用のスレッド調停ロジック220は、1つ以上の割り当て目標(複数可)221と、スレッド別割り当てカウント222と、スレッド別選択カウント223と、選択当たりの想定割り当て数224と、ソフトウォーターマーキングアクティブ信号225と、ソフトウォーターマーキングロジック226と、を含む。割り当て目標(複数可)221、スレッド別割り当てカウント222、スレッド別選択カウント223、選択当たりの想定割り当て数、ソフトウォーターマーキングアクティブ信号225、及び/又は、ソフトウォーターマーキングロジック226は、共有リソース210専用であってもよいし、それらのうち1つ以上又は全てが、複数の共有リソース間で共有されてもよい。割り当て目標(複数可)221、スレッド別割り当てカウント22及びスレッド別選択カウント223は、コア100の1つ以上のレジスタに記憶及び保持され得る。
【0023】
ソフトウォーターマーキング信号225は、現在のクロックサイクルにおいてアクティブ又は非アクティブに設定され得る。例えば、プログラムされた命令がコア100によって実行されると、ソフトウォーターマーキング信号225がアクティブ又は非アクティブに設定され得る。この設定は、現在のクロックサイクルのみ、又は、現在のクロックサイクルを含む複数のクロックサイクルに適用され得る。
【0024】
いくつかの実施形態によれば、信号225が現在のクロックサイクルにおいてアクティブである場合、ソフトウォーターマーキングロジック226は、現在のクロックサイクルにおいて共有リソース210の使用を要求する複数のスレッドの各スレッドの割り当て数推定値を計算する。スレッドの割り当て数推定値は、割り当て目標(複数可)221と、スレッド別割り当てカウント222と、スレッド別選択カウント223と、選択当たりの想定割り当て数224と、に基づいて計算され得る。しかしながら、概して、割り当て目標(複数可)221は、スレッド別にすることもでき、共有リソース210を使用する全てのスレッドに対してグローバルにすることもできる。割り当て目標(複数可)221は、静的又は動的に設定することができる。例えば、割り当て目標(複数可)221は、スレッドが共有リソース210をどのように使用しているかを検出することに基づいて、動的且つ自動的に調整することができる。しかしながら、概して、割り当て目標は、現在のクロックサイクルにおいてスレッドに割り当てられる、共有リソース210内のエントリの超過すべきでない個数を反映し得る。スレッド別割り当てカウント222は、現在のクロックサイクルより数クロックサイクル遅れ得るクロックサイクルにおいて各スレッドが割り当てている共有リソース210内のエントリ数を反映する。スレッド別選択カウント223は、過去のクロックサイクルのウィンドウの間に各スレッドが共有リソース210を使用するように選択された回数を反映し得る。選択当たりの想定割り当て数は、スレッド調停判断の結果としてスレッドが共有リソース210を使用するように選択される毎に、スレッドが共有リソース210内で割り当てると予想されるエントリ数として、経験的又は発見的に決定され得る。
【0025】
いくつかの実施形態では、ソフトウォーターマーキングロジック226は、現在のクロックサイクルにおけるスレッドの割り当て数推定値を、(1)現在のクロックサイクルにおけるスレッドのカウント222のスレッド別割り当てカウント(これは、現在のクロックサイクルにおいて共有リソース210内でスレッドに割り当てられている実際のエントリ数よりも数サイクル遅れ得る)に、(2)現在のクロックサイクルにおけるスレッドのカウント223のスレッド別選択カウントを(3)選択当たりの想定割り当て数224で乗算したものを加算するとして計算する。スレッドの計算された割り当て数推定値が割り当て目標(例えば、共有リソース210に関するグローバル割り当て目標、又は、そのスレッド及び共有リソース210に関するスレッド固有の割り当て目標)を満たしている場合、ソフトウォーターマーキングロジック226は、現在のクロックサイクルにおけるスレッド調停判断からスレッドを除外する。そうでない場合、スレッドは、現在のクロックサイクルにおけるスレッド調停の対象のままとなる。
【0026】
一方、現在のクロックサイクルにおいて信号225がアクティブでない場合、ソフトウォーターマーキングロジック226は、スレッドのカウント222の割り当てカウントに基づいて、現在のクロックサイクルにおけるスレッド調停判断からスレッドを除外する。例えば、現在のクロックサイクルにおけるスレッドの割り当てカウントが割り当て目標(例えば、共有リソース210に関するグローバル割り当て目標、又は、そのスレッド及び共有リソース210に関するスレッド固有の割り当て目標)を満たしている場合、ソフトウォーターマーキングロジック226は、現在のクロックサイクルにおけるスレッド調停判断からスレッドを除外する。そうでない場合、スレッドは、現在のクロックサイクルにおけるスレッド調停の対象のままとなる。
【0027】
いくつかの実施形態では、ソフトウォーターマーキングロジック226は、共有リソース210内でスレッドに割り当てられているエントリ数と、そのスレッドの静的な又は動的に調整された割り当て目標221と、に基づくスレッド選択の制御を可能にする。また、ソフトウォーターマーキングロジック226は、スレッドの実際の割り当てカウント222が更新される前にスレッド選択が行われるときにスレッドによる予想リソース割り当て数を考慮することによって、共有リソース210を使用するようにスレッド選択が行われるときと、スレッドの実際の割り当てカウント222が更新されるときと、の間のクロックサイクルを補うことを可能にする。例えば、予想リソース割り当て数は、スレッドの選択カウント223と、選択当たりの想定割り当て数224と、に基づき得る。スレッドが選択されるときに予想リソース割り当て数を考慮することにより、スレッド選択と、スレッドの実際の割り当てカウント222の更新時と、の間に相当数(例えば、3以上)のクロックサイクルが存在する場合に、共有リソース210内のリソース割り当て数の大きな変動が防止される。
【0028】
(ソフトウォーターマーキング)
マルチスレッドプロセッサコアでは、例えば、ロードキュー、リザベーションステーション又はレジスタファイル等の共有リソースを使用するために複数のスレッドが互いに競合し得る。スレッドによる共有リソースの使用は、スレッドに関する命令を書き込むことができる共有リソース内の1つ以上のエントリを割り当てることを含み得る。例えば、ロードキューの場合、それらの命令には、メモリからレジスタにデータをロードするためのロード命令が含まれ得る。共有リソース内のエントリは、数クロックサイクルの間のみ、又は、延長された数のクロックサイクルの間、スレッドに割り当てられ得る。共有リソース内のエントリは、スレッドに割り当てられなくなった後、場合によってはそのエントリの割り当てを解除したばかりのスレッドを含めて、スレッドに再度割り当て可能になる。
【0029】
延長された数のクロックサイクルの間、エントリが特定のスレッドに割り当てられ得る理由は様々である。理由の一部には、例えば、キャッシュミス、又は、ある命令が他の命令又はレジスタに依存していることが含まれる。スレッドが、延長された数のクロックサイクルにわたって共有リソースに割り当てられたエントリをあまりに多く有している場合、そのスレッドは、共有リソースを十分に活用できない可能性がある。例えば、キャッシュミス又は命令若しくはレジスタの依存関係のために、或いは、コミット、リタイア、処理又はディスパッチを未だ保留している、スレッドによって以前に割り当てられたエントリの命令のために、スレッドが共有リソース内の追加のエントリを割り当てる場合がある。一方、他のスレッドが、より早く処理又はディスパッチの準備が整う命令にそれらの追加のエントリを使用できた可能性がある。
【0030】
本明細書に開示するソフトウォーターマーキング技術は、スレッドが追加のエントリを割り当てることを許可されている場合に、スレッドが割り当て目標を満たしている(例えば、それ以上である)と推定される場合に、スレッドが共有リソースにおいて追加のエントリを割り当てることを防止する。スレッド調停判断が行われる現在のクロックサイクルでスレッド調停判断からスレッドを除外することによって、スレッドがこれを行うことを防止してもよい。スレッドがスレッド調停判断から除外されるので、現在のクロックサイクルにおいて共有リソースを使用するように選択されない。その結果、スレッドは、現在のクロックサイクルにおいてそのスレッドに既に割り当てられているものを超えて、共有リソースに追加のエントリを割り当てることができなくなる。
【0031】
次回以降のクロックサイクルにおいて、スレッドに対して割り当て数推定値が再度生成される。そして、割り当て数推定値が、その時の割り当て目標を満たしていない(例えば、それ未満である)場合、スレッドは、その後のクロックサイクルにおけるスレッド調停判断に含められる。スレッドの割り当て数推定値が割り当て目標を満たしている(例えば、それ以上である)場合にスレッド調停判断からスレッドを除外することにより、スレッドが割り当てることができる共有リソース内のエントリ数が制限される。これは、スレッドが共有リソースを十分に活用していないことが検出された場合、又は、スレッドが共有リソースを十分に活用しないことを防止するために、一時的に実行され得る。その結果、特定のワークロードに関して、共有リソースの全体的なスループットが改善される。
【0032】
マイクロプロセッサ内の遅延に起因して、(a)現在のクロックサイクルにおけるスレッド調停判断と、(b)スレッド及び共有リソースに対してマイクロプロセッサで保持される割り当てカウントが、現在のクロックサイクルにおいてスレッドに割り当てられている共有リソース内のエントリ数を反映するように更新される場合と、の間に数クロックサイクル(例えば、3)が存在し得る。この遅れは、マイクロプロセッサがパイプラインステージで命令を処理する方法に起因し得る。具体的には、共有リソースに関してスレッド調停判断が行われるマイクロプロセッサのパイプラインステージは、割り当てカウントが更新されるパイプラインステージよりも数クロックサイクル前であり得る。したがって、スレッド調停判断が行われる現在のクロックサイクルにおいて、スレッドが共有リソース内で実際に割り当てているエントリ数が、現在のクロックサイクルにおいては未知であり得る。そのため、スレッドの割り当て数推定値を生成して、スレッドが現在のクロックサイクルにおいて割り当てているエントリ数を大まかに推定する。次いで、現在のクロックサイクルにおいて割り当て数推定値を使用して、現在のクロックサイクルにおけるスレッド調停判断からスレッドを除外すべきかどうかを判定する。
【0033】
(クロックサイクル)
本明細書で使用する場合、「クロックサイクル」という用語は、文脈上明らかにそうでない場合を除き、マルチスレッドマイクロプロセッサの発振器(例えば、水晶発振器)の連続する2つのパルスに関連する期間を指す。クロックサイクルに関連する期間の開始は、発振器の最初のパルスによってトリガされるか又は引き起こされ得、クロックサイクルに関連する期間の終了は、発振器の次のパルスによってトリガされるか又は引き起こされ得る。
【0034】
本明細書では、クロックサイクル「において(at)」発生する様々なイベントに言及し得る。本明細書で使用する場合、クロックサイクル「において」発生するイベントへの言及は、文脈上明らかにそうでない場合を除き、少なくともクロックサイクルに関連する期間中に発生するイベントを指す。
【0035】
また、本明細書では、クロックサイクル「において」存在する様々な状態に言及する。本明細書で使用する場合、クロックサイクル「において」存在する状態への言及は、文脈上明らかにそうでない場合を除き、少なくともクロックサイクルに関連する期間中に存在する状態を指す。
【0036】
同様に、クロックサイクルの「前」又は「後」に発生するイベントへの言及は、文脈上明らかにそうでない場合を除き、それぞれ、少なくともクロックサイクルに関連する期間の前、又は、少なくともクロックサイクルに関連する期間の後に発生するイベントを指す。
【0037】
同様に、クロックサイクルの「前」又は「後」に存在する状態への言及は、文脈上明らかにそうでない場合を除き、それぞれ、少なくともクロックサイクルに関連する期間の前に存在する状態、又は、少なくともクロックサイクルに関連する期間の後に存在する状態を指す。
【0038】
(過去のクロックサイクルのウィンドウ)
いくつかの可能な実施形態では、スレッドの割り当て数推定値は、スレッドによる共有リソースの最近の使用状況に基づいている。最近の使用状況は、2つ以上の最近の連続したクロックサイクルのウィンドウにわたり得る。例えば、スレッドに対して割り当て数推定値が生成されている現在のクロックサイクルにおいて、推定値は、いくつかの以前の連続するクロックサイクルにわたる、スレッドによる共有リソースの使用状況に基づくことができる。推定値の基となる、以前の連続するクロックサイクル数は、スレッド及び共有リソースの割り当てカウントが現在のクロックサイクルより遅れるクロックサイクル数と同じにすることができるが、そうである必要はない。例えば、割り当て数推定値は、3つの以前の連続するクロックサイクルに基づくことができる。したがって、「過去ウィンドウ」という用語は、文脈上明らかにそうでない場合を除き、現在のクロックサイクルに対する2つ以上の以前の連続するクロックサイクルを指す。
【0039】
(割り当て目標)
本明細書で使用する場合、「割り当て目標」という用語は、現在のクロックサイクルにおいて単一のスレッドに割り当てられるエントリ数以下の、共有リソースのエントリの超過すべきでない個数を指す。この数には、以前のクロックサイクル中にスレッドに割り当てられ、現在のクロックサイクルにおいても未だそのスレッドに割り当てられている全てのエントリを含めることができる。
【0040】
割り当て目標は、共有リソース内のエントリの総数に基づくことができる。例えば、ロードキュー内のエントリの総数が50個の場合、割り当て目標も50とすることができる。
【0041】
しかしながら、割り当て目標は、共有リソース内のエントリの総数未満とすることができる。例えば、割り当て目標は、共有リソースのエントリの総数未満のエントリ数として静的に事前に定義することができる。例えば、割り当て目標は、共有リソースのエントリの総数の2分の1、3分の1、又は、他の割合とすることができる。
【0042】
割り当て目標は、共有リソースに関するスレッド別の目標とすることができ、又は、共有リソースを使用する全てのスレッドに対する「グローバルな」割り当て目標とすることができる。換言すれば、割り当て目標は、共有リソースを使用する全てのスレッドに対して同じ値とすることができ、又は、共有リソースを使用する異なる個々のスレッドに対して異なる個別の値とすることができる。スレッド別の場合、割り当て目標は、スレッドによって異なることができる。
【0043】
スレッド別又はグローバル割り当て目標を共有リソースの使用状況に応じて動的に調整することも可能である。例えば、特定のスレッドが共有リソースを十分に活用していない(すなわち、活用不十分スレッドである)ことを検出したことに基づいて、特定のスレッドのスレッド別割り当て目標を現在の割り当て目標から動的に下げることができる。同様に、特定のスレッドが共有リソースに関して活用不十分スレッドではなくなったことを検出したことに基づいて、割り当て目標を上げることができる。スレッドにとっての共有リソースの有用性に基づいて割り当て目標を動的に調整するためのいくつかの可能な技術については、2019年9月27日に出願された関連する米国特許出願第16/585,424号に記載されている。
【0044】
(割り当て目標を満たす)
本明細書では、割り当て目標を「満たしている」又は「満たしていない」割り当て数推定値に言及する。本明細書で使用する場合、割り当て目標を満たしている割り当て数推定値への言及は、文脈上明らかにそうでない場合を除き、割り当て数推定値が割り当て目標以上であることを意味する。割り当て目標を満たすために、割り当て数推定値が、単に割り当て目標に等しくなるのではなく、割り当て目標を超える必要があるかどうかは、特定の実施形態の要求に応じて行われる実装時の選択事項であり得る。
【0045】
いくつかの可能な実施形態では、割り当て目標を満たしていると見なされるには、割り当て数推定値が割り当て目標以上である。
【0046】
他の可能な実施形態では、割り当て目標を満たしていると見なされるには、割り当て数推定値が割り当て目標を超えなければならず、単に割り当て目標に等しいだけでは、割り当て目標を満たすには十分ではない。
【0047】
いくつかの可能な実施形態では、割り当て目標に等しい割り当て数推定値が割り当て目標を満たしているかどうかは、前の割り当て数推定値が割り当て目標を超えていたかどうかに依存する。例えば、前の割り当て数推定値が割り当て目標を超えていた場合に、割り当て目標に等しい現在の割り当て数推定値は割り当て目標を満たしている。あるいは、現在の割り当て数推定値は、その状況では割り当て目標を満たしていないと見なされ得る。
【0048】
(スレッド調停判断)
現在のクロックサイクルにおいて、共有リソースの使用を競合又は要求している複数のスレッドのうち何れのスレッドが共有リソースを使用するように選択されるかを決定するために、スレッド調停判断が行われ得る。スレッド調停判断は、種々の異なるアプローチに従って行うことができ、本願は、特定のスレッド調停アプローチに限定されない。例えば、ラウンドロビン又は最長時間未使用アプローチが使用され得る。
【0049】
スレッドの割り当て数推定値が割り当て目標を満たしていることに基づいて、スレッド調停判断からスレッドが除外され得る。次いで、スレッド調停判断から除外されなかった残りのスレッド間でスレッド調停判断が行われる。例えば、ラウンドロビン又は最長時間未使用アプローチを使用して、残りのスレッドのうち何れかのスレッドを選択し得る。他の代替例として、スレッド調停判断は、共有リソースを使用するように、現在のクロックサイクルにおいて割り当てカウントが最も低い残りのスレッドを選択し得る。上記のように、この割り当てカウントは、現在のクロックサイクルよりも数クロックサイクル遅れ得る。したがって、選択されたスレッドの割り当てカウントは、数サイクル前にスレッドに割り当てられた実際のエントリ数を反映し、これは、現在のクロックサイクルにおいてスレッドに割り当てられている実際のエントリ数ではない場合がある。例えば、選択されたスレッドには、現在のクロックサイクルにおいて、より少ない又はより多いエントリが割り当てられている場合がある。さらに他の代替例として、スレッド調停判断は、現在のクロックサイクルにおいて割り当て数推定値が最も低い残りのスレッドを選択し得る。
【0050】
それぞれの割り当て数推定値が割り当て目標を満たしていることによって、複数のスレッドを現在のクロックサイクルにおけるスレッド調停判断から除外することが可能である。この場合、残りのスレッドが複数存在する場合は、(例えば、ラウンドロビン、LRU、最低割り当てカウント、又は、最低割り当て数推定値のアプローチに従って)残りのスレッド間でスレッド調停判断を行うことができる。残りのスレッドが1つしかない場合、そのスレッドを、現在のクロックサイクルにおいて共有リソースを使用するように選択することができる。
【0051】
全てのスレッドが、現在のクロックサイクルにおいて共有リソースの使用を要求又は競合しているわけではないことに留意されたい。例えば、スレッドの一部は、現在のクロックサイクルにおいて共有リソースの使用を要求しない場合がある。したがって、現在のクロックサイクルにおけるスレッド調停判断が全てのスレッドを含まない場合がある他の理由は、スレッドの一部が現在のクロックサイクルにおいて共有リソースの使用を要求しないことである。
【0052】
それぞれの割り当て数推定値が割り当て目標を満たしていることによって、全てのスレッドを、現在のクロックサイクルにおけるスレッド調停判断から除外することも可能である。この場合、フォールバック調停アプローチが使用され得る。フォールバックアプローチは、ラウンドロビン、最長時間未使用、最低割り当てカウント、又は、最低割り当て数推定値とすることができる。
【0053】
スレッドの割り当て数推定値が割り当て目標を満たしていること以外の理由で、現在のクロックサイクルにおけるスレッド調停判断からスレッドを除外することも可能である。例えば、スレッドが共有リソース内のエントリを割り当てるための準備が整っていないことが理由で、又は、スレッドがストール状態にあることが理由で、スレッドがスレッド調停判断から除外され得る。
【0054】
現在のクロックサイクルにおけるスレッド調停判断からスレッドを除外しないことも可能である。例えば、各スレッドの割り当て数推定値は、現在のクロックサイクルにおいて割り当て目標を満たしていない場合がある。その場合、全てのスレッドは、別の方法で参加する資格があると想定して、現在のクロックサイクルにおけるスレッド調停判断に参加する。
【0055】
(割り当てカウント)
いくつかの可能な実施形態では、スレッド調停判断が行われる現在のクロックサイクルにおいて、共有リソース内でスレッドに割り当てられているエントリ数が追跡される。本明細書では、このエントリ数をスレッドの「割り当てカウント」と呼ぶことがある。
【0056】
いくつかの可能な実施形態では、スレッドの割り当てカウントが割り当て目標を満たしている場合、そのスレッドは、現在のクロックサイクルにおけるスレッド調停判断から除外される。スレッドの割り当てカウントは、各クロックサイクルにおいて更新され、スレッド調停判断が行われる各クロックサイクルにおいて評価され得る。いくつかの可能な実施形態では、スレッドの割り当てカウントは、現在のクロックサイクルにおいてスレッドに割り当てられているエントリ数よりも数クロックサイクルだけ遅れる。この遅れは、マイクロプロセッサにおけるパイプラインステージ処理の性質に起因し得る。例えば、遅れるクロックサイクル数は、1、2又は3クロックサイクルであり得る。その結果、現在のクロックサイクルにおいてスレッドに割り当てられているエントリ数は、現在のクロックサイクルの数クロックサイクル後まで、スレッドの割り当てカウントに反映されない。本明細書に開示する技術は、本明細書の他の箇所でより詳細に説明するように割り当て数推定値を決定することによって、この遅れを考慮する。
【0057】
(選択カウント)
いくつかの可能な実施形態では、過去ウィンドウの間にスレッドが共有リソースを使用するように選択された回数が、スレッド調停判断が行われる現在のクロックサイクルにおいて追跡される。本明細書では、この回数をスレッドの「選択カウント」と呼ぶことがある。例えば、過去ウィンドウが3クロックサイクルを含み、過去ウィンドウの3クロックサイクルのうち2クロックサイクルの間、スレッドが共有リソースを使用するように選択された場合、現在のクロックサイクルにおけるスレッドの選択カウントが2になり得る。
【0058】
いくつかの可能な実施形態では、スレッドの割り当てカウント及び選択カウントの合計が割り当て目標を満たしている場合、そのスレッドは、現在のクロックサイクルにおけるスレッド調停判断から除外される。スレッドの選択カウントは、各クロックサイクルにおいて、スライドする過去ウィンドウに基づいて更新され得る。例えば、スレッドの選択カウントは、過去3クロックサイクルにおいてスレッドが共有リソースを使用するように選択された回数を反映し得る。
【0059】
(選択当たりの想定割り当て数)
いくつかの可能な実施形態では、現在のクロックサイクルにおけるスレッド調停判断の一部として、「選択当たりの想定割り当て数」が考慮される。選択当たりの想定割り当て数とは、現在のクロックサイクルにおけるスライドする過去ウィンドウの間にスレッドが共有リソースを使用するように選択される毎に、スレッドに割り当てられると想定されるエントリ数である。
【0060】
選択当たりの想定割り当て数は、静的に定義することができる。例えば、選択当たりの想定割り当て数は、1~4エントリとすることができる。いくつかの可能な実施形態では、選択当たりの想定割り当て数は、発見的又は経験的に決定される。例えば、選択当たりの想定割り当て数は、静的に2つと定義することができる。
【0061】
選択当たりの想定割り当て数は、スレッド単位で追跡することもできる。例えば、スレッドの選択当たりの想定割り当て数は、そのスレッドが共有リソースを使用するように選択された過去ウィンドウの間の各クロックサイクルについてのサイクル当たりの割り当て数の平均とすることができる。
【0062】
いくつかの可能な実施形態では、(a)現在のクロックサイクルにおけるスレッドの割り当てカウント(これは、現在のクロックサイクルにおいてスレッドに割り当てられている実際のエントリ数よりも遅れ得る)と、(b)スレッドの選択カウント及び選択当たりの想定割り当て数の積と、の合計が割り当て目標を満たしている場合、現在のクロックサイクルにおけるスレッド調停判断からスレッドが除外される。
【0063】
(ソフトウォーターマーキングの例)
現在のクロックサイクルにおいてスレッドの割り当て数推定値を生成することができる。割り当て数推定値を生成するには、いくつかの異なる方法が考えられる。
【0064】
考えられる1つの方法では、スレッドの割り当てカウントに基づいて割り当て数推定値が生成される。例えば、割り当て数推定値は、現在のクロックサイクルにおける割り当てカウントとすることができる。
【0065】
考えられる他の方法では、スレッドの割り当てカウント及び選択カウントに基づいて割り当て数推定値が生成される。例えば、割り当て数推定値は、現在のクロックサイクルにおけるスレッドの割り当てカウントと、スレッドの選択カウントと、の和(合計)とすることができる。
【0066】
考えられるさらに他の方法では、スレッドの割り当てカウントと、スレッドの選択カウントと、サイクル当たりの予想割り当て数と、に基づいて、割り当て数推定値が生成される。例えば、割り当て数推定値は、(現在のクロックサイクルにおけるスレッドの割り当てカウント)に(現在のクロックサイクルにおけるスレッドの選択カウントをサイクル当たりの予想割り当て数で乗算)を加算したものとすることができる。サイクル当たりの予想割り当て数は、現在のクロックサイクルにおいてスレッドに対して追跡されているサイクル当たりの予想割り当て数として静的に定義することができる。
【0067】
図3は、いくつかの可能な実施形態による、7つの連続するクロックサイクルにわたるスレッド調停判断の例をテーブル形式で示している。この例では、3つのスレッドが含まれている。しかしながら、マルチスレッドマイクロプロセッサにおける共有リソースのスレッド調停判断は、2スレッド又は3スレッドより僅かに多く(例えば、4つ又は8つ)を含むことができる。全てのスレッドが各クロックサイクルにおいてリソースの使用を要求し得るわけではないことに留意されたい。スレッドが現在のクロックサイクルにおいて共有リソースの使用を要求していない場合、そのスレッドは現在のクロックサイクルにおけるスレッド調停判断に含まれないので、本明細書に開示しているソフトウォーターマーキング技術によれば、現在のクロックサイクルにおけるスレッド調停判断から除外されない。
図3では、「S」を使用して、対応するスレッドが対応するクロックサイクルにおいて共有リソースを使用するように選択されたことを示す。「R」を使用して、対応するスレッドが、対応するクロックサイクルにおけるスレッド調停判断から除外されたことを示す。何れの場合も、対応するスレッドが、対応するクロックサイクルにおいて共有リソースの使用を要求している場合がある。テーブル内で対応するスレッド及び対応するクロックサイクルのテーブルセルが空白の場合、対応するスレッドは、対応するクロックサイクルにおいて共有リソースの使用を要求している場合があるが、対応するクロックサイクルにおいて共有リソースを使用するように選択されず、また、対応するクロックサイクルにおけるスレッド調停判断から除外されず、又は、対応するスレッドは、対応するクロックサイクルにおいて共有リソースの使用を要求していなかった場合がある。
【0068】
クロックサイクル0において、スレッド2が共有リソースを使用するように選択される。スレッド2は、クロックサイクル1において共有リソースを使用するように再度選択される。クロックサイクル2において、クロックサイクル2におけるスレッド2の割り当て数推定値が割り当て目標を満たしているので、スレッド2は、クロックサイクル2におけるスレッド調停判断から除外される。また、クロックサイクル2において、スレッド1が共有リソースを使用するように選択される。クロックサイクル3におけるスレッド2の割り当て数推定値が割り当て目標を満たしているので、スレッド2は、クロックサイクル3におけるスレッド調停判断から除外される。また、クロックサイクル3において、スレッド3が共有リソースを使用するように選択される。クロックサイクル4において、スレッド1が共有リソースを使用するように選択される。クロックサイクル5において、スレッド2が共有リソースを使用するように選択される。クロックサイクル6において、クロックサイクル6におけるスレッド2の割り当て数推定値が割り当て目標を満たしているので、スレッド2は、スレッド調停判断から除外される。また、クロックサイクル6において、スレッド3が共有リソースを使用するように選択される。
【0069】
スレッドが共有リソースを使用するように選択される毎に、共有リソース内の1つ以上の追加のエントリが、選択されたスレッドに割り当てられ得る。これらの追加の割り当ては、現在のクロックサイクルにおいてスレッドが共有リソースを使用するように選択された数クロックサイクル(例えば、3)後に、スレッドの割り当てカウントに反映され得る。また、スレッドに割り当てられている共有リソース内のエントリは、それらのエントリの命令が処理、ディスパッチ、コミット又はリタイアされたときに、そのスレッドに割り当てられなくなり得る(割り当て解除され得る)。
【0070】
図4は、いくつかの可能な実施形態による、
図3のスレッド調停判断の例を使用したテーブル形式のソフトウォーターマーキングの例を示している。この例では、過去ウィンドウのサイズは3クロックサイクルである。すなわち、現在のクロックサイクルに関して、現在のクロックサイクルの過去ウィンドウは、現在のクロックサイクルに対する過去3クロックサイクルを含む。
【0071】
図4の例は、スレッド2のみに関する追跡された情報及びソフトウォーターマーキング計算を示している。
図3の例では、スレッド1及びスレッド3についても同様の情報及び同様のソフトウォーターマーキングの計算が追跡及び実行される。
【0072】
クロックサイクル0において、スレッド2の割り当て目標は40、割り当てカウントは35、選択カウントは0、選択当たりの想定割り当て数は2である。将来のクロックサイクル3におけるスレッド2の割り当て数推定値は35と計算される。35の割り当て数推定値が40の割り当て目標を満たしていないので、スレッド2は、クロックサイクル0におけるスレッド調停判断に含められる。
【0073】
クロックサイクル1において、スレッド2の割り当て目標は40、割り当てカウントは35、選択カウントは1、選択当たりの想定割り当て数は2である。将来のクロックサイクル4におけるスレッド2の割り当て数推定値は37と計算される。37の割り当て数推定値が40の割り当て目標を満たしていないので、スレッド2は、クロックサイクル1におけるスレッド調停判断から除外されない。
【0074】
クロックサイクル2において、スレッド2の割り当て目標は40、割り当てカウントは37、選択カウントは2、選択当たりの想定割り当て数は2である。将来のクロックサイクル5におけるスレッド2の割り当て数推定値は41と計算される。41の割り当て数推定値が40の割り当て目標を満たしているので、スレッド2は、クロックサイクル2におけるスレッド調停判断から除外される。
【0075】
クロックサイクル3において、スレッド2の割り当て目標は40、割り当てカウントは37、選択カウントは2、選択当たりの想定割り当て数は2である。将来のクロックサイクル6におけるスレッド2の割り当て数推定値は41と計算される。41の割り当て数推定値が40の割り当て目標を満たしているので、スレッド2は、クロックサイクル3におけるスレッド調停判断に含まれない。
【0076】
クロックサイクル4において、スレッド2の割り当て目標は40、割り当てカウントは35、選択カウントは1、選択当たりの想定割り当て数は2である。将来のクロックサイクル7(図示省略)におけるスレッド2の割り当て数推定値は37と計算される。37の割り当て数推定値が40の割り当て目標を満たしていないので、スレッド2は、クロックサイクル4におけるスレッド調停判断に含まれる。
【0077】
クロックサイクル5において、スレッド2の割り当て目標は40、割り当てカウントは37、選択カウントは1、選択当たりの想定割り当て数は2である。将来のクロックサイクル8(図示省略)におけるスレッド2の割り当て数推定値は37と計算される。37の割り当て数推定値が40の割り当て目標を満たしていないので、スレッド2は、クロックサイクル5におけるスレッド調停判断から除外されない。
【0078】
クロックサイクル6において、スレッド2の割り当て目標は40、割り当てカウントは39、選択カウントは1、選択当たりの想定割り当て数は2である。将来のクロックサイクル9(図示省略)におけるスレッド2の割り当て数推定値は41と計算される。41の割り当て数推定値が40の割り当て目標を満たしているので、スレッド2は、クロックサイクル6におけるスレッド調停判断から除外される。
【0079】
この例では、割り当て目標は一定のままであった。しかしながら、上述したように、割り当て目標は、いくつかの可能な実施形態では、スレッドにとっての共有リソースの有用性に基づいて、クロックサイクルにわたって動的に上下に調整され得る。
【0080】
(ソフトウォーターマーキング処理の例)
図5は、いくつかの可能な実施形態による、ソフトウォーターマーキングの処理例のフローチャートを示している。
図5に示す処理500の大部分については、本明細書の他の箇所で、例えば、
図3及び
図4の例に関連して説明している。そのため、明確にするために、処理500は、主に、図示した情報が本明細書の他の箇所で説明した情報と異なる観点で説明することにする。
【0081】
概して、
図5は、マルチスレッドマイクロプロセッサにおいて共有リソースの使用のために競合又は要求しているスレッドのセットに対するソフトウォーターマーキング処理を示している。
【0082】
動作510において、共有リソースに関するスレッドのセット内の各スレッドに対するスレッド別割り当てカウントが保持される。スレッドのスレッド別割り当てカウントは、各クロックサイクルにおいて更新される。現在のクロックサイクルにおけるスレッドのスレッド別割り当てカウントは、スレッド調停判断が行われる現在のクロックサイクルよりも数クロックサイクル前にそのスレッドに割り当てられた共有リソース内のエントリ数を反映する。共有リソース内のエントリがスレッドに割り当てられると、そのスレッドの更新された割り当てカウントは、割り当てられたエントリを含む。また、エントリがスレッドに割り当てられなくなると、そのスレッドの更新された割り当てカウントは、割り当てられていたエントリを含まなくなる。
【0083】
スレッドのセット内の各スレッドのスレッド別割り当てカウントが、現在のクロックサイクルにおけるスレッド調停判断よりも数クロックサイクルだけ遅れる可能性がある。この場合、現在のクロックサイクルにおけるスレッドのスレッド別割り当てカウントは、実際には、現在のクロックサイクルよりも数クロックサイクル前にそのスレッドに割り当てられた共有リソース内のエントリ数を反映し得る。同様に、現在のクロックサイクルにおいてスレッドに割り当てられているエントリ数は、スレッド調停判断が行われる現在のクロックサイクルよりも数クロックサイクル後に、そのスレッドのスレッド別割り当てカウントに反映され得る。この遅れを考慮するために、動作520において、スライドする過去ウィンドウにわたる共有リソースに関するスレッドのセット内の各スレッドに対するスレッド別選択カウントが保持される。現在のクロックサイクルにおけるスレッドのスレッド別選択カウントは、現在のクロックサイクルにおける現在のスライドする過去ウィンドウの間の、スレッドが共有リソースを使用するように選択された回数を反映する。スレッド別選択カウントは、各クロックサイクルにおいて更新され、過去の数クロックサイクル(過去ウィンドウ)を含み得る。例えば、スライディングウィンドウの過去のクロックサイクル数は、スレッド別割り当てカウントが現在のクロックサイクルより遅れているクロックサイクル数と同じであり得る。例えば、現在のクロックサイクルに関して、スレッド別選択カウントは、現在のクロックサイクルを含まない、過去3クロックサイクルを含み得る。上記のように、共有リソースに関するスレッドの選択カウントは、現在のクロックサイクルにおける現在のスライディングウィンドウ内で、スレッド調停判断の結果としてスレッドが共有リソースを使用するように選択された回数を示す。
【0084】
動作530において、スレッドのセット内の各スレッドに対して現在のクロックサイクルにおいてスレッド別割り当て数推定値が計算される。動作530は、各クロックサイクルにおいて、次に選択される対象であり、共有リソースの使用を要求している各スレッドに対して実行される。スレッドの割り当て数推定値は、現在のクロックサイクルにおけるスレッドの割り当てカウントと、スレッドの選択カウントと、に基づいて計算される。例えば、スレッドの割り当て数推定値は、(A)現在のクロックサイクルにおけるスレッドの割り当てカウントと、(B)現在のクロックサイクルにおけるスレッドの選択カウント及び選択当たりの想定割り当て数(例えば、2)の積と、の和(合計)として計算され得る。
【0085】
動作540において、動作530で各スレッドに対して計算された割り当て数推定値が、割り当て目標と比較される。割り当て目標は、グローバル割り当て目標又はスレッド別割り当て目標とすることができる。割り当て目標は、静的に定義することもできるし、動的に調整することもできる。スレッドに対して計算された割り当て数推定値が割り当て目標を満たしている場合、そのスレッドは、現在のクロックサイクルにおけるスレッド調停判断から除外され、その結果、そのスレッドは、現在のクロックサイクルにおいて共有リソースを使用するように選択される対象でなくなる。一方、スレッドに対して計算された割り当て数推定値が割り当て目標を満たしていない場合、そのスレッドは、現在のクロックサイクルにおけるスレッド調停判断の対象のままであり、その結果、そのスレッドは、現在のクロックサイクルにおいて共有リソースを使用するように選択され得る。しかしながら、この場合、そのスレッドは、他の理由により、現在のクロックサイクルにおけるスレッド調停判断から依然として除外され得る。
【0086】
(結び)
上述した詳細な説明では、実施形態によって異なり得る多数の特定の詳細を参照して可能な実施形態を説明してきた。したがって、詳細な説明及び図は、限定的な意味ではなく、例示的な意味のものとして見なされるべきである。
【0087】
詳細な説明における可能な実施形態又はいくつかの可能な実施形態への言及は、文脈上明らかにそうでない場合を除き、その実施形態(複数可)が他の実施形態又は他の複数の実施形態を含まないことを意味することを意図していない。したがって、説明した実施形態は、1つ以上の他の実施形態と特定の組み合わせで組み合わせられ得る。ただし、それらの実施形態が適合しないことを文脈上明らかに示している場合を除く。さらに、説明した実施形態は、限定としてではなく、例示として説明することを意図している。
【0088】
上述した詳細な説明及び添付の特許請求の範囲において、様々な要素を説明するために第1、第2等の用語を場合により本明細書で使用するが、これらの要素は、これらの用語によって限定されるべきではない。これらの用語は、ある要素を他の要素と区別するためにのみ使用する。例えば、本開示の範囲から逸脱することなく、第1のユーザインターフェースを第2のユーザインターフェースと呼ぶ場合があり、同様に、第2のユーザインターフェースを第1のユーザインターフェースと呼ぶ場合がある。第1のユーザインターフェース及び第2のユーザインターフェースは何れもユーザインターフェースであるが、同じユーザインターフェースではない。
【0089】
上述の詳細な説明及び添付の特許請求の範囲で使用する場合、単数形(1つの(「a」、「an」)及びその(「the」))は、文脈上明らかにそうでない場合を除き、複数形も含むものとする。上述した詳細な説明及び添付の特許請求の範囲で使用する場合、「及び/又は」という用語は、関連する列挙された項目のうち1つ以上のあらゆる可能な組み合わせを指し、包含する。
【0090】
上述した詳細な説明及び添付の特許請求の範囲で使用する場合、「~に基づいて(based on)」、「~に応じて(according to)」、「含む(includes)」、「含む(including)」、「備える(comprises)」及び/又は「備える(comprising)」という用語は、記載した特徴、整数、ステップ、動作、要素及び/又は構成要素の存在を示しているが、1つ以上の他の特徴、整数、ステップ、動作、要素、構成要素及び/又はそれらのグループの存在又は追加を排除するものではない。
【手続補正書】
【提出日】2022-05-27
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
複数のスレッドによって使用される複数のエントリを有する共有リソース(210)と、
スレッド調停ロジック(220)と、を備え、
前記スレッド調停ロジック(220)は、
前記複数のスレッドのうち何れかのスレッドと前記共有リソースとに関する割り当て数推定値を計算すること(530)であって、前記割り当て数推定値は、前記複数のエントリのうち、現在のクロックサイクルにおいて前記スレッドに割り当てられているエントリのセットの基数の推定値である、こと(530)と、
前記割り当て数推定値が割り当て目標(221)を満たしているかどうかを判定すること(540)であって、前記割り当て目標は、前記スレッドに割り当てられる超過しない数のエントリの基数である、こと(540)と、
前記スレッドの前記割り当て数推定値が前記割り当て目標を満たすとの判定に基づいて、スレッド調停判断から前記スレッドを除外すること(550)と、
を行うように構成されている、
マルチスレッドマイクロプロセッサコア(100)。
【請求項2】
前記スレッド調停ロジックは、
前記複数のエントリのうち、前記現在のクロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの前記基数に基づいて、前記割り当て数推定値を計算すること(530)を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項3】
前記スレッド調停ロジック(220)は、
前記現在のクロックサイクルの前に前記スレッドが前記共有リソースを使用するように選択された回数に基づいて、前記割り当て数推定値を計算すること(530)を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項4】
前記スレッド調停ロジックは、
(a)前記複数のエントリのうち、前記現在のクロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの基数と、
(b)(b1)前記現在のクロックサイクルの前に前記スレッドが前記共有リソースを使用するように選択された回数及び(b2)所定のエントリ数の積と、
の和に基づいて、前記割り当て数推定値を計算すること(530)を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項5】
前記スレッド調停ロジックは、
複数のクロックサイクル毎に割り当てカウント(222)を保持すること(510)であって、前記複数のクロックサイクル毎の前記割り当てカウントは、前記複数のエントリのうち、各クロックサイクルに対して過去のクロックサイクルにおいて前記スレッドに割り当てられたエントリのセットの前記基数である、こと(510)と、
前記現在のクロックサイクルにおける前記割り当てカウントに基づいて、前記現在のクロックサイクルにおいて前記スレッドに割り当てられている前記エントリのセットの前記基数の前記推定値を計算すること(530)と、
を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項6】
前記スレッド調停ロジックは、
複数のクロックサイクルのスライディングウィンドウにわたって選択カウント(223)を保持すること(520)であって、前記現在のクロックサイクルにおける前記選択カウントは、前記現在のクロックサイクルに先行する複数のクロックサイクルのウィンドウの間にスレッド調停判断によって前記スレッドが前記共有リソースを使用するように選択された回数である、こと(520)と、
前記現在のクロックサイクルにおける前記選択カウントに基づいて、前記現在のクロックサイクルにおいて前記スレッドに割り当てられている前記エントリのセットの前記基数の前記推定値を計算すること(530)と、
を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項7】
前記スレッド調停ロジックは、
前記複数のエントリのうち、前記スレッドが前記共有リソースを使用するように選択された場合に前記スレッドが割り当てると予想されるエントリの数の想定に基づいて、前記割り当て数推定値を計算すること(530)を行うようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項8】
前記複数のスレッドの各スレッドについて、前記各スレッド及び前記共有リソースに関する割り当てカウント(222)を保持するための対応するレジスタと、
前記複数のスレッドの各スレッドについて、前記各スレッド及び前記共有リソースに関する選択カウント(223)を保持するための対応するレジスタと、をさらに備え、
前記スレッド調停ロジックは、前記スレッドの前記割り当てカウントを保持する前記対応するレジスタと、前記スレッドの前記選択カウントを保持する前記対応するレジスタと、に基づいて、前記割り当て数推定値を決定するようにさらに構成されている、
請求項1のマルチスレッドマイクロプロセッサコア。
【請求項9】
前記スレッド調停ロジックは、
前記スレッド調停判断の結果として、前記複数のスレッドのうち、前記共有リソースを使用するように前記スレッド以外のスレッドを選択することを行うようにさらに構成されている、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項10】
前記共有リソースは、前記マルチスレッドマイクロプロセッサコアのロードキュー、リザベーションステーション、又は、レジスタファイルである、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項11】
前記共有リソースは、所定の総数のエントリを有し、エントリの前記超過しない数は、エントリの前記総数である、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項12】
前記共有リソースは、所定の総数のエントリを有し、エントリの前記超過しない数は、エントリの前記総数未満である、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【請求項13】
前記スレッド調停ロジック(220)は、
前記スレッドの前記割り当て数推定値が前記割り当て目標に等しい
又は前記割り当て目標を超えているという判定に基づいて、前記スレッドをスレッド調停判断から除外すること(550)を行うようにさらに構成されている、
請求項1~8の何れかのマルチスレッドマイクロプロセッサコア。
【国際調査報告】