(57)【要約】命令のエイジオーダーを維持する、アドレス生成時のロードキュー（ＬＤＱ）及びストアキュー（ＳＴＱ）エントリの割り当てのためのシステム及び方法が説明される。具体的には、ＬＤＱ及びＳＴＱエントリの書き込みは、アドレス生成時まで延期される。これにより、ロード及びストア動作がディスパッチされ、若い動作（ストア及びロード動作ではない可能性がある）もディスパッチされ、これらの命令を実行することができる。ロード又はストア動作のアドレス生成は、ロード又はストアキューエントリが当該動作に使用可能になるまで、アドレス生成スケジューラキュー（ＡＧＳＱ）で保持される。ロードキューエントリ又はストアキューエントリの追跡は、デコードエンジンではなく、ＡＧＳＱで効果的に行われる。ＬＤＱ及びＳＴＱの深さは、デコードエンジン側からは見えず、有効な処理及びキューの深さが増加する。【選択図】図１
2019525351.tif 000002
【特許請求の範囲】
【請求項１】
マイクロ動作を処理するための方法であって、
マイクロ動作をフェッチすることと、
前記マイクロ動作をエイジオーダースケジューラキューにディスパッチすることであって、前記エイジオーダースケジューラキューは、各マイクロ動作に関連するディスパッチペイロードを保持する、ことと、
ロード／ストアキュー内の関連するキューエントリが利用可能であり、マイクロ動作に必要なソース情報が準備できていることを条件として、前記マイクロ動作のためのアドレス生成を実行することと、
前記マイクロ動作のディスパッチペイロードを読み出すことと、
前記マイクロ動作のディスパッチペイロードを前記ロード／ストアキューに送信することと、を含む、
方法。
【請求項２】
ディスパッチ時に、プログラム順で各マイクロ動作を前記ロード／ストアキュー内のキューエントリに関連付けて、エイジオーダーを維持することをさらに含む、
請求項１の方法。
【請求項３】
前記ロード／ストアキューからの入力に基づいて、コミットされていない最古のマイクロ動作キューエントリ番号を更新することをさらに含む、
請求項１の方法。
【請求項４】
前記エイジオーダースケジューラキューにおいて、前記コミットされていない最古のマイクロ動作キューエントリを各マイクロ動作のキューエントリと比較して、前記マイクロ動作のキューエントリが利用可能かどうかを判別することをさらに含む、
請求項３の方法
【請求項５】
前記マイクロ動作は、ストアマイクロ動作である、
請求項３の方法。
【請求項６】
ディスパッチウィンドウサイズは、前記ロード／ストアキューの深さ及び前記エイジオーダースケジューラキューの深さである、
請求項１の方法。
【請求項７】
前記ロード／ストアキューの深さを超えるディスパッチを可能にするために、前記ロード／ストアキューの異なるエポックが追跡され、各エポックは、前記ロード／ストアキューのサイクルを表す、
請求項１の方法。
【請求項８】
マイクロ動作を処理するためのプロセッサであって、
ロード／ストアキューと、
エイジオーダースケジューラキューと、
デコーダと、を備え、
前記デコーダは、マイクロ動作を前記エイジオーダースケジューラキューにディスパッチするように構成されており、
前記エイジオーダースケジューラキューは、各マイクロ動作に関連するディスパッチペイロードを保持するように構成されており、
前記エイジオーダースケジューラキューは、前記ロード／ストアキュー内の関連するキューエントリが利用可能であり、マイクロ動作に必要なソース情報が準備できていることを条件として、前記マイクロ動作のためのアドレス生成を実行するように構成されており、
前記エイジオーダースケジューラキューは、前記マイクロ動作の前記ディスパッチペイロードを読み出すように構成されており、
前記エイジオーダースケジューラキューは、前記ディスパッチペイロードを前記ロード／ストアキューに送信するように構成されている、
プロセッサ。
【請求項９】
前記デコーダは、プログラム順で各マイクロ動作を前記ロード／ストアキュー内のキューエントリに関連付けて、前記マイクロ動作のエイジオーダーを維持するように構成されている、
請求項８のプロセッサ。
【請求項１０】
前記ロード／ストアキューは、前記関連するキューエントリが利用可能であることを前記エイジオーダースケジューラキューに通知するように構成されている、
請求項９のプロセッサ。
【請求項１１】
前記スケジューラは、
前記ロード／ストアキューからの入力に基づいて、コミットされていない最古のマイクロ動作キューエントリ番号を更新し、
コミットされていない最古のマイクロ動作キューエントリを各前記マイクロ動作のキューエントリと比較して、前記マイクロ動作のキューエントリが利用可能かどうかを判別するように構成されている、
請求項８のプロセッサ。
【請求項１２】
前記マイクロ動作は、ストアマイクロ動作である、
請求項８のプロセッサ。
【請求項１３】
ディスパッチウィンドウサイズは、前記ロード／ストアキューの深さ及び前記エイジオーダースケジューラキューの深さである、
請求項８のプロセッサ。
【請求項１４】
前記ロード／ストアキューの深さを超えるディスパッチを可能にするために、前記ロード／ストアキューの異なるエポックが追跡され、各エポックは、前記ロード／ストアキューのサイクルを表す、
請求項８のプロセッサ。
【請求項１５】
マイクロ動作を処理するための方法であって、
各マイクロ動作に関連するディスパッチペイロードを保持するためにマイクロ動作をスケジューラキューにディスパッチすることと、
利用可能な関連するキューエントリを有するマイクロ動作であって、マイクロ動作の準備ができているソース情報を有するマイクロ動作のためのアドレス生成を実行することと、
前記マイクロ動作のディスパッチペイロードを読み出すことと、
前記マイクロ動作のディスパッチペイロードをロード／ストアキューに送信することと、を含む、
方法。
【請求項１６】
エイジオーダーを維持するために、プログラム順でキューエントリを各マイクロ動作に割り当てることをさらに含む、
請求項１５の方法。
【請求項１７】
前記ロード／ストアキューからの入力に基づいて、コミットされていない最古のマイクロ動作キューエントリ番号を更新することをさらに含む、
請求項１５の方法。
【請求項１８】
前記スケジューラキューにおいて、前記コミットされていない最古のマイクロ動作キューエントリを各マイクロ動作のキューエントリと比較して、前記マイクロ動作のキューエントリが利用可能かどうかを判別することをさらに含む、
請求項１７の方法。
【請求項１９】
ディスパッチウィンドウサイズは、前記ロード／ストアキューの深さ及び前記スケジューラキューの深さである、
請求項１５の方法。
【請求項２０】
前記ロード／ストアキューの深さを超えるディスパッチを可能にするために、前記ロード／ストアキューの異なるエポックが追跡され、各エポックは、前記ロード／ストアキューのサイクルを表す、
請求項１５の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年８月１５日に出願された米国特許出願第１５／２３６，８８２号の利益を主張し、その内容は、完全に記載されているかのように、参照により本明細書に組み込まれる。
【背景技術】
【０００２】
プロセッサには、一般に、フェッチ、デコード（又は、ディスパッチ）及び実行ステージを含む命令パイプラインが関連付けられている。デコードステージは、フェッチキューから命令を取得し、エントリをロードキュー（ＬＤＱ）又はストアキュー（ＳＴＱ）に割り当てる。ＬＤＱ及びＳＴＱリソースは、その深さ（すなわち、キューに記憶することができるエントリの数）及びキューの有効期間がプロセッサの性能に影響を与える構造である。より深いＬＤＱ及びＳＴＱは、クロック当たりの命令（ＩＰＣ）数をより多くすることができるが、ある時点で、より深いＬＤＱ及びＳＴＱによって、タイミング問題が発生する。ＬＤＱ及びＳＴＱエントリは、通常、命令のディスパッチ時に割り当てられる。ロード又はストア動作がディスパッチポイントにあるが、ＬＤＱ及びＳＴＱが満杯である場合、ＬＤＱ及びＳＴＱエントリが割り当て解除されるまでディスパッチが停止される。これは、ＬＤＱ及びＳＴＱの深さがプロセッサの有効ウィンドウサイズに対する制限となること、すなわち、一度に処理できる命令の数に制限があることを意味する。
【０００３】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００４】
【図１】特定の実施態様による、プロセッサのコア処理ユニットのハイレベルブロック図及びフロー図である。
【図２】特定の実施態様による、整数スケジューラ及び／又は実行ユニットのハイレベルブロック図及びフロー図である。
【図３】特定の実施態様による、スケジューラ及び／又は実行ユニットのハイレベルブロック図及びフロー図である。
【図４】特定の実施態様による、アドレス生成時のロード及びストアキューの割り当てのための方法のフロー図である。
【図５】１つ以上の開示された実施態様を実装することができる例示的なデバイスのブロック図である。
【発明を実施するための形態】
【０００５】
プロセッサは、一般に、フェッチ、デコード（又は、ディスパッチ）及び実行ステージを含む命令パイプラインに従って動作する。デコード又はディスパッチステージは、フェッチキューから命令を取得し、エントリをロードキュー（ＬＤＱ）又はストアキュー（ＳＴＱ）に割り当てる。ＬＤＱ及びＳＴＱエントリは、通常、命令のディスパッチ時に割り当てられる。ロード又はストア動作がディスパッチポイントにあるが、ＬＤＱ又はＳＴＱが満杯である場合、ＬＤＱ又はＳＴＱエントリが割り当て解除されるまでディスパッチが停止される。これは、ＬＤＱ及びＳＴＱの深さが、プロセッサの有効ウィンドウサイズに対する制限となることを意味する。
【０００６】
命令のエイジオーダー（age-order）を維持する、アドレス生成時のＬＤＱ及びＳＴＱエントリの割り当てのためのシステム及び方法が説明される。具体的には、ＬＤＱ及びＳＴＱエントリの書き込みは、アドレス生成時まで延期される。これにより、ロード及びストア動作がディスパッチされ、若い動作（ストア及びロード動作ではない可能性がある）もディスパッチされ、これらの命令を開始又は完了させることができる。ロード又はストア動作のアドレス生成は、ロードキューエントリ又はストアキューエントリが当該動作に使用可能になるまで、アドレス生成スケジューラキュー（ＡＧＳＱ）で保持される。ＬＤＱエントリ又はＳＴＱエントリの追跡は、ディスパッチポイントではなく（すなわち、デコードエンジンではなく）ＡＧＳＱで効果的に行われる。全てがＡＧＳＱにプッシュダウンされると、ＬＤＱ及びＳＴＱの深さがデコードエンジン側からは見えず、以下に説明するように有効な深さが増加する。
【０００７】
図１は、特定の実施態様による、プロセッサ１００のコア処理ユニット１０５のハイレベルブロック図及びフロー図である。コア処理ユニット１０５は、スケジューラ及び実行ユニット（ＳＣＥＸ）１１５にマイクロ動作（マイクロオペレーション）を提供するデコーダユニット１１０を含む。デコーダユニット１１０は、キャッシュ１２２及びマイクロ動作キャッシュ１２４の各々に接続された分岐予測器１２０を含む。また、キャッシュ１２２は、デコーダ１２６に接続されている。デコーダ１２６及びマイクロ動作キャッシュ１２４の各々は、マイクロ動作キュー１２８に接続されている。
【０００８】
ＳＣＥＸ１１５は、整数ＳＣＥＸ１３０と、浮動小数点ＳＣＥＸ１３２と、を含み、これらの両方がキャッシュ１３４に接続されている。また、キャッシュ１３４は、Ｌ２キャッシュ１３６と、ＬＤＱ１３８と、ＳＴＱ１４０と、に接続されている。整数ＳＣＥＸ１３０は、算術論理ユニット（ＡＬＵ）スケジューラキュー（ＡＬＳＱ）１５２と、アドレス生成ユニット（ＡＧＵ）スケジューラキュー（ＡＧＳＱ）１５４と、を含むスケジューラ１５１に接続された整数リネーマ（integer renamer）１５０を含む。さらに、スケジューラ１５１（具体的には、ＡＬＳＱ１５２及びＡＧＳＱ１５４）は、ＡＬＵ１５６及びＡＧＵ１５８の各々に接続されている。整数ＳＣＥＸ１３０は、整数物理ファイルレジスタ１６０も含む。浮動小数点ＳＣＥＸ１３２は、スケジューラ１７２に接続された浮動小数点リネーマ（floating point renamer）１７０を含む。また、スケジューラ１７２は、乗算器１７４及び加算器１７６の各々に接続されている。さらに、浮動小数点ＳＣＥＸ１３２は、浮動小数点物理ファイルレジスタ１７８を含む。
【０００９】
パイプラインプロセッサは、命令のストリームをパイプラインに安定に供給する必要がある。分岐予測器１２０は、何れのマイクロ動作のセットがパイプライン化プロセッサでフェッチされ、実行されるかを予測する。これらのマイクロ動作は、フェッチされ、キャッシュ１２２に記憶され、次いで、キャッシュ１２２がデコーダ１２６によってデコードされる。マイクロ動作キャッシュ１２４は、キャッシュ１２２からのマイクロ動作をデコーダ１２６がデコードする場合に、分岐予測器１２０からのマイクロ動作をキャッシュする。マイクロ動作キュー１２８は、マイクロ動作を実行のためにディスパッチする目的で、デコーダ１２６及びマイクロ動作キャッシュ１２４からのマイクロ動作を記憶してキューに入れる。
【００１０】
従来のパイプライン処理では、マイクロ動作キューは、マイクロ動作に関連するペイロードを記憶するために、マイクロ動作をロードキュー又はストアキューにディスパッチする。例示すると、ストアキューは、マイクロ動作キューから６つのマイクロ動作（このうち４つはストアマイクロ動作である）を受け入れ、ディスパッチ時にディスパッチペイロードをストアキューに書き込むことができる。次に、アドレス生成時に、ストアキューは、スケジューラからキューエントリ番号を受信し、何れのストアキューエントリが処理されているかを特定する。スケジューラは、ディスパッチペイロードを読み出し、セグメンテーションチェックのためにセグメンテーションロジックに送信し、マイクロ動作パイプ上での可能なピックのためにロードキューに送信する。すなわち、従来のパイプライン処理は、ストアキュー及びロードキューに対する２パス書き込み処理であり、ペイロードのディスパッチ時及びアドレス生成時に１回ずつアドレスを生成する。
【００１１】
物理的に、これはいくつかの理由で困難である。第１に、アーキテクチャは、マイクロ動作キューの全ての幅をサポートする必要がある。例えば、ディスパッチ時に６つのマイクロ動作（４つのストアマイクロ動作を含む）を書き込むと、大量のワイヤ及びマルチプレクサが必要となり、ディスパッチペイロードを保持するストアキューの領域で輻輳が発生する。第２に、アドレス生成時にペイロードを読み出すことは、アドレス生成ユニットからストアキューにキューエントリ番号を送信することと、ペイロードを読み出すことと、ペイロードをセグメンテーションロジック及びロードキューに送信することと、を含む困難なパス（すなわち、タイミングパス）のセットを保証することを必要とする。ストアキューはディスパッチペイロードを保持しているので、アドレスが生成されるまでストアマイクロ動作では何もできないにもかかわらず、ストアキューエントリがディスパッチ時から占有されることを意味する。この結果、マイクロ動作の幅に必要なアーキテクチャが無駄になっている。すなわち、ストアキュー及びロードキューの深さによって、プロセッサのウィンドウが制限される（すなわち、一度に処理可能な動作の数に制限がある）。
【００１２】
一実施態様によれば、マイクロ動作は、従来のパイプライン処理のようにＬＤＱ１３８及びＳＴＱ１４０に直接書き込むのではなく、整数ＳＣＥＸ１３０及び浮動小数点ＳＣＥＸ１３２のみにディスパッチされる。具体的には、マイクロ動作は、１）整数リネーム１５０を介してスケジューラ１５１に送られ、２）浮動小数点リネーム１７０を介してスケジューラ１７２に送られる。スケジューラ１５１は、ＡＧＳＱ１５４において、マイクロ動作のディスパッチペイロード（例えば、ロード及びストアマイクロ動作のディスパッチペイロード）を保持する。ＡＧＳＱ１５４は、適切なＬＤＱ１３８又はＳＴＱ１４０内の特定のキューエントリが利用可能になるまで、マイクロ動作（例えば、ロード及びストアマイクロ動作）のディスパッチペイロードを保持する。キューエントリが利用可能になり、ソース情報が準備されると、ＡＧＳＱ１５４は、アドレスを生成し、ディスパッチペイロードを読み出し、ディスパッチペイロードをＬＤＱ１３８又はＳＴＱ１４０に送信する。
【００１３】
エイジオーダーの動作又は順番通りのキューを維持するために、全てのストアマイクロ動作は、特定のストアキューエントリ又はキュー識別子と関連付けられる。ストアキューエントリは、プログラム順でディスパッチ時にストアマイクロ動作に割り当てられる（例えば、ストアマイクロ動作をストアキューエントリ０に割り当てることができ、プログラム順で次のストアマイクロ動作をストアキューエントリ１に割り当てることができ、プログラム順でさらに次のストアマイクロ動作をストアキューエントリ２に割り当てることができる等）。これにより、ストアマイクロ動作は、キューのエントリ番号又は位置によってストアキューに順番に保持される。位置順（ordered-by-position）ストアキューは、ストアマイクロ動作を処理するための簡単な方法であり、当業者に知られている。本実施態様では、ディスパッチ時に、ストアキューエントリがマイクロ動作に利用可能であることを必要とすることなく、その順番通りのプロパティ及びディスパッチ時のキューエントリの割り当てを保持する。
【００１４】
ディスパッチ時にストアキューエントリを割り当てることにより、ＡＧＳＱ及びＡＬＳＱは、ＡＧＳＱ及びＡＬＳＱにおいてコミットされていない最古のストアマイクロ動作ストアキューエントリ番号を、ストアマイクロ動作のストアキューエントリと比較することによって、ストアキューエントリがいつ解放されるかを容易に判別することができる。特に、スケジューラ１５１は、ＡＧＳＱ１５４がいつアドレス生成を実行してディスパッチペイロードをＳＴＱ１４０に送信することができるか、及び、ＡＬＳＱ１５２がいつストアデータをＳＴＱ１４０に送信することができるかを知る必要がある。したがって、特定のキューエントリが利用可能になると、当該特定のキューエントリは、ＳＴＱ１４０によってＡＧＳＱ１５４及びＡＬＳＱ１５２に通知される。これについては、図１の出力１８０に関して後述する。
【００１５】
特に、ＬＤＱ１３８及びＳＴＱ１４０は、コミット−割り当て解除信号をスケジューラ１５１（例えば、ＡＧＳＱ１５４及びＡＬＳＱ１５２）に送信して、スケジューラ１５１（例えば、ＡＧＳＱ１５４及びＡＬＳＱ１５２）が、古いストアマイクロ動作が各々のストアキューエントリを割り当て解除して解放するときに、アドレス生成、ディスパッチペイロードの送信、及び、若いストアマイクロ動作のストアデータの送信を可能にするように、コミットされていない最古のストアマイクロ動作のストアキューエントリ番号を更新することができる。これは、例えば、ＬＤＱ１３８及びＳＴＱ１４０からの出力１８０を、スケジューラ１５１（例えば、ＡＧＳＱ１５４及びＡＬＳＱ１５２）の入力に追加することによって実施される。
【００１６】
スケジューラ１５１は、ＡＧＳＱ１５４内の各ストアマイクロ動作及びＡＬＳＱ１５２内の各ストアデータマイクロ動作のストアキューエントリ番号を認識しており、コミットされていない最古のストアマイクロ動作のストアキューエントリ番号を（ラップビットと共に）認識しているので、スケジューラ１５１は、キューエントリが利用可能な適切なマイクロ動作を判別することができる。例えば、ＡＧＳＱ１５４エントリ又はＡＬＳＱ１５２エントリのストアキューエントリ番号が、（ラップビットを適切に考慮する）コミットされていない最古のストアマイクロ動作のキューエントリのストアキューの深さ（ＸＣ＿ＳＴＱＤＥＰＴＨ）内にある場合、当該ストアマイクロ動作のストアキューエントリが（適切なソース情報又はソースオペランドも準備ができていると仮定して）当該ストアマイクロ動作に利用可能であるため、ストアマイクロ動作のためのアドレス生成を進めること又はストアマイクロ動作ディスパッチペイロードを送信することができる。最古のストアマイクロ動作よりも若いＸＣ＿ＳＴＱＤＥＰＴＨ−１ストアであるストアマイクロ動作よりも若いストアマイクロ動作は、これらのストアキューエントリが依然として古いストアマイクロ動作によって占められているので、アドレス生成を実行すること、ディスパッチペイロードを送信すること又はストアデータを送信することが許可されず、マイクロ動作ピッキング（すなわち、ストアマイクロ動作を実行すること）の準備ができていないとみなされる。
【００１７】
全てのディスパッチペイロードをＡＧＳＱ１５４に保持し、アドレス生成時までストアキューの割り当てを遅らせることによって、ストアキューサイズ（例えば、ストアキュー１４０のサイズ）よりも多くのストアマイクロ動作をディスパッチすることができる。ディスパッチストールの原因を排除することによって、さらなるマイクロ動作をウィンドウ内に導入し、実行を開始するのを可能にすることができる。すなわち、いくつかのストアマイクロ動作は、これらのストアキューエントリ内の前のストアマイクロ動作が割り当て解除されるまで開始することができないが、他のマイクロ動作を進めることができる。重要なことは、キャッシュミスであるロードは、アドレス生成をディスパッチして実行し、これらのキャッシュミスを開始させることができる。
【００１８】
ストアキューエントリよりも多くの数のストアマイクロ動作をウィンドウ内で処理するためのサポートには、これらのマイクロ動作のエイジ（age）を比較するためのメカニズムが必要である。エイジを比較するためのメカニズムは、ストアマイクロ動作に関連するストアキューエントリ番号と、ストアキューエントリ番号に付随する「ラップ」ビットと、を使用することによって提供される。ラップビットは、関連するストアマイクロ動作が、ストアキューエントリの何れの「エポック」を使用するかを決定する。各「エポック」は、ストアキューの異なるバージョン又はサイクルを表す。単一のラップビットは、ストアキューの２つの異なる「ラップ」又は「エポック」を追跡する手段を提供する。これにより、フルストアキュー（ＸＣ＿ＳＴＱＤＥＰＴＨ）のディスパッチが可能になる。ストアキューエントリよりも多くのストアマイクロ動作のディスパッチが可能な場合、ウィンドウ内に同じストアキューエントリを有するマイクロ動作が存在する場合だけでなく、ストアキューの複数の異なる「ラップ」又は「エポック」からのマイクロ動作が存在する場合がある。合計で２つのラップビットに対して１つの追加のラップビットは、ストアキューの４つの異なる「ラップ」又は「エポック」を追跡するための手段を提供し、ストアキューの深さの３倍までのディスパッチを可能にする。
【００１９】
図示した例では、実装されたアーキテクチャが４４のストアキューの深さを有し、（アドレス生成時には、最大２８の追加のマイクロ動作ストアに対して）２つの１４エントリのＡＧＳＱがある場合、ウィンドウ内にディスパッチすることが可能なストアの合計は７２になる。したがって、プロセッサは、ストアキューの深さの２倍を超えてディスパッチせず、２つのラップビットを用いて、プロセッサ内の７２のストアマイクロ動作の全てのエイジを追跡し比較する。この場合、ディスパッチストールは不要になる。ラップビットは、ディスパッチ時に計算されるものであり、ＡＧＳＱに保持されているディスパッチペイロードの一部である。ＡＧＳＱスケジューラの深さが、ストアキューの深さの３倍を超えてストアマイクロ動作のディスパッチを可能にする場合、追加のラップビットを追加して、任意の数のストアマイクロ動作のディスパッチを可能にすることができる。
【００２０】
ロードマイクロ動作は、必ずしもエイジオーダーではなく、当業者に知られている他の技術を使用する。一実施態様では、ロードマイクロ動作は、ストアマイクロ動作と同様に動作する。
【００２１】
アーキテクチャの観点からは、本明細書に記載の実施態様は、上記で概説した問題を解決する。第１に、ストアキュー内のディスパッチペイロード書き込みポートの数が低減される。例えば、ディスパッチペイロード書き込みポートの数は、４つ（ディスパッチ時に１サイクル当たり４ストア）から２つ（１サイクル当たり２ストアアドレス生成）に低減する。第２に、困難なタイミングパスが排除される。例えば、キューエントリ番号をストアキューに送信することと、ペイロードを読み出すことと、ペイロードをセグメンテーションロジック及びロードキューに送信することと、を含むタイミングパスが排除される。
【００２２】
ＡＧＳＱ１５４によってアドレス生成が実行され、ディスパッチペイロードが必要に応じてＬＤＱ１３８及びＳＴＱ１４０に記憶されると、コア処理ユニット１０５は、これに応じてマイクロ動作を実行する。ＬＤＱ１３８及びＳＴＱ１４０の各々は、ロードマイクロ動作のデータを返し、ストアマイクロ動作の書き込みを実行し、スケジューラ１５１及びスケジューラ１７２は、各々のソース情報が準備完了になると、マイクロ動作を整数ＳＣＥＸ１３０及び浮動小数点ＳＣＥＸ１３２に発行する。
【００２３】
図２は、特定の実施態様による、整数スケジューラ／実行ユニット２００のハイレベルブロック図である。整数スケジューラ／実行ユニット２００は、ＡＬＳＱ２０４と、ＡＧＳＱ２０６と、リタイアキュー２０８に接続されている整数リネーマ／マッパー（mapper）２０２と、を含む。また、ＡＬＳＱ２０４及びＡＧＳＱ２０６は、転送マルチプレクサ２１０に接続されており、転送マルチプレクサ２１０は、ＡＬＵ２１２及びＡＧＵ２１４の各々に接続されている。ＡＧＵ２１４は、ＬＤＱ２１６及びＳＴＱ２１８に接続されている。さらに、整数スケジューラ／実行ユニット２００は、物理ファイルレジスタ２２０を含む。
【００２４】
図１と同様に、マイクロ動作は、ＡＧＳＱ２０６のみにディスパッチされ、ＬＤＱ２１６及びＳＴＱ２１８にはディスパッチされない。ＡＧＳＱ２０６は、要求されたソース情報及び適切なロードキュー又はストアキューエントリが利用可能になるまで、ディスパッチペイロードを保持する。具体的には、ＡＧＳＱ２０６は、要求されたソース情報の準備ができており、特定のマイクロ動作のロードキューエントリ又はストアキューエントリがＬＤＱ２１６及びＳＴＱ２１８で利用可能になった場合に、特定のロード又はストアマイクロ動作のためのアドレス生成を実行する。これにより、マイクロ動作のエイジオーダーの実行が維持される。ＡＧＳＱ２０６及びＡＬＳＱ２０４の各々は、ＬＤＱ２１６又はＳＴＱ２１８からの出力信号２３０を介してＡＧＳＱ２０６及びＡＬＳＱ２０４にシグナリングすることによって、特定のキューエントリが利用可能になった場合にＬＤＱ２１６及びＳＴＱ２１８によって通知される。ＡＬＳＱ２０４内のストアデータマイクロ動作は、特定のストアマイクロ動作のストアキューエントリが利用可能になった場合にのみ、ストアデータを実行してストアキューエントリに提供する。
【００２５】
アドレス生成がＡＧＳＱ２０６によって実行され、ディスパッチペイロードが必要に応じて、ＬＤＱ２１６及びＳＴＱ２１８に保持されると、整数ＳＣＥＸ２００は、マイクロ動作を実行する。ＬＤＱ２１６及びＳＴＱ２１８の各々は、ロードマイクロ動作のデータを返し、ストアマイクロ動作の書き込みを実行し、スケジューラは、これらのソース情報が準備完了になると、マイクロ動作を整数ＳＣＥＸ２００に発行する。
【００２６】
図３は、特定の実施態様による、ロードストア／データキャッシュ（ＬＳＤＣ）ユニット３００のハイレベルブロック図及びフロー図である。ＬＤＳＣユニット３００は、ＬＤＱ３０２と、ＳＴＱ３０４と、ロード０（Ｌ０）ピッカー（picker）３０６と、ロード１（Ｌ１）ピッカー３０８と、を含む。Ｌ０ピッカー３０６は、変換ルックアサイドバッファ（ＴＬＢ）及びマイクロタグアクセスパイプライン０（ＴＬＢ０）３１０と、データキャッシュアクセスパイプライン（データパイプ０）３１２と、に接続されている。Ｌ１ピッカー３０８は、変換ルックアサイドバッファ（ＴＬＢ）及びマイクロタグアクセスパイプライン１（ＴＬＢ１）３１４と、データキャッシュアクセスパイプライン（データパイプ１）３１６と、に接続されている。また、ＴＬＢ０  ３１０及びＴＬＢ１  ３１４は、Ｌ１／Ｌ２  ＴＬＢ３１８と、ページウォーカー３２３と、マイクロタグアレイ３１９と、に接続されており、マイクロタグアレイ３１９は、ミスアドレスバッファ（ＭＡＢ）３２０に接続されており、キャッシュ３２２からのデータの読み出しをサポートする。データパイプ０  ３１２及びデータパイプ１  ３１６は、キャッシュ３２２に接続されている。ＳＴＱ３０４は、プリフェッチャ３２４及びストアパイプピッカー３２６に接続されており、ストアパイプピッカー３２６は、ストアパイプライン（ＳＴＰ）３２８に接続されている。ＳＴＰ３２８は、Ｌ１／Ｌ２  ＴＬＢ３１８及びマイクロタグアレイ３１９にも接続されている。また、ＳＴＱ３０４は、ストアコミットパイプライン３３０に接続されており、ストアコミットパイプライン３３０は、書き込み結合バッファ（ＷＣＢ）３３２及びキャッシュ３２２に接続されている。
【００２７】
アドレス生成がＡＧＳＱによって実行され、ディスパッチペイロードが必要に応じてＬＤＱ３０２及びＳＴＱ３０４に保持されると、ＬＤＳＣ３００は、マイクロ動作を実行する。図示した例では、（Ｌ０ピッカー３０６又はＬ１ピッカー３０８等で）ロードマイクロ動作が選択（ピッキング）されると、ロードマイクロ動作は、各々のＴＬＢ０  ３１０又はＴＬＢ１  ３１４のパイプラインを使用して、ロードマイクロ動作の変換及び予測されたデータキャッシュウェイについて、各々のＴＬＢ０  ３１０又はＴＬＢ１  ３１４のパイプラインをチェックする。また、ロードマイクロ動作は、データパイプ０  ３１２及びデータパイプ１  ３１６を介してキャッシュ３２２をチェックする。特定の実施態様では、マイクロタグアレイ３１９によって、マイクロ動作が、フルタグと比較することによってウェイを確認する前に、予測されたデータキャッシュウェイを決定することができる。ページウォーカー３２３は、マイクロ動作の物理アドレスを決定するために使用される。別の図示した例では、プリフェッチャ３２４は、要求がキャッシュ３２２に送信される前に、キャッシュ３２２内のラインを埋めるために使用される。
【００２８】
図４は、いくつかの実施態様による、アドレス生成時のロード及びストアキューの割り当てのための方法のフロー図４００である。マイクロ動作がフェッチされ、デコードされ、マイクロ動作キューに提供される（ステップ４０２）。マイクロ動作キューは、マイクロ動作ディスパッチペイロードを記憶するために、マイクロ動作をアドレス生成ユニットスケジューラにディスパッチする（ステップ４０４）。ディスパッチは、エイジオーダー又はプログラム順を維持するために行われる。アドレス生成ユニットスケジューラは、ロードキュー又はストアキューによって送信された情報から、特定の（すなわち、エイジオーダーの）キューエントリが利用可能かどうかを判別する（ステップ４０６）。特定のキューエントリが利用可能でない場合、アドレス生成ユニットスケジューラは、現状を維持し、再度チェックする（ステップ４０８）。
【００２９】
特定のキューエントリが利用可能である場合（ステップ４１０）、アドレス生成ユニットスケジューラは、マイクロ動作に必要なソース情報が準備できているかどうかを判別する（ステップ４１２）。ソース情報が準備できていない場合、アドレス生成ユニットスケジューラは、現状を維持し、再度チェックする（ステップ４１４）。ソース情報が準備できている場合（ステップ４１６）、アドレス生成ユニットスケジューラは、アドレス生成を実行し、マイクロ動作ディスパッチペイロードを読み出し、マイクロ動作ディスパッチペイロードを適切なロードキュー又はストアキューに送信する（ステップ４１８）。次に、マイクロ動作が実行される（ステップ４２０）。動作の順序は例示に過ぎず、他の順序を使用することができる。
【００３０】
図５は、１つ以上の開示された例のうち１つ以上の部分が実装されている例示的なデバイス５００のブロック図である。デバイス５００は、例えば、ヘッドマウントデバイス、サーバ、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス５００は、計算ノード又はプロセッサ５０２と、メモリ５０４と、ストレージデバイス５０６と、１つ以上の入力デバイス５０８と、１つ以上の出力デバイス５１０と、を含む。また、デバイス５００は、入力ドライバ５１２及び出力ドライバ５１４をオプションで含むことができる。デバイス５００は、図５に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
【００３１】
計算ノード又はプロセッサ５０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアはＣＰＵ又はＧＰＵであってもよい。メモリ５０４は、計算ノード又はプロセッサ５０２と同じダイ上に配置されてもよいし、計算ノード又はプロセッサ５０２とは別に配置されてもよい。一実施態様では、メモリ５０４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ若しくはキャッシュ等の揮発性又は不揮発性メモリを含む。
【００３２】
ストレージデバイス５０６は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能なストレージデバイスを含む。入力デバイス５０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含む。出力デバイス５１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含む。
【００３３】
入力ドライバ５１２は、計算ノード又はプロセッサ５０２、及び、入力デバイス５０８と通信し、計算ノード又はプロセッサ５０２が、入力デバイス５０８から入力を受信することを可能にする。出力ドライバ５１４は、計算ノード又はプロセッサ５０２、及び、出力デバイス５１０と通信し、プロセッサ５０２が出力デバイス５１０に出力を送信することを可能にする。入力ドライバ５１２及び出力ドライバ５１４は、オプションのコンポーネントであり、デバイス５００は、入力ドライバ５１２及び出力ドライバ５１４が存在しない場合であっても同様に動作することに留意されたい。
【００３４】
一実施態様では、マイクロ動作を処理するための方法は、マイクロ動作をフェッチし、当該マイクロ動作をエイジオーダースケジューラキューにディスパッチする。エイジオーダースケジューラキューは、各マイクロ動作に関連するディスパッチペイロードを保持する。次に、方法は、キュー内の関連するキューエントリが利用可能であり、マイクロ動作に必要なソース情報が準備できていることを条件として、マイクロ動作のためのアドレス生成を実行する。マイクロ動作のディスパッチペイロードが読み出され、キューに送信される。一実施態様では、方法は、ディスパッチ時に、プログラム順で各マイクロ動作をキュー内のキューエントリに関連付けて、エイジオーダーを維持する。一実施態様では、方法は、キューからの入力に基づいて、コミットされていない最古のマイクロ動作キューエントリを更新する。一実施態様では、方法は、エイジオーダースケジューラキューにおいて、コミットされていない最古のマイクロ動作キューエントリを各マイクロ動作のキューエントリと比較して、マイクロ動作のキューエントリが利用可能かどうかを判別する。一実施態様では、マイクロ動作は、ストアマイクロ動作である。一実施態様では、ディスパッチウィンドウサイズは、キューの深さ及びエイジオーダースケジューラキューの深さである。一実施態様では、ラップビットは、キューの深さを超えるディスパッチを可能にするために、キューの異なるエポックを追跡するために使用される。
【００３５】
一実施態様では、マイクロ動作を処理するためのプロセッサは、キューと、エイジオーダースケジューラキューと、デコーダと、を含む。デコーダは、マイクロ動作をエイジオーダースケジューラキューにディスパッチする。エイジオーダースケジューラキューは、各マイクロ動作に関連するディスパッチペイロードを保持し、キュー内の関連するキューエントリが利用可能であり、マイクロ動作に必要なソース情報が準備できていることを条件として、マイクロ動作のためのアドレス生成を実行し、マイクロ動作のディスパッチペイロードを読み出し、ディスパッチペイロードをキューに送信する。一実施態様では、デコーダは、プログラム順で各マイクロ動作をキュー内のキューエントリに関連付けて、エイジオーダーを維持する。一実施態様では、キューは、関連するキューエントリが利用可能であることをエイジオーダースケジューラキューに通知する。一実施態様では、スケジューラは、キューからの入力に基づいて、コミットされていない最古のマイクロ動作キューエントリを更新し、コミットされていない最古のマイクロ動作キューエントリを各マイクロ動作のキューエントリと比較して、マイクロ動作のキューエントリが利用可能かどうかを判別する。一実施態様では、マイクロ動作は、ストアマイクロ動作である。一実施態様では、ディスパッチウィンドウサイズは、キューの深さ及びエイジオーダースケジューラキューの深さである。一実施態様では、ラップビットは、キューの深さを超えるディスパッチを可能にするために、キューの異なるエポックを追跡するために使用される。
【００３６】
一実施態様では、マイクロ動作を処理するための方法は、各マイクロ動作に関連するディスパッチペイロードを保持するためにマイクロ動作をスケジューラキューにディスパッチし、利用可能な関連するキューエントリを有するマイクロ動作であって、マイクロ動作の準備ができているソース情報を有するマイクロ動作のためのアドレス生成を実行する。次に、方法は、マイクロ動作のディスパッチペイロードを読み出し、マイクロ動作のディスパッチペイロードをキューに送信する。一実施態様では、方法は、エイジオーダーを維持するために、プログラム順でキューエントリを各マイクロ動作に割り当てる。一実施態様では、方法は、コミットされていない最古のマイクロ動作キューエントリを更新する。一実施態様では、方法は、スケジューラキューにおいて、コミットされていない最古のマイクロ動作キューエントリを各マイクロ動作のキューエントリと比較して、マイクロ動作のキューエントリが利用可能かどうかを判別する。一実施態様では、ディスパッチウィンドウサイズは、キューの深さ及びスケジューラキューの深さである。一実施態様では、ラップビットは、キューの深さを超えるディスパッチを可能にするために、キューの異なるエポックを追跡するために使用される。
【００３７】
一実施態様では、非一時的なコンピュータ可読記憶媒体は、処理システムで実行されると、アドレス生成時のロード及びストアの割り当てのための方法を処理システムに実行させる命令を含む。方法は、マイクロ動作をフェッチし、当該マイクロ動作をエイジオーダースケジューラキューにディスパッチする。エイジオーダースケジューラキューは、各マイクロ動作に関連するディスパッチペイロードを保持する。次に、方法は、キュー内の関連するキューエントリが利用可能であり、マイクロ動作に必要なソース情報が準備できていることを条件として、マイクロ動作のためのアドレス生成を実行する。マイクロ動作のディスパッチペイロードが読み出され、キューに送信される。一実施態様では、方法は、ディスパッチ時に、プログラム順で各マイクロ動作をキュー内のキューエントリに関連付けて、エイジオーダーを維持する。一実施態様では、方法は、キューからの入力に基づいて、コミットされていない最古のマイクロ動作キューエントリを更新する。一実施態様では、方法は、エイジオーダースケジューラキューにおいて、コミットされていない最古のマイクロ動作キューエントリを各マイクロ動作のキューエントリと比較して、マイクロ動作のキューエントリが利用可能かどうかを判別する。一実施態様では、マイクロ動作は、ストアマイクロ動作である。一実施態様では、ディスパッチウィンドウサイズは、キューの深さ及びエイジオーダースケジューラキューの深さである。一実施態様では、ラップビットは、キューの深さを超えるディスパッチを可能にするために、キューの異なるエポックを追跡するために使用される。
【００３８】
本明細書における開示に基づいて多くの変形が可能であることを理解されたい。上記では、特徴及び要素が特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で使用されてもよいし、他の特徴及び要素を伴って又は伴わずに様々な組み合わせで使用されてもよい。
【００３９】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令（このような命令は、コンピュータ可読媒体に記憶することが可能である）の結果及びネットリストを含む他の中間データを用いて製造プロセスを構成することによって製造され得る。このようなプロセスの結果は、実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００４０】
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、例えば読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク、リムーバブルディスク等の磁気媒体、光磁気記憶媒体、例えばＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）等の光学媒体が含まれる。
【図１】
2019525351.tif 000003
【図２】
2019525351.tif 000004
【図３】
2019525351.tif 000005
【図４】
2019525351.tif 000006
【図５】
2019525351.tif 000007
【国際調査報告】
2019525351.tif 000008
2019525351.tif 000009