(57)【要約】プロセッサ（１００）は、ループ命令のセットに関連するループ繰り返し数（１１５）を予測する。予測されたループ繰り返し数が第１のループ繰り返し閾値を超えることに応じて、プロセッサの命令パイプライン（１１４）の少なくとも１つのコンポーネント（１０５）を低電力モード又は低電力状態に置くことと、ループ命令のセットをループバッファ（１０９）から実行することと、を含むループモードにおいて、ループ命令のセットが実行される。予測されたループ繰り返し数が第２のループ繰り返し閾値以下であることに応じて、命令パイプラインの少なくとも１つのコンポーネントを起動状態に維持することと、ループ命令のセットを命令パイプラインの命令フェッチユニット（１０３）から実行することと、を含む非ループモードにおいて、ループ命令のセットが実行される。【選択図】図１
2022500777.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサにおいて、ループ命令のセットに関連するループ繰り返し数を予測することと、
予測されたループ繰り返し数が第１のループ繰り返し閾値を超えることに応じて、前記ループ命令のセットをループモードで実行することであって、前記プロセッサの命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置くことと、前記ループ命令のセットをループバッファから実行することと、を含む、ことと、を含む、
方法。
【請求項２】
前記予測されたループ繰り返し数が第２のループ繰り返し閾値よりも小さいことに応じて、閾値回数のループ繰り返しが実行されるまで前記ループモードに移行するのを遅らせることをさらに含む、
請求項１の方法。
【請求項３】
前記予測されたループ繰り返し数が前記第２のループ繰り返し閾値よりも大きいことに応じて、前記閾値回数のループ繰り返しが実行される前に前記ループモードに移行することをさらに含む、
請求項２の方法。
【請求項４】
前記命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置くことは、前記プロセッサのループ終了予測器を前記低電力モードに置くことを含む、
請求項１の方法。
【請求項５】
前記命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置いた後に、前記ループ命令に関連するループ繰り返し数をループ終了予測器によって更新することと、
更新されたループ繰り返し数に基づいて、低電力モードにある前記命令パイプラインの少なくとも１つのコンポーネントに電力を戻すタイミングを決定することと、をさらに含む、
請求項１の方法。
【請求項６】
前記ループ繰り返し数を予測する前に、記憶されたループ識別子のセット内の識別子にループ命令の特性をマッチングさせることによって、命令を前記ループ命令のセットとして識別することをさらに含む、
請求項１〜５の何れかの方法。
【請求項７】
前記命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置くことは、記憶された命令のセットの命令を実行する前に行われる、
請求項１の方法。
【請求項８】
前記ループモード中に前記ループ命令のセットの終了を予測することをさらに含む、
請求項１〜７の何れかの方法。
【請求項９】
プロセッサにおいて、ループ繰り返し数を予測することに応じて、
ループ命令のセットをループバッファに記憶することと、
前記プロセッサの命令パイプラインのコンポーネントを低電力モードに置くことと、
前記ループ命令のセットを前記ループバッファから実行することと、
前記プロセッサのループ終了予測器によってループ終了を予測することと、
予測されたループ終了に基づいて、低電力モードに置かれた前記コンポーネントに電力を戻すことと、を含む、
方法。
【請求項１０】
前記命令パイプラインのコンポーネントをパワーダウンする前に、予測されたループ繰り返し数を第１のループ繰り返し閾値と比較することをさらに含む、
請求項９の方法。
【請求項１１】
前記命令パイプラインのコンポーネントは、前記ループ命令のセットをループバッファから実行する前に低電力モードに置かれる、
請求項９の方法。
【請求項１２】
前記命令パイプラインのコンポーネントをパワーダウンすることは、前記プロセッサのループ終了予測器をパワーダウンすることを含む、
請求項９〜１１の何れかの方法。
【請求項１３】
プロセッサであって、
ループ命令のセットを有する命令キャッシュと、
前記ループ命令のセットを記憶するように構成されたループバッファと、
ループ繰り返し数を予測するように構成されたループ終了予測器と、を備え、
前記プロセッサは、
予測されたループ繰り返し数が第１のループ繰り返し閾値を超えることに応じて、前記ループ命令のセットをループモードで実行することであって、前記プロセッサの命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置くことと、前記ループ命令のセットを前記ループバッファから実行することと、を含む、ことと、
予測されたループ繰り返し数が前記第１のループ繰り返し閾値以下であることに応じて、前記ループ命令のセットを非ループモードで実行することであって、前記命令パイプラインの前記少なくとも１つのコンポーネントをアクティブ状態に維持することと、前記命令パイプラインの命令フェッチユニットによって前記命令キャッシュからフェッチされた前記ループ命令のセットを実行することと、を含む、ことと、
を行うように構成されている、
プロセッサ。
【請求項１４】
前記ループ命令のセットを、前記プロセッサの機能ユニットに実行させるためにマイクロオペレーションにデコードするデコーダをさらに備え、
前記命令フェッチユニットは、前記命令キャッシュから前記デコーダに前記ループ命令を提供するように構成されている、
請求項１３のプロセッサ。
【請求項１５】
前記命令フェッチユニットは、前記ループ終了予測器に命令を提供するように構成されている、
請求項１４のプロセッサ。
【請求項１６】
前記低電力モードに置かれた前記命令パイプラインの少なくとも１つのコンポーネントは、前記プロセッサの命令フェッチコンポーネントである、
請求項１３のプロセッサ。
【請求項１７】
前記低電力モードに置かれた前記命令パイプラインの少なくとも１つのコンポーネントは、前記ループ終了予測器である、
請求項１３のプロセッサ。
【請求項１８】
前記ループ終了予測器は、
前記命令パイプラインの前記少なくとも１つのコンポーネントを前記低電力モードに置いた後に、前記ループ命令に関連するループ繰り返し数を更新するように構成されており、
前記低電力モードに置かれた前記命令パイプラインの少なくとも１つのコンポーネントに電力を戻すタイミングは、更新されたループ繰り返し数に基づいている、
請求項１３〜１８の何れかのプロセッサ。
【請求項１９】
記憶されたループ識別子のバッファをさらに備え、
前記ループ終了予測器は、前記ループ命令の特性を、前記記憶されたループ識別子のバッファ内の識別子にマッチングさせるように構成されている、
請求項１３〜１７の何れかのプロセッサ。
【請求項２０】
前記命令パイプラインの少なくとも１つのコンポーネントを前記低電力モードに置くことは、前記ループ命令に関連する命令を実行する前であって、前記ループ命令に関連する前記ループ繰り返し数を予測した後に行われる、
請求項１３〜１９の何れかのプロセッサ。
【発明の詳細な説明】
【背景技術】
【０００１】
処理効率を高めるために、最新のプロセッサは、ループモードを用いてプログラムループを実行することがある。ループモードでは、プロセッサは、命令フェッチユニットを介してループの命令を繰り返し取り出すのではなく、ループ命令バッファからループの命令を取り出して実行する。ループモードでは、プロセッサは、リソースを節約することができる。これは、例えば、ループモードの間、命令フェッチユニット又はプロセッサの他の部分を低電力状態に置くことによって可能になる。しかし、従来のループモード動作は、いくつかの条件の下では効率が悪い。例えば、ループモードは、典型的に、プロセッサがループ終了命令に対する分岐予測ミスに遭遇した結果として終了する。分岐予測ミスによって、プロセッサの命令パイプラインがフラッシュされるため、プロセッサリソースがさらに消費され、電力オーバーヘッドが生じる。命令ループが比較的短い場合、パイプラインフラッシュによって消費されるリソースは、ループモードで動作することによって節約されるリソースを超える可能性がある。
【０００２】
添付図面を参照することによって、本開示をより良好に理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面で同じ符号を用いた場合、同様又は同一の要素を示す。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態による、ループモードにおいて低電力状態でループ終了予測を実施するプロセッサ内の命令パイプラインのブロック図である。
【図２】いくつかの実施形態による、ループモード中にループ終了予測器が起動状態にある図１の命令パイプラインのブロック図である。
【図３】いくつかの実施形態による、ループ終了予測器及びループモードのさらなる態様を示す図１の命令パイプラインのブロック図である。
【図４】いくつかの実施形態による、ループ終了予測を用いて、ループモードに対する比較的大きいループ繰り返しを識別する方法を示すフロー図である。
【図５】いくつかの実施形態による、ループ終了予測を用いて、ループモードに対する小さいループ繰り返しを識別する方法を示すフロー図である。
【発明を実施するための形態】
【０００４】
図１〜図５に、プロセッサにおいてループ終了予測（ＬＥＰ）を使用して、ループモードの使用に関連するプロセッサリソースを節約する技術を示す。プロセッサは、各実行ループの終了を予測するＬＥＰユニットを含む。ＬＥＰユニットによる予測に基づいて、プロセッサは、１つ以上のループ管理技術を実施する。ループ管理技術は、例えば、比較的短いループの場合にループモードに移行するのを拒否することと、分岐予測ミスが示されるか分岐予測ミスに遭遇する前にループモードを終了することと、比較的大きいループの場合にループモードに移行するのを促進することと、を含む。これらの各技術は、ループモードを使用するためにプロセッサが消費するリソースの量を低減し、これにより、処理効率を向上させる。
【０００５】
例えば、いくつかの実施形態では、プロセッサは、ＬＥＰユニットを用いて、プログラムフローにおける各実行ループの繰り返し数を予測する。ループの繰り返し数がループ繰り返しの所定の閾値未満であるとＬＥＰユニットが示すことに応じて、プロセッサは、そのループのループモードへの移行を抑制する。これにより、プロセッサは、ループモードに移行するためのリソースコストが、ループモードでループを実行することによるリソース節約を超える場合に、ループモードに移行することを回避する。
【０００６】
いくつかの実施形態では、プロセッサは、ループモードでループを実行する間にＬＥＰユニットを使用して、ループがいつ終了すると予想されるかを予測する。ＬＥＰユニットがループ終了の予測を示したことに応じて、プロセッサは、ループモードの終了（例えば、ループを終了したときに実行される１つ以上の次の命令をフェッチして命令パイプラインを満たすこと）を開始する。したがって、プロセッサは、ループ終了を示す分岐予測ミスを待機したり、ループ終了をトリガしたりしないので、このような手順は、パイプラインフラッシュによってプロセッサリソースが消費され、さらなる命令実行が遅れることを回避する。ループモードの間もＬＥＰを用いてループ終了分岐が予測される。ある実施形態では、プロセッサ内の専用ＬＥＰユニットによってＬＥＰが実行される。ＬＥＰは、ループ終了分岐に対して特別に調整されるので、ＬＥＰ精度は、ループの実行中に１つ以上の分岐予測器によって適用される一般的な分岐予測の精度よりも高い。
【０００７】
また、プロセッサは、ＬＥＰユニットによって提供される予測繰り返し回数を用いて、比較的大きいループを識別し、大きいループを実行する前にループモードに移行することを促進する。特に、プロセッサは、ループモードに移行する前に第１の閾値数のループ繰り返しが実行されているか又は実行される可能性があることに応じて、名目上、ループモードに移行して、ループが実際に発生し、ループ命令のセットを介してループが正常に完了することを確認する。しかし、ある実施形態では、予測繰り返し回数が所定の第２の閾値を超えたことに応じて、プロセッサは、第１の閾値数のループ繰り返しが実行されるのを待たずにループモードを開始する。その結果、ループモードを使用する他の実施形態よりも早くループモードに移行することによって、プロセッサリソースが節約される。
【０００８】
図１は、いくつかの実施形態による、ＬＥＰを実施するプロセッサ１００内の命令パイプラインアーキテクチャのブロック図である。説明を簡単にするために、プロセッサ１００のいくつかのコンポーネントのみが示されている。さらに、プロセッサ１００の特定のコンポーネントは、命令を取り出して実行するために、従来から理解されているように、プロセッサ１００の前面又は背面の一部と考えられてもよいが、本明細書ではそのように指定されていない。これは、本明細書で説明する技術は、様々なコンポーネント、アーキテクチャ、命令セット、動作モード等を有する複数のタイプのプロセッサに適用可能であるためである。プロセッサ１００は、一般的に、命令セット（例えば、コンピュータプログラム）を実行して、電子デバイスの代わりにタスクを実行する。したがって、いくつかの実施形態では、プロセッサ１００は、電子デバイス（例えば、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、スマートフォン、ゲームコンソール、家庭用電気器具等）に組み込まれている。
【０００９】
命令の実行をサポートするために、プロセッサ１００は、命令パイプライン１１４を含む。命令パイプライン１１４は、命令キャッシュ１０１と、データキャッシュ１０２と、命令フェッチユニット１０３（１つ以上の予測器１０４を有する）と、ループ終了予測器１０５と、デコーダ１０６と、リオーダー（reorder）バッファ１０７と、レジスタ１０８と、ループ命令バッファ１０９と、リザベーションステーション１１０と、ロード／記憶ユニット１１１と、１つ以上の実行ユニット１１２と、電力コントローラ１１７と、を含む。命令パイプライン１１４は、アクティブ（非ループ）モード及びループモードの少なくとも２つのモードで動作する。アクティブモードでは、プロセッサ１００のコンポーネントに対して、命令をアクティブに実行するための電力が供給される。ループモードでは、プロセッサ１００は、１つ以上のコンポーネントを低電力状態にして、アクティブモード（例えば、特定のコンポーネントがアイドル状態である間、ループ命令が繰り返して実行される間等）において消費されるエネルギーを含む１つ以上のリソースを節約する。
【００１０】
アクティブモードでは、命令フェッチユニットは、プログラムカウンタ１１３に記憶された値に基づいて、命令キャッシュ１０１から命令を取り出す。いくつかの実施形態では、命令フェッチユニット１０３は、予測器１０４によって生成された予測に基づいて命令をフェッチする。予測器１０４は、分岐命令を識別し、分岐ターゲットアドレス、ループ命令を生成し、他の分岐、ループ及び予測機能を実行する、分岐予測器及びループ予測器を含む。
【００１１】
命令フェッチユニット１０３は、フェッチした命令をデコーダ１０６に送る。デコーダ１０６は、各命令を１つ以上のマイクロオペレーション（マイクロｏｐ）に変換する。デコーダ１０６のディスパッチステージ（図示省略）は、各マイクロｏｐをロード／記憶ユニット１１１及び実行ユニット１１２のうち対応する何れかに送って、実行させる。リオーダーバッファ１０７は、ロード／記憶ユニット１１１及び実行ユニット１１２におけるマイクロｏｐの実行のスケジューリングを管理する。また、リザベーションステーション１１０は、ロード／記憶ユニット１１１及び実行ユニット１１２によるレジスタ１０８へのアクセスを管理する。対応するマイクロオペレーションを実行した後に、各命令は、命令パイプライン１１４のリタイアステージ（図示省略）においてリタイアされる。
【００１２】
ループモードでは、命令パイプライン１１４は、ループ命令バッファ１０９を用いてループの繰り返しを実行する。本明細書で用いる場合、ループは、ループを終了する条件分岐が取られるまで繰り返し実行される命令のセットである。例えば、いくつかのループによっては、条件分岐命令は、条件分岐命令を指すプログラムカウンタ１１３に加えられるオフセットを含む相対ジャンプ命令である。いくつかの実施形態では、ループとして識別されるために、命令パイプライン１１４は、ループの最近の実行インスタンスにおいて条件分岐命令が閾数回数（例えば、２、３、４、５回）取られたことを識別する。ループの繰り返しは、ループの各命令の単一の実行を指す。
【００１３】
ループモードに戻ると、命令パイプライン１１４は、命令ループが（例えば、命令ループを示す予測器１０４のロジックに基づいて）検出されたことに応じて、ループ命令バッファ１０９内のループ命令に対する１つ以上のマイクロｏｐを記憶する。ループモードでは、ループ命令バッファ１０９は、ループ終了に達するまで、ロード／記憶ユニット１１１及び実行ユニット１１２にマイクロオペレーションを繰り返し送って実行させる。したがって、ループモードでは、命令フェッチユニット１０３は、命令キャッシュ１０１から命令を取り出すことを一時停止する。ループモードでは、命令パイプライン１１４の１つ以上のコンポーネントを含むプロセッサ１００の特定のコンポーネントは、電力コントローラ１１７によって低電力モード又は低電力状態に置かれて電力を節約する。これを破線１１８によって示す。例えば、電力コントローラ１１７は、命令フェッチユニット１０３、１つ以上の予測器１０４、ループ終了予測器１０５及びデコーダ１０６をパワーダウンさせ、一方で、他のコンポーネント（例えば、ループ命令バッファ１０９、ロード／記憶ユニット１１１及び実行ユニット１１２）をアクティブ状態に維持する。アクティブ状態にある間、特定のコンポーネントはパワーオンのままであり、ループ終了条件が発生して、（例えば、ループモードに移行する前、移行している間、又は、移行した後に）低電力モードに置かれたコンポーネントに電力が戻されるまで、これらの機能を実行する。
【００１４】
ループモードの効率的な実行をサポートするために、命令パイプライン１１４は、実行する各ループの繰り返し数を予測するループ終了予測器（ＬＥＰ）１０５を含む。例えば、ＬＥＰ１０５は、命令パイプライン１１４において実行されるループ内のパターンを示すループ履歴１１６を記憶する。いくつかの実施形態では、ＬＥＰ１０５は、命令パイプライン１１４の１つ以上の専用のトレーニング期間中にループ履歴１１６を生成及び記憶する。各トレーニング期間中に、命令パイプライン１１４は、指定された命令セットを実行し、実行する各ループの繰り返し数をカウントし、繰り返し数を、ループ数１１５を予測するように指定された記憶構造に記憶する。いくつかの実施形態では、プロセッサ１００の通常動作中に、命令パイプライン１１４は、実行する各ループの繰り返しをカウントし続け、繰り返し数に基づいて、予測ループ数１１５を調整する。
【００１５】
いくつかの実施形態では、ＬＥＰ１０５は、多くの方法でループモードを効率的に使用することをサポートする。例えば、繰り返しが比較的少ないループの場合、ループモードを開始及び終了するためのリソースコストは、ループモードを使用するためのリソース節約を超える。したがって、いくつかの実施形態では、命令パイプライン１１４は、ＬＥＰ１０５の予測を用いて、繰り返しが比較的少ないと予測されるループを識別し、これらのループについてループモードに移行することを回避する。したがって、ループに対する予測ループ数１１５が閾値を下回ることに応じて、命令パイプライン１１４は、ループモードに移行することを抑制する。
【００１６】
さらに、繰り返し回数が比較的多いループの場合、より迅速にループモードに移行して、ループモードにおいてより多くのループ繰り返しが実行されることによって、リソース節約を高める。したがって、いくつかの実施形態では、命令パイプライン１１４は、ＬＥＰの予測を用いて、繰り返し回数が比較的多いと予測されるループを識別し、これらのループについてループモードに移行することを促進する。したがって、或るループに対する予測ループ数１１５が閾値（例えば、第１の閾値）を上回ることに応じて、命令パイプライン１１４は、当該ループの最初の繰り返しに対してループモードに移行する。
【００１７】
他の実施形態では、命令パイプライン１１４は、ループモード自体の間にＬＥＰ１０５を用いる。このように用いることは、図２を参照してより良好に理解することができる。図２は、プロセッサ１００の代替的な構成のブロック図であり、いくつかの実施形態によれば、命令パイプライン１１４は、ループモード中にループ終了予測器１０５をアクティブ状態に維持する（破線２１８に対するＬＥＰ１０５の配置によって示す）。ループモード中にアクティブ状態にある場合、ループ終了予測器１０５は、ループ繰り返し数を予測し続ける。例えば、ループ終了予測器１０５は、実行されているループによって行われる可能性があるループの予測繰り返し数を更新し、ループ終了予測器１０５は、性能及び電力オーバーヘッドの両方であるパイプラインフラッシュが望ましくない結果として生じる分岐予測ミスの前にループモードが終了するように、更新された予測に基づいて、低電力モードに置かれた命令パイプライン１１４のコンポーネントに電力を戻すタイミングを更新する。
【００１８】
例えば、従来のプロセッサでは、ループの終了（したがって、ループモードの終了）は、ループを終了させる分岐命令に対する分岐予測ミスによって示される。しかし、他の予測ミスの場合と同様に、ループの終了を示す分岐予測ミスは、命令パイプラインをフラッシュして、パイプラインを以前の状態に戻す必要がある。そのため、予測ミスに遭遇するまでループを実行することは、パイプラインバブル（pipeline bubble）を介して電力損失を招き、それによって、１つ以上の下流コンポーネント（例えば、デコーダ１０６、リオーダーバッファ１０７、レジスタ１０８、リザベーションステーション１１０、ロード／記憶ユニット１１１及び実行ユニット１１２）に命令がいかなくなる（starved）。対照的に、ループ終了予測器１０５は、アクティブ状態に維持され、ループの終了を予測する。予測された終了に応じて、命令パイプラインは、命令フェッチユニット１０３及び他のモジュールをアクティブ状態に戻すことによって、ループモードを終了する。したがって、命令パイプライン１１４は、ループ終了に対する分岐予測ミスを回避し、その結果、予測ミス性能ペナルティを回避する。
【００１９】
図３は、いくつかの実施形態による、ＬＥＰ１０５のさらなる態様を示す図１のプロセッサ１００のブロック図である。予測ループ数１１５及びループ履歴１１６に加えて、ループ終了予測器１０５は、ループ命令バッファ３０２と、ループ予測ロジック３０３と、１つ以上のループカウンタ３０４と、ループ識別子３０５と、第１のループ閾値３０６と、第２のループ閾値３０７と、ループ予測３０８と、１つ以上の比較結果３０９と、１つ以上の信頼値３１０と、をさらに含む。ループ予測ロジック３０３は、繰り返し実行されていると識別された命令のセットに基づいて、ループ終了予測を提供する。ループ予測３０８は、特定のループ又は１つ以上のループ命令のセットについての予測ループ数を識別して記憶することを含む。ループカウンタ３０４及びループ識別子３０５は、ループ終了予測器１０５及びループ命令バッファ３０２の命令によって使用される。例えば、ループカウンタ３０４をトレーニングにおいて使用して、命令のセットがいつループとして実行されるのかを識別し、ループ実行中に使用して、ループ命令の繰り返しがどれくらい完了したかを追跡する。予測したループ終了カウントにおいてループ終了を準備する際に、個々のループカウンタ３０４を、予測したループ終了と比較する。プロセッサ命令を実行する際に１つ以上のループが生じる場合があり、プロセッサ１００は、（例えば、第１のループの内部で第２のループが実行される場合等に）複数の実行ループの履歴をループ履歴１１６内に維持する。ループカウンタ３０４は、ループ信頼値と、現在のループ繰り返し値と、過去のループ繰り返し値と、予測されたループ繰り返し値と、を含む。
【００２０】
トレーニングフェーズの間、ループ終了予測器１０５は、プロセッサ命令のセット内のループ及びループ終了分岐を検出する。トレーニングは、ループ終了予測器１０５が、（例えば、１つのループカウンタ３０４において）ループ命令の特定のセットに対して繰り返し実行されるループ繰り返しの数を追跡することを含む。特定のループが、ループの以前の実行又は実行インスタンスの場合と同じ回数を繰り返す毎に信頼値３１０が増加し、信頼値３１０は、ループ終了予測器１０５がループ終了の推定を提供する場合に用いられる。
【００２１】
識別又は予測の際に、ループ終了予測器１０５は、ループ識別子３０５の現在のセット内のマッチングループ識別子を検索する。ループ識別子３０５内のＬＥＰエントリへのヒットは、予測された分岐命令が終了分岐命令であることを意味する。ループ識別子３０５内のヒットを見つけることは、ループ命令の特性を、ループ識別子内の少なくとも１つの識別子にマッチングさせることを含む。ループ終了予測器１０５によって追跡されている特定のループの現在の繰り返しが、ループ終了予測器１０５によって予測された繰り返しの総数と等しい場合、特定のループは、この繰り返しの間に終了することが予測される。すなわち、ループ終了分岐の特定のループ繰り返しが取られないと予測される。そうでない場合、ループ終了分岐が取られると予測される。
【００２２】
特定の実施形態によれば、ループ終了予測器１０５によって実行されるＬＥＰは、特定の分岐に関連する信頼値３１０が十分に高い場合にのみ行われる。信頼値３１０が低すぎる（すなわち、信頼閾値を超えない）場合、又は、ループ識別子３０５内のＬＥＰエントリへのヒットがない場合、分岐は、命令フェッチユニット１０３の１つの予測器１０４等の他の分岐予測器によって予測されるか処理を受ける。ループ予測ロジック３０３は、ループ終了分岐に対して特別に調整されるので、その予測精度は、プロセッサ１００が終了分岐の命令を実行する場合に、通常、他の分岐予測器又は一般的なタイプの予測器の精度よりも高い。ループ予測ロジック３０３は、各ループに対してループ予測３０８を提供する。ループ予測３０８は、実行命令のセットが実際にループ命令のセットであるか否かを示す。ループ終了予測器１０５は、予測ループ数、すなわち、ループ命令のセットが終了前に完了する可能性がある繰り返し数を提供する。
【００２３】
特定の実施形態によれば、ループモードに移行することは、条件分岐（図示省略）の方向履歴の所定のビット数を飽和させることによってトリガされ、ループ（例えば、１つ以上の命令のセット）がプロセッサ１００によって実際に実行されていることを確実にする。例えば、ループは、履歴レジスタ内の方向に沿った繰り返しパターンを見つけることによって識別される。方向履歴レジスタが１００ビットである場合、１００ビットのうち５ビットのグループが繰り返されている場合には、５つの条件分岐を伴うループが存在することを意味している。動作時には、方向履歴レジスタの特定のビット数を飽和させた後、又は、方向閾値（値）を超えた後にのみ、ループモードに移行する。飽和させる飽和レベルが８０ビットであり、ループが２つの条件分岐のみを有する場合には、システムは、ループを４０回繰り返す必要がある。これは、その時点でのみ、方向履歴変数（例えば、ｄｉｒＨｉｓｔ）が飽和（８０カウントビットに到達）し、その結果、ループモードに移行することがトリガされるからである。一方、飽和させるビット数が小さすぎる（例えば、１０である）場合、システムは、各ループ繰り返しに対して飽和を２ビットだけ増加させることによって１０の値に到達するために、５回の繰り返しの後にループモードに移行していたであろう。この状況における特定のループが６回の繰り返しに対してのみ実行されると想定される（又は、実行されると予測される）場合、プロセッサは、ループモードに移行して直ぐにループモードから抜けるため、ループモードによって得られる効果が無駄になる。一般的に、方向履歴のビット数が方向閾値よりも大きい場合、プロセッサ１００は、ループを実行していると識別される。方向閾値が大きいほど、プロセッサ１００がトリガされてループモードに移行するまでの時間が長くなり、命令が実際にループ命令である場合にループモードに移行することによって節電する機会を識別する可能性が低くなる。方向閾値が低すぎる場合、プロセッサ１００は、実際にループが実行されていないか過度に短いループが実行されている場合に、ループモードに移行することができる。したがって、実行されているループの長さを考慮して、いつループモードに移行するのかについてバランスが取れている。少なくともいくつかの実施形態では、分岐予測は、分岐方向、方向閾値及びターゲットアドレスを含む。ループ方向、ループ閾値及びループ終了ターゲットアドレスを含むＬＥＰについても同様である。
【００２４】
また、プロセッサ１００は、マイクロｏｐの実行前及び実行中にループ予測３０８を用いて、いつループモードに移行し、いつループモードを終了するのかを決定する。特に、マイクロｏｐがループを実行している可能性があるとプロセッサ１００が決定した場合、ループ予測３０８は、第１のループ閾値３０６及び第２のループ閾値３０７と比較される。比較によって、各々の比較結果３０９が比較毎に１つ得られる。プロセッサ１００は、比較結果３０９の少なくとも１つに基づいて、ループモードに移行する。
【００２５】
アプリケーション（例えば、プロセッサ１００に対するマイクロｏｐのソースとしてのソフトウェアアプリケーション）が繰り返しループを進む場合、そのループに関連する命令（又は、複数の命令）のマイクロｏｐは、ループモード前又はループモード中にループ命令バッファ３０２内にキャッシュされる。ループモード中に、マイクロｏｐは、第１のプロセッサコア３０１等の１つ以上のコアによってループ命令バッファ３０２から実行され、プロセッサ１００の特定の他のコンポーネントが低電力モードに置かれ、その結果、全電力で動作するコンポーネントの動作によって消費される電力が節約される。ループ命令のセットが大きすぎてループ命令バッファ３０２に収まらない場合、ループ終了予測器１０５は、起動したままであり、ループ命令バッファ３０２は、パワーダウンされて低電力又は低電力状態になり、プロセッサ１００によるエネルギー消費は、ループモードの結果のままである。この状況では、ループ終了予測器１０５は、起動したままであり、ループの終了と、命令キャッシュ１０１から命令が引き出されて第１のプロセッサコア３０１に送られる場合のループ命令の方向と、を予測し続ける。少なくともいくつかの実施形態によれば、ループモードは、１つ以上のコンポーネントがパワーダウンされるか又は低電力モードに置かれ、ループ命令が例えばループ命令バッファ３０２等から実行されている間に発生する。
【００２６】
ループモードにおいて予測器１０４がパワーダウンされるか低電力モードに置かれた場合に、ループモードを終了する１つの方法は、命令実行コンポーネントにリダイレクトメッセージ、すなわち、プロセッサ１００の１つ以上のコンポーネントに対して終了分岐が予測ミスされたことを示す終了信号を送信することである。終了信号は、命令パイプライン１１４に対して、ループ後に発生する命令をフェッチして実行させる。分岐予測ミスは、無駄な電力及び無駄な実行サイクルという点で高価であるため、不適切に選択又は指定された方向閾値が電力性能オーバーヘッドを伴う。したがって、ループモードに移行することによって節電を得ることと、終了分岐命令の予測ミスに対する電力性能オーバーヘッドと、の間にトレードオフが存在する。ループが短い場合（例えば、繰り返し数が５回未満のループ、繰り返し数が１０回未満のループ）、場合によっては、予測ミスした終了分岐の電力性能オーバーヘッドは、プロセッサ１００の特定の構成についてのループモードにおける節電よりも上回る。ループモードを終了する別の方法は、ループ終了予測器１０５が起動したままであることと、ループ終了予測が成功した場合にループ終了予測器１０５がループ終了信号を提供することと、を含む。このように、命令パイプライン１１４に、ループ後に発生した実行命令を適時に送らせることによって、予測ミスを回避する。
【００２７】
図４は、いくつかの実施形態による、比較的大きいループ繰り返し予測に対してループ終了予測を実施する方法４００を示すフロー図である。方法４００は、プロセッサのコンポーネント（例えば、プロセッサ１００のコンポーネント）によって行われる。ブロック４０１において、方法４００は、分岐命令がループ命令（ループモードで実行される可能性のあるループ）であるか否かを識別することを含む。そうである場合には、ブロック４０２において、プロセッサは、ループ識別子と、ループに対するループ繰り返し数と、を決定する。この識別は、記憶されたループ識別子のセット内のループ識別子（例えば、ループ識別子３０５）を検索することを含む。ブロック４０３において、プロセッサは、決定したループ繰り返し数が、第１のループ閾値（例えば、第１のループ閾値３０６）を超えているか否かを判別する。例えば、第１のループ閾値は、プロセッサによって実行される予測ループ繰り返し数が比較的大きい大ループとしてループを識別するために用いられる比較的大きい数（例えば、５００、１，０００、１０，０００）である。決定したループ繰り返し数が第１のループ閾値を超えている場合、ループモードに直ぐに移行される。さらに、いくつかの実施形態によれば、第１のループ閾値を超えている場合、特定の方向履歴閾値又は方向履歴変数を超えているか否かのチェックが行われず、ループモードに直ぐに移行される。
【００２８】
決定したループ繰り返し数が第１のループ閾値を超えていない場合、ブロック４０４において、プロセッサは、決定したループ繰り返し数が第２のループ閾値（例えば、第２のループ閾値３０７）を超えているか否かを判別する。例えば、第２のループ閾値は、プロセッサによって実行される予測ループ繰り返し数が比較的小さい小ループとしてループを識別するために用いられる比較的小さい数（例えば、１５、１０、５、３）である。予測されるループ繰り返し数が第２の閾値を超えていない場合、ブロック４０５において、プロセッサは、命令パイプラインの１つ以上のコンポーネントをアクティブモードに維持する（例えば、コンポーネントを起動状態に維持する）ことによって、次のループの識別を待ち、実行はブロック４０１に戻る。この状況では、プロセッサ及びループ終了予測器は、ループモードの節電から利益を得るには小さすぎるループに遭遇しており、プロセッサは、第１のループ閾値及び第２のループ閾値に対する決定に基づいて、ループモードに移行することを回避する。代替的に、プロセッサは、第２のループ閾値に対する決定に基づいて、ループモードに移行することを回避する。
【００２９】
決定したループ繰り返し数が第１のループ閾値を超えておらず、第２の閾値を超えている場合、ブロック４０６において、プロセッサは、ループ内で命令が実行されていることを確認する前に、特定の数の実際のループ繰り返しを待つ。ブロック４０３において、決定したループ繰り返し数が第１の閾値を超えている場合、又は、ブロック４０６において、特定の数の成功したループ実行を待った後に、方法４００はブロック４０７に進み、ループ命令のセットをループバッファ（例えば、ループ命令バッファ１０９）に記憶する。その後、ループバッファからループ命令を繰り返して実行する。ブロック４０８において、プロセッサの１つ以上のコンポーネントが低電力モードに置かれる。ブロック４０９において、ループ命令は、分岐予測ミスが生じる、又は、ループ命令が予測ループ繰り返しの数だけ実行されるまで実行され、ループ終了予測器に対してループ終了を正確に予測させてループ終了信号を提供させることによって終了する。この状況では、プロセッサは、パイプラインバブルに遭遇しない。ループを終了すると、ブロック４０８においてループモード中に低電力モードに置かれたプロセッサコンポーネントに対して、ブロック４１０において電力を戻す。電力が戻ると、ブロック４０５において、プロセッサは次のループを待つ。
【００３０】
図５は、いくつかの実施形態による、比較的小さいループ繰り返し予測に対してループ終了予測を実施する方法５００を示すフロー図である。方法５００は、プロセッサ（例えば、プロセッサ１００）のコンポーネントによって行われる。ブロック５０１において、方法５００は、ループ命令のセットに関連するループ繰り返し数を予測することを含む。予測されたループ繰り返し数が第１のループ繰り返し閾値を超えることに応じて、ブロック５０２において、ループ命令のセットがループモードで実行され、予測されたループ繰り返し数が第１のループ繰り返し閾値を超えない（例えば、予測されたループ繰り返し数がループ繰り返し閾値以下である）ことに応じて、命令のセットがアクティブモードで動作される。特に、ブロック５０２において肯定的な結果の場合、ブロック５０３において、ループモードは、プロセッサの命令パイプラインの少なくとも１つのコンポーネントを低電力モード又は低電力状態に置くことを含む。さらに、いくつかの実施形態によれば、ブロック５０３において、特定の方向履歴閾値又は方向履歴変数を超えているか否かをチェックしない。予測されたループ繰り返し数が第１のループ繰り返し閾値を超えていると判別された場合、ループモードに直ぐに移行する。ブロック５０４において、ループモードは、ループバッファからループ命令のセットを実行することも含む。
【００３１】
ブロック５０５〜５０７において、ループモードは、方法５００のいくつかの実施形態による特定のさらなるステップを含む。例えば、ブロック５０５において、ループモードは、ループ命令のセットに関連するループ繰り返しの予測回数を更新する。ループ繰り返し数の予測及び更新は、ループ終了予測器（例えば、ループ終了予測器１０５）によって実行される。ブロック５０６において、ループモードは、低電力モードに置かれたプロセッサの命令パイプラインのコンポーネントの電力を戻す時間を決定する。低電力コンポーネントの電力を戻す時間は、ループの実行命令が終了する前に設けられてもよい。これは、パイプラインバブルを回避するためにループを終了した後に順次来る命令で命令パイプラインを満たすために、リードタイム（例えば、特定の数のクロック周期）が必要となることが多いからである。ブロック５０７において、ループモードは、ループ命令のセットの終了を予測する。プロセッサは、低電力モードに置かれたコンポーネントに電力を戻す時間を決定し、予測された終了に基づいて次の命令アドレスを決定する。
【００３２】
ブロック５０８において、方法５００のアクティブモードは、命令パイプラインの少なくとも１つのコンポーネントを起動状態に維持することを含む。例えば、ループ終了予測器（例えば、ループ終了予測器）１０５を、電力によって維持する。ブロック５０９において、アクティブモードは、命令パイプラインの命令フェッチステージユニットからループ命令のセットを実行することも含む。方法５００の場合、各ループに対して、プロセッサは、ループモード又はアクティブモードで動作している。
【００３３】
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実施されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、他の方法で明確に具現化された実行可能命令の１つ以上のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行される場合、上述した技術の１つ以上の態様を実行するように１つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、磁気又は光ディスク記憶デバイス、ソリッドステート記憶デバイス（例えば、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）若しくは他の不揮発性メモリデバイス（複数可））等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈されるか他の方法で実行可能な他の命令フォーマットであってもよい。
【００３４】
概要説明で上述した全てのアクティビティ、コンポーネント又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要でなくてもよく、記載されたものに加えて１つ以上のさらなるアクティビティが実施されてもよいし要素が含まれてもよいことに留意されたい。さらに、アクティビティが列挙される順序は、必ずしも、それらを行う順序ではない。また、概念を、特定の実施形態を参照して説明してきた。しかし、当業者であれば、以下の特許請求の範囲に記載される本発明の範囲から逸脱することなく、様々な変更及び修正を行うことができることを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、このような変更は全て本発明の範囲内に含まれることが意図されている。
【００３５】
効果、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、効果、利点、問題に対する解決手段、及び、何等かの効果、利点、解決しゅ段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての特許請求の範囲の重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
【図１】
2022500777.tif 000003
【図２】
2022500777.tif 000004
【図３】
2022500777.tif 000005
【図４】
2022500777.tif 000006
【図５】
2022500777.tif 000007
【手続補正書】
【提出日】令和3年5月19日(2021.5.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサにおいて、ループ命令のセットに関連するループ繰り返し数を予測することと、
予測されたループ繰り返し数が第１のループ繰り返し閾値を超えることに応じて、前記ループ命令のセットをループモードで実行することであって、前記プロセッサの命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置くことと、前記ループ命令のセットをループバッファから実行することと、を含む、ことと、を含む、
方法。
【請求項２】
前記予測されたループ繰り返し数が第２のループ繰り返し閾値よりも小さいことに応じて、閾値回数のループ繰り返しが実行されるまで前記ループモードに移行するのを遅らせることをさらに含む、
請求項１の方法。
【請求項３】
前記予測されたループ繰り返し数が前記第２のループ繰り返し閾値よりも大きいことに応じて、前記閾値回数のループ繰り返しが実行される前に前記ループモードに移行することをさらに含む、
請求項２の方法。
【請求項４】
前記命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置くことは、前記プロセッサのループ終了予測器を前記低電力モードに置くことを含む、
請求項１の方法。
【請求項５】
前記命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置いた後に、前記ループ命令に関連するループ繰り返し数をループ終了予測器によって更新することと、
更新されたループ繰り返し数に基づいて、低電力モードにある前記命令パイプラインの少なくとも１つのコンポーネントに電力を戻すタイミングを決定することと、をさらに含む、
請求項１の方法。
【請求項６】
前記ループ繰り返し数を予測する前に、記憶されたループ識別子のセット内の識別子にループ命令の特性をマッチングさせることによって、命令を前記ループ命令のセットとして識別することをさらに含む、
請求項１〜５の何れかの方法。
【請求項７】
前記命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置くことは、記憶された命令のセットの命令を実行する前に行われる、
請求項１の方法。
【請求項８】
前記ループモード中に前記ループ命令のセットの終了を予測することをさらに含む、
請求項１の方法。
【請求項９】
プロセッサにおいて、ループ繰り返し数を予測することに応じて、
ループ命令のセットをループバッファに記憶することと、
前記プロセッサの命令パイプラインのコンポーネントを低電力モードに置くことと、
前記ループ命令のセットを前記ループバッファから実行することと、
前記プロセッサのループ終了予測器によってループ終了を予測することと、
予測されたループ終了に基づいて、低電力モードに置かれた前記コンポーネントに電力を戻すことと、を含む、
方法。
【請求項１０】
前記命令パイプラインのコンポーネントをパワーダウンする前に、予測されたループ繰り返し数を第１のループ繰り返し閾値と比較することをさらに含む、
請求項９の方法。
【請求項１１】
前記命令パイプラインのコンポーネントは、前記ループ命令のセットをループバッファから実行する前に低電力モードに置かれる、
請求項９の方法。
【請求項１２】
前記命令パイプラインのコンポーネントをパワーダウンすることは、前記プロセッサのループ終了予測器をパワーダウンすることを含む、
請求項９〜１１の何れかの方法。
【請求項１３】
プロセッサであって、
ループ命令のセットを有する命令キャッシュと、
前記ループ命令のセットを記憶するように構成されたループバッファと、
ループ繰り返し数を予測するように構成されたループ終了予測器と、を備え、
前記プロセッサは、
予測されたループ繰り返し数が第１のループ繰り返し閾値を超えることに応じて、前記ループ命令のセットをループモードで実行することであって、前記プロセッサの命令パイプラインの少なくとも１つのコンポーネントを低電力モードに置くことと、前記ループ命令のセットを前記ループバッファから実行することと、を含む、ことと、
予測されたループ繰り返し数が前記第１のループ繰り返し閾値以下であることに応じて、前記ループ命令のセットを非ループモードで実行することであって、前記命令パイプラインの前記少なくとも１つのコンポーネントをアクティブ状態に維持することと、前記命令パイプラインの命令フェッチユニットによって前記命令キャッシュからフェッチされた前記ループ命令のセットを実行することと、を含む、ことと、
を行うように構成されている、
プロセッサ。
【請求項１４】
前記ループ命令のセットを、前記プロセッサの機能ユニットに実行させるためにマイクロオペレーションにデコードするデコーダをさらに備え、
前記命令フェッチユニットは、前記命令キャッシュから前記デコーダに前記ループ命令を提供するように構成されている、
請求項１３のプロセッサ。
【請求項１５】
前記命令フェッチユニットは、前記ループ終了予測器に命令を提供するように構成されている、
請求項１４のプロセッサ。
【請求項１６】
前記低電力モードに置かれた前記命令パイプラインの少なくとも１つのコンポーネントは、前記プロセッサの命令フェッチコンポーネントである、
請求項１３のプロセッサ。
【請求項１７】
前記低電力モードに置かれた前記命令パイプラインの少なくとも１つのコンポーネントは、前記ループ終了予測器である、
請求項１３のプロセッサ。
【請求項１８】
前記ループ終了予測器は、
前記命令パイプラインの前記少なくとも１つのコンポーネントを前記低電力モードに置いた後に、前記ループ命令に関連するループ繰り返し数を更新するように構成されており、
前記低電力モードに置かれた前記命令パイプラインの少なくとも１つのコンポーネントに電力を戻すタイミングは、更新されたループ繰り返し数に基づいている、
請求項１３〜１７の何れかのプロセッサ。
【請求項１９】
記憶されたループ識別子のバッファをさらに備え、
前記ループ終了予測器は、前記ループ命令の特性を、前記記憶されたループ識別子のバッファ内の識別子にマッチングさせるように構成されている、
請求項１３のプロセッサ。
【請求項２０】
前記命令パイプラインの少なくとも１つのコンポーネントを前記低電力モードに置くことは、前記ループ命令に関連する命令を実行する前であって、前記ループ命令に関連する前記ループ繰り返し数を予測した後に行われる、
請求項１３のプロセッサ。
【国際調査報告】
2022500777.tif 000008
2022500777.tif 000009