(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-24
(54)【発明の名称】マイクロ動作の投機的ピッキングを伴うマルチサイクルスケジューラ
(51)【国際特許分類】
G06F 9/38 20180101AFI20241217BHJP
【FI】
G06F9/38 310F
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024538147
(86)(22)【出願日】2022-10-27
(85)【翻訳文提出日】2024-08-01
(86)【国際出願番号】 US2022048084
(87)【国際公開番号】W WO2023121764
(87)【国際公開日】2023-06-29
(32)【優先日】2021-12-22
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】デイビッド エヌ. サッグス
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013AA11
(57)【要約】
プロセッサのためのマルチサイクルスケジューラは、早期ウェイク回路と、遅延ウェイク回路と、ピッカ回路と、を含む。クロックの第1のサイクルにおいて、早期ウェイク回路は、子マイクロ動作を、その依存関係が準備完了親マイクロ動作のセットによって満たされる準備が完了しているものとして投機的に識別する。クロックの第2のサイクルにおいて、ピッカ回路は、実行回路に発行する準備が完了していると識別された子マイクロ動作のうち少なくとも1つをピッキングする。加えて、遅延ウェイク回路は、それぞれの親マイクロ動作が実行回路に発行されなかったと決定すると、準備完了として投機的に識別された少なくとも1つのピッキングされた子マイクロ動作の発行をブロックする。
【選択図】
図7
【特許請求の範囲】
【請求項1】
プロセッサのためのスケジューラであって、
早期ウェイク回路と、
遅延ウェイク回路と、
ピッカ回路と、を備え、
クロックの第1のサイクルにおいて、
前記早期ウェイク回路は、子マイクロ動作を、その依存関係が準備完了親マイクロ動作のセットによって満たされる準備が完了しているものとして投機的に識別し、
前記クロックの第2のサイクルにおいて、
前記ピッカ回路は、実行回路への発行が準備完了していると投機的に識別された前記子マイクロ動作のうち少なくとも1つをピッキングし、
前記遅延ウェイク回路は、それぞれの親マイクロ動作が実行回路に発行されなかったと決定すると、準備完了として投機的に識別された少なくとも1つのピッキングされた子マイクロ動作の発行をブロックする、
スケジューラ。
【請求項2】
実行回路への発行のために前記ピッカ回路によってピッキングされるマイクロ動作を記憶するためのスケジューラエントリのセットを含むスケジューラエントリ回路と、
各スケジューラエントリについての依存関係レコードを含む依存関係マトリックス回路であって、各依存関係レコードは、他のスケジューラエントリ内のマイクロ動作に対する、そのスケジューラエントリ内に記憶されたマイクロ動作の依存関係を識別する情報を記憶するための記憶要素を含む、依存関係マトリックス回路と、を備え、
前記早期ウェイク回路は、前記子マイクロ動作を準備完了として投機的に識別するために、
前記遅延ウェイク回路によって生成された遅延準備完了信号を受信し、前記遅延準備完了信号は、前記クロックの前のサイクルにおいて実行のために発行されたマイクロ動作に基づいて準備完了親マイクロ動作を識別し、
前記遅延準備完了信号に基づいて、前記依存関係マトリックスを検索して、前記準備完了親マイクロ動作のセットによってその依存関係が満たされる前記子マイクロ動作を見つけ、
前記子マイクロ動作を識別する早期準備完了信号を前記ピッカ回路に提供する、
請求項1のスケジューラ。
【請求項3】
ブロッキング回路を備え、
前記クロックの前記第2のサイクルにおいて、前記遅延ウェイク回路は、
前記クロックの前記第1のサイクルにおいて実行のために発行された親マイクロ動作に基づいて準備完了子マイクロ動作を識別する更新された遅延準備完了信号を生成し、
前記更新された遅延準備完了信号を前記ブロッキング回路に転送し、前記ブロッキング回路は、前記更新された遅延準備完了信号に基づいて、それぞれの親マイクロ動作が実行回路に発行されていないことに起因して前記少なくとも1つのピッキングされた子マイクロ動作が準備完了ではなかったと決定すると、準備完了として投機的に識別された前記少なくとも1つのピッキングされた子マイクロ動作の発行をブロックする、
請求項2のスケジューラ。
【請求項4】
前記遅延ウェイク回路は、前記更新された遅延準備完了信号を前記早期ウェイク回路に転送して、前記準備完了子マイクロ動作によって依存関係が満たされる孫マイクロ動作を準備完了として投機的に識別するために使用される、
請求項3のスケジューラ。
【請求項5】
各スケジューラエントリに関連付けられたそれぞれの信号線を含むブロードキャスト回路であって、各マイクロ動作が実行のために発行されたスケジューラエントリのためのそれぞれの信号線上に信号をアサートするブロードキャスト回路を備え、
前記ブロードキャスト回路は、前記クロックの前記第1のサイクルにおける実行のために発行された各親マイクロ動作のためのスケジューラエントリに関連付けられたそれぞれの信号線上で信号をアサートし、
前記遅延ウェイク回路は、前記クロックの前記第1のサイクルにおいて実行のために発行された親マイクロ動作によってその依存関係が満たされる準備完了子マイクロ動作を見つけるために、アサートされたそれぞれの信号線に基づいて前記依存関係マトリックスを検索することによって、前記更新された遅延準備完了信号を生成する、
請求項3のスケジューラ。
【請求項6】
投機的に準備完了として識別され、発行がブロックされた、ピッキングされた子マイクロ動作は、前記クロックの後続のサイクルにおける実行のために再びピッキングされ、それらの親マイクロ動作が発行された場合に実行ユニットに発行することが許可される、
請求項1のスケジューラ。
【請求項7】
前記遅延ウェイク回路は、それぞれの親マイクロ動作が実行回路に発行されたことを決定すると、実行回路に発行する準備が完了していると投機的に識別されたピッキングされた子マイクロ動作を許可する、
請求項1のスケジューラ。
【請求項8】
投機的に準備完了として識別された前記子マイクロ動作のうち前記少なくとも1つを発行のためにピッキングする場合に、
前記ピッカ論理回路は、最も古い子マイクロ動作が最初にピッキングされるように、経過時間順に子マイクロ動作をピッキングする、
請求項1のスケジューラ。
【請求項9】
スケジューラエントリに記憶されたマイクロ動作の相対経過時間に関する情報を有する経過時間マトリックスを含む経過時間マトリックス回路を備え、
前記ピッカ論理回路は、前記経過時間マトリックス内の情報に基づいて前記子マイクロ動作の経過時間順を決定する、
請求項8のスケジューラ。
【請求項10】
マイクロ動作を実行するための指定された数の実行ユニットを備え、
前記ピッカ回路は、準備完了として投機的に識別された前記子マイクロ動作のうち前記少なくとも1つを実行回路への発行のためにピッキングする場合に、準備完了として投機的に識別された前記子マイクロ動作のうち前記指定された数の最大数の子マイクロ動作をピッキングし、準備完了として投機的に識別された前記子マイクロ動作のうち他のものはピッキングされない、
請求項1のスケジューラ。
【請求項11】
マイクロ動作は、前記マイクロ動作が依存する全てのスケジューラエントリがピッキングされ、前記実行回路に発行された場合に準備完了になる、
請求項1のスケジューラ。
【請求項12】
プロセッサ内のスケジューラにおいてマイクロ動作を処理するための方法であって、
クロックの第1のサイクルにおいて、
子マイクロ動作を、その依存関係が準備完了親マイクロ動作のセットによって満たされる準備が完了しているものとして投機的に識別することと、
前記クロックの第2のサイクルにおいて、
実行回路への発行が準備完了していると投機的に識別された前記子マイクロ動作のうち少なくとも1つをピッキングすることと、
それぞれの親マイクロ動作が実行回路に発行されなかったと決定されると、準備完了として投機的に識別された少なくとも1つのピッキングされた子マイクロ動作の発行をブロックすることと、を含む、
方法。
【請求項13】
前記子マイクロ動作を準備完了として投機的に識別することは、
遅延準備完了信号を受信することであって、前記遅延準備完了信号は、前記クロックの前のサイクルにおいて実行のために発行されたマイクロ動作に基づいて準備完了親マイクロ動作を識別する、ことと、
前記遅延準備完了信号に基づいて、依存関係マトリックスを検索して、前記準備完了親マイクロ動作のセットによってその依存関係が満たされる前記子マイクロ動作を見つけることと、
前記子マイクロ動作を識別する早期準備完了信号を提供することと、を含む、
請求項12の方法。
【請求項14】
前記クロックの前記第2のサイクルにおいて、
前記クロックの前記第1のサイクルにおいて実行のために発行された親マイクロ動作に基づいて準備完了子マイクロ動作を識別する更新された遅延準備完了信号を生成することと、
前記更新された遅延準備完了信号に基づいて、それぞれの親マイクロ動作が実行回路に発行されていないことに起因して前記少なくとも1つのピッキングされた子マイクロ動作が準備完了ではなかったと決定すると、準備完了として投機的に識別された前記少なくとも1つのピッキングされた子マイクロ動作の発行をブロックすることと、を含む、
請求項13の方法。
【請求項15】
前記更新された遅延準備完了信号を使用して、孫マイクロ動作を、前記準備完了子マイクロ動作によってその依存関係が満たされる準備が完了しているものとして投機的に識別することを含む、
請求項14の方法。
【請求項16】
前記クロックの前記第1のサイクルにおける実行のために発行された各親マイクロ動作のためのスケジューラエントリに関連付けられたそれぞれの信号線上で信号をアサートすることと、
前記クロックの前記第1のサイクルにおいて実行のために発行された親マイクロ動作によってその依存関係が満たされる準備完了子マイクロ動作を見つけるために、アサートされたそれぞれの信号線に基づいて前記依存関係マトリックスを検索することによって、前記更新された遅延準備完了信号を生成することと、を含む、
請求項14の方法。
【請求項17】
前記クロックの後続のサイクルにおいて、準備完了として投機的に識別され、発行がブロックされた、ピッキングされた子マイクロ動作を実行のために再びピッキングし、前記子マイクロ動作の親マイクロ動作が発行された場合に前記子マイクロ動作が実行ユニットに発行されるのを許可することを含む、
請求項12の方法。
【請求項18】
準備完了として投機的に識別された前記子マイクロ動作のうち前記少なくとも1つを発行するためにピッキングすることは、
最も古い子マイクロ動作が最初にピッキングされた状態で、経過時間順に子マイクロ動作をピッキングすることを含む、
請求項12の方法。
【請求項19】
経過時間マトリックス内の情報に基づいて前記子マイクロ動作の経過時間順を決定することを含む、
請求項18の方法。
【請求項20】
準備完了として投機的に識別された前記子マイクロ動作のうち前記少なくとも1つを実行回路への発行のためにピッキングする場合に、
準備完了として投機的に識別された前記子マイクロ動作のうち前記指定された数の最大数の子マイクロ動作をピッキングすることであって、前記指定された数は、実行ユニットの数と等しい、ことと、
準備完了として投機的に識別された子マイクロ動作のうち他のものをピッキングしないことと、を含む、
請求項12の方法。
【発明の詳細な説明】
【背景技術】
【0001】
いくつかの電子デバイスにおいて、プロセッサは、プロセッサに対応する動作を実行させるプログラムコード(例えば、アプリケーション、オペレーティングシステム、ファームウェア等)からの命令を実行する。マクロ命令と呼ぶことができる命令の一部又は全部を実行する前に、プロセッサは、命令を1つ以上のマイクロ動作(すなわち、μop又はuop)に復号する。各マイクロ動作は、より単純な低レベルのプロセッサ命令であり、プロセッサの実行ユニットによって実行されると、マイクロ動作が復号されたマクロ命令の全体的な動作のそれぞれの部分をプロセッサに実行させる。例えば、ADDマクロ命令は、プロセッサにADD動作の対応する部分(例えば、データを取得すること、データを一緒に加算すること、結果を記憶すること等)を実行させるいくつかのマイクロ動作に復号され得る。
【0002】
いくつかのプロセッサでは、マイクロ動作を復号した後、プロセッサ内の復号機能ブロックは、マイクロ動作をプロセッサ内のスケジューラ機能ブロックに転送し、スケジューラ機能ブロックは、プロセッサ内の実行ユニットで実行するためにマイクロ動作をスケジューリングする。スケジューラ機能ブロックは、マイクロ動作を実行するために実行ユニットが利用可能になるまで、受信したマイクロ動作をスケジューラエントリに一時的に記憶/バッファする。また、スケジューラ機能ブロックは、マイクロ動作が依存関係を有する前のマイクロ動作が、マイクロ動作が実行されている時間までに実行を完了したか又は完了することを保証し、その結果、マイクロ動作を実行するために必要な入力が利用可能になる。換言すると、スケジューラ機能ブロックは、マイクロ動作がスケジューラエントリからピッキングされて実行のために実行ユニットに発行されることが許可される前に、マイクロ動作の依存関係が解決されることを保証する。したがって、これらの2つの条件が満たされる場合に、すなわち、マイクロ動作に対する全ての依存関係が解決され、マイクロ動作を実行するために実行ユニットが利用可能である場合に、マイクロ動作は「準備完了」であり、スケジューラは、実行ユニットに発行するためにそれぞれのスケジューラエントリから準備完了マイクロ動作をピッキングすることができる。典型的には、比較的少数の実行ユニットしか存在せず、したがって、実行ユニットよりも多くの準備完了マイクロ動作が存在し得るので、スケジューラ機能ブロックは、ピッキングされるマイクロ動作を見つけるために、準備完了マイクロ動作の中から選択しなければならない。準備完了マイクロ動作を識別し、実行ユニットに発行される準備完了マイクロ動作をピッキングするための動作は、複雑であり、時間がかかる。したがって、スケジューラは、より高いスループットのプロセッサのために設計することが困難であることが証明されている。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、電子デバイスを示すブロック図である。
【
図2】いくつかの実施形態による、プロセッサを示すブロック図である。
【
図3】いくつかの実施形態による、スケジューラを示すブロック図である。
【
図4】いくつかの実施形態による、依存関係マトリックスを示すブロック図である。
【
図5】いくつかの実施形態による、経過時間マトリックスを示すブロック図である。
【
図6】いくつかの実施形態による、経過時間マトリックスの縮小形式を示すブロック図である。
【
図7】いくつかの実施形態による、マイクロ動作を実行のためにピッキングされる、準備完了しているものとして投機的に識別するためのプロセスを示すフローチャートである。
【発明を実施するための形態】
【0004】
図面及び記載を通して、同様の符号は、同じ図面要素を指す。
【0005】
以下の記載は、任意の当業者が記載の実施形態を生成及び使用することを可能にするために提示され、特定の用途及びその要件のコンテキストにおいて提供される。記載の実施形態に対する様々な修正は、当業者には容易に明らかであり、本明細書に記載の一般原理は、他の実施形態及び用途に適用され得る。したがって、記載の実施形態は、示される実施形態に限定されず、本明細書に記載の原理及び特徴と一致する最も広い範囲が与えられるべきである。
【0006】
以下の記載では、実施形態を記載するために様々な用語が使用される。以下は、用語のうちいくつかの簡略化された一般的な説明である。これらの用語は、明確さ及び簡潔にするために本明細書に列挙されていない重要な追加の態様を有してもよく、したがって、記載は、これらの用語を限定することを意図するものではないことに留意されたい。
【0007】
機能ブロック:機能ブロックは、集積回路構成、ディスクリート回路構成等のセットの相互に関連する回路構成を指す。回路構成は、回路構成内の回路要素が少なくとも1つの特性を共有することに「相互に関連している」。例えば、回路は、特定の集積回路チップ、基板、回路基板、又は、その一部に含まれ、その上に製造され、あるいはさもなければ、結合されてもよく、特定の動作(例えば、計算動作、制御動作、記憶動作等)の実行に関与してもよく、共通制御要素及び/又は共通クロックによって制御される等してもよい。機能ブロックの回路は、単一の回路要素(例えば、単一の集積回路論理ゲート又はディスクリート回路要素)から数百万又は数十億個の回路要素(例えば、集積回路メモリ)まで、任意の数の回路要素を有することができる。いくつかの実施形態では、機能ブロックは、プログラムコードを実行することなく動作を実行する回路を使用して「ハードウェアでの」動作を実行する。
【0008】
データ:データは、メモリに記憶され、並びに/又は、計算、制御及び/若しくは他の動作で使用され得る情報を示す総称である。データは、実際のデータ(例えば、計算又は制御動作の結果、処理回路の出力、計算又は制御動作用の入力、変数値、センサ値等)、ファイル、プログラムコード命令、制御値、変数、及び/又は、他の情報等の情報を含む。
【0009】
説明する実施形態では、電子デバイスは、マクロ命令から復号されたマイクロ動作を実行するために使用される実行ユニットを有するプロセッサを含む。例えば、実行ユニットは、整数マイクロ動作を実行するために各々使用されるN個の整数実行ユニットを含むことができ、ここで、N=4、6又は別の数である。また、電子デバイスは、実行ユニットによる実行のためにマイクロ動作をスケジューリングすることに関連付けられた動作を実行するスケジューラを含む。スケジューラは、上流回路(例えば、復号回路等)からマイクロ動作を受信し、受信した各マイクロ動作をそれぞれのスケジューラエントリに記憶して、実行ユニットがそのマイクロ動作を実行するために利用可能になり、そのマイクロ動作について全ての依存関係が解決されるまで、実行のための発行を待つ。換言すると、スケジューラは、実行ユニットが各発行されたマイクロ動作を実行するために利用可能であることを保証するとともに、各マイクロ動作に対する全ての入力が、そのマイクロ動作が実行ユニットへの発行が準備完了していることを決定する前に、そのマイクロ動作を実行するために利用可能であり/利用可能になることを保証する。スケジューラは、実行のためにピッキングされる準備完了しているスケジューラエントリに記憶された準備完了マイクロ動作を識別することに関連付けられた動作を実行するウェイク回路と、実行のために実行ユニットに発行されるスケジューラエントリから準備完了マイクロ動作をピッキングすることに関連付けられた動作を実行するピッカ回路と、を含む。スケジューラは、2サイクル又は「パイプライン化」スケジューラである。したがって、実行のためにマイクロ動作をスケジューリングするための上記の動作の一部は、制御クロックの2つの連続するサイクルにおいてウェイク回路及び/又はピッカ回路によって実行される。
【0010】
記載の実施形態では、スケジューラは、マイクロ動作を、実行ユニットに発行される準備が完了しているものとして投機的に識別するための動作を実行する。準備完了として投機的に識別されたマイクロ動作は、次のクロックサイクルにおいて(すなわち、可能な限り早く)実行ユニットに発行するためにピッキングされ得る。より詳細には、準備完了親マイクロ動作(ready parent micro-operations)の子マイクロ動作(child micro-operations)は、準備完了親マイクロ動作自体が実行のためにピッキングされたかどうか(されなかったか)が分かる前に、実行のためにピッキングされる準備が完了しているものとして投機的に識別される。したがって、「投機」は、全ての準備完了親マイクロ動作が実行のためにピッキングされることである。これは、親マイクロ動作を発行することができる実行ユニットの数が限定されていることと、多くの準備完了親マイクロ動作が存在する可能性があるという事実と、に起因して、全ての準備完了親アプリケーションが実行のためにピッキングされない可能性があるので、真でない可能性がある。したがって、スケジューラは、その後、不適切にピッキングされた/準備未完了子マイクロ動作が実行のために実行ユニットに発行されるのをブロックすることによって、準備完了子マイクロ動作についての誤った投機から回復する。しかしながら、スケジューラは、実行ユニットに発行する準備完了していると投機的に識別された他のピッキングされた子マイクロ動作を許可する。
【0011】
上記で説明したスケジューラの動作に関して、クロックの第1のサイクルにおいて、ウェイク回路内の早期ウェイク回路は、子マイクロ動作を、その依存関係が準備完了親マイクロ動作のセットによって満たされる、準備完了として投機的に識別する。次いで、早期ウェイク回路は、準備完了子マイクロ動作が記憶されている各スケジューラエントリを識別するピッカ回路への早期準備完了信号を生成する。早期ウェイク回路は、実行ユニットへの発行のために準備完了親マイクロ動作のうち何れがピッキングされたかが分かる前にこれを行う。換言すると、早期ウェイク回路は、準備完了親マイクロ動作の一部がピッキングされない可能性があるにもかかわらず、全ての準備完了親マイクロ動作が実行ユニットに発行されるためにピッキングされ、したがって子マイクロ動作の依存関係が解決されている/解決されるかのように、子マイクロ動作を準備完了として投機的に識別する。クロックの第2のサイクルにおいて、ピッカ回路は、実行ユニットへの発行が準備完了していると投機的に識別された子マイクロ動作の中から子マイクロ動作をピッキングする。加えて、クロックの第2のサイクルにおいて、ウェイク回路内の遅延ウェイク回路は、(第1のサイクルにおいて)発行のためにピッキングされた親マイクロ動作の識別情報を受信し、識別情報に基づいて、早期ウェイク回路によって準備完了していると誤って識別された子マイクロ動作を決定する。換言すると、遅延ウェイク回路は、実行のために発行されなかった準備完了親マイクロ動作を決定し、したがって、発行されていない親マイクロ動作への依存関係のために準備完了でなかった、準備完了であると投機的に識別された子マイクロ動作を決定する。次いで、遅延ウェイク回路は、遅延準備完了信号を生成し、遅延準備完了信号は、誤って投機的に準備完了として識別されたピッキングされた子マイクロ動作の発行をブロックするためにブロッキング回路によって使用され、一方、投機的に準備完了として識別された他のピッキングされた子マイクロ動作は、実行ユニットに発行することが許可される。
【0012】
いくつかの実施形態では、スケジューラは、M個のスケジューラエントリを含み、各スケジューラエントリは、マイクロ動作が準備完了し、実行ユニットへの発行のためにピッキングされ得るまで、マイクロ動作を記憶するために使用される(ここで、M=96、125又は別の数である)。また、スケジューラは、スケジューラエントリに記憶されたマイクロ動作間の依存関係を追跡するために使用される依存関係マトリックスを含む。依存関係マトリックスは、他のスケジューラエントリに記憶されたマイクロ動作に対するそのスケジューラエントリに記憶されたマイクロ動作の依存関係についての情報を記憶するための記憶要素を含む各スケジューラエントリの依存関係レコードを含む。早期ウェイク回路及び遅延ウェイク回路は、子マイクロ動作を実行ユニットへの発行のためにピッキングされる準備が完了しているものとして投機的に識別するために、上記で説明した動作のための依存関係マトリックスを使用する。例えば、いくつかの実施形態では、遅延準備完了信号を生成する場合に、遅延ウェイク回路は、クロックの前のサイクルにおいて発行された祖父母マイクロ動作の識別子を使用して、発行された祖父母マイクロ動作によってその依存関係が満たされる親マイクロ動作について依存関係レコードを検索することによって、準備完了親マイクロ動作を識別する。別の例として、いくつかの実施形態では、早期準備完了信号を生成する場合に、早期ウェイク回路は、準備完了親マイクロ動作の識別子を使用して、その依存関係が準備完了親マイクロ動作によって満たされる子マイクロ動作について依存関係レコードを検索することによって、準備完了子マイクロ動作を識別する。
【0013】
いくつかの実施形態では、スケジューラは、発行されたマイクロ動作(すなわち、実行ユニットに発行されたピッキングされたマイクロ動作)の識別子を決定し、スケジューラ内の他の回路にブロードキャストするブロードキャスト回路を含む。例えば、いくつかの実施形態では、ブロードキャスト回路は、各スケジューラエントリの専用信号線に接続され、ピッキングされたマイクロ動作が発行された各スケジューラエントリの信号線をアサートする。これらの実施形態では、ブロードキャスト回路は、発行されたマイクロ動作の識別子を決定し、その識別子を遅延ウェイク回路に通信する。次に、遅延ウェイク回路は、発行されたマイクロ動作の識別子及び依存関係マトリックスを使用して、発行されたマイクロ動作の準備完了子マイクロ動作を識別する遅延準備完了信号を生成する。遅延ウェイク回路は、遅延準備完了信号を早期ウェイク回路及びブロッキング回路に転送し、遅延準備完了信号は上記で説明したように使用される。いくつかの実施形態では、発行された信号、遅延準備完了信号及び/又は早期準備完了信号は、デアサートされるまでアサートされたままであり、これにより、上記で説明した投機ミス等からの回復が可能になる。すなわち、発行された信号、遅延準備完了信号、及び/又は、早期準備完了信号内の個々の識別子は、変更が行われるまで連続的にアサートされる。
【0014】
いくつかの実施形態では、ピッカ回路は、経過時間順に実行ユニットに発行するための準備完了マイクロ動作をピッキングする。換言すると、ピッカ回路は、各マイクロ動作が所定のスケジューラエントリに記憶された時間の長さに基づく順序で、スケジューラエントリに記憶された準備完了マイクロ動作をピッキングする。例えば、N個の実行ユニットが存在し、したがって最大N個の準備完了マイクロ動作が各サイクルにおいてピッキングされ得ると仮定すると、ピッカ回路は、最大N個の準備完了マイクロ動作がピッキングされるまで、最も古い準備完了マイクロ動作、次いで2番目に古い準備完了マイクロ動作、次いで3番目に古い準備完了マイクロ動作等をピッキングすることができる。これらの実施形態のうちいくつかでは、スケジューラ(又は別のエンティティ)は、スケジューラエントリに記憶されたマイクロ動作の経過時間を識別するための情報を含む動的に更新されるデータ構造である、経過時間マトリックス内のスケジューラエントリ内のマイクロ動作の相対経過時間の記録を保持する。上記の例を続けると、実行ユニットへの発行が準備完了していると投機的に識別された子マイクロ動作の中から子マイクロ動作をピッキングする場合に、ピッカ回路は、経過時間順に子マイクロ動作をピッキングする。
【0015】
スケジューラの動作をパイプライン化することによって、すなわち、2つのクロックサイクルにわたってスケジューラの動作を分散させることによって、記載の実施形態は、スケジューラのスループットを許容できないほど低減することなく、個々のスケジューラ動作のためのより多くの時間を提供する。例えば、クロックの第2のサイクルにおいてピッカを動作させることは、既存の単一サイクルスケジューラにおいて実行することが困難である動作である経過時間ベースのピッキングを可能にする。また、パイプライン化スケジューラ設計は、スケジューラ内の回路(例えば、依存関係マトリックス、スケジューラエントリ等)が、サイズ又は容量においてスケールアップ/増加されることを可能にし、これは、スケジューラが、より多数のマイクロ動作及び/又は実行ユニットをより良好に処理することを可能にし、これは、既存の単一サイクルスケジューラにとって重要な問題である。マイクロ動作を発行のためにピッキングされる準備が完了しているものとして投機的にマークし、その後、準備完了していなかったピッキングされたマイクロ動作をブロックすることによって、記載の実施形態は、2サイクルパイプライン化スケジューラが、連続するサイクルにおいて単一サイクル依存関係を有するマイクロ動作を発行することを可能にし、これは、他の提案されたマルチサイクルスケジューラ設計では不可能である。既存のプロセッサ設計におけるボトルネックであるスケジューラの動作を改善することによって、記載の実施形態は、スケジューラが含まれるプロセッサのスループットを増加させることができる。プロセッサのスループットを増加させることは、プロセッサの性能を改善し、それは、プロセッサに対するユーザ満足度を増加させる。
【0016】
図1は、いくつかの実施形態による、電子デバイス100を示すブロック図を示している。
図1から分かるように、電子デバイス100は、プロセッサ102及びメモリ104を含む。概して、プロセッサ102、メモリ104は、ハードウェアで、すなわち、対応する集積回路、ディスクリート回路及び/又はデバイスを使用して実装される。例えば、いくつかの実施形態では、プロセッサ102、メモリ104は、1つ以上の半導体チップ上の集積回路に実装されるか、ディスクリート回路及び/若しくはデバイスと組み合わせた1つ以上の半導体チップ上の集積回路の組み合わせで実装されるか、又は、ディスクリート回路及び/若しくはデバイスに実装される。いくつかの実施形態では、プロセッサ102及び/又はメモリ104は、本明細書で説明するように、マイクロ動作を実行ユニットへの発行のためにピッキングされる準備が完了しているものとして投機的に設定する2サイクルパイプライン化スケジューラのための動作、又は、それに関連付けられた動作を実行する。
【0017】
プロセッサ102は、計算、メモリアクセス、制御及び/又は他の動作を実行する機能ブロックである。例えば、プロセッサ102は、中央演算処理装置(CPU)、グラフィック処理装置(GPU)、加速処理ユニット、システムオンチップ、フィールドプログラマブルゲートアレイ(FPGA)等とすることができる。
【0018】
メモリ104は、プロセッサ102(及び場合によっては電子デバイス100内の他の機能ブロック(図示せず))のためのデータを記憶する機能ブロックである。例えば、いくつかの実施形態では、メモリ104は、記憶デバイス(図示せず)から検索されたデータのコピー(例えば、4kBページのデータ)がプロセッサ102によるアクセスのために記憶される、より大容量の集積回路メモリ(例えば、「メイン」メモリ等)である。別の例として、いくつかの実施形態では、メモリ104は、プロセッサ102によるアクセスのためにデータのコピーが記憶される、より大容量の集積回路メモリである高帯域幅メモリである。メモリ104は、第4世代ダブルデータレートシンクロナスダイナミックランダムアクセスメモリ(DDR4 SDRAM)及び/又は他のタイプのメモリ回路等のメモリ回路、並びに、メモリ回路に記憶されたデータのアクセスを処理するための制御回路を含む。
【0019】
電子デバイス100は、特定の数及び配置の要素で
図1に示されているが、いくつかの実施形態では、電子デバイス100は、異なる数及び/又は配置の要素を含む。例えば、いくつかの実施形態では、電子デバイス100は、異なる数のプロセッサ102を含む。また、電子デバイス100は、例示を目的として簡略化されている。しかしながら、いくつかの実施形態では、電子デバイス100は、追加の要素及び/又は異なる要素を含む。例えば、電子デバイス100は、ヒューマンインターフェースサブシステム(例えば、ディスプレイ、スピーカ、キーボード等)、電力サブシステム、入出力(I/O)サブシステム等を含むことができる。概して、記載の実施形態では、電子デバイス100は、本明細書で説明される動作を実行するのに十分な数及び/又は配置の要素を含む。
【0020】
電子デバイス100は、本明細書に記載された動作を実行する任意のデバイスであり得る又はそれに含まれ得る。例えば、電子デバイス100は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブル電子デバイス、タブレットコンピュータ、仮想又は拡張現実機器、スマートフォン、人工知能(artificial intelligence、AI)若しくは機械学習デバイス、サーバ、ネットワーク機器、玩具、視聴覚機器、家電、車両等、及び/又は、それらの組み合わせであってもよいし、それらに含まれてもよい。いくつかの実施形態では、電子デバイス100は、1つ以上の半導体チップ上に含まれる。例えば、いくつかの実施形態では、電子デバイス100は、単一の「システムオンチップ」(SOC)半導体チップに完全に含まれ、1つ以上のASIC等に含まれる。
【0021】
説明する実施形態では、電子デバイスは、本明細書で説明するようにマイクロ動作を発行のためにピッキングされる準備が完了しているものとして投機的に設定する2サイクルパイプライン化スケジューラのための動作、又は、それに関連付けられた動作を実行するプロセッサを含む。
図2は、いくつかの実施形態による、プロセッサ200を示すブロック図を示している。いくつかの実施形態では、プロセッサ102は、プロセッサ200に示される要素と同様の要素を含む、すなわち、プロセッサ200と同様に内部に配置される。
【0022】
図2から分かるように、プロセッサ200は、実行(EXEC)ユニット202~204を含み、その各々は、マイクロ動作を実行するための回路を含む機能ブロックである。例えば、実行ユニット202~204の各々は、実行パイプライン、計算ユニット、FPGA、及び/又は、回路に対応する動作を実行させるマイクロ動作を実行する他のマイクロ動作実行回路を含むことができる。また、プロセッサ200は、アドレス生成ユニット(AGU)206を含み、これは、ロードマイクロ動作及びストアマイクロ動作のためのアドレスを計算するための動作を実行する機能ブロックである。いくつかの実施形態では、実行ユニット202~204及びアドレス生成ユニット206のうち一部又は全部は、特定のタイプのマイクロ動作を実行するために配置され、場合によっては専用である。例えば、いくつかの実施形態では、実行ユニット202は、プロセッサ200によってサポートされるマイクロ動作のセットの中からより単純なマイクロ動作(例えば、より単純な論理マイクロ動作、より単純な数学的マイクロ動作、制御クロックの数サイクルのみで実行することができるマイクロ動作等)を実行するように配置された回路を含むより単純な整数実行ユニットであり、実行ユニット204は、プロセッサ200によってサポートされるマイクロ動作のセットの中からより複雑なマイクロ動作(例えば、より複雑な論理マイクロ動作、より複雑な数学的マイクロ動作、実行するために数サイクルより多くの制御クロックを必要とするマイクロ動作等)を実行するように配置された回路を含むより複雑な整数実行ユニットである。別の例として、いくつかの実施形態では、実行ユニット202は、整数マイクロ動作を実行するように配置された回路を含む整数実行ユニットであり、実行ユニット204は、浮動小数点マイクロ動作を実行するように配置された回路を含む浮動小数点実行ユニットである。
【0023】
また、プロセッサ200は、レジスタファイル208を含み、これは、物理レジスタのセットのための回路を含む機能ブロックである。レジスタファイル208は、記憶要素(すなわち、いくつかのレジスタファイルセル、書き込み及び読み取りライン/ポート等)と、記憶要素内でマイクロ動作を実行するためのオペランド及びマイクロ動作を実行する結果を記憶するために使用されるアクセス回路と、を含む。レジスタファイル208内の物理レジスタは、これらのレジスタを「アーキテクチャ」レジスタから区別するために「物理」レジスタと呼ばれ、アーキテクチャレジスタは、プロセッサ200のための命令セットアーキテクチャに含まれる論理レジスタである。
【0024】
プロセッサ200は、ロード/ストアユニット(LOAD/STORE)210を更に含み、これは、プロセッサ200のためのデータのロード及びストアを処理するための回路を含む機能ブロックである。いくつかの実施形態では、データをロードするために、ロード/ストアユニット210は、L1データキャッシュ212から、又は、必要に応じてL2キャッシュ214、L3キャッシュ(図示せず)、メモリ(例えば、メモリ104)若しくは大容量記憶デバイス(図示せず)からデータを取得し、そのデータをレジスタファイル208内の物理レジスタにロード/ストアする。いくつかの実施形態では、データを記憶するために、ロード/ストアユニット210は、実行ユニット202~204、レジスタファイル208内の物理レジスタ、及び/又は、他のソースからデータを取得し、取得したデータをL1データキャッシュ212及び/又は他の場所(例えば、L2キャッシュ214、L3キャッシュ、メモリ、大容量記憶デバイス)に記憶する。
【0025】
プロセッサ200は、フェッチ/復号ユニット(FETCH/DECODE)216を更に含む。フェッチ/復号ユニット216は、L1命令キャッシュ218(又は他の場所)からプログラムコード命令(又はそのグループ)をフェッチし、フェッチされた命令をマイクロ動作に復号するための回路を含む機能ブロックである。換言すると、フェッチ復号ユニット216は、プログラムコード内のマクロ命令をマイクロ動作に復号する。マイクロ動作を復号した後、フェッチ/復号ユニット216は、マイクロ動作をディスパッチ220に送信する。ディスパッチ220は、実行のためにスケジューリングされるためにマイクロ動作が転送されるスケジューラをスケジューラ226~228の中から選択し、マイクロ動作を選択されたスケジューラにディスパッチする(すなわち、転送する、送信する等)ための回路を含む機能ブロックである。上記で説明したように、いくつかの実施形態では、実行ユニット202~204及びアドレス生成ユニット206の一部又は全部は、特定のタイプの命令を処理するように配置され、場合によっては専用にされる。これらの実施形態のいくつかにおいて、スケジューラ226~228は、通常、それぞれの実行ユニットによって処理されるタイプの命令のみを処理する。例えば、アドレス生成ユニット206がロード命令及びストア命令のアドレスを計算すると仮定すると、実行ユニットアドレス生成ユニット206にサービスを提供するスケジューラ228は、通常、ロードマイクロ動作及びストアマイクロ動作のみを処理する。したがって、いくつかの実施形態では、上記で説明した選択動作は、ディスパッチ220が、そのマイクロ動作のタイプに基づいて各マイクロ動作を処理するスケジューラを選択することを含む。
【0026】
プロセッサ200は、リネームユニット(RENAME)222を更に含み、これは、マイクロ動作を実行するためのオペランド及び/又はマイクロ動作の実行からの結果を記憶するためにレジスタファイル208内の物理レジスタを割り当てるための回路を含む機能ブロックである。一般に、マイクロ動作は、最初にアーキテクチャレジスタを参照し、アーキテクチャレジスタは、再び、プロセッサ200のための命令セットアーキテクチャにおけるレジスタのセットである。しかしながら、マイクロ動作によって参照されるアーキテクチャレジスタは、抽象的/論理的であり、通常、プロセッサ200内の物理レジスタをアドレス指定するために直接使用されない。代わりに、マイクロ動作によって参照されるアーキテクチャレジスタは、リネームユニット222によってレジスタファイル208内のセットの物理レジスタにマッピングされる。したがって、マイクロ動作が所定のアーキテクチャレジスタを参照する(例えば、結果を記憶する等)場合に、リネームユニット222は、マイクロ動作に使用されるレジスタファイル208内の許容可能且つ利用可能な物理レジスタを選択し、その物理レジスタを使用するようにマイクロ動作をリダイレクトする。いくつかの実施形態では、リネームユニット222は、マイクロ動作間の依存関係を決定し、依存関係に関する情報をプロセッサ200内の他の機能ブロック(例えば、スケジューラ226~228等)に通信するための回路を含む。
【0027】
プロセッサ200は、マイクロ動作の順不同実行を管理するために使用される回路を含む機能ブロックであるリオーダバッファ(ROB)224を更に含む。一般に、プロセッサ200は、マイクロ動作が順不同で実行されることが許可される(すなわち、互いに依存関係を有さない、指定された順序でリタイアされる等)限り、マイクロ動作を「順不同」で、すなわち、マイクロ動作がプログラムコードにおいて遭遇される順序とは異なる順序で実行することができる。リオーダバッファ224は、特に、マイクロ動作が正しい順序でリタイアされることを保証するためにインフライトマイクロ動作を追跡するために使用され、したがって、プロセッサ200の動作/アーキテクチャ状態(すなわち、L1データキャッシュ212、フラグ、設定、制御値等)を適切な順序で更新するために使用される回路を含む。
【0028】
プロセッサ200は、スケジューラ(SCH)226~228を更に含み、これらは、1つ以上のそれぞれの実行ユニットにおける実行のためにマイクロ動作をスケジューリングするための回路を含む機能ブロックである。一般に、マイクロ動作をスケジューリングすることは、マイクロ動作の各々を実行するために利用可能な/空いている実行ユニットがあること、マイクロ動作が依存する前のマイクロ動作が、実行のためにマイクロ動作によって必要とされる結果を有するか又は有することになること等を保証することを含む。いくつかの実施形態では、スケジューラ226は、実行ユニット202及び204において実行するためのマイクロ動作のスケジューリングを処理し、スケジューラ226は、アドレス生成ユニット206において実行するためのマイクロ動作のスケジューリングを処理する。スケジューラ226~228の各々は、実行を待っているマイクロ動作を(場合によっては、即値等の他のデータとともに)記憶するためのスケジューラエントリ回路を含む。いくつかの実施形態では、スケジューラ226~228は、実行のために実行ユニットに発行するためにピッキングされる準備が完了している(すなわち、依存関係が解決されている)スケジューラエントリに記憶されたマイクロ動作を決定するウェイク回路と、実行ユニットに発行するためにスケジューラエントリから準備完了マイクロ動作をピッキングするピッカ回路と、を含む。いくつかの実施形態では、スケジューラ226~228の一方又は両方は、本明細書で説明するように、実行ユニット202~204又は206にそれぞれ発行するためにピッキングされる準備が完了しているものとしてマイクロ動作を投機的に識別する動作を実行する。スケジューラのより詳細な例が
図3に示され、以下で説明される。
【0029】
プロセッサ200は、例えばスケジューラ226~228及び/又は他の機能ブロックから、実行を完了したマイクロ動作に関する情報を受信し、マイクロ動作をプロセッサ200のアーキテクチャ状態にコミットするための回路を含む機能ブロックであるリタイアユニット(RETIRE)230を更に含む。例えば、いくつかの実装において、リタイアユニット230は、リオーダバッファ224と対話して、完了した命令が安全且つ正確にリタイアされ得ることを保証し、命令結果がL1データキャッシュ212及び/又はメモリサブシステム内の他の場所にコミットされる/書き込まれることを許可し、プロセッサフラグ及び制御値が設定/更新されることを許可する等である。
【0030】
プロセッサ200は、記載の実施形態において特定の機能ブロック及びそれによって実行される動作のためのプロセッサの一例を提供するために、様々な機能ブロックとともに
図2に示される。しかしながら、プロセッサ200は、いくつかの実施形態を説明する際に、例示のため、並びに、明確さ及び簡潔さのために簡略化されている。いくつかの実施形態では、プロセッサ200は、
図2に示されているものとは異なる機能ブロック及び/又は機能ブロックの配置を含む。例えば、いくつかの実施形態では、プロセッサ200は、異なる数の実行ユニット及びスケジューラを含む。別の例として、いくつかの実施形態では、プロセッサ200は、命令フェッチのフローを制御するプログラムカウンタ及び分岐予測ユニット等の回路を含む。概して、記載の実施形態では、プロセッサ200は、本明細書で説明される動作を実行するのに十分な機能ブロックを含む。
【0031】
記載の実施形態では、プロセッサは、実行ユニットへの発行のためにピッキングされる準備が完了しているものとしてマイクロ動作を投機的に識別するための動作、又は、それに関連付けられた動作を実行する2サイクルパイプライン化スケジューラを含む。
図3は、いくつかの実施形態によるスケジューラ300を示すブロック図を示している。いくつかの実施形態では、スケジューラ226及びスケジューラ228の一方又は両方は、スケジューラ300に示されたものと同様の要素を含む、すなわち、スケジューラ300と同様に内部に配置される。いくつかの実施形態では、
図3に示す要素の一部又は全部は、ハードウェアで、すなわち、説明した動作を実行するように構成された回路(例えば、論理ゲート、記憶要素及び/若しくは他の集積回路、ディスクリート回路、並びに/又は、デバイス)を使用して実装される。例えば、ブロッキング回路(BLOCK)316は、遅延準備完了信号324に基づいて、特定のマイクロ動作が実行ユニットに発行されるのをブロックする一方で、他のマイクロ動作が実行ユニットに発行されるのを許可するように構成された回路を含む。
【0032】
図3の例では、2つのクロックサイクル、すなわち第1のサイクル302及び第2のサイクル304が
図3の下部に示されている。これらのクロックサイクルは、スケジューラ内の回路/機能ブロックがそれぞれの動作を実行するクロック306の2つの連続するクロックサイクルのシーケンスを表す。依存関係ディスパッチフリップフロップ(DEP DISP FF)308、早期準備完了フリップフロップ(EARLY READY FF)310、及び、発行されたフリップフロップ(ISSUED FF)312の各々は、クロック306の立ち上がりエッジで上流回路によって提供されるデータをキャプチャする立ち上がりエッジフリップフロップである。例えば、早期準備完了フリップフロップ310は、第1のサイクル302の終わりにクロック306の立ち上がりエッジで早期ウェイク回路(EARLY WAKE)314によって出力されたデータをキャプチャする。このようにして、第1のサイクル302の開始時のクロック306の立ち上がりエッジと第1のサイクル302の終了時のクロック306の立ち上がりエッジとの間で動作を実行する早期ウェイク回路314等のように、フリップフロップ「の間」に示される回路の一部又は全部の動作は、クロック306の単一サイクル内で実行される。したがって、スケジューラ300は、マイクロ動作をスケジューリングするためのスケジューラ300の完全な動作が分割され、クロック306の2つの連続するサイクルで実行されるという点で「パイプライン化」される。
【0033】
図3に見られるように、スケジューラ300は、M個のスケジューラエントリ(M=96、125又は別の数)のための回路を含む機能ブロックであるスケジューラエントリ318を含む。各スケジューラエントリは、実行のために実行ユニットへの発行を待っているマイクロ動作を記憶するためのメモリ回路と、そのスケジューラエントリに記憶されたマイクロ動作にアクセスするためのアクセス回路と、を含む。いくつかの実施形態では、スケジューラエントリは、マイクロ動作のための即値、メタデータ等のような、他のデータを記憶するためのメモリ回路を含む。マイクロ動作は、リネームユニット222(図示せず)等の上流回路から受信され、マイクロ動作が「準備完了」になるまで、すなわち、マイクロ動作が実行され、プロセッサ状態がマイクロ動作を実行するために準備され、マイクロ動作のための全ての入力オペランドが利用可能である及び/又は利用可能になるまで、スケジューラエントリに記憶される。マイクロ動作が準備されており及び/又は準備される実行ユニット(例えば、実行ユニット202)がマイクロ動作を実行するために準備完了である場合に、マイクロ動作はスケジューラエントリからピッキング(すなわち、検索、取得等)され、実行のために実行ユニットに発行され得る。
【0034】
動作中、第1のクロックサイクルの開始時又は開始前に、マイクロ動作(図示せず)のセットがリネームユニット(例えば、リネームユニット222)から転送され、スケジューラエントリ318に記憶される。加えて、依存関係ディスパッチフリップフロップ308は、リネームユニットから転送されたマイクロ動作の依存関係情報をキャプチャ(すなわち、記憶、保持等)する。依存関係情報は、依存関係ディスパッチフリップフロップ308を介して依存関係マトリックス320に提供され、依存関係マトリックス320内の既存の依存関係情報に追加される。概して、依存関係情報は、スケジューラエントリ318に記憶されたマイクロ動作間の依存関係を識別する。リネームユニットから受信された依存関係情報は、スケジューラエントリ318に記憶されているマイクロ動作のための全ての依存関係組み合わせのための専用信号線を含めること等によって、依存関係マトリックス内の依存関係レコードを更新するために情報を使用することを可能にするフォーマットで配置される。例えば、96個のスケジューラエントリがあり、マイクロ動作のセットが6個のマイクロ動作を含む場合、依存関係情報は、96×6個の信号線(すなわち、各信号線がそれぞれのスケジューラエントリへの依存関係を示す576本の信号線)を介して送信することができる。
【0035】
図4は、いくつかの実施形態による、依存関係マトリックス400を示すブロック図を示している。いくつかの実施形態では、依存関係マトリックス320は、依存関係マトリックス400と同様に内部的に編成される。
図4に見られるように、依存関係マトリックス400は、記憶要素402のいくつかの行を含み、その各々は、ボックスを介して示され、明確にするために、そのうちのいくつかのみが示される(及びラベル付けされる)。各行は、それぞれのスケジューラエントリに関連付けられ、スケジューラエントリ318内の他の各スケジューラエントリに記憶されたマイクロ動作に対する、そのスケジューラエントリに記憶されたマイクロ動作の依存関係を識別するのに十分な記憶要素を含む。例えば、スケジューラエントリ318が96個のスケジューラエントリを含む場合、依存関係マトリックス400は、96個の記憶要素を有する96行を有する記憶要素の96×96個のアレイを含み、各記憶要素は、それぞれのスケジューラエントリに記憶されたマイクロ動作が、対応する他のスケジューラエントリに記憶されたマイクロ動作に対する依存関係を有するか否かを示す値を記憶する。依存関係情報を更新するための要素は、
図4では明確にするために省略されているが、依存関係情報を受信し、所定のスケジューラエントリに記憶されたマイクロ動作が他のスケジューラエントリに記憶されたマイクロ動作への依存関係を有するか否かを示すために記憶要素402を更新するための回路を含む。各記憶要素402は、それぞれのスケジューラエントリに記憶されたマイクロ動作が実行ユニットへの発行のためにピッキングされる準備が完了しているか否かを決定するために使用される回路(例えば、論理ゲート等)を含む論理要素404に関連付けられる。明確にするために、
図4では、いくつかの論理要素404のみにラベル付けされている。完了マイクロ動作信号線(COMPLETED MICRO-OPERATIONS)406は、マイクロ動作が実行を完了したスケジューラエントリ-したがって、他のスケジューラエントリに記憶されたマイクロ動作に対して結果が利用可能である(又は少なくとも発行された-したがって、他のスケジューラエントリに記憶されたマイクロ動作が発行される時間までに結果が利用可能になる)スケジューラエントリを識別する依存関係マトリックス400への入力信号線である。いくつかの実施形態では、マイクロ動作の実行を完了すると、対応する完了マイクロ動作信号線406が(例えば、ブロッキング回路316及び発行されたフリップフロップ312を介してピッカ回路によって)アサートされ、全ての依存マイクロ動作が依存関係マトリックス400から除去されるまでアサートされたままである。準備完了マイクロ動作信号線(READY)408は、(1つ以上の他のマイクロ動作の完了により)全ての依存関係が解決されており、したがって記憶されたマイクロ動作が実行ユニットへの発行のためにピッキングされる準備完了マイクロ動作を記憶するスケジューラエントリを識別する、依存関係マトリックス400からの出力信号線である。
【0036】
図3に戻ると、クロック306の第1のサイクル302において、遅延ウェイク回路322は、遅延準備完了信号(LATE READY)324を生成する。遅延準備完了信号324は、クロックの前のサイクル(すなわち、クロックの0番目のサイクル)において発行されたマイクロ動作に基づいて実行ユニットへの発行のためにピッキングされる準備完了マイクロ動作を識別する信号である。遅延ウェイク回路322は、発行された信号(ISSUED)326を依存関係マトリックス320に転送することによって遅延準備完了信号324を生成し、依存関係マトリックス320は準備完了信号(READY)328を出力する。より詳細には、依存関係マトリックス320は、発行された信号326を論理要素(例えば、論理要素404)に提供することによって準備完了信号328を生成し、論理要素は、実行ユニットへの発行の準備完了マイクロ動作を記憶するスケジューラエントリを識別するための準備完了信号328を生成する。次に、遅延ウェイク回路322は、準備完了信号328を遅延準備完了信号324として早期ウェイク回路314に転送する。次に、早期ウェイク回路314は、遅延準備完了信号324に基づいて早期準備完了信号(EARLY READY)330を生成する。早期ウェイク回路314は、遅延準備完了信号324を遅延準備完了信号(LATE READY)332として依存関係マトリックス320に転送することによって早期準備完了信号330を生成し、依存関係マトリックス320は準備完了信号(READY)334を出力する。より詳細には、依存関係マトリックス320は、準備完了信号334を生成する論理要素(例えば、論理要素404)に遅延準備完了信号332を提供することによって準備完了信号334を生成する。準備完了信号334は、遅延準備完了信号332において準備完了として識別されたスケジューラエントリに記憶されたマイクロ動作の全てが実行のためにピッキングされた場合にマイクロ動作が準備完了になるスケジューラエントリを識別する。実行ユニットが存在するよりも多くのスケジューラエントリが遅延準備完了信号332において準備完了として識別され得るので、遅延準備完了信号332において準備完了として識別されたスケジューラエントリに記憶されたマイクロ動作のうちのいくつかは、ピッキングされなくてもよい。したがって、マイクロ動作が準備完了信号334において準備完了になるスケジューラエントリの識別は、投機的である(すなわち、発生することが保証されない)。換言すると、早期準備完了信号330は、準備完了しているが、親マイクロ動作がピッキングされるかどうか/何れの親マイクロ動作がピッキングされるか未だ知られていない親マイクロ動作に基づいて、子マイクロ動作をピッキングの準備完了しているものとして投機的に識別する。クロック306の第1のサイクル302の終わりに、早期準備完了信号330が早期準備完了フリップフロップ310にキャプチャされる。
【0037】
クロック306の第2のサイクル304において、早期準備完了信号330が早期準備完了フリップフロップ310によってピッカ回路336に提供される。換言すると、実行可能であると投機的に識別されたマイクロ動作(すなわち、これらのマイクロ動作が記憶されているスケジューラエントリ)は、ピッカ回路336が実行ユニットへの発行が準備完了していると投機的に識別されたマイクロ動作の中からピッキングすることができるように、ピッカ回路336に提供される。次いで、ピッカ回路336は、実行ユニットへの発行が準備完了していると投機的に識別されたマイクロ動作の中からピッキングする。いくつかの実施形態では、この動作のために、ピッカ回路336は、最も古い準備完了マイクロ動作が最初にピッキングされ、後続の準備完了マイクロ動作が経過時間順にピッキングされるように、経過時間順に準備完了マイクロ動作をピッキングする。次に、ピッカ回路336は、ピッキングされたマイクロ動作(PICKED UOPS)338をブロッキング回路316に転送する。ブロッキング回路316は、ピッキングされたマイクロ動作338と、遅延準備完了信号324とを受信し、遅延準備完了信号324は、クロックの前のサイクルにおいて発行されたマイクロ動作に基づいて実行ユニットへの発行のためにピッキングされる準備完了マイクロ動作を識別する(すなわち、クロックの第1のサイクルにおいて、これらの動作がクロックの第2のサイクル発生することを想起する)。したがって、遅延準備完了信号324は、準備完了として投機的に識別されたピッキングされたマイクロ動作の親マイクロ動作、すなわち子マイクロ動作のうち何れが、実行ユニットへの発行のためにピッキングされることになるかを確実に識別する。これは、発行のためにピッキングされた準備完了親マイクロ動作を識別することによって、第1のサイクル302からの投機を解決する(全ての準備完了親マイクロ動作が発行のためにピッキングされることが保証されているわけではないことを想起されたい)。次いで、ブロッキング回路316は、投機的に準備完了として識別されたが準備完了ではなかったピッキングされたマイクロ動作の発行をブロックし、これは投機ミスを解決する。しかしながら、ブロッキング回路316は、残りのピッキングされたマイクロ動作が実行回路に発行されることを許可する。発行されると、残りのマイクロ動作は、処理及び実行のために下流回路(すなわち、「レジスタ読み取り/実行」)に進む。クロック306の第2のサイクル304の終了時に、ピッキングされたマイクロ動作338(例えば、発行されたマイクロ動作のスケジューラエントリの識別子)が、発行されたフリップフロップ312にキャプチャされる。上記で説明したように、発行されたフリップフロップ312から、発行された信号326は、次の遅延準備完了信号324を生成するために遅延ウェイク回路322に転送される。
【0038】
いくつかの実施形態では、ピッカ回路(例えば、ピッカ回路336)は、経過時間順で実行ユニットに発行するためにマイクロ動作をピッキングする。例えば、いくつかの実施形態では、ピッカ回路は、実行ユニットに発行するためのマイクロ動作を、最も古い準備完了マイクロ動作から経過時間順に新しいマイクロ動作へと順にピッキングする。これらの実施形態のうちのいくつかにおいて、ピッカ回路は、経過時間順でマイクロ動作をピッキングするために経過時間マトリックスを使用する。概して、経過時間マトリックスは、スケジューラエントリに記憶されたアイテムの相対経過時間を識別するために使用される情報を含むデータ構造である。
図5は、いくつかの実施形態による、経過時間マトリックス500を示すブロック図を示している。
図6は、いくつかの実施形態による、経過時間マトリックス600の縮小形式を示すブロック図を示している。
図5~
図6の例では、Ms及びKsは、例示の目的で経過時間マトリックス500及び600の要素内の値プレースホルダとして使用されるが、特定の意味を持たない。経過時間マトリックス500及び600におけるビットの値及び相対経過時間情報の解釈については、以下でより詳細に説明する。
【0039】
図5に見られるように、経過時間マトリックス500は、行504及び列506に配置されたいくつかの要素502を含む(明確にするために、
図5ではそれらのうちのいくつかのみがマークされている)。各行及び列内の要素は、異なるスケジューラエントリに関連付けられ、関連付けられたスケジューラエントリの(すなわち、関連付けられたエントリに記憶されたマイクロ動作の)経過時間情報を記憶するために使用される。例えば、経過時間マトリックス500の最下行及び最左列は、スケジューラエントリ「エントリ_0」に関連付けられる。したがって、経過時間マトリックス500の最下行及び最左列は、エントリ_0に記憶されたマイクロ動作に関する経過時間情報を記憶する。同じスケジューラエントリに記憶されたマイクロ動作の相対経過時間を表す値を保持する経過時間マトリックス500の対角行は、実用的ではなく、したがって黒色で示されていることに留意されたい。いくつかの実施形態では、経過時間情報は、指定された数のビットを使用して各要素に記憶される。例えば、いくつかの実施形態では、経過時間情報は、2ビットを使用して経過時間マトリックス500内の各要素に記憶され、00は、より若いアイテムを表し、11は、より古いアイテムを表し、10又は01は、未設定又は無効要素(又は無効値である)を表す。これらの実施形態では、最も古いマイクロ動作を含むスケジューラエントリは、11を含まない(場合によっては全て00である)列に基づいて決定される。
【0040】
図5に示される経過時間マトリックス500は、経過時間マトリックスのためのデータの特定の配置の例であるが、いくつかの実施形態では、経過時間マトリックスは、容易に読み取られない配置(例えば、リスト、表等)を含むが、
図5に示されるものを別様に表す、1つ以上の異なる配置でデータを記憶する。いくつかの実施形態による、経過時間マトリックス500の縮小形式である経過時間マトリックス600が
図6に示されている。経過時間マトリックス500と同様に、経過時間マトリックス600は、行604及び列606に配置された要素602を含む(明確にするために、
図6ではそのうちのいくつかのみがマークされている)。しかしながら、経過時間マトリックス500とは異なり、経過時間マトリックス600は、反射(REF)線608より上の行及び列の要素を欠いている。これは、経過時間マトリックス600のそのような要素に記憶される値が、経過時間マトリックス600に存在する要素の値を反映してスワップすることによって決定され得るからである(この例では、MはKのスワップであり、逆もまた同様である)。これは、点線及びイタリック体の文字(経過時間マトリックス500の対応する要素の値と同様である)を使用して
図6に示されている。換言すると、反射線608の一方の側の要素の情報が与えられると、反射線の他方の側の要素に記憶される値を計算することができる。このため、いくつかの実施形態では、経過時間マトリックス500の代わりに縮小経過時間マトリックス600が使用される。概して、記載の実施形態では、値の任意の配置が、行及び列(又は同等物)のそれぞれのセットを有する経過時間マトリックスに記憶され、スケジューラエントリの相対経過時間を決定するために使用され得る。
【0041】
記載の実施形態では、マルチサイクルスケジューラは、マイクロ動作を実行ユニットへの発行のためにピッキングされる準備が完了しているものとして投機的に識別するための動作を実行する。
図7は、いくつかの実施形態による、実行ユニットへの発行のためにピッキングされる準備完了マイクロ動作を投機的に識別するためのプロセスを示すフローチャートを示している。
図7は、いくつかの実施形態で実行される動作の一般的な例として提示されている。しかしながら、他の実施形態では、異なる動作が実行される、及び/又は、動作が異なる順序で実行される。加えて、プロセスを説明する際に特定の要素(例えば、早期ウェイク回路等)が使用されるが、いくつかの実施形態では、他の要素が動作を実行する。
【0042】
図7に見られるように、プロセスは、早期ウェイク回路(例えば、早期ウェイク回路314)が、子マイクロ動作を、その依存関係が準備完了親マイクロ動作のセットによって満たされる準備が完了しているものとして投機的に識別する場合に開始する(ステップ700)。この動作のために、早期ウェイク回路は、以前に発行されたマイクロ動作(すなわち、祖父母マイクロ動作)に基づいて準備完了親マイクロ動作を識別する遅延準備完了信号(例えば、遅延準備完了信号324)を受信すること等によって、準備完了親マイクロ動作のセットを決定する。次いで、早期ウェイク回路は、準備完了親マイクロ動作によって満たされる依存関係を有する子マイクロ動作を発行準備完了として識別する。上記で説明したように、いくつかの実施形態では、これは、準備完了親マイクロ動作に基づいて準備完了子マイクロ動作を決定するために依存関係マトリックスを使用する早期ウェイク回路を含む。発行のためにピッキングされた又はピッキングされる準備完了親マイクロ動作は、この時点では知られていないことに留意されたい(準備完了親マイクロ動作自体は、後で第1のサイクルにおいてピッキングされる)。したがって、準備完了親マイクロ動作の全てがピッキングされ、実行のために発行されると仮定すると、子マイクロ動作は、投機的に実行可能として識別される。以下に説明するように、ステップ700における投機ミス、すなわち、1つ以上の準備完了親マイクロ動作がピッキングされなかった場合に誤っていることが判明した子マイクロ動作の準備完了としての識別は、その後訂正される。
【0043】
ステップ700では、準備完了親マイクロ動作の各々が実行されると、実行ユニットに、子マイクロ動作のうち1つ以上によって入力として(又は他の方法で)必要とされる結果を生成させる(又は他の方法でプロセッサ状態を更新させる)という点で、子マイクロ動作の各々の依存関係は、準備完了親マイクロ動作によって「満たされる」。場合によっては、子マイクロ動作の一部又は全部は、準備完了親マイクロ動作のうち1つ以上に加えて、1つ以上の以前に発行されたマイクロ動作に対する依存関係を有するが、1つ以上の準備完了親マイクロ動作は、子マイクロ動作の実行が準備完了し、したがって、親マイクロ動作が子マイクロ動作の依存関係を「満たす」ために、これらの子マイクロ動作によって必要とされる最終結果(又は他のプロセッサ状態更新)を生成する。
【0044】
次に、ピッカ回路(例えば、ピッカ回路336)は、実行回路に発行する準備完了していると投機的に識別された子マイクロ動作の一部又は全部をピッキングする(ステップ702)。この動作のために、早期ウェイク回路は、準備完了として投機的に識別された子マイクロ動作の識別(例えば、スケジューラエントリ識別子等)をピッカ回路に通信し、ピッカ回路は、実行ユニットに発行するために準備完了子マイクロ動作の中からピッキングする。いくつかの実施形態では、ピッカ回路は、年長児マイクロ動作が最初にピッキングされる状態で、準備完了子マイクロ動作を経過時間によってピッキングする(例えば、ピッカ回路が、経過時間マトリックス又は相対的マイクロ動作経過時間に関する他の識別子を使用して、マイクロ動作の相対経過時間を決定する)。この動作に関して、実行ユニットよりも多くの準備完了子マイクロ動作が存在し得るので、ピッカ回路は、準備完了子マイクロ動作の全てよりも少ないものをピッキングし得ることに留意されたい。場合によっては、準備完了として投機的に識別された子マイクロ動作は、他の準備完了マイクロ動作(すなわち、前のサイクルにおいて準備完了である/準備完了であったが、前のサイクルにおける準備完了マイクロ動作の過多に起因してピッキングされなかった準備完了マイクロ動作等)とともに含まれる。これらの実施形態では、経過時間ベースのピッキングに起因して、より古い準備完了マイクロ動作が準備完了子マイクロ動作の前にピッキングされることになり、準備完了子マイクロ動作の何れもピッキングされない可能性がある。しかし、
図7の例では、ピッキングを待っている他の/前の準備完了マイクロ動作がなく、したがって準備完了子マイクロ動作の一部又は全部がピッキングされると仮定する。
【0045】
次いで、遅延ウェイク回路(例えば、遅延ウェイク回路322)は、実行ユニットに発行されなかった準備完了親マイクロ動作のセットの中から親マイクロ動作を決定し、したがって、準備完了ではなかった準備完了として投機的に識別された子マイクロ動作を決定する(ステップ704)。この動作のために、遅延ウェイク回路は、クロックの前のサイクルにおいて発行された準備完了親マイクロ動作の識別情報(例えば、発行された信号326)を受信する。次いで、遅延ウェイク回路は、依存関係マトリックスを使用して、それぞれの親アプリケーションが発行のためにピッキングされなかったために準備完了していないことが判明した、ステップ700において準備完了していると投機的に識別された子マイクロ動作を決定する。このようにして、上記で説明したように、遅延ウェイク回路は、個々の子マイクロ動作の準備に関する投機ミスを決定する。
【0046】
次に、遅延ウェイク回路は、投機的に準備完了として識別されたが準備完了ではなかったピッキングされた子マイクロ動作の発行をブロックするが、投機的に準備完了として識別された残りのピッキングされた子マイクロ動作が実行回路に発行されることを許可する(ステップ706)。この動作のために、遅延ウェイク回路は、準備完了子マイクロ動作の識別情報(例えば、遅延準備完了信号324)をブロッキング回路(例えば、ブロッキング回路316)に通信し、ブロッキング回路は、ピッキングされたが準備完了ではないマイクロ動作が実行ユニットに発行されるのを防止する。これは、ピッキングされたが準備完了していないマイクロ動作を破棄すること、又は、ピッキングされたが準備完了していないマイクロ動作を処理するためにより複雑な動作を実行することを含むことができる。ブロッキング回路は、遅延ウェイク回路から通信された識別に基づいて、実行ユニットに発行する準備が完了したピッキングされたマイクロ動作を可能にし、それによって、これらのマイクロ動作が実行中に進むことを可能にする。ブロックされたマイクロ動作はブロックされるが、ブロックされたマイクロ動作は、実行のために親アプリケーションを実行ユニットに発行した後に、実行のために最終的にピッキングされる。
【0047】
いくつかの実施形態では、少なくとも1つの電子デバイス(例えば、電子デバイス100等)又はその一部は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを使用して、本明細書に記載の動作のうち一部又は全部を実行する。より詳細には、少なくとも1つの電子デバイスは、コンピュータ可読記憶媒体からコード及び/又はデータを読み取り、記載の動作を実行する場合にコードを実行し、及び/又は、データを使用する。コンピュータ可読記憶媒体は、電子デバイスによって使用されるコード及び/又はデータを記憶する任意のデバイス、媒体又はそれらの組み合わせであり得る。例えば、コンピュータ可読記憶媒体としては、フラッシュメモリ、ランダムアクセスメモリ(例えば、DDR5 DRAM、SRAM、eDRAM等)、不揮発性RAM(例えば、位相変化メモリ、強誘電性ランダムアクセスメモリ、スピントランスファートルクランダムアクセスメモリ、磁気抵抗ランダムアクセスメモリ等)、読み取り専用メモリ(read-only memory、ROM)、及び/又は、磁気若しくは光学記憶媒体(例えば、ディスクドライブ、磁気テープ、CD、DVD等)等の揮発性及び/又は不揮発性メモリが挙げられ得るが、これらに限定されない。
【0048】
いくつかの実施形態では、1つ以上のハードウェアモジュールが本明細書に記載の動作を実行する。例えば、ハードウェアモジュールとしては、1つ以上の中央演算処理装置(CPU)/CPUコア、グラフィック処理装置(GPU)/GPUコア、特定用途向け集積回路(application-specific integrated circuit、ASIC)チップ、フィールドプログラマブルゲートアレイ(FPGA)、コンプレッサ若しくはエンコーダ、計算ユニット、埋め込みプロセッサ、加速処理ユニット(APU)、コントローラ、リクエスタ、コンプリータ、ネットワーク通信リンク、及び/又は、他の機能ブロックが挙げられ得るが、これらに限定されない。そのようなハードウェアモジュール内の回路構成(例えば、集積回路素子、ディスクリート回路素子等)がアクティブ化されると、回路構成は、動作の一部又は全てを実行する。いくつかの実施形態では、ハードウェアモジュールは、命令(例えば、プログラムコード、ファームウェア等)の実行時に動作を実行する実行パイプライン、計算又は処理ユニット等の汎用回路を含む。いくつかの実施形態では、ハードウェアモジュールは、命令を実行することなく「ハードウェアでの」動作を実行する特定用途向け回路又は専用回路を含む。
【0049】
いくつかの実施形態では、本明細書に記載の機能ブロック及び回路要素(例えば、電子デバイス100又はそのいくつかの部分)の一部又は全部を表すデータ構造は、電子デバイスによって読み取られ、機能ブロック及び回路要素を含むハードウェアを加工するための直接的又は間接的に使用され得るデータベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶される。例えば、データ構造は、Verilog又はVHDL等の高レベル設計言語(high-level design language、HDL)におけるハードウェア機能の行動レベルの記述又はレジスタ転送レベル(register-transfer level、RTL)の記述であり得る。記述は、記述を合成して、上記の機能ブロック及び回路要素を含むハードウェアの機能を表す合成ライブラリからのトランジスタ/回路素子のリストを含むネットリストを生成することができる合成ツールによって読み取られ得る。ネットリストは、次に、マスクに適用される幾何学的形状を記述するデータセットを生成するために配置され、ルーティングされてもよい。マスクは、次いで、上記の機能ブロック及び回路要素に対応する半導体回路又は回路(例えば、集積回路)を製造するために、様々な半導体加工ステップで使用され得る。代替的に、コンピュータアクセス可能記憶媒体上のデータベースは、所望の場合、ネットリスト(合成ライブラリの有無にかかわらず)若しくはデータセット、又は、グラフィック・データ・システム(Graphic Data System、GDS)IIデータであってもよい。
【0050】
この記載では、変数又は不特定の値(すなわち、値の特定の例を含まない値の一般的な説明)は、N、T、X等の文字によって表される。本明細書で使用されるように、この記載において異なる場所で類似の文字を使用する可能性があるにもかかわらず、各場合における変数及び不特定の値は、必ずしも同じではなく、すなわち、一般的な変数及び不特定値のいくつか又は全てに対して意図される変数及び値が存在し得る。換言すると、Nの特定の値の例、及び、この記載における変数及び不特定の値を表すために使用される任意の他の文字は、必ずしも互いに関連しない。
【0051】
本明細書で使用される場合、「その他」又は「等」という表現は、1つの及び/又は事例、すなわち、その他が関連付けられるリスト内の要素「のうち少なくとも1つ」の等価物を提示することが意図される。例えば、「電子デバイスが第1の動作、第2の動作等を実行する」という記述では、電子デバイスは、第1の動作、第2の動作、及び、他の動作のうちの少なくとも1つを実行する。加えて、1つ等に関連付けられたリスト内の要素は、例のセットの中からの例に過ぎず、実施例の少なくともいくつかは、いくつかの実施形態では現れない場合がある。
【0052】
実施形態の上述した説明は、例示及び説明の目的でのみ提示されている。それらは、網羅的であること、又は、実施形態を開示された形態に限定することを意図するものではない。したがって、多くの修正及び変形が当業者には明らかであろう。更に、上記の開示は、実施形態を限定することを意図するものではない。実施形態の範囲は、添付の特許請求の範囲によって定義される。
【国際調査報告】