(57)【特許請求の範囲】
【請求項１】
処理パフォーマンスを向上させる処理装置であって、
複数のアプリケーション毎のハードウェアデバイスのハードウェアパラメータ設定を記憶するように構成されたメモリと、
前記メモリと通信するように構成されたプロセッサと、を備え、
前記プロセッサは、
前記複数のアプリケーションのうち１つのアプリケーションを前記ハードウェアデバイスにおいて現在実行中のアプリケーションとして識別することと、
前記現在実行中のアプリケーションの１つのハードウェアパラメータ設定を前記メモリから取得することであって、取得された前記１つのハードウェアパラメータ設定は、アクティビティレベル閾値を含む、ことと、
前記現在実行中のアプリケーションが第１期間内に前記ハードウェアデバイスにおいて実行されている時間の割合に基づいて、前記第１期間の実際のアクティビティレベルを決定することと、
前記実際のアクティビティレベルと前記アクティビティレベル閾値との比較に基づいて複数のハードウェアパラメータを調整することによって、ハードウェアの動作を制御することと、を行うように構成されている、
処理装置。
【請求項２】
前記ハードウェアデバイスは、前記アプリケーションを実行するように構成された複数のプロセッサタイプを含むアクセラレーテッド処理デバイスである、
請求項１の処理装置。
【請求項３】
前記プロセッサは、アプリケーション識別情報と、前記現在実行中のアプリケーションに提供されるアプリケーションプログラミングインタフェースを識別するためのアプリケーションプログラミングインタフェース識別情報と、を用いて、前記現在実行中のアプリケーションを識別するようにさらに構成されている、
請求項１の処理装置。
【請求項４】
前記ハードウェアパラメータ設定は、ハードウェア識別情報を含み、前記ハードウェアパラメータ設定は、前記ハードウェア識別情報によって識別された前記ハードウェアデバイスの動作を制御するのに使用される、
請求項１の処理装置。
【請求項５】
前記複数のハードウェアパラメータは、現在実行中のプログラムを実行しながら、前記ハードウェアデバイスによって消費される電力を制御するように構成された電力管理パラメータであり、
前記プロセッサは、前記現在実行中のアプリケーションの前記ハードウェアパラメータ設定に従って複数の電力管理パラメータを調整することによって、前記ハードウェアデバイスによって消費される電力を制御するようにさらに構成されている、
請求項１の処理装置。
【請求項６】
前記電力管理パラメータは、クロック電圧パラメータ及び前記第１期間のアクティビティレベル閾値パラメータを含み、
前記プロセッサは、
前記ハードウェアデバイスの前記クロック電圧パラメータの値を変更することによって、前記複数のハードウェアパラメータを調整する、
請求項５の処理装置。
【請求項７】
前記プロセッサは、
前記現在実行中のアプリケーションのハードウェアパラメータ設定が記憶されているかどうかを判別し、
前記現在実行中のアプリケーションのハードウェアパラメータ設定が記憶されていないと判別した場合に、記憶されたグローバルハードウェアパラメータ設定に従って前記ハードウェアデバイスの前記ハードウェアパラメータを調整する、ようにさらに構成されている、
請求項１の処理装置。
【請求項８】
前記プロセッサは、構成ファイルを使用することによって前記ハードウェアの動作を制御するように構成されたデバイスドライバとは別の構成ファイルに前記ハードウェアパラメータ設定を記憶するようにさらに構成されている、
請求項１の処理装置。
【請求項９】
前記プロセッサは、１つ以上のアプリケーションの新たなパラメータ設定を受信した場合に、前記デバイスドライバを変更することなく前記構成ファイルを更新するようにさらに構成されている、
請求項８の処理装置。
【請求項１０】
前記メモリは、実行可能なデバイスドライバを記憶するようにさらに構成されており、
前記プロセッサは、
前記ハードウェアパラメータ設定を非実行構成ファイルに記憶し、
前記実行可能なデバイスドライバを使用して、前記非実行構成ファイルに記憶されている前記記憶されたハードウェアパラメータ設定に従って前記複数のハードウェアパラメータを調整することによって、前記ハードウェアの動作を制御する、ようにさらに構成されている、
請求項１の処理装置。
【請求項１１】
電力パフォーマンス管理のコンピュータ実行方法であって、
複数のアプリケーション毎のハードウェアデバイスのハードウェアパラメータ設定を受信することと、
前記複数のアプリケーションのうち１つのアプリケーションを実行することと、
前記アプリケーションを前記ハードウェアデバイスにおいて現在実行中のアプリケーションとして識別することと、
前記現在実行中のアプリケーションの１つのハードウェアパラメータ設定をメモリから取得することであって、取得された前記１つのハードウェアパラメータ設定は、アクティビティレベル閾値を含む、ことと、
前記現在実行中のアプリケーションが第１期間内に前記ハードウェアデバイスにおいて実行されている時間の割合に基づいて、前記第１期間の実際のアクティビティレベルを決定することと、
前記実際のアクティビティレベルと前記アクティビティレベル閾値との比較に基づいて前記ハードウェアデバイスの複数のハードウェアパラメータを調整することによって、前記ハードウェアデバイスの動作を制御することと、を含む、
方法。
【請求項１２】
識別された前記現在実行中のアプリケーションのハードウェアパラメータ設定が記憶されているかどうかを判別することと、
識別された前記現在実行中のアプリケーションのハードウェアパラメータ設定が記憶されていないと判別した場合に、記憶されたグローバルハードウェアパラメータ設定に従って前記ハードウェアデバイスの前記ハードウェアパラメータを調整することと、をさらに含む、
請求項１１の方法。
【請求項１３】
前記現在実行中のアプリケーションに１つ以上のアプリケーションプログラミングインタフェースを提供することをさらに含み、前記現在実行中のアプリケーションを識別することは、前記現在実行中のアプリケーションに提供された１つ以上のアプリケーションプログラミングインタフェースを識別することを含む、
請求項１１の方法。
【請求項１４】
構成ファイルに記憶されたハードウェアパラメータ設定を使用することによって前記ハードウェアデバイスの動作を制御するように構成されたデバイスドライバとは別の構成ファイルに前記ハードウェアパラメータ設定を記憶することをさらに含む、
請求項１１の方法。
【請求項１５】
前記ハードウェアパラメータ設定が前記複数のアプリケーションの各々に対して記憶されている場合に、前記デバイスドライバを変更することなく前記構成ファイルを更新することをさらに含む、
請求項１４の方法。
【請求項１６】
前記複数のハードウェアパラメータは、前記現在実行中のアプリケーションの記憶されたハードウェアパラメータ設定に従って複数の電力管理パラメータを調整することによって、前記ハードウェアデバイスによって消費される電力を制御するための電力管理パラメータである、
請求項１１の方法。
【請求項１７】
前記電力管理パラメータは、クロック電圧パラメータ及び前記第１期間のアクティビティレベル閾値パラメータを含み、
前記ハードウェアデバイスの前記複数のハードウェアパラメータは、前記クロック電圧パラメータの値を変更することによって調整される、
請求項１６の方法。
【請求項１８】
前記ハードウェアデバイスの動作を制御するための命令を含む実行可能デバイスドライバを記憶することと、
前記ハードウェアパラメータ設定を非実行構成ファイルに記憶することと、
前記実行可能なデバイスドライバを使用して、前記非実行構成ファイルに記憶されている前記ハードウェアパラメータ設定に従って前記複数のハードウェアパラメータを調整することによって、前記ハードウェアデバイスの動作を制御することと、をさらに含む、
請求項１７の方法。
【請求項１９】
処理パフォーマンスを向上させる電力パフォーマンス管理方法をコンピュータに実行させるための命令を含むコンピュータ可読記憶媒体であって、
前記命令は、
複数のアプリケーション毎のハードウェアパラメータ設定を記憶することと、
前記複数のアプリケーションのうち１つのアプリケーションを実行することと、
前記１つのアプリケーションを現在実行中のアプリケーションとして識別することと、
前記現在実行中のアプリケーションの１つのハードウェアパラメータ設定をメモリから取得することであって、取得された前記１つのハードウェアパラメータ設定は、アクティビティレベル閾値を含む、ことと、
前記現在実行中のアプリケーションが第１期間内にハードウェアデバイスにおいて実行されている時間の割合に基づいて、前記第１期間の実際のアクティビティレベルを決定することと、
前記実際のアクティビティレベルと前記アクティビティレベル閾値との比較に基づいて前記ハードウェアデバイスのハードウェアパラメータを調整することによって、前記ハードウェアデバイスの動作を制御することと、を含む、
コンピュータ可読記憶媒体。
【請求項２０】
前記命令は、
前記複数のアプリケーション毎に、構成ファイルに記憶されたハードウェアパラメータ設定を使用することによって前記ハードウェアデバイスの動作を制御するように構成されたデバイスドライバとは別の構成ファイルに前記ハードウェアパラメータ設定を記憶することと、
前記ハードウェアパラメータ設定が前記複数のアプリケーションの各々に対して記憶されている場合に、前記デバイスドライバを変更することなく前記構成ファイルを更新することと、をさらに含む、
請求項１９のコンピュータ可読記憶媒体。
【請求項２１】
前記アクティビティレベル閾値は、前記現在実行中のアプリケーションが第２期間内に前記ハードウェアデバイスにおいて実行されている時間の割合を表す、
請求項１の処理装置。
【請求項２２】
前記第１期間の長さは前記第２期間と等しい、
請求項２１の処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年１１月１８日に出願された米国特許出願第１５／３５５，５６９号の利益を主張するものであり、この内容は参照により本明細書に完全に記載されているものとして援用される。
【背景技術】
【０００２】
いくつかの処理デバイスのハードウェアは、ハードウェアの動作を制御するのに使用されるデバイス（例えば、ファームウェア）に記憶されたハードウェアパラメータによって管理される。これらのパラメータの設定（すなわち、動的電力管理（ＤＰＭ）設定）は、ハードウェアのパフォーマンスと、アプリケーションの実行等の様々な機能を実行するためにハードウェアによって消費される電力と、の両方に影響を及ぼす。また、パフォーマンスと消費電力とは相互に依存する。例えば、ハードウェアのパフォーマンスレベルを上げると、多くの場合、消費電力量が増える。一方、ＤＰＭ設定は、従来、ドライバソフトウェアにハードコードされており、ドライバソフトウェアを変更しない限り変更することができない。
【０００３】
添付図面と併せて例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【０００４】
【図１】電力パフォーマンス管理のためのアプリケーションプロファイリングが実施される例示的なデバイスの図である。
【図２】図１に示すアクセラレーテッド処理デバイスにおける処理タスクの実行に関連する更なる詳細を示すブロック図である。
【図３】例示的な電力パフォーマンス管理システムにおける例示的な相互接続及び情報フローを示すブロック図である。
【図４】電力パフォーマンスを管理するためのハードウェアパラメータ設定を受信する例示的な方法を示すフローチャートである。
【図５】アプリケーション実行時の例示的な電力パフォーマンス管理方法を示すフローチャートである。
【発明を実施するための形態】
【０００５】
特定用途向け集積回路（ＡＳＩＣ）等の特定の集積回路（ＩＣ）に対してグローバルＤＰＭ設定を提供する取組みが進められている。しかしながら、このようなグローバル設定によって、パフォーマンスレベルが変化する。例えば、グローバル設定にてＩＣ上で実行されるアプリケーションが第１パフォーマンスレベル（例えば、高品質のビデオ表示をレンダリングするパフォーマンスレベル）で実行される一方で、当該ＩＣ上で実行される別のアプリケーションが第２パフォーマンスレベル（例えば、低品質のビデオ表示をレンダリングするパフォーマンスレベル）で実行される。
【０００６】
本願は、デバイス上で実行されるアプリケーション毎にカスタマイズされたハードウェアパラメータ設定を利用することによって、電力及びパフォーマンスを管理する装置及び方法を開示する。また、カスタマイズには、各アプリケーションプログラミングインタフェース（ＡＰＩ）及びデバイスの各プロセッサのハードウェアパラメータ設定が含まれる。ハードウェアパラメータ設定は、デバイスドライバを変更せずにドライバスタックの構成ファイルを変更する（すなわち、上書きする）ことによって、アプリケーション毎にカスタマイズされる。アプリケーションのハードウェアパラメータ設定は、デバイスのファームウェアに記憶されたハードウェアパラメータを調整して（例えば、ハードウェアパラメータの値を設定して）、ハードウェアによって消費される電力を制御し、他のアプリケーションの実行時にパフォーマンスに影響を与えることなく当該アプリケーションを実行し、パフォーマンスレベルを維持するために使用される。
【０００７】
本願は、複数のアプリケーション毎のハードウェアパラメータ設定を記憶するように構成されたメモリを含む処理装置を提供する。また、処理装置は、メモリと通信するように構成されたプロセッサを備え、プロセッサは、ハードウェアパラメータ設定をメモリに記憶し、複数のアプリケーションのうち１つのアプリケーションを現在実行中のアプリケーションとして識別し、識別されたアプリケーションの記憶されたハードウェアパラメータ設定に従って複数のハードウェアパラメータを調整することによって、ハードウェアの動作を制御するように構成されている。
【０００８】
本願は、電力パフォーマンス管理のコンピュータ実行方法を提供する。方法は、複数のアプリケーション毎のハードウェアパラメータ設定を受信することと、ハードウェアパラメータ設定を記憶することと、複数のアプリケーションのうち１つのアプリケーションを実行することと、実行中のアプリケーションを識別することと、識別された実行中のアプリケーションの記憶されたハードウェアパラメータ設定に従ってハードウェアパラメータを調整することによって、ハードウェアの動作を制御することと、を含む。
【０００９】
本願は、電力パフォーマンス管理方法をコンピュータに実行させる命令を含む非一時的なコンピュータ可読記憶媒体を提供する。命令は、複数のアプリケーション毎のハードウェアパラメータ設定を記憶することと、複数のアプリケーションのうち１つのアプリケーションを実行することと、実行中のアプリケーションを識別することと、識別された実行中のアプリケーションの記憶されたハードウェアパラメータ設定に従ってハードウェアパラメータを調整することによって、ハードウェアの動作を制御することと、を含む。
【００１０】
本明細書において、プログラムは、手順又はルーチン（例えば、動作、計算、機能、プロセス、ジョブ）を実行するために、１つ以上のプロセッサを使用して実行される任意の命令シーケンスを含む。本明細書において、プログラムされた命令（例えば、アプリケーション、ドライバ、オペレーティングシステム又は他のソフトウェア等）のプロセッサ上での実行には、プログラムされた命令の特定の部分（例えば、フルスクリーンでのビデオのレンダリング）のフェッチ、デコード、実行のスケジューリング、実行の開始及び実行等の複数のステージの何れかが含まれるが、これらに限定されない。プログラムされた命令には、ハードウェアの動作を制御するのに使用される調整可能な（すなわち、変更可能な）値を有するパラメータ設定（例えば、ハードウェアパラメータ設定等）及びパラメータ（例えば、ハードウェアパラメータ）が含まれる。
【００１１】
図１は、例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含む。図１に示すように、例示的なデバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージ１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、入力ドライバ１１２と、出力ドライバ１１４と、を含む。デバイス１００は、図１に示されていない別のコンポーネントを含み得ることが理解されるであろう。
【００１２】
プロセッサ１０２の例示的なプロセッサタイプは、ＣＰＵ、ＧＰＵ、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵである。メモリ１０４は、例えば、プロセッサ１０２と同じダイ上に配置されるか、プロセッサ１０２とは別に配置されている。メモリ１０４の例示的なメモリタイプは、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ又はキャッシュ）と、以下により詳細に説明するように、例えばハードウェアパラメータを含むファームウェアを記憶するように構成された不揮発性メモリ（例えば、ハードディスク、マザーボードのブートリードオンリメモリ（ＲＯＭ）及びＢＩＯＳメモリ）と、を含む。
【００１３】
ストレージ１０６の例示的なストレージタイプは、固定又は着脱可能なストレージ（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等）を含む。入力デバイス１０８の例示的な入力デバイスタイプは、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。出力デバイス１１０の例示的な出力デバイスタイプは、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。
【００１４】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信するのを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信するのを可能にする。入力ドライバ１１２及び出力ドライバ１１４はオプションのコンポーネントであり、入力ドライバ１１２及び出力ドライバ１１４が存在しない場合であっても、デバイス１００が同様に動作することに留意されたい。
【００１５】
図１に示すように、出力ドライバ１１４（例えば、グラフィックスカード）は、ディスプレイデバイス１１８に接続されたアクセラレーテッド処理デバイス（ＡＰＤ）１１６を含む。ＡＰＤ１１６は、プロセッサ１０２から計算コマンド及びグラフィックスレンダリングコマンドを受信し、これらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、表示用のピクセル出力をディスプレイデバイス１１８に提供するように構成されている。以下にさらに詳細に説明するように、ＡＰＤ１１６は、単一命令複数データ（ＳＩＭＤ）パラダイムに従って計算を実行するように構成された１つ以上の並列処理装置を含む。本明細書では、様々な機能が、ＡＰＤ１１６によって又はＡＰＤ１１６と共に実行されるものとして説明されているが、ＡＰＤ１１６によって実行されると説明された機能は、ホストプロセッサ（例えば、プロセッサ１０２）によって駆動されずに、グラフィックス出力をディスプレイデバイス１１８に提供するように構成された同様の機能を有する他のコンピューティングデバイスによっても実行される。本明細書で説明する機能は、例えば、ＳＩＭＤパラダイムに従って処理タスクを実行する任意の処理システムによって実行される。或いは、本明細書で説明する機能は、ＳＩＭＤパラダイムに従って処理タスクを実行しないコンピューティングシステムによって実行される。
【００１６】
図２は、図１に示すデバイス１００のＡＰＤ１１６における処理タスクの実行に関連する更なる詳細を示すブロック図である。プロセッサ１０２は、プロセッサ１０２によって実行されるプログラムされた命令を含む１つ以上の制御論理モジュールをシステムメモリ１０４内に保持している。また、プログラムされた命令は、プロセッサ１０２（例えば、ＣＰＵ）に含まれてもよい。制御論理モジュールは、オペレーティングシステム１２０と、デバイスドライバ１２２（例えば、カーネルモードドライバ、ユーザモードドライバ、ユニバーサルモードドライバ）と、ＡＰＤ１１６上で実行されるアプリケーション１２６と、実行可能アプリケーション１２６の各々に対する所定のハードウェアパラメータ設定を記憶する構成命令１２４（例えば、構成ファイル、ＢＬＯＢファイル、拡張ファイル等の内部の命令）と、を含む。図２に示すように、デバイスドライバ１２２及び構成命令１２４は、ドライバスタック１２５の一部である。また、ドライバスタック１２５は、例えば、各アプリケーションの実行中にハードウェアによる電力消費を管理するためのハードウェアパラメータ（例えば、クロック速度パラメータ、クロック電圧パラメータ、クロックゲーティングパラメータ）の調整をサポートする、プログラムされた命令を含む。
【００１７】
これらの制御論理モジュールは、プロセッサ１０２及びＡＰＤ１１６の動作の様々な態様を制御する。例えば、オペレーティングシステム１２０は、ハードウェア（例えば、ＣＰＵ、ＧＰＵ及び計算ユニット１３２）と直接通信し、プロセッサ１０２上で実行される他のソフトウェアのためのハードウェアへのインタフェースを提供する。デバイスドライバ１２２は、例えば、ＡＰＤ１１６の様々な機能にアクセスするために、プロセッサ１０２上で実行されるソフトウェア（例えば、アプリケーション１２６）にＡＰＩを提供することによって、ＡＰＤ１１６の動作を制御する。また、デバイスドライバ１２２は、ＡＰＤ１１６のコンポーネントを処理することによって、実行されるプログラムをコンパイルするジャストインタイムコンパイラを含む。
【００１８】
ＡＰＤ１１６は、例えば、並列処理を実行するのに適したグラフィックス動作や非グラフィックス動作等の選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、例えば、ピクセル演算、幾何学的計算、及び、プロセッサ１０２から受信したコマンドに基づいて画像をディスプレイデバイス１１８にレンダリングする等のグラフィックスパイプライン動作を実行するために使用される。また、ＡＰＤ１１６は、プロセッサ１０２から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学、又は、他のタスクに関連する動作等のように、グラフィックス動作に直接関連しない計算処理動作を実行する。
【００１９】
ＡＰＤ１１６の例示的なプロセッサタイプは、ＣＰＵ、ＧＰＵ、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコア（すなわち、計算ユニット）１３２を含み、各プロセッサコアは、ＣＰＵ又はＧＰＵである。各計算ユニット（すなわち、計算コア）１３２は、ＳＩＭＤパラダイムに従って、プロセッサ１０２の要求に応じて動作を並列に実行するように構成された１つ以上のＳＩＭＤユニット１３８を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、これにより同じプログラムを実行するが、異なるデータを用いてそのプログラムを実行することができるというものである。一例では、各ＳＩＭＤユニット１３８は、１６個のレーンを含み、各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いてその命令を実行することができる。全てのレーンが特定の命令を実行する必要がない場合には、予測（predication）を用いてレーンをオフにすることができる。また、予測を用いて、異なる制御フローを有するプログラムを実行することができる。より具体的には、制御フローが、個々のレーンによって実行される計算に基づく条件付き分岐又は他のプログラムの場合には、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスを順次実行することにより、任意の制御フローが可能になる。
【００２０】
スケジューラ１３６は、異なる計算ユニット１３２及びＳＩＭＤユニット１３８上で様々な実行ユニット（例えば、ワークグループ及びウェーブフロント等）のスケジューリングに関連する動作を実行するように構成されている。ＡＰＤ１１６上での処理タスクの実行は、ピクセル値計算、頂点変換、及び、他のグラフィックス動作等のグラフィックス関連動作に適している。したがって、プロセッサ１０２からグラフィックス処理コマンドを受信するグラフィックスパイプライン１３４は、並列実行のために計算タスクを計算ユニット１３２に提供することができる。
【００２１】
また、計算ユニット１３２は、グラフィックスに関連しない計算タスク、又は、グラフィックスパイプライン１３４の「通常」動作の一部として実行されない計算タスク（例えば、グラフィックスパイプライン１３４の動作のために実行される処理を補足するために実行されるカスタム動作）を実行するために使用される。プロセッサ１０２上で実行されるアプリケーション１２６又は他のソフトウェアは、このような計算タスクを定義するプログラムを、実行のためにＡＰＤ１１６に送信する。
【００２２】
図３は、例示的な電力パフォーマンス管理システムにおける例示的な相互接続及び情報フローを示すブロック図３００である。図３に示すように、システムは、ＡＰＩ３０２（１つ以上のＡＰＩを表す）が設けられたアプリケーション１２６と、デバイスドライバ１２２及び構成命令１２４を含むドライバスタック１２５と、デバイス３０４で実行するように構成されたファームウェア３０６を含むデバイス３０４（例えば、図１に示す出力ドライバ１１４）と、を含む。
【００２３】
ドライバスタック１２５は、オペレーティングシステム１２０と、ファームウェア３０６及び構成命令１２４との間のインタフェースに使用されるデバイスドライバ１２２を含む。構成命令１２４は、処理されるアプリケーション１２６毎に、各アプリケーション１２６の実行中にハードウェアの動作を制御するように構成された複数のハードウェアパラメータを調整するのに使用される所定の（例えば、アプリケーションの実行時に決定される）ハードウェアパラメータ設定を含む。
【００２４】
ファームウェア３０６は、デバイス３０４（例えば、グラフィックスカード）のハードウェアの動作を制御し、デバイス３０４のハードウェア（例えば、ＡＰＤ１１６）とデバイスドライバ１２２との間のインタフェースを提供するためのハードウェアパラメータ及び関連値を含む。上述したように、ファームウェアは、不揮発性メモリ（例えば、ハードディスク、マザーボードブートリードオンリメモリ（ＲＯＭ）、ＢＩＯＳメモリ）に記憶されている。プロセッサ１０２は、実行中のアプリケーションを識別するように構成されている。例えば、図３に示すように、デバイス３０４のＡＰＤ１１６上で実行されているアプリケーション（例えば、出力ドライバ１１４）が識別され、ファームウェア３０６が不揮発性メモリ（例えば、メモリ１０４の一部）から読み出され、デバイス３０４で処理される。或いは、出力ドライバを含まないデバイス１００のプロセッサ上で実行されるアプリケーションが識別される。ファームウェア３０６は、デバイスドライバ１２２と共に、ハードウェア（例えば、出力ドライバ１１４のＡＰＤ１１６、デバイス１００の１つ以上の他のプロセッサ、並びに、エンコーダ、デコーダ、メモリセル及び回路（図示省略））の動作を制御するために使用される。
【００２５】
ハードウェアパラメータの例には、動的電力管理（ＤＰＭ）パラメータ（例えば、クロック速度パラメータ、クロック電圧パラメータ、クロックゲーティングパラメータ）、メモリタイミングパラメータ、発熱（例えば、熱設計電力（ＴＤＰ））、及び、識別されたアプリケーションを実行するために電力分配を制御するのに使用される他のパラメータが含まれる。ＡＰＤ１１６は、例えば、オペレーティングシステム１２０と、デバイスドライバ１２２と、構成命令１２４とを使用して、アプリケーション１２６を実行する（例えば、実行をスケジュールし、実行する）ように構成されている。例えば、オペレーティングシステム１２０は、ファームウェア３０６と通信し、ＡＰＤ１１６上で実行されているアプリケーション１２６に対してハードウェアへのインタフェースを提供する。デバイスドライバ１２２は、例えば、ＡＰＤ１１６上で実行されているアプリケーション１２６にＡＰＩ３０２を提供して、ＡＰＤ１１６の様々な機能にアクセスすることによって、ＡＰＤ１１６の動作を制御する。
【００２６】
プロセッサ１０２は、例えば、アプリケーション名を介して、デバイス３０４で実行されているアプリケーションを識別する。また、プロセッサ１０２は、アプリケーション１２６によって使用されるＡＰＩ３０２を識別するＡＰＩ識別子を介して、実行中のアプリケーション１２６を識別するように構成されている。ＡＰＩ３０２は、例えば、デバイスドライバ１２２とインタフェースする（例えば、デバイスドライバ１２２に要求する）ために使用される命令を含む。ＡＰＩの例としては、オープンコンピューティング言語（ＯｐｅｎＣＬ）、オープングラフィックスライブラリ（ＯｐｅｎＧＬ）及びＤｉｒｅｃｔＸ  ＡＰＩが挙げられるが、これらに限定されない。
【００２７】
アプリケーション１２６用のハードウェアパラメータ設定は、構成命令１２４に記憶されている。新たなアプリケーションが特定のプロセッサ又はデバイス（例えば、グラフィックスカード）による実行のために利用可能（例えば、実行可能）になると、アプリケーション１２６は、提供されたＡＰＩ３０２を使用して、異なる電力消費レベル及びパフォーマンスレベルをもたらす異なるパラメータ設定を有するデバイスに対してテストされる（例えば、実行される）。各デバイス（例えば、デバイス１００、出力ドライバ１１４、デバイス３０４）は、ハードウェア（例えば、ＩＣ、プロセッサ１０２又はＡＰＤ１１６等のプロセッサ、メモリセル、エンコーダ、デコーダ及び回路）を含む。ハードウェアは、例えば、ハードウェア識別子（例えば、デバイスＩＤやリビジョンＩＤ等）を用いて識別される。識別されたハードウェアのハードウェアパラメータ設定が新たなアプリケーション１２６に対して決定されると、この設定は、例えば、更新された構成命令の一部（例えば、構成ファイル、ＢＬＯＢファイル又は他のファイル）として、ネットワーク（図示省略）を介して送信される。デバイス（例えば、出力ドライバ１１４、デバイス３０４）及びハードウェア（例えば、ＡＰＤ１１６）を含む設定が、（例えば、デバイス１００において）受信される。更新された構成命令がデバイス１００で受信されると、新たなアプリケーション１２６のパラメータ設定は、デバイスドライバ１２２を変更することなくドライバスタック１２５の構成命令１２４を上書きすることによって、（例えば、プロセッサ１０２を介して）デバイス１００の揮発性メモリ（例えば、メモリ１０４の揮発性部分）に記憶される。
【００２８】
実行中のアプリケーション１２６が識別されると、プロセッサ１０２は、（例えば、デバイス３０４において）ファームウェアを実行し、実行中のアプリケーション１２６に対応する構成命令１２４に記憶されたハードウェアパラメータ設定に従って複数のハードウェアパラメータ（例えば、クロック電圧）を調整することによって、ハードウェアの動作を制御する。調整は、構成命令１２４に記憶されたハードウェアパラメータ設定に従って、ハードウェアパラメータに関連する値を設定することによって実行される。例えば、実行中のアプリケーション１２６が識別されると、デバイスドライバ１２２は、構成命令１２４を解析し、識別されたアプリケーション１２６及びＡＰＩ３０２についての設定を構成命令１２４から読み出す。記憶されたデータは、記憶された設定をサポートして電力及びパフォーマンスを管理するデバイスドライバ１２２（例えば、カーネルモードドライバ）及び追加の構造体に渡される。
【００２９】
記憶された設定には、例えば、ハードウェアのアクティビティレベルと、アクティビティレベル閾値パラメータの値との比較に基づいて、クロック電圧パラメータの値を増減することが含まれる。ハードウェアのアクティビティレベルと、アクティビティレベル閾値パラメータの値とは、例えば、プロセッサがサンプリング間隔（例えば、１０ｍｓ）中に実行する時間の割合若しくは比率、プロセッサがサンプリング間隔中に実行する回数、又は、サンプリング間隔中に実行するプロセッサのアクティビティレベルを測定するための別のメトリックに対応する。例えば、サンプリング間隔中のハードウェアのアクティビティレベルがアクティビティレベル閾値パラメータの値よりも小さい場合には、クロック電圧パラメータの値が減少し、サンプリング間隔中のハードウェアのアクティビティレベルがアクティビティレベル閾値パラメータの値以上の場合には、クロック電圧パラメータの値が増加する。また、この設定には、例えば、クロック電圧パラメータの値に対する制限を設定することが含まれる。
【００３０】
図４は、電力パフォーマンスを管理するためのハードウェアパラメータ設定を受信する例示的な方法を示すフローチャート４００である。
【００３１】
図４のブロック４０２に示すように、方法４００は、ハードウェアの動作を制御するために使用される複数のハードウェアパラメータに対するハードウェアパラメータ設定を、（例えば、デバイス識別子を介して）デバイスにおいて受信することを含む。例えば、カスタマイズされたハードウェア設定は、現在記憶されている構成命令を更新するために、ネットワーク（図示省略）を介して、構成命令（例えば、構成ファイル）のセットの一部としてデバイスにおいて受信される。
【００３２】
方法４００のブロック４０４において、構成ファイルが更新される。構成命令を更新することは、例えば、構成ファイルの各部分を上書きすること（すなわち、ファイル自体を上書きすること）と、構成ファイルの１つ以上の部分を上書きすること（例えば、１つ以上のアプリケーションについて以前に受信した設定に対するハードウェアパラメータ設定を更新すること）と、１つ以上の新たにテストされたアプリケーション用のハードウェアパラメータ設定を追加することと、を含む。現在記憶されているパラメータ設定（例えば、１つ以上のアプリケーションについて以前に受信した設定）は、例えば、アプリケーション名又はＡＰＩ識別子を介して識別される。命令は、デバイスドライバを上書き又は変更することなく、構成命令を上書きすることによって記憶される。つまり、設定は、デバイスドライバにハードコードされておらず、デバイスドライバを変更せずに変更することができる。
【００３３】
更新された構成命令は、不揮発性メモリ（例えば、ハードディスク、マザーボードブートＲＯＭ等）に（例えば、ファームウェアとして）記憶される。また、識別子（例えば、アプリケーション名及びＡＰＩ識別子）は、アプリケーションに提供された対応するアプリケーション名及びＡＰＩ識別子を用いてハードウェアパラメータ設定を識別するために記憶される。アプリケーションが実行されると、対応するアプリケーションの識別されたハードウェアパラメータ設定を含む命令が、デバイスのメモリを介して実行される。
【００３４】
図５は、アプリケーション実行時の例示的な電力パフォーマンス管理方法を示すフローチャート５００である。
【００３５】
図５のブロック５０２に示すように、方法５００は、アプリケーションを実行することを含む。アプリケーションは、例えば、アプリケーションをフェッチし、アプリケーションをデコードし、アプリケーションの実行をスケジューリングし、アプリケーションの実行を開始し、アプリケーションの特定の部分（例えば、フルスクリーンでのビデオのレンダリング）を実行することによって、実行される。
【００３６】
図５のブロック５０４に示すように、方法５００は、実行中のアプリケーションを識別することを含む。アプリケーションは、例えば、アプリケーションを識別するアプリケーション識別子と、アプリケーションに提供されたＡＰＩを識別するＡＰＩ識別子と、によって識別される。各アプリケーション及び各ＡＰＩは、同じ電力分配値を使用して異なるパフォーマンスレベルをもたらす可能性があるため、アプリケーション毎及びＡＰＩ毎に設定がカスタマイズされ、アプリケーションを実行するハードウェアによって消費される電力を制御し、別のアプリケーションの実行時にパフォーマンスに影響を与えることなくパフォーマンスレベルを維持する。
【００３７】
図５の判別ブロック５０６に示すように、方法は、識別されたアプリケーション用のハードウェアパラメータ設定が記憶されているかどうかを判別することを含む。例えば、識別されたアプリケーションのハードウェアパラメータ設定が、図４で説明した構成ファイルに記憶されているかどうかを判別する。
【００３８】
図５の方法５００のブロック５０８に示すように、（例えば、アプリケーション識別子及びＡＰＩ識別子を介して）識別されたアプリケーションのハードウェアパラメータ設定が記憶されていると判別した場合、識別されたアプリケーションの記憶されたハードウェアパラメータ設定に従ってアプリケーションを実行するように、ハードウェアパラメータを調整する。設定は、デバイスのメモリを介して実行される。調整は、実行のパフォーマンスレベルを維持しながら、識別されたアプリケーションを実行するためにハードウェアによって消費される電力を制御する等のように、ハードウェアの動作を制御するために用いられる。例えば、サンプリング間隔中のハードウェアのアクティビティレベルと、サンプリング間隔に対するアクティビティレベル閾値パラメータと、の比較に基づいてクロック電圧パラメータを調整すること（例えば、クロック電圧パラメータの値を変更すること）によって、電力分配を管理する。図５の方法５００のブロック５１０に示すように、識別されたアプリケーションのハードウェアパラメータ設定が記憶されていない（例えば、識別されたアプリケーションのハードウェアパラメータ設定を未だ受信していない）と判別した場合、記憶されたグローバルハードウェアパラメータ設定に従ってアプリケーションを実行するように、ハードウェアパラメータを調整する。
【００３９】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素を特定の組み合わせで上記のように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【００４０】
提供された方法には、汎用コンピュータ、プロセッサ又はプロセッサコアにおける実施が含まれる。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００４１】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、ＲＯＭ、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
0006909290.tif 000002
【図２】
0006909290.tif 000003
【図３】
0006909290.tif 000004
【図４】
0006909290.tif 000005
【図５】
0006909290.tif 000006