(57)【要約】  任意の保留中プリフェッチ要求操作をキャンセルするために、ソフトウェアループからの出口または関数戻りを認識するプリフェッチ論理手段を使用することによってキャッシュ汚染を低減する。プリフェッチ論理手段は、プログラムループ内のメモリアクセス命令の反復実行に基づいてデータアクセスストライドを決定するためのループデータアドレスモニタを含む。次いで、データプリフェッチ論理手段は、データアクセスストライドに従って、プリフェッチ要求を投機的に発行する。停止プリフェッチ回路は、識別されたループ出口に応じて、保留中プリフェッチ要求をキャンセルするために使用される。プリフェッチ論理手段は、呼び出された関数からの戻りも認識して、呼び出された関数に関連付けられる任意の保留中プリフェッチ要求操作をキャンセルし得る。プリフェッチ要求がキャンセルされる場合、ロード命令に基づくものなどのデマンド要求はキャンセルされない。
2016507836.tif 000002
【特許請求の範囲】
【請求項１】
プリフェッチ要求をキャンセルするための方法であって、
プログラムフロー情報の評価に基づいて、ループ出口状況を識別するステップと、
前記識別されたループ出口状況に応じて、保留中キャッシュプリフェッチ要求をキャンセルするステップと
を含む、方法。
【請求項２】
キャンセルされた前記保留中キャッシュプリフェッチ要求が、既存のデマンド要求を含まない、請求項1に記載の方法。
【請求項３】
前記ループ出口状況が、ループを出ると評価するループ終了分岐を識別するステップに基づく、請求項1に記載の方法。
【請求項４】
前記ループ出口状況が、投機的な命令フェッチおよび実行をキャンセルさせる不正確な分岐予測に基づく、請求項1に記載の方法。
【請求項５】
条件分岐命令が、前記ループ出口状況としてプログラムループを終了するよう解決されたことを検出するステップと、
デマンドプリフェッチ要求を除いて保留中プリフェッチ要求をキャンセルするステップと、
をさらに含む、請求項1に記載の方法。
【請求項６】
条件分岐命令が、プログラムループを終了するよう解決していないことを検出するステップであって、前記ループ出口状況の監視が続く、ステップ、
をさらに含む、請求項1に記載の方法。
【請求項７】
プリフェッチ要求をキャンセルするための方法であって、
呼び出された関数に従って、データを投機的にプリフェッチするステップと、
前記呼び出された関数からの関数出口に応じて、保留中データプリフェッチ要求をキャンセルするステップと、
を含む、方法。
【請求項８】
既存のデマンド要求がキャンセルされない、請求項7に記載の方法。
【請求項９】
前記関数出口が、前記呼び出された関数からの戻りの実行を検出するステップに基づく、請求項7に記載の方法。
【請求項１０】
前記関数出口が、前記呼び出された関数からの戻りの投機的な実行を検出するステップに基づく、請求項7に記載の方法。
【請求項１１】
プリフェッチ要求をキャンセルするための装置であって、
プログラムループ内のメモリアクセス命令の反復実行に基づいて、データアクセスストライドを決定するように構成されたループデータアドレスモニタと、
前記データアクセスストライドに従って、プリフェッチ要求を投機的に発行するように構成されたデータプリフェッチ論理手段と、
識別されたループ出口に応じて、保留中プリフェッチ要求をキャンセルするように構成された停止プリフェッチ回路と、
を備える、装置。
【請求項１２】
前記ループデータアドレスモニタが、
前記メモリアクセス命令の実行ごとにオペランドアドレス間の差を決定するために、前記メモリアクセス命令の反復実行を監視するように構成されたストライド回路であって、前記オペランドアドレス間の前記差が、ストライドアドレス値である、ストライド回路と、
次のオペランドアドレスを決定するために、直前に実行されたメモリアクセス命令の前記オペランドアドレスに、前記ストライドアドレス値を加算するように構成された加算機能回路と、
を備える、請求項11に記載の装置。
【請求項１３】
既存のデマンド要求がキャンセルされない、請求項11に記載の装置。
【請求項１４】
前記識別されたループ出口が、前記プログラムループを出ると評価するループ終了分岐を識別するステップに基づく、請求項11に記載の装置。
【請求項１５】
前記識別されたループ出口が、投機的な命令フェッチおよび実行をキャンセルする不正確な分岐予測に基づく、請求項11に記載の装置。
【請求項１６】
前記停止プリフェッチ回路が、条件分岐命令が前記識別されたループ出口として前記プログラムループを終了するよう解決したことを検出し、デマンドプリフェッチ要求を除いて保留中プリフェッチ要求をキャンセルするようにさらに構成される、請求項11に記載の装置。
【請求項１７】
前記停止プリフェッチ回路が、条件分岐命令が前記プログラムループを終了するよう解決していないことを検出するようにさらに構成されており、前記プログラムループが、前記ループ出口が識別されるまで続く、請求項11に記載の装置。
【請求項１８】
前記停止プリフェッチ回路が、弱く予測されたループ出口に基づいて保留中プリフェッチ要求をキャンセルしないようにさらに構成される、請求項11に記載の装置。
【請求項１９】
コンピュータ可読プログラムデータおよびコードで符号化され、前記プログラムデータおよびコードが、実行されるときに、
プログラムフロー情報に基づいて、ループ出口状況を識別し、
前記識別されたループ出口状況に応じて、保留中キャッシュプリフェッチ要求をキャンセルする
ように動作可能である、コンピュータ可読非一時的媒体。
【請求項２０】
プリフェッチ要求をキャンセルするための装置であって、
プログラムループ内のメモリアクセス命令の反復実行に基づいて、データアクセスストライドを決定するための手段と、
前記データアクセスストライドに従って、プリフェッチ要求を投機的に発行するための手段と、
識別されたループ出口に応じて、保留中データキャッシュプリフェッチ要求をキャンセルするための手段と、
を備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、処理システムの態様に関し、具体的には、データプリフェッチングによって生じるキャッシュ汚染を低減させるための方法および装置に関する。
【背景技術】
【０００２】
多くのポータブル製品、たとえば携帯電話、ラップトップコンピュータ、携帯情報端末(PDA)などは、通信プログラムおよびマルチメディアプログラムなどのプログラムを実行する処理システムを利用している。そのような製品のための処理システムは、複数のプロセッサ、命令およびデータを格納するための複数レベルのキャッシュを含む複雑なメモリシステム、コントローラ、通信インターフェースなどの周辺デバイス、ならびに、たとえば単一チップ上に構成された固定機能論理ブロックを含み得る。同時に、ポータブル製品は、処理システムによる高性能演算をサポートするためにしばしば必要とされる、バッテリの形での限られたエネルギー源を有している。バッテリ寿命を増大させるために、これらの演算をできるだけ効率的に行うことが望ましい。多くのパーソナルコンピュータも、全体的なエネルギー消費を削減させて動作させるための効率的な設計で開発されている。
【０００３】
プログラムの実行において高い性能を提供するために、メモリ参照の空間的局所性の概念に基づき、また一般的にプロセッサの性能を改善するために使用される、データプリフェッチングが使用され得る。フェッチされたデータ要素に近い、またはストライドアドレスデルタもしくは間接的なポインタによって関連しており、今後のアクセスにおいて使用される可能性があるアドレスで、キャッシュから複数のデータ要素をプリフェッチすることによって、キャッシュミス率を低減することができる。キャッシュの設計は、一般的に、個々のデータ要素をフェッチするためにデータのキャッシュラインをフェッチすることによって、プリフェッチングの形式を実装する。ハードウェアプリフェッチャは、データの1つまたは複数の追加のキャッシュラインを投機的にプリフェッチすることによって、これを拡張することができ、プリフェッチアドレッシングは、順次、ストライド、またはポインタ情報に基づいて形成され得る。大規模なデータの配列の処理などの、メモリ集約型作業負荷のためのそのようなハードウェアプリフェッチャ動作は、メモリレイテンシを著しく低減することができる。しかしながら、データプリフェッチングには欠点がある。たとえば、データの配列を処理するために使用されるソフトウェアループ内では、データプリフェッチャ回路は、ループの最終反復を含む今後のループの反復において使用されるデータをプリフェッチする。しかしながら、ループの最終反復のためにプリフェッチされたデータは使用されず、キャッシュ内で使用されないこのデータを格納することによってキャッシュ汚染が発生する。キャッシュ汚染問題は、ループが展開されたときに悪化する。
【発明の概要】
【課題を解決するための手段】
【０００４】
本開示は、そのいくつかの態様の中でも、プリフェッチングのためのより効率的な方法および装置を提供することによって、プロセッサシステムにおいて性能を向上させて、所要電力を削減することができると認識している。そのような目的のために、本発明の実施形態は、プリフェッチ要求をキャンセルするための方法に対処する。ループ出口状況は、プログラムフロー情報の評価に基づいて識別される。保留中キャッシュプリフェッチ要求は、識別されたループ出口状況に応じてキャンセルされる。
【０００５】
別の実施形態は、プリフェッチ要求をキャンセルするための方法に対処する。データは、呼び出された関数に従って投機的にプリフェッチされる。保留中データプリフェッチ要求は、呼び出された関数からの関数出口に応じてキャンセルされる。
【０００６】
別の実施形態は、プリフェッチ要求をキャンセルするための装置に対処する。ループデータアドレスモニタは、プログラムループ内のメモリアクセス命令の反復実行に基づいて、データアクセスストライドを決定するように構成されている。データプリフェッチ論理手段は、データアクセスストライドに従って、プリフェッチ要求を投機的に発行するように構成されている。停止プリフェッチ回路は、識別されたループ出口に応じて、保留中プリフェッチ要求をキャンセルするように構成されている。
【０００７】
別の実施形態は、コンピュータ可読プログラムデータおよびコードで符号化されるコンピュータ可読非一時的媒体に対処する。ループ出口状況は、プログラムフロー情報の評価に基づいて識別される。保留中キャッシュプリフェッチ要求は、識別されたループ出口状況に応じてキャンセルされる。
【０００８】
さらなる実施形態は、プリフェッチ要求をキャンセルするための装置に対処する。手段は、プログラムループ内のメモリアクセス命令の反復実行に基づいて、データアクセスストライドを決定するために利用される。手段は、データアクセスストライドに従って、プリフェッチ要求を投機的に発行するために利用される。また、手段は、識別されたループ出口に応じて、保留中プリフェッチ要求をキャンセルするために利用される。
【０００９】
本発明の他の実施形態は、本発明の様々な実施形態が例示によって図示および説明される以下の詳細な説明から、当業者には容易に明らかになることが理解される。理解されるように、本発明は、他の、および異なる実施形態が可能であり、そのいくつかの詳細は、すべて本発明の趣旨および範囲から逸脱することなしに、他の様々な点で修正が可能である。したがって、図面および詳細な説明は、本質的に例示的なものであり、限定的なものではないと見なされるべきである。
【００１０】
添付の図面において、本発明の様々な態様が限定ではなく例示として示される。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態が有利に使用され得る、例示的なプロセッサシステムを示す図である。
【図２Ａ】ループ終了分岐を検出すると、保留中非デマンド(non-demand)データプリフェッチ要求をキャンセルするためのプロセスを示す図である。
【図２Ｂ】関数戻り(function return)を検出すると、保留中非デマンドデータプリフェッチ要求をキャンセルするためのプロセスを示す図である。
【図３】キャッシュ汚染を低減するために、選択された保留中データプリフェッチ要求をキャンセルするように構成されたプロセッサ複合体を有するポータブルデバイスの特定の実施形態を示す図である。
【発明を実施するための形態】
【００１２】
添付の図面に関連して以下で述べる詳細な説明は、本発明の様々な例示的実施形態の説明を意図するものであり、本発明を実施することができる実施形態だけを表すことを意図するものではない。詳細な説明は、本発明の完全な理解を提供する目的で、具体的な詳細を含んでいる。しかしながら、本発明はこれらの具体的な詳細なしでも実施され得ることが、当業者には明らかであろう。一部の事例では、よく知られている構造および構成要素は、本発明の概念を曖昧にすることを避けるために、ブロック図の形式で示されている。
【００１３】
図1は、本発明の実施形態が有利に使用される、例示的なプロセッサシステム100を示している。プロセッサシステム100は、プロセッサ110、キャッシュシステム112、システムメモリ114、ならびに入力および出力(I/O)システム116を含む。たとえば、キャッシュシステム112は、レベル1の命令キャッシュ(Icache)124、メモリコントローラ126、およびレベル1のデータキャッシュ(Dcache)128を備える。また、キャッシュシステム112は、レベル2のユニファイドキャッシュ(図示せず)、または特定の実装形態環境にとって所望されるような他のキャッシュ構成要素を含み得る。システムメモリ114は、Icache124またはDcache128では見つからない命令およびデータへのアクセスを提供する。キャッシュシステム112は、プロセッサ110と統合することができ、また階層的な組織内の複数のレベルのキャッシュを含み得る点に留意されたい。I/Oシステム116は、プロセッサ110とインターフェースする、I/Oデバイス140および142などの、複数のI/Oデバイスを備える。
【００１４】
本発明の実施形態は、条件分岐命令を有するプロセッサにおいて適切に使用され得る。プロセッサ110は、たとえば、命令パイプライン120、データプリフェッチ論理手段121、予測論理手段122、およびスタック論理回路123を備える。命令パイプライン120は、フェッチおよびプリフェッチステージ130、復号ステージ131、命令発行ステージ132、オペランドフェッチステージ133、ロード(Ld)および格納(St)命令の実行などの実行ステージ134、ならびに完了ステージ135などの、一連のステージで構成されている。命令パイプライン120における各ステージ130〜135は、各ステージにおいて要求されるプロセッサの演算頻度および演算の複雑さに応じて、いくつかの追加パイプラインステージを備え得ることが、当業者には理解されよう。たとえば、実行ステージ134は、加算器、乗算器、論理演算、ロードおよび格納演算、シフトおよび回転演算、ならびに複雑度のより高いまたはより低い他の機能回路などのような、1つまたは複数の命令実行ステージ回路に対応する、1つまたは複数のパイプラインステージを含み得る。たとえば、ロード命令が実行されると、Dcache128にデータを要求し、要求されたデータがDcache内にない場合、次のレベルのキャッシュまたはシステムメモリにフェッチ要求が発行される。そのようなフェッチ要求は、この場合はロード命令である命令の実行に直接応答しているので、デマンド要求と考えられる。
【００１５】
プリフェッチ要求は、たとえばストライドに基づいて、ロードアドレスを有するループ内に1つまたは複数のロード命令を有するプログラムループの検出などの、プログラムフロー情報に応答して行われる要求である。データプリフェッチ論理手段121は、プリフェッチ要求を発行する前に、ロード命令のオペランドアドレスのデマンド使用パターンをより正確に識別するために、検出されたループのいくつかの反復に基づく場合があるそのようなプログラムフロー情報を利用する。パターンが検出されると、フィル要求(fill request)が挿入される。プロセッサ110は、プロセッサパイプラインにおいて追跡される要求に関連付けられる余分なフラグを使用することによって、デマンド要求をプリフェッチ要求から区別するために動作することができる。このフラグはまた、各未処理のキャッシュラインフィルがプリフェッチまたはデマンドフィルのいずれかとして識別され得るキャッシュに、要求を伝搬することができる。パイプラインステージのそれぞれは、本明細書に記載のプリフェッチ要求キャンセリング方法および装置から逸脱することなしに、様々な実装形態を有することができる。
【００１６】
プログラムによって要求されたデータが、関連付けられるレベル1のDcache128になかった場合に発生し得る遅延を最小限にするために、フェッチおよびプリフェッチステージ130は、検出されたプログラムループ内で実行する、1つまたは複数のメモリアクセス命令に関連付けられるプログラムフロー情報を記録する。プログラム情報は、復号ステージ131から、ロード命令が受信されて、ロード命令のオペランドアドレス情報が、実行の前に、オペランドフェッチステージ133または実行ステージ134などのパイプラインステージで利用可能でよいという表示を含み得る。データプリフェッチ論理手段121は、パターンを検出するためにロードアドレスが利用可能になると、それらのロードアドレスを監視する。パターンが、たとえば、ループの3つ以上の反復を通じてロード命令を監視することによって、許容できる信頼レベルで決定された後、予測されるデータのプリフェッチ要求が、ロード命令がループ内で再び発生する(encounter)前に発行される。この投機的プリフェッチ要求は、要求されたデータが、実行ステージ134によって必要とされるときに、レベル1のDcacheにおいて利用可能であるようことを保証する。次いで、ロードおよび格納実行ステージ134は、メモリ階層内のより上位のレベルからデータにアクセスするために待機せずに、レベル1のDcacheから要求されたデータに直接アクセスする可能性が高い。
【００１７】
データプリフェッチ論理手段121は、データアクセスストライドを決定するためのデータキャッシュループデータアドレスモニタも含み得る。次いで、データプリフェッチ論理手段121は、データアクセスストライドに従ってオペランドアドレスを設定したプリフェッチ要求を投機的に発行する。たとえば、データプリフェッチ論理手段121は、ストライド値を表すロード命令の実行ごとのオペランドアドレス間の差を決定するために、ロード命令の反復実行を監視するように構成されたストライド回路119を含み得る。ストライド回路119は、次のオペランドアドレスを生成するために、直前に実行されたロード命令のオペランドアドレスに、決定されたストライド値を加算するように構成された加算機能も含み得る。予測されたアドレスとしてのストライド値とは対照的に、フェッチされた条件分岐命令は、条件分岐が取られる(taken)かどうかおよび分岐アドレスを予測するために、予測論理回路122に含まれるものなどの分岐予測論理（分岐予測論理回路、分岐予測論理手段）を用いる。フェッチされた非分岐命令は、復号ステージ131に進んで復号され、実行するために命令発行ステージ132で発行され、実行ステージ134で実行され、完了ステージ135で撤収される(retired)。
【００１８】
予測論理回路122は、イベントを監視するための検出論理回路146、フィルタ150、および条件履歴テーブル152を備える。一実施形態では、条件分岐命令の大部分は一般的に、それらの条件を、ソフトウェアループのほとんどの反復に関して同じ値に解決(resolve)していると仮定される。
【００１９】
一実施形態では、検出論理回路146は、図2Aに関して説明されるように、ソフトウェアループで使用される条件分岐命令の動的特性に基づいて動作するソフトウェアループ検出器として機能する。検出論理回路146は、図2Bに関して説明されるように、呼び出されたソフトウェア関数からの出口も検出し得る。
【００２０】
単一の入口および単一の出口を有するソフトウェアループにおいて、ループ終了分岐は一般的に、ソフトウェアループを出る最終反復を除いて、ループのすべての反復に関してソフトウェアループの先頭に戻り分岐する条件分岐命令である。検出論理回路146は、以下で、および、その全体が参照により本明細書に組み込まれている、本出願の譲受人に譲渡された、「Suppressing Update of a Branch History Register by Loop-Ending Branches」と題する米国特許出願第11/066,508号においてより詳細に説明されるように、ソフトウェアループの検出のための複数の実施形態を有し得る。
【００２１】
一実施形態によれば、検出論理回路146は、分岐目標アドレスが条件分岐命令アドレスよりも小さく、したがって後方分岐と見なされ、ソフトウェアループの終わりをマーキングすると仮定される、条件分岐命令を識別する。すべての後方分岐がループ終了分岐というわけではないので、たとえば、さらなる監視メカニズムによって説明される必要がある、ある程度の不正確さがある。
【００２２】
また、図2Bに関して説明されるように、関数戻り命令(通常、RETと呼ばれる)が検出され得る。一実施形態によれば、関数戻りの検出は、任意の非デマンドプリフェッチ要求のプリフェッチキャンセルをトリガするように適合される。また、プリフェッチ要求のキャンセルは、ループ出口の検出などのプログラムフロー情報に応じて行われる。
【００２３】
別の実施形態では、ループ終了分岐は、同じ分岐命令の反復実行を認識することによって、単純ループ内で検出され得る。最終後方分岐命令に関するプログラムカウンタ値を特殊目的レジスタに格納して、この格納された値を次の後方分岐命令の命令アドレスと比較することによって、2つの命令アドレスが一致したときにループ終了分岐を認識することができる。コードはソフトウェアループ内に条件分岐命令を含み得るので、ループ終了分岐命令の判断はより複雑になる場合がある。そのような状況では、複数の特殊目的レジスタを、各条件分岐命令の命令アドレスを格納するようにハードウェアでインスタンス化すればよい。格納されたすべての値と比較することによって、ループ終了分岐に対する一致を判断することができる。一般的に、ループ分岐は、プログラムカウンタ(PC)からの一定のオフセットを有する条件後方直接分岐である。これらのタイプの分岐は、ループ出口を検出するためのアドレス比較を必要としない。代わりに、一旦プログラムループが条件後方直接分岐に基づいて検出されると、分岐の述語(predicate)の解決(resolution)からループ出口が決定される。たとえば、述語がループに戻るための真の条件に解決すると、述語が偽の条件に解決するときにループ出口が示されることになる。そこを保留中プリフェッチにするために、プログラムループは、プリフェッチハードウェアをトリガするためにすでに数回実行していただろう。データプリフェッチ論理手段121は、プリフェッチを開始する前にパターンを認識するために、いくつかのウォームアップデマンドロード(warmup demand load)を必要とする。
【００２４】
ループ終了分岐は、コンパイラまたはアセンブラによって静的にマーキングすることもできる。たとえば、一実施形態では、コンパイラが、一意の命令コード(opcode)を使用することによって、またはループ終了分岐に対してのみ使用される特別なフォーマットのビットフィールドをセットすることによって、特定のタイプの分岐命令を生成する。次いで、ループ終了分岐は、パイプラインにおける復号ステージの間などの、パイプライン実行の間に容易に検出され得る。
【００２５】
予測論理回路122は、フィルタ150、条件履歴テーブル(CHT)152、および関連付けられる監視論理（監視論理手段、監視論理回路）を備える。一実施形態では、監視プロセスは、予測に適格な条件分岐命令を有するソフトウェアループの1つまたは複数の以前の実行中に発生した、予め指定された条件イベントの状態情報を保存する。予測論理回路122を支持して、フィルタ150は、フェッチされた条件分岐命令が受信されたか、およびCHT152が有効であるかどうかを決定する。CHT152内のエントリは、たとえば、命令がパイプラインを通って移動するときに、パイプラインステージ132〜135によって追跡される予測情報を提供するように選択される。
【００２６】
CHT152エントリは、予測された実行に適格な、フェッチされた命令に関する実行の履歴を記録する。たとえば、各CHTエントリは、実行状況カウンタからのカウント値と、予測論理手段への入力である状況ビットとの組合せを適切に備え得る。ソフトウェアループには複数の条件分岐命令が存在し得るので、CHT152は、フェッチされた条件分岐命令を、フェッチされた命令に関連付けられるCHT152内のエントリにインデックス付けさせるためのインデックス論理手段も備え得る。たとえば、ソフトウェアループの先頭から条件分岐命令の数をカウントすることによって、カウントは、CHT152へのインデックスとして使用することができる。予測論理回路122は、ソフトウェアループの反復をカウントして、実行状況カウンタが、たとえば、強い非実行状況を表す、指定されたカウント値で飽和する機会があったことを保証するための、ループカウンタを含む。実行状況カウンタが飽和した場合、予測論理（予測論理回路、予測論理手段）が有効にされて、ループの次の反復では、関連付けられた、フェッチされた条件分岐命令の分岐方向の予測を行う。
【００２７】
予測論理回路122は、それぞれトラックレジスタ発行(TrI)162、トラックレジスタオペランドフェッチ163、トラックレジスタ実行(TrE)164、およびトラックレジスタ完了(TrC)165における、命令発行ステージ132、オペランドフェッチステージ133、実行ステージ134、および完了ステージ135で追跡される予測情報を生成する。プロセッサパイプラインにおける実行ステージ134の間などに、ループの終了または関数戻りを示す失敗した述語を有する条件後方分岐が検出される場合、キャンセル保留中プリフェッチ要求信号155が生成される。別の実施形態では、保留中プリフェッチ要求は、分岐予測論理（分岐予測論理回路、分岐予測論理手段）によって生成された条件分岐予測に基づいてキャンセルされる。各条件分岐は、一般的に、条件分岐を取る、または取らないために、分岐予測論理（分岐予測論理回路、分岐予測論理手段）によって予測される。たとえば、予測情報が、条件分岐が取られること、この例ではプログラムループを続けることを示す場合、命令フェッチャは、予測によって示されるプログラムループ上で命令を投機的にフェッチする。予測情報は、フェッチ&プリフェッチ回路130に常駐し得る、キャンセル保留中プリフェッチ要求論理回路141にも結合される。次いで、キャンセル保留中プリフェッチ要求論理回路141は、保留中プリフェッチ要求は必要ではないことを示すプログラムフロー情報に基づいて、保留中プリフェッチ要求を投機的にキャンセルし得る。たとえば、プロセッサは、弱く予測されたループ出口に基づいて保留中プリフェッチ要求をキャンセルしないように構成され得る。1つまたは複数の保留中データプリフェッチ要求をキャンセルすることによって、データキャッシュ汚染が低減され、プロセッサ110においてそのような汚染に対処するために使用される電力が低減される。図1に示されるように、キャンセル保留中プリフェッチ要求信号155は、プロセッサ命令パイプライン120に結合され、デマンドプリフェッチ要求を除いて、保留中であるプリフェッチ要求をキャンセルさせる、キャンセル保留中プリフェッチ要求論理回路141によって受け入れられる。また、これは、フェッチされていたかもしれないデータを追い出した可能性があり、現在代わりにミスが生成されている、データキャッシ
ュ内に不要なデータを格納しないことによって、プロセッサ性能が向上する。
【００２８】
実行ステージ134に到達すると、ループ終了条件分岐命令用に指定された実行条件が、その予測に対して反対の評価をしている場合、たとえば、パイプラインをフラッシング(flushing)することによって、間違った命令パス上の命令の任意のパイプラインの投機的な実行が訂正され、そのような訂正は、間違った命令パスに関連付けられる保留中プリフェッチをキャンセルすることを含み得る。たとえば、一実施形態では、パイプラインの訂正は、予測が行われたステージで始まるパイプライン内の命令をフラッシングすることを含む。代替実施形態では、パイプラインは、ループ終了条件分岐命令が最初にフェッチされた開始フェッチステージからフラッシングされる。また、適切なCHTエントリも、不正確な予測の後で訂正することができる。
【００２９】
ループ検出器として作用する検出回路146は、ループ終了分岐を検出するように動作する。たとえば、ループ終了分岐は一般的に、ループを出る最終反復を除いて、ループのすべての反復に関して、ループの先頭に戻り分岐する条件分岐命令である。各識別されたループに関する情報はフィルタ回路150に渡され、ループ出口状況で、キャンセル保留中プリフェッチ要求論理回路141は、各識別されたループ出口に応答して、保留中非デマンドプリフェッチ要求をキャンセルする。
【００３０】
一実施形態では、フィルタ回路150は、たとえば、特定のループの3回の反復などの、設定された反復回数のソフトウェアループが発生したという指示を与えるループカウンタである。ループの反復ごとに、フィルタは、条件分岐命令が予測の対象となるかどうかを決定する。適格な条件分岐(CB)命令がループ内にある場合、CB命令を実行するという状況が、条件履歴テーブル(CHT)回路152に記録される。たとえば、実行状況カウンタを使用して、適格なCB命令の以前の試行済み実行の実行履歴を記録してよい。実行状況カウンタは、CB命令が条件付きで実行されたことを示すためにある方向に、および、CB命令が条件付きで実行されなかったことを示すために反対方向に更新される。たとえば、非実行状況によりカウンタが減分され、実行状況によりカウンタが増分されるように、2ビットの実行状況カウンタを使用することができる。実行状況カウンタの出力状態は、たとえば、以前のCB命令が実行されていると強く指示されることを示すための「11」の出力、以前のCB命令が実行されていると弱く指示されることを示すための「10」の出力、以前のCB命令が実行されていないと弱く指示されることを示すための「01」の出力、および以前のCB命令が実行されていないと強く指示されることを示す「00」の出力を割り当てられる。実行状況カウンタの「11」の出力、および「00」の出力は、飽和した出力値となる。実行状況カウンタは、検出されたソフトウェアループ中の各CB命令に関連付けられ、または各CB命令に関する状況を与えることになる。しかしながら、特定の実装形態では、実装形態において使用される実行状況カウンタの数を制限し、したがって予測されるCB命令の数を制限する場合がある。検出回路146は一般的に、ソフトウェアループへの最初のエントリを見つけると、実行状況カウンタをリセットする。
【００３１】
あるいは、無効予測フラグは、実行状況カウンタよりも、予測されるべき各CB命令に関連付けられ得る。無効予測フラグは、関連付けられたCB命令が実行済みであると以前に判断されたことがある場合、予測を無効にするようにアクティブにセットされる。実行済みの以前のCB命令があると識別することは、CB命令に関して実行されないという状況を予測する際の信頼度レベルが、許容可能レベルよりも低い場合があることを含意する。
【００３２】
インデックスカウンタは、CHT152とともに、ソフトウェアループ内でどのCB命令がカウントされ、または評価されているかを判断するためにも使用され得る。たとえば、5つ以上のCB命令を有するループ内で、第1のCB命令は、「000」のインデックスを有することができ、第4の適格な条件分岐命令は、「011」のインデックスを有することができる。インデックスは、対応するCB命令に関する、格納された実行状況カウンタ値にアクセスするための、CHT152内でのアドレスを表す。
【００３３】
予測回路122は、実行状況カウンタ出力値などの、特定のCB命令に関する予測情報を受け取り、図1の復号ステージ131の間に、たとえば、CB命令が一般的にソフトウェアループの先頭に戻り分岐すると予測して、ループ出口状況に到達すると予測しない。一実装形態では、予測回路122は、CB命令によって指定された条件が、非分岐状態、コード出口、またはループを通って落ちると評価すると予測し得る。予測回路122は、CB命令を追跡する。CB命令がループの先頭に戻り分岐すると予測される場合、予測情報はそのような状況を示す。CB命令が、戻り分岐しないと判断された場合、追跡回路がキャンセル保留中プリフェッチ要求信号を生成して、不正確な予測が行われたかどうか判断するために条件評価が行われる。不正確な予測が行われた場合、パイプラインもフラッシングされ、CHT152内の適切な実行状況カウンタが更新されて、一実施形態では、関連付けられたCHTエントリが、この特定のCB命令はこのポイントから先では予測されるべきでないことを示すようにマーキングされる。別の実施形態では、予測論理回路122は、CB命令の予測がはずれたと判断すると、予め指定された評価基準を、たとえば、このポイントから先では予測基準をより保守的にするように変えてもよい。
【００３４】
すべてのループが同様の特性をもつわけではないことを、さらに認識されたい。ある特定のループが、不十分な予測結果を与える場合、そのループは、予測論理回路122において予測を無効にするようにマーキングされる。同様に、特定のループが、あるセットの動作シナリオの下では良好な予測で動作する場合があり、異なるセットの動作シナリオの下では不十分な予測で動作する場合がある。そのような場合、動作シナリオの認識により、予測は有効にされ、無効にされ、または動作シナリオに適した異なる評価基準で有効にされる。
【００３５】
図2Aは、ループ終了分岐を検出すると、保留中非デマンドデータプリフェッチ要求をキャンセルするためのプロセス200を示している。ブロック202で、ソフトウェアループを求めてプロセッサコード実行が監視される。決定ブロック204で、ソフトウェアループが検出されたかどうか判断が行われる。ソフトウェアループは、たとえば、上述したように、ソフトウェアループを通じて第1のパス上のソフトウェアループの先頭を表す位置への後方分岐を識別することによって判断することができる。どのソフトウェアループも識別されなかった場合、プロセス200はブロック202に戻る。ソフトウェアループが識別された場合、プロセス200はブロック206に進む。コード内のこのポイントにおいて、ソフトウェアループの第1のサイクルはすでに実行されており、ソフトウェアループの次のサイクルは開始する準備ができている。
【００３６】
ソフトウェアループの次のサイクルにおいて、ブロック206で、CB命令を求めてプロセッサコードが監視される。決定ブロック208で、CB命令が、たとえば、図1の復号ステージ131などのパイプライン復号ステージの間に検出されているかどうか判断が行われる。どのCB命令も検出されていない場合、プロセス200はブロック206に戻る。CB命令が検出された場合、プロセス200は決定ブロック210に進む。決定ブロック210で、たとえば条件述語の評価に基づいて、条件分岐(CB)命令がループを終了するよう解決されるかどうか判断が行われる。検出された可能性がある、いくつかのタイプのCB命令評価がある。たとえば、検出されたCB命令の第1の評価は、CB命令はソフトウェアループの終わりにあるが、ループプロセスを続けると評価すると解決され得る。ソフトウェアループを通じて第1のパス内のソフトウェアループを識別した後方分岐CB命令は、たとえば、プロセッサコード内のそのアドレス位置によってタグ付けされる。また、指定されたソフトウェアループの反復の数が完了していない場合では、CB命令はプロセッサをソフトウェアループの先頭に戻り分岐するよう解決する。検出されたCB命令の第2の評価は、CB命令がソフトウェアループの終わりにあり、ソフトウェアループの終了を評価すると解決され得る。検出されたCB命令の第3の評価は、CB命令がソフトウェアループ内にあるが、取られる、または取られない(not taken)と評価されるときに、プロセッサコードはソフトウェアループ内に留まると解決され得る。また、CB命令の第4の評価は、CB命令がソフトウェアループ内にあるが、取られる、または取られないと評価されるときに、プロセッサコードはソフトウェアループを出ると解決され得る。第4の評価では、ソフトウェアループ内にあるが、後方分岐しているCB命令のアドレス位置を過ぎた前方分岐として解決するCB命令は、ソフトウェアループを出たと考えられる。
【００３７】
決定ブロック210に戻って、検出されたCB命令がソフトウェアループを出ると解決しなかった場合、CB命令の第1および第3の評価におけるように、プロセス200はブロック212に進む。ブロック212で、プロセス200は、通常の分岐プロセスを続けて、次いでブロック206に戻る。検出されたCB命令がソフトウェアループを出ると解決した場合、CB命令の第2および第4の評価におけるように、プロセス200はブロック214に進む。ブロック214で、プロセス200は、デマンドデータプリフェッチ要求を除いて保留中データプリフェッチ要求をキャンセルして、CB命令を処理して、ブロック202に戻って次のソフトウェアループの検索を開始する。
【００３８】
図2Bは、関数戻りを検出すると、保留中非デマンドデータプリフェッチ要求をキャンセルするための第1のプロセス250を示している。ブロック252で、ソフトウェア関数出口を求めてプロセッサコード実行が監視される。ソフトウェア関数は投機的に実行されてよい点に留意されたい。たとえば、投機的な実行は、ソフトウェアループ内の関数呼出しについて発生し得る。ソフトウェア関数の投機的な実行の場合、RET命令の実行などのソフトウェア関数出口も投機的に実行され得る。決定ブロック254で、プロセッサの実行パイプライン内の戻り命令を検出することなどによって、ソフトウェア関数出口が検出されたかどうか判断が行われる。どのソフトウェア関数出口も検出されない場合、プロセス250はブロック252に戻る。
【００３９】
ソフトウェア関数出口が検出された場合、プロセス250は決定ブロック256に進む。決定ブロック256で、この検出された出口状況が割込みルーチンからの戻りかどうか判断が行われる。検出された出口が割込みルーチンからの戻りである場合、プロセス250はブロック252に戻る。検出された出口が割込みルーチンからの戻りではない場合、プロセス250はブロック258に進む。ブロック258で、プロセス250は、デマンドデータプリフェッチ要求を除いて保留中データプリフェッチ要求をキャンセルして、戻り命令を処理して、次いでブロック252に戻ってソフトウェア関数出口を求めてプロセッサコードの監視を続ける。
【００４０】
しばしば、手動によって、またはコンパイラ最適化を通じて、ソフトウェアループは、ループの複数の反復が連続して実行されるように展開される。各展開された反復のこの連続的な実行は、追加のプリフェッチ候補になる。ループの最終反復で、各展開された候補は、プリフェッチされたデータキャッシュ汚染の問題を悪化させる不要なプリフェッチ要求を生成することができる。本発明の実施形態は、ループの出口、または関数からの戻りを検出することによってループを展開して、各展開されたループからすべての不要なプリフェッチ要求をキャンセルすることにも適用される。
【００４１】
図3は、キャッシュ汚染を低減するために、選択された保留中データプリフェッチ要求をキャンセルするように構成されたプロセッサ複合体を有するポータブルデバイス300の特定の実施形態を示している。デバイス300は、ワイヤレス電子デバイスでよく、ソフトウェア命令318を有するシステムメモリ312に結合されたプロセッサ複合体310を含む。システムメモリ312は、図1のシステムメモリ114を含み得る。プロセッサ複合体310は、プロセッサ311、レベル1のデータキャッシュ(L1 Dcache)322、レベル1の命令キャッシュ(L1 Icache)326、キャッシュコントローラ回路328を有する統合されたメモリサブシステム314、および予測論理手段316を含み得る。プロセッサ311は、図1のプロセッサ110を含み得る。統合されたメモリサブシステム314は、レベル2のユニファイドキャッシュ(図示せず)も含み得る。L1 Icache326は図1のL1 Icache124を含むことができ、L1 Dcache322は図1のL1 Dcache128を含むことができる。
【００４２】
統合されたメモリサブシステム314は、プロセッサ複合体310に含まれてもよく、プロセッサ複合体310の外部の1つまたは複数の別のデバイスまたは回路(図示せず)として実装されてもよい。図示された例では、プロセッサ複合体310は、図1および図2に示された、またはそれらに関連付けられる実施形態のうちのいずれかに従って動作する。たとえは、図3に示されるように、L1 Icache326、L1 Dcache322、およびキャッシュコントローラ回路328は、プロセッサ複合体310内でアクセス可能であり、プロセッサ311は、統合されたメモリサブシステム314のメモリ、またはシステムメモリ312に格納されたデータまたはプログラム命令にアクセスするように構成されている。
【００４３】
カメラインターフェース334は、プロセッサ複合体310に結合されており、ビデオカメラ336などのカメラにも結合されている。ディスプレイコントローラ340は、プロセッサ複合体310と、ディスプレイデバイス342とに結合されている。コーダ/デコーダ(CODEC)344も、プロセッサ複合体310に結合され得る。スピーカ346およびマイクロフォン348は、CODEC344に結合され得る。ワイヤレスインターフェース350は、プロセッサ複合体310およびワイヤレスアンテナ352に結合されてよく、アンテナ352およびワイヤレスインターフェース350を介して受信されたワイヤレスデータをプロセッサ311に提供できるようにする。
【００４４】
プロセッサ311は、プロセッサ311などのコンピュータに、図2のプログラムプロセス200などのプログラムを実行させるために実行可能な、システムメモリ312などの非一時的コンピュータ可読記録媒体に格納された、ソフトウェア命令318を実行するように構成され得る。ソフトウェア命令318は、プロセッサ311に、統合されたメモリサブシステム314のメモリ、およびシステムメモリ312にアクセスする命令を処理させるようにさらに実行可能である。
【００４５】
特定の実施形態では、プロセッサ複合体310、ディスプレイコントローラ340、システムメモリ312、CODEC344、ワイヤレスインターフェース350、およびカメラインターフェース334は、システムインパッケージ、またはシステムオンチップデバイス304に含まれている。特定の実施形態では、入力デバイス356および電源358は、システムオンチップデバイス304に結合されている。さらに、特定の実施形態では、図3に示されるように、ディスプレイデバイス342、入力デバイス356、スピーカ346、マイクロフォン348、ワイヤレスアンテナ352、ビデオカメラ336、および電源358は、システムオンチップデバイス304の外部にある。しかしながら、ディスプレイデバイス342、入力デバイス356、スピーカ346、マイクロフォン348、ワイヤレスアンテナ352、ビデオカメラ336、および電源358のそれぞれは、インターフェースまたはコントローラなどの、システムオンチップデバイス304の構成要素に結合され得る。
【００４６】
本明細書に記載の実施形態によるデバイス300は、セットトップボックス、エンターテイメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末(PDA)、固定位置データユニット、モバイル位置データユニット、モバイル電話、セルラー電話、コンピュータ、ポータブルコンピュータ、タブレット、モニタ、コンピュータモニタ、テレビ、チューナー、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、ビデオプレーヤ、デジタルビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、ポータブルデジタルビデオプレーヤ、データまたはコンピュータ命令を格納または取得する他の任意のデバイスなどの様々な電子デバイス、あるいはそれらの任意の組合せに組み込まれ得る。
【００４７】
本明細書に開示された実施形態に関連して説明される、様々な例示的な論理ブロック、モジュール、回路、要素、または構成要素は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他のプログラマブル論理構成要素、個別ゲートまたはトランジスタ論理（トランジスタ論理回路、トランジスタ論理手段）、個別ハードウェア構成要素、あるいは本明細書に記載の機能を実行するように設計されたそれらの任意の組合せで実装または実行することができる。汎用プロセッサは、マイクロプロセッサであってもよいが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であってもよい。プロセッサはまた、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと組み合わせた1つまたは複数のマイクロプロセッサ、あるいは所望のアプリケーションに適した他の任意のそのような構成などの、コンピューティング構成要素の組合せとして実装することができる。
【００４８】
本明細書に開示された実施形態に関連して説明される方法は、直接ハードウェアで、プロセッサによって実行されるソフトウェアモジュールで、またはその2つの組合せで実施することができる。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当分野で知られている他の任意の形式の非一時的記憶媒体に常駐してもよい。非一時的記憶媒体は、プロセッサが非一時的記憶媒体から情報を読み取り、また、そこに情報を書き込むことができるようにプロセッサに結合され得る。代替では、非一時的記憶媒体は、プロセッサに統合され得る。
【００４９】
たとえば、図1のプロセッサ110、または図3のプロセッサ311は、たとえば、命令キャッシュを通して利用可能でよい、プロセッサとローカルに直接関連付けられた、または図1のI/Oデバイス140または142のうちの1つなどのI/Oデバイスを通じてアクセス可能な、コンピュータ可読非一時的記憶媒体に格納されたプログラムの制御下で、条件非分岐命令を含む命令を実行するように構成され得る。I/Oデバイスは、Dcache128などの、プロセッサとローカルに直接関連付けられた、または別のプロセッサのメモリからアクセス可能な、メモリデバイスに常駐するデータにアクセスすることもできる。コンピュータ可読非一時的記憶媒体は、ランダムアクセスメモリ(RAM)、動的ランダムアクセスメモリ(DRAM)、同期動的ランダムアクセスメモリ(SDRAM)、フラッシュメモリ、読出し専用メモリ(ROM)、プログラマブル読出し専用メモリ(PROM)、消去可能プログラマブル読出し専用メモリ(EPROM)、電気的消去可能プログラマブル読出し専用メモリ(EEPROM)、コンパクトディスク(CD)、デジタルビデオディスク(DVD)、他のタイプのリムーバブルディスク、または他の任意の適切な非一時的記憶媒体を含み得る。
【００５０】
本発明を、プロセッサシステムにおいて使用するための例示的な実施形態のコンテキストにおいて開示したが、上記の考察および以下の特許請求の範囲と一致する非常に様々な実装形態が当業者によって利用され得ることが認識されよう。たとえば、固定機能実装形態も、本発明の様々な実施形態を使用することができる。
【符号の説明】
【００５１】
100  プロセッサシステム
110  プロセッサ
112  キャッシュシステム
114  システムメモリ
116  入力および出力(I/O)システム
119  ストライド回路
120  命令パイプライン
121  データプリフェッチ論理手段
122  予測論理回路
123  スタック論理回路
124  レベル1の命令キャッシュ(Icache)
125  リンクスタック
126  メモリコントローラ
128  レベル1データキャッシュ(Dcache)
130  フェッチおよびプリフェッチステージ
131  復号ステージ
132  命令発行ステージ
133  オペランドフェッチステージ
134  実行ステージ
135  完了ステージ
141  キャンセル保留中プリフェッチ要求論理回路
146  検出論理回路
150  フィルタ
152  条件履歴テーブル(CHT)
155  キャンセル保留中プリフェッチ要求信号
162  トラックレジスタ発行(TrI)
163  トラックレジスタオペランドフェッチ(TrO)
164  トラックレジスタ実行(TrE)
165  トラックレジスタ完了(TrC)
200  プロセス
250  プロセス
300  ポータブルデバイス
304  システムオンチップデバイス
310  プロセッサ複合体
311  プロセッサ
312  システムメモリ
314  統合されたメモリサブシステム
316  予測論理手段
318  ソフトウェア命令
322  レベル1のデータキャッシュ(L1 Dcache)
326  レベル1の命令キャッシュ(L1 Icache)
328  キャッシュコントローラ回路
334  カメラインターフェース
336  ビデオカメラ
340  ディスプレイコントローラ
342  ディスプレイデバイス
344  コーダ/デコーダ(CODEC)
346  スピーカ
348  マイクロフォン
350  ワイヤレスインターフェース
352  ワイヤレスアンテナ
356  入力デバイス
358  電源
【図１】
2016507836.tif 000003
【図２Ａ】
2016507836.tif 000004
【図２Ｂ】
2016507836.tif 000005
【図３】
2016507836.tif 000006
【国際調査報告】
2016507836.tif 000007
2016507836.tif 000008
2016507836.tif 000009