(57)【特許請求の範囲】
【請求項１】
コンピュータ内の、所定時間内のユーザ・モードの実行命令数、キャッシュミス率、ノンキャッシャブルメモリへのアクセス数、Ｉ／Ｏ命令比率、若しくはＯＳ５又はアプリケーション・プログラムからのハードウエア使用に関する情報で表されるパフォーマンス指標の値に基づき、プロセッサの動作速度を制御する方法であって、
第１所定期間における第１パフォーマンス指標の値を測定するステップと、
前記プロセッサの動作速度を変更するステップと、
第２所定期間における第２パフォーマンス指標の値を測定するステップと、
前記第１及び第２パフォーマンス指標の値を参照して、前記プロセッサの動作速度を変更する変更ステップと、
第３所定期間において、前記プロセッサの所定時間内の総実行命令数、前記プロセッサの温度から計算される熱量、前記プロセッサに流れる電流値、若しくは前記プロセッサで消費される電力値で表される消費電力指標の値を測定するステップと、
前記消費電力指標の値に基づき、前記プロセッサの動作速度を変更するステップと
を含む動作速度制御方法。
【請求項２】
コンピュータ内の、所定時間内のユーザ・モードの実行命令数、キャッシュミス率、ノンキャッシャブルメモリへのアクセス数、Ｉ／Ｏ命令比率、若しくはＯＳ５又はアプリケーション・プログラムからのハードウエア使用に関する情報で表されるパフォーマンス指標の値に基づき、プロセッサの動作速度を制御する方法であって、
前記プロセッサの所定時間内の総実行命令数、前記プロセッサの温度から計算される熱量、前記プロセッサに流れる電流値、若しくは前記プロセッサで消費される電力値で表される消費電力指標の値と、前記パフォーマンス指標の値を測定するステップと、
前記パフォーマンス指標の値と前記消費電力指標の値との比を参照して、プロセッサの動作速度の変更方針を切り換えるステップと、
前記変更方針を参照して、前記プロセッサの動作速度を変更する変更ステップと、
を含む動作速度制御方法。
【請求項３】
コンピュータ内の、所定時間内のユーザ・モードの実行命令数、キャッシュミス率、ノンキャッシャブルメモリへのアクセス数、Ｉ／Ｏ命令比率、若しくはＯＳ５又はアプリケーション・プログラムからのハードウエア使用に関する情報で表されるパフォーマンス指標の値に基づき、プロセッサの動作速度を制御する方法であって、
前記プロセッサの所定時間内の総実行命令数、前記プロセッサの温度から計算される熱量、前記プロセッサに流れる電流値、若しくは前記プロセッサで消費される電力値で表される消費電力指標の値Ｖと、前記パフォーマンス指標の値Ｐを測定するステップと、
前記パフォーマンス指標及び前記消費電力指標の値から、エネルギー指標の値Ｅ＝Ｐ／Ｖを計算するステップと、
前記エネルギー指標の値Ｅを減少させるように、前記プロセッサの動作速度を変更するステップと、
を含む動作速度制御方法。
【請求項４】
コンピュータの所定時間内のユーザ・モードの実行命令数、キャッシュミス率、ノンキャッシャブルメモリへのアクセス数、Ｉ／Ｏ命令比率、若しくはＯＳ５又はアプリケーション・プログラムからのハードウエア使用に関する情報で表されるパフォーマンス指標の値Ｐを測定する第１測定器と、
前記コンピュータの前記プロセッサの所定時間内の総実行命令数、前記プロセッサの温度から計算される熱量、前記プロセッサに流れる電流値、若しくは前記プロセッサで消費される電力値で表される消費電力指標の値Ｖを測定する第２測定器と、
前記パフォーマンス指標及び前記消費電力指標の値から、エネルギー指標の値Ｅ＝Ｐ／Ｖを計算し、当該エネルギー指標の値Ｅを減少させるように、前記プロセッサの動作速度を変更するコントローラと、
を有するコンピュータ。
【請求項５】
コンピュータの所定時間内のユーザ・モードの実行命令数、キャッシュミス率、ノンキャッシャブルメモリへのアクセス数、Ｉ／Ｏ命令比率、若しくはＯＳ５又はアプリケーション・プログラムからのハードウエア使用に関する情報で表されるパフォーマンス指標の値に基づきプロセッサの動作速度を前記プロセッサに変更させるプログラムを格納した記憶媒体であって、
前記プログラムは、前記プロセッサに、
前記プロセッサの所定時間内の総実行命令数、前記プロセッサの温度から計算される熱量、前記プロセッサに流れる電流値、若しくは前記プロセッサで消費される電力値で表される消費電力指標の値と、前記パフォーマンス指標の値を読み出すステップと、
前記パフォーマンス指標の値と前記消費電力指標の値との比を参照して、前記プロセッサの動作速度を設定するステップと、
を実行させる、記憶媒体。
【請求項６】
コンピュータの所定時間内のユーザ・モードの実行命令数、キャッシュミス率、ノンキャッシャブルメモリへのアクセス数、Ｉ／Ｏ命令比率、若しくはＯＳ５又はアプリケーション・プログラムからのハードウエア使用に関する情報で表されるパフォーマンス指標の値Ｐに基づきプロセッサの動作速度を前記プロセッサに変更させるプログラムを格納した記憶媒体であって、
前記プログラムは、前記プロセッサに、
前記プロセッサの所定時間内の総実行命令数、前記プロセッサの温度から計算される熱量、前記プロセッサに流れる電流値、若しくは前記プロセッサで消費される電力値で表される消費電力指標の値Ｖと、前記パフォーマンス指標の値Ｐを読み出すステップと、
前記消費電力指標の値Ｖ及び前記パフォーマンス指標の値Ｐから、エネルギー指標の値Ｅ＝Ｐ／Ｖを計算するステップと、
前記エネルギー指標の値Ｅを減少させるように、前記プロセッサの動作速度を設定するステップと、
を実行させる、記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータにおける省電力技術に関し、より詳しくは、プロセッサの動作速度（又は動作周波数）を変更する方法に関する。
【０００２】
【従来の技術】
プロセッサの動作速度を減速することにより消費電力を減少させる技術は多数ある。例えば、特開平９−２３７１３２号公報は、ＣＰＵの負荷状態、バッテリの残量、ＣＰＵの発熱温度状態に従って、クロック周波数の変更を指示し、これらのシステムの状況に応じてクロック周波数を適正値に設定することを開示している。本公報においてＣＰＵの負荷状態は、ＯＳに付属するドライバソフトウエアにより、ある一定時間でのＣＰＵ１２のアイドル状態の回数から判断される。すなわち、システムコントローラは、ＣＰＵがＩ／Ｏ又はメモリをアクセスするごとにビジー状態を示すフラグがセットされるため、このフラグのセット回数に基づいてアイドル状態の回数を認識してＣＰＵの負荷状態を検出する。
【０００３】
さらに、特開平９−２２３１７号公報（米国特許出願第３９５３３５号１９９５年２月２８日出願の対応日本特許出願）は、ＣＰＵのアクティビティ及び温度レベルのリアルタイムサンプルに基づいてＣＰＵが休止できるかをモニターが監視し、休止できればハードウエアセレクタがＣＰＵのクロック時間を減少し、ＣＰＵがアクティブであればＣＰＵを前の高速クロックレベルへ戻す、ポータブルコンピュータ用リアルタイム省電力及び熱管理装置を開示している。モニターはコンピュータの性能レベルを調整しＣＰＵアクティビティ及び温度のリアルタイムサンプリングに応答して省電力及び温度管理を実施する。
【０００４】
また、特開平９−３０５５６９号公報（米国特許出願第０１０１３５号１９９６年１月１７日出願の対応特許出願）は、ポータブルコンピュータのＣＰＵの動的動作特性を検出して活動レベルを予測し、電力節約や電力管理を動的に行うため、ＣＰＵが第１クロックで動作中に少なくとも１つの動的ＣＰＵ動作特性を検出し、このＣＰＵ動作特性がこの特性に関連する所定の設定点に対して所定の関係を確立するか（設定点割り込み条件が存在するか）判断し、設定点割り込み条件が存在する場合には、第１クロックを変更して所定の設定点を調整することを開示している。また、命令の数を数えてその種類を決定することにより、入出力がほとんどない計算指向モードにＣＰＵが入るかどうかを決定する、という事項も開示している。
【０００５】
【発明が解決しようとする課題】
しかし、従来技術では、コンピュータのパフォーマンスに関する指標（パフォーマンス指標と呼ぶ）と消費電力に関する指標（消費電力指標と呼ぶ）を参照し、プロセッサの動作速度を制御する全てのアルゴリズムが開示されているわけではない。また、消費電力指標の値に対するパフォーマンス指標の値の比で表されるエネルギー指標を参照する、プロセッサの動作速度制御のアルゴリズムは開示されていない。
【０００６】
よって、本発明は、パフォーマンス指標を参照してプロセッサの動作速度を制御する新規な方法を提供することが目的である。この際、パフォーマンス指標に加えて消費電力指標を参照するようにしてもよい。
【０００７】
また、エネルギー指標を参照するプロセッサの動作速度制御方法を提供することが目的である。
【０００８】
さらに、パフォーマンス指標として、単位時間当たりにプロセッサにより実行されたユーザ・モードの命令数を用いる、プロセッサの動作速度制御方法を提供することが目的である。
【０００９】
加えて、消費電力指標として、単位時間当たりのプロセッサの総実行命令数を用いる、プロセッサの動作速度制御方法を提供することも目的である。
【００１０】
【課題を解決するための手段】
本発明の第１の態様は、コンピュータにおけるプロセッサの動作速度を制御する方法であって、第１所定期間における第１パフォーマンス指標の値を測定するステップと、プロセッサの動作速度を変更するステップと、第２所定期間における第２パフォーマンス指標の値を測定するステップと、第１及び第２パフォーマンス指標の値を参照して、プロセッサの動作速度を変更する変更ステップとを含む。このようにパフォーマンス指標の値を動作速度変更の前後において測定し、その測定結果を用いるようにすれば、パフォーマンス指標の変化傾向に従って、例えば所定の条件でパフォーマンスをなるべく増大させるようにプロセッサの動作速度を変更できる。なお、動作速度は、動作周波数とほぼ同義であるが、実際の周波数を上下できない場合には、動作期間と非動作期間を設け、その割合を制御することにより、実質的な動作速度又は動作周波数を変更する。
【００１１】
また、第３所定期間において消費電力指標の値を測定するステップと、消費電力指標の値に基づき、プロセッサの動作速度を変更するステップとをさらに含むようにすることも可能である。例えば、消費電力指標の値により動作周波数を設定することも可能である。
【００１２】
また、本発明の第２の態様は、パフォーマンス指標及び消費電力指標の値を測定するステップと、パフォーマンス指標の値と消費電力指標の値との比を参照して、プロセッサの動作速度の変更方針を切り換えるステップと、変更方針を参照して、プロセッサの動作速度を変更する変更ステップとを含む。先に述べたエネルギー指標又はその逆数を用いて、プロセッサの動作速度を変更するものである。変更方針は、例えばエネルギー指標の変化率が大きい場合に、動作速度変更処理を最初から実施し直す場合、又はエネルギー指標の逆数を所定値にて区分し、それらの区分ごとに定義された動作速度変更処理を実施するようにする場合等がある。
【００１３】
さらに、本発明の第３の態様は、パフォーマンス指標及び消費電力指標の値を測定するステップと、パフォーマンス指標及び消費電力指標の値から、エネルギー指標の値を計算するステップと、エネルギー指標の値を減少させるように、プロセッサの動作速度を変更するステップとを含む。エネルギー指標をより小さくすることは、より省電力で且つパフォーマンスも高い（パフォーマンスの犠牲が小さい）ことを意味するので、より効率的なパワーマネージメントが行われることとなる。
【００１４】
また、プロセッサのユーザ・モード実行命令数を用いる本発明の第４の態様は、第１所定期間における、実行されたユーザ・モード命令数Ｉｕをカウントするステップと、Ｉｕを参照して、プロセッサの動作速度を変更する変更ステップとを含む。ユーザ・モードの実行命令数は、パフォーマンス指標の１つの例であって、ユーザ・モードの実行命令数を多く実行すれば、ユーザから見てタスク・パフォーマンスが高くなる。よって、このユーザ・モード実行命令数を多くするように動作周波数を変更する。但し、動作周波数を上げてもユーザ・モード実行命令数がそれに見合う程常に増加するわけではない。
【００１５】
上記の変更ステップ実施後、再度Ｉｕをカウントし、再度変更ステップを実施してもい。これにより、動作速度の変更の効果をフィードバックすることができる。
【００１６】
また、第２所定期間における、実行されたユーザ・モード命令数Ｉｕ２をカウントするステップと、ＩｕからＩｕ２への変化率が所定値より大きい場合、プロセッサの動作速度を所定値に設定するステップとを含むようにしてもよい。これにより、プロセッサが実行しているタスクの種類の変更を検出する。
【００１７】
第２所定期間における総実行命令数Ｉｔをカウントするステップをさらに含むようにすることもできる。この総実行命令数は、消費電力指標の一つであり、このカウント値を用いて動作速度を制御することも可能である。総実行命令数の割にはユーザ・モード実行命令数が少ない場合もありうる。この場合には、ユーザのタスクはあまり実行されていないことになるので、ユーザから見たタスク・パフォーマンスという点では動作速度の変更の余地がある。
【００１８】
よって、第１所定期間と第２所定期間を同じにして、ＩｔとＩｕの比を参照して、動作速度の変更制御モード又は変更制御フローを切り換えるステップを実行してもよい。例えば、ＩｔとＩｕの比をもって、ユーザ命令指向のモードとシステム命令指向のモードを分けることも、またＩｔとＩｕの比の変化率等で変化制御フローを切り換えたりすることもできる。
【００１９】
また、ＩｔとＩｕの比により動作周波数を変更し、さらに変更後の状態で再度ＩｔとＩｕをカウントして、動作周波数変更の効果をフィードバックすることもできる。
【００２０】
また、所定期間における、実行されたユーザ・モード命令数Ｉｕをカウントするステップと、所定期間における総実行命令数Ｉｔをカウントするステップと、ＩｔとＩｕの比を参照して、プロセッサの動作速度を変更する変更ステップとを含むようにすることもできる。その際には、動作速度の変更方針を切り換えるステップと、変更方針を参照して、プロセッサの動作速度を変更するステップを含むようにすることも可能である。
【００２１】
以上、本発明の各態様を処理フローの形式で説明したが、それぞれの処理を実施する電子回路や、その他の装置を用いて本発明を実施することもできる。特に、ＩｔとＩｕとをカウントする回路はプロセッサに内蔵される場合もある。また、本発明で必要な各ステップを実施するプログラムを作成することも可能である。このプログラムは、自身でＩｔ及びＩｕのカウントをせず、専用の回路にてカウントされた値を読み出して、その値に基づき動作速度変更の設定を行うようにすることもできる。プログラムは、記憶装置に記憶されており、流通段階においては、ＣＤ−ＲＯＭやフロッピー・ディスクなどの記憶媒体に格納されていることもある。
【００２２】
【発明の実施の形態】
図１に本発明に関連する部分に関するコンピュータ１の構成例を示す。コンピュータ１のハードウエア部分は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３と、クロック発振器９と、コントローラ１１と、センサ１３を含む。なお、センサには、温度センサや、電流計測器、電力計測器等が考えられる。センサ１３は、他で必要な情報を取得できる場合には不要である。また、コンピュータ１のソフトウエア部分には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）５及びアプリケーション・プログラム７を含み、ＯＳ５にはパワーマネージメント・ドライバ１５を含む。このパワーマネージメント・ドライバ１５は、制御部１９とタイマ２１を含んでいる。
【００２３】
本発明をハードウエアのみで実施する場合、ＣＰＵ３に入力されるクロック信号はコントローラ１１によって制御される。クロック信号の制御は、ＣＰＵ３が対応できる場合には、クロック信号の周波数を変更したり、クロック信号の供給を停止したりすることにより実施する。それらが不可能な場合には、所定のクロック信号を供給しつつ、コントローラ１１がＣＰＵ３に所定期間動作の停止を命じることで実施される。また、ＣＰＵ３がクロック発振器９のクロック信号から内部クロックを生成している場合には、内部クロック生成の方法を変更することにより、内部クロックの周波数を変更するようにしてもよい。コントローラ１１は、ＣＰＵ３の動作を観測し、センサ１３からの入力を監視する。ＣＰＵ３の動作の観測には、例えば、キャッシュミス率や、ノンキャッシャブル・メモリへのアクセス数、Ｉ／Ｏ命令比率等、単位時間当たりの総実行命令数及びユーザ・モードの実行命令数が考えられる。ユーザ・モードの命令とは、ＣＰＵ３の特権レベルが最も低い状態で実行される命令であり、ＧＵＩや算術計算など、一般アプリケーション・プログラムの骨格部分を構成する命令の大部分がこれに相当する。一方、Ｉ／Ｏ命令などはシステム・モードで実行され、ユーザ・モードとは区別される。また、ＯＳ５からのハードウエア使用に関する情報、ＯＳ５を介して又は介さずに直接、アプリケーション・プログラム７から得られるハードウエア使用に関する情報等も取得可能である。これらの情報を用いてコントローラ１１は、クロック発振器９及びＣＰＵ３の動作を制御する。コントローラ１１の動作については後に述べる。なお、コントローラ１１自体をＣＰＵ３内に組み込むことも考えられる。
【００２４】
本発明をソフトウエアのみで実施する場合、パワーマネージメント・ドライバ１５の制御部１９が、ＣＰＵ３にアクセスして、例えば、単位時間当たりの総実行命令数及びユーザ・モードの実行命令数を検出する。また、センサ１３からその測定結果を取得するようにしてもよい。また、アプリケーション・プログラム７からハードウエア使用に関する情報を、またＯＳ５の他の部分からハードウエア使用に関する情報を、得るようにすることも考えられる。制御部１９は、このように取得した情報に基づき、ＣＰＵ３の動作速度を制御する。この制御は、コントローラ１１を介してクロック発振器９の出力クロック信号の制御を行ったり、ＣＰＵ３にＨａｌｔ命令を出力することにより、行われる。例えば、タイマ２１が定期的（例えば２４４μｓ）に制御部１９に割り込みをかけ、制御部１９は収集した情報に従い設定された割り合いで、ＣＰＵ３にＨａｌｔ命令を出力するようにすることも可能である。例えば、ＣＰＵ３の動作速度を１／４にすると決定した場合には、４回の割り込みのうち、３回はＨａｌｔ命令を出力し（これによりＣＰＵ３の動作が停止する）、１回は何もしないでＣＰＵ３に処理を実施させるようにする。
【００２５】
上で述べた、単位時間当たりの総実行命令数及びユーザ・モードの実行命令数は、パーソナル・コンピュータにおいてよく用いられているＰｅｎｔｉｕｍ（Ｉｎｔｅｌ社の商標）プロセッサでは、その内部レジスタであるモデル・スペシフィック・レジスタ３ａ（Ｍｏｄｅｌ  Ｓｐｅｃｉｆｉｃ  Ｒｅｇｉｓｔｅｒ：  ＭＳＲ）から取得可能となっている（Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ  Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌ．１：  Ｐｅｎｔｉｕｍ  Ｐｒｏｃｅｓｓｏｒ，（１９９５）  ｐｐ３３−１〜３３−２５  参照のこと）。よって、コントローラ１１及び制御部１９は、このレジスタを読みに行けばよい。なお、ＭＳＲには累積値が格納されるので、実際にはレジスタ３ａに格納された値の変化量を用いる。単位時間は、ＭＳＲの１つの種類であるタイム・スタンプ・レジスタ（Ｔｉｍｅ  Ｓｔａｍｐ  Ｒｅｇｉｓｔｅｒ：  ＴＳＲ）に格納された値を用いることができる。ＴＳＲには、ＣＰＵ３のクロックごとに１加算された値が格納され、このＴＳＲに格納された値の変化量で、総実行命令数の変化量又はユーザ・モードの実行命令数の変化量を割れば、単位時間当たりの総実行命令数又はユーザ・モードの実行命令数を得ることができる。
【００２６】
本発明では、コントローラ１１及び制御部１９が行うＣＰＵ３の動作速度制御において、次のような指標を採用する。
Ｐ：消費電力指標（プロセッサの消費電力（Ｗ））
Ｖ：パフォーマンス指標（単位時間あたりに処理したタスクの問題サイズ（計算速度））
Ｔ：与えられた問題を処理するのに要した時間（Ｖ＝１／Ｔ）
Ｅ：エネルギー指標
エネルギー指標は、Ｅ＝Ｐ／Ｖ（又はＥ∝Ｐ／Ｖ）で表される。一般に、Ｐが大きくなると、Ｖも増加する。すなわち、消費電力が増加するように高速でＣＰＵ３を動作させると、処理速度も早くなる。しかし、個々のタスクごとに、Ｉ／Ｏ命令の比率や、キャッシュミス率等が異なり、タスクによっては、Ｐの増加に対してＶが徐々に飽和してＣＰＵ３の動作速度の増加が必ずしもパフォーマンスの上昇にはつながらない場合もある。この場合には、パフォーマンスと省電力の両方の観点からエネルギー指標Ｅをより小さくするような速度でＣＰＵを動作させれば、より効率的である。一方、ユーザによっては、所定の消費電力範囲内でパフォーマンスをより増大させることを欲する場合もある。このような場合には、パフォーマンス指標Ｖがより高くなるように制御する。
【００２７】
なお、消費電力指標として用いることができる情報としては、所定時間内の総実行命令数、センサ１３が温度センサである場合には温度から計算される熱量、センサ１３が電流計測器である場合には測定された電流値、センサ１３が電力計測器である場合には測定された電力値、等が考えられる。また、パフォーマンス指標としては、所定時間内のユーザ・モードの実行命令数、キャッシュミス率、ノンキャッシャブルメモリへのアクセス数、Ｉ／Ｏ命令比率、ＯＳ５又はアプリケーション・プログラム７からのハードウエア使用に関する情報（例えば、タスクごとのＣＰＵ占有率、プロセスの優先度、アプリケーション・プログラムの要求、又はそれらの組み合わせ）が考えられる。エネルギー指標は、上述の式から得られる。
【００２８】
以上のようなパフォーマンス指標及び電力指標の値を取得し、それらを用いて目標を達成するような制御フローを以下に述べる。
【００２９】
（１）エネルギー指標Ｅを減少させるための処理フロー
（ａ）第１例
エネルギー指標Ｅの最小化を目標とする第１例の処理フローを図２に示す。最初に、ＣＰＵ３の動作速度ｆｉ（ｉは図２における繰り返しの回数を示す）を最大値ｆｍａｘに設定する（ステップ１０３）。そして、その時のエネルギー指標Ｅ（ｆｉ）を取得（測定）する（ステップ１０５）。先に述べたとおり、パフォーマンス指標Ｖ及び消費電力指標Ｐを測定して、計算にて取得する。もし、｜（Ｅ（ｆｉ）−Ｅ（ｆｉ−１））／ΔＴ｜が所定のしきい値Ｅ０を超えている場合（エネルギー指標Ｅの変化量がしきい値Ｅ０を超えている場合）には、ＣＰＵが実行しているタスクの性質が切り替わったと判断して、処理をステップ１０３に戻す。このようにエネルギー指標Ｅを参照して、ＣＰＵ３の動作速度の変更処理フローを切り換える。なお、ΔＴは図２におけるステップ１０５から次のステップ１０５までのループの実行間隔であって、例えば数百μｓ程度である。
【００３０】
タスクの性質が切り替わっていないようであれば（図２の最初の処理はｆｉ−１がないので必ず切り替わっていないとする）、ＣＰＵ３の動作速度をΔｔの間だけ、ｆ−＝ｆｉ−Δｆ０に設定する（動作速度をΔｆ０だけ下げる。ステップ１０９）。Δｔは、一時的にＣＰＵ３の動作速度を調整するための期間であるから、例えば数十μｓ程度である。そして、再度エネルギー指標Ｅ（ｆ−）を取得し（ステップ１１１）、Ｅ（ｆ−）＜Ｅ（ｆｉ）が成り立つかどうか判断する（ステップ１１３）。もし、成り立つようであれば、ＣＰＵ３の動作速度を減少させた方がよいので、既にｆｉがｆｍｉｎでなければ、ｆｉ＋１＝ｆｉ−Δｆ１を設定する（Δｆ１だけ減速する。ステップ１１７）。一方、ステップ１１３の条件が成り立たない場合には、ＣＰＵ３の動作速度を減少させるとエネルギー指標Ｅに悪影響を及ぼすので、既にｆｉがｆｍａｘでなければ、ｆｉ＋１＝ｆｉ＋Δｆ１を設定する（Δｆ１だけ高速化する。ステップ１１５）。このように第１例では、Ｅの値を参照して、ＣＰＵ３の動作速度の変更方針を決定している。なお、本例ではΔｆ１はΔｆ０より大きな値とするが、同じでも問題ない。そして、ｉを１インクリメントしてステップ１０５に戻る（ステップ１１９）。
【００３１】
この処理を繰り返し実施することにより、エネルギー指標Ｅを最小化するようにＣＰＵ３の動作速度（又は駆動周波数）ｆを変更する。
【００３２】
（２）第２例
図３にエネルギー指標Ｅを減少させるための処理フローを示す。本処理フローでは、エネルギー指標Ｅは最低にはならないが、エネルギー指標Ｅをある許容範囲内に収めるようになっている。なお、第２例ではＶ／Ｐ＝１／Ｅ＝Ｒという値を導入する。単位時間当たりの総実行命令数Ｉｔ及びユーザ・モードの実行命令数Ｉｕを用いて処理を実行する場合には、Ｒは、ユーザ・モードの実行命令数の割合を示しており、所定のしきい値Ｒ１Ｈより高い場合には、ＣＰＵ３はユーザ命令指向の状態にあると言える。また、Ｒが所定のしきい値Ｒ１Ｌより低い場合には、ＣＰＵ３はシステム命令指向の状態にあると言える。
【００３３】
まず、ＣＰＵ３の動作速度ｆをｆｍａｘに設定する（ステップ１２３）。そして、ｆｍａｘの時のＲの値Ｒ０が所定のしきい値Ｒ１Ｈを超えているかどうか判断する（ステップ１２５）。もし、超えていない場合には、Ｒ０が所定のしきい値Ｒ１Ｌより小さいかどうか判断する（ステップ１３５）。もし、Ｒ０が所定のしきい値Ｒ１Ｌ以上である場合には、Ｒ０はＲ１Ｌ≦Ｒ０≦Ｒ１Ｈであって、エネルギー指標Ｅは許容範囲内に収まっており、これ以上の制御は必要ないとして、ステップ１３３に移行する。
【００３４】
一方、Ｒ０がＲ１Ｈより大きい場合には、ＣＰＵ３の動作速度ｆをΔｆだけ減速する（ステップ１２７）。もし、減速した後の動作速度が最低の動作速度である場合には、ステップ１３３に移行する（ステップ１２９）。そうでない場合には、減速した後の動作速度で、パフォーマンス指標Ｖ及び消費電力指標Ｐを測定し、Ｖ＞Ｖ０＊Ｒ３且つＶ／Ｐ＞Ｒ１Ｈであるかどうか判断する（ステップ１３１）。第１の式は、ＣＰＵ３の動作速度を減速した際に下がるパフォーマンス指標Ｖの許容範囲を定めるものであって、動作速度がｆｍａｘであった時のパフォーマンス指標値Ｖ０に対する割合である。また第２の式は、ＣＰＵ３の動作速度を減速した後にＲ＝Ｖ／Ｐがステップ１２５におけるしきい値Ｒ１Ｈの範囲内にとどまっているかどうかを判断するためのものである。単位時間当たりの総実行命令数Ｉｔ及びユーザ・モードの実行命令数Ｉｕを用いて処理を実行する場合には、動作速度減速後もユーザ命令指向の状態にあるかどうかを判断している。もし、第１及び第２の式を満たしている場合には、さらにＣＰＵ３の動作速度を減速する。一方、第１又は第２の式を満たしていない場合には、その時の動作速度に固定してステップ１３３に移行する。
【００３５】
また、Ｒ0＜Ｒ1Lを満たす場合（ステップ１３５）には、ＣＰＵ３の動作速度ｆをΔｆだけ減速する（ステップ１３７）。もし、減速した後の動作速度が最低の動作速度である場合には、ステップ１３３に移行する（ステップ１２９）。そうでない場合には、減速した後の動作速度で、パフォーマンス指標Ｖ及び消費電力指標Ｐを測定し、Ｖ＞Ｖ0＊Ｒ２且つＶ／Ｐ＜Ｒ1Lであるかどうか判断する（ステップ１４１）。第１の式は、ＣＰＵ３の動作速度を減速した際にパフォーマンス指標Ｖの許容範囲を定めるものであって、動作速度がｆmaxであった時のパフォーマンス指標Ｖ0に対する割合である。また第２の式は、ＣＰＵ３の動作速度を減速した後にＲ＝Ｖ／Ｐがステップ１３５におけるしきい値Ｒ1Lの範囲内にとどまっているかどうかを判断するためのものである。単位時間当たりの総実行命令数Ｉt及びユーザ・モードの実行命令数Ｉuを用いて処理を実行する場合には、動作速度減速後もシステム命令指向の状態にあるかどうかを判断している。もし、第１及び第２の式を満たしている場合には、さらにＣＰＵ３の動作速度を減速する。一方、第１又は第２の式を満たしていない場合には、その時の動作速度に固定してステップ１３３に移行する。
【００３６】
以上のように、第２例ではＲ１Ｈ及びＲ１Ｌを用いて、ＣＰＵ３の動作速度の変更処理モード（変更処理方針）を設定し、それに基づき処理を実施している。ステップ１２７及びステップ１３７のΔｆは同じでも異なる値でもよい。
【００３７】
ステップ１３３では、パフォーマンス指標Ｖの変化率の絶対値を検査する。すなわち、パフォーマンス指標Ｖの変化率の絶対値が所定のしきい値Ｒ４を超えたかどうか判断する。この処理は定期的に又は必要に応じて行なわれ、この条件が満たされないうちは、同じ動作速度でＣＰＵ３を動作させる。この条件が満たされた時には、ＣＰＵ３で処理されるタスクの種類が変更されたとしてステップ１２３に戻る。パフォーマンス指標Ｖにより処理フローが変更されたと考えることもできる。
【００３８】
Ｒ１Ｈ及びＲ１Ｌは同じ値でもよい。また、Ｒ２及びＲ３も同一でもよい。これらの定数及びＲ４は、固定にしてもよいし、場合によっては動的に変更することも可能である。
【００３９】
第１及び第２例ともエネルギー指標Ｅ（より一般的には、パフォーマンス指標と消費電力指標Ｐの比）に着目して行われる処理フローである。
【００４０】
（２）パフォーマンス指標Ｖを増大させるための処理フロー
（ａ）第１例
本例はエネルギー指標Ｅを用いない。但し、消費電力指標Ｐを用いてＣＰＵ３の動作速度を変更する処理を含む。なお、ＣＰＵ３の動作速度の初期値Ｐ（ｆ１）は設定できる最大値ｆｍａｘに設定されている。まず、動作速度ｆｉにおける消費電力指標Ｐ（ｆｉ）を取得する（ステップ１５３）。ｆのサフィックスは、図４の処理の繰り返し数を表す。そして、Ｐ（ｆｉ）が、ユーザ指定のＰｍｉｎ及びＰｍａｘの間にあるかどうか判断する（ステップ１５５）。もし、Ｐｍａｘ以上である場合、又はＰｍｉｎ以下である場合には、ｆｉへの変更が不適当であった、又はｆｉ設定後にタスクの性質が切り替わった場合であるから、一旦ｆｉをｆｉ−１（前回図４の処理を開始する際の動作速度）に戻す（ステップ１５７）。
【００４１】
ステップ１５５又はステップ１５７の後、ｆiにおけるパフォーマンス指標Ｖ(ｆi）を取得する（ステップ１５９）。そして、ＣＰＵ３の動作速度をΔｔの間だけΔｆ0+上昇させる（ステップ１６１）。すなわち、ｆ+＝ｆi＋Δｆ0+と設定する。その後、ｆ+におけるパフォーマンス指標Ｖ(ｆ+）を取得する（ステップ１６３）。もし、Ｖ(ｆ+）＞Ｖ(ｆi）ならば（ステップ１６５）、ＣＰＵ３の動作速度を上昇させた方がパフォーマンス指標Ｖの値が上昇するので、ｆi+1＝ｆi＋Δｆ1+と設定する（ステップ１７７）。一方、Ｖ(ｆ+）≦Ｖ(ｆi）であるならば、ＣＰＵ３の動作速度をΔｔの間だけΔｆ0-減速する（ステップ１６７）。すなわち、ｆ-＝ｆi−Δｆ0-を設定する。そして、ｆ-におけるパフォーマンス指標Ｖ(ｆ-）を取得する（ステップ１６９）。その後、Ｖ(ｆ-）≧Ｖ(ｆi）であるか判断する（ステップ１７１）。この条件が満たされないということは、ＣＰＵ３の動作速度を変更しなくともパフォーマンスは変わらないので、ｆi+1＝ｆiに設定する（ステップ１７３）。一方、Ｖ(ｆ-）≧Ｖ(ｆi）でない場合には、ｆi+1＝ｆi−Δｆ1-を設定する（ステップ１７５）。
【００４２】
以上の処理を所定時間間隔又は必要に応じて実施する。ユーザ指定の省電力指標に従い、省電力とパフォーマンスの両方のバランスをとることができる。なお、第１例ではΔｆ０＋とΔｆ０−は、それぞれΔｆ１＋とΔｆ１−より小さいものとして考えているが、同じ値であってもよい。また、上付サフィックス＋及び−は異なる値でも同じ値でもよい。
【００４３】
（ｂ）第２例
図５に、パフォーマンス指標Ｖを増大させるための処理フローの第２例を示す。第２例では、パフォーマンス指標Ｖの変化率を考慮して、動作速度変更の処理フローを切り換える。なお、図５に示されている処理は、第ｉ回目の繰り返し処理である。この処理は、所定間隔で又は必要に応じて繰り返し実行される。なお、ＣＰＵ３の動作速度の初期値Ｐ（ｆ１）は設定できる最大値ｆｍａｘに設定されている。
【００４４】
まず、設定されているＣＰＵ３の動作速度ｆｉにおける消費電力指標Ｐ（ｆｉ）を取得する（ステップ１８３）。そして、ユーザ指定のＰｍａｘと比較する（ステップ１８５）。もし、ＰｍａｘよりＰ（ｆｉ）が大きい場合には、消費電力を減らずべく、ｆｉ＋１＝ｆｉ−Δｆ１を設定する（ステップ１８９）。また、ユーザ指定のＰｍｉｎとＰ（ｆｉ）を比較し（ステップ１８７）、もしＰｍｉｎより小さければ、パフォーマンス指標の値を上げるためにＣＰＵ３の動作周波数を上げることができるので、ｆｉ＋１＝ｆｉ＋Δｆ１を設定する（ステップ１９１）。
【００４５】
ステップ１８５及びステップ１８７の条件を両方満たしていない場合には、ＣＰＵ３の動作速度を制御できる。よって、ｆｉにおけるパフォーマンス指標Ｖ（ｆｉ）を取得する（ステップ１９３）。次に、ＣＰＵ３の動作速度をΔｔの間だけΔｆ１減速する（ステップ１９５）。よって、ｆ−＝ｆｉ−Δｆ０を設定する。そして、ｆ−におけるパフォーマンス指標Ｖ（ｆ−）を取得する（ステップ１９７）。取得したパフォーマンス指標を用いて、Ｖ（ｆ−）≧Ｖ（ｆｉ）であるかどうか判断する（ステップ１９９）。もし、この条件が満たされれないならば、ＣＰＵ３の動作速度を変更する必要がないので、ｆｉ＋１＝ｆｉと設定する（ステップ２０１）。一方、ステップ１９９の条件を満たす場合には、ｆｉ＋１＝ｆｉ−Δｆ１を設定する（ステップ２０３）。そして、次に、パフォーマンス指標Ｖの変化率を検査する。これは、｜（Ｖ（ｆｉ）−Ｖ（ｆｉ−１））／ｄｔ｜で計算する。これが所定のＶ０を超えている場合には、ＣＰＵ３が処理しているタスクの種類が切り換えられたとして、ｆｉ＋１を設定できる最大値ｆｍａｘに設定する（ステップ２０７）。タスクの種類が切り換えられていない場合には、ステップ２０３又はステップ２０１において設定されたままで、処理を終了する（ステップ２０９）。
【００４６】
以上の処理を実行することにより、ユーザ指定の消費電力指標とパフォーマンスの両方のバランスをとることができる。なお、第２例ではΔｆ０はΔｆ１より小さいと考えているが、同じ値であってもよい。
【００４７】
（３）第３例
本例は、図５を発展させたアルゴリズムである。まず、Ｊ＝（ｄＶ／ｄＰ）／（Ｖ／Ｐ）という、Ｖ／Ｐで正規化された指標Ｊを導入する。このＪの最小値であるＪｍｉｎをさらに規定しておく。このＪが１．０より大きい又は１．０程度の値である場合には、より多くの電力が供給されるとＪの分子は減少せずにＪ自体も増加する。よって、より多くの電力を供給した時にパフォーマンスに改善の余地があるということを示す。一方、このＪが１．０より小さい（Ｊ＜Ｊｍｉｎ）ならば、より多くの電力が供給されてもＪの分子は減少し、パフォーマンスの改善にはつながらないということを示している。
【００４８】
さらに、タスク特性の変化を検出するために、Ｓ＝｜Ｖｉ／Ｐｉ−Ｖ０／Ｐ０｜／（Ｖ０／Ｐ０）という指標Ｓを導入する。ここでＶｉ及びＰｉは、それぞれその初期値である。Ｖｉ及びＰは、それぞれ最新のＶ及びＰである。タスク特性の変化を検出するためのしきい値Ｓｍａｘも規定しておく。
【００４９】
加えて、プロセッサの動作速度を最高にした時の各タスクの実行数をカウントするための指標Ｃｏｕｎｔも導入する。これは、タスクが安定状態になる前にプロセッサの動作速度を変えてしまったり、動作速度の変更をあまりに多くしないようにするために用いられる。よって、タスクが安定状態になったということを判断するためのしきい値をＣとする。
【００５０】
図６にこれらの指標を用いたプロセッサの動作速度調整アルゴリズムの一例を示す。このアルゴリズムは図６に示すように、タスクごとに行われ、各変数は各タスクごとに保存される。まず、このタスクＡが新たなタスクであるかどうか判断される（ステップ２２１）。もし、新たなタスクであれば、処理状態を表わす変数Ｓｅａｒｃｈをｓｔａｒｔ状態に設定し、先に述べたＣｏｕｎｔを初期値０に設定し、プロセッサの動作速度Ｓｐｅｅｄを最高速度ＭＡＸに設定する（ステップ２２３）。もし、タスクＡが新たなタスクでない場合には、前回タスクＡについて決定された変数値を取り出す。そして、プロセッサの動作速度をＳｐｅｅｄに設定し、Ｐ及びＶの測定を開始する（ステップ２２５）。そして、タスクＡを実行する（ステップ２２７）。もし、タスクＡが新たなタスクであれば、ここで取得されるＰ及びＶは、Ｐ０及びＶ０となり、次のタスクにスイッチする。
【００５１】
その後、プロセッサ速度をその最高速度ＭＡＸにセットし、その時のＶｉ及びＰｉ（Ｖｃｏｕｎｔ＋１及びＰｃｏｕｎｔ＋１）を測定する。さらに、Ｃｏｕｎｔを１インクリメントする（ステップ２２９）。そして、Ｓ＜Ｓｍａｘであるかどうか判断する（ステップ２３１）。もし、Ｓ＜Ｓｍａｘでなければ、タスク特性が変わっているので、変数Ｓｅａｒｃｈをｓｔａｒｔ状態にセットし、ｃｏｕｎｔを初期値０に戻し、プロセッサの動作速度Ｓｐｅｅｄを最高速度ＭＡＸにセットする（ステップ２３３）。一方、タスク特性が変わっていなければ、現在のＣｏｕｎｔ値がしきい値Ｃより大きいか判断する（ステップ２３５）。しきい値ＣよりＣｏｕｎｔ値が小さければ、またタスクは安定状態でないので、その後の処理を行わず、次のタスクにスイッチする（ステップ２４５）。もし、タスクが安定状態であれば、処理状態を表わす変数ＳｅａｒｃｈがＥｎｄを表わしているか検査する（ステップ２３７）。このＥｎｄは、プロセッサ動作速度の調整が済んでいることを表わす。よって、Ｓｅａｒｃｈ＝Ｅｎｄであれば、次のタスクにスイッチする。
【００５２】
そうでなければ、Ｊ＜Ｊｍｉｎであるか判断する（ステップ２３９）。この条件に合致しない場合には、プロセッサの動作速度を減少させることができるので、Ｓｐｅｅｄを一段階（Δｆ）減速するようにセットする（ステップ２４３）。すなわち、Ｓｐｅｅｄ＝Ｓｐｅｅｄ−１とする。そして、次のタスクにスイッチする。一方、ステップ２３９の条件を満たしていない場合には、これ以上減速できないので、一回前のプロセッサ動作速度に戻し（Ｓｐｅｅｄ＝Ｓｐｅｅｄ＋１）、処理状態Ｓｅａｒｃｈを終了状態Ｅｎｄに変更する（ステップ２４１）。この後、次のタスクにスイッチする。
【００５３】
以上の処理は、タスクのスイッチを行うＯＳのスケジューラが行う。なお、上で述べたパワーマネージメント・ドライバと協動してもよい。
【００５４】
以上のような処理をコントローラ１１又はパワーマネージメント・ドライバ１５内の制御部１９により実施する。なお、図１のブロック図は一例であって、例えばタイマ２１はパワーマネージメント・ドライバ１５内に設けているが、ＯＳ５の他の部分にて有するタイマを用いても、ハードウエアのタイマを使用してもよい。さらに、センサ自体をＣＰＵ１３が含むようにすることも可能である。本発明のコントローラ１１は、他の周辺回路と一緒のチップに実装しても別個に実装してもよい。図１ではアプリケーション・プログラム７は１つしか描かれていないが、当然複数実行されている場合もある。なお、図１では機能ブロック間の参照のための線を必要と考えられる部分のみ描いているが、機能間で図１に描かれていない参照を設けることも可能である。
【００５５】
また図２乃至図６に示したアルゴリズムは一例であって、ＣＰＵ３の動作速度を目的に応じて調整できるようなアルゴリズムであれば、図２乃至図６と異なっていてもよい。また、ＯＳ５に他のパワーマネージメント機能（例えばＡＰＭドライバ（Ａｄｖａｎｃｅｄ  Ｐｏｗｅｒ  Ｍａｎａｇｅｍｅｎｔ）が含まれている場合には、それらとの整合をとる必要がある場合も生じ得る。
【００５６】
【効果】
パフォーマンス指標を参照してプロセッサの動作速度を制御する新規な方法を提供することができた。また、消費電力指標も参照するような方法も提供できた。
【００５７】
また、エネルギー指標を参照するプロセッサの動作速度制御方法を提供することができた。
【００５８】
さらに、パフォーマンス指標として、所定期間においてプロセッサにより実行されたユーザ・モードの命令数を用いる、プロセッサの動作速度制御方法を提供することができた。
【００５９】
加えて、消費電力指標として、所定期間におけるプロセッサの総実行命令数を用いる、プロセッサの動作速度制御方法を提供することもできた。
【図面の簡単な説明】
【図１】本発明の装置構成例を示したブロック図である。
【図２】エネルギー指標を減少させるための第１処理フローを示した図である。
【図３】エネルギー指標を減少させるための第２処理フローを示した図である。
【図４】パフォーマンス指標を増大させるための第１処理フローを示した図である。
【図５】パフォーマンス指標を増大させるための第２処理フローを示した図である。
【図６】パフォーマンス指標を増大させるための第３処理フローを示した図である。
【符号の説明】
１  コンピュータ
３  ＣＰＵ
３ａ  ＭＳＲ
５  ＯＳ
７  アプリケーション・プログラム
９  クロック発振器
１１  コントローラ
１３  センサ
１５  パワーマネージメント・ドライバ
１９  制御部
２１  タイマ
【図１】
0003573957.tif 000002
【図２】
0003573957.tif 000003
【図３】
0003573957.tif 000004
【図４】
0003573957.tif 000005
【図５】
0003573957.tif 000006
【図６】
0003573957.tif 000007