(57)【要約】  システムおよび方法は、スーパースカラープロセッサなど、プロセッサの命令フェッチユニットに関する。命令フェッチユニットは、プロセッサのパイプライン段階において命令のフェッチグループ内でフェッチされることになる命令の数を予測するように構成されたフェッチ帯域予測子(FBWP)を含む。フェッチグループに対応するFBWPの第1のエントリは、フェッチグループ内の予測される成立分岐命令の発生およびロケーションと、予測フィールド内の予測される数に関連する信頼レベルとに基づく、フェッチされることになる命令の数の予測に対応する。命令フェッチユニットは、信頼レベルが所定のしきい値を超える場合、パイプライン段階においてフェッチされ得るエントリの最大数ではなく、予測される数の命令のみをフェッチするように構成される。このようにして、命令の無駄なフェッチが回避される。
2018523239.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ用の命令をフェッチする方法であって、
命令の第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、前記第1のフェッチグループ内でフェッチされることになる命令の数を予測するステップと、
前記予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するステップと、
前記信頼レベルが前記所定のしきい値を超える場合、前記プロセッサのパイプライン段階において前記予測される数の命令をフェッチするステップとを含む、方法。
【請求項２】
前記予測される命令数が、前記パイプライン段階においてフェッチされ得る最大命令数よりも少ない、請求項1に記載の方法。
【請求項３】
前記プロセッサに関連する命令キャッシュから前記予測される数の命令をフェッチするステップを含む、請求項1に記載の方法。
【請求項４】
前記予測される成立分岐命令が、前記第1のフェッチグループ内の1つまたは複数の命令の制御フローを変化させると予測される命令である、請求項1に記載の方法。
【請求項５】
フェッチグループ内の予測される成立分岐命令の発生およびロケーションに関する情報を含むテーブルから、前記第1のフェッチグループ内の前記予測される成立分岐命令の前記発生および前記ロケーションを決定するステップを含む、請求項1に記載の方法。
【請求項６】
前記第1のフェッチグループに関する前記情報が、前記テーブルの第1のエントリ内に記憶される、請求項5に記載の方法。
【請求項７】
前記第1のフェッチグループの第1の命令のアドレスと、分岐命令の履歴とに基づいて、前記第1のエントリにアクセスするステップを含む、請求項6に記載の方法。
【請求項８】
前記第1のエントリ内に記憶された前記第1のフェッチグループに関する前記情報が、前記第1のエントリが有効かどうかの指示、信頼レベル、および前記第1のフェッチグループ内の前記予測される成立分岐命令の前記ロケーションを含む、請求項6に記載の方法。
【請求項９】
前記予測される命令数が正確であるかまたは不正確であるかに基づいて、前記信頼レベルをそれぞれ増大または低減することによって、前記第1のエントリをトレーニングするステップを含む、請求項8に記載の方法。
【請求項１０】
前記予測される数が過剰予測を含むとき、前記予測される命令数が不正確であると決定するステップであって、前記第1のフェッチグループ内の前記予測される成立分岐命令が、前記第1のフェッチグループ内の、前記予測される命令数よりも少ない数の範囲内に位置する、決定するステップを含む、請求項9に記載の方法。
【請求項１１】
前記第1のフェッチグループ内の命令の前記より少ない数を示すために、前記第1のエントリ内の前記予測される成立分岐命令の前記ロケーションを更新するステップを含む、請求項10に記載の方法。
【請求項１２】
前記予測される数が過小予測を含むとき、前記予測される数が不正確であると決定するステップであって、前記予測される成立分岐命令が前記第1のフェッチグループ内に位置しない、決定するステップを含む、請求項9に記載の方法。
【請求項１３】
前記予測される成立分岐命令が第2のフェッチグループ内に位置すると決定し、前記第1のフェッチグループに関する前記予測される命令数と、前記第2のフェッチグループ内の前記予測される成立分岐命令の前記ロケーションとに基づいて、前記第1のフェッチグループに対応する前記第1のエントリ内の前記予測される成立分岐命令の前記ロケーションを更新するステップをさらに含む、請求項12に記載の方法。
【請求項１４】
前記第2のフェッチグループ内の前記予測される成立分岐命令の前記ロケーションが前記第1のフェッチグループ内でフェッチされ得るロケーションを超えること、または前記第2のフェッチグループが予測される成立分岐命令を含まないことのいずれかを決定し、前記第1のフェッチグループ内でフェッチされ得る最大命令数を示すために、前記第1のエントリ内の前記予測される成立分岐命令の前記ロケーションを更新するステップをさらに含む、請求項12に記載の方法。
【請求項１５】
プロセッサ用の命令フェッチユニットであって、
前記プロセッサのパイプライン段階において命令の第1のフェッチグループ内でフェッチされることになる命令の数を予測するように構成されたフェッチ帯域予測子(FBWP)を備え、前記第1のフェッチグループに対応する前記FBWPの第1のエントリが、
前記第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づく、フェッチされることになる命令の数の予測を含む予測フィールドと、
前記予測フィールド内の前記予測される数に関連する信頼レベルと
を含み、
前記命令フェッチユニットが、前記信頼レベルが所定のしきい値を超える場合、前記パイプライン段階において前記予測される数の命令をフェッチするように構成される、命令フェッチユニット。
【請求項１６】
前記予測される命令数が、前記パイプライン段階においてフェッチされ得る最大命令数よりも少ない、請求項15に記載の命令フェッチユニット。
【請求項１７】
前記FBWPの前記第1のエントリが、前記第1のフェッチグループの第1の命令の命令アドレスの関数と前の分岐命令の履歴とに基づいてアクセスされる、請求項15に記載の命令フェッチユニット。
【請求項１８】
前記FBWPが前記関数を実装するためのハッシュ論理を含む、請求項17に記載の命令フェッチユニット。
【請求項１９】
前記FBWPが、前記信頼レベルを示すための信頼性カウンタを備え、前記信頼性カウンタが、前記予測フィールド内の前記予測される数が正確であるか不正確であるかに基づいて、それぞれ、増分または減分される、請求項15に記載の命令フェッチユニット。
【請求項２０】
前記予測される数が過剰予測を含むとき、前記予測される数が不正確であり、前記予測される成立分岐命令が、前記第1のフェッチグループ内の、前記予測される数よりも少ない数の範囲内に位置する、請求項19に記載の命令フェッチユニット。
【請求項２１】
前記予測される数が過小予測を含むとき、前記予測される数が不正確であり、前記予測される成立分岐命令が前記第1のフェッチグループ内に位置しない、請求項19に記載の命令フェッチユニット。
【請求項２２】
前記プロセッサがスカラープロセッサである、請求項15に記載の命令フェッチユニット。
【請求項２３】
セットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末(PDA)、固定ロケーションデータユニット、およびコンピュータからなる群から選択されたデバイスに統合される、請求項15に記載の命令フェッチユニット。
【請求項２４】
命令の第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、前記第1のフェッチグループ内でフェッチされることになる命令の数を予測するための手段と、
前記予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するための手段と、
前記信頼レベルが前記所定のしきい値を超える場合、プロセッサのパイプライン段階において前記予測される数の命令をフェッチするための手段と
を備える、システム。
【請求項２５】
前記予測される命令数が、前記パイプライン段階においてフェッチされ得る最大命令数よりも少ない、請求項24に記載のシステム。
【請求項２６】
プロセッサによって実行されると、命令をフェッチするための動作を前記プロセッサに実行させるコードを備える、非一時的コンピュータ可読記憶媒体であって、
命令の第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、前記第1のフェッチグループ内でフェッチされることになる命令の数を予測するためのコードと、
前記予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するためのコードと、
前記信頼レベルが前記所定のしきい値を超える場合、命令キャッシュから前記予測される数の命令をフェッチするためのコードと
を備える、非一時的コンピュータ可読記憶媒体。
【請求項２７】
前記予測される命令数が、パイプライン段階においてフェッチされ得る最大命令数よりも少ない、請求項26に記載の非一時的コンピュータ可読記憶媒体。
【請求項２８】
フェッチグループ内の予測される成立分岐命令の発生およびロケーションに関する情報を含むテーブルから前記第1のフェッチグループ内の前記予測される成立分岐命令の前記発生および前記ロケーションを決定するためのコードを備える、請求項26に記載の非一時的コンピュータ可読記憶媒体。
【請求項２９】
前記第1のフェッチグループの第1の命令のアドレスと、分岐命令の履歴とに基づいて、前記第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに関する情報を含む前記テーブルの第1のエントリにアクセスするためのコードを備える、請求項28に記載の非一時的コンピュータ可読記憶媒体。
【請求項３０】
前記予測される命令数が正確であるか不正確であるかに基づいて、前記信頼レベルをそれぞれ増大または低減することによって、前記第1のエントリをトレーニングするためのコードを備える、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
開示される態様は、プロセッサ内の命令フェッチに関する。より詳細には、例示的な態様は、1つまたは複数の命令をフェッチするために使用される命令フェッチユニットの改善された電力効率に関する。
【背景技術】
【０００２】
いくつかのプロセッサは、たとえば、各クロックサイクル内で、複数の命令を並列にフェッチおよび実行することによって命令レベルの並列性を活用するように設計されている。プロセッサ(たとえば、スーパースカラープロセッサ)の命令フェッチユニットは、単一サイクル内で命令キャッシュから命令のフェッチ量またはフェッチグループと呼ばれる複数の命令をフェッチして、実行パイプライン内で命令のグループを2つ以上の機能ユニットに送るように構成され得、命令のグループは並列に処理され得る。しかしながら、命令のグループ内の分岐命令など、命令を変化させる制御フローの存在は、結果として、命令の無駄なフェッチをもたらし、電力およびリソースの無駄をもたらし得る。この無駄について、従来の命令フェッチユニット設計を参照して下記で説明する。
【０００３】
図1Aにおいて、プロセッサ(図示せず)の動作に関する従来型のパイプライン命令フェッチユニット100を示す。命令フェッチユニット100は、示すように、パイプラインの第1のフェッチ段階(すなわち、フェッチ段階1)において命令キャッシュ110にアクセスして、パイプラインの後続の第2のフェッチ段階(すなわち、フェッチ段階2)内で分岐予測子112を使用して分岐予測を実行するように構成される。フェッチ段階1は、パイプラインラッチ102と104と間で形成される。フェッチ段階2は、パイプラインラッチ104と後続のパイプラインラッチ(図示せず)との間で形成される。
【０００４】
次に図1A〜図1Bを組み合わせて参照して、パイプラインフェッチ段階1および2を通じた命令のある例示的なフローについて説明する。第1のクロックサイクル(たとえば、図1Bの「サイクル1」)において、フェッチ段階1で、W(=5)のフェッチ幅の順次命令I1、I2、I3、I4、およびI5のフェッチグループ(W個の命令の第1のグループとも呼ばれる)が、現在のプログラムカウンタ(PC)120が指す命令アドレスから開始して読み取られるか、または命令キャッシュ110からフェッチされる。それぞれ、これらの命令は、プロセッサによって並列に処理されることが意図される、「追加」命令、「分岐」命令、「減算」命令、「乗算」命令、および「または(OR)」命令に関する。W個の命令のこれらの第1のグループは、第2のクロックサイクル(サイクル2)内でフェッチ段階2に供給され、W個の命令のこれらの第1のグループは、上記の5つの命令に復号化される。
【０００５】
しかしながら、W個の命令の第1のグループ内の、分岐命令である命令I2の存在は、W個の命令の第1のグループ内の1つまたは複数の命令に関してのみではなく、命令の1つまたは複数の続くグループ内の1つまたは複数の命令に関しても、後続の命令の制御フローを変化させる場合がある。たとえば、命令I2の分岐命令が受け入れられる場合、分岐命令の分岐ターゲットアドレスから後続の命令がフェッチされる必要がある。さもなければ、分岐命令が受け入れられない場合、制御フローは変化しない状態に留まり得る。
【０００６】
サイクル2内からW個の命令の次の(第2の)グループのフェッチをどこで開始するかを決定するために、フェッチ段階1は、次のPC116を計算するための論理を備える。次のPC116は、そこから命令がサイクル2内でフェッチされることになる次のアドレスまたはPCであり、これは、第1のフェッチグループ内に分岐命令を変化させる制御フローが存在したかどうかに左右され得る。フェッチ段階2において、分岐予測子112は、分岐命令I2が受け入れられることになるか、または受け入れられないことになるかの予測を提供し、それに応じて、予測される分岐ターゲットアドレス114を提供する。しかしながら、予測される分岐ターゲットアドレス114は、フェッチ段階2からサイクル2内でのみ利用可能である。フェッチ段階1、サイクル1において、加算器106は、現在のPC120をオフセット118に加えるが、これは、フェッチ幅(この場合、W=5)および命令符号化サイズに基づく。これは、(制御フロー内に変化が存在しない場合)そこからW個の命令の第2のグループのフェッチを開始する次の順次アドレスを提供する。加算器106の出力はフェッチ段階1からサイクル1内で利用可能であるため、mux108は、加算器106の出力を選択して、W個の命令の第2のグループを取得するためにサイクル2内で命令キャッシュ110にアクセスする。続く第3のサイクル(サイクル3、図示せず)の場合、mux108は、命令キャッシュ110にアクセスするために、サイクル2から利用可能な予測される分岐ターゲットアドレス114を選択することが可能になるが、W個の命令の第2のグループは、このときまでにすでにフェッチされていることになる。
【０００７】
したがって、予測される分岐ターゲットアドレス114が取得されるのを待つ間に、サイクル2において、I6、I7、I8、I9、およびI10(それぞれ、「および」命令、「除算」命令、「または」命令、「加算」命令、および「減算」命令として示される)を含むW個の命令の第2のグループが、加算器106の出力であると仮定される次のPC116から開始して、段階1によってフェッチされる。図1Bに示す例では、予測される分岐ターゲットアドレス114は加算器106の出力とは異なっており、I2は成立する分岐(taken branch)であると予測されるため、この仮定は不正確であることがわかる。したがって、成立分岐命令I2に続く命令は廃棄またはフラッシュされることになる。廃棄されることになる、I2に続く命令は、図1Bにおいて、2つのカテゴリーに分類される。第1のカテゴリー(タイプ1)において、W個の命令の同じ第1のグループ内でI2に続く命令I3、I4、およびI5が廃棄される。第2のカテゴリー(タイプ2)において、予測される分岐ターゲットアドレス114が早期に利用可能でなかったために不正確にフェッチされた、W個の命令の第2のグループ内の命令I6、I7、I8、I9、およびI10が廃棄される。命令フェッチユニット100は、次いで、サイクル3内で予測される分岐ターゲットアドレス114から開始して、W個の命令の新しいグループをフェッチするようにリダイレクトされることになる。わかるように、タイプ1およびタイプ2の命令は両方とも無駄にされ(たとえば、フェッチされるが、実行される前に廃棄され)、付随する電力およびリソースの無駄を伴う。
【０００８】
これらのタイプ1および2をより詳細に考慮すると、予測される分岐ターゲットアドレス114が、加算器106の出力のように、たとえば、サイクル1内で、早期に利用可能であった場合、タイプ2命令は無駄にされない可能性があったことがわかる。命令キャッシュ110にアクセスし、分岐予測子112から予測される分岐ターゲットアドレス114を取得することが、フェッチ段階1など、同じパイプライン段階内で可能であった場合、これは可能であっただろう。いくつかの従来の実装形態は、単一のクロックサイクル内で命令キャッシュアクセスおよび分岐予測を実行することによって、タイプ2命令の無駄の防止を試みる。
【０００９】
図2は、タイプ2命令の無駄を回避するように設計された、別の従来型の命令フェッチユニット200を示す。命令フェッチユニット200は、多くの態様において、命令フェッチユニット100と同様であり、この場合、類似の参照番号を有する機能ユニットは同様の機能を実行し、したがって、これらの詳細な説明は繰り返されない。命令フェッチユニット100と200との間の著しい差異に焦点を当てると、命令フェッチユニット200は、パイプラインラッチ102と204との間で形成される単一のパイプライン段階、フェッチ段階1のみを用いて設計されている。わかるように、パイプラインラッチ204は、フェッチ段階1内に分岐予測子212を納めるような方法で配置される。これは、フェッチ段階1(たとえば、サイクル1内で)命令の第1のグループをフェッチするために命令キャッシュ110にアクセスすることが可能であり、同じサイクル(サイクル1)内で命令を分岐予測子212に供給し得ることを意味する。分岐予測子212は、フェッチ段階1、サイクル1内で、第1のグループ内のいずれかの分岐の指示およびターゲットアドレスを予測することができる。たとえば、分岐予測子212は、フェッチ段階1、サイクル1内で、分岐命令I2に関する予測される分岐ターゲットアドレス214を提供することができる。mux108は、したがって、次のPC116として予測される分岐ターゲットアドレス214を選択することができる(これは、命令フェッチユニット100内では可能でないことになる)。次のPC116を使用して、続くサイクル、サイクル2内で命令キャッシュ110にアクセスすることになる。このようにして、サイクル2内で、予測される分岐ターゲットアドレス214から開始して、命令の正確なグループをフェッチすることができ、これはタイプ2命令の無駄をなくすことになる。
【００１０】
しかしながら、タイプ1命令は依然として無駄になることになるが、これは、たとえば、命令の第1のグループ内の分岐命令I2に続く命令I3、I4、およびI5が依然として廃棄される必要があるためである(この場合も、I2の予測される分岐ターゲットアドレス214は加算器106から出力された次の順次アドレスとは異なると仮定する)。第1のグループ内の残りの命令(成立分岐命令I2、およびI2に先行する命令I1)のみがさらなる処理のためにプロセッサの次のパイプライン段階(図示せず)に提供されることになる。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
命令キャッシュは、命令フェッチユニットの最も電力を必要とする構成要素のうちの1つである。したがって、最終的には廃棄されるタイプ1命令の無駄なフェッチですら、かなりの電力の無駄となる。最終的に廃棄されることになる命令(たとえば、タイプ1およびタイプ2の命令)の不要なフェッチから生じる電力の無駄を低減するかまたはなくすことが望ましい。
【課題を解決するための手段】
【００１２】
例示的な態様は、プロセッサ用に設計された命令フェッチユニットに関するシステムおよび方法を含み、命令フェッチユニットは、クロックサイクルごとに1つまたは複数の命令のフェッチグループをフェッチすることができる。いくつかの態様では、プロセッサはスーパースカラープロセッサであってよい。命令フェッチユニットは、プロセッサのパイプライン段階において命令のフェッチグループ内でフェッチされることになる命令の数を予測するように構成されたフェッチ帯域予測子(FBWP:fetch bandwidth predictor)を含む。フェッチグループに対応するFBWPのエントリは、フェッチグループ内の予測される成立分岐命令の発生およびロケーションと、予測フィールド内の予測される数に関連する信頼レベルとに基づく、フェッチされることになる命令の数の予測を含む予測フィールドを含む。命令フェッチユニットは、信頼レベルが所定のしきい値を超える場合、パイプライン段階においてフェッチされ得るエントリの最大数ではなく、予測される数の命令のみをフェッチするように構成される。このようにして、命令の無駄なフェッチが回避される。
【００１３】
たとえば、ある例示的な態様は、プロセッサ用の命令をフェッチする方法を含み、この方法は、命令の第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、命令のフェッチグループ内でフェッチされることになる命令の数を予測するステップと、予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するステップと、信頼レベルが所定のしきい値を超える場合、プロセッサのパイプライン段階において予測される数の命令をフェッチするステップとを含む。
【００１４】
別の例示的な態様は、プロセッサのパイプライン段階において命令の第1のフェッチグループ内でフェッチされることになる命令の数を予測するように構成されたフェッチ帯域予測子(FBWP)を含む命令フェッチユニットを含む。第1のフェッチグループに対応するFBWPのエントリは、第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションと、予測フィールド内の予測される数に関連する信頼レベルとに基づく、フェッチされることになる命令の数の予測を含む予測フィールドを備える。命令フェッチユニットは、信頼レベルが所定のしきい値を超える場合、パイプライン段階において予測される数の命令をフェッチするように構成される。
【００１５】
さらに別の例示的な態様は、命令の第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、命令の第1のフェッチグループ内でフェッチされることになる命令の数を予測するための手段と、予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するための手段と、信頼レベルが所定のしきい値を超える場合、プロセッサのパイプライン段階において予測される数の命令をフェッチするための手段とを備えるシステムに関する。
【００１６】
別の例示的な態様は、プロセッサによって実行されると、命令をフェッチするための動作をプロセッサに実行させるコードを備える、非一時的コンピュータ可読記憶媒体であって、第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、命令の第1のフェッチグループ内でフェッチされることになる命令の数を予測するためのコードと、予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するためのコードと、信頼レベルが所定のしきい値を超える場合、命令キャッシュから予測される数の命令をフェッチするためのコードとを備える。
【００１７】
添付の図面は、本発明の態様の記述において助けになるように提示され、単に態様の説明のために提供されており、態様を制限するものではない。
【図面の簡単な説明】
【００１８】
【図１Ａ】従来型の2段命令フェッチユニットを示す図である。
【図１Ｂ】従来型の2段命令フェッチユニットを示す図である。
【図２】従来型の一段命令フェッチユニットを示す図である。
【図３】例示的な態様に従って構成された命令フェッチユニットを示す図である。
【図４】図3に示した命令フェッチユニットのフェッチ帯域幅予測子(FBWP)を示す図である。
【図５】例示的な態様による、1つまたは複数の命令をフェッチする方法を示す図である。
【図６】いくつかの例示的な実装形態による、本明細書で教示されるいくつかの技法をサポートするように構成されたシステムのブロック図である。
【図７】本開示の態様が有利に採用される場合がある例示的なワイヤレスデバイスを示す図である。
【発明を実施するための形態】
【００１９】
本発明の態様は、本発明の特定の態様に向けられた以下の説明および関連する図面において開示される。本発明の範囲から逸脱することなしに、代替の態様が考案され得る。加えて、本発明のよく知られている要素は、本発明の関連する詳細を不明瞭にしないように、詳細には説明されず、または省略される。
【００２０】
「例示的な」という単語は、本明細書では、「例、実例、または例証として機能する」を意味するために使用される。「例示的」として本明細書で説明するいずれの態様も、必ずしも他の態様よりも好ましいまたは有利であると解釈されるべきでない。同様に、「本発明の態様」という用語は、本発明のすべての態様が、論じられる特徴、利点、または動作モードを含むことを必要としない。
【００２１】
本明細書で使用する用語は、特定の態様のみを説明するためのものであり、本発明の態様の限定であることを意図しない。本明細書で使用する単数形「a」、「an」、および「the」は、コンテキストがはっきりと別段に指示しない限り、複数形も含むことが意図される。さらに、「備える(comprises)」、「備えている(comprising)」、「含む(includes)」、および/または「含んでいる(including)」という用語は、本明細書で使用されるとき、述べられた特徴、整数、ステップ、動作、要素、および/または構成要素の存在を明示するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、および/またはそれらのグループの存在または追加を排除しないことが理解されよう。
【００２２】
さらに、多くの態様が、たとえば、コンピューティングデバイスの要素によって実行されるアクションのシーケンスに関して説明される。本明細書で説明する様々なアクションは、特定の回路(たとえば、特定用途向け集積回路(ASIC))によって、1つもしくは複数のプロセッサによって実行されているプログラム命令によって、または両方の組合せによって実行され得ることが認識されよう。加えて、本明細書で説明するアクションのこれらのシーケンスは、実行時に関連するプロセッサに本明細書で説明する機能を実行させるコンピュータ命令の対応するセットを記憶しているコンピュータ可読記憶媒体の任意の形態内に完全に具体化されていると考えられ得る。したがって、本発明の様々な態様は、そのすべてが特許請求される主題の範囲内にあると考えられているいくつかの異なる形態において具体化されてもよい。加えて、本明細書で説明する対応の各々について、任意のそのような態様の対応する形態は、たとえば、説明するアクションを実行する「ように構成された論理」として本明細書で説明される場合がある。
【００２３】
例示的な態様は、プロセッサ(たとえば、クロックサイクルごとに1つまたは複数の命令のフェッチおよび実行をサポートし得るスーパースカラープロセッサ)の各クロックサイクルまたはパイプライン段階において1つまたは複数の命令をフェッチするように構成された命令フェッチユニットによって消費される電力を低減することに関する。具体的には、いくつかの態様は、受け入れられると予測される分岐命令など、命令によって引き起こされる制御フローの変化により最終的に廃棄されることになる命令(たとえば、背景技術の部分で説明したタイプ1およびタイプ2の命令)の不要なフェッチによって生じる電力の無駄をなくすことに関する。
【００２４】
たとえば、最終的に廃棄されることになる命令がフェッチされないように、プロセッサの各クロックサイクル内でフェッチされる命令の数を調整することが可能であることが認識される。したがって、2つ以上の最大命令数(最大帯域幅(BW)とも呼ばれる)が、各クロックサイクル内で、プロセッサ内でフェッチおよび処理され得る場合、例示的な態様では、プロセッサの少なくとも1つのクロックサイクル内で最大数よりも少ない命令をフェッチおよび処理することができる。
【００２５】
命令の無駄なフェッチを回避するために、例示的な態様は、各サイクル内で命令キャッシュからフェッチされるべきフェッチグループまたはフェッチ量内の正確な命令の数を予測するように構成されたフェッチ帯域幅予測子(FBWP)を含む。(最大数に満たなくてよい)予測される正確な数の命令をフェッチすることは、最終的に廃棄されることになる命令(たとえば、タイプ1およびタイプ2の命令)のフェッチを回避し、節電をもたらす。
【００２６】
図3を参照すると、例示的な態様に従って構成された、プロセッサの命令フェッチユニット300が示される。図3ではプロセッサのさらなる詳細は示されないが、プロセッサは、スーパースカラープロセッサ、または、たとえば、クロックサイクルまたはパイプライン段階において1つまたは複数の命令の並列のフェッチおよび実行をサポートし得る任意の他のプロセッサであってよい。説明のために、図2の命令フェッチユニット200は、図3の命令フェッチユニット300の例示的な特徴を説明するための開始点として使用される。したがって、図3の同様の構成要素に関して同様の参照番号が図2から保持されているが、本開示のために、図2から著しい差異を有する構成要素に関しては異なる参照番号が図3において使用される。
【００２７】
命令フェッチユニット300はまた、パイプラインラッチ102と304との間でフェッチ段階1が形成されて、単一サイクルフェッチユニットとして構成される。命令キャッシュ110のアクセスおよび分岐予測子212からの予測される分岐ターゲットアドレス214の取得は、フェッチ段階1で生じ、これは、図2の命令フェッチユニット200と同様の、タイプ2命令の無駄なフェッチをなくすことにつながる。さらに、命令フェッチユニット300のフェッチ段階1は、タイプ1命令の無駄なフェッチを同様に低減するまたはなくすために、各サイクル内でフェッチされることになる正確な数の命令の予測を生成するように構成されたフェッチ帯域幅予測子(FBWP)324を含む。信号、すなわち、FBWP324から予測されるフェッチBW326は、フェッチされることになる正確な命令数のこの予測を表す。予測、すなわち、予測されるフェッチBW326は、フェッチグループ内の予測される成立分岐命令など、フェッチグループ内の1つまたは複数の命令の制御フローを変化させると予測される命令の発生およびロケーションなどの要因に基づく。予測されるフェッチBW326を使用すると、フェッチグループ内でフェッチされ得る最大数(最大帯域幅(BW)とも呼ばれる)よりも少ない命令が命令キャッシュ110からフェッチされる。(予測されるフェッチ帯域幅に基づく)オフセット318がFBWP324によって生成されて、加算器106に追加され、この場合、加算器106は、オフセット318および現在のPC120を加えて、次のPC316を生成するように構成される。そこから命令の後続のグループをフェッチする開始アドレスを示す次のPC316は、mux108の出力に基づき、mux108は、現在のフェッチグループ内に予測される成立分岐命令が存在したかどうかに応じて、加算器106または予測される分岐ターゲットアドレス214から選択する。
【００２８】
FBWP324が、図3および図4を一緒に参照してさらに説明される。図4は、FBWP324の詳細図を示す。FBWP324は、様々なフェッチグループ内の予測される成立分岐命令の発生およびロケーションに関する情報を記憶するように構成される。この情報に基づいて、FBWP324は、特定のクロックサイクル内でフェッチされることになる正確な命令数の予測である、予測されるフェッチBW326を出力するように構成される。FBWP324は、1つまたは複数のエントリでインデックス付けまたはタグ付けされたテーブルとして設計され得る。FBWP324は、命令アドレスまたはプログラムカウンタ(PC)120の関数と分岐履歴(BH)328とを使用してインデックス付けされ得る。BH328は、分岐予測子212から取得されたグローバル分岐履歴であってよい。たとえば、インデックス410は、PC120およびBH328のハッシュを使用してFBWP324をインデックス付けするために、ハッシュ408として示されるブロックによって実装されるハッシュ論理によって形成され得る。ハッシュ408は、PC120およびBH328のいくつかのまたはすべてのビットの排他的論理和、連結、または他の組合せなど、当技術分野で知られている任意のハッシュ関数(たとえば、PC120の1つまたは複数の下位ビットおよび最近の分岐履歴に対応するBH328の1つまたは複数のビットのハッシュ)を実装し得る。
【００２９】
特定のフェッチグループに関する情報は、FBWP324の対応するエントリ内に記憶される。FBWP324の各エントリ内に記憶された情報は、下記で説明されることになる、3つのフィールド、すなわち、有効402、信頼性404、およびフェッチ帯域幅(BW)406を含み得る。
【００３０】
第1のフィールド、すなわち、有効402は、FBWP324の対応するエントリがトレーニングされているか否かを示すための有効ビットを含み得る(FBWP324トレーニングに関する詳細は以下の部分で提供される)。
【００３１】
第2のフィールド、すなわち、信頼性404は、予測されるフェッチBW326の信頼レベルを示す。信頼性カウンタ(具体的に示されていない)は、信頼性404の値を増分または減分するように実装され得る。信頼性カウンタは、信頼性カウンタがシーリング値で飽和するまで増分され、フロア値で飽和するまで減分され得る、飽和カウンタであり得る。たとえば、信頼性カウンタは、「00」のフロア値と「11」のシーリング値とを有する、2ビット飽和カウンタであり得る。2ビット飽和カウンタは、「00」の値(または、0の10進値)に初期化されて、そのカウンタが「11」の値(または、3の10進値)に達するまで、信頼レベルが増大するにつれて増分されてよく、そのカウンタが「00」の値に達するまで、信頼性を低減して減分されてよい。信頼性がどのように増大/低減するかの態様は、以下の部分で説明される。
【００３２】
第3のフィールド、すなわち、フェッチBW406は、特定のエントリに関して有効402が設定されている場合、そのエントリに関して予測されるフェッチBW326として出力されることになる値を含む。例示的な態様では、有効402が(FBWP324がトレーニングされていることを示すために)そのエントリに関して設定されており、そのエントリに関する信頼性404が所定のしきい値を超える信頼レベルを示す場合(たとえば、所定のしきい値は、上記で説明した2ビット飽和カウンタに関して「10」(または、2の10進値)であってよい)、FBWP324の特定のエントリのフェッチBW406から利用可能な予測されるフェッチBW326が考慮され得る。
【００３３】
前に説明したように、PC120は、命令のグループが特定のクロックサイクル(たとえば、サイクル1)内で命令キャッシュ110からフェッチされることになるアドレスである。BH328は、過去の分岐命令数の(たとえば、成立または不成立)指示の履歴を含む。BH328は、分岐予測子212から、たとえば、分岐予測子212の分岐履歴レジスタ(具体的には示されていない)から取得され得る。分岐予測子212は、分岐命令の指示が、たとえば、分岐命令の過去の挙動(ローカル履歴)、他の分岐命令の過去の挙動(グローバル履歴)、またはそれらの組合せなどの態様に基づいて、成立または不成立として予測され得る、分岐予測に関する従来の技法に従って構成され得る。したがって、分岐予測子212のさらなる詳細は当業者に明らかになるため、本開示において提供されない。
【００３４】
PC120とBH328とに基づいてハッシュ408から取得されたインデックス410の特定の値は、インデックス付けされたエントリを指すことになる。第1のフェッチグループに関してインデックス付けされたエントリは、本開示において、説明を簡単にするために第1のエントリと呼ばれることになるが、第1のエントリはインデックス410が指すFBWP324のいずれのエントリであってもよいことに留意されたい。FBWP324は、第1のエントリに関するフィールド、すなわち、有効402、信頼性404、およびフェッチBW406の値に基づいて、予測されるフェッチBW326を出力するように設計される。命令の第1のフェッチグループ内でフェッチされることになる命令の数の予測は、第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づく。予測されるフェッチBW326は、サイクル1内で命令キャッシュ110からフェッチされるべきフェッチグループ内の命令の数に対応し、これは、命令(たとえば、この場合、タイプ1命令)の無駄なフェッチを回避することになる。(図示されないが、プロセッサに対して命令フェッチユニット300が構成される)そのプロセッサが各サイクル内で最大数または「最大フェッチBW」の命令をフェッチするように設計されている場合、予測されるフェッチBW326は、その最大フェッチBW以下になる。
【００３５】
次に、図3〜図4を組み合わせて参照すると、FBWP324およびPC120から出力された予測されるフェッチBW326を使用して、PC120が示すアドレスから開始して、予測されるフェッチBW326が示す数の命令のグループをフェッチするためにサイクル1内で命令キャッシュ110がアクセスされる。命令キャッシュ110からの命令のフェッチされたグループは、分岐予測子212に提供されることになる。分岐予測子212は、命令のフェッチされたグループ内のいずれかの分岐命令(たとえば、前述の分岐命令I2)の発生を探索することになる。フェッチグループ内に見出すことができるいずれの成立分岐命令または非成立分岐命令に関する情報も、トレーニング322として示す信号を介してFBWP324に供給される。トレーニング322は、フェッチBW406に関する更新値と、信頼性404が増分されるかまたは減分されるかの指示とを含む。FBWP324のフィールドは、予測されるフェッチBW326のその予測を改善するために、この情報に基づいて、更新されるまたはトレーニングされると言われる。トレーニングプロセスは、次の部分で詳細に説明される。予測されるフェッチBW326に対応する数の命令のフェッチされたグループが、プロセッサ内でそれに応じて処理されるように後続のパイプライン段階(図示せず)に供給されることになる。
【００３６】
FBWP324のトレーニングは、フェッチBW406に関する値と、信頼性404が増分されるべきか減分されるべきかの指示とを含めて、トレーニング322を介して分岐予測子212によって提供されるフィードバックに基づく連続的なプロセスであり得る。初期条件の下で(たとえば、プロセッサのコールドスタートの後)、トレーニングが存在しない場合、すべてのエントリに関する有効402は、クリアされるまたは「0」に設定されることになり、信頼性404も「0」またはベース/フロア値に設定されてよく、フェッチBW406は、最大フェッチBWに等しいデフォルト値に設定されることになる。したがって、初期条件の下で、予測されるフェッチBW326は最大フェッチBWに等しくなる。各フェッチサイクル内で命令のグループが5になるとして示される前の例では、最大フェッチBWは5になり、したがって、すべての5個の命令がフェッチされることになる。FBWP324のエントリは、フェッチグループ内の分岐命令の存在に基づいて更新されることになる。分岐命令がエントリの更新に遭遇しない限り、そのエントリに関するその初期値またはデフォルト値はその状態に留まることになる。
【００３７】
FBWP324のエントリは、受け入れられることが予測される第1の遭遇分岐命令のロケーションに基づいてポピュレートされることになる。この場合も、前の例(図1Bを参照)を考慮すると、5個の命令のフェッチされたグループ内の第2の命令I2が、その指示が分岐予測子212によって受け入れられると予測される第1の遭遇分岐命令である場合、FBWP324内の対応するエントリ(たとえば、フェッチされたグループ内の第1の命令(たとえば、I1)に関するPC120のビット(たとえば、1つまたは複数の下位ビット)および(やはり「0」に初期化されてよい)BH328の1つまたは複数のビットの少なくとも一部に基づいて、ハッシュ408から出力されたインデックス410に対応するインデックス付けされたエントリまたは「第1のエントリ」)のフェッチBW406は、(グループ内の第2の命令が予測される成立分岐命令であることを示すために)「2」で更新されることになる。対応して、第1のエントリに関する有効402は「1」に設定されることになる。第1のエントリに関する信頼性404は増分されることになる。
【００３８】
一般に、信頼性404がこのように所定のしきい値(たとえば、2ビット飽和カウンタに関して2)を超えて増分されるとき、FBWP324は十分にトレーニングされていると見なされる。FBWP324が十分にトレーニングされると、フェッチグループが前述の第1の命令に遭遇した(たとえば、PC120がフェッチグループに関する開始アドレスが第1の命令I1に対応することを示すことに基づいて、たとえば、第1の命令I1を有するフェッチグループに遭遇した)場合、FBWP324にアクセスして、第1のエントリのフェッチBW406から予測されるフェッチBW326を取得する。予測されるフェッチBW326は、この例では、2になり、これは、最大数またはデフォルト数の5個の命令ではなく、フェッチグループ内の命令キャッシュ110から2個の命令のみをフェッチさせる。5個ではなく、2個の命令のみをフェッチすることは、タイプ1命令(I3、I4、およびI5)のフェッチを回避し、したがって、例示的な態様において、無駄なフェッチおよび関連する電力の無駄を回避することになる。
【００３９】
場合によっては、FBWP324の挙動は、上記の例から導出され得、予測されるフェッチBW326は、特定のフェッチグループ内のフェッチされることになる正確な命令数でない場合がある(すなわち、予測されるフェッチBW326は、正確なフェッチBWでない場合がある)。これらの事例は、FBWP324の誤予測と呼ばれる。誤予測は2つのタイプのものであり得る。第1のタイプの誤予測は過剰予測であり、この場合、FBWP324はフェッチされることになる命令の数を過大評価する可能性がある(すなわち、予測されるフェッチBW326は正確なフェッチBWよりも大きい)。第2のタイプの誤予測は過小予測であり、この場合、FBWP324はフェッチされることになる命令の数を過小評価する可能性がある(すなわち、予測されるフェッチBW326は正確なフェッチBWよりも小さい)。両方のタイプの誤予測に関して、対応するエントリに関する信頼性404は(たとえば、信頼性404の飽和カウンタ実装形態においてフロア値に達するまで)減分される。これらの誤予測に対処し、異なる事例に関して予測されるフェッチBW326を更新する例示的な態様を含めて、これらの2つのタイプの誤予測に関するさらなる詳細が次に提供される。
【００４０】
第1のタイプの誤予測、すなわち、過剰予測は、予測されるフェッチBW326に基づいてグループ内でフェッチされる命令の数が、正確な数より少なくとも1つ多い場合に生じる。たとえば、第1のフェッチグループを考慮すると、第1のフェッチグループ内の少なくとも1つの命令は、無駄をもたらすことになるタイプ1命令になるが、これは、その命令が同じ第1のフェッチグループ内の予測される成立分岐命令の後にフェッチされたためである。言い換えれば、予測されるフェッチBW326から1を差し引いた数以下である命令数範囲内で第1のフェッチグループ内に予測される成立分岐が存在することになる。第1のフェッチグループに対応する第1のエントリに関する上述の例を検討すると、FBWP324の第1のエントリが有効である(すなわち、第1のエントリに関する有効402が「1」に設定されている)とき、かつ、予測されるフェッチBW326が3以上であり、フェッチグループ内で3-1=2個の命令範囲内で予測される成立分岐(I2)を生じさせる場合、過剰予測が発生すると言われる。したがって、命令I3は、この場合、不要にフェッチされたことになる。したがって、過剰予測が存在するとき、第1のエントリに関する信頼性404内の値は、(たとえば、飽和信頼性カウンタを減分することによって)1だけ減分される。フェッチグループ内の予測される分岐命令(たとえば、I2)のロケーションに基づいて、第1のエントリに関するフェッチBW406が(たとえば、それが前に3に設定され、過剰予測を生じさせた場合、2個の命令に)更新される。この更新は、(フェッチBW406に関する更新値と、信頼性404が増分されるか、または減分されるかの指示とを含む、前述の)トレーニング322を通じて発生し得る。トレーニング322を通じた更新は、過剰予測が生じ、予測される成立分岐命令がフェッチされるよりも少ない数の命令範囲内で発見された同じサイクル内で発生し得る。第1のエントリが第1のフェッチグループのアドレス(PC値)を使用して次にアクセスされるとき、FBWP324は、更新に基づいて、予測されるフェッチBW326のより正確な予測を提供することが可能になる。
【００４１】
第2のタイプの誤予測、すなわち、過小予測は、命令の第1のフェッチグループ内の分岐命令(もしあれば)が分岐予測子212によって受け入れられると予測されない(すなわち、不成立と予測される)場合に生じる。過小評価が生じるには、予測されるフェッチBW326が最大フェッチBW未満であり、過小評価が生じる対応する第1のエントリが有効であると仮定される。上記の例に戻ると、第1のエントリに関する予測されるフェッチBW326が(5の最大フェッチBW未満である)2であり、第1のエントリに関する有効402は「1」に設定されるが、分岐命令I2は特定のクロックサイクル(たとえば、サイクル1)内で分岐予測子212によって不成立と予測された場合、過小予測が生じたと言われる。この場合もやはり、第1のエントリに関する信頼性404は(たとえば、トレーニング322を通じて)「1」だけ減分されることになる。過小予測の場合、より多くの命令がフェッチされた可能性があるが、過小評価の場合、第1のフェッチグループ内でフェッチされた命令の無駄は存在しないと考えられる。
【００４２】
上記で説明した過剰予測とは異なり、過小予測の場合、FBWP324(または具体的には、第1のエントリのフェッチBW406)の更新は、同じサイクル内で発生せず、サイクル2など、続くサイクル内で生じる。更新は、第1のフェッチグループのアドレスとサイクル2内の後続の、第2のフェッチグループ内でフェッチされる命令数とを使用することになる。さらなる詳細では、サイクル2内で、第2のフェッチグループ内でフェッチする命令数は最大BW(すなわち、5)になるように予測/設定される。これにより、サイクル2内で、命令の最大BWがフェッチされ、第2のフェッチグループ内に予測される成立分岐が存在するかどうかが決定される。これにより、I2を超えた5個の命令、すなわち、I3、I4、I5、I6、およびI7が第2のフェッチグループ内でフェッチされることになる。第2のフェッチグループ内に予測される成立分岐命令が存在する(仮に、たとえば、I4は、図1Bに示したように乗算命令である代わりに、予測される成立分岐である)場合、第1のフェッチグループに対応する第1のエントリに関するフェッチBW406は数=4に更新され、これは、第1のフェッチグループおよび第2のフェッチグループ内で予測される成立分岐が出現したロケーションの中でフェッチされる2個の命令を加算することによって取得される(I4は、フェッチされた5個の命令の中で第2のロケーション内に出現する)。さらに、(第2のフェッチグループの第1の命令I3のアドレスまたはPC値に基づいて)第2のフェッチグループによってインデックス付けされる別のエントリ(仮に、「第2のエントリ」)も、値2を用いて更新されて、第2のフェッチグループ内で、I4が第2の位置内に出現することを示すことになる。これにより、第1のフェッチグループに対応する第1のエントリが次にアクセスされるとき、第4のロケーション内に予測される成立分岐(I4)が存在し、したがって、予測されるフェッチBW326によって4個の命令のみがフェッチされることを示すために、フェッチBW406は4の値を有することになる。第2のフェッチグループに対応する第2のエントリがアクセスされるとき、予測されるフェッチBW326によって2個の命令が示されることになる。
【００４３】
予測される成立分岐命令が第1のフェッチグループ内の最大BW内でフェッチされ得るロケーションを超えた位置に位置する場合(たとえば、I4ではなく、I6またはI7が、予測される成立分岐命令である場合、最大フェッチBWは5のみであるため、第1のフェッチグループ内でI6またはI7をフェッチすることはできない)、または第2のフェッチグループが予測される成立分岐命令を含まない場合、第1のフェッチグループに対応する第1のエントリのフェッチBW406は最大フェッチBWに更新されることに留意されよう。
【００４４】
したがって、例示的な態様では、FBWP324がかなりトレーニングされると、命令(たとえば、タイプ1命令)の無駄なフェッチは軽減される。上記の機構は、過小予測および過剰予測の場合、FBWP324を継続的にトレーニングする。
【００４５】
詳細に論じないが、命令フェッチユニット300が、第1のサイクル内で予測されるフェッチBW326を取得して、後続の、第2のサイクル内で命令キャッシュ110および分岐予測子212にアクセスするためにさらにパイプライン化される代替実装形態が可能である。たとえば、命令キャッシュ110および分岐予測子212のアクセスは、フェッチ段階1の外部、たとえば、図3のパイプラインラッチ304の右側に位置してよく、FBWP324がフェッチ段階1内に留まることになる。このセットアップに関して、必要に応じて、他の適切な修正を考慮すると、命令フェッチユニット300は、基本的に2段パイプラインとして実装されることになり、この場合、命令キャッシュ110からフェッチ段階2内でフェッチするための命令数の予測を得るために、フェッチ段階1内でFBWP324にアクセスする。命令キャッシュ110は分岐予測子212と同じサイクル内で依然としてアクセスされ(タイプ2の無駄をなくす)、予測されるフェッチBW326が前のサイクルから利用可能になった後で命令キャッシュ110がアクセスされる(タイプ1の無駄をなくす)ため、タイプ1、ならびにタイプ2の命令の無駄は存在しないことに留意されたい。この2段階実装形態は、パイプライン段階同士の間のサイクル時間が制限されているか、またはより高い周波数動作が望ましい場合に使用され得る。
【００４６】
したがって、例示的な態様は、本明細書で開示するプロセス、機能、および/またはアルゴリズムを実行するための様々な方法を含むことが理解されよう。たとえば、図5は、プロセッサ(たとえば、スーパースカラープロセッサ)に関する命令をフェッチするための方法500を示す。
【００４７】
ブロック502において、方法500は、命令の第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、命令の第1のフェッチグループ内でフェッチされることになる命令の数を予測するステップを含む。たとえば、PC120の関数(たとえば、ハッシュ408によって実装される)(この場合、PC120は、フェッチグループのアドレス、より詳細には、フェッチグループの第1の命令(たとえば、I1)のアドレスに対応する)と、分岐命令の履歴に対応するBH328とに基づいて、FBWP324をインデックス付けすることによって、第1のフェッチグループに関するFBWP324の第1のエントリ(たとえば、「第1のエントリ」)が読み取られる。第1のエントリは、命令のフェッチグループ内の予測される成立分岐命令I2の発生およびロケーションに少なくとも部分的に基づいて、フェッチするべき、予測される命令数を含む予測をフィールドフェッチBW406内に含む。
【００４８】
ブロック504において、方法500は、予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するステップを含む。たとえば、信頼性404は第1のエントリに関して読み取られ、信頼性404が所定のしきい値を超えるかどうかが決定される。
【００４９】
ブロック506において、方法500は、信頼レベルが所定のしきい値を超える場合、プロセッサのパイプライン段階において予測される数の命令をフェッチするステップを含む。たとえば、命令フェッチユニット300は、信頼性404内の信頼レベルが所定のしきい値を超える場合、命令キャッシュ110から(第1のエントリに関するフェッチBW406を含む、予測されるフェッチBW326から取得された)予測される命令数を読み取るように構成される。
【００５０】
図6を参照すると、システム600の例示的な実装形態が示される。システム600は、例示的な態様において命令フェッチユニット300が設計されるプロセッサ(たとえば、スーパースカラープロセッサ)に対応し得るまたはそれを備えることができる。システム600は、一般に、相互に関係する機能モジュールを備えるとして示されている。これらのモジュールは、下記で説明する機能を実装するために、任意の適切な論理または手段(たとえば、ハードウェア、ソフトウェア、またはそれらの組合せ)によって実装され得る。
【００５１】
モジュール602は、少なくともいくつかの態様では、命令の第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、命令の第1のフェッチグループ内でフェッチされることになる命令の数を予測するためのモジュール、論理、または適切な手段に対応し得る。たとえば、モジュール602は、FBWP324などのテーブル、より具体的には、フィールド、すなわち、フェッチBW406内に予測される数を含む第1のエントリを含み得る。
【００５２】
モジュール604は、予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するためのモジュール、論理、または適切な手段を含み得る。たとえば、モジュール604は、FBWP324内の第1のエントリの信頼性404内の信頼レベルを示すために増分または減分され得る信頼性カウンタと、信頼性404の値が所定のしきい値を超えるかどうかを決定するための比較論理(具体的に図示せず)とを含み得る。
【００５３】
モジュール604は、信頼レベルが所定のしきい値を超える場合、プロセッサのパイプライン段階において予測される数の命令をフェッチするためのモジュール、論理、または適切な手段を含み得る。たとえば、モジュール604は、信頼性404内の信頼レベルが所定のしきい値を超える場合、命令キャッシュ110から(第1のエントリに関するフェッチBW406を含む、予測されるフェッチBW326から取得された)予測される命令数を読み取るように構成された命令フェッチユニット300を含み得る。
【００５４】
命令フェッチユニット300が配備され得る例示的な装置について、次に図7に関して論じる。図7は、概して700として示される、例示的な態様に従って構成されたワイヤレスデバイスのブロック図を示す。ワイヤレスデバイス700は、いくつかの態様では、上記の図6のシステム600を参照して説明したプロセッサに対応し得るプロセッサ702を含む。プロセッサ702は、いくつかの態様では、スーパースカラープロセッサとして設計されてよく、図3の命令フェッチユニット300を備え得る。この図では、FBWP324のみが命令フェッチユニット300内に示されているが、図3内に提供される残りの詳細は、明快のために省略されている。プロセッサ702は、メインメモリであり得るメモリ710に通信可能に結合され得る。命令キャッシュ110は、メモリ710およびプロセッサ702の命令フェッチユニット300と通信中であるとして示されている。別個のブロックとして示されているが、場合によっては、命令キャッシュ110は、プロセッサ702の一部であってよいまたは当技術分野で知られている他の形態で実装されてもよい。1つまたは複数の態様によれば、FBWP324は、命令フェッチユニット300が、命令キャッシュ110から正確な数の命令をフェッチして、プロセッサ702の命令パイプライン内で処理されるように正確な数の命令を提供することを可能にするために、予測されるフェッチBW326を提供するように構成され得る。
【００５５】
図7は、プロセッサ702およびディスプレイ728に結合された、ディスプレイコントローラ726も示している。コーダ/デコーダ(コーデック)734(たとえば、オーディオおよび/または音声コーデック)は、プロセッサ702に結合することができる。(モデムを含んでもよい)ワイヤレスコントローラ740などの他の構成要素も示されている。スピーカ736およびマイクロフォン738は、コーデック734に結合することができる。図7は、ワイヤレスコントローラ740をワイヤレスアンテナ742に結合することができることも示している。特定の態様では、プロセッサ702、ディスプレイコントローラ726、メモリ710、命令キャッシュ110、コーデック734、およびワイヤレスコントローラ740は、システムインパッケージまたはシステムオンチップデバイス722内に含まれる。
【００５６】
特定の態様では、入力デバイス730および電源744が、システムオンチップデバイス722に結合される。さらに、特定の態様では、図7に示すように、ディスプレイ728、入力デバイス730、スピーカ736、マイクロフォン738、ワイヤレスアンテナ742、および電源744は、システムオンチップデバイス722の外部に位置する。ただし、ディスプレイ728、入力デバイス730、スピーカ736、マイクロフォン738、ワイヤレスアンテナ742、および電源744の各々は、インターフェースまたはコントローラのような、システムオンチップデバイス722の構成要素に結合することができる。
【００５７】
図7はワイヤレス通信デバイスを示しているが、プロセッサ702、メモリ710、および命令キャッシュ110は、セットトップボックス、音楽プレーヤ、ビデオプレーヤ、娯楽ユニット、ナビゲーションデバイス、携帯情報端末(PDA)、固定ロケーションデータユニット、コンピュータ、ラップトップ、タブレット、モバイルフォン、または他の同様のデバイスなどのデバイス内に組み込まれてもよいことに留意されたい。
【００５８】
当業者は、情報および信号が、様々な異なる技術および技法のいずれを使用しても表現される場合があることを諒解されよう。たとえば、上の説明全体にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光場もしくは光学粒子、またはそれらの任意の組合せによって表現され得る。
【００５９】
さらに、当業者であれば、本明細書で開示した態様に関して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装される場合があることを諒解されよう。ハードウェアおよびソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明してきた。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、具体的な適用例および全体的なシステムに課された設計制約に依存する。当業者は説明した機能を特定の用途ごとに様々な方法で実装してもよいが、そのような実装決定は本発明の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【００６０】
本明細書で開示した態様に関して説明した方法、シーケンスおよび/またはアルゴリズムは、直接ハードウェアにおいて具現化されても、プロセッサによって実行されるソフトウェアモジュールにおいて具現化されても、またはその2つの組合せにおいて具現化されてもよい。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている任意の他の形態の記憶媒体内に存在してもよい。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取ること、および記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替として、記憶媒体はプロセッサに一体化される場合がある。
【００６１】
したがって、本発明の態様は、プロセッサ用の各サイクル内でフェッチするための正確な数の命令を予測するための方法を具現化するコンピュータ可読媒体を含むことができる。したがって、本発明は例示の例に制限されず、本明細書で説明した機能性を実行するための任意の手段は、本発明の態様に含まれる。
【００６２】
上記の開示が本発明の例示の態様を示す一方で、添付される特許請求の範囲により規定されるような、本発明の範囲から逸脱することなく、本明細書に様々な変形および変更を行うことができることに留意されたい。本明細書で説明した本発明の態様に従う方法クレームの機能、ステップ、および/または行為を、任意の特定の順序で実施する必要はない。さらに、本発明の要素は、単数形で記載され、特許請求される場合があるが、単数形への制限が明示的に言及されない限り、複数形が意図される。
【符号の説明】
【００６３】
100  パイプライン命令フェッチユニット、命令フェッチユニット
102  パイプラインラッチ
104  パイプラインラッチ
106  加算器
108  mux
110  命令キャッシュ
112  分岐予測子
114  予測される分岐ターゲットアドレス
116  プログラムカウンタ(PC)
118  オフセット
120  プログラムカウンタ(PC)
200  従来の命令フェッチユニット、命令フェッチユニット
204  パイプラインラッチ
212  分岐予測子
214  予測される分岐ターゲットアドレス
300  命令フェッチユニット
304  パイプラインラッチ
316  PC
318  オフセット
322  トレーニング
324  フェッチ帯域幅予測子(FBWP)
326  予測されるフェッチBW、フェッチBW
328  分岐履歴(BH)
402  有効
404  信頼性
406  フェッチ帯域幅(BW)
408  ハッシュ
410  インデックス
500  方法
600  システム
602  モジュール
604  モジュール
700  ワイヤレスデバイス
702  プロセッサ
710  メモリ
722  システムインパッケージまたはシステムオンチップデバイス
726  ディスプレイコントローラ
728  ディスプレイ
730  入力デバイス
734  コーダ/デコーダ(コーデック)
736  スピーカ
738  マイクロフォン
740  ワイヤレスコントローラ
742  ワイヤレスアンテナ
744  電源
I  命令
【図１Ａ】
2018523239.tif 000003
【図１Ｂ】
2018523239.tif 000004
【図２】
2018523239.tif 000005
【図３】
2018523239.tif 000006
【図４】
2018523239.tif 000007
【図５】
2018523239.tif 000008
【図６】
2018523239.tif 000009
【図７】
2018523239.tif 000010
【手続補正書】
【提出日】平成30年2月15日(2018.2.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサ用の命令をフェッチする方法であって、
前記プロセッサのパイプライン段階において、命令の第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づいて、前記第1のフェッチグループ内でフェッチされることになる命令の数を予測するステップと、
前記予測される命令数に関連する信頼レベルが所定のしきい値を超えるかどうかを決定するステップと、
前記信頼レベルが前記所定のしきい値を超える場合、前記プロセッサの前記パイプライン段階において前記予測される数の命令をフェッチするステップとを含む、方法。
【請求項２】
前記予測される命令数が、前記パイプライン段階においてフェッチされ得る最大命令数よりも少ない、請求項1に記載の方法。
【請求項３】
前記プロセッサに関連する命令キャッシュから前記予測される数の命令をフェッチするステップを含む、請求項1に記載の方法。
【請求項４】
前記予測される成立分岐命令が、前記第1のフェッチグループ内の1つまたは複数の命令の制御フローを変化させると予測される命令である、請求項1に記載の方法。
【請求項５】
フェッチグループ内の予測される成立分岐命令の発生およびロケーションに関する情報を含むテーブルから、前記第1のフェッチグループ内の前記予測される成立分岐命令の前記発生および前記ロケーションを決定するステップを含む、請求項1に記載の方法。
【請求項６】
前記第1のフェッチグループに関する前記情報が、前記テーブルの第1のエントリ内に記憶される、請求項5に記載の方法。
【請求項７】
前記第1のフェッチグループの第1の命令のアドレスと、分岐命令の履歴とに基づいて、前記第1のエントリにアクセスするステップを含む、請求項6に記載の方法。
【請求項８】
前記第1のエントリ内に記憶された前記第1のフェッチグループに関する前記情報が、前記第1のエントリが有効かどうかの指示、信頼レベル、および前記第1のフェッチグループ内の前記予測される成立分岐命令の前記ロケーションを含む、請求項6に記載の方法。
【請求項９】
前記予測される命令数が正確であるかまたは不正確であるかに基づいて、前記信頼レベルをそれぞれ増大または低減することによって、前記第1のエントリをトレーニングするステップを含む、請求項8に記載の方法。
【請求項１０】
前記予測される数が過剰予測を含むとき、前記予測される命令数が不正確であると決定するステップであって、前記第1のフェッチグループ内の前記予測される成立分岐命令が、前記第1のフェッチグループ内の、前記予測される命令数よりも少ない数の範囲内に位置する、決定するステップと、
前記第1のフェッチグループ内の命令のより少ない数を示すために、前記第1のエントリ内の前記予測される成立分岐命令の前記ロケーションを更新するステップとを含む、請求項9に記載の方法。
【請求項１１】
前記予測される数が過小予測を含むとき、前記予測される数が不正確であると決定するステップであって、前記予測される成立分岐命令が前記第1のフェッチグループ内に位置しない、決定するステップを含む、請求項9に記載の方法。
【請求項１２】
前記予測される成立分岐命令が第2のフェッチグループ内に位置すると決定し、前記第1のフェッチグループに関する前記予測される命令数と、前記第2のフェッチグループ内の前記予測される成立分岐命令の前記ロケーションとに基づいて、前記第1のフェッチグループに対応する前記第1のエントリ内の前記予測される成立分岐命令の前記ロケーションを更新するステップ、または
前記第2のフェッチグループ内の前記予測される成立分岐命令の前記ロケーションが前記第1のフェッチグループ内でフェッチされ得るロケーションを超えること、または前記第2のフェッチグループが予測される成立分岐命令を含まないことのいずれかを決定し、前記第1のフェッチグループ内でフェッチされ得る最大命令数を示すために、前記第1のエントリ内の前記予測される成立分岐命令の前記ロケーションを更新するステップをさらに含む、請求項11に記載の方法。
【請求項１３】
プロセッサ用の命令フェッチユニットであって、
前記プロセッサのパイプライン段階において命令の第1のフェッチグループ内でフェッチされることになる命令の数を予測するように構成されたフェッチ帯域予測子(FBWP)を備え、前記第1のフェッチグループに対応する前記FBWPの第1のエントリが、
前記第1のフェッチグループ内の予測される成立分岐命令の発生およびロケーションに少なくとも部分的に基づく、フェッチされることになる命令の数の予測を含む予測フィールドと、
前記予測フィールド内の前記予測される数に関連する信頼レベルと
を含み、
前記命令フェッチユニットが、前記信頼レベルが所定のしきい値を超える場合、前記パイプライン段階において前記予測される数の命令をフェッチするように構成される、命令フェッチユニット。
【請求項１４】
請求項1から12のいずれか一項に記載の方法を実行するための手段を備えるシステム。
【請求項１５】
プロセッサによって実行されると、請求項1から12のいずれか一項に記載の方法を前記プロセッサに実行させるコードを備える、非一時的コンピュータ可読記憶媒体。
【国際調査報告】
2018523239.tif 000011
2018523239.tif 000012
2018523239.tif 000013