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

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

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特表2024-544599ループ再生性能を最適化するためのプロセッサにおけるキャプチャドループの最適化
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-03
(54)【発明の名称】ループ再生性能を最適化するためのプロセッサにおけるキャプチャドループの最適化
(51)【国際特許分類】
   G06F 9/38 20180101AFI20241126BHJP
【FI】
G06F9/38 330E
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024531024
(86)(22)【出願日】2022-09-19
(85)【翻訳文提出日】2024-05-23
(86)【国際出願番号】 US2022043928
(87)【国際公開番号】W WO2023121730
(87)【国際公開日】2023-06-29
(31)【優先権主張番号】17/561,006
(32)【優先日】2021-12-23
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100229448
【弁理士】
【氏名又は名称】中槇 利明
(72)【発明者】
【氏名】アル シェイク,ラミ モハンマド
(72)【発明者】
【氏名】マシルヴェイン,マイケル スコット
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013BB07
(57)【要約】
ループ再生性能を最適化するためのプロセッサ内のキャプチャドループの最適化、及び関連する方法及びコンピュータ可読媒体が開示される。プロセッサは、ループを検出するように構成されたループバッファ回路を含む。検出されたループに応答して、ループバッファ回路は、検出されたループ内のループ命令をキャプチャし、キャプチャドループ命令を命令パイプライン内で再生して、ループの後続の繰り返しのために処理及び実行されるように構成される。ループバッファ回路は、ループ再生の性能を向上させるために、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定するように構成される。ループバッファ回路が、キャプチャドループに基づいてループ最適化を行うことができると決定した場合、ループバッファ回路は、キャプチャドループの再生性能を向上させるために、キャプチャドループを再生するときにそのようなループ最適化を実現できるように、そのようなループ最適化を行うように構成される。
【特許請求の範囲】
【請求項1】
プロセッサであって、
命令パイプラインにおける複数の命令を含む命令ストリームを処理するように構成された命令処理回路と、
ループバッファ回路であって、
前記命令ストリーム内の前記複数の命令の中から複数のループ命令を含むループを検出し、
前記命令ストリーム内の前記ループの検出に応答して、
前記検出されたループの前記複数のループ命令をキャプチャドループとしてキャプチャし、
前記キャプチャドループに基づいて、前記キャプチャドループに対してループ最適化を行うことができるかどうかを決定し、
前記キャプチャドループに対して前記ループ最適化を行うことができると決定することに応答して、前記キャプチャドループを変更して最適化ループを生成し、
前記キャプチャドループが前記命令パイプラインで再生されるかどうかを決定し、
前記キャプチャドループが前記命令パイプラインで再生されると決定することに応答して、前記最適化ループを再生されるように前記命令パイプラインに挿入する、
よう構成されるループバッファ回路と、
を含むプロセッサ。
【請求項2】
前記ループバッファ回路は、
前記キャプチャドループ内の前記複数のループ命令のうちの少なくとも1つのループ命令が、実行されたときに前記少なくとも1つのループ命令と同じ機能を維持しながら変換できるかどうかを決定し、
前記キャプチャドループ内の前記複数のループ命令のうちの少なくとも1つのループ命令が、実行されたときに前記少なくとも1つのループ命令と同じ機能を維持しながら変換できると決定することに応答して、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令を変換して、前記最適化ループを生成する、
ように構成されることにより、前記キャプチャドループに基づいて、前記キャプチャドループに対して前記ループ最適化を行うことができるかどうかを決定するように構成される、請求項1に記載のプロセッサ。
【請求項3】
前記ループバッファ回路は、
前記キャプチャドループ内の前記複数のループ命令のうちの少なくとも2つのループ命令が、実行されたときに前記少なくとも2つのループ命令と同じ機能を有する少なくとも1つの融合命令に融合できるかどうかを決定するように構成されていることにより、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が変換できるかどうかを決定し、
前記複数のループ命令のうちの前記少なくとも2つのループ命令が、実行されたときに前記少なくとも2つのループ命令と同じ機能を有する前記少なくとも1つの融合命令に融合できると決定することに応答して、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも2つのループ命令を融合して、前記最適化ループを生成する、
ように構成される、請求項2に記載のプロセッサ。
【請求項4】
前記ループバッファ回路は、
前記キャプチャドループが前記キャプチャドループの少なくとも1つの後続の繰り返しで実行されるときに、前記キャプチャドループ内の前記複数のループ命令のうちの少なくとも1つのループ命令が、前記キャプチャドループ内のそれ自身と融合できるかどうかを決定するように構成されることによって、前記キャプチャドループ内の前記複数のループ命令のうちの少なくとも1つのループ命令が変換できるかどうかを決定し、
前記キャプチャドループが前記キャプチャドループの少なくとも1つの後続の繰り返しで実行されるときに、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が前記キャプチャドループ内のそれ自体と融合できることを決定することに応答して、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が前記キャプチャドループの実行の少なくとも1つの後続の繰り返しで再生されないことを識別して、前記最適化ループを生成する、
ように構成される、請求項2に記載のプロセッサ。
【請求項5】
前記ループバッファ回路は、
前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が、前記キャプチャドループに対してループ不変であるかどうかを決定するように構成されることによって、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が変換できるかどうかを決定し、
前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が、前記キャプチャドループに対してループ不変であると決定することに応答して、前記キャプチャドループから、ループ不変であると決定された前記複数のループ命令のうちの前記少なくとも1つのループ命令を削除して、前記最適化ループを生成する、
ように構成される、請求項2に記載のプロセッサ。
【請求項6】
前記ループバッファ回路は、
前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が、前記少なくとも1つのループ命令と同じ機能を有する少なくとも1つの代替命令に変更され、前記少なくとも1つのループ命令よりも少ないクロックサイクルで実行できるかどうかを決定するように構成されることによって、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が変換できるかどうかを決定し、
前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が、前記少なくとも1つのループ命令と同じ機能を有する少なくとも1つの代替命令に変更され、前記少なくとも1つのループ命令よりも少ないクロックサイクルで実行できると決定することに応答して、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令を前記少なくとも1つの代替命令に変換して、前記最適化ループを生成する、
ように構成される、請求項2に記載のプロセッサ。
【請求項7】
前記ループバッファ回路は、
前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令がクリティカル命令であるかどうかを決定するように構成されることにより、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令が変換できるかどうかを決定し、
前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令がクリティカル命令であると決定することに応答して、前記最適化ループが前記最適化ループとして再生されるよう前記命令パイプラインに挿入されたときに、前記クリティカル命令が前記命令パイプラインの中でより高い優先順位で実行されるようにスケジュールされるように、前記クリティカル命令に関連付けられたスケジューリング優先順位インジケータを設定する、
ように構成される、請求項2に記載のプロセッサ。
【請求項8】
前記ループバッファ回路は、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令がクリティカルロード命令であるかどうかを決定するように構成されることにより、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令がクリティカル命令であるかどうかを決定するように構成される、請求項7に記載のプロセッサ。
【請求項9】
前記ループバッファ回路は、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令がロック解除命令であるかどうかを決定するように構成されることにより、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令がクリティカル命令であるかどうかを決定するように構成される、請求項7に記載のプロセッサ。
【請求項10】
前記ループバッファ回路は、
命令実行スライスが前記キャプチャドループ内の前記複数のループ命令の中に存在するかどうかを決定するように構成されることにより、前記キャプチャドループに基づいて、前記キャプチャドループに対して前記ループ最適化を行うことができるかどうかを決定し、
前記命令実行スライスが前記キャプチャドループ内の前記複数のループ命令の中に存在すると決定することに応答して、前記キャプチャドループ内の前記複数のループ命令の中から前記命令実行スライスを識別するように構成されることによって、前記最適化ループを生成し、
前記キャプチャドループが前記命令パイプライン内で再生されるべきであると決定することに応答して、
前記キャプチャドループ内の前記識別された命令実行スライスを表す少なくとも1つのプリフェッチ命令を生成し、
前記少なくとも1つのプリフェッチ命令を、実行されるように前記命令パイプライン内のプリフェッチステージに挿入し、
前記命令実行スライスとして識別されていない最適化ループ内の他の複数の命令を、実行されるように前記命令パイプラインに挿入する、
よう構成されることにより、前記最適化ループを再生されるように前記命令パイプラインに挿入する、
よう構成される、請求項1に記載のプロセッサ。
【請求項11】
前記ループバッファ回路は、
前記キャプチャドループが前記命令パイプライン内で通常の再生モードで再生されるべきであるかどうかを決定し、
前記キャプチャドループが前記命令パイプライン内で通常の再生モードで再生されるべきであると決定することに応答して、前記最適化ループを再生されるように前記命令パイプラインに挿入する、
ように更に構成される、請求項10に記載のプロセッサ。
【請求項12】
前記命令処理回路は、前記命令パイプラインに挿入された前記少なくとも1つのプリフェッチ命令を少なくとも1つの非アーキテクチャ命令として実行するように更に構成される、請求項10に記載のプロセッサ。
【請求項13】
プロセッサ内の命令パイプライン内のキャプチャドループに基づいて最適化ループを再生する方法であって、
命令パイプライン内の複数の命令を含む命令ストリーム内の複数の命令の中から、複数のループ命令を含むループを検出するステップと、
前記命令ストリーム内のループの検出に応答して、
前記検出されたループの前記複数のループ命令をキャプチャドループとしてキャプチャするステップと、
前記キャプチャドループに基づいて、前記キャプチャドループに対してループ最適化を行うことができるかどうかを決定するステップと、
前記キャプチャドループに対して前記ループ最適化を行うことができると決定することに応答して、前記キャプチャドループを変更して最適化ループを生成するステップと、
前記キャプチャドループが前記命令パイプライン内で再生されるべきかどうかを決定するステップと、
前記キャプチャドループが前記命令パイプライン内で再生されるべきであると決定することに応答して、前記最適化ループを再生されるように前記命令パイプラインに挿入するステップと、
を含む方法。
【請求項14】
前記キャプチャドループに基づいて、前記キャプチャドループに対して前記ループ最適化を行うことができるかどうかを決定するステップは、
前記キャプチャドループ内の前記複数のループ命令のうちの少なくとも1つのループ命令を、実行されたときに前記少なくとも1つのループ命令と同じ機能を維持しながら変換することができるかどうかを決定するステップを含み、
前記キャプチャドループのループバッファメモリ内の複数の命令エントリのうちの少なくとも1つの命令エントリを変更して、前記最適化ループを生成するステップは、
前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令を、実行されたときに前記少なくとも1つのループ命令と同じ機能を維持しながら変換できると決定することに応答して、前記キャプチャドループ内の前記複数のループ命令のうちの前記少なくとも1つのループ命令を変換して、前記最適化ループを生成するステップを含む、
請求項13に記載の方法。
【請求項15】
前記キャプチャドループに基づいて、前記キャプチャドループに対して前記ループ最適化を行うことができるかどうかを決定するステップは、
前記キャプチャドループ内の前記複数のループ命令の中に命令実行スライスが存在するかどうかを決定するステップを含み、
前記キャプチャドループを変更して前記最適化ループを生成するステップは、
前記キャプチャドループ内の前記複数のループ命令の中に前記命令実行スライスが存在すると決定することに応答して、前記キャプチャドループ内の前記複数のループ命令の中の前記命令実行スライスを識別するステップを含み、
前記キャプチャドループが前記命令パイプライン内で再生されるべきであると決定することに応答して、
前記キャプチャドループ内の前記識別された命令実行スライスを表す少なくとも1つのプリフェッチ命令を生成し、
前記少なくとも1つのプリフェッチ命令を、実行されるように前記命令パイプライン内のプリフェッチステージに挿入し、
前記命令実行スライスとして識別されていない最適化ループ内の他の複数の命令を、実行されるように前記命令パイプラインに挿入する、
ことにより、前記最適化ループを再生されるように前記命令パイプラインに挿入する、請求項13に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の技術は、一般に、プロセッサにおいて処理されるコンピュータソフトウェア命令におけるループのためのループバッファリング(すなわち、ループ検出及び再生)を実行することに関する。
【背景技術】
【0002】
「プロセッサ」としても知られるマイクロプロセッサは、多種多様なアプリケーションのための計算タスクを実行する。従来のマイクロプロセッサは、ソフトウェア命令を実行する「CPUコア」としても知られる1つ以上のプロセッサコアを含む中央処理装置(central processing unit (CPU))を含む。ソフトウェア命令は、データに基づいて操作を実行するようにCPUに指示する。CPUは、命令に従って操作を実行し、生成された値である結果を生成する。プロセッサは、各命令の処理を一連のステップに分割することによって、プロセッサによって実行される命令のスループットを増加させることができる処理技術として命令パイプライン化を採用する。これらのステップは、命令処理回路内の複数のステージで構成される1つ以上の命令パイプラインで実行される。この点に関し、プロセッサ内の命令処理回路は、実行されるべき命令を命令メモリ(例えば、システムメモリ又は命令キャッシュメモリ)からフェッチするように構成された命令フェッチ回路を含む。フェッチされた命令は、デコード状態でデコードされ、実行されるように実行回路に到達する前に前処理される命令パイプラインに挿入される。
【0003】
多くの最新の高性能プロセッサは、さらなるパイプラインの最適化及び電力節約のためにループバッファを配置する。ループは、パイプライン内の任意の命令シーケンスとして定義され、その処理は連続した操作で順次繰り返される。例えば、ループは、プログラミングソフトウェアのループ構成に基づいて発生することができ、その後、その処理に従ってループ動作を引き起こす命令にコンパイルされる。図1は、例示的なループ102を含む命令の命令ストリーム100の例を示す。ループ102は、処理されるときに評価される条件を有するwhile命令104で始まる「while」ループである。ループ102内の命令106~112が実行され、while命令104の条件がtrueと評価される場合にはループ内で実行され続ける。ループ102は、while命令104の条件がfalseと評価されることに応答して、出口分岐命令としてwhile命令104から抜け出して、出口ターゲットアドレスにある次の命令114に進む。図1のループ102のようなループがパイプライン内で検出できる場合、ループ内の命令をキャプチャし、ループが終了する前にループが処理される繰り返し回数だけ再生することができ、そのような命令を再フェッチ及び再デコードする必要はない。これは、ループが、ループの第1繰り返しのために既にフェッチ及びデコードされた命令の同じシーケンスを含むためである。このようにして、パイプラインのフェッチ及びデコードステージは、ループが検出でき再生できる場合には、パイプラインの電力を節約するために、非アクティブ化されるか、又は停止することができる。
【0004】
この点に関して、多くのプロセッサは、ループ検出回路及びループ再生回路を含む命令パイプライン内にループバッファを含む。ループ検出回路は、ループを検出するために命令パイプライン内で処理される命令ストリーム内の繰り返し命令シーケンスを識別するように構成される。ループの検出に応答して、ループキャプチャ回路は、ループバッファ内で検出されたループ内の命令シーケンスをキャプチャするように構成される。次に、ループ再生回路は、そのようなキャプチャされた命令を、定義された数のループ繰り返し(「トリップカウント」と呼ばれる)又は設計に応じて無期限に、命令パイプライン内のループバッファから再生するように構成され、そのようなキャプチャされた命令を再フェッチ及び再デコードする必要がない。命令パイプラインのフェッチ及びデコードステージは、ループが一旦終了した後に再開され、検出されたループの終わりから開始する従来のフェッチ及びデコード命令を開始することができる。
【0005】
また、演算性能を向上させるためにプロセッサ内で実行されるプログラムコードで最適化を実行することも従来から行われている。ループ内の命令に対してコード最適化を実行することは、そのようなコード最適化の性能上の利点がプロセッサ内のループの各繰り返しで実現されるため、特に有利である可能性がある。コンパイルのときに、コンパイラはプログラムコード内の命令を分析して、プログラムコード内の命令に対して特定のコード最適化を実行し、性能を向上させることができる。例えば、コンパイラは、操作性能を最適化するために、特定の命令をより少ない命令又はより少ないクロックサイクルで実行できる命令に凝縮することができる。最適化された命令は、プロセッサによって実行される実行可能なバイナリプログラムコードにコンパイルできる。コンパイラは、このようなコードの最適化を行うために、プログラムコード内のすべての命令を可視化する。ただし、コンパイラは、プログラムコード内の命令の実際の実行中に生成される実行時情報にアクセスできない場合がある。例えば、プログラムコードには、条件分岐命令で指定された条件の結果に応じて、多数の異なる命令フローパスのいずれかを実行する条件分岐命令を含めることができる。条件分岐命令の実行により、例えばループが発生する可能性がある。ループの終了は、条件分岐命令によって制御することもできる。命令パイプライン内の条件分岐命令の処理から生じる実際の命令フローパスの実行時の知識を使用して、追加のコード最適化を実行できる場合がある。ただし、プロセッサは、任意の時点で命令パイプライン内に存在する命令の知識しか有しない。プロセッサは、まだフェッチされていない命令の知識を持たない。この限られた可視性は、命令パイプラインにまだフェッチされていない命令の追加の知識を必要とする特定のコード最適化を実行するプロセッサの能力に悪影響を及ぼす可能性がある。更に、ループのコード最適化の例では、ループを形成する命令は、命令パイプラインの異なるパイプラインステージに分散することがあり、これにより、ループのコード最適化を実行することが不可能又は実行不可能になる。
【発明の概要】
【0006】
本明細書に開示される例示的な態様は、ループ再生性能を最適化するためのプロセッサにおけるキャプチャドループの最適化を含む。関連する方法及びコンピュータ可読媒体も開示される。プロセッサは、コンピュータプログラム命令(「命令」)を、処理及び実行される命令パイプライン内の命令ストリームにフェッチするように構成された命令処理回路を含む。命令ストリームには、ループを含めることができる。ループは、連続した配置で順次繰り返される命令ストリーム内の命令シーケンスである。命令処理回路は、ループを検出するように構成されたループバッファ回路を含む。検出されたループに応答して、ループバッファ回路は、検出されたループ内のループ命令をキャプチャし、キャプチャドループ命令を命令パイプラインに挿入して(つまり再生して)、ループの後続の繰り返しのために処理及び実行されるように構成される。このようにして、ループ内の命令は、例えば、ループの後続の繰り返しのために、再フェッチ及び再処理される必要がなくてもよい。例示的な態様では、ループバッファ回路は、ループ再生の性能を向上させるために、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定し、行うことができる場合に該ループ最適化を実行するように構成される。キャプチャドループは、キャプチャドループに対する命令を、与えられた時間に処理するための命令パイプライン又は特定のパイプラインステージに存在するよりも多く含むことができるため、プロセッサは、ループバッファ回路にキャプチャドループ内のより多くの命令のこの拡張された可視性を使用して、ループのループ最適化を決定することができる。これらのループ最適化は、命令パイプライン内のループの特定の命令の存在に関する知識のみに基づいて、コンパイル時及び/又は実行時に、他の方法で決定することができない場合がある。この点に関して、ループバッファ回路が、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定する場合、ループバッファ回路は、キャプチャドループ内の少なくとも1つの命令を変更して、最適化ループを生成するように構成される。最適化ループは、ループが繰り返しにおいて命令パイプライン内で再処理及び再実行される場合に、命令パイプライン内で再生でき、従ってループ最適化がプロセッサによって実現される。
【0007】
1つの例示的な態様において、ループバッファ回路は、キャプチャドループ内の命令のループキャプチャ後命令変換分析を実行することによって、キャプチャドループのループ最適化を決定するように構成されたループ最適化回路を含む。ループキャプチャ後命令変換分析は、キャプチャドループが再生されるときに、ループ最適化に影響を与えるようにそのような命令を変換(ループ外での変更、マージ、削除など)できるかどうかを決定する。ループキャプチャ後命令変換分析が、命令はループ最適化に影響を与えるように変換できると決定した場合、そのような命令は、キャプチャドループの再生の一部として変換された命令が再生されるときにそのようなループ最適化が実現されるように、ループバッファ回路によって変換される。例えば、ループバッファ回路は、キャプチャドループ内の任意の命令を、ループが再生されるときに命令パイプラインに挿入されるより少ない命令又は単一の命令に融合(すなわち、マージ又は結合)できるかどうかを決定するように構成することができる。これにより、キャプチャドループを、元のキャプチャドループよりも少ない命令の処理で再生することができる。例えば、より若いコンシューマ(consumer)命令のソースオペランドであるターゲットオペランドを有すると識別されたキャプチャドループ内のプロデューサ(producer)命令をコンシューマ命令とマージして、キャプチャドループの再生される繰り返しのためのループ内の命令の数を減らすことができる。このようにして、ループバッファ回路はループ内の命令をマージすることができる。そのようなマージされた命令は、命令パイプラインのパイプラインステージ内に存在しない及び/又は識別できないように十分なコード距離で分離されている場合には、識別できない可能性がある。ループバッファ回路は、ループの同じ再生された繰り返し内だけでなく、再生されたループの異なる繰り返しにわたって(すなわち、イテレーションに跨がり)マージすることができる命令を識別するように構成することができる。
【0008】
別の例示的な態様において、ループバッファ回路は、命令がキャプチャドループの各再生繰り返しに対して同じ結果を生成するようにループ不変であるかどうかを検出することによって、キャプチャドループ内の命令のループキャプチャ後命令変換分析を実行するように構成されたループ最適化回路を含む。その場合、これは、そのようなループ不変命令を、キャプチャドループの外側にループバッファ回路によって移動されるように変換し、キャプチャドループがループ最適化として再生される回数に関係なく1回だけ再生することができることを意味する。そのような命令の例は、定数値を生成する命令である。別の例示的な態様において、ループバッファ回路は、キャプチャドループ内の命令のループキャプチャ後分析を実行して、任意の命令を命令強度が低下した他の命令に変換できるかどうかを検出するように構成されている。これは、演算に対して同じ結果を生成するために、実行に要するクロックサイクル数が減少することを意味する。そのような命令の例は、ソースを2倍にする乗算命令である。この例では、乗算命令を変換し、実行に要するクロックサイクル数が少ない命令としてソースの値を1ビット左シフトする命令に置き換えることができる。このようにして、キャプチャドループの再生は、キャプチャドループ内の元の命令よりも処理及び実行に要するクロックサイクルが少ない変換された命令を再生する。
【0009】
別の例示的な態様において、ループバッファ回路は、クリティカルタイミング命令を検出するためにキャプチャドループ内の命令のループキャプチャ後命令変換分析を実行するように構成されたループ最適化回路を含む。ループバッファ回路は、そのような識別されたクリティカル命令をスケジューリングヒントで変換するように構成され、スケジューリングヒントは、命令パイプライン内のスケジューリング回路によって使用され、再生されるときに実行のための発行に優先順位を付ける。例えば、クリティカルロードを実行していると識別されたキャプチャドループ内の命令は、タイミングが他の依存命令に影響を与えるクリティカル命令であり、スケジューリングヒントで変換することができるため、これらの命令は、再生においてより早く実行されるようにスケジュールされる。クリティカルロード命令の例は、生成された結果が条件分岐命令によって消費されるロード(load)命令である。ロード命令の生成された結果は、条件分岐命令の予測を解決するために必要である。従って、条件分岐命令の場合、クリティカルロード命令のより早い再生及び実行は、誤って予測された条件分岐命令のより速い解決をもたらすことができる。スケジューリングヒントから利益を得ることができるクリティカル命令の別の例は、キャプチャドループ内に依存チェーンを有すると識別された命令であり、キーロック解除命令のマーキングはクリティカルである。
【0010】
別の例示的な態様において、ループ最適化回路は、キャプチャドループ内の命令のループキャプチャ後命令分析を実行することによって、キャプチャドループのループ最適化を決定するように構成される。キャプチャドループ内の命令実行スライスは、キャプチャドループ内の命令セットであり、キャプチャドループの再生で実行されるメモリロード/ストア命令に必要なロード/ストアメモリアドレスを計算する。キャッシュミスを生じる再生ループ内のメモリロード及びストアは、ループが再生されるときに、命令パイプラインのスループットの性能を低下させる。しかし、キャッシュミスをより頻繁に生じる再生ループ内のメモリロード及びストアは、その再生繰り返し回数の関数として、命令パイプラインのスループットの性能低下を高める可能性がある。従って、この例では、ループバッファ回路は、キャプチャドループの命令の中で識別される識別された命令実行スライスを抽出するように構成することができる。ループバッファ回路は、識別された抽出された命令実行スライスをソフトウェアプリフェッチ命令に変換するように構成され、ソフトウェアプリフェッチ命令は、次に、キャプチャドループが再生されてキャプチャドループのループ最適化を実行するときに、命令パイプライン内のプリフェッチステージに注入することができる。命令実行スライスに対するソフトウェアプリフェッチ命令の処理により、プロセッサの命令処理回路は、命令実行スライス内の抽出された命令をプリフェッチ命令として命令パイプライン内のより早い段階で実行する。従って、抽出された実行スライス命令をプリフェッチ命令として処理することによって実行されるメモリ操作から生じるキャッシュミスは、キャプチャドループが再生されるときに、依存命令によって消費されるように、より早く回復することができる。抽出された命令実行スライスは、ループバッファ回路とは別のバッファに、又は例としてソフトウェアプリフェッチ命令を生成するために使用される特別な識別子(例えば、追加のポインタビットによる)と共にループバッファ回路内に格納することができる。
【0011】
この点に関して、1つの例示的な態様では、プロセッサが提供される。プロセッサは、命令パイプライン内の複数の命令を含む命令ストリームを処理するように構成された命令処理回路を含む。命令処理回路は、ループバッファ回路を含む。ループバッファ回路は、命令ストリーム内の複数の命令のうち、複数のループ命令を含むループを検出するように構成される。命令ストリーム内のループの検出に応答して、ループバッファ回路は、検出されたループの複数のループ命令をキャプチャドループとしてキャプチャするように構成される。ループバッファ回路は、キャプチャドループに基づいて、キャプチャドループに対してループ最適化を行うことができるかどうかを決定するように構成される。キャプチャドループに対してループ最適化を行うことができると決定することに応答して、ループバッファ回路は、キャプチャドループを変更して最適化ループを生成するように構成される。ループバッファ回路は、キャプチャドループが命令パイプライン内で再生されるかどうかを決定するように構成される。キャプチャドループが命令パイプライン内で再生されると決定することに応答して、ループバッファ回路は、最適化ループを、再生されるように命令パイプライン内に挿入するように構成される。
【0012】
別の例示的な態様では、方法は、プロセッサ内の命令パイプライン内のキャプチャドループに基づいて最適化ループを再生する。この方法は、命令パイプライン内の複数の命令を含む命令ストリーム内の複数の命令の中から、複数のループ命令を含むループを検出することを含む。この方法はまた、命令ストリーム内のループの検出に応答して、検出されたループの複数のループ命令をキャプチャドループとしてキャプチャし、キャプチャドループに基づいて、キャプチャドループに対してループ最適化を行うことができるかどうかを決定することと、キャプチャドループに対してループ最適化を行うことができると決定することに応答して、キャプチャドループを変更して最適化ループを生成することと、を含む。方法は、キャプチャドループが命令パイプライン内で再生されるかどうかを決定することを更に含む。方法は、キャプチャドループが命令パイプライン内で再生されるべきであると決定することに応答して、最適化ループを再生されるように命令パイプライン内に挿入することを更に含む。
【0013】
別の例示的な態様では、コンピュータ実行可能命令を格納した非一時的なコンピュータ可読媒体であって、コンピュータ実行可能命令は、プロセッサにより実行されると、プロセッサに、
命令パイプライン内の複数の命令を含む命令ストリーム内の複数の命令の中から、複数のループ命令を含むループを検出させ、
命令ストリーム内のループの検出に応答して、
検出されたループの複数のループ命令をキャプチャドループとしてキャプチャさせ、
キャプチャドループに基づいて、キャプチャドループに対してループ最適化を行うことができるかどうかを決定させ、
キャプチャドループに対してループ最適化を行うことができると決定することに応答して、キャプチャドループを変更して最適化ループを生成させ、
キャプチャドループが命令パイプライン内で再生されるべきかどうかを決定させ、
キャプチャドループが命令パイプライン内で再生されるべきであると決定することに応答して、最適化ループを再生されるように命令パイプラインに挿入させる、
により、プロセッサ内の命令パイプライン内のキャプチャドループに基づいて最適化ループを再生させる。
【0014】
当業者は、添付の図面に関連する好ましい実施形態の以下の詳細な説明を読むと、本開示の範囲を理解し、その追加の態様を理解する。
【図面の簡単な説明】
【0015】
本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、開示の幾つかの態様を示しており、説明と共に、開示の原則を説明するのに役立つ。
図1】命令ストリーム内のコンピュータプログラム命令の例示的なループの図である。
図2】コンピュータ命令を実行のために処理するための1つ以上の命令パイプラインを含む例示的な命令処理回路を含む例示的なプロセッサの図であり、プロセッサは、命令パイプライン内の命令ストリーム内のループを検出してキャプチャし、キャプチャドループに基づいてループ最適化が可能かどうかを決定してループの再生の性能を向上させ、命令パイプライン内のそのようなループ最適化を用いてキャプチャドループに基づいて最適化ループを再生するように構成されたループバッファ回路を更に含む。
図3図2の命令処理回路内に設けることができる例示的なループバッファ回路の図であり、命令パイプライン内の命令ストリーム内のループを検出するように構成されたループ検出回路と、検出されたループについて命令をキャプチャするように構成されたループキャプチャ回路と、キャプチャドループに基づいてループ最適化を識別及び実行するように構成されたループ最適化回路と、命令パイプライン内のそのようなループ最適化を用いてキャプチャドループに基づいて最適化ループを再生するように構成されたループ再生回路とを含む。
図4】検出されたループをキャプチャし、キャプチャドループに基づいて行うことができると決定されたループ最適化を実行して、プロセッサの命令パイプラインにおける最適化ループの再生の性能を向上させる、図2のプロセッサにおけるループバッファ回路の例示的な処理を示すフローチャートである。
図5A】キャプチャドループ内の命令を変換することによって識別及び実現することができる利用可能な命令融合ループ最適化を含む、コンピュータプログラム命令の例示的なキャプチャドループの図である。
図5B】キャプチャドループに命令融合ループ最適化を提供するために変換された命令を含む、図5Aのキャプチャドループの最適化ループの図である。
図6】検出されたループをキャプチャし、キャプチャドループ内の命令を変換して再生のための最適化ループを生成し、プロセッサの命令パイプライン内のキャプチャドループの再生のパフォーマンスを向上させることによって、決定されたループ最適化を実現する、図2のプロセッサ内のループバッファ回路の例示的な処理を示すフローチャートである。
図7A】キャプチャドループ内の命令を変換することによって識別及び実現することができる利用可能な命令シーケンスループ最適化を含む、コンピュータプログラム命令の例示的なキャプチャドループの図である。
図7B】キャプチャドループに命令シーケンスループ最適化を提供するために変換された命令を有する、図7Aのキャプチャドループの最適化ループの図である。
図8A】キャプチャドループ内の命令を変換することによって識別及び実現することができる利用可能なクリティカル命令ループ最適化を含む、コンピュータプログラム命令の例示的なキャプチャドループの図である。
図8B】キャプチャドループへのクリティカル命令のスケジューリングヒントを含めるよう、キャプチャドループのクリティカル命令ループ最適化を提供するために変換された命令を含む、図8Aのキャプチャドループの最適化ループの図である。
図9A】命令パイプラインのプリフェッチステージ内の命令実行スライスを表すソフトウェアプリフェッチ命令を生成及び注入することによって識別及び実現することができる命令実行スライスを含む、コンピュータプログラム命令の例示的なキャプチャドループの図である。
図9B】キャプチャドループ内の検出された命令実行スライスがキャプチャドループから除去され、ソフトウェアプリフェッチ命令に変換された、図9Aのキャプチャドループの最適化ループの図である。
図10図2の命令処理回路内に設けることができる別の例示的なループバッファ回路の図であり、ループ最適化回路は、キャプチャドループ内の命令実行スライスを検出し、最適化ループの一部として命令パイプラインのプリフェッチステージ内の命令実行スライスを表すソフトウェアプリフェッチ命令を生成及び注入するように構成され、ループバッファ回路内の命令エントリは、命令を命令実行スライスの一部として識別し、キャプチャドループ内の検出された実行スライス命令の一部としてキャプチャドループ内の次の命令を識別するポインタを格納するように構成された実行ポインタフィールドを含む。
図11図10のループバッファ回路の例示的なプロセスを示すフローチャートであり、検出されたループをキャプチャし、利用可能なループ最適化としてキャプチャドループ内の命令実行スライスを検出し、最適化ループの一部として命令パイプラインのプリフェッチステージ内の検出された命令実行スライス内の命令を表すソフトウェアプリフェッチ命令を生成及び注入して、キャプチャドループが再生されたときにそのようなループ最適化を実現する。
図12】プログラムコードから命令を実行するための命令処理回路を含むプロセッサを含む、例示的なプロセッサに基づくシステムのブロック図であり、プロセッサは、命令パイプライン内の命令ストリーム内のループを検出してキャプチャし、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定してループ再生の性能を向上させ、命令パイプライン内のそのようなループ最適化を用いて最適化ループを再生するように構成された、図2図3、及び/又は図10のループバッファ回路を含むがこれらに限定されないループバッファ回路を含む。
【発明を実施するための形態】
【0016】
本明細書に開示される態様は、ループ再生性能を最適化するためのプロセッサにおけるキャプチャドループの最適化を含む。関連する方法及びコンピュータ可読媒体も開示される。プロセッサは、コンピュータプログラム命令(「命令」)を、処理及び実行される命令パイプライン内の命令ストリームにフェッチするように構成された命令処理回路を含む。命令ストリームには、ループを含めることができる。ループは、連続した配置で順次繰り返す命令ストリーム内の命令シーケンスである。命令処理回路は、ループを検出するように構成されたループバッファ回路を含む。検出されたループに応答して、ループバッファ回路は、検出されたループ内のループ命令をキャプチャし、キャプチャドループ命令を命令パイプラインに挿入して(つまり再生して)、ループの後続の繰り返しのために処理及び実行されるように構成される。このようにして、ループ内の命令は、例えば、ループの後続の繰り返しのために、再フェッチ及び再処理される必要がなくてもよい。例示的な態様では、ループバッファ回路は、ループ再生の性能を向上させるために、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定し、行うことができる場合に該ループ最適化を実行するように構成される。キャプチャドループは、キャプチャドループに対する命令を、与えられた時間に処理するための命令パイプライン又は特定のパイプラインステージに存在するよりも多く含むことができるため、プロセッサは、ループバッファ回路にキャプチャドループ内のより多くの命令のこの拡張された可視性を使用して、ループのループ最適化を決定することができる。これらのループ最適化は、命令パイプライン内のループの特定の命令の存在に関する知識のみに基づいて、コンパイル時及び/又は実行時に、他の方法で決定することができない場合がある。この点に関して、ループバッファ回路が、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定する場合、ループバッファ回路は、キャプチャドループ内の少なくとも1つの命令を変更して、最適化ループを生成するように構成される。最適化ループは、ループが繰り返しにおいて命令パイプライン内で再処理及び再実行される場合に、命令パイプライン内で再生でき、従ってループ最適化がプロセッサによって実現される。
【0017】
図2は、プロセッサに基づくシステム202内の例示的なプロセッサ200の図であり、プロセッサ200は、実行のために1つ以上の命令パイプラインI~INにフェッチされた命令ストリーム208内のコンピュータ命令206を処理するように構成された命令処理回路204を含む。以下により詳細に説明するように、命令処理回路204は、命令ストリーム208内のループを検出してキャプチャするように構成されたループバッファ回路210を含む。ループバッファ回路は、ループ再生の性能を向上させるために、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定するように構成される。ループバッファ回路210は、命令パイプラインI~IN内のそのようなループ最適化を使用して、キャプチャドループに基づいて最適化ループを再生するように構成される。命令ストリーム206内のループを検出してキャプチャし、ループの再生のパフォーマンスを向上させるために、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定する、図2のプロセッサ200内のループバッファ回路210の例示的な詳細を説明する前に、プロセッサ200及びその命令処理回路204の他の態様について最初に以下に説明する。
【0018】
図2のプロセッサ200は、実行されるコンピュータプログラムコード命令(「命令」と呼ばれる)をフェッチして処理するように構成された回路を含む命令処理回路204を含む。命令処理回路204は、一例として、アウトオブオーダープロセッサであってもよい。命令処理回路204は、命令メモリ214から命令206をフェッチするように構成されたパイプラインステージとしての命令フェッチ回路212を含む。命令メモリ214は、プロセッサに基づくシステム202のメインメモリ内に、又はその一部として設けられてもよい。命令キャッシュ216は、命令フェッチ回路212におけるタイミング遅延を低減するために、命令メモリ214からフェッチされた命令206をキャッシュするように、プロセッサに基づくシステム202に設けられてもよい。この例の命令フェッチ回路212は、命令206をフェッチド命令206Fとして、命令処理回路204内の命令ストリーム208としての1つ以上の命令パイプラインループ繰り返し予測に提供し、フェッチド命令206Fが実行されるべき別のパイプラインステージとしての実行回路218に到達する前に、前処理されるように構成される。命令処理回路204は、命令フェッチ回路212によってフェッチされたフェッチド命令206Fをデコードしてデコード済み命令206Dにするように構成された別のパイプラインステージとしての命令デコード回路220も含む。デコード済み命令206Dにエンコードされた命令タイプ及び必要なアクションは、デコード済み命令206Dがどの命令パイプラインI~INに配置されるかを決定するために使用されてもよい。
【0019】
図2のプロセッサ200を引き続き参照すると、フェッチド命令206Fが命令デコード回路220によってデコード済み命令206Dにデコードされると、デコード済み命令206Dは、命令処理回路204内の別のパイプラインステージとしてのリネーム/割り当て回路222に提供される。リネーム/割り当て回路222は、並列処理又はアウトオブオーダー処理を妨げるレジスタ依存関係を解除するために、デコード済み命令206D内のレジスタ名をリネームする必要があるかどうかを決定するように構成される。リネーム/割り当て回路222はまた、レジスタマップテーブル(register map table (RMT))224を呼び出して、論理ソースレジスタオペランドをリネームする、及び/又はデコード済み命令206Dのデスティネーションレジスタオペランドを物理レジスタファイル(physical register file (PRF))226内の利用可能な物理レジスタP~PXに書き込むように構成される。RMT224は複数のマッピングエントリを含み、各マッピングエントリは各々の論理レジスタR~RPにマッピングされる(すなわち関連付けられる)。マッピングエントリは、PRF226内の物理レジスタP~PXを指すアドレスポインタの形式で情報を格納するように構成される。PRF226内の各物理レジスタP~PXは、デコード済み命令206Dのソース及び/又はデスティネーションレジスタオペランドのデータを格納するように構成されたデータエントリ228(0)-228(X)を含む。
【0020】
図2を引き続き参照すると、命令処理回路204の命令パイプラインI~IN内の別のパイプラインステージとしての発行回路230は、すべてのソース操作が準備できているデコード済み命令206Dの間を識別及び調停した後、準備ができたときに(つまり、ソースオペランドが使用可能な場合)デコード済み命令206Dを実行回路218にディスパッチする。デコード済み命令206Dの実行から生成された結果は、実行された命令206Eのデスティネーションがメモリ又は論理レジスタR~RPのどちらであるかに基づいて、メモリ232及び/又はPRF226に書き戻される。命令パイプラインI~IN内に存在するフェッチド命令206F及び/又はデコード済み命令206Dが、解決された誤予測分岐命令などの何らかの理由でもはや有効でない場合、実行回路218は、フラッシュイベント234を命令フェッチ回路212に発行して、処理及び実行のためにフェッチすべき新しい命令206を示すように構成される。
【0021】
命令ストリーム208内の命令206は、ループを含むことができる。ループは、連続した配置で順次繰り返す(つまり処理される)命令ストリーム208内の命令シーケンス206である。ループは、命令206間でループにコンパイルされるプログラムされたソフトウェア構成の結果として、命令ストリーム208内に存在することができる。ループは、より高いレベルのプログラムされたソフトウェア構成のコンパイルの結果生じるバイナリ命令に基づくなど、より高いレベルのプログラムされたソフトウェア構成の一部でなくても、命令ストリーム208内に存在することができる。命令206が命令パイプラインI~IN内で処理されるときに、ループの一部である命令206を検出できる場合、これらの命令206は、命令パイプラインI~IN内の処理ステージで、例えば、ループの後続の繰り返しのために、そのような命令206を再フェッチ及び/又は再デコードすることなく、命令ストリーム208内にキャプチャ及び再生することができる。ループは、さらなる内部ループを含むことができることに留意されたい。従って、キャプチャドループとして検出されキャプチャされる命令206のシーケンスは、ループの1つのパスをキャプチャすることができ、従って、それ以上の内部分岐を持たない分岐のないループ本体であるように見える。例えば、ループが、取られた分岐と取られない分岐の交互の条件を有する場合、2つのループをキャプチャして全体のループを表すことができる。
【0022】
この点に関して、この例の命令処理回路204は、ループバッファリングを行うためのループバッファ回路210を含む。以下により詳細に説明するように、ループバッファ回路210は、処理及び実行される命令ストリーム208として命令パイプラインI~INにフェッチされる命令206内のループを検出するように構成される。ループバッファ回路210は、命令ストリーム208内の命令206の間のループを検出するように構成される。検出されたループに応答して、ループバッファ回路210は、検出されたループ内の命令206をキャプチャ(すなわち、ループバッファ)して再生するように構成され、これらの命令206の処理が命令パイプラインI~INの中で繰り返されるため、検出されたループ内の命令206を再フェッチする必要性を回避又は低減する。この点に関して、ループバッファ回路210は、ループの繰り返しのために、キャプチャドループ命令206を命令パイプラインI~INに挿入(すなわち、再生)するように構成される。このようにして、キャプチャドループ内の命令206は、例えば、ループの後続の繰り返しのために、再フェッチ及び/又は再デコードする必要がない。従って、ループバッファリングは、命令フェッチ回路212が、ループの後続の繰り返しのために、検出されたループ内の命令206を再フェッチする必要がないことによって、電力を節約することができる。ループバッファリングも、命令デコード回路220が、ループの後続の繰り返しのために、検出されたループ内の命令206を再デコードする必要がないことによって、電力を節約することができる。
【0023】
以下に更に詳細に議論するように、ループバッファ回路210は、ループ再生の性能を向上させるために、キャプチャドループに基づいて実行時にループ最適化を行うことができるかどうかを決定し、行うことができる場合に該ループ最適化を実行するように構成される。キャプチャドループは、キャプチャドループに対する命令206を、与えられた時間に処理するための命令パイプラインI~IN又は特定のパイプラインステージに存在するよりも多く含むことができるため、プロセッサは、ループバッファ回路210にキャプチャドループ内のより多くの命令206のこの拡張された可視性を使用して、ループのループ最適化を決定することができる。これらのループ最適化は、命令パイプラインI~IN内のループの特定の命令206の存在に関する知識のみに基づいて、コンパイル時及び/又は実行時に、他の方法で決定することができない場合がある。この点に関して、ループバッファ回路210が、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定する場合、ループバッファ回路210は、キャプチャドループ内の少なくとも1つの命令206を変更して、最適化ループを生成するように構成される。最適化ループは、ループが繰り返しにおいて命令パイプラインI~IN内で再処理及び再実行される場合に、命令パイプラインI~IN内で再生でき、従ってループ最適化がプロセッサ200によって実現される。ループ最適化を実現するために、ループバッファ回路210は、リネーム/割り当て回路222(例えば命令再生)、命令フェッチ回路212(例えば、再生中に新たな命令206のフェッチを制御/一時停止するため)、及び発行回路230(再生された命令206Dの発行をスケジュールするためのスケジューリングヒントを提供する)を含む多数のステージのうちの1つで命令パイプラインI~INに注入される最適化ループを再生させるように構成される。
【0024】
図3は、図2のループバッファ回路210として提供することができる例示的なループバッファ回路300の図である。図3のループバッファ回路300の例示的な動作は、ループを検出及びキャプチャし、キャプチャドループのループ最適化を実現して再生時の処理効率を最適化する、図4の例示的な処理400に関連して説明される。ループバッファ回路300は、図2のプロセッサ200を参照して説明される。この点に関して、図3に示すように、この例のループバッファ回路300は、ループ検出回路302を含む。ループ検出回路302は、命令パイプラインI~INに結合され、命令処理回路204の命令ストリーム208内にある、この例ではデコード済み命令206Dのコピー又はインスタンスを受け取るように構成される。ループ検出回路302は、命令パイプラインI~IN内の命令ストリーム208内のデコード済み命令206Dにループが存在するかどうかを検出するように構成される(図4のブロック402)。ループが存在する場合、ループは、デコード済み命令206Dの中に複数のループ命令206Dを含む。例えば、ループ検出回路302は、命令デコード回路220(図2)によってデコードされた後に命令パイプラインI~INを流れるデコード済み命令206Dを格納するように構成された命令バッファ回路304を含むことができる。ループ検出回路302は、格納された命令206Dを参照して、後続の若い命令206Dがキャプチャされた命令206Dを繰り返すかどうかを決定することができる。命令パイプラインI~INにおいて順次繰り返すようにループ検出回路302によって検出された格納された命令206Dは、キャプチャドループとみなされる。
【0025】
命令ストリーム208内の格納された命令206Dのループをループとして検出するループ検出回路302に応答して(図4のブロック404)、ループ検出回路302は、ループの格納された命令206Dをキャプチャドループ308としてループキャプチャ回路306に通信するように構成される。ループキャプチャ回路306は、ループバッファメモリ312内の「X」個の命令エントリ310(1)~310(X)の中で、キャプチャループ308について検出されたループ命令206Dをキャプチャする(図4のブロック406)。このようにして、ループキャプチャ回路306は、キャプチャドループ308の命令206Dのレコード及びインスタンスを有する。ループバッファメモリ312は、例として、ループキャプチャ回路306及び/又はループバッファ回路300の一部として、又は図2のプロセッサ202内の別個のメモリ回路として設けることができることに留意されたい。
【0026】
続けて図3を参照すると、この例のループバッファ回路300は、ループ最適化回路318を更に含む。以下により詳細に多数の例で説明するように、ループ最適化回路318は、ループキャプチャ回路306によってキャプチャされたキャプチャドループ308に基づいて、キャプチャドループ308に対してループ最適化を行うことができるかどうかを決定するように構成される(図4のブロック408)。ループ最適化回路318は、命令206Dがループキャプチャ回路306によってキャプチャされるとき、又はループキャプチャ回路306が完全にキャプチャドループ308をキャプチャすると、命令206Dを増分的に分析するように構成され得る。キャプチャドループ308に対してループ最適化を行うことができるとループ最適化回路318が決定したことに応答して、ループ最適化回路318は、ループキャプチャ回路306のループバッファメモリ312内のキャプチャドループ308を変更して、最適化ループ308Oを生成するように構成される(図4のブロック410)。最適化ループ308Oは、キャプチャドループ308を再生するために再生されるキャプチャドループ308内の命令206Dの変更、及び/又はキャプチャドループ308が再生時に命令処理回路204で処理される方法の変更であり、再生時にキャプチャドループ308をより効率的に処理する可能性がある。これにより、命令処理回路204内のキャプチャドループ308の再生のスループットを向上させることができる。ループ再生回路314は、ループ最適化回路318によるキャプチャドループ308の変更に基づいて、キャプチャドループ308の最適化ループ308Oを再生するように構成される。
【0027】
例えば、以下により詳細に説明するように、キャプチャドループ308内で再生する必要がある命令206Dの数を減らし、命令処理回路204内のキャプチャドループ308の再生で処理されたときにキャプチャドループ308の同じ機能を依然として達成する、キャプチャドループ308に基づく特定のループ最適化をループ最適化回路318が行うことができる。また、以下により詳細に説明するように、同じ機能を持つキャプチャドループ308の元のキャプチャされた命令206Dの再生を実行するために必要なクロックサイクル数と比較して、命令処理回路204内のキャプチャドループ308の再生を処理及び実行するために必要なクロックサイクル数を減らす、キャプチャドループ308に基づく他のループ最適化をループ最適化回路318が行うことができる。また、以下により詳細に説明するように、タイミングクリティカル命令(例えば、命令処理回路204で再生されたときに、より高い優先順位で実行するようにスケジュールされるようにスケジューリングヒントで示される、依存フローパスをロック解除するためのロック解除命令であるロード又は命令)などのクリティカル命令を提供する、キャプチャドループ308に基づく他のループ最適化をループ最適化回路318が行うことができる。このようにして、そのようなクリティカル命令をより早く実行して、生成された結果を、再生されるキャプチャドループ308内の他のコンシューマ命令によって消費される前に準備することができる。これにより、命令処理回路204内のキャプチャドループ308を再生するスループットを増加させることができる。
【0028】
また、以下により詳細に説明するように、命令実行スライスとしてキャプチャドループ308から分離することができるロード/ストア操作である命令を識別することができる、キャプチャドループ308に基づく更に他のループ最適化をループ最適化回路318が行うことができる。キャプチャドループ内の命令実行スライスは、キャプチャドループ308内の命令セット206Dであり、キャプチャドループ308の再生で実行されるメモリロード/ストア命令に必要なロード/ストアメモリアドレスを計算する。ループ最適化回路318は、キャプチャドループ308から識別された抽出された命令実行スライスをソフトウェアプリフェッチ命令に変換するように構成され、ソフトウェアプリフェッチ命令は、次に、キャプチャドループ308が再生されてキャプチャドループのループ最適化を実行するときに、命令パイプラインI~IN内のプリフェッチステージに注入することができる。命令実行スライスに対するソフトウェアプリフェッチ命令の処理により、命令処理回路204は、命令実行スライス内の抽出された命令206Dをプリフェッチ命令206として命令パイプラインI~IN内のより早い段階で実行する。従って、抽出された実行スライス命令をプリフェッチ命令206として処理することによって実行されるメモリ操作から生じるキャッシュミスは、キャプチャドループが再生されるときに、キャプチャドループ308内の依存命令によって消費されるように、より早く回復することができる。
【0029】
図3を引き続き参照すると、ループキャプチャ回路306は、キャプチャドループ308の命令206Dを、命令処理回路204の命令パイプラインI~IN内で再生される(つまり、ループの別の繰り返しで再び処理される)ループ再生回路314に提供するように構成される。ループ再生回路314は、キャプチャドループ308が再生されるべきかどうかを決定する(図4のブロック412)。キャプチャドループ308が再生されるべきであるとの決定に応答して、ループ再生回路314は、キャプチャドループ308又は最適化ループ308Oの命令206Dを、再生されるように命令パイプラインI~INに挿入することができる(図4のブロック414)。ループ再生回路314は、ループ再生回路314が、キャプチャドループ308の命令206Dを、再生されるように命令パイプラインI~INに挿入できるように、命令パイプラインI~INに結合される。この例では、ループ再生回路314は、検出されたループ内のフェッチド命令208Fを再デコードする必要がないため、キャプチャドループ308又は最適化ループ308Oの命令206Dを、図2の命令デコード回路220の後に命令パイプラインI~INに注入又は挿入するように構成される。この例では、ループ再生回路314は、この例のプロセッサ200がアウトオブオーダープロセッサであるため、キャプチャドループ308又は最適化ループ308Oの命令206Dを、図2のリネーム/割り当て回路222の前に命令パイプラインI~INに注入又は挿入するように構成される。従って、再生されるキャプチャドループ308又は最適化ループ308Oからのデコード済み命令206Dは、発行回路230によるデコード済み命令206Dの発行に従って、アウトオブオーダーで処理及び/又は実行され得る。
【0030】
この例では、ループ再生回路314も命令フェッチ回路212に結合される。これは、ループ再生回路314がループを再生するとき、ループ再生回路314が命令フェッチ回路212にループ再生インジケータ316を送ることができるようにするためである。命令フェッチ回路212は、キャプチャドループ308の命令206Dのフェッチを中止することができ、その間、命令は、命令処理回路204の命令パイプラインI~INに再生(挿入)されている。
【0031】
上述のように、一部のキャプチャドループ308は、キャプチャドループ308の命令206Dを削除又は結合することによって変更して、キャプチャドループ308を再生のための最適化ループ308Oに最適化することができる、利用可能な最適化を有することができる。この点に関して、図5Aは、図2の命令処理回路204からデコード済み命令206Dから、図3のループバッファメモリ312内の各命令エントリ310(1)~310(5)にキャプチャされる命令500(1)~500(5)の例示的なキャプチャドループ308(1)の図である。命令500(1)~500(5)は、この例では、ループバッファメモリ312の各命令エントリ310(1)310(5)に含まれる。図5Aに示すように、キャプチャドループ308(1)の第2命令500(2)は、レジスタr1をレジスタr4と比較する比較命令(「cmp r1,r4」)である。比較命令502(1)は、プロセッサ202のフラグレジスタに結果を提供する命令である。また、図5Aに示すように、キャプチャドループ308(1)の第5命令500(5)は、キャプチャドループ308(1)の第1命令500(1)に分岐して戻る、branch if not equal (BNE)命令である。従って、BNE命令は、第2命令500(2)の古い比較演算の実行によって設定されるフラグレジスタのコンシューマ命令である。
【0032】
図3のループ最適化回路318は、キャプチャドループ308(1)及びフラグコンシューマ命令505(5)におけるフラグプロデューサ命令500(2)の存在を検出するように構成することができる。図3のループ最適化回路318は、プロデューサフラグ命令500(1)とコンシューマフラグ命令500(5)の間の命令500(2)~504(4)がレジスタr1又はr4を変更しないことを検出することができる。従って、この例では、ループ最適化回路318は、図5Aのキャプチャドループ308(1)の図5Bの最適化ループ308O(1)に示されるように、キャプチャドループ308(1)の命令500(5)を変換して、compare and branch if not equal (CBNZ)命令500M(5)に変更することによって、キャプチャドループ308(1)を変更することができる。従って、ループ最適化回路318は、図5Aのキャプチャドループ308(1)に対するループバッファメモリ312の命令エントリ310(2)から第2命令500(2)を削除することによって、図5Bの最適化ループ308O(1)として第2命令500(2)を変換することもでき、これにより、第2命令500(2)が最適化ループ308O(1)の変更CBNZ命令500M(5)と融合される。このようにして、図5Bのキャプチャドループ308(1)が図5Bの最適化ループ308O(1)として再生される場合、命令500(1)、500(3)~504(4)、及び500M(5)の間で、図5Aのキャプチャドループ308(1)が再生された場合に再生される命令よりも1つ少ない命令を再生する必要がある。これは、キャプチャドループ308(1)のより高速な再生をもたらすことができる。
【0033】
図6は、検出されたループをキャプチャし、キャプチャドループ308内の命令を最適化ループ308Oへと変換して、キャプチャドループ308の再生のパフォーマンスを向上させることによって、決定されたループ最適化を実現する、図2のループバッファ回路300の例示的な処理600を示すフローチャートである。図6の処理600は、ループバッファ回路300によって使用され、一例として図5Aのキャプチャドループ308(1)に基づいて図5Bの最適化ループ308O(1)を生成することができる。図6の処理600は、図3のループバッファ回路300及び図2の命令処理回路204を参照して説明される。図6の処理600に関してループバッファ回路300が参照される場合、図3のループバッファ回路300において先に参照された特定の回路は、図6の処理600を説明する際に明示的に参照されなくても、記載された処理を実行するように構成され得ることに留意されたい。
【0034】
この点に関して、処理ステップ602、604、606は、前述の図4の処理400における処理ステップ402、404、406と同じであり、従って繰り返されない。ステップ408に示すように、ループバッファ回路300は、キャプチャドループ308に基づいて、キャプチャドループ308の少なくとも1つのループ命令206Dが、実行されたときに少なくとも1つのループ命令206Dと同じ機能を維持しながら変換できるかどうかを決定するように構成される(図6のブロック608)。キャプチャドループ308の少なくとも1つのループ命令206Dが、実行されたときに少なくとも1つのループ命令206Dと同じ機能を維持しながら変換できると決定したことに応答して、ループバッファ回路300は、キャプチャドループ308の少なくとも1つのループ命令206Dを変換して、最適化ループ308Oを生成するように更に構成される(図6のブロック610)。図6を引き続き参照すると、ループバッファ回路300は、キャプチャドループ308の命令206Dを、命令処理回路204の命令パイプラインI~IN内で再生される(つまり、ループの別の繰り返しで再び処理される)ループ再生回路314に提供するように構成される。ループバッファ回路300は、キャプチャドループ308が再生されるべきかどうかを決定する(図6のブロック612)。キャプチャドループ308が再生されるべきであるとの決定に応答して、ループバッファ回路300は、キャプチャドループ308又は最適化ループ308Oの命令206Dを、再生されるように命令パイプラインI~INに挿入することができる(図6のブロック614)。
【0035】
ループバッファ回路300は、キャプチャドループ308内のプロデューサ及びコンシューマペア命令206Dを見つけるように構成することができ、この命令は、ループ最適化を提供するために最適化ループ308O内で融合することができることに留意されたい。また、ループバッファ回路300は、再生時にキャプチャドループ308の異なる繰り返し間で発生するプロデューサ及びコンシューマペア命令206Dを見つけるように構成できることに留意されたい。例えば、キャプチャドループ308内の同じ命令206Dは、プロデューサ及びコンシューマ命令の両方であってもよい。このような命令206Dは、キャプチャドループ308の再生の後続の繰り返しにおけるコンシューマ命令として、それ自体のプロデューサ命令である。従って、ループバッファ回路300は、キャプチャドループ308内の命令206Dを識別するように構成することができ、それ自体と融合して再生用に最適化ループ308Oを生成することができる。
【0036】
図7Aは、図2の命令処理回路204からデコード済み命令206Dから、図3のループバッファメモリ312内の各命令エントリ310(1)~310(6)にキャプチャされる命令700(1)~700(6)の別の例示的なキャプチャドループ308(2)の図である。ここで、命令強度の低減を実現する別の変換最適化が、実行時にループバッファ回路300によって検出され得る。図7Aに示すように、キャプチャドループ308(2)のループバッファメモリ312内の命令エントリ310(4)の第4命令700(4)は、レジスタr2に含まれる値とレジスタr5に含まれる値との乗算命令であり、その結果はレジスタr2に戻されて格納される(「mult r2, r2, r5」)。図3のループバッファ回路300及びそのループ最適化回路318は、キャプチャドループ308(1)内に、レジスタ「r5」のプロデューサである他の命令がないことを検出するように構成することができる。従って、キャプチャドループ308(2)が図2の命令処理回路204内の第1インスタンスで再生されたときのレジスタr5内の値は、再生されたときにキャプチャドループ308(2)の後続の繰り返しにおいて同じ値のままである。従って、この例では、ループ最適化回路318は、レジスタr5に格納された値が、乗算命令700(4)を再生時に実行するクロックサイクルがより少ない(すなわち、強度が低い)別の命令に変換することを可能にする値であるかどうかを決定するように構成することができる。例えば、レジスタr5が2の累乗である4の値を含む場合。これは、ループ最適化回路318が、キャプチャドループ308(2)内の乗算命令700(4)を、命令エントリ310(4)の変更済み命令700M(4)に示すように、最適化ループ308O(2)内でr2内の値の2ビット左シフトを実行するmove命令に変換して置き換えることができ、レジスタr2内の値の4倍演算を実行することができることを意味する。これは、レジスタr5内の値である。従って、最適化ループ308O(2)内のmove命令700M(4)は、実行されたときに図7Aのキャプチャドループ308(2)内の乗算命令700(4)と同じ機能を有するが、より少ないクロックサイクルで実行することができる代替命令である。このようにして、レジスタr2に対する2倍演算は、図7Aのキャプチャドループ308(2)が図7Bの最適化ループ(2)として再生されるときに、より少ないクロックサイクルで実行され、その結果、キャプチャドループ308(2)の再生がより速くなる。
【0037】
キャプチャドループ308内にあり、キャプチャドループ308をより高速かつより効率的に再生できるように強度の低い命令に変換できる命令206Dの他の例があることに留意されたい。例えば、ゼロ加算関数であると決定されたキャプチャループ308内の命令206Dは、最適化ループ308O内のmove命令で置き換えることができる。
【0038】
別の例として、キャプチャドループ308は、ループ不変である命令206Dを含むことができ、これは、そのような命令206Dの実行の生成値が、再生されたループの任意の繰り返しに対して常に同じであることを意味する。例えば、そのようなループ不変命令は、ターゲットレジスタに定数値を格納する命令であってもよく、ターゲットレジスタは、他のプロデューサ命令によって変更されない。この例では、そのようなループ不変命令206Dでキャプチャドループ308を最適化するために、図3のループ最適化回路318は、キャプチャドループ308が最適化ループ308Oとして再生されるときに、ループ不変命令が再生されないように、最適化ループ308Oからループ不変命令206Dを除去することができる。従って、キャプチャドループ308の第1再生からのターゲットレジスタ内の値は、最適化ループ308Oとしてキャプチャドループ308を再生する間、一定であり同じままであり、変化しない。これにより、キャプチャドループ308は、より効率的な再生のために、この例では最適化ループ308Oとして、1つ少ない命令で再生することができる。
【0039】
別の例示的な態様において、図3のループバッファ回路300、及びそのループ最適化回路318は、クリティカルタイミング命令206Dを検出するためにキャプチャドループ308内の命令206Dのループキャプチャ後命令変換分析を実行するように構成することができる。ループバッファ回路300は、そのような識別されたクリティカル命令206Dをスケジューリングヒントで変換するように構成され、スケジューリングヒントは、図2の発行回路230のようなスケジューリング回路によって使用され、再生されるときに実行回路218による実行のための発行に優先順位を付ける。例えば、クリティカルロードを実行するものとして識別されたキャプチャドループ308内の命令206Dは、タイミングがキャプチャドループ308内の他の従属命令に影響を与える可能性があるクリティカル命令である。このクリティカル命令206Dは、キャプチャドループ308の再生において、これらの命令206Dがキャプチャドループ内の他の命令206Dよりも前に命令処理回路204で実行されるようにスケジューリングされるように、スケジューリングヒントで変換することができる。キャプチャドループ308内のクリティカルロード命令206Dの例は、生成された結果が条件分岐命令206Dによって消費されるキャプチャドループ308内のロード命令である。ロード命令206Dの生成された結果は、条件分岐命令206Dの予測を解決するために必要である。従って、条件分岐命令206Dの場合、クリティカルロード命令206Dのより早い再生及び実行は、誤って予測された条件分岐命令206Dのより速い解決をもたらすことができる。スケジューリングヒントの恩恵を受けることができるキャプチャドループ308内のクリティカル命令206Dの別の例は、キャプチャドループ308内に依存チェーンを有するものとして識別され、そのようなキーロック解除命令206Dをスケジューリング優先順位でマークする命令206Dである。
【0040】
図8Aは、図2の命令処理回路204からデコード済み命令206Dから、図3のループバッファメモリ312内の各命令エントリ310(1)~310(7)にキャプチャされる命令800(1)~800(7)の別の例示的なキャプチャドループ308(3)の図である。ここで、クリティカル命令にスケジューリングヒントを提供する別の変換最適化が、実行時にループバッファ回路300によって検出され得る。図8Aに示すように、キャプチャドループ308(3)のループバッファメモリ312内の命令エントリ310(2)の第2命令800(2)は、レジスタr1内のメモリアドレスでメモリに格納された値をレジスタr2にロードするロード命令である。図8Aに示すように、キャプチャドループ308(3)のループバッファメモリ312内の命令エントリ310(6)の第6命令800(6)は、レジスタr2内に格納された値をゼロ(0)と比較する比較命令である。次の命令800(7)は、branch if not equal (BNE)命令であり、これは、命令800(6)のレジスタr2と0(ゼロ)との比較に基づく条件分岐命令である。従って、条件分岐命令800(7)は、ロード命令800(2)に依存する。ロード命令800(2)は、条件分岐命令800(7)が誤って予測されたかどうかを決定する前に、レジスタr2内の値を解決するために実行されなければならない。従って、ロード命令800(2)は、条件分岐命令800(7)に対するクリティカルタイミング命令である。条件分岐命令800(7)が頻繁に誤って予測される場合、これは、ロード命令800(2)が実行されるまで、誤った予測が発見されないことを意味する。
【0041】
従って、この例では、ループ最適化回路318は、ロード命令800(2)がコンシューマ条件分岐命令800(7)に対するクリティカルタイミング命令であるプロデューサ命令であるかどうかを決定するように構成することができる。ループ最適化回路318は、図8Bに示すように、最適化ループ308O(3)としてロード命令800(2)を含む命令エントリ310(2)に関連付けられたスケジューリング優先順位インジケータ802(2)にスケジューリングヒント(scheduling hint SH)を提供するように構成することができる。例えば、ループバッファメモリ312内の命令エントリ310(1)~310(7)は、各々のスケジューリング優先順位インジケータ802(1)~802(7)も含むように追加することができ、これにより、ループ最適化回路318は、最適化ループ308O(3)としてキャプチャドループ308(3)の決定された最適化を提供するために、そのような命令800(1)~800(7)のスケジューリング優先順位を示すことができる。このスケジューリングヒントは、最適化ループ308O(3)が再生されるときに、図3のループ再生回路314によってアクセスされ、最適化ループ308O(3)が再生されるときに、図2の命令処理回路204の発行回路230に提供される。発行回路230は、ロード命令800(2)のスケジューリングヒントSHの指示を使用して、可能であればより高い優先順位での実行回路218による実行のためにロード命令800(2)をスケジュールすることを知ることができる。このようにして、ロード命令800(2)をより早く解決して、条件分岐命令800(7)の予測が不正確であったかどうかをより早く決定することができる。条件分岐命令800(7)の予測誤りから回復する回復手順は、ロード命令800(2)が後で解決された場合に実行される可能性のある他の手順よりも早く実行することができる。
【0042】
別の例として、キャプチャドループ308は、キャプチャドループ308内の並列依存チェーン間のロック解除命令206Dとしてクリティカルであるクリティカル命令206Dを含むことができる。例えば、キャプチャドループ308は、他のコンシューマ命令に対するプロデューサ命令である多くの独立したロード命令206D又はより長いレイテンシ(longer-latency)命令206Dを含むことができる。これらのロード命令206D又は他のコンシューマ命令に対するプロデューサ命令であるより長いレイテンシ命令206Dは、クリティカル「ロック解除(unlocking)」命令として知られている。従って、これらのロック解除命令206Dは、キャプチャドループ308の再生においてより早く実行されるように優先順位を付けられ、他のコンシューマ命令が、それらのオペランドがより早く利用可能であるために、図2の発行回路230によってより早く発行できることから、追加の性能を実現することができる。この点に関して、上述のように、ループ最適化回路318は、最適化ループ308Oを生成するためにキャプチャドループ308のそのようなクリティカルなロック解除命令206Dを含む命令エントリ310(1)~310(X)に関連付けられたスケジューリング優先順位インジケータにスケジューリングヒントSHを設けるように構成することができる。このスケジューリングヒントは、最適化ループ308Oが再生されるときに、図3のループ再生回路314によってアクセスされ、最適化ループ308Oが再生されるときに、図2の命令処理回路204の発行回路230に提供される。発行回路230は、ロック解除命令206DのスケジューリングヒントSHの指示を使用して、可能であればより高い優先順位での実行回路218による実行のためにロック解除命令206Dをスケジュールすることを知ることができる。このようにして、ロック解除命令206Dは、依存命令を発行回路230による実行のためにより早くスケジュールすることができるように、より早く解決することができる。
【0043】
別の例示的な態様において、図3のループバッファ回路300及びそのループ最適化回路318は、キャプチャドループ308内の命令206Dのループキャプチャ後命令分析を実行して任意の命令実行スライスを識別することによって、キャプチャドループ308のループ最適化を決定するように構成することができる。キャプチャドループ308内の命令実行スライスは、キャプチャドループ308内の命令セット206Dであり、キャプチャドループ308の再生で実行されるメモリロード/ストア命令に必要なロード/ストアメモリアドレスを計算する。キャッシュミスを生じる再生されたキャプチャドループ308内のメモリロード及びストアは、キャプチャドループ308が再生されるときに、命令パイプラインのスループットの性能を低下させる。しかし、キャッシュミスをより頻繁に生じる再生されたキャプチャドループ308内のメモリロード及びストアは、キャプチャドループ308のその再生繰り返し回数の関数として、命令パイプラインのスループットの性能低下を高める可能性がある。
【0044】
従って、以下により詳細に説明するように、ループバッファ回路300は、キャプチャドループ308の命令206Dの中で識別される識別された命令実行スライスを抽出するように構成することができる。ループバッファ回路300は、識別された抽出された命令実行スライスをソフトウェアプリフェッチ命令に変換するように構成され、ソフトウェアプリフェッチ命令は、次に、キャプチャドループ308が再生されてキャプチャドループのループ最適化を実行するときに、図2のプロセッサ200における命令パイプラインI~INのような命令パイプライン内のプリフェッチステージに注入することができる。命令実行スライスに対するソフトウェアプリフェッチ命令の処理により、図2のプロセッサ200の命令処理回路204は、命令実行スライス内の抽出された命令206Dをプリフェッチ命令206として命令パイプラインI~IN内のより早い段階で実行する。従って、抽出された実行スライス命令をプリフェッチ命令206として処理することによって実行されるメモリ操作から生じるキャッシュミスは、キャプチャドループ308が再生されるときに、依存命令206Dによって消費されるように、より早く回復することができる。抽出された命令実行スライスは、例として図3のループバッファメモリ312から離れた別のバッファに、又は例としてソフトウェアプリフェッチ命令を生成するために使用される特別な識別子(例えば、追加のポインタビットによる)と共にループバッファメモリ312内に格納することができる。
【0045】
この点に関して、図9Aは、図3のループバッファメモリ312内の各命令エントリ310(1)~310(6)にキャプチャされる命令900(1)~900(6)の例示的なキャプチャドループ308(4)の図である。キャプチャドループ308(4)は、命令900(1)及び900(3)からなる命令実行スライスを含む。命令900(1)は、レジスタr1に格納されている値に1を加算し、次にその結果をレジスタr1に戻して格納するadd命令である。命令900(3)は、レジスタr1内のメモリ位置の内容をレジスタr2にロードするload命令である。命令900(1)と900(3)の両方を実行して、レジスタr1のメモリアドレスを解決し、その値をレジスタr2にロードする必要がある。命令900(4)と900(5)は、ソースレジスタとしてレジスタr2に依存し、従って、命令900(4)と900(5)は、load命令900(3)から生成された結果に依存する。従って、図9Aのキャプチャドループ308(4)から識別できる命令実行スライスは、add命令900(1)とload命令900(3)である。キャプチャドループ308(4)のload命令900(3)がキャッシュミスになると、これにより、再生時に命令900(4)と900(5)の実行が遅延する。
【0046】
従って、図3のループ最適化回路318は、命令900(1)と900(3)の命令実行スライスを検出し、図9Bに示す最適化ループ308O(4)の一部として再生時にキャプチャドループ308(2)からこれらの命令を除去するように構成することができる。図3のループ最適化回路318は、キャプチャドループ308(4)が再生される前にプリフェッチステージ(例えば、図2の命令処理回路204内の命令フェッチ回路212)に提供される「プリフェッチスライス」又は命令実行スライス902として命令900(1)、900(3)を表すプリフェッチモードでソフトウェアプリフェッチ命令206を作成するように構成することができる。図9Bに示すように、この例の命令実行スライス902は、命令900(1)と900(3)に基づいており、依存命令900(4)と900(5)が実行されるためには、レジスタr1のメモリアドレスを解決してその値をレジスタr2にロードするために命令900(1)と900(3)の両方が実行されなければならない。図9Bに示すように、命令実行スライスは、元のadd命令900(1)と、それに続く命令900(3)の変更された命令900P(3)であり、これは、(命令900(1)によって更新されたように)レジスタr1に格納されたメモリアドレスのメモリ位置の内容をレジスタr2にプリフェッチする「プリフェッチ」命令である。命令900(1)と命令900P(3)の両方が、最適化ループ308O(4)の再生における命令パイプラインへのプリフェッチ命令として提供される。
【0047】
これは、命令処理回路1004を含む図10のプロセッサに基づくシステム1002における例示的なプロセッサ1000に示されている。図10のプロセッサ1000と図2のプロセッサ200との間の共通の構成要素は、共通の要素番号で示されているため、再説明しない。図10に示すように、図2のループバッファ回路210及び/又は図3のループバッファ回路300と同様であり得るループバッファ回路1010が提供される。ループバッファ回路1010は、上述の任意の機能を実行することができる。ループバッファ回路1010は、命令実行スライス906のソフトウェアプリフェッチ命令206を命令フェッチ回路212に提供して、図10Bの例におけるキャプチャドループ308(4)の他の命令が再生される前に、プリフェッチ命令として先に再生されるように構成することもできる。このようにして、図10の命令処理回路1004は、キャプチャドループ308(4)からの命令900(4)、900(5)が再生される前に、キャプチャドループ308(4)の命令実行スライス902として命令900(1)、900P(3)を先に処理することができ、その結果、命令900(1)、900(3)の処理から生成された結果は、ロード命令900(3)によるキャッシュミスの場合に、より早く利用可能になることができる。この点に関して、上述のように命令実行スライス902内のソフトウェアプリフェッチ命令206に変換された命令900(1)、900(3)、及び残りの命令900(2)及び900(4)~900(6)は、図9のキャプチャドループ308の最適化ループを構成する。命令実行スライス902を再生して、レジスタr1のメモリアドレスに格納されたデータをレジスタr2にプリフェッチし、再生された最適化ループ308O(4)の各繰り返しに対してデータをレジスタr2にロードすることができる。従って、命令実行スライス902の複数のインスタンスは、最適化ループ308O(4)の将来の複数の元のループ繰り返しのためのプリフェッチ命令として再生される。
【0048】
一例では、プリフェッチスライス902の命令900(1)、900(3)は、ループ最適化回路318によってループバッファメモリ312から完全に除去され、最適化ループ308O(4)内で通常の命令として再生される残りの命令206が命令900(2)及び900(4)~900(6)となるようにすることができることに留意されたい。代替として、ループ最適化回路318は、図9Bに示すように、命令実行スライス902の命令900(1)、900(3)をループバッファメモリ312に残したままにすることができるが、ループバッファメモリ312内の各々の命令エントリ310(1)~310(6)の一部として提供されるポインタフィールド904(1)~904(6)にポインタを提供する。ループ最適化回路318は、各々のポインタフィールド904(1)~904(6)にポインタ値を格納して、その各々の命令900(1)~900(6)が検出された命令実行スライス902の一部であるかどうかを示し、ポインタフィールド904(1)~904(6)に格納されたポインタ値が命令実行スライス902内の次の命令900(1)~900(6)を指すようにすることができる。
【0049】
例えば、図9Bに示すように、命令900(1)は、命令900(1)が検出された命令実行スライス902の一部であることを示すポインタ値「3」を各々のポインタフィールド904(1)に含む。命令900(3)は、それが検出された命令実行スライス902の一部として最後の命令900(3)であることを示すポインタ値「E」を各々のポインタフィールド904(3)に含む。このようにして、ループ再生回路314は、これらのインジケータを使用して、命令900(1)、900(3)をソフトウェアプリフェッチ命令206に変換して、残りの命令900(2)、900(4)~900(6)が再生される前に処理されるよう命令処理回路1004のプリフェッチステージに提供することができる。命令実行スライス902の命令をループバッファメモリ312自体に格納する利点は、サイドストレージ構造を提供する必要があるのとは対照的に、命令実行スライス902の一部として命令を示すために最小限の追加メモリビットのみを必要とする効率である。これはまた、図10の命令処理回路1004の命令パイプラインI~INに必要とされる結合及びエントリポイントを最小限に抑えることができる。命令実行スライス902は、ポインタフィールド904(1)~904(6)内のポインタを使用して繰り返し再生することができる。
【0050】
命令実行スライス902のソフトウェアプリフェッチ命令206は、非アーキテクチャ命令として知られていることに留意されたい。これは、命令処理回路1004が、リオーダバッファ内の位置、コミットされたマッピングテーブル等のような、そのような命令の処理のためのリソースを割り当てないことを意味する。従って、命令実行スライス902をプリフェッチ命令として処理した結果として、図10の命令処理回路1004の命令パイプラインI~INにおいて実行される作業は、この例におけるプロセッサ1000のアーキテクチャ状態を更新しない。従って、命令実行スライス902の処理は、プログラマの観点からデータに影響を与えない。しかし、命令実行スライス902の処理から生じるロードされたデータは、プロセッサ1000のデータキャッシュに取り込まれる。命令実行スライス902に割り当てられたリソースは、生成された値が最適化ループ308O(4)の再生によって消費されるとすぐに、命令処理回路1004内で解放される。これは、命令実行スライス902のいずれかのプリフェッチ命令206が障害を引き起こした場合、命令実行スライス902のプリフェッチ命令206を単に破棄することができ、回復する必要がないためである。命令実行スライス902のプリフェッチ命令206は、プリフェッチ命令として生成する必要なく、通常の再生モードでループバッファ回路1010によって最適化ループ308O(4)から再生することができる。
【0051】
図11は、検出されたループをキャプチャし、キャプチャドループ308内の命令実行スライス906を利用可能なループ最適化として検出する、図10のループバッファ回路1010の例示的な処理1100を示すフローチャートである。ループバッファ回路1010は、キャプチャドループ308が再生されるときにそのようなループ最適化を実現するために、命令パイプラインI~INのプリフェッチステージに、最適化ループ308Oの一部として、検出された命令実行スライス906内の命令を表すソフトウェアプリフェッチ命令206を生成して注入する。図11の処理1100は、ループバッファ回路1010及び図2の命令処理回路1004を参照して説明される。図11の処理1100に関してループバッファ回路1010が参照される場合、図3のループバッファ回路300において先に参照された特定の回路は、図11の処理1100を説明する際に明示的に参照されなくても、記載された処理を実行するように構成され得ることに留意されたい。
【0052】
この点に関して、処理ステップ1102、1104、1106は、前述の図4の処理400における処理ステップ402、404、406と同じであり、従って繰り返されない。図11の処理1108の次のステップは、ループバッファ回路1010が、キャプチャドループ308に基づいて、キャプチャドループ308に命令実行スライス906が存在するかどうかを決定することである(図11のブロック1108)。命令実行スライス906がキャプチャドループ308内に存在する場合(図11のブロック1108)、ループバッファ回路1010は、キャプチャドループ308を変更して、キャプチャドループ308内の命令実行スライス906を識別することを含む最適化ループ308Oを生成する(図11のブロック1110)。ループバッファ回路1010は、キャプチャドループ308が命令パイプラインI~IN内で再生されるべきかどうかを決定する(図11のブロック1112)。ループバッファ回路1010が、キャプチャドループ308が命令パイプラインI~IN内で再生されるべきかどうかを決定する場合(図11のブロック1112)、ループバッファ回路1010は、キャプチャドループ308内の識別された命令実行スライス906を表す少なくとも1つのプリフェッチ命令206を作成し(図11のブロック1114)、少なくとも1つのプリフェッチ命令206を実行されるように命令パイプラインI~IN内のプリフェッチステージに挿入する(図11のブロック1116)。ループバッファ回路1010は、次に、命令実行スライス906として識別されない最適化ループ308O内の他の複数の命令206Dを、実行されるように、命令パイプラインI~INに挿入する(図11のブロック1118)。
【0053】
図12は、命令1205を処理及び実行する命令処理回路1204を含むプロセッサ1202(例えば、マイクロプロセッサ)を含む例示的なプロセッサに基づくシステム1200のブロック図である。プロセッサ1202及び/又は命令処理回路1204は、命令処理回路1204内の処理された命令1205からループを検出及びキャプチャするように構成可能なループバッファ回路1206を含むことができる。ループバッファ回路1206は、また、ループ再生の性能を向上させるために、キャプチャドループに基づいてループ最適化を行うことができるかどうかを決定するように構成することができる。ループバッファ回路1206が、キャプチャドループに基づいてループ最適化を行うことができると決定した場合、ループバッファ回路1206は、キャプチャドループの再生性能を向上させるために、キャプチャドループを再生するときにそのようなループ最適化を実現できるように、そのようなループ最適化を行うように構成される。例えば、図12のプロセッサ1202は、命令処理回路204及びループバッファ回路210を含む図2のプロセッサ200、又は命令処理回路1204及びループバッファ回路1206を含む図12のプロセッサ1202とすることができる。図12のループバッファ回路1206は、例として、図2のループバッファ回路210、図3のループバッファ回路300、又は図10のループバッファ回路1010とすることができる。
【0054】
プロセッサに基づくシステム1200は、プリント回路基板(PCB)のような電子基板カード、サーバ、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、パーソナルデジタルアシスタント(PDA)、コンピューティングパッド、モバイルデバイス、又は任意の他のデバイスに含まれる1つ以上の回路であってよく、例えば、サーバ又はユーザのコンピュータを表すことができる。この例では、プロセッサに基づくシステム1200は、プロセッサ1202を含む。プロセッサ1202は、マイクロプロセッサ、中央処理装置などの1つ以上の処理回路を表す。プロセッサ1202は、本明細書で説明する動作及びステップを実行するための命令において処理ロジックを実行するように構成される。システムバス1212を介してシステムメモリ1210のようなメモリからフェッチ又はプリフェッチされた命令は、命令キャッシュ1208に記憶される。命令処理回路1204は、命令キャッシュ1208にフェッチされた命令1205を処理し、実行のために命令を処理するように構成される。処理される命令キャッシュ1208からフェッチされたこれらの命令1205は、ループ特性予測としての1つ以上のループ特性の予測に基づいて再生のためにループバッファ回路1206によって検出されるループを含むことができる。
【0055】
プロセッサ1202及びシステムメモリ1210は、システムバス1212に結合され、プロセッサに基づくシステム1200に含まれる周辺装置を相互結合することができる。周知のように、プロセッサ1202は、システムバス1212を介してアドレス、制御及びデータ情報を交換することにより、これらの他の装置と通信する。例えば、プロセッサ1202は、バストランザクション要求を、スレーブ装置の例として、システムメモリ1210内のメモリコントローラ1214に通信することができる。命令1205は、システムメモリ1210に格納され、命令処理回路1204による実行のためにシステムメモリ1210から取り出されることもできる。図12には示されていないが、複数のシステムバス1212を提供することができ、各システムバスは異なるファブリックを構成する。この例では、メモリコントローラ1214は、システムメモリ1210内のメモリアレイ1216にメモリアクセス要求を提供するように構成されている。メモリアレイ1216は、データを格納するためのストレージビットセルのアレイから構成される。システムメモリ1210は、非限定的な例として、読み出し専用メモリ(ROM)、フラッシュメモリ、同期DRAM(SDRAM)などの動的ランダムアクセスメモリ(DRAM)、及び静的メモリ(例えば、フラッシュメモリ、静的ランダムアクセスメモリ(SRAM)など)である。
【0056】
他の装置が、システムバス1212に接続することができる。図12に示すように、これらの装置は、例として、システムメモリ1210、1つ以上の入力装置1218、1つ以上の出力装置1220、モデム1222、及び1つ以上のディスプレイコントローラ1224を含むことができる。入力装置1218は、入力キー、スイッチ、音声プロセッサ等を含むがこれらに限定されない任意のタイプの入力装置を含むことができる。出力装置1220は、オーディオ、ビデオ、他の視覚インジケータ等を含むがこれらに限定されない任意のタイプの出力装置を含むことができる。モデム1222は、ネットワーク1226との間のデータ交換を可能にするように構成された任意の装置であることができる。ネットワーク1226は、有線又は無線ネットワーク、私設又は公衆ネットワーク、ローカルエリアネットワーク(LAN)、無線ローカルエリアネットワーク(WLAN)、ワイドエリアネットワーク(WAN)、BLUETOOTH(登録商標)ネットワーク、及びインターネットを含むがこれらに限定されない任意のタイプのネットワークであってもよい。モデム1222は、所望の任意のタイプの通信プロトコルをサポートするように構成することができる。プロセッサ1202は、システムバス1212を介してディスプレイコントローラ1224にアクセスして、1つ以上のディスプレイ1228に送られる情報を制御するように構成することもできる。ディスプレイ1228は、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイなどを含むがこれらに限定されない任意のタイプのディスプレイを含むことができる。
【0057】
図12のプロセッサに基づくシステム1200は、命令に従って所望される任意のアプリケーションに対してプロセッサ1202の命令処理回路1204によって実行される一組の命令1230を含むことができる。命令1230は、命令処理回路1204によって処理されるループを含むことができる。命令1230は、非過渡的なコンピュータ可読媒体1232の例として、システムメモリ1210、プロセッサ1202、及び/又は命令キャッシュ1208に格納することができる。命令1230は、その実行中に、完全に、又は少なくとも部分的に、システムメモリ1210及び/又はプロセッサ1202内に存在することもできる。命令1230は、更に、モデム1222を介してネットワーク1226を介して送信又は受信することができ、ネットワーク1226は非一時的コンピュータ可読媒体1232を含む。命令1230は、ループバッファ回路1206の機能を実行してループを検出及びキャプチャし、再生のためにループの最適化を実行するために、プロセッサ1202によって実行することもできる。
【0058】
非一時的コンピュータ可読媒体1232は単一の媒体であることが例示的な実施形態で示されているが、用語「コンピュータ可読媒体」は、命令の1つ以上のセットを格納する単一の媒体又は複数の媒体(例えば、集中型又は分散型データベース、及び/又は関連するキャッシュ及びサーバ)を含むものとみなされるべきである。用語「コンピュータ可読媒体」はまた、処理装置による実行のための命令のセットを格納、符号化又は伝送することができ、処理装置に本明細書に開示される実施形態の方法のいずれか1つ以上を実行させる任意の媒体を含むものとみなされるべきである。従って、「コンピュータ読み取り可能媒体」という用語は、固体メモリ、光学媒体及び磁気媒体を含むが、これらに限定されないものとする。
【0059】
本明細書に開示される実施形態は、様々なステップを含む。本明細書に開示される実施形態のステップは、ハードウェア構成要素によって形成されてもよく、又は、汎用又は特殊用途のプロセッサをステップを実行するように命令でプログラムさせるために使用できる機械実行可能命令で実施されてもよい。あるいは、ステップは、ハードウェア及びソフトウェアの組み合わせによって実行されてもよい。
【0060】
本明細書に開示される実施形態は、本明細書に開示される実施形態によるプロセスを実行するためにコンピュータシステム(又は他の電子デバイス)をプログラムするために使用され得る、命令を記憶した機械可読媒体(又はコンピュータ可読媒体)を含むコンピュータプログラムプロダクト又はソフトウェアとして提供されてもよい。機械可読媒体は、機械(例えば、コンピュータ)により読み取り可能な形式で情報を格納又は送信する任意のメカニズムを含む。例えば、機械可読媒体は、機械可読記憶媒体(例えば、ROM、ランダムアクセスメモリ(「RAM」)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス等)、等を含む。
【0061】
特に明記されていない限り、また、前の議論から明らかなように、記述全体を通じて、「処理」、「計算」、「決定」、「表示」などの用語を使用した議論は、コンピュータシステムのレジスタ内で物理的(電子的)量として表されるデータ及びメモリを、コンピュータシステムのメモリ又はレジスタ内で同様に物理的量として表される他のデータに操作及び変換するコンピュータシステム又は同様の電子計算装置又は他のそのような情報記憶装置、送信装置又は表示装置の動作及びプロセスを指すことが理解される。
【0062】
ここで提示されるアルゴリズム及び表示装置は、本質的に特定のコンピュータ又は他の装置に関連していない。種々のシステムは、本明細書の教示に従ってプログラムと共に使用することができ、又は、必要な方法ステップを実行するために、より専門的な装置を構築することが便利であることが証明できる。これらの種々のシステムに必要な構造は、上記の説明から示される。更に、本明細書に記載される実施形態は、特定のプログラミング言語に関しては説明されない。本明細書に記載されるような実施形態の教示を実施するために、様々なプログラミング言語を使用することができることが理解されよう。
【0063】
当業者は、本明細書に開示される実施形態に関連して記載される様々な例示的論理ブロック、モジュール、回路及びアルゴリズムが、電子ハードウェア、メモリ又は別のコンピュータ可読媒体に格納され、プロセッサ又は他の処理装置によって実行される命令、又はその両方の組み合わせとして実施され得ることを更に理解されよう。本明細書に記載される分散アンテナシステムの構成要素は、例として、任意の回路、ハードウェア構成要素、集積回路(IC)、又はICチップに使用され得る。本明細書に開示されるメモリは、任意のタイプ及びサイズのメモリであり得、所望の任意のタイプの情報を格納するように構成され得る。この互換性を明確に説明するために、種々の例示的な構成要素、ブロック、モジュール、回路及びステップが、それらの機能に関して一般的に上述されている。このような機能がどのように実装されるかは、特定のアプリケーション、設計上の選択、及び/又はシステム全体に課される設計上の制約に依存する。当業者は、特定のアプリケーションごとに異なる方法で記述された機能を実装することができるが、そのような実装の決定は、本実施形態の範囲から逸脱すると解釈されるべきではない。
【0064】
本明細書に開示される実施形態に関連して記載される種々の例示的論理ブロック、モジュール、及び回路は、本明細書に記載される機能を実行するように設計されたプロセッサ、デジタル信号プロセッサ(DSP)、特定用途集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又は他のプログラマブルロジックデバイス、個別ゲート又はトランジスタロジック、個別ハードウェア構成要素、又はそれらの任意の組み合わせを用いて実装又は実行することができる。更に、コントローラはプロセッサであってもよい。プロセッサはマイクロプロセッサであってもよいが、代わりに、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、又はステートマシンであってもよい。プロセッサは、コンピューティングデバイス(例えば、DSPとマイクロプロセッサの組み合わせ、複数のマイクロプロセッサ、DSPコアと結合した1つ以上のマイクロプロセッサ、又は他の任意のそのような構成)の組み合わせとして実装されてもよい。
【0065】
本明細書に開示される実施形態は、ハードウェア及びハードウェアに格納される命令において実施され得るものであり、例えば、RAM、フラッシュメモリ、ROM、電気的プログラマブル ROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、又は当技術分野で知られている任意の他の形態のコンピュータ可読媒体に存在し得る。例示的な記憶媒体はプロセッサに結合され、その結果、プロセッサが記憶媒体から情報を読み出し、記憶媒体に情報を書き込むことができる。代替的に、記憶媒体は、プロセッサに統合されてもよい。プロセッサ及び記憶媒体は、ASIC内に配置されてよい。ASICは、リモートステーション内に存在してもよい。別の方法として、プロセッサと記憶媒体は、リモートステーション、基地局、又はサーバ内に個別のコンポーネントとして存在してもよい。
【0066】
また、本明細書の例示的な実施形態のいずれかに記載されている動作ステップは、例及び議論を提供するために記載されていることに留意されたい。記載されている動作は、図示されたシーケンス以外の多数の異なるシーケンスで実施され得る。更に、1つの動作ステップで記述された動作は、実際には多くの異なるステップで実行されてもよい。更に、例示的な実施形態で説明された1つ以上の動作ステップを組み合わせることができる。当業者は、情報及び信号が様々な技術及び技術のいずれかを用いて表現され得ることも理解するであろう。例えば、データ、命令、コマンド、情報、信号、ビット、シンボル、及びチップは、上記の説明を通じて参照され得るものであり、電圧、電流、電磁波、磁場、又は粒子、光場又は粒子、又はそれらの任意の組み合わせによって表現され得る。
【0067】
特に明示的に記載されていない限り、ここに記載されている方法は、そのステップが特定の順序で実行されることを要求するものとして解釈されることは決して意図されていない。従って、方法の請求項が、そのステップに従うべき順序を実際に記載していない場合、又はステップが特定の順序に限定されることが請求項又は説明に特に記載されていない場合は、特定の順序が推測されることは決して意図されていない。
【0068】
本発明の精神又は範囲から逸脱することなく、様々な変更及び変形を行うことができることは、当業者には明らかであろう。本発明の精神及び内容を組み込んだ開示された実施形態の変更、組み合わせ、部分的な組み合わせ及び変形は、当業者に起こり得るので、本発明は、添付の請求の範囲及びそれらの均等物の範囲内のすべてを含むと解釈されるべきである。
図1
図2
図3
図4
図5A
図5B
図6
図7A
図7B
図8A
図8B
図9A
図9B
図10
図11
図12
【国際調査報告】