(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
複数のコアおよび電力制御ユニット（ＰＣＵ）を備え、
前記ＰＣＵは、対応するスレッドが第１パフォーマンスステートをリクエストしたかをそれぞれ示すパフォーマンスステートインジケータを複数格納する第１記憶部と、
前記対応するスレッドが第１コア電力ステートをリクエストしたかをそれぞれ示すコア電力ステートインジケータを複数格納する第２記憶部とを有し、
前記ＰＣＵは、前記第１記憶部および前記第２記憶部の情報に基づいて、ターボモードにすることを制御し、
前記ＰＣＵは、それぞれが前記プロセッサで実行されるスレッドに関連付けられている複数のターボモードカウンタを有し、前記複数のターボモードカウンタのうちの少なくとも一つのターボモードカウンタの値がトリガ閾値よりも大きい場合に前記プロセッサの少なくとも一部を前記ターボモードにする、プロセッサ。
【請求項２】
第１のスレッドに対する前記パフォーマンスステートインジケータおよび前記コア電力ステートインジケータが、共に第１ステートである場合には、前記ＰＣＵは、ターボモードリクエストを示すべく、前記複数のターボモードカウンタのうちの前記第１のスレッドのターボモードカウンタを更新する、請求項１に記載のプロセッサ。
【請求項３】
前記パフォーマンスステートインジケータおよび前記コア電力ステートインジケータが、共に前記第１ステートである場合には、前記ＰＣＵは、第１重みづけに従って第１の方向に前記ターボモードカウンタを更新し、
前記パフォーマンスステートインジケータおよび前記コア電力ステートインジケータの少なくとも一方が、前記第１ステートでない場合には、前記ＰＣＵは、第２重みづけに従って第２の方向に前記ターボモードカウンタを更新し、
前記第２重みづけは、前記第１重みづけよりも大きい、請求項２に記載のプロセッサ。
【請求項４】
前記第１重みづけおよび前記第２重みづけは、ユーザが制御可能である、請求項３に記載のプロセッサ。
【請求項５】
前記プロセッサの使用率が、少なくとも第１閾値に等しくならない限り、前記ＰＣＵは、前記ターボモードに入ることを許可しない、請求項１から４の何れか一項に記載のプロセッサ。
【請求項６】
前記少なくとも一つのターボモードカウンタの前記値が、前記トリガ閾値よりも小さいが、ディセーブル閾値よりも大きい場合には、前記ＰＣＵは、前記プロセッサの前記少なくとも一部を前記ターボモードに維持する、請求項１に記載のプロセッサ。
【請求項７】
前記ＰＣＵは、前記プロセッサの前記少なくとも一部を、遅延期間だけ遅らせて、前記ターボモードにする、請求項１に記載のプロセッサ。
【請求項８】
対応するスレッドのターボモードリクエストを受け取った場合には、第１重みづけに従って、プロセッサで実行される複数のスレッドのそれぞれに対応する複数のターボモードカウンタを更新し、前記対応するスレッドの非ターボモードリクエストに応じて、前記第１重みづけよりも大きな第２重みづけに従って、前記複数のターボモードカウンタを更新する段階と、
前記複数のターボモードカウンタのうちの少なくとも一つの値が、ターボモードトリガ閾値を超えているかを判断する段階と、
超えている場合には、前記プロセッサの少なくとも一部をターボモードにする段階と、を備える方法。
【請求項９】
前記複数のターボモードカウンタのうちの少なくとも１つの値が、ターボモードディセーブル閾値未満であるかを判断する段階と、
前記ターボモードディセーブル閾値未満である場合には、前記プロセッサの前記少なくとも一部の前記ターボモードを終了させる段階とを更に備える、請求項８に記載の方法。
【請求項１０】
前記複数のスレッドのうちの第１スレッドが前記ターボモードをリクエストしたこと示すべく、パフォーマンスステート記憶部を更新する段階を更に備える、請求項８に記載の方法。
【請求項１１】
前記第１スレッドが最大コア電力ステートをリクエストしたことを示すべく、コア電力ステート記憶部を更新する段階を更に備える、請求項１０に記載の方法。
【請求項１２】
前記第１スレッドの前記パフォーマンスステート記憶部および前記コア電力ステート記憶部の値に基づいて、前記複数のターボモードカウンタのうちの前記第１スレッドのターボモードカウンタを更新する段階を更に備える、請求項１１に記載の方法。
【請求項１３】
前記プロセッサの使用率が第１閾値を超えない限り、前記ターボモードに入ることがないように、前記第１重みづけおよび前記第２重みづけが設定される、請求項８に記載の方法。
【請求項１４】
前記少なくとも一つのターボモードカウンタの値が、前記ターボモードトリガ閾値を超えた後に、前記ターボモードにするのを第１期間だけ遅らせる段階を更に備える、請求項８から１３の何れか一項に記載の方法。
【請求項１５】
前記第１期間の終了時に、前記少なくとも一つのターボモードカウンタ値が前記ターボモードトリガ閾値を超えているかを判断する段階と、
超えている場合には、前記ターボモードにし、超えていない場合には、前記ターボモードにしない段階とを更に備える、請求項１４に記載の方法。
【請求項１６】
プロセッサと、
前記プロセッサに接続されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを備え、
前記プロセッサは、それぞれが少なくとも一つのコアを有する複数のドメインと、電力制御ロジックとを有し、
前記複数のドメインはそれぞれ、独立した周波数で動作し、
前記電力制御ロジックは、コア電力とパフォーマンスとの組み合わせのカウントを格納するカウンタの値と、第１閾値との比較に基づいて、第１ドメインをターボモードにする、システム。
【請求項１７】
前記電力制御ロジックは、前記第１ドメインのターボモードリクエストを受け取った場合には、第１重みづけに従って前記カウンタを更新し、前記第１ドメインの非ターボモードリクエストを受け取った場合には、第２重みづけに従って前記カウンタを更新し、
前記第２重みづけは、前記第１重みづけよりも大きい、請求項１６に記載のシステム。
【請求項１８】
前記電力制御ロジックは、前記ターボモードリクエストに応じて、前記カウンタを第１の方向に更新し、前記非ターボモードリクエストに応じて、前記カウンタを第２の方向に更新する、請求項１７に記載のシステム。
【請求項１９】
前記第１重みづけおよび前記第２重みづけにより、前記プロセッサの使用率閾値が設定され、
前記使用率閾値未満では、前記電力制御ロジックが前記ターボモードにしない、請求項１７に記載のシステム。
【請求項２０】
前記電力制御ロジックは、前記カウンタの値が前記第１閾値を超えた後に、第１期間だけ、前記ターボモードにするのを遅らせる、請求項１７から１９の何れか一項に記載のシステム。
【請求項２１】
プロセッサであって、
複数のコアおよび電力制御ユニット（ＰＣＵ）を備え、
前記ＰＣＵは、対応するスレッドが第１パフォーマンスステートをリクエストしたかをそれぞれ示すパフォーマンスステートインジケータを複数格納する第１記憶部と、
前記対応するスレッドが第１コア電力ステートをリクエストしたかをそれぞれ示すコア電力ステートインジケータを複数格納する第２記憶部とを有し、
前記ＰＣＵは、前記第１記憶部および前記第２記憶部の情報に基づいて、ターボモードにすることを制御し、
前記ＰＣＵは、それぞれが前記プロセッサで実行されるスレッドに関連付けられている複数のターボモードカウンタを有し、第１のスレッドに対する前記パフォーマンスステートインジケータおよび前記コア電力ステートインジケータが共に第１ステートである場合には、ターボモードリクエストを示すべく、第１重みづけに従って第１の方向に前記複数のターボモードカウンタのうちの前記第１のスレッドのターボモードカウンタを更新し、前記第１のスレッドに対する前記パフォーマンスステートインジケータおよび前記コア電力ステートインジケータの少なくとも一方が前記第１ステートでない場合には、前記第１重みづけよりも大きい第２重みづけに従って第２の方向に前記ターボモードカウンタを更新する、
プロセッサ。
【発明の詳細な説明】
【背景技術】
【０００１】
現在のオペレーションシステム（ＯＳ）の多くは、システム電力の最適化に、アドバンスド・コンフィグレーション・アンド・パワー・インターフェイス（ＡＣＰＩ）規格の、例えば、２００６年１０月１０日に発行されたＲｅｖ．３．０ｂを使用している。ＡＣＰＩを実装することにより、概して、Ｃ１からＣｎステートと称される様々な消費電力ステートでプロセッサコアを動作させることが可能になる。コアがアクティブの時は、いわゆるＣ０ステートで動作し、コアがアイドル状態の時には、コアを、いわゆる非ゼロＣステート（例えば、Ｃ１−Ｃ６ステート）である低電力状態にすることができる。
【０００２】
ＡＣＰＩでは、省電力ステートに加えて、パフォーマンスステート、すなわち、Ｐステートも提供されている。パフォーマンスステートでは、コアがアクティブ（Ｃ０）状態である間に、性能−電力レベルを制御できる。簡単に説明すると、Ｐ０−Ｐｎの複数のＰステートが利用可能であり、Ｐ０はコアの最大周波数に対応し、それ以外の各Ｐステート、たとえば、Ｐ１−Ｐｎは、それよりも低い性能レベルでコアが動作することに対応している。
【０００３】
多くのプロセッサは、高い性能を提供するべく、ハードウェアサポートを行っている。多くの場合、このようなサポートには、いわゆるターボモードと称される、更なるヘッドルームが利用可能である（例えば、消費電流、消費電力および温度に余裕がある）場合に、プロセッサのパフォーマンスを最大にするべく、より高い周波数で動作することができるモードが含まれる。
【０００４】
マイクロソフトＷＩＮＤＯＷＳ（登録商標）ＯＳのようなオペレーティングシステムは、オペレーションの３つのモード、すなわち、省電力、平衡および高性能モードを提供している。省電力モードでは、ターボモードはディセーブルされ、高パフォーマンスモードでは、ターボモードは常にイネーブルされている。しかしながら、平衡モードでは、パフォーマンスを上げるためにいつターボモードに入るか、および、省電力を尊重するモードにいつ戻るかについて、知的判定が必要になる。平衡モードにおいて、使用率が低い場合には、使用率に比して消費電力が高くなってしまうことから、ターボモードはイネーブルされない。しかしながら、使用率が高い（例えば、約８０％を超える使用率）場合には、ターボモードをイネーブルしてもよい。このような高い周波数を提供せずに、ターボモードをイネーブルすると、期待された性能に達しないというリスクがある。
【０００５】
SPECpower_ssj2008ベンチマークは、システムの電力効率を判断する業界が設定した測定基準である。性能および電力を、０％から１００％使用率までの様々な負荷レベルで測定する。SPECpower_ssj2008ベンチマークの低い使用率点（utilization point）においてアクティブとされている場合には、ＯＳのベンダは、初期設定の平衡モードではターボモードを完全にディセーブルことを選択してもよく、これは、現在のＯＳ要件において、平衡モードでは、使用率が８０％に達するまでターボモードに入らないこと指示されているからである。しかしながら、プロセッサで実行されるスレッドの数が非常に多くなり、使用率が５０％程度であっても、ターボモードに入ってよい場合がある。このような場合に、ＯＳベンダが、オペレーションの平衡モードでターボモードをディセーブルしてしまうと、ユーザはターボモードで得られるパフォーマンス向上の利点を得られないことになってしまう。
【０００６】
インテリジェントターボは、プログラムされた遅延をもってターボモードへのエントリを遅らせることにより、このような問題に対処しようという技術である。しかしながら、この技術では、シングルスレッドおよびスループットモードの性能向上を妨げてしまう。更に、遅延が相対的に長く、リクエストしているアプリケーションが、ターボモードの性能向上の利点を活かせない場合が生じる。シングルスレッドアプリケーションでターボモードをディセーブルすることにより周波数ロスは、１ギガヘルツ（ＧＨｚ）以上である。
【図面の簡単な説明】
【０００７】
【図１】本発明の一実施形態に係る、インテリジェントターボモード制御アルゴリズムをグラフで示した図である。
【０００８】
【図２】本発明の一実施形態に係る、プロセッサのターボモードオペレーションを設定する方法のフローチャートである。
【０００９】
【図３】本発明の一実施形態に係る、ターボモード制御方法のフローチャートである。
【００１０】
【図４】本発明の一実施形態に係る、プロセッサのブロック図である。
【００１１】
【図５】本発明の一実施形態に係る、プロセッサコアのブロック図である。
【００１２】
【図６】本発明の一実施形態に係る、システムのブロック図である。
【００１３】
【図７】本発明の一実施形態に係る、ターボモード制御のシミュレーション結果である。
【発明を実施するための形態】
【００１４】
実施形態では、いつターボモードパフォーマンスをイネーブルするかを判断するべく、様々な情報を監視する。本明細書で使用されている、アクティブな"ターボモード（turbo mode）"とは、少なくとも１つのプロセッサドメイン（例えば、１以上のコア）が、保証されている動作周波数よりも高周波数で動作するモードを意味する。例えば、プロセッサが、２．０ギガヘルツ（ＧＨｚ）のスタンプされた熱設計電力（ＴＤＰ）周波数を有すると仮定する。この周波数は、Ｐ１パフォーマンスステート、すなわち、最大保証動作周波数に対応する。Ｐ０ステートでは、動作周波数は（アクティブ状態のコアの数、ワークロードの種類、サーマルバジェット等に応じて）、この周波数よりも高くなる。Ｐ０ステートは、動作周波数が、ＴＤＰ最大動作周波数を超えてもよい、日和見的なステートであるといえる。所与のプロセッサが、高い性能を要求する複数のビン、例えば、１０個のビンを有すると仮定する。この場合、プロセッサは、特定の因子に基づいて、２ＧＨｚから３ＧＨｚの間のある周波数で、Ｐ０モードで動作することができる。因子とは、実行されているスレッドの数、これらスレッドのワークロード等である。
【００１５】
より詳細には、一実施形態では、プロセッサの電力制御ユニットで行われてもよいターボモードの判断は、コア電力ステート情報（以下、Ｃステートと称する）およびプロセッサパフォーマンスステート情報（以下、Ｐステートと称する）に基づいて、プロセッサがターボパフォーマンスを最も活用できる時を判断する。一般的に、スレッドは、Ｐ０ステートおよびＣ０ステートを、スレッド自身でまたは別のスレッドにより、要求することによりターボモードをリクエストする。
【００１６】
使用率が低い点では、Ｐ０ステートである期間（residency）は、プロセッサがより多くのスレッドをサポートするほど、長くなる。これは、ＯＳがスレッドレベルで使用率を測定し、全てのスレッドを要求パフォーマンスが最も高い（もっとも番号の小さい）Ｐステートの設定することによっておこる。スレッドが多くなるほど、Ｐ０ターボモードに入る可能性が高くなる。すなわち、一のスレッドで実行されているＯＳは、様々なスレッドに対して異なるＰステートのリクエストを生成することができる。電力制御ユニットは、複数のリクエストに基づいて、所定のドメインに適切なＰステートを判断してもよい。一般的に、電力制御ユニットは、Ｐステートを分析し、リクエストされた最も高いステートに基づいて、そのドメインに対するＰステートを選択してもよい。例えば、シングルスレッドがＰ０ステートをリクエストする限り、ドメインの全てのスレッドを、Ｐ０ステートで実行してもよい。
【００１７】
マイクロソフトＷＩＮＤＯＷＳ（登録商標）のような多くのＯＳでは、１以上のスレッドから、より低いパフォーマンスへ移るリクエストを受信するが、少なくとも１つのその他のスレッドが高いパフォーマンスステート（例えば、Ｐ０）を要求していることを認識している場合には、このようなリクエストを電力制御ユニットに渡さない場合がある。その結果、電力制御ユニットは、実行スレッドが要求する実際のパフォーマンスステートに関する正確な情報を有していない場合がある。ＯＳによる、特定のパフォーマンスリクエストのフィルタリングにより、電力制御ユニットにとっては、実際に存在するよりも多い（少なくともパーセンテージで）Ｐ０リクエストが存在するように見える。この場合、プロセッサは、低い使用率レベルにおいて高いパフォーマンスステートになり、上記したようにＯＳ要求が守られないことになる。実施形態では、ＯＳによって行われる非Ｐ０ステートリクエストのフィルタリングにおいても、ターボモードへのエントリを減らすことを考える。
【００１８】
Ｐ０期間と異なり、Ｃ０期間は、使用率レベルに比例するといえる。SPECpower_ssj2008ワークロードでは、１００％の使用率では、プロセッサは、ほぼ１００％の時間、Ｃ０ステートにある。使用率が下がると、ほぼ比例して、Ｃ０期間も短くなる。
【００１９】
そこで、実施形態では、Ｃ０期間およびＰ０期間の両方の情報を利用して、ターボモードの電力効率を改善する。より詳細には、本発明の一実施形態に係る、インテリジェントターボモード制御アルゴリズムを示したグラフである図１に示すように、アプリケーションワークロードが高くなると、Ｃ０ステートである期間が長くなる。プロセッサの使用率が高レベルになると、ＯＳは、Ｐステートをより高いレベルのステート（低い数字のステート）に設定する。実施形態は、Ｃ０Ｐ０ステートの期間と使用率との間の比例関係を利用して、Ｃ０Ｐ０期間が所定の使用率を超えた時に、ターボモードをイネーブルする。図１に示すように、横線２５および３０は、非ターボモード対ターボモードの異なる重みづけに対応する。図から分かるように、非ターボモードには高い重みづけがなされ、ターボモードがイネーブルされる使用率閾値レベルが、高くなっている。具体的には、横線２５は８倍の重みづけが設定されており、使用率閾値レベルは約８９％であり、横線３０では４倍の重みづけが設定されており、使用率閾値レベルは約７９％である。
【００２０】
本明細書で記載される一実施形態では、Ｃ０Ｐ０期間は、スレッド毎に維持される継続性カウンタ（continuous counter）のセットを通じて監視することができる。このカウンタは、以下、ターボモードカウンタとも称される。一実施形態では、スレッドが要求するステートの組み合わせがＣ０Ｐ０である場合、所与のターボモードカウンタをインクリメントして、それ以外のステートがリクエストされる場合には、カウンタをデクリメントする。関連するインクリメント／デクリメントに重みづけをして、使用率点（例えば、SPECpower_ssj2008のようなベンチマークワークロードに関して）を、所望の値に設定することができる。例えば、非Ｃ０Ｐ０／Ｃ０Ｐ０重みづけが、８倍である場合には、使用率点は、８／（８＋１）＝８９％となる。したがって、ターボモードカウンタがインクリメントされるまでに、非Ｃ０Ｐ０期間は、Ｃ０Ｐ０継続時間の８倍の長さとなる。あるいは、カウンタが、Ｃ０Ｐ０ステートでインクリメントされるよりも、非Ｃ０Ｐ０ステートで大きな重みづけでデクリメントされるようにしてもよい。このようにすることで、ターボモードがイネーブルされる使用率点の制御を改善することができる。
【００２１】
また、継続性カウンタを提供することにより、より深いＣステート（例えば、深いスリープ状態）のショートバーストの間の、ターボモードパフォーマンスを改善させることができる。継続性カウンタは、プロセッサは概して深いＣステートに長い期間存在することから、より深いＣステートに対して重みづけをする。一実施形態では、電力制御ユニットによって実行される電力制御コードループ毎に、各カウンタを更新（例えば、インクリメント／デクリメント）することができる。この実施形態では、スレッド毎にカウントが維持され、スレッド毎のカウントを足し合わせて、ドメインレベル決定（例えば、電圧ドメイン）に使用する。プロセッサは、複数の電圧および周波数プレーンまたはドメインを含んでもよい。電圧ドメインは、プロセッサ設計に応じて、プロセッサの全てのコア、コアのサブサブセット、または、１つのコアであってもよく、各ドメインは、所定の電圧および周波数の組み合わせになるように、個別に制御可能である。
【００２２】
実施形態は、スループットモード（全てのコアがアクティブ）およびシングルスレッドモードの両方で動作してもよい。シングルスレッドが、遅延閾値に対してターボモードをリクエストする限りにおいて（以下に説明する）、ターボモードがイネーブルされる。スレッド毎にアルゴリズムを実行することで、遅延閾値を大幅に下げることができ、プロセッサがターボリクエストに対して速く応答できるようになる。
【００２３】
図２には、本発明の一実施形態に係る、プロセッサのターボモードオペレーションを設定する方法のフローチャートが示されている。図２に示すように、方法２００は、プロセッサ上で実行されている複数のスレッドからの様々な情報を分析し、ターボモードのオペレーションに入る適切なタイミングを判断するべく、例えば、プロセッサの電力制御ユニットを設定するのに使用される。様々な実施形態において、ターボモードに入るのは、プロセッサの使用率レベルが相対的に高い時に発生し、多数のスレッド（例えば、１２以上のスレッド）がプロセッサで実行されている場合であっても、例えば、８０％以上の使用率レベルで発生する。
【００２４】
図２に示すように、方法２００は、ターボモードと非ターボモードとの間の重みづけを設定する段階（ブロック２１０）から開始する。すなわち、上記したように、実施形態では、スレッドからの非ターボモードリクエストに大きく重みづけして、プロセッサが、スレッドから対応する多数のターボモードリクエストを受信した場合にのみ、ターボモードに入るようにしてもよい。一実施形態では、この重みづけは、非ターボモードリクエストが、ターボモードリクエストに与えられる値の８倍となるように設定されてもよく、この点に関して本発明の範囲は限定されない。このようにすることで、プロセッサが、相対的に高い使用率、例えば、本例では、８９％に達した場合にのみ、ターボモードに入るようにする。この場合、重みづけは、閾値使用率レベルを設定することになり、閾値使用率レベル未満では、ターボモードはイネーブルされない。
【００２５】
この重みづけを設定するのに、異なる実施形態では、異なる態様が考えられる。ある実施形態では、この重みづけは、プロセッサの非コア部分の電力制御ユニットに存在するファームウェアによって、ハードコードされてもよい。別の実施形態では、重みづけは、様々なエンティティによって設定されてもよく、例えば、システムスタートアップで基本入出力システム（ＢＩＯＳ）、または、オペレーティングシステム（ＯＳ）制御のようなシステムソフトウェアによって設定されるコンフィグレーションレジスタを提供することを含む。別の実施形態では、ユーザアクセス可能なコンフィグレーションレジスタを提供することによって、ユーザが所定の重みづけをすることを可能としてもよい。様々な実施形態では、ターボモードに入る閾値使用率レベルの選択は、固定されてもよい（例えば、製造者によって固定された値）し、ＢＩＯＳまたはＯＳのようなシステムソフトウェアによって制御されてもよいし、ユーザアクセス可能コンフィグレーションレジスタを介してユーザが動的に設定可能であってもよい。
【００２６】
重みづけの設定に加えて、複数の閾値を設定することもできる（ブロック２２０）。様々な実施形態では、複数の閾値は、ヒステリシスのレベルに対して提供されてもよく、高い閾値がターボモードに入る前に達成され、ターボモードの間に少なくとも１つの小さな閾値に達する限りにおいて、ターボモードがアクティブ状態を保ってもよい。したがって、このような閾値を、アプリケーションで発生する可能性のあるターボモードグリッチをフィルタするのに使用することができる。本発明の範囲はこの点に関して限定されないが、一実施形態において、このような閾値がプロセッサにハードコードされてもよく、また、様々なカウンタレベルに対応してもよい。これら重みづけおよび閾値が設定済みとなると、複数のターボモードカウンタが初期化される（ブロック２３０）。具体的には、電力制御ユニットは、例えば、スレッド毎のＣ０Ｐ０リクエストをトラックする期間カウンタを備えてもよい。図２の実施形態において、特定の実装形態が示されたが、本発明の範囲はこの点に関して限定されない。
【００２７】
図３には、本発明の一実施形態に係る、ターボモード制御方法のフローチャートが示されている。図３に示すように、方法３００は、例えば、プロセッサの非コア部分に存在する、プロセッサの電力制御ユニットに実装されてもよい。一般的に、プロセッサ使用率が所定のレベルを超えた場合にのみ、ターボモードに入るように、方法３００が使用される。加えて、方法は、ターボモードリクエストのフィルタリングおよびヒステリシスの測定を提供してもよく、一旦ターボモードに入った後で、プロセッサがすぐにターボモードを終了し、再びターボモードに入るといった場合には、ターボモードへの出入りのオペレーションは電力消費が大きくなることから、そのようなことが起きないようにできる。
【００２８】
概して、方法３００は、電力制御ユニットによって実行される電力制御ループ各々の間に実行されてもよい。また、方法は、マルチドメインプロセッサにおける複数のドメインとは独立して実行されてもよい。したがって、複数の電圧ドメインを有するプロセッサでは、例えば、所定の電圧調整器によって電力の提供を受ける電圧ドメインのそれぞれは、一定のモードで動作してもよいい、すなわち、一定の電圧および周波数で動作してもよい。
【００２９】
図に示すように、方法３００は、スレッドがＣ０Ｐ０の組み合わせを要求しているかを判断する段階（ひし形３１０）から開始してもよい。ここで使用されている、Ｃ０Ｐ０の組み合わせとは、スレッドが、高いパフォーマンスステート（Ｐ０）および高いコア電力ステート（Ｃ０）の両方を要求しているターボモードリクエストを指す。一実施形態では、この判断は、電力制御ユニットに存在する様々な制御情報の分析に基づいてもよい。例えば、複数の継続期間レジスタ（residency register）のセットを用意して、第１継続期間レジスタがＣ０リクエストを示し、別の継続期間レジスタがＰ０リクエストを示してもよい。このような一実施形態では、継続期間レジスタは、各ビットがプロセッサで実行されている所定のスレッドと関連付けられている、複数のビットを有してもよい。この場合、スレッドがＣ０Ｐ０の組み合わせを要求すると、Ｐ０継続期間レジスタおよびＣ０継続期間レジスタの対応するビットが設定されてもよい。この実装形態では、レジスタがスレッド情報ごとに提供されているが、その他の実装形態も可能である。例えば、Ｃ０およびＰ０継続期間レジスタが、各ドメインに対して、または、各コアに対して提供されてもよい。
【００３０】
ひし形３１０において、スレッドがＣ０Ｐ０ステートをリクエストしていると判断された場合には、制御はブロック３１５に移り、そのスレッドに対してターボモードカウンタがインクリメントされる。ひし形３１０において、スレッドがＣ０Ｐ０ステートをリクエストしていないと判断された場合には、制御は、ブロック３２０に移る。ブロック３２０では、そのスレッドに対するターボモードカウンタが、重みづけされた量だけデクリメントされる。すなわち、上記したように、高い使用率の場合にのみターボモードに入るように、ターボモードリクエストよりも、非ターボモードリクエストの方が高く重みづけされている。上記の例のデクリメントは、１回のインクリメントと比較して、８倍のデクリメントとなっている。すなわち、非ターボモードリクエストでは、スレッドのターボモードカウンタは、８つデクリメントされ、ターボモードリクエストでは、同じカウンタが（本例では）１つのみインクリメントされるといったように、異なる重みづけがＣ０Ｐ０リクエストと非Ｃ０Ｐ０リクエストとになされる。重みづけを変更することにより、使用率ブレイクポイントを調整することができる。デクリメント値を大きくすると、ターボモードに入る使用率の値を高くすることができる。制御は次に、ひし形３３０に移り、分析すべき更なるスレッドが存在するかを判断する。存在する場合には、制御は、ひし形３１０に戻る。存在しない場合には、この電力制御ループについて、全てのスレッドおよび全てのターボモードカウンタが適切に更新されたとして、ひし形３５０に移る。
【００３１】
図３に示すように、ひし形３５０では、スレッドのターボモードカウンタ値のうち、ターボトリガ閾値よりも大きい値が存在するかを判断する。ターボトリガ閾値は、ターボモードに入るカウンタ値に対応してもよい。電力制御ユニットは、スレッドのターボモードカウンタの全てを分析して、ターボモードカウンタのうちの少なくとも１つが、この閾値を超える値を有するかを判断する。一実施形態では、方法３００を実装する電力制御ユニットは、トリガ閾値を超えるターボモードカウンタが存在するかを判断するＯＲ機能を実行してもよい。存在する場合には、制御はブロック３５５に移り、プロセッサドメインが以前にターボモードでなかった場合には、ターボモードがアクティブにされてもよい。プロセッサドメインがすでにターボモードである場合には、ターボモードが維持される。
【００３２】
図３には示されていないが、ある実施形態では、ターボモード閾値を超えた後に一定期間ターボモードに入るのを遅らせる、遅延メカニズムを実装することができる。この遅延期間は、ひし形３５０の判断段階の後で発生させてもよい。そして、遅延期間を発生させるタイマが満了した時に、再度、所定のターボモードカウンタが、トリガ閾値よりも大きいかを判断してもよい。トリガ閾値よりも大きい場合には、ブロック３５５においてターボモードに入り、そうでない場合には、ターボモードに入らない。本発明は、この点に関して限定されないが、この遅延タイマは、約０．１秒から１０秒の間の範囲であってもよい。
【００３３】
ひし形３５０において、ターボトリガ閾値を超える値を有するターボモードカウンタを有するスレッドが存在しないと判断された場合には、制御はひし形３６０に移り、ターボモードが現在アクティブになっているかを判断する。アクティブになっていない場合には、制御はブロック３７５に移り、そのプロセッサドメインについては、非ターボモードが維持される。ターボモードがアクティブである場合には、制御は、ひし形３６５に移り、そのプロセッサドメインのスレッドの最大ターボモードカウンタ値が、ターボディセーブル閾値未満であるかを判断する。ターボディセーブル閾値レベルは、ターボモードトリガ閾値よりも低いレベルに存在して、ターボモードにある場合に、トリガモード閾値を短期的に下回った場合に、ターボモードが終了しないようなヒステリシスの測定を提供する。このようにすることで、プログラムのバーストパターンを適合させて、ターボモードトリガ閾値レベル未満の小さなバーストが発生した場合でも、ターボモードを維持できる。プロセッサドメインの複数のスレッドのうちの少なくとも１つのターボモードカウンタ値が、少なくともディセーブル閾値を超えている限り、プロセッサドメインに対してターボモードが維持されてもよい（ブロック３８０）。プロセッサドメインの複数のスレッドの全てのターボモードカウンタ値が、このディセーブル閾値を下回る場合には、制御がブロック３７０に移り、このプロセッサドメインのターボモードが、ディセーブルされてもよい。図３の実施形態における特定の実装形態を参照して示されたが、本発明の範囲はこの点に関して限定されない。
【００３４】
表１には、本発明の一実施形態に係るシングルスレッドターボモード制御の結果が、様々な非Ｃ０Ｐ０／Ｃ０Ｐ０重みづけの場合のSPECpower使用率点で示されている。非ターボモードリクエストの重みづけが大きくなればなるほど、使用率点のターゲットが高くなる。これら結果により、重みづけが大きくなると、ターボモード継続期間が長くなることが明確に示されている。具体的には、表１の第１行目には、ベンチマークワークロードとして、６０％から１００％までの４段階が設定されている。表の第１列には、非ターボモードとターボモードとの間の様々な重みづけが示されており、表の第２列には、得られたターゲットのまたは閾値の使用率が示されている。残りの列には、プロセッサがターボモードで動作した期間の割合が示されている。
【表１】
0005782565.tif 000002
【００３５】
表２には、本発明の一実施形態に係るソケットレベルターボモード制御の結果、シングルスレッドの結果よりもSPECpower_ssj2008使用率点が低いことが示されており、これは、アクティブなスレッドの数が多くなるに従って、Ｐ０ターボリクエストの確率が増えることに起因する。ターボモードに入る使用率点を高くするのに、２つのパラメータが存在する。１つ目は、重みづけが高くなると、ターゲット使用率点が高くなる。２つ目は、遅延閾値によって、短期間のターボによるグリッチをフィルタして、使用率点の制御を正確にする。
【表２】
0005782565.tif 000003
【００３６】
次に、図４には、本発明の一実施形態に係る、プロセッサのブロック図が示されている。図４に示すように、プロセッサ４００は、複数のコア４１０ａ−４１０ｎを含むマルチコアプロセッサであってもよい。一実施形態では、各コアは、複数の電圧および／または周波数で動作してもよく、命令された通りにターボモードに入る。様々なコアが、インターコネクト４１５を介して、様々な構成要素を含むシステムエージェントまたは非コア４２０に連結されておよい。図に示すように、非コア４２０は、ラストレベルキャッシュであってもよい共有キャッシュ４３０を有してもよい。また、非コアは、統合メモリコントローラ４４０、様々なインターフェース４５０および電力制御ユニット４５５を有してもよい。
【００３７】
様々な実施形態において、電力制御ユニット４５５は、ＯＳ電力管理コードと通信を行ってもよい。例えば、ＯＳからのリクエストに基づいて、電力制御ユニット４５５は、ＰステートおよびＣステートのような適切なステータス情報、例えば、ＰステートおよびＣステート継続期間レジスタ４５６０−４５６ｎおよび４５７０−４５７ｎ、を更新してもよく、様々な実行スレッドに対してターボモードカウンタ４５８０−４５８ｘを維持してもよい。
【００３８】
電力制御ユニットは、ターボモードロジック４５９を有してもよい。様々な実施形態において、ロジック４５９は、例えば、図３を参照して上記で説明したようなターボモード分析を実装すると共に、Ｃ０Ｐ０と非Ｃ０Ｐ０間の重みづけを設定する設定オペレーションの一部、様々なターボモード閾値等を実装してもよい。
【００３９】
また、ターボモードロジック４５９は、ターボモードリクエストを受信して、適切なカウンタおよびレジスタを更新してもよい。電力制御ユニット４５５内の電力制御ループを実行する間に、ターボモードロジック４５９は、所定のスレッドのターボモードカウンタを分析して、ターボモードに入るべきか、出るべきかまたは維持するべきかを、カウンタの様々な値および対応する閾値に基づいて判断してもよい。このような分析に応じて、電力制御ユニット４５５は、複数の制御信号を生成して、１以上のドメインのコアを、ターボモードまたは非ターボモードで動作するようにしてもよい。このように、ターボモードロジック４５９は、プロセッサの使用率が、少なくとも相対的に高い閾値レベル、例えば、８０％以上になる場合にのみ、ターボモードへ入るまたはターボモードを維持することを可能にしてもよい。また、ある実施形態では、ターボモードロジック４５９は更に、所定のターボモードカウンタがトリガ閾値を超えた後に、ターボモードへ入るのを遅らせてもよく、それにより、スレッド実行の短いバーストによって、短期間のみターボモードに入るのを防ぐことができる。図４の実施形態では、特定のレベルの詳細が示されたが、本発明の範囲はこの点に関して限定されない。
【００４０】
図４に示すように、プロセッサ４００は、例えば、メモリバスを介して、システムメモリ４６０と通信を行ってもよい。さらに、インターフェース４５０によって、周辺機器、マスストレージデバイス等の様々なオフチップ構成要素との接続を行うことができる。図４の実施形態において、特定の実装形態がしめされたが、本発明の範囲はこの点に関して限定されない。
【００４１】
図５には、本発明の一実施形態に係る、プロセッサコアのブロック図が示されている。図５に示すように、プロセッサコア５００は、マルチステージ・パイプライン・アウトオブオーダプロセッサであってもよい。図５に示すように、コア５００は、様々な電圧および周波数（ターボモードにおいておよび非ターボモードにおいて）で動作してもよい。
【００４２】
図５に示すように、コア５００は、実行すべき命令をフェッチして、プロセッサで後の使用に備える、フロントエンドユニット５１０を備えてもよい。例えば、フロントエンドユニット５１０は、フェッチユニット５０１、命令キャッシュ５０３、命令デコーダ５０５を有してもよい。ある実装形態では、フロントエンドユニット５１０は更に、マイクロコード記憶部およびマイクロオペレーション記憶部と共に、トレースキャッシュを有してもよい。フェッチユニット５０１は、例えば、メモリまたは命令キャッシュ５０３から、マクロ命令をフェッチして、命令デコーダ５０５に供給し、これら命令を、プリミティブ、すなわち、プロセッサが実行するためのマイクロオペレーションへとデコードする。
【００４３】
フロントエンドユニット５１０と実行ユニット５２０との間には、アウトオブオーダ（ＯＯＯ）エンジン５１５が接続されており、マイクロ命令を受信して実行に備えるのに使用される。より詳細には、ＯＯＯエンジン５１５は、マイクロ命令フローを並び変えて、実行に必要な様々なリソースを割り当てる、並びに、論理レジスタのリネームを行い、レジスタファイル５３０および拡張レジスタファイル５３５のような様々なレジスタ内の記憶ロケーションに提供する、様々なバッファを有してもよい。レジスタファイル５３０は、整数および浮動小数点オペレーションのために、別個のレジスタファイルを含んでもよい。拡張レジスタファイル５３５は、ベクトルサイズの単位、例えば、２５６ビットまたは５１２ビット／レジスタの記憶部を提供してもよい。
【００４４】
実行ユニット５２０内には、様々リソースが存在してもよく、その他の専用ハードウェアのうち、特に、例えば、様々な、整数、浮動小数点、単一命令複数データ（ＳＩＭＤ）ロジックユニットを含んでもよい。例えば、このような実行ユニットは、特に、１以上の算術演算ユニット（ＡＬＵ）５２２を含んでもよい。
【００４５】
実行ユニットからの結果が、リタイアメントロジック、すなわち、リオーダバッファ（ＲＯＢ）５４０に提供されてもよい。詳細には、ＲＯＢ５４０は、実行される命令に関連する情報を受信する様々なアレイおよびロジックを含んでもよい。この情報は、ＲＯＢ５４０によって検証されて、命令が有効にリタイアされるか、得られるデータがプロセッサのアーキテクチャステートに準じているか、または、命令の適切なリタイアを阻害するような１以上の例外が発生しているか等を判断する。無論、ＲＯＢ５４０は、リタイアメントに関するその他のオペレーションを扱ってもよい。
【００４６】
図５に示すように、ＲＯＢ５４０は、一実施形態では、低いレベルのキャッシュ（例えば、Ｌ１キャッシュ）であってもよいキャッシュ５５０に接続されるが、本発明の範囲はこの点に関して限定されない。実行ユニット５２０を、キャッシュ５５０と直接接続することもできる。キャッシュ５５０から、データ通信が高レベルキャッシュ、システムメモリ等に行われる。図５の実施形態では高レベルの例が示されたが、本発明の範囲は、この点に関して限定されない。例えば、図５の実装形態は、いわゆるｘ８６命令セットアーキテクチャ（ＩＳＡ）のようなアウトオブオーダマシーンに関して示されたが、本発明の範囲はこの点に関して限定されない。すなわち、その他の実施形態では、インオーダプロセッサ、ＡＲＭベースのプロセッサのような縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、または、様々なＩＳＡのオペレーションおよび命令を、エミュレーションエンジンおよび関連するロジック回路を介してエミュレートできる別の種類のＩＳＡのプロセッサを実装してもよい。
【００４７】
実施形態は、様々な種類のシステムに実装できる。図６には、本発明の一実施形態に係るシステムのブロック図が示されている。図６に示すように、マルチプロセッサシステム６００は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト６５０を介して接続された第１プロセッサ６７０および第２プロセッサ６８０を備える。図６に示すように、プロセッサ６７０および６８０のそれぞれは、第１プロセッサコアおよび第２プロセッサコア（すなわち、プロセッサコア６７４ａおよび６７４ｂ、並びに、プロセッサコア６８４ａおよび６８４ｂ）を含むマルチプロセッサであってもよく、プロセッサ内に図示されたよりも多い数のコアが存在してもよい。プロセッサの１以上のドメインの各々は、上記したように、プロセッサの使用率が相対的に高い場合にのみ、ターボモードに入るように制御される。
【００４８】
図６に示すように第１プロセッサ６７０は更に、メモリ制御ハブ（ＭＣＨ）６７２並びにポイントツーポイント（Ｐ−Ｐ）インターフェース６７６および６７８を有する。同様に、第２プロセッサ６８０は、ＭＣＨ６８２およびＰ−Ｐインターフェース６８６および６８８を有する。図６に示すように、ＭＣＨ６７２および６８２は、プロセッサをそれぞれのメモリ、すなわち、プロセッサそれぞれにローカルに取り付けられるシステムメモリ（例えば、ＤＲＡＭ）の一部であってもよいメモリ６３２およびメモリ６３４に接続する。第１プロセッサ６７０および第２プロセッサ６８０を、Ｐ−Ｐ接続６５２および６５４をそれぞれ介して、チップセット６９０と接続してもよい。図６に示すように、チップセット６９０は、Ｐ−Ｐインターフェース６９４および６９８を有する。
【００４９】
更に、チップセット６９０は、チップセット６９０を高性能グラフィックスエンジン６３８にＰ−Ｐ接続６３９で接続するインターフェース６９２を有する。また、チップセット６９０は、インターフェース６９６を介して、第１バス６１６に接続されてもよい。図６に示すように、様々な入出力（Ｉ／Ｏ）デバイス６１４を、第１バス６１６に接続してもよく、第１バス６１６を第２バス６２０に接続するバスブリッジ６１８にも接続されてもよい。様々なデバイスを第２バス６２０に接続することができ、一実施形態では、例えば、キーボード／マウス６２２、通信デバイス６２６、および、コード６３０を含んでもよいその他のマスストレージデバイスまたはディスクドライブのようなデータ記憶ユニット６２８が含まれる。更に、オーディオＩ／Ｏ６２４を、第２バス６２０に接続してもよい。実施形態はその他の種類のシステムに組み込まれてもよく、例えば、スマートフォン、タブレットコンピュータ、ネットブック等のモバイルデバイスに組み込まれてもよい。
【００５０】
図７には、本発明の一実施形態に係る、ターボモード制御のシミュレーション結果が示されている。図７には、代表的なスレッド毎Ｃ０Ｐ０継続期間カウンタ（すなわち、本明細書に記載したターボモードカウンタ）が、SPECpower_ssj2008ワークロードに対してどのように反応するかを示した図である。Ｘ軸は、アプリケーションの開始から終了までの時間が示されている。Ｙ軸には、Ｃ０Ｐ０継続期間カウンタ値（例えば、代表的な閾値について）と共に、当該カウンタ値の様々な閾値レベルが示されている。特に、図７のＹ軸には、ディセーブル閾値７０５が示されており、ターボモードである間にカウンタの値がこの閾値を下回ると、ターボモードがディセーブルされる。しかしながら、カウンタ値がこの閾値を上回る場合には、ターボモードは、すでに開始されている場合にのみアクティブとなる。すなわち、ディセーブル閾値を超えるカウンタ値を有することが、直接ターボモードに入るを可能にすることにつながらない。カウンタ値が、ディセーブル閾値よりも高いレベルにあるトリガ閾値７１０を超える場合に、ターボモードに入ることがトリガされる。カウンタ値は、アプリケーションが命令を実行すると増加し、実行が停止されると急速に減少する。図示の例は、非Ｃ０Ｐ０／Ｃ０Ｐ０の重みづけが、上記で例示した８倍の場合である。ワークロードが８０％使用率になっても、８９％のターゲットを下回っていることから、ターボモードはトリガされない。上記の実施形態では、０．４秒であった、遅延閾値を超える期間の間、カウンタがトリガ閾値を超える短い期間が存在する。この遅延閾値を大きくする、例えば、１秒にすると、本例において、ターボモードの短いバーストを除外することができる。遅延閾値を、相対的に短い期間（例えば、約１秒未満）に維持すると、ターボモードに入る時に、応答時間を改善することができる。ある実施形態では、ターボモードカウンタを、例えば、最大カウンタ値に対応する所定の上限に留めるように構成することができる。スレッド毎のターボモードカウンタを、コアコアごとにＰステートを有するプロセッサで使用して、ソケット間のフィードバックおよび制御を伴うターボ決定を生成することができる。
【００５１】
このように、実施形態によれば、プロセッサが、所望のターボ効率点を調整する細かい制御を提供することにより、省電力で動作できると同時に高いパフォーマンスを提供することができる。また、本発明の一実施形態を使用することにより、ターボモードを、高い使用率レベルにおいてのみアクティブにすることができるため、高性能を必要とする場合にのみターボモードをアクティブとして電力効率を向上させることができる。
【００５２】
実施形態をコードに実装してもよく、命令を実行するようにシステムをプログラムするのに使用可能な命令を有する非一時的記憶媒体に格納されてもよい。記憶媒体としては、特にこれに限定されないが、フロッピー（登録商標）ディスク、光ディスク、ソリッドステートドライブ（ＳＳＤ）、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、再書き込み可能コンパクトディスク（ＣＤ−ＲＷ）、および、磁気光学ディスクのような任意の種類のディスク、リードオンリーメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）及びスタティックランダムアクセスメモリ（ＳＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、消去可能−プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、電気的消去可能−プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、磁気カードまたは光学カード、または、電気的命令を格納するのに適したその他の種類の媒体が含まれる。
【００５３】
本発明が、限定された数の実施形態を参照して説明されたが、当業者であれば、数多くの変形および改良が可能であることは理解できる。添付の特許請求の範囲は、このような変形例および改良例についても全て、本発明の範囲に含まれることを意図している。
本明細書によれば、以下の各項目に記載の構成もまた開示される。
［項目１］
複数のコアおよび電力制御ユニット（ＰＣＵ）を有するプロセッサを備え、
前記ＰＣＵは、対応するスレッドが第１パフォーマンスステートをリクエストしたかをそれぞれ示すパフォーマンスステートインジケータを複数格納する第１記憶部と、
前記対応するスレッドが第１コア電力ステートをリクエストしたかをそれぞれ示すコア電力ステートインジケータを複数格納する第２記憶部とを有し、
前記ＰＣＵは、前記第１記憶部および前記第２記憶部の情報に基づいて、ターボモードにすることを制御する、装置。
［項目２］
前記ＰＣＵは、それぞれが前記プロセッサで実行されるスレッドに関連付けられている複数のターボモードカウンタを有する、項目１に記載の装置。
［項目３］
第１のスレッドに対する前記パフォーマンスステートインジケータおよび前記コア電力ステートインジケータが、共に第１ステートである場合には、前記ＰＣＵは、ターボモードリクエストを示すべく、前記複数のターボモードカウンタのうちの前記第１のスレッドのターボモードカウンタを更新する、項目２に記載の装置。
［項目４］
前記パフォーマンスステートインジケータおよび前記コア電力ステートインジケータが、共に前記第１ステートである場合には、前記ＰＣＵは、第１重みづけに従って第１の方向に前記ターボモードカウンタを更新し、
前記パフォーマンスステートインジケータおよび前記コア電力ステートインジケータの少なくとも一方が、前記第１ステートでない場合には、前記ＰＣＵは、第２重みづけに従って第２の方向に前記ターボモードカウンタを更新し、
前記第２重みづけは、前記第１重みづけよりも大きい、項目３に記載の装置。
［項目５］
前記第１重みづけおよび前記第２重みづけは、ユーザが制御可能である、項目４に記載の装置。
［項目６］
前記プロセッサの使用率が、少なくとも第１閾値に等しくならない限り、前記ＰＣＵは、前記ターボモードに入ることを許可しない、項目１から５の何れか一項に記載の装置。
［項目７］
前記複数のターボモードカウンタのうちの少なくとも一つのターボモードカウンタの値が、トリガ閾値よりも大きい場合には、前記ＰＣＵは、前記プロセッサの少なくとも一部を前記ターボモードにする、項目２に記載の装置。
［項目８］
前記少なくとも一つのターボモードカウンタの前記値が、前記トリガ閾値よりも小さいが、ディセーブル閾値よりも大きい場合には、前記ＰＣＵは、前記プロセッサの前記少なくとも一部を前記ターボモードに維持する、項目７に記載の装置。
［項目９］
前記ＰＣＵは、前記プロセッサの前記少なくとも一部を、遅延期間だけ遅らせて、前記ターボモードにする、項目７に記載の装置。
［項目１０］
対応するスレッドのターボモードリクエストを受け取った場合には、第１重みづけに従って、プロセッサで実行される複数のスレッドのそれぞれに対応する複数のターボモードカウンタを更新し、前記対応するスレッドの非ターボモードリクエストに応じて、前記第１重みづけよりも大きな第２重みづけに従って、前記複数のターボモードカウンタを更新する段階と、
前記複数のターボモードカウンタのうちの少なくとも一つの値が、ターボモードトリガ閾値を超えているかを判断する段階と、
超えている場合には、前記プロセッサの少なくとも一部をターボモードにする段階と、を備える方法。
［項目１１］
前記複数のターボモードカウンタのうちの少なくとも１つの値が、ターボモードディセーブル閾値未満であるかを判断する段階と、
前記ターボモードディセーブル閾値未満である場合には、前記プロセッサの前記少なくとも一部の前記ターボモードを終了させる段階とを更に備える、項目１０に記載の方法。
［項目１２］
前記複数のスレッドのうちの第１スレッドが前記ターボモードをリクエストしたこと示すべく、パフォーマンスステート記憶部を更新する段階を更に備える、項目１０に記載の方法。
［項目１３］
前記第１スレッドが最大コア電力ステートをリクエストしたことを示すべく、コア電力ステート記憶部を更新する段階を更に備える、項目１２に記載の方法。
［項目１４］
前記第１スレッドの前記パフォーマンスステート記憶部および前記コア電力ステート記憶部の値に基づいて、前記複数のターボモードカウンタのうちの前記第１スレッドのターボモードカウンタを更新する段階を更に備える、項目１３に記載の方法。
［項目１５］
前記プロセッサの使用率が第１閾値を超えない限り、前記ターボモードに入ることがないように、前記第１重みづけおよび前記第２重みづけが設定される、項目１０に記載の方法。
［項目１６］
前記少なくとも一つのターボモードカウンタの値が、前記ターボモードトリガ閾値を超えた後に、前記ターボモードにするのを第１期間だけ遅らせる段階を更に備える、項目１０から１５の何れか一項に記載の方法。
［項目１７］
前記第１期間の終了時に、前記少なくとも一つのターボモードカウンタ値が前記ターボモードトリガ閾値を超えているかを判断する段階と、
超えている場合には、前記ターボモードにし、超えていない場合には、前記ターボモードにしない段階とを更に備える、項目１６に記載の方法。
［項目１８］
プロセッサと、
前記プロセッサに接続されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを備え、
前記プロセッサは、それぞれが少なくとも一つのコアを有する複数のドメインと、電力制御ロジックとを有し、
前記複数のドメインはそれぞれ、独立した周波数で動作し、
前記電力制御ロジックは、コア電力とパフォーマンスとの組み合わせのカウントを格納するカウンタの値と、第１閾値との比較に基づいて、第１ドメインをターボモードにする、システム。
［項目１９］
前記電力制御ロジックは、前記第１ドメインのターボモードリクエストを受け取った場合には、第１重みづけに従って前記カウンタを更新し、前記第１ドメインの非ターボモードリクエストを受け取った場合には、第２重みづけに従って前記カウンタを更新し、
前記第２重みづけは、前記第１重みづけよりも大きい、項目１８に記載のシステム。
［項目２０］
前記電力制御ロジックは、前記ターボモードリクエストに応じて、前記カウンタを第１の方向に更新し、前記非ターボモードリクエストに応じて、前記カウンタを第２の方向に更新する、項目１９に記載のシステム。
［項目２１］
前記第１重みづけおよび前記第２重みづけにより、前記プロセッサの使用率閾値が設定され、
前記使用率閾値未満では、前記電力制御ロジックが前記ターボモードにしない、項目１９に記載のシステム。
［項目２２］
前記電力制御ロジックは、前記カウンタの値が前記第１閾値を超えた後に、第１期間だけ、前記ターボモードにするのを遅らせる、項目１９から２１の何れか一項に記載のシステム。
【図１】
0005782565.tif 000004
【図２】
0005782565.tif 000005
【図３】
0005782565.tif 000006
【図４】
0005782565.tif 000007
【図５】
0005782565.tif 000008
【図６】
0005782565.tif 000009
【図７】
0005782565.tif 000010