(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-11-30
(54)【発明の名称】マルチスレッドマイクロプロセッサにおける共有リソース割り当て
(51)【国際特許分類】
G06F 9/50 20060101AFI20221122BHJP
G06F 9/46 20060101ALI20221122BHJP
【FI】
G06F9/50 120A
G06F9/46 410
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022519140
(86)(22)【出願日】2020-09-11
(85)【翻訳文提出日】2022-05-20
(86)【国際出願番号】 US2020050388
(87)【国際公開番号】W WO2021061427
(87)【国際公開日】2021-04-01
(32)【優先日】2019-09-27
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】カイ トロエステル
(72)【発明者】
【氏名】ニール マーケットカー
(72)【発明者】
【氏名】マシュー ティー. ソベル
(72)【発明者】
【氏名】シュリーニバス ケシャフ
(57)【要約】
各スレッドの共有リソースの有用性に基づいて、マルチスレッドマイクロプロセッサにおけるスレッドに共有リソースを割り当てるアプローチが提供される。スレッドの共有リソースの有用性は、スレッドに割り当てられた共有リソース内のエントリの数と、共有リソース内でスレッドが有するアクティブエントリの数と、に基づいて決定される。並列度が低く、共有リソース内で多数のエントリが割り当てられ、共有リソース内で少数のアクティブエントリを有するスレッドは、共有リソース内の少ないエントリで効率的に動作することができ、共有リソース内の割り当て制限を低減させることができる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
マルチスレッドマイクロプロセッサであって、
複数のエントリを有する共有リソースと、
共有リソースロジックと、を備え、
前記共有リソースロジックは、
前記共有リソース内の前記複数のエントリから、第1の期間中に複数のスレッドのうち何れかのスレッドに割り当てられるエントリの数と
前記第1の期間中の前記スレッドに対する前記共有リソース内のアクティブエントリの数と、
を決定することと、
前記第1の期間中に前記スレッドに割り当てられる前記エントリの数と、前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数と、を使用して、第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を変更することと、
を行うように構成されている、
マルチスレッドマイクロプロセッサ。
【請求項2】
前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を変更することは、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる前記割り当て制限を低減することを含む、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項3】
前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限は、増分量だけ、又は、低減した割り当て制限まで低減する、
請求項2のマルチスレッドマイクロプロセッサ。
【請求項4】
前記共有リソースロジックは、前記第1の期間中に前記スレッドに割り当てられた前記エントリの数が第1の閾値を満たすことと、前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数が第2の閾値を満たすことと、の両方を判別したことに応じて、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を低減するように構成されている、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項5】
前記共有リソースロジックは、
前記スレッドに対する有用性メトリックを決定することであって、前記有用性メトリックは、前記スレッドに割り当てられた前記エントリの数に対する、前記スレッドに対する前記共有リソース内の前記アクティブエントリの数の比率である、ことと、
前記スレッドに対する前記有用性メトリックを有用性閾値と比較して、前記スレッドに対する前記割り当て制限を変更するかどうかを決定することと、
を行うように構成されている、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項6】
前記共有リソースロジックは、
クロックサイクルウィンドウのクロックサイクル毎に、前記スレッドに対する前記有用性メトリックを決定して前記有用性閾値と比較することと、
前記クロックサイクルウィンドウのクロックサイクル毎に、前記スレッドに対する前記有用性メトリックが前記有用性閾値を満たしていないことに応じて、前記スレッドに対する前記割り当て制限を低減することと、
を行うように構成されている、
請求項5のマルチスレッドマイクロプロセッサ。
【請求項7】
前記共有リソースロジックは、前記スレッドに対する前記有用性メトリックに基づいて、前記スレッドに対する前記割り当て制限を変更するように構成されている、
請求項5のマルチスレッドマイクロプロセッサ。
【請求項8】
前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を変更することは、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を増大させることを含む、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項9】
前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を増大させることは、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を、前記共有リソース内の利用可能なエントリの総数まで増大させることを含む、
請求項8のマルチスレッドマイクロプロセッサ。
【請求項10】
前記共有リソースロジックは、
前記第1の期間中に前記スレッドに割り当てられた前記エントリの数が第1の閾値を満たさないこと、又は、前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数が第2の閾値を満たさないこと、の何れかを判別したことに応じて、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を増大させるように構成されている、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項11】
前記第1の閾値の値及び前記第2の閾値の値は、前記スレッドの期間に割り当てられた前記共有リソース内の前記エントリの数に基づいて選択される、
請求項10のマルチスレッドマイクロプロセッサ。
【請求項12】
前記共有リソースロジックは、
前記複数の期間において前記スレッドに割り当てられた前記エントリの数が第1の閾値を満たさないこと、又は、前記複数の期間における前記スレッドに対する前記共有リソース内の前記アクティブエントリの数が第2の閾値を満たさないこと、の何れかを判別したことに応じて、前記共有リソースについて前記スレッドに割り当てられる割り当て制限を増大させるように構成されている、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項13】
前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数は、前記第1の期間中の前記スレッドに対する前記共有リソース内のアクティブエントリの最小数である、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項14】
前記第1の期間の前に、前記スレッドには、前記共有リソース内で利用可能な前記共有リソース内のエントリの総数である割り当て制限が割り当てられる、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項15】
前記共有リソースは、ロードキュー、レジスタファイル、又は、リザベーションステーションのうち1つ以上である、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項16】
前記第1の期間は第1のクロックサイクルウィンドウであり、前記第2の期間は第2のクロックサイクルウィンドウである、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項17】
コンピュータが実行する方法であって、
マルチスレッドマイクロプロセッサ内の共有リソースロジックが、
共有リソース内の複数のエントリから、第1の期間中に複数のスレッドのうち何れかのスレッドに割り当てられるエントリの数と
前記第1の期間中の前記スレッドに対する前記共有リソース内のアクティブエントリの数と、
を決定することと、
前記第1の期間中に前記スレッドに割り当てられる前記エントリの数と、前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数と、を使用して、第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を変更することと、を含む、
方法。
【請求項18】
前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を変更することは、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる前記割り当て制限を低減することを含む、
請求項17の方法。
【請求項19】
前記共有リソースロジックが、前記第1の期間中に前記スレッドに割り当てられた前記エントリの数が第1の閾値を満たすことと、前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数が第2の閾値を満たすことと、の両方を判別したことに応じて、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を低減することを含む、
請求項18の方法。
【請求項20】
前記スレッドに対する有用性メトリックを決定することであって、前記有用性メトリックは、前記スレッドに割り当てられた前記エントリの数に対する、前記スレッドに対する前記共有リソース内の前記アクティブエントリの数の比率である、ことと、
前記スレッドに対する前記有用性メトリックを有用性閾値と比較して、前記スレッドに対する前記割り当て制限を変更するかどうかを決定することと、を含む、
請求項17の方法。
【請求項21】
マルチスレッドシステムであって、
複数のエントリを有する共有リソースと、
共有リソース割り当てロジックと、を備え、
前記共有リソース割り当てロジックは、
前記マルチスレッドシステムで実行するスレッドに割り当て制限を割り当てることであって、前記割り当て制限は、前記スレッドに割り当てられた以前の割り当て制限と、前記スレッドの前記共有リソース内の以前のアクティブエントリの数と、に基づいて決定される、ことを行うように構成されている、
マルチスレッドシステム。
【発明の詳細な説明】
【背景技術】
【0001】
このセクションに記載されたアプローチは、追及され得るアプローチであるが、必ずしも以前に着想され、追及されたアプローチではない。したがって、特に断りのない限り、このセクションに記載された何れかのアプローチがこのセクションに含まれるという理由だけで、従来技術として適格であると想定されるべきではない。更に、このセクションに記載される何れかのアプローチがこのセクションに含まれるという理由だけで、よく理解され、日常的であり、又は、従来通りであると想定されるべきではない。
【0002】
マルチスレッドマイクロプロセッサは、複数のスレッドによって使用されるロードキュー及びリザベーションステーション等の共有リソースを有することが多い。共有リソースは、多くの場合、先着順(first come, first served)を原則としてスレッドに割り当てられる。このアプローチによる問題点は、共有リソースを使用するスレッドが異なる実行特性を有する場合、或るスレッドが共有リソースの過剰なシェアを取得することによって、他のスレッドの効率的な実行を妨げる可能性があることである。例えば、或るスレッドが、ロードキュー内の大部分のエントリを取得する場合がある。この場合、他のスレッドがロードキューに多くのエントリを有することで利益を得ることができるのに、それらのスレッドが利用できるエントリが少なすぎると、他のスレッドのパフォーマンスが低下する可能性がある。
【0003】
この問題に対する技術的な解決策の1つは、スレッドによる共有リソースの使用を制限することである。例えば、スレッドに割り当てられた共有リソース内のエントリの数は、全てのスレッドで又は個々のスレッド単位で上限を設定することができる。しかしながら、スレッドの実行特性が著しく変化することがあり、一部のスレッドは、共有リソース内の制限された数以上のエントリを有することで利益を得る可能性があるので、特定のスレッドへの影響を把握せずにスレッドに割り当てられるエントリの数を制限すると、全体的なパフォーマンスが低下することがある。よって、マルチスレッドマイクロプロセッサにおける共有リソースの使用を管理するためのより良好なアプローチが求められている。
【0004】
実施形態は、添付図面に例示として示されており、限定するものではない。同様の符号は、同様の要素を指す。
【図面の簡単な説明】
【0005】
【
図1】マルチスレッドマイクロプロセッサを表すブロック図である。
【
図2】共有リソースへのアクセスを管理するために共有リソースロジックによって使用される情報のテーブルを表すブロック図である。
【
図3】スレッドへの共有リソースの割り当てを変更するように共有リソースロジックが動作するタイムラインを表すブロック図である。
【
図4】スレッドに対する共有リソースの有用性に基づいてマルチスレッドマイクロプロセッサ上のスレッドに共有リソースを割り当てることを表すフローチャートである。
【
図5A】第1のクロックサイクルウィンドウにわたるスレッドに対して取得された例示的な使用状況データを表す図である。
【
図5B】第2のクロックサイクルウィンドウにわたるスレッドに対して取得された例示的な使用状況データを表す図である。
【
図5C】第3のクロックサイクルウィンドウにわたるスレッドに対して取得された例示的な使用状況データを表す図である。
【
図5D】第4のクロックサイクルウィンドウにわたるスレッドに対して取得された例示的な使用状況データを表す図である。
【発明を実施するための形態】
【0006】
以下の説明では、説明のために、実施形態の十分な理解を提供するために、多数の具体的な詳細が示されている。しかしながら、実施形態が、それらの具体的な詳細なしに実施され得ることは、当業者には明らかであろう。他の例では、実施形態を不必要に不明瞭にすることを回避するために、周知の構造及びデバイスがブロック図の形式で示されている。
I.概要
II.アーキテクチャ
III.有用性に基づいた共有リソースへのスレッドアクセスの管理
A.概要
B.スレッドに対する共有リソース割り当て制限の変更
C.有用性メトリック
D.リソース割り当て変動の対処
【0007】
(I.概要)
マルチスレッドマイクロプロセッサにおいて、各スレッドに対する共有リソースの有用性に基づいてスレッドに共有リソースを割り当てるアプローチが提供される。スレッドに対する共有リソースの有用性は、スレッドに割り当てられた共有リソース内のエントリの数と、共有リソース内でスレッドが有するアクティブエントリの数と、に基づいて決定される。共有リソース内で多数のエントリが割り当てられ、共有リソース内で少数のアクティブエントリを有するスレッドは、並列度が低いことを示し、共有リソース内で少ないエントリで効率的に動作することができ、共有リソース内での割り当てを減らすことができる。本明細書で使用される「アクティブエントリ」という用語は、ワークを実行している(例えば、命令を準備又は実行するために現在使用されている)共有リソース内のエントリを指す。異なるスレッドは、同じ共有リソースに対して異なるレベルの有用性を有することがあり、本アプローチは、任意の数のスレッド及び共有リソースに適用可能である。このアプローチにより、或るスレッドが共有リソースのエントリを大量に取得して、その共有リソースを使用する他のスレッドのパフォーマンスを低下させる可能性を低減することができる。
【0008】
(II.アーキテクチャ)
図1は、制御ユニット110と、算術論理ユニット(ALU)120と、スレッドレジスタ130と、共有リソース140と、共有リソースロジック150と、を含むマルチスレッドマイクロプロセッサ100を表すブロック図である。スレッドレジスタ130は、特定のスレッド専用のレジスタである。マイクロプロセッサは、任意の数のスレッドをサポートすることができるが、実施形態は、特定の数のスレッドに限定されない。共有リソース140は、マルチスレッドマイクロプロセッサ100において複数のスレッドによって使用される任意のタイプのリソースであってもよい。共有リソース140の例は、ロードキュー、レジスタファイル、リザベーションステーション等を含むが、これらに限定されない。
【0009】
共有リソースロジック150は、以下により詳細に説明するように、スレッドに対する共有リソース140の有用性に基づいて、マルチスレッドマイクロプロセッサ100上で実行するスレッドへの共有リソース140の割り当てを管理する。共有リソースロジック150は、コンピュータハードウェア、コンピュータソフトウェア、又は、コンピュータハードウェア及びソフトウェアの任意の組み合わせによって実装されてもよい。共有リソースロジック150は、説明目的で個別の要素として
図1に表されているが、共有リソースロジック150は、マルチスレッドマイクロプロセッサ100内の他の要素(例えば、リソース割り当てロジック、スレッド切り替えロジック及びディスパッチ規制ロジック)に組み込まれてもよい。マルチスレッドマイクロプロセッサ100は、
図1に表されていないが、特定の実施形態に応じて変化することができる追加の要素を含んでもよい。
【0010】
(III.有用性に基づいた共有リソースへのスレッドアクセスの管理)
(A.概要)
共有リソースロジック150は、スレッドに対する共有リソース140の有用性を評価し、有用性に基づいて、共有リソース140に対するスレッドに割り当てられた割り当て制限を変更する。本明細書で使用される「割り当て制限」という用語は、スレッドに割り当てることができる共有リソース140内のエントリの数に対する制限である。
図2は、共有リソース140へのアクセスを管理するために共有リソースロジック150によって使用される情報のテーブル200を表すブロック図である。テーブル200内の各行は、マルチスレッドマイクロプロセッサ100上で実行するスレッドに対応する。スレッド毎のデータの列は、第1の列において、スレッドを識別するデータを含み、第2の列において、スレッドに現在割り当てられている共有リソース140内のエントリの数を含み、第3の列において、共有リソース140内のスレッドに対するアクティブエントリの数を含み、第4の列において、有用性メトリックを含む。有用性メトリックは、スレッドに現在割り当てられているエントリの数に対するアクティブエントリの数の割合である。テーブル200内の情報は、マルチスレッドマイクロプロセッサ100の内部又は外部で維持されてもよい。各スレッドに割り当てられた共有リソース140内のエントリの数及びスレッド毎の共有リソース140内のアクティブエントリの数は、例えば、カウンタ又は他のハードウェア要素を使用して追跡されてもよい。
【0011】
図3は、共有リソースロジック150が、スレッドに対する共有リソース140の有用性に基づいて、共有リソース140に対してスレッドに割り当てられた割り当て制限を変更するタイムライン300を表すブロック図である。タイムライン300は、クロックサイクルウィンドウ(CCW)の形式にあるNの数の時間周期(期間)を含み、各CCWは、クロックサイクルのセットである。各CCW内のクロックサイクルの数は、パフォーマンスモデリングを使用して決定されてもよいし、特定の実施形態に応じて変化してもよい。パフォーマンスモデリングは、スレッドが共有リソース内の非常に多くのエントリを消費して他のスレッドのパフォーマンスを低下させることを防止するために十分に迅速に反応することと、スレッドが利用可能な共有リソース内のエントリの数を過度に制限しないことと等の要因をバランスさせることができる。実施形態では、CCWの各々は、16のクロックサイクルを含む。クロックサイクルの数は、共有リソースロジック150において構成されてもよく、例えば、オペレーティングシステムを介して選択可能であってもよい。CCWが連続的であるものとして
図3に表されているが、CCWは、連続的であることに限定されず、インタースティシャル(interstitial)クロックサイクルを有してもよい。また、CCW間のインタースティシャルサイクルの数は、CCW間で変化してもよいし、経時的に変化してもよい。クロックサイクルウィンドウの形式にある時間周期のコンテキストで実施形態が本明細書で説明されるが、実施形態は、クロックサイクルウィンドウそのものに限定されない。
【0012】
時間T0において開始して、スレッドによる共有リソース140の使用は、CCW1にわたって監視され、CCW1の終わりである時間T1において、スレッドによる共有リソース140の使用が評価され、スレッドに割り当てられた割り当て制限が次のCCW2について更新される。CCW2は、CCW1の後に任意の数のクロックサイクルを発生させてもよいし、CCW1とCCW2との間のインタースティシャルクロックサイクルの数が経時的に変化してもよいことに留意されたい。実施形態によれば、共有リソースロジック150は、他のスレッドのパフォーマンスを潜在的に低下させるのに十分な共有リソース内の多くの数のエントリが割り当てられているスレッドを識別する。次に、共有リソースロジック150は、これらのスレッドの何れかが、共有リソース150内で少数のアクティブエントリを有するかどうかを判別する。共有リソース140内で多くの数のエントリが割り当てられており、共有リソース140内で少数のアクティブエントリを有するスレッドは、共有リソース150内の少ないエントリで効率的に動作することができるので、それらの割り当て制限が低減される。
【0013】
実施形態によれば、上述した判別は、閾値(例えば、割り当て閾値及びアクティブエントリ閾値)を使用して行われる。特定のスレッドに対し、特定のスレッドに現在割り当てられている共有リソース内のエントリの数が割り当て閾値を上回っており、特定のスレッドに対する共有リソース内のアクティブエントリの数がアクティブエントリ閾値未満である場合、特定のスレッドに対する割り当て制限が低減される。
【0014】
割り当て閾値は、パフォーマンスモデリングを使用して設計されてもよく、共有リソース内の非常に多くの数のエントリを消費しており、すなわち、共有リソースを独占することによって他のスレッドのパフォーマンスを潜在的に悪化させるスレッドを識別するために選択される。アクティブエントリ閾値は、並列度が低く、したがって、共有リソース内のエントリ数が少なくても効率的に動作する可能性が高いスレッドを識別するために選択される。並列度が低いとは、例えば、スレッドが一連の追加命令を実行している場合に、各命令が前の命令の結果に依存するような場合である。これらの2つの閾値を組み合わせて使用することで、共有リソース内の少なくとも閾値数のエントリを有し且つ並列度が低いスレッドが共有リソース内の多くのエントリを消費して、他のスレッドのパフォーマンスを低下させるのを防止することができる。
【0015】
(B.スレッドに対する共有リソース割り当て制限の変更)
図4は、スレッドに対する共有リソースの有用性に基づいて、マルチスレッドマイクロプロセッサ上のスレッドに共有リソースを割り当てることを表すフローチャート400である。
【0016】
ステップ402では、共有リソースに対する初期割り当て制限は、マルチスレッドマイクロプロセッサ上のスレッドに対して確立される。現在の例では、共有リソース140に対する初期割り当て制限は、マルチスレッドマイクロプロセッサ100上で実行するスレッドT0~T3に対して確立される。
【0017】
実施形態によれば、初期割り当て制限は、共有リソース内で利用可能なエントリの総数である。例えば、共有リソース140が50個のエントリを有するロードキューであることを想定すると、スレッドT0~T3の各々に対して50の初期割り当て制限が確立される。全てのスレッドの初期割り当て制限として共有リソース140内の利用可能なエントリの総数を割り当てることは、何れかのスレッドが共有リソース140内のエントリを大量に消費し、他のスレッドのパフォーマンスを低下させることを潜在的に可能にすることに留意されたい。代わりに、初期割り当て制限は、共有リソース内で利用可能なエントリの総数未満であってもよい。例えば、50個のエントリを有するロードキューに対し、スレッドT0~T3の各々に対して10の初期割り当て制限が確立されてもよい。
【0018】
初期割り当て制限は、スレッド特有であってもよい。例えば、高優先度スレッド(例えば、特殊設計を有するスレッド、又は、特定のサービス品質(QOS)要件を満たすことに関与するスレッド)は、低い優先度を有する他のスレッドよりも大きい初期割り当て制限が割り当てられてもよい。先の例では、高優先度スレッドに50の初期割り当て制限が割り当てられてもよく、他のスレッドに30の初期割り当て制限が割り当てられる。初期割り当て制限は、共有リソースロジック150において事前に構成されてもよいし、共有リソースロジック150によって使用される構成データに記憶されてもよいし、オペレーティングシステムを介して構成されてもよい。また、共有リソースロジック150は、例えば、電源投入時、又は、オペレーティングシステムコマンド等のコマンドを受信したことに応じて、スレッド割り当て制限を初期割り当て制限にリセットしてもよい。
【0019】
ステップ404では、スレッド毎の割り当てられたエントリの数及びアクティブエントリの数は、クロックサイクルの第1のセットにわたって決定される。例えば、共有リソースロジック150は、CCW1にわたるスレッドT0~T3に対する割り当てられたエントリの数及びアクティブエントリの数を決定してもよい。
図5Aは、CCW1にわたるスレッドT0~T3に対する例示的な使用状況データを表す。この例では、初期割り当て制限は、CCW1にわたるスレッドT0~T3に対して50である。アクティブエントリの数は、ワークを現在行っているエントリの数であり、命令が処理されるにつれてCCW1の間に変化することがある。したがって、実施形態によれば、アクティブエントリの数は、CCW1間の最小数のアクティブエントリである。
図5Aに表す例では、スレッドT1は、CCW1間の最大数のアクティブエントリを有しており、他のスレッドに対して最高レベルの並列性を示しており、スレッドT0は、CCW1間の最小数のアクティブエントリを有している。これに対応して、スレッドT1は、共有リソース140内でより多くのエントリを有することから、スレッドT0よりも多くの利益を得る。
【0020】
ステップ406では、第1の/次のスレッドが選択される。本実施例では、スレッドT0が選択されるが、評価される第1のスレッドを選択するために任意のアプローチが使用されてもよい。ステップ408では、選択されたスレッドに割り当てられたエントリの数が割り当て閾値を越えるかどうかの判別が行われる。例えば、共有リソースロジック150は、スレッドT0に割り当てられた共有リソース140内のエントリの数が割り当て閾値よりも多いかどうかを判別する。割り当て閾値が10であることを想定すると、スレッドT0に割り当てられた12個のエントリは10の割り当て閾値よりも多いので、割り当て閾値が満たされ、制御がステップ410に進む。これは、スレッドT0が、他のスレッドのパフォーマンスを潜在的に低下させるのに十分な共有リソース140内の多数のエントリが割り当てられていることを意味する。
【0021】
ステップ410では、スレッドのアクティブエントリの数がアクティブエントリ閾値未満であるかどうかの判別が行われる。上述したように、アクティブエントリ閾値は、並列度が低く、したがって、共有リソースの割り当てが少なくても効率的に動作する可能性が高いスレッドを識別するために使用される。本実施例では、共有リソースロジック150は、共有リソース140内のスレッドT0におけるアクティブエントリの数がアクティブエントリ閾値未満であるかどうかを判別する。アクティブエントリ閾値が3であることを想定すると、スレッドT0に対する1つのアクティブエントリは3のアクティブエントリ閾値未満であるため、アクティブエントリ閾値が満たされ、制御がステップ412に進む。ステップ408及びステップ410における両方の閾値を満たすことにより、スレッドT0は、他のスレッドのパフォーマンスを潜在的に低下させるのに十分な多数のエントリを共有リソース140内に有し、且つ、並列度が低い。したがって、スレッドT0は、共有リソース140内の少ない数のエントリで効率的に動作することができる。
【0022】
ステップ412では、スレッドが他のスレッドのパフォーマンスを悪化させることを防止するために、共有リソースに対するスレッドの割り当て制限が低減される。本実施例では、共有リソース140に対するスレッドT0の割り当て制限は、次の時間周期、すなわち、次のクロックサイクルウィンドウCCW2間に低減される。割り当て制限に対する低減量は、特定の実施形態に応じて変化してもよく、実施形態は、任意の特定の低減方法に限定されない。実施形態によれば、スレッドの割り当て制限は、低減した割り当て制限まで低減される。例えば、共有リソース140内のスレッドT0に割り当てられたエントリは、50から10に低減されてもよい。低減した割り当て制限は、共有リソースロジック150において構成されてもよいし、及び/又は、オペレーティングシステムを介して選択可能であってもよい。低減した割り当て制限の値は、モデリングを使用して決定されてもよく、スレッドが他のスレッドのパフォーマンスを低下させることを防止するのに十分に低い値である。
【0023】
共有リソースに対するスレッドの割り当て制限を、低減した割り当て制限まで低減させる代わりに、スレッドの割り当て制限は、段階的に低減されてもよい。例えば、スレッドT0に割り当てられたエントリの数は、50から49に1つずつ低減されてもよいし、50から40に10ずつ低減されてもよい。追加の計算的コストのために、より複合的な方法が実施されてもよい。例えば、低減は、アクティブエントリ閾値に対するアクティブエントリのレベルに基づいてもよい。この例では、アクティブエントリ閾値の50%であるアクティブエントリの数は、スレッドに割り当てられたエントリの数における50%の低減を結果としてもたらす。実施形態によれば、スレッドの割り当て制限は、そのスレッドに対する有用性メトリックに基づいて低減される。
【0024】
実施形態によれば、スレッドの割り当て制限を低減させることによって、スレッドが即時にエントリを放棄することを引き起こさない。むしろ、スレッドは、ワークが完了するとエントリを通常通り放棄するが、割り当てられたエントリのスレッドの現在の数が低減した割り当て制限を下回るまで、スレッドは、共有リソース140内の追加のエントリが付与されない。先の例では、スレッドT0に対して割り当てられた共有リソース140内のエントリの数が10未満になるまで、共有リソース140内の追加のエントリがスレッドT0に付与されない。
【0025】
ステップ408において、スレッドに割り当てられたエントリの数が割り当て閾値以下である場合、又は、ステップ410において、スレッドに対するアクティブエントリの数がアクティブエントリ閾値以上である場合に、制御がステップ414に進み、スレッドの割り当て制限がリセット、すなわち、増大する。換言すれば、共有リソース140内の少数のエントリがスレッドに割り当てられている場合、そのスレッドは、他のスレッドのパフォーマンスを低下させる脅威にならない。或いは、スレッドが多数のアクティブエントリを有し、並列度が高い場合、そのスレッドは、共有リソース140内でより多くのエントリを有することから利益を得ることができ、その割り当て制限が低減されない。実施形態によれば、スレッドの割り当て制限がリセットされると、スレッドの割り当て制限は、初期割り当て制限に変更される。或いは、スレッドの割り当て制限は、特定の量だけ増加(増大)(例えば、1つの増加、又は、5若しくは10等のより多くの増加)してもよい。この増加は、共有リソースロジック150において構成されてもよいし、例えば、オペレーティングシステムを介して選択可能であってもよい。スレッドの割り当て制限も、スレッドに対する有用性メトリックに基づいて増加してもよい。
【0026】
スレッドの割り当て制限がステップ412において低減され、又は、ステップ414においてリセット(増大)された後、ステップ416では、さらなるスレッドが処理される必要があるかどうかの判別が行われる。そうである場合、制御がステップ406に戻り、同じ方法で次のスレッドが選択及び処理される。全てのスレッドの全てが処理されると、ステップ418において処理が完了する。この処理は、任意の数のスレッドについて、任意の回数だけ繰り返されてもよい。
【0027】
実施形態によれば、上述したテスト(試験)は、全てのクロックサイクルの後に実行され、ステップ414に到達した場合、スレッドの割り当て制限は、次のCCWのための初期割り当て制限にリセットされる。また、そのスレッドは、現在のCCW間にもはやテストされない。現在のCCWの間に特定のスレッドに対してステップ414に到達しない場合、そのスレッドの割り当て制限は、現在のCCW及び次のCCWについて低減されたままである。他の例は、CCWにわたる割り当てられたエントリ及びアクティブエントリの平均数を使用すること、又は、CCWの終了時に、割り当てられたエントリ及びアクティブエントリの数を使用することを含む。
【0028】
割り当て制限を低減させるスレッドを識別するために割り当て閾値及びアクティブエントリ閾値の両方を使用することは、マルチスレッドマイクロプロセッサにおいて並列度の低いスレッドが、共有リソースを使用する他のスレッドのパフォーマンスを低下させることをどのように防止するかという技術的問題に対処する。この技術的解決策は、割り当て閾値によって表されるように、共有リソース内の少なくとも閾値数のエントリが現在割り当てられているスレッドを識別し、その結果、このスレッドが、共有リソースを潜在的に「独占」し、他のスレッドが利用可能な共有リソース内のエントリを制限している。次いで、アクティブエントリ閾値に基づいて、識別されたスレッドが共有リソース内で非常に少ないアクティブエントリ、すなわち、ワークを行っているエントリを有するかどうかの判別が行われる。少数のアクティブエントリは、並列度が低く、共有リソース内のエントリ数が少なくてもこのスレッドが効率的に動作し続けることが可能であることを示しているので、このスレッドに対する割り当て制限が低減される。逆に、割り当てられたエントリが少ないスレッドや、多数のアクティブエントリを有するスレッドは、割り当て制限が低減されない。
【0029】
経時的に、スレッドの実行特性は、例えば、異なる命令のために変わることがある。したがって、スレッドに割り当てられた共有リソース内のエントリの数、及び、そのスレッドに対するアクティブエントリの数も経時的に変わることがある。よって、それらの割り当て制限が当初低減されなかったスレッドは、後のCCWの後にそれらの割り当て制限が低減される可能性がある。
【0030】
先の例を続けると、
図5Bは、CCW2にわたるスレッドT0~T3に対して取得された例示的な使用状況データを表す。スレッドT0に対する割り当て制限は、CCW1の後に行われた下方修正後の10である。それらのスレッドに対する割り当てられたエントリの数の全てが割り当て閾値未満であるので、スレッドT1~T3に対する割り当て制限は、50の初期割り当て制限までリセットされている。
【0031】
CCW2の後の時間T2において、上述したテストが再度実行され、スレッドT0は、アクティブエントリの数が1から2に僅かに増大したが、割り当て閾値を満たすことと(割り当てられたエントリ>10)、アクティブエントリ閾値を満たすことと(アクティブエントリ<3)の両方を満足するので、スレッドT0に対する割り当て制限は10のままである。しかしながら、スレッドT2に割り当てられた12個のエントリが10の割り当て閾値よりも多く、2つのアクティブエントリが3のアクティブエントリ閾値未満であるので、スレッドT2も両方の閾値を満たす。したがって、スレッドT2に対する割り当て制限は、クロックサイクルの次のセット、すなわち、CCW3について10に低減される。スレッドT1,T3の両方に対する割り当て制限は、割り当てられたエントリのそれらの対応する数が割り当て閾値未満であるので、50の初期割り当て制限にリセットされる。
【0032】
図5Cは、時間T3におけるCCW3にわたるスレッドT0~T3に対して取得された例示的な使用状況データを表す。CCW3の間、スレッドT0に対するCCW1の後に、スレッドT2に対してCCW2の後に行われた下方修正を理由に、スレッドT0,T2に対する割り当て制限はまだ10である。CCW3では、スレッドT0に対して割り当てられたエントリの数は、割り当て閾値を上回ったままであるが、スレッドT0に対するアクティブエントリの数は、2から5まで増大している。したがって、スレッドT0に対する割り当て制限は、CCW4について50の初期割り当て制限にリセット(増大)される。CCW3の間、スレッドT2の12個の割り当てられたエントリは、割り当て閾値を越え続け、スレッドT2は、3のアクティブエントリ閾値未満である1つのアクティブエントリのみを有している。したがって、スレッドT2は、CCW4内に10の低減した割り当て制限を続ける。スレッドT1に対する11個の割り当てられたエントリが10の割り当て閾値を超える間、7個のアクティブエントリが3のアクティブエントリ閾値を超えたことを理由に、スレッドT1に対する割り当て制限は、50の初期割り当て制限にリセットされる。6個の割り当てられたエントリが10の割り当て閾値未満であることを理由に、スレッドT3に対する割り当て制限は、50の初期割り当て制限にリセットされる。よって、スレッドT1が共有リソース140内のより多くの数のエントリを使用している間、スレッドT1は、アクティブエントリ閾値よりも大きいレベルの並列性を有し、したがって、その割り当て制限が低減されない。
【0033】
図5Dは、時間T4におけるCCW4にわたるスレッドT0~T3に対して取得された例示的な使用状況データを表す。スレッドT0に対して割り当てられたエントリの数は、スレッドT0がワークを完了し、共有リソース140内のエントリが解放されるにつれて、CCW4にわたって11から8まで減少している。CCW4の終わりにおいて、スレッドT0に対して割り当てられたエントリの数が割り当て閾値未満であるので、スレッドT0に対する割り当て制限は、50の初期割り当て制限にリセットされる。スレッドT1に対して割り当てられたエントリの数は、CCW4にわたって増大し続けているが、スレッドT1に対する割り当て制限は、アクティブエントリの数がアクティブエントリ閾値を超えるので、初期割り当て制限に再度リセットされる。スレッドT2に対して割り当てられたエントリの数は、スレッドT2がワークを完了し、共有リソース140内のエントリが解放されるにつれて、CCW4にわたって12から10まで減少している。CCW4の終わりにおいて、スレッドT2に対して割り当てられたエントリの数が10の割り当てられた閾値よりもまだ多く、アクティブエントリの数がアクティブエントリ閾値未満であるので、スレッドT2に対する割り当て制限は、10に低減したままである。CCW4にわたって、スレッドT3に対して割り当てられたエントリの数は、6から10まで増大しているが、アクティブエントリの数がアクティブエントリ閾値を超えるので、スレッドT2に対する割り当て制限は、50の初期割り当て制限にリセットされる。よって、スレッドT1及びスレッドT3の両方が共有リソース140を独占する潜在性を有する間、それらの両方は、アクティブエントリ閾値を超える数のアクティブエントリを有し、高レベルの並列性を示す。したがって、それらの割り当て制限は、初期割り当て制限にリセットされる。
【0034】
(C.有用性メトリック)
本明細書で既に説明したように、有用性メトリックは、スレッドに現在割り当てられているエントリの数に対するアクティブエントリの数のスレッド特有の割合(比率)である。有用性メトリックは、N個のクロックサイクル毎に、又は、サイクルの周期にわたってクロックサイクル毎に計算されてもよい。例えば、有用性メトリックは、N個のクロックサイクルにわたる平均有用性メトリックとして計算されてもよい。
【0035】
有用性メトリックは、スレッドに対する割り当て制限が変更されるべきかどうかを判別するための割り当て閾値及びアクティブエントリ閾値の代替例として使用されてもよい。例えば、
図4におけるステップ408及びステップ410の代わりに、有用性メトリックは、スレッドに対する割り当て制限が変更されるべきかどうかを判別するために、選択されたスレッドに対して計算されてもよいし、有用性閾値と比較されてもよい。このテストは、クロックサイクル毎に、N個のクロックサイクル毎に、又は、サイクルの周期にわたって実行されてもよいし、個々の有用性メトリック値がテストされてもよいし、N個の有用性メトリック値の平均が有用性閾値に対してテストされてもよい。実施形態によれば、スレッドの割り当て制限が低減される前のクロックサイクルウィンドウの各クロックサイクルにわたって、スレッドの有用性メトリックがあまり使用されないこと(例えば、有用性閾値を満たさないこと)を示す必要があるウィンドウアプローチが使用されてもよい。或いは、クロックサイクルウィンドウにわたるスレッドの平均有用性メトリックは、有用性閾値と比較されてもよい。
【0036】
有用性メトリックは、スレッドに対する新たな割り当て制限を決定するために使用されてもよい。実施形態によれば、スレッドに対する割り当てが変更されることが決定されると、割り当て閾値及びアクティブエントリ閾値又は有用性閾値の何れかを使用して、
図4のステップ412において本明細書で上述したように、低減した割り当て制限まで割り当てを低減させる代わりに、スレッドに対する新たな割り当て制限を決定するために、そのスレッドに対する有用性メトリックが使用される。有用性メトリックは、共有リソースロジック150によって実施される数式への入力として使用されてもよく、この数式の出力は、スレッドに対する新たな割り当て制限である。使用される特定の数式によっては、スレッドに対するアクティブエントリの数が増大するにつれて、スレッドに対する割り当て制限が徐々に増大することを可能にすることができ、スレッドがアクティブスレッドのアクティブエントリ閾値数よりも少ないエントリを有することがある場合でさえ、増大した並列性を示す。スレッドに対する新たな割り当て制限を計算するために有用性メトリックを使用することは、上述したような低減した割り当てレベルを使用するよりも多くの柔軟性をもたらすことができるが、より計算量が多く、ゼロ除算の問題が発生する可能性がある。
【0037】
(D.リソース割り当て変動の対処)
スレッドの並列性のレベルは、スレッドに対する命令のタイプが変わるにつれて、連続したCCWにわたって著しく変わることがある。本明細書で説明するアプローチを使用すると、スレッドに割り当てられた共有リソース150内のエントリの数が、共有リソース内のエントリの総数(例えば、50)と、低減した割り当てレベル(例えば、10)との間で変動することがある。
【0038】
共有リソースのスレッドの割り当てが増大する前に、スレッドが満足するレベルの有用性を証明する必要があるクロックサイクルの数を増大させることによって、スレッドに対するリソース割り当ての変動を低減させる技術が提供される。実施形態によれば、スレッドに対するリソース割り当てを減少させることよりも、スレッドに対するリソース割り当てを増大させるためにより大きなCCWが使用される。例えば、スレッドに対するリソース割り当てを減少させるために、16のクロックサイクルのCCWが使用されてもよく、スレッドに対するリソース割り当てを増大させるために、32のCCW又はより多くのクロックサイクルが使用される。よって、特定のスレッドに割り当てられた共有リソース150内のエントリの数は、16のクロックサイクルのセットの後に低減されることがあるが、特定のスレッドは、共有リソース内のエントリの数が増大するために、より長い期間、すなわち、32のクロックサイクルにわたって十分に高レベルの並列性を証明する必要がある。或いは、共有リソース割り当てを増大させるためにクロックサイクルのより大きなウインドウを使用する代わりに、共有リソース割り当てを増大させるために、クロックサイクルの複数のウインドウが使用されてもよい。例えば、スレッドに対するリソース割り当てを減少させるために、16のクロックサイクルのCCWが使用されてもよく、スレッドに対するリソース割り当てを増大させるために、16のクロックサイクルの2つ以上のCCWが使用される。
【0039】
別の実施形態によれば、リソース割り当てを増大させるために、異なる閾値が使用される。例えば、スレッドに割り当てられた共有リソース140内のエントリの数を増大させるかどうかを考える場合、5の割り当て閾値及び4のアクティブエントリ閾値が
図4のステップ408及びステップ410の各々において使用されてもよい。この例では、スレッドの割り当てが現在低減されていない場合に使用される10の割り当て閾値と比較して、より低い5の割り当て閾値は、満たすのがより容易である。同様に、スレッドの割り当てが現在低減されていない場合に使用される3のアクティブエントリ閾値と比較して、より高い4のアクティブエントリ閾値は、満たすのがより困難である。よって、より低い割り当て閾値及びより高いアクティブエントリ閾値の組み合わせは、共有リソースの低減した割り当てを有するスレッドが共有リソースの低減した割り当てを有し続ける可能性を増大させる。
【0040】
本明細書では、実施形態を、単一の共有リソースを有するマルチスレッドマイクロプロセッサの文脈で説明したが、実施形態は、この例に限定されず、任意の数の共有リソースに適用可能である。それらは、複数の共有リソースを管理する共有リソースロジックを有するマルチスレッドマイクロプロセッサ、複数の共有リソースを管理する複数の共有リソースロジックを有するマルチスレッドマイクロプロセッサを含む。
【手続補正書】
【提出日】2022-05-27
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
マルチスレッドマイクロプロセッサであって、
複数のエントリを有する共有リソースと、
共有リソースロジックと、を備え、
前記共有リソースロジックは、
前記共有リソース内の前記複数のエントリから、第1の期間中に複数のスレッドのうち何れかのスレッドに割り当てられるエントリの数と
前記第1の期間中の前記スレッドに対する前記共有リソース内のアクティブエントリの数と、
を決定することと、
前記第1の期間中に前記スレッドに割り当てられる前記エントリの数と、前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数と、を使用して、第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を変更することと、
を行うように構成されている、
マルチスレッドマイクロプロセッサ。
【請求項2】
前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を変更することは、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる前記割り当て制限を低減することを含む、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項3】
前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限は、増分量だけ、又は、低減した割り当て制限まで低減する、
請求項2のマルチスレッドマイクロプロセッサ。
【請求項4】
前記共有リソースロジックは、前記第1の期間中に前記スレッドに割り当てられた前記エントリの数が第1の閾値を満たすことと、前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数が第2の閾値を満たすことと、の両方を判別したことに応じて、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を低減するように構成されている、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項5】
前記共有リソースロジックは、
前記スレッドに対する有用性メトリックを決定することであって、前記有用性メトリックは、前記スレッドに割り当てられた前記エントリの数に対する、前記スレッドに対する前記共有リソース内の前記アクティブエントリの数の比率である、ことと、
前記スレッドに対する前記有用性メトリックを有用性閾値と比較して、前記スレッドに対する前記割り当て制限を変更するかどうかを決定することと、
を行うように構成されている、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項6】
前記共有リソースロジックは、
クロックサイクルウィンドウのクロックサイクル毎に、前記スレッドに対する前記有用性メトリックを決定して前記有用性閾値と比較することと、
前記クロックサイクルウィンドウのクロックサイクル毎に、前記スレッドに対する前記有用性メトリックが前記有用性閾値を満たしていないことに応じて、前記スレッドに対する前記割り当て制限を低減することと、
を行うように構成されている、
請求項5のマルチスレッドマイクロプロセッサ。
【請求項7】
前記共有リソースロジックは、前記スレッドに対する前記有用性メトリックに基づいて、前記スレッドに対する前記割り当て制限を変更するように構成されている、
請求項5のマルチスレッドマイクロプロセッサ。
【請求項8】
前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を増大させることは、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を、前記共有リソース内の利用可能なエントリの総数まで増大させることを含む、
請求項
1のマルチスレッドマイクロプロセッサ。
【請求項9】
前記共有リソースロジックは、
前記第1の期間中に前記スレッドに割り当てられた前記エントリの数が第1の閾値を満たさないこと、又は、前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数が第2の閾値を満たさないこと、の何れかを判別したことに応じて、前記第2の期間に関して前記共有リソースについて前記スレッドに割り当てられる割り当て制限を増大させるように構成されている、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項10】
前記第1の閾値の値及び前記第2の閾値の値は、前記スレッドの期間に割り当てられた前記共有リソース内の前記エントリの数に基づいて選択される、
請求項
9のマルチスレッドマイクロプロセッサ。
【請求項11】
前記共有リソースロジックは、
前記複数の期間において前記スレッドに割り当てられた前記エントリの数が第1の閾値を満たさないこと、又は、前記複数の期間における前記スレッドに対する前記共有リソース内の前記アクティブエントリの数が第2の閾値を満たさないこと、の何れかを判別したことに応じて、前記共有リソースについて前記スレッドに割り当てられる割り当て制限を増大させるように構成されている、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項12】
前記第1の期間中の前記スレッドに対する前記共有リソース内の前記アクティブエントリの数は、前記第1の期間中の前記スレッドに対する前記共有リソース内のアクティブエントリの最小数である、
請求項1のマルチスレッドマイクロプロセッサ。
【請求項13】
前記共有リソースは、ロードキュー、レジスタファイル、又は、リザベーションステーションのうち1つ以上である、
請求項1のマルチスレッドマイクロプロセッサ。
【国際調査報告】