(57)【特許請求の範囲】
【請求項１】
プロセッサを備えた集積回路であって、
前記プロセッサにおいて、１以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、
前記ループ処理において命令間の依存が実行回の異なる２つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、
前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、
を備える集積回路。
【請求項２】
さらに、ループ処理の実行が終了したことを検出するループ終了検出部を備え、
前記電力制御部は、省電力制御が行われている状態において、前記ループ終了検出部が、前記ループ処理の終了を検出した場合に省電力制御を終了させる、
請求項１記載の集積回路。
【請求項３】
前記ループ伝搬依存解析部は、前記ループ処理において、第一のループで変数に書き込まれた値が、前記第一のループの後に実行される第二のループで前記変数から読み出されることをもって、ループ伝搬依存があると判定する、
請求項２記載の集積回路。
【請求項４】
前記ループ検出部は、前記プロセッサにおいて、先行したアドレスに分岐する命令が実行されたことをもって、前記プロセッサがループ実行状態になったことを検出する、
請求項３記載の集積回路。
【請求項５】
さらに、ループの範囲を記憶する、ループ範囲記憶部を有し、
前記ループ検出部は、先行したアドレスに分岐する分岐命令を検出した場合に、前記ループ範囲記憶部にループの範囲を出力し、さらに、前記ループ伝搬依存解析部に依存関係解析を指示し、
前記ループ伝搬依存解析部は、前記ループ範囲記憶部に記憶されたループの範囲の命令列についてループ伝搬依存の検出処理を行う、
請求項４記載の集積回路。
【請求項６】
前記ループ終了検出部は、
前記ループ範囲記憶部に記憶されたループの範囲外に分岐する分岐命令が実行されたこと、又は、前記ループの範囲の末尾に位置する条件分岐命令の実行結果が分岐不成立であることをもって、前記プロセッサにおけるループ処理の実行が終了したことを検出する、
請求項５記載の集積回路。
【請求項７】
前記ループ範囲記憶部は、ループの先頭アドレスと、ループの末尾アドレスとを含む情報を記憶する、
請求項５記載の集積回路。
【請求項８】
前記プロセッサは、フェッチされた命令列を保持する命令列保持部を備えており、
前記ループ伝搬依存解析部は、前記命令列保持部に保持された前記ループの範囲の命令列についてループ伝搬依存の検出処理を行う、
請求項５記載の集積回路。
【請求項９】
前記命令列保持部に記憶される命令列は、プリフェッチされた命令を含む、
請求項８記載の集積回路。
【請求項１０】
前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給するクロックの周波数を増加させる制御を行う、
請求項２記載の集積回路。
【請求項１１】
前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給する電力の電圧を低下させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給する電力の電圧を増大させる制御を行う、
請求項２記載の集積回路。
【請求項１２】
前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給する電力の電圧を低下させるとともに前記プロセッサへ供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給する電力の電圧を増大させるとともに前記プロセッサへ供給するクロックの周波数を増加させる制御を行う、
請求項２記載の集積回路。
【請求項１３】
前記ループ伝搬依存解析部は、
前記ループ処理において、一の命令の書き込み対象の変数と、読み出し対象の変数とが同じ場合に、ループ伝搬依存が存在すると判定する、
請求項１記載の集積回路。
【請求項１４】
前記プロセッサは、複数の実行ユニットを備え、
前記電力制御部は、省電力制御を行う場合に、前記複数の実行ユニットの一部のものを停止させる制御を行い、省電力制御を終了する場合に、停止させた前記複数の実行ユニットの一部のものの実行を再開させる制御を行う、
請求項２記載の集積回路。
【請求項１５】
前記プロセッサは、複数のスレッドの各々に割り当てられるタイムスライスを管理する、スレッド管理部を有し、
前記電力制御部は、
省電力制御を行う場合に、ループ伝搬依存が検出されないループ処理を実行しているビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部に指示し、
省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示する、
請求項２記載の集積回路。
【請求項１６】
前記電力制御部は、
省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させる制御を行い、
省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させる制御を行う、
請求項１５記載の集積回路。
【請求項１７】
前記プロセッサは、複数の実行ユニットを備え、
前記電力制御部は、
省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記複数の実行ユニットのうちの一部を停止させる制御を行い、
省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記複数の実行ユニットの一部の実行を再開させる制御を行う、
請求項１５記載の集積回路。
【請求項１８】
前記プロセッサは、複数の実行ユニットを備え、
前記電力制御部は、
省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させ、前記複数の実行ユニットのうちの一部を停止させる制御を行い、
省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を、前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させ、前記複数の実行ユニットの一部の実行を再開させる制御を行う、
請求項１５記載の集積回路。
【請求項１９】
前記電力制御部は、
省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させ、前記プロセッサに供給する電力の電圧を低下させる制御を行い、
省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させ、前記プロセッサに供給する電力の電圧を増大させる制御を行う、
請求項１５記載の集積回路。
【請求項２０】
前記電力制御部は、
省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、前記プロセッサに供給するクロックの周波数を減少させる、
請求項１６記載の集積回路。
【請求項２１】
前記電力制御部は、
省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、前記複数の実行ユニットの稼働本数を減少させる、
請求項１７記載の集積回路。
【請求項２２】
プロセッサを備えたコンピュータシステムの制御方法であって、
前記プロセッサにおいて、１以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出ステップと、
前記ループ処理において命令間の依存が実行回の異なる２つのループにまたがるループ伝搬依存を検出するループ伝搬依存検出ステップと、
前記ループ検出ステップによって検出されたループ処理に、前記ループ伝搬依存検出ステップによってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御ステップと、
を備える制御方法。
【請求項２３】
プロセッサを備えたコンピュータシステムであって、
前記プロセッサにおいて、１以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、
前記ループ処理において命令間の依存が実行回の異なる２つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、
前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、
を備えるコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサを有する集積回路、コンピュータシステムおよび制御方法に関し、特に、プロセッサがビジーウェイトを実行するときの消費電力を低減する集積回路、コンピュータシステムおよび制御方法に関するものである。
【背景技術】
【０００２】
プロセッサを有するコンピュータシステムでは、ユーザからの入力待ちを行う場合や並列に動作する複数のプロセッサ（あるいは、複数の論理プロセッサ、プロセス、スレッド等）の間で同期を取る場合に、ビジーウェイトが用いられることが多い。ビジーウェイトが行われる場合、例えば、プロセッサにおいて特定の変数（例えば、同期用変数）の値を繰り返しチェックするループ処理が実行される。そして、特定の変数の値が設定値に変わるとループ処理が終了し、本来の処理が実行される。【０００３】
このように、ビジーウェイトを用いることで、並列に動作する複数のプロセッサ等の間で、一方の処理が完了した後に、他方の処理を開始するという同期処理が可能になるため、コンピュータシステムの分野では広く用いられている。【０００４】
しかしながら、ビジーウェイトは、プロセッサの資源を浪費するというデメリットがある。ビジーウェイトでは、例えば、同期用変数を監視するために繰り返されるループの回数が、数百回から場合によっては数万回を超えることもある。ゆえに、ビジーウェイトは、電力消費の観点から考えると無駄が多い制御方法である。【０００５】
このため、ビジーウェイトの一種であるスピンウェイト時の無駄な電力消費を削減するための方法が、特許文献１に開示されている。【０００６】
ここで、スピンウェイトについて、図３３を参照しながら説明する。スピンウェイトでは、例えば、マルチプロセッサ間の同期処理に用いられ、図３３では、２つのプロセッサが、前段と後段に分けられた処理を順番に実行する状況を想定している。そして、第一プロセッサ側の設定部１１０１、第二プロセッサ側の検証部１１０２、及び同期処理用の変数１１１０によってスピンロック（インターロックの一種）が構成されている。【０００７】
第一プロセッサの設定部１１０１は、同期用変数１１１０に「０」を書き込んだ後、前段の処理Ｓ１１１１を行う。第一プロセッサは、前段の処理Ｓ１１１１が終了すると、同期用変数１１１０に「１」を書き込む。一方、第二プロセッサの検証部１１０２は、同期用変数１１１０の値が「１」になるまで後段の処理Ｓ１１２２を開始することはできない。よって、同期用変数１１１０が「１」になるまでステップＳ１１２１の判定を繰り返して待機し（即ち、ループを繰り返して待機し）、スピンウェイト状態となり、電力を浪費する。【０００８】
特許文献１のコンピュータでは、スピンウェイトに用いられる命令列をプロセッサが実行したことを検出し、そのときにプロセッサを省電力状態にする方法を開示している。ここで、スピンウェイト命令の検出方法について、図３４を参照しながら説明する。図３４は、前記特許文献１に記載されたスピンウェイト検出部の構成を示す図である。【０００９】
スピンウェイト検出部１２２２は、プロセッサの実行済み命令列バッファ１２３４と、スピンウェイト命令列記憶部１２３６と、両者に含まれる命令列を比較する比較部１２３８とを有する。スピンウェイト命令列記憶部１２３６には、スピンウェイト特有のインターロック命令列（例として、test_and_setや、compare_and_swap）が格納される。そして、比較部１２３８によって、実行済み命令列バッファ１２３４に、スピンウェイト命令列記憶部１２３６に格納されているインターロック命令列が含まれることが検出された際に、スピンウェイト命令検出信号１２４１が出力される。そのスピンウェイト命令検出信号１２４１をトリガとして、プロセッサが省電力状態にされる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許第４２５３７９６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、前記従来の構成では、スピンウェイト命令列記憶部１２３６に記憶された特定の命令列（test_and_set等）が実行されたことに基づいてビジーウェイトを検出しているため、上記特定の命令列と異なる命令列を用いたビジーウェイトを検出することができない。また、前記従来の構成によって多様な命令列を用いたビジーウェイトを検出しようとしても、スピンウェイト命令列記憶部１２３６に多種の命令列を記憶させ、多種の命令列の各々と実行済み命令列とを比較することには自ずと限界が生じる。すなわち、検出できるビジーウェイトが限られているため、電力消費の削減が可能な状況が限定的であるという課題がある。【００１２】
本発明は、前記従来の技術における課題を解決するもので、より多様なビジーウェイトの実行を検出し、プロセッサにおけるビジーウェイトの実行により浪費される電力を低減し得る、集積回路、コンピュータシステムおよび制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
前記課題を解決するために、本発明に係る集積回路は、プロセッサを備えた集積回路であって、前記プロセッサにおいて、１以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、前記ループ処理において命令間の依存が実行回の異なる２つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、を備える。
【発明の効果】
【００１４】
本発明に係る集積回路は、ループ検出部によってループ処理を検出し、ループ伝搬依存解析部によってループ処理がビジーウェイト用であるか否かを判別することができる。そのため、特定の命令列（例えば、インターロック用の命令列）との比較なしにビジーウェイト用のループを検出することができる。よって、特定の命令列以外の命令列によって構成されるビジーウェイト用のループを容易に検出し、ビジーウェイト時に省電力制御を行うことができる。その結果、より多様なビジーウェイトの実行を検出し、ビジーウェイトの実行により浪費される電力を低減することができる。
【図面の簡単な説明】
【００１５】
【図１】実施の形態１にかかる集積回路を備えたコンピュータシステム１３００の構成を模式的に示す図である。
【図２】実施の形態１にかかる集積回路を備えたコンピュータシステム１３００の構成を簡略化して模式的に示す図である。
【図３】実施の形態１にかかる集積回路に含まれるプロセッサ１３０１の命令セット１４００を例示する図である。
【図４】実施の形態１におけるプロセッサ１３０１のレジスタセット１５００を例示する図である。
【図５】実施の形態１における命令列１６００を例示する図である。
【図６】実施の形態１におけるループ検出部１７０１の処理を示すフローチャートである。
【図７】実施の形態１におけるループ範囲記憶部１９００のデータ構造を示す図である。
【図８】実施の形態１におけるループを構成する命令列２１００の一例を示す図である。
【図９】実施の形態１におけるループ伝搬依存解析部１７０１の処理を示すフローチャートである。
【図１０】実施の形態１においてループ伝搬依存解析部１７０１が用いる依存関係解析用バッファ２２００のデータを示す図である。
【図１１】実施の形態１におけるループをなす命令列の一例を示す図である。
【図１２】実施の形態１においてループ伝搬依存解析部１７０１が用いる依存関係解析用バッファ２７００のデータを示す図である。
【図１３】実施の形態１における第一の電力制御部１７０３の処理を示すフローチャートである。
【図１４】実施の形態１におけるループ脱出検出部１７０４の処理を示すフローチャートである。
【図１５】実施の形態１における第二の電力制御部１７０５の処理を示すフローチャートである。
【図１６】実施の形態１におけるループ伝搬依存解析部１７０１の一部を構成する電子回路を示す図である。
【図１７】実施の形態１におけるループ伝搬依存解析部１７０１の一部を構成する電子回路を示す図である。
【図１８】実施の形態１におけるループ伝搬依存解析部１７０１の一部を構成する電子回路を示す図である。
【図１９】変形例にかかるコンピュータシステム２８００の構成を模式的に示す図である。
【図２０】実施の形態２におけるマルチスレッド対応のコンピュータシステム２９００の構成を模式的に示す図である。
【図２１】実施の形態２におけるレジスタ群２９１０の構成を模式的に示す図である。
【図２２】実施の形態２における第一の電力制御部３０１３の処理を示すフローチャートである。
【図２３】実施の形態２における第二の電力制御部３０１５の処理を示すフローチャートである。
【図２４】実施の形態２における第一の電力制御部３０１３の処理を示すフローチャートである。
【図２５】実施の形態２における第二の電力制御部３０１５の処理を示すフローチャートである。
【図２６】実施の形態３におけるコンピュータシステム４０００の構成を模式的に示す図である。
【図２７】実施の形態３におけるプログラムカウンタ監視部４１００の省電力制御に関する動作を示すフローチャートである。
【図２８】実施の形態３におけるバス監視部４１００の動作を示すフローチャートである。
【図２９】実施の形態３におけるプログラムカウンタ監視部４１００の省電力制御終了に関する動作を示すフローチャートである。
【図３０】実施の形態４におけるコンピュータシステム４５００の構成を模式的に示す図である。
【図３１】他の命令セット１４００Ａを例示する図である。
【図３２】更に他の命令セット１４００Ｂを例示する図である。
【図３３】本発明の背景技術となるビジーウェイトの一例を模式的に説明する図である。
【図３４】特許文献１のスピンウェイト検出部の構成を模式的に示す図である。
【発明を実施するための形態】
【００１６】
本発明の実施の形態について、図面を参照しながら説明する。
【００１７】
［実施の形態１］
＜コンピュータシステム１３００の構成＞
本発明の実施の形態１にかかる集積回路を備えたコンピュータシステムの構成を、図１を参照しながら説明する。図１は、コンピュータシステム１３００の構成を模式的に示すブロック図である。
【００１８】
コンピュータシステム１３００は、プロセッサ１３０１、主記憶１３０２（ＲＡＭ、ＲＯＭ等）、Ｉ／Ｏデバイス１３０３（入出力装置）、電力供給デバイス１３０４、及びバス１３０５を備える。なお、プロセッサ１３０１は、集積回路内に形成されている。
【００１９】
プロセッサ１３０１、主記憶１３０２、Ｉ／Ｏデバイス１３０３、電力供給デバイス１３０４は、バス１３０５を介して相互に接続されている。電力供給デバイス１３０４は、プロセッサ１３０１に対して電力１３０６およびクロック１３０７を供給する。
【００２０】
電力供給デバイス１３０４は、レギュレータを備えており、プロセッサ１３０１に供給する電力１３０６の電圧を変更することができる。また、電力供給デバイス１３０４は、クロック発生回路及び分周回路を備えており、プロセッサ１３０１に供給するクロック１３０７の周波数を変更することができる。
【００２１】
プロセッサ１３０１は、レジスタ群１３１０、レジスタ群１３１０に含まれるプログラムカウンタ１３１１、命令フェッチ／デコードユニット１３２０、発行ユニット１３３０、命令列保持部１３４０、実行ユニット１３５０、リタイアメントユニット１３６０、命令キャッシュ１３７０、データキャッシュ１３８０を備える。
【００２２】
さらに、プロセッサ１３０１は、省電力制御装置（図１における符号１７０１〜１７０５、及び１９００）を備えており、その省電力制御装置によって、ビジーウェイトによるループ処理が実行されている場合に省電力制御を行う。この省電力制御装置については、後に説明する。
【００２３】
＜コンピュータシステム１３００の基本的な動作＞
図２は、省電力制御装置の図示を省略し、コンピュータシステム１３００を簡略化して示す。この図に基づいて、コンピュータシステム１３００の基本的な動作を説明する。
【００２４】
まず、命令フェッチ／デコードユニット１３２０は、プログラムカウンタ１３１１の値に基づき、プロセッサ１３０１が実行する可能性のある命令列を命令キャッシュ１３７０から読み出す。つまり、いわゆる命令のプリフェッチを行う。次に、命令フェッチ／デコードユニット１３２０は、読み出された命令列をデコードし、命令列保持部１３４０へ一時的に格納する。
【００２５】
命令列保持部１３４０では、所定数の命令が保持されており、最も古い命令に新たな命令が上書きされる。すなわち、命令列保持部１３４０は、リングバッファによって構成されている。そのため、命令列保持部１３４０には、下記の発行ユニット１３３０によって発行された発行済み命令が残されている。
【００２６】
発行ユニット１３３０は、命令列保持部１３４０へ格納された命令列の中から、実行の準備が整ったものを、実行ユニット１３５０へ送り込む。すなわち、命令が発行される。また、発行ユニット１３３０は、例えば、演算用の命令を発行する場合に、指定されたオペランド（ソースレジスタ）の値をレジスタ群１３１０から取出して、命令とともに実行ユニット１３５０へ送り込む。
【００２７】
実行ユニット１３５０では各種の処理を行う。各種の処理には、レジスタ群１３１０に格納されている値の四則演算やビット演算のような演算処理、浮動小数点処理、データキャッシュ１３８０やバス１３０５を介したロードストア処理、分岐などが含まれる。実行ユニット１３５０が行った処理の実行結果は、リタイアメントユニット１３６０へ送られる。
【００２８】
なお、本実施の形態において、プロセッサ１３０１に実行ユニット１３５０が複数設けられており、複数の実行ユニット１３５０で命令列が並列的に処理される。この場合は、発行ユニット１３３０が、複数の実行ユニット１３５０のうち、空いている実行ユニット１３５０に対して、命令列を順次送り込んでいく。
【００２９】
リタイアメントユニット１３６０は、レジスタ群１３１０への書込みの準備が終わったことを確認した後に、実行ユニット１３５０の実行結果をレジスタ群１３１０へ書き込む。通常、リタイアメントユニット１３６０により、命令のアドレス順に実行結果がレジスタ群１３１０へ書き込まれる。
【００３０】
命令キャッシュ１３７０と、データキャッシュ１３８０は、主記憶１３０２から読み込んだ情報や、主記憶１３０２へ書き込む予定の情報を一時的に保持する。
【００３１】
＜命令セット＞
プロセッサ１３０１の命令セットを、図３を参照しながら説明する。図３は、命令セットに含まれるアセンブラコードの命令１４０１と、各命令１４０１の概要１４０２及び演算内容１４０３とを例示する図である。
【００３２】
命令セット１４００には、加算を行うＡＤＤ命令１４１１、減算を行うＳＵＢ命令１４１２、比較を行うＣＭＰ命令１４１３、移動を行うＭＯＶ命令１４１４、条件分岐を行うＢＮＥ命令１４１５、ジャンプを行うＪＭＰ命令１４１６、バス１３０５に接続された主記憶１３０２やＩ／Ｏデバイス１３０３および電力供給デバイス１３０４から情報の読込みを行うＬＤＲ命令１４１７、バス１３０５に接続された主記憶１３０２やＩ／Ｏデバイス１３０３および電力供給デバイス１３０４から情報の書込みを行うＳＴＲ命令１４１８、演算を行わずにプログラムカウンタのインクリメントを行うＮＯＰ命令１４１９が含まれる。
【００３３】
ここで、演算内容１４０３において、「＜＝」記号は代入を意味する。
【００３４】
代入記号の左側のレジスタ、すなわち代入先のレジスタをデスティネーションレジスタもしくはＤＳＴレジスタと称する。また、代入記号の右側のレジスタ、すなわち代入元のレジスタをソースレジスタもしくはＳＲＣレジスタと称する。ＤＳＴレジスタ及びＳＲＣレジスタは、「変数」の具体例である。
【００３５】
＜レジスタセット＞
本実施の形態にかかるプロセッサのレジスタセット、つまり、レジスタ群１３１０の構成を、図４を参照しながら説明する。
【００３６】
レジスタセット１５００には、演算時に汎用的に使用される汎用レジスタ１５１１、プロセッサが実行している命令のアドレスを示すプログラムカウンタ（ＰＣ）１５１２、条件分岐等の判定用に用いられる条件フラグレジスタ（ＣＦＲ）１５１３が含まれる。
【００３７】
なお、前記命令セット１４００ならびに前記レジスタセット１５００は、説明に必要な部分を部分的にぬきだして例示したものである。
【００３８】
本発明を実施するにあたっては、命令セットとレジスタセットは、他のものを用いてもよい。例えば、本発明は当業者に広く用いられているＡＲＭ、ＭＩＰＳ、ｘ８６、ｍｎ１０３００命令セット等において実施されうる。
【００３９】
＜命令列保持部＞
命令列保持部１３４０に保持される命令列１６００のデータ構造の一例を、図５を参照しながら説明する。命令列保持部１３４０には、命令が格納されていたアドレス１６０１と、命令１６０２とが対応付けられて格納される。
【００４０】
＜省電力制御装置＞
次に、省電力制御装置の構成を、図１を参照しながら説明する。
【００４１】
省電力制御装置は、ループ検出部１７０１、ループ伝搬依存解析部１７０２、第一の電力制御部１７０３、ループ脱出検出部１７０４、第二の電力制御部１７０５を備えている。また、省電力制御装置は、レジスタ群１３１０に設けられたループ範囲記憶部１９００を含む。
【００４２】
省電力制御装置は、大別して、２つの構成要素に分けられる。第一の構成要素は、ビジーウェイトの実行状態を検出して、省電力制御を行い、コンピュータシステム１３００を省電力の状態にする処理を行う。第二の構成要素は、ビジーウェイトの終了を検出して、省電力制御を終了させることで、コンピュータシステム１３００を省電力制御が行われる以前の状態に戻す処理を行う。以下、第一の構成要素、第二の構成要素の順に説明する。
【００４３】
（１）第一の構成要素
まず、第一の構成要素は、ループ検出部１７０１と、ループ伝搬依存解析部１７０２と、第一の電力制御部１７０３とによって構成される。そして、ループ検出部１７０１によってループ処理の実行を検出し、ループ伝搬依存解析部１７０２によってビジーウェイト用のループ処理であるか演算用のループ処理等であるかを判定する。そして、ビジーウェイト用のループ処理である場合に、第一の電力制御部１７０３によって省電力制御を行う。以下、第一の構成要素の動作について、図面を参照しながら説明する。
【００４４】
（１−１）ループ検出部
ループ検出部１７０１の動作を、図６のフローチャートを参照しながら説明する。
【００４５】
ループ検出部１７０１は、ステップＳ１８０１で、分岐命令の成立を判定する。ステップＳ１８０１の判定結果がＹＥＳ（分岐成立）の場合は、ステップＳ１８０３へ進む。ステップＳ１８０１の判定結果がＮＯ（分岐不成立）の場合は、ステップＳ１８０１の判定を再度行う。
【００４６】
例えば、実行ユニット１３５０からリタイアメントユニット１３６０に送られた、ジャンプ命令（ＪＭＰ命令１４１６）もしくは条件分岐命令（ＢＮＥ命令１４１５）の実行結果及び条件フラグレジスタ（ＣＦＲ）１５１３の値に基づいて判定を行う。具体的には、ループ検出部１７０１は、上記実行結果が、プログラムカウンタ１３１１の値を所定のアドレスに書き換えるという実行内容であることをもって、分岐命令が成立したと判定する。
【００４７】
以下、詳細に説明する。ループ検出部１７０１は、各種の分岐命令（ＪＭＰ命令、ＢＮＥ命令等）を保持する分岐命令記憶部と、リタイアメントユニット１３６０に格納された実行済み命令と前記各種の分岐命令とを比較する命令比較部とを備えている。そして、実行済みの分岐命令がリタイアメントユニット１３６０に格納されると、命令比較部によって分岐命令が検出される。
【００４８】
さらに、分岐命令が条件分岐命令である場合は、ループ検出部１７０１は、レジスタ群１３１０のＣＦＲ１５１３の値を参照し、例えば、ＣＦＲ１５１３の値が「０」でない場合に分岐が成立し、「０」である場合に分岐が不成立であると判定する。このＣＦＲ１５１３の値は、例えば、条件分岐命令に先行する比較命令（ＣＭＰ）の実行結果がリタイアメントユニット１３６０によって書き込まれたものである。
【００４９】
次に、ステップＳ１８０３で、ループ検出部１７０１は、分岐先のアドレスが、分岐命令に先行するアドレスか否かを判定する。ステップＳ１８０３の判定結果がＹＥＳの場合（分岐先のアドレスが分岐命令に先行するアドレスである場合）は、ステップＳ１８０５へ進む。ステップＳ１８０３の判定結果がＮＯの場合（分岐先のアドレスが分岐命令に先行するアドレスでない場合）は、ステップＳ１８０１に戻る。なお、実行ユニット１３５０からリタイアメントユニット１３６０に送られる実行結果には、分岐命令のアドレス、及び、分岐先のアドレスの情報が含まれており、それら２つのアドレスを比較することで上記判定が行われる。そして、分岐先のアドレスが分岐命令に先行するアドレス（分岐命令のアドレスよりも値が小さいアドレス）である場合に、ループ実行状態であると判定する。ここで、分岐先のアドレスと、分岐命令のアドレスとの差が設定値以上である場合、つまり、比較的命令数の多いループ処理は、ビジーウェイト用のループである可能性が非常に低いため、依存関係の解析を行うまでもなく、除外してもよい。なお、上記設定値は、例えば、１０とすることができる。
【００５０】
次に、ステップＳ１８０４において、ループ検出部１７０１は、ループの先頭アドレス１９１１と末尾アドレス１９１２を抽出する。
【００５１】
まず、ループ検出部１７０１は、ループの先頭アドレス１９１１として、分岐が成立した分岐命令の分岐先のアドレスを抽出する。次に、ループ検出部１７０１は、ループの末尾アドレス１９１２として、分岐が成立した分岐命令が格納されているアドレスを抽出する。
【００５２】
なお、ループ検出部１７０１によるループの先頭アドレス１９１１と末尾アドレス１９１２の抽出の具体例として、図５記載の命令列１６００を例にとって説明する。ループの先頭アドレス１９１１は、「分岐命令の分岐先のアドレス」であるので、分岐命令「ＢＮＥ１００４」における１００４、即ち、１００４番地となる。次に、ループの末尾アドレス１９１２は、「分岐命令が格納されているアドレス」であるので、分岐命令「ＢＮＥ１００４」が格納されている１０１０番地となる。
【００５３】
次に、ステップＳ１８０５において、ループ検出部１７０１は、ステップＳ１８０４で抽出したループの先頭アドレス１９１１とループの末尾アドレス１９１２を、ループ範囲記憶部１９００へ出力する。ループ範囲記憶部１９００のデータ構造の例を、図７を参照しながら説明する。ループ範囲記憶部１９００は、先頭アドレス１９１１、及び末尾アドレス１９１２を記憶するレジスタ（メモリの一種）によって構成される。
【００５４】
続いて、ステップＳ１８０７で、ループ検出部１７０１は、ループ伝搬依存解析部１７０２に、依存関係解析の実行指示１７１１を出力する。なお、実行指示１７１１は、例えば、ループ検出部１７０１とループ伝搬依存解析部１７０２とを接続する信号線の電圧を高レベルにすることによりなされる。
【００５５】
なお、ループ検出部１７０１は、プロセッサがループを実行していることを検出できるものであれば、ここで示した処理以外を用いるものであってもよい。例えば、プログラムカウンタ１３１１に保持されているアドレスの更新により、そのアドレスが減少した場合にループ実行状態であると判定するものであってもよい。
【００５６】
（１−２）ループ伝搬依存解析部１７０２
ここで、ループ伝搬依存解析部１７０２によって、ビジーウェイトに用いられるループと、ビジーウェイトでないループ（例えば、演算用のループ）とが判別されることを、具体的な命令列を列挙しながら説明する。
【００５７】
（１−２−１）ビジーウェイト用のループの解析例
まず、ループ伝搬依存解析部１７０２の解析対象となるビジーウェイト用ループの命令列の例として、図８の命令列を挙げる。
【００５８】
図８の命令列２１００では、１００８番地のＬＤＲ命令によって、Ｒ２レジスタの指すアドレスからＲ０レジスタへ値を読込む。次に、１００ｃ番地のＣＭＰ命令によってＲ０レジスタの値と、あらかじめ値が格納されたＲ１レジスタの値を比較する。値が一致した場合は、１０１０番地のＢＮＥ命令で、ループを脱出する。すなわち、分岐不成立により、ループ処理が終了する。一方、値が一致しなかった場合は、１０１０番地のＢＮＥ命令で、１００４番地へ分岐する。すなわち、分岐が成立する。
【００５９】
図８に示す命令列２１００は、一定のアドレス（Ｒ２レジスタの指すアドレス）から値を繰り返し読み出しては比較する処理を行うものである。Ｒ２レジスタの指すアドレスに格納されている値が、ビジーウェイトの同期用変数に相当する。
【００６０】
上記命令列２１００は、キーの入力待ち等に用いられ、例えば、キーが押された場合（同期用変数が書き換えられた場合）に後続する処理が実行される。しかし、キーが押されない場合（同期用変数が書き換えられない場合）は、同期用変数（Ｒ２レジスタの指すアドレス）の値を確認する処理が繰り返し行われ、電力を浪費することとなる。よって、このようなループ処理（命令列２１００）の実行による電力の消費を抑えることが望ましい。
【００６１】
次に、ループ伝搬依存解析部１７０２の解析動作を、図９のフローチャートおよび図８の命令列２１００を参照しながら説明する。
【００６２】
ステップＳ２００１で、ループ伝搬依存解析部１７０２は、ループ検出部１７０１から実行指示１７１１を受けたタイミングで解析処理を開始する。
【００６３】
ステップＳ２００３において、ループ伝搬依存解析部１７０２は、ループ範囲記憶部１９００より、ループの先頭アドレス１９１１及び末尾アドレス１９１２を取得する。ここで、ループの先頭アドレス１９１１等の取得は、発行ユニット１３３０が所定のレジスタから値を取得する場合と同様に行われ、指定されるレジスタがループ範囲記憶部１９００のレジスタとされる。
【００６４】
ステップＳ２００５において、ループ伝搬依存解析部１７０２は、命令列保持部１３４０からループ範囲内の命令列を取得する。前述のように、命令列保持部１３４０には、発行ユニット１３３０によって発行された発行済み命令が残されている。また、命令列保持部１３４０に格納される命令数は、ループ検出後であっても命令列保持部１３４０にループ範囲内の命令列が残るように多めにされている。
【００６５】
なお、仮に命令列保持部１３４０にループ範囲内の命令列が無い場合でも、分岐命令実行後にプログラムカウンタ１３１１をループの先頭アドレスに書き換え、ループ範囲内の命令列を命令フェッチ／デコードユニット１３２０によって再度フェッチ／デコードし、命令列保持部１３４０に格納してもよい。
【００６６】
ステップＳ２００７において、ループ伝搬依存解析部１７０２は、取得した命令列２１００を、ループ伝搬依存解析部１７０２に備えられた依存関係解析用バッファ２２００に格納する。
【００６７】
ここで、依存関係解析用バッファ２２００のデータ構造を、図１０を参照しながら説明する。
【００６８】
依存関係解析用バッファ２２００には、ループを構成する命令列２１００がループ２回分並べて格納される。依存関係解析用バッファ２２００には、ループに含まれる命令ごとにエントリが設けられる。エントリは、命令と、命令に対応付けられた情報を記憶するメモリである。
【００６９】
依存関係解析用バッファ２２００の各エントリに格納される情報は、当該命令のニモニック２２０１、当該命令のＤＳＴレジスタ（デスティネーションレジスタ）２２０２の識別子、当該命令のＳＲＣレジスタ（ソースレジスタ）２２０３の識別子に加えて、依存関係解析に用いる中間的な情報として、当該命令の依存関係解析用バッファ２２００における位置を識別するためのエントリ番号２２０４、当該命令が前段のループにあるか後段のループにあるかを判別するためのイテレーション番号２２０５、依存元命令のエントリ番号２２０６、当該命令と依存元命令とのイテレーションまたぎ判定結果２２０７を含む。
【００７０】
ステップＳ２００７では、依存関係解析用バッファ２２００に各種の情報が格納される。上記情報は、ニモニック２２０１、ＤＳＴレジスタ２２０２の識別子、ＳＲＣレジスタ２２０３の識別子とする。
【００７１】
ステップＳ２００９から、ステップＳ２０１７までの間は、ループ伝搬依存解析部１７０２は、依存関係解析用バッファ２２００の各エントリに対して、先頭から末尾のエントリに対して順番に以下の処理を繰り返し行う。
【００７２】
まず、ステップＳ２０１１で、ループ伝搬依存解析部１７０２は、各エントリにエントリ番号２２０４を付与する。例えば、エントリ番号２２０４として使用する番号は、先頭のエントリを「１」とし、以下、「２」、「３」、「４」、「５」、「６」、「７」、「８」というように１つずつ増加する数値とする。
【００７３】
なお、エントリ番号は、依存関係解析バッファ内のエントリを一意に識別できる情報であれば、他の番号や記号やビットを用いてもかまわない。
【００７４】
次に、ステップＳ２０１３において、ループ伝搬依存解析部１７０２は、各エントリに、前段のループか、後段のループかを識別するための、イテレーション番号２２０５を付与する。
【００７５】
ここでは、前段のループを示す識別子を「１」、後段のループを示す識別子を「２」とする。なお、イテレーション番号２２０５は、前段のループか、後段のループかを識別できる情報であれば、「１」、「２」以外の情報を用いてもかまわない。
【００７６】
次に、ステップＳ２０１５において、ループ伝搬依存解析部１７０２は、依存元命令のエントリ番号２２０６を書き込む。依存元命令とは、当該命令のＳＲＣレジスタをＤＳＴレジスタとして用いる、最も直前の命令のことである。これにより、いわゆるフロー依存、真の依存、ＲＡＷ（Read after Write）ハザード等と呼称される依存関係が検出される。
【００７７】
なお、ＳＲＣレジスタが存在しない命令の場合は、この項目に書き込みは行われず、初期値の「０」が保持される。また、依存元命令が依存関係解析用バッファ２２００の中になく、ループの外にあると推定される場合は、“ループの外”に存在することを示す値として、エントリ番号にない値（例えば、「１０」）を書き込んでもよいし、初期値の「０」にしておいてもかまわない。
【００７８】
ここで、同一イテレーション番号２２０５の命令間の依存関係（例えばフロー依存）は、イテレーション番号の異なるループ間にまたがるものではなく、ループ伝搬依存の有無の判定に用いられない。よって、ステップＳ２０１５において、ループ内の依存の有無を調べることなく、ループ伝搬依存の有無だけを判定し得る情報を生成してもよい。具体的には、イテレーション番号２２０５が「１」の命令が、イテレーション番号２２０５が「２」の各エントリについて、依存元命令になるかどうかを判定するための情報を生成できればよい。
【００７９】
ステップＳ２０１６では、ループ伝搬依存解析部１７０２は、ループ伝搬依存の有無を調べる。具体的には、依存元命令のエントリ番号２２０６を参照し、依存元命令が属するイテレーションの番号が「１」であり、他方で、当該命令のイテレーション番号２２０５が「２」であるか判定する。判定結果がＹＥＳであった場合は、ループ伝搬依存が存在しており、依存元命令とのイテレーションまたぎ判定結果２２０７に「ＹＥＳ」を書き込む（実際は、値を「１」にする）。判定結果がＮＯであった場合は、ループ伝搬依存はなく、依存元命令とのイテレーションまたぎ判定結果２２０７に「ＮＯ」を書き込む（実際は、値を「０」にする）。
【００８０】
ステップＳ２０１７において、全てのエントリについて、ループ処理が完了した場合は、ループを終了し、ステップＳ２０１９へ進む。
【００８１】
ここで、図１０は、図８に示す命令列を、プロセッサ１３０１が実行した際の、ループ伝搬依存解析部１７０２のステップＳ２０１９の判定が行われる直前の依存関係解析用バッファ２２００の状態が示されている。
【００８２】
次に、ステップＳ２０１９において、ループ伝搬依存解析部１７０２は、依存元命令とのイテレーションまたぎ判定結果２２０７が「ＹＥＳ」であるエントリが存在するか判定する。
【００８３】
ステップＳ２０１９の判定結果がＹＥＳの場合は、ビジーウェイト用のループではないため、ステップＳ２０２１へ進む。そして、ステップＳ２０２１では、ループ伝搬依存解析部１７０２は、第一の電力制御部１７０３へ実行指示１７１２を出力せずに、処理を終了する。よって、省電力制御は行われない。
【００８４】
一方、ステップＳ２０１９の判定結果がＮＯの場合は、ビジーウェイト用のループであるため、ステップＳ２０２３に進む。そして、ステップＳ２０２３では、ループ伝搬依存解析部１７０２は、第一の電力制御部１７０３へ省電力制御実行の実行指示１７１２を出力し、処理を終了する。よって、省電力制御が行われる。なお、実行指示１７１２は、例えば、ループ伝搬依存解析部１７０２と第一の電力制御部１７０３とを接続する信号線の電圧を高レベルにすることによりなされる。
【００８５】
ここで、上記ループ伝搬依存解析部１７０２の処理において、依存関係解析用バッファ２２００に格納された情報が図１０の例であった場合は、ループ伝搬依存はなく、ステップＳ２０１９の判定結果は「ＮＯ」となる。つまり、エントリ番号が５番から８番までの各々のエントリには、依存元命令とのイテレーションまたぎ判定結果２２０７が「ＹＥＳ」であるものが存在しないのである。この場合、依存解析されたループ処理は、ビジーウェイト用のループ処理であり、省電力制御の対象となる。
【００８６】
そのため、この例では、ステップＳ２０２３へ進み、その結果、第一の電力制御部１７０３へ実行指示１７１２が出力される。
【００８７】
以上に述べた処理を行うことで、ループ伝搬依存解析部１７０２は、図９のフローチャートに示される解析処理を行い、後段のループに属する命令のソースレジスタが、前段のループに属する命令の実行によって書き込まれた値を読み出さないことをもってループ伝搬依存がないと判定する。言い換えると、ループ伝搬依存解析部１７０２は、後段のループに属する命令のソースレジスタが、前段のループに属する命令の実行によって書き込まれた値を読み出されることをもってループ伝搬依存があると判定する。
【００８８】
（１−２−２）ビジーウェイト用ではないループの解析例
次に、ループ伝搬依存解析部１７０２によって、ループ伝搬依存が検出されるループを構成する命令列の例として、図１１の命令列２６００を挙げる。
【００８９】
図１１の命令列２６００では、２００４番地のＡＤＤ命令で、Ｒ２レジスタに４を加算した値を、Ｒ２レジスタに入力する。次に、２００８番地のＬＤＲ命令によって、Ｒ２レジスタの指すアドレスからＲ０レジスタへ値を読込む。次に、２００ｃ番地のＣＭＰ命令によってＲ０レジスタの値と、予め設定値が格納されているＲ１レジスタの値を比較する。値が一致した場合は、２０１０番地のＢＮＥ命令で、ループを脱出する。値が一致しなかった場合は、２０１０番地のＢＮＥ命令で、２００４番地へ分岐する。
【００９０】
図１１に示す命令列２６００は、図９に示す命令列２１００とは異なり、一定のアドレスから値を繰り返し読み出しては比較する処理を行うものではない。何故なら、２００４番地のＡＤＤ命令でＲ２レジスタの値が、毎回のループで加算されることで、ＬＤＲ命令が用いるアドレスの値が毎回変わるためである。つまり、上記命令列２６００は、複数のアドレスの中からＲ１レジスタと同じ値が格納されているアドレスを見つけ出す処理であり、ビジーウェイト用のループに用いる命令列ではない。よって、省電力制御の対象外とすべきループ処理である。
【００９１】
次に、図１２に、図１１に示す命令列２６００について、ループ伝搬依存解析部１７０２によって依存関係の解析が行われた場合の、依存関係解析用バッファ２７００の状態を示す。なお、上記依存関係解析用バッファ２７００の状態は、ステップＳ２０１９の判定が行われる直前の状態である。
【００９２】
図１２の依存関係解析用バッファ２７００において、エントリ番号がＮｏ．５のＳＲＣレジスタ２２０３はＲ２レジスタであり、エントリ番号がＮｏ．１のＤＳＴレジスタ２２０２と同じである。そして、エントリ番号がＮｏ．１とＮｏ．５の間に、ＤＳＴレジスタ２２０２がＲ２レジスタであるものはない。すなわち、エントリ番号がＮｏ．５のＳＲＣレジスタ２２０３は、依存元命令とのイテレーションまたぎ判定結果２２０７がＹＥＳとなる。そのため、ループ伝搬依存解析部１７０２のステップＳ２０１９の判定結果はＹＥＳ（ループ伝搬依存が存在する）となる。
【００９３】
その結果、第一の電力制御部１７０３へ実行指示１７１２が出力されず、このタイミングでは、第一の電力制御部１７０３は、プロセッサ１３０１の省電力制御を行わない。
【００９４】
（１−２−３）ループ伝搬依存解析のまとめ
上記２つの例によって、ビジーウェイトに用いられるループ処理が省電力制御の対象として選択的に検出され、ビジーウェイト用ではないループ処理は選択的に検出されないことが理解される。
【００９５】
したがって、ループ伝搬依存解析部１７０２を用いることで、ビジーウェイトのループが実行されているときは、省電力制御が行われ、逆に、ビジーウェイトのループが実行されていないときは、省電力制御が回避される。
【００９６】
ここで、本発明の実施の形態１において、特に留意されたい点は、ループ伝搬依存解析部１７０２の処理において、ステップＳ２０１９の判定を行うことである。ステップＳ２０１９では、後段のループに属する命令のソースレジスタが、前段のループに属する命令の実行によって、書き込まれないことを判定している。
【００９７】
これにより、ループに使用される変数が、ループの外部的な要因によって書き換えられることを判定する。例えば、図３３の例では、第一プロセッサ側の設定部１１０１によって同期用変数が書き換えられた場合、ループの外部的な要因によって書き換えられたこととなる。このように、ビジーウェイトに用いられる同期用変数は、ループの外部的な要因によって書き換えられる性質があるため、この判定方法を用いることで、ビジーウェイトの検出を行うことが可能となる。
【００９８】
例えば、図１０のエントリ番号がＮｏ．６のＳＲＣレジスタ２２０３はＲ２レジスタであり、このＲ２レジスタの値がＲ０レジスタに読み込まれた後、Ｒ１レジスタの値と比較される。この場合、Ｒ２レジスタが上記同期用変数に相当する。そして、ループ内にはＲ２レジスタをＤＳＴレジスタ２２０２とする命令が無く、同期用変数としてのＲ２レジスタはループの内部的な要因によって書き換えられないことが分かる。つまり、ビジーウェイト用のループであると判断することができる。
【００９９】
これにより、プロセッサが実行するさまざまなループ処理の中から、ビジーウェイトに用いられるループ処理を選択的に検出し、ビジーウェイトに用いられているループが実行されているときに、選択的に省電力制御を行うことが可能となる。
【０１００】
なお、実施の形態１では、ループ伝搬依存解析部１７０２の処理として、後続ループの命令のＳＲＣレジスタ２２０３が、先行ループの命令のＤＳＴレジスタ２２０２として使用されるか判定する手順を例に挙げた。しかしながら、ループ伝搬依存解析部１７０２は、後続ループで使用される変数の値が、先行ループの命令の実行によって、書き換えられないことを検出できるものであれば、他の処理を用いて実施されてもかまわない。
【０１０１】
ここで、図９のフローチャートの処理手順は、ループ伝搬依存の有無を解析するための処理手順を分かり易く解説するための一例であり、上記処理手順以外の方法によってループ伝搬依存の有無を判別してもよい（具体例は後述する）。また、依存関係解析用バッファ２２００，２７００に示された各種の項目のうち、例えば、ニモニック２２０１、エントリ番号２２０４、イテレーション番号２２０５、依存元命令のエントリ番号２２０６等の少なくとも１つを省略してもよい。
【０１０２】
（１−３）第一の電力制御部１７０３
次に、第一の電力制御部１７０３の動作を、図１３のフローチャートを参照しながら説明する。
【０１０３】
第一の電力制御部１７０３は、ステップＳ２３０１で、ループ伝搬依存解析部１７０２から実行指示１７１２を受け取るまで待機する。
【０１０４】
第一の電力制御部１７０３は、実行指示１７１２を受け取ると、ステップＳ２３０３で省電力制御を行う。具体的には、第一の電力制御部１７０３は、電力供給デバイス１３０４の電力供給モードを通常電力モードから省電力モードに移行させるための電力制御情報１７３１を、電力供給デバイス１３０４へ送信する。
【０１０５】
省電力制御の具体的な例として、電力供給デバイス１３０４がプロセッサ１３０１へ供給するクロック１３０７の周波数を低減させ、プロセッサ１３０１へ供給する電力１３０６の電圧を下げさせるというものを挙げる。例えば、クロックの周波数を最大周波数の１２．５％まで低減させ、電圧を最大電圧の７０％まで低減させる。
【０１０６】
ここで、電力供給デバイス１３０４は、電力供給モードを通常電力モードと省電力モードとに切り換え可能にされている。そして、電力供給デバイス１３０４は、通常電力モードでは、設定された周波数（例えば、最大周波数）のクロック１３０７をクロック発生回路によって発生させ、プロセッサ１３０１に供給する。また、電力供給デバイス１３０４は、設定された電圧（例えば、最大電圧）の電力１３０６をプロセッサ１３０１に供給する。
【０１０７】
一方、電力供給デバイス１３０４は、第一の電力制御部１７０３から電力制御情報１７３１を受け取ると、省電力モードにより、上記の例のように電圧及びクロック周波数を上記設定値よりも減少させて電力１３０６の供給及びクロック１３０７の供給を行う。なお、省電力モードを複数種類設け、複数種類の省電力モードで省電力の程度を異ならせてもよい。
【０１０８】
ステップＳ２３０５で、第一の電力制御部１７０３は、ループ脱出検出部１７０４へ、ループ脱出検出の実行指示１７１３を出力する。
【０１０９】
第一の電力制御部１７０３でかかる処理を行うことにより、ループ伝搬依存解析部１７０２でビジーウェイト実行中が検出されたときに、プロセッサ１３０１の電力制御を行うことが可能となる。
【０１１０】
（２）第二の構成要素
省電力制御装置の第二の構成要素である、ループ脱出検出部１７０４（ループ終了検出部の一例である）と、第二の電力制御部１７０５とについて説明する。これらループ脱出検出部１７０４と、第二の電力制御部１７０５とは、それぞれ、プロセッサ１３０１がビジーウェイト用のループ処理から脱出したことを検出する処理、省電力制御を終了させる電力制御を行う。
【０１１１】
（２−１）ループ脱出検出部
ループ脱出検出部１７０４の動作を、図１４のフローチャートを参照しながら説明する。
【０１１２】
まず、ステップＳ２４０１において、ループ脱出検出部１７０４は、第一の電力制御部１７０３から、実行指示１７１３を受け取るまで待機する。
【０１１３】
ループ脱出検出部１７０４は、実行指示１７１３を受け取ると、ステップＳ２４０３で、ループ範囲記憶部１９００から、ループの先頭アドレス１９１１と、ループの末尾アドレス１９１２を取得する。これら先頭アドレス１９１１及び末尾アドレス１９１２は、ループ脱出検出部１７０４が備えるメモリに格納される。なお、ループ検出部１７０１が取得した先頭アドレス１９１１及び末尾アドレス１９１２を上記メモリに保持していてもよい。
【０１１４】
次に、ステップＳ２４０５で、ループ脱出検出部１７０４は、分岐命令の実行結果（及び条件フラグレジスタ（ＣＦＲ）の値）に基づき、分岐が成立したか判定する。この判定は、ループ検出部１７０１がステップＳ１８０１で行った処理と同じである。また、ループ脱出検出部１７０４は、ループ検出部１７０１と同様に、分岐命令記憶部と命令比較部とを備えている。これら分岐命令記憶部と命令比較部とを、ループ検出部１７０１とループ脱出検出部１７０４とで共用してもよい。
【０１１５】
ステップＳ２４０５の判定結果がＹＥＳ（分岐成立）の場合は、ステップＳ２４０７に進む。ステップＳ２４０５の判定結果がＮＯ（分岐不成立）の場合は、ステップＳ２４０８へ進む。
【０１１６】
ステップＳ２４０７では、ループ脱出検出部１７０４は、ループの末尾に位置する分岐命令以外に条件分岐命令が含まれている場合に、その条件分岐命令によってループ範囲外に分岐するか否かを判定する。具体的には、ステップＳ２４０５で成立した分岐のジャンプ先のアドレスが、ループ範囲記憶部１９００から取得したループの先頭アドレス１９１１とループの末尾アドレス１９１２の範囲を外れたか判定する。つまり、分岐先のアドレスが、先頭アドレス１９１１より小さい、又は、末尾アドレス１９１２よりも大きいことをもって、分岐先がループ範囲外であると判定する。
【０１１７】
ステップＳ２４０７の判定結果がＹＥＳの場合は、ループ処理が終了しているため、省電力制御を終了させるべくステップＳ２４０９に進む。一方、判定結果がＮＯの場合は、ループ処理が継続しており、検出処理を継続すべくステップＳ２４０５に戻る。
【０１１８】
上記ステップＳ２４０８では、ループ脱出検出部１７０４は、ループの末尾に位置する条件分岐命令の実行結果が分岐不成立であるか否かを判定する。具体的には、条件分岐命令のアドレスが、ループの末尾アドレス１９１２と同じであるか否かが判定される。ステップＳ２４０８の判定結果がＹＥＳの場合は、ループ処理が終了しており、ステップＳ２４０９に進む。ステップＳ２４０８の判定結果がＮＯの場合は、ループ処理が継続しており、ステップＳ２４０５に戻る。
【０１１９】
ステップＳ２４０９では、ループ脱出検出部１７０４は、省電力制御を終了させるべく、第二の電力制御部１７０５へ、省電力制御終了の実行指示１７１４を出力する。なお、実行指示１７１４は、例えば、ループ脱出検出部１７０４と第二の電力制御部１７０５とを接続する信号線の電圧を高レベルにすることによりなされる。
【０１２０】
なお、本実施の形態１では、ループ脱出検出部１７０４を、リタイアメントユニット１３６０内に配置し、分岐命令の実行結果に基づいてループ処理が終了したか否かを検出した。しかしながら、ループ処理が終了したことを検出できるほかの方法もしくは装置があれば、その方法もしくは装置を用いてもかまわない。代用可能な他の方法の例として、プログラムカウンタ１３１１の値がループ範囲外になったことをもって、ループ処理の終了を検出するという方法が挙げられる。この場合、ループ終了の検出処理の安定性を向上させるため、例えば、プログラムカウンタ１３１１の値が、ループの末尾アドレスに所定値を加えた値より大きくなった場合に、ループ処理が終了したと判定してもよい。
【０１２１】
（２−２）第二の電力制御部
次に、第二の電力制御部１７０５の動作を、図１５のフローチャートを参照しながら説明する。
【０１２２】
まず、ステップＳ２５０１で、第二の電力制御部１７０５は、ループ伝搬依存解析部１７０２からの実行指示１７１４を受け取るまで待機する。
【０１２３】
次に、第二の電力制御部１７０５は、実行指示１７１４を受け取ると、ステップＳ２５０３で、省電力制御を終了し、通常電力制御に戻す制御を行う。具体的には、第二の電力制御部１７０５は、電力供給デバイス１３０４の電力供給モードを省電力モードから通常電力モードに復帰させるための電力制御情報１７５１を、電力供給デバイス１３０４へ送信する。その結果、電力供給デバイス１３０４は、例えば、第一の電力制御部１７０３で低減させていた、プロセッサ１３０１に供給するクロック１３０７の周波数と電力１３０６の電圧を、それぞれ増加させる（例えば、元の値に戻す）。
【０１２４】
以上で、本発明の実施の形態１における省電力制御装置を構成するループ検出部１７０１、ループ伝搬依存解析部１７０２、第一の電力制御部１７０３、ループ脱出検出部１７０４、第二の電力制御部１７０５の動作について説明した。
【０１２５】
（２−３）本実施の形態において、第一の電力制御部１７０３と、第二の電力制御部１７０５とによって、前記「電力制御部」が構成されている。なお、前記「電力制御部」を、第一の電力制御部１７０３によって構成し、「電力制御部」に第二の電力制御部１７０５が含まれない態様としてもよい。
【０１２６】
＜ループ伝搬依存解析部の構成例＞
ループ伝搬依存解析部１７０２は、例えば、図１６、図１７に示すデジタルの電子回路を用いてループ伝搬依存の有無を解析するものとすることができる。
【０１２７】
図１６は、フロー依存を検出するフロー依存検出回路２８５１を示す図である。図１７は、ループ伝搬依存を検出するために、予備的にフロー依存およびループ伝搬依存の両方を検出する予備的検出回路２８５３を示す図である。なお、上記図１６、図１７において、ループに含まれる命令が４つの例（命令１〜４）を示しているが、４つ以外の命令間の依存関係、例えば、５つ以上の命令間の依存関係を検出する回路を構成してもよい。
【０１２８】
フロー依存検出回路２８５１は、ループに含まれる命令列を格納する命令バッファ２８５５と、命令バッファ２８５５に格納された命令間のＤＳＴレジスタ（デスティネーションレジスタ）２２０２とＳＲＣレジスタ（ソースレジスタ）２２０３との値を比較する比較回路２８５７とを備えている。図において、最も上側に位置する命令がループの先頭である。なお、１つの命令で２つのＳＲＣレジスタ２２０３ａ，２２０３ｂが用いられている場合、ＳＲＣレジスタ２２０３ａ，２２０３ｂの各々と、ＤＳＴレジスタ２２０２との値が比較される。
【０１２９】
命令バッファ２８５５には、命令列保持部１３４０からループ範囲内の命令列が格納される。なお、命令列保持部１３４０を命令バッファ２８５５として用いてもよい。
【０１３０】
比較回路２８５７は、ＤＳＴレジスタ２２０２とＳＲＣレジスタ２２０３との値が等しい場合に「１」を出力し、値が異なる場合に「０」を出力する。つまり、比較回路２８５７は、依存関係がある場合に「１」を出力する。
【０１３１】
ここで、１つのＳＲＣレジスタ２２０３は、複数のＤＳＴレジスタ２２０２と比較される場合がある（例えば、命令４のＳＲＣレジスタ２２０３）。その場合は、複数の比較回路２８５７のうちの１つでも「１」が出力されていれば、フロー依存がある（「１」）と判定される。一方、複数の比較回路２８５７の全てが「０」を出力している場合は、フロー依存がない（「０」）と判定される。
【０１３２】
ループの命令のうち、ｎ番目の命令のＳＲＣレジスタ２２０３ａ，２２０３ｂの判定結果をＳｎａ，Ｓｎｂとする。例えば、命令２のＳＲＣレジスタ２２０３ａ，２２０３ｂの判定結果は、それぞれＳ２ａ，Ｓ２ｂである。なお、命令１にはフロー依存が生じないため、判定結果の図示を省略している。
【０１３３】
図１７に示す予備的検出回路２８５３には、ループに含まれる命令列を格納する３つの命令バッファ２８６１ａ，２８６１ｂ，２８６１ｃと、２つの命令バッファ２８６１ａ，２８６１ｂ間でＤＳＴレジスタ２２０２とＳＲＣレジスタ２２０３との値を比較する比較回路２８５７とが設けられている。
【０１３４】
命令バッファ２８６１ｃは、第ｉ回目のループが実行される際にループ範囲内の命令列を格納する。そして、第ｉ＋１回目のループが実行される際に、格納している命令列が命令バッファ２８６１ａに移動させられる。これにより、第ｉ＋１回目のループが実行される際に、２つの命令バッファ２８６１ａ，２８６１ｂにループの命令列が格納される。
【０１３５】
比較回路２８５７は、フロー依存検出回路２８５１の比較回路と同じものである。しかし、予備的検出回路２８５３において、ＤＳＴレジスタ２２０２とＳＲＣレジスタ２２０３との接続の組み合わせがフロー依存検出回路２８５１と異なっている。具体的には、先行ループ命令が格納された命令バッファ２８６１ａのＤＳＴレジスタ２２０２と、後続ループ命令が格納された命令バッファ２８６１ｂのＳＲＣレジスタ２２０３とが、全ての組み合わせで比較される。
【０１３６】
ここで、命令バッファ２８６１ｂのＳＲＣレジスタ２２０３ａ，２２０３ｂの判定結果を、予備的検出回路２８５３と同様に、Ｒｎａ、Ｒｎｂとする。
【０１３７】
そして、いずれかのＳＲＣレジスタ２２０３について、予備的検出回路２８５３において依存があると判定され、かつ、フロー依存検出回路２８５１において依存がないと判定された場合に、ループ伝搬依存があると判定される。すなわち、ループ伝搬依存が検出される。
【０１３８】
図１２の例では、エントリ番号が５番のＳＲＣレジスタ２２０３は、予備的検出回路２８５３によりエントリ番号が１番のＤＳＴレジスタ２２０２と依存すると判定される。また、エントリ番号が５番のＳＲＣレジスタ２２０３は、ループ内においてフロー依存がないため、フロー依存検出回路２８５１では依存が検出されない。よって、エントリ番号が５番のＳＲＣレジスタ２２０３については、予備的検出回路２８５３の判定結果Ｒ１ａは「１」であり、フロー依存検出回路２８５１の判定結果Ｓ１ａは「０」である。このような場合にループ伝搬依存が検出されるのである。なお、図１６では上述したように命令１の判定結果Ｓ１ａなどの図示を省略しているが、命令１にはフロー依存が生じないため、命令１の判定結果Ｓ１ａなどは「０」になる。
【０１３９】
上記予備的検出回路２８５３とフロー依存検出回路２８５１とを組み合わせてループ伝搬依存解析部１７０２を構成することができる。
【０１４０】
ここで、図１７の予備的検出回路２８５３は命令バッファ２８６１ａ，２８６１ｂ，２８６１ｃを３つ備えていたが、１つでもよい。命令バッファ２８６１ａに格納された命令については、ＤＳＴレジスタ２２０２のみが比較回路２８５７と接続され、ＳＲＣレジスタ２２０３は比較回路２８５７と接続されていない。逆に、命令バッファ２８６１ｂに格納された命令については、ＳＲＣレジスタ２２０３のみが比較回路２８５７と接続され、ＤＳＴレジスタ２２０２は比較回路２８５７と接続されていない。よって、例えば、命令バッファ２８６１ｂに格納された命令について、ＤＳＴレジスタ２２０２と、ＳＲＣレジスタ２２０３ａ，２２０３ｂとの全ての組み合わせを比較できるものであればよい。
【０１４１】
さらに、図１８に、簡易的にループ伝搬依存を検出するために用いられる簡易ループ伝搬依存検出回路２８７１を示す。
【０１４２】
簡易ループ伝搬依存検出回路２８７１は、フロー依存検出回路２８５１と同様に、命令バッファ２８５５と比較回路２８５７とを備えている。そして、各比較回路２８５７は、１つの命令に対応するＤＳＴレジスタ２２０２とＳＲＣレジスタ２２０３とに接続されている。すなわち、簡易ループ伝搬依存検出回路２８７１は、１つの命令においてＤＳＴレジスタ２２０２とＳＲＣレジスタ２２０３とが同じであるか否かを判別し、判定結果Ｑｎａ,Ｑｎｂ（図において、ｎは１〜４）を出力する回路である。
【０１４３】
この簡易ループ伝搬依存検出回路２８７１により、例えば、図１１に例示したループを成す命令列２６００を解析した場合、２００４番地のＡＤＤ命令のＤＳＴレジスタ２２０２とＳＲＣレジスタ２２０３とがＲ２レジスタで一致し、判定結果Ｑ１ａに「１」が出力され、ループ伝搬依存が検出される。
【０１４４】
このように、簡易ループ伝搬依存検出回路２８７１は、一般的な演算用のループでは、変数となるレジスタの値をインクリメント（あるいはデクリメント）する計算式が存在することに基づいて、簡易的にループ伝搬依存を検出している。
【０１４５】
以上に、電子回路を用いてループ伝搬依存解析部１７０２を構成する例を述べたが、ループ伝搬依存解析部１７０２の構成は、これに限られない。例えば、図９に示した処理を行うプログラムを実行するプロセッサによってループ伝搬依存解析部１７０２を構成してもよい。なお、上記プログラムを実行するプロセッサは、例えば、マイクロプログラムを実行するマイクロプログラム順序器のように簡易的なプロセッサとしてもよい。この場合は、プロセッサ１３０１内に簡易的なプロセッサを形成することができる。また、上記プログラムを実行するプロセッサは、前記プロセッサ１３０１と同一の集積回路内に形成された別個のプロセッサとしてもよいし、前記プロセッサ１３０１としてもよい。なお、前記プロセッサ１３０１と別個の上記プログラムを実行するプロセッサで実行されるループ処理は、検出及び依存解析の対象外とすることができる。
【０１４６】
さらには、ループ伝搬依存解析部１７０２以外の、省電力制御装置の各構成要素（ループ検出部１７０１等）を、それぞれ、電子回路によって構成してもよいし、各構成要素の処理を行うプログラムを実行するプロセッサによって構成してもよい。
【０１４７】
また、実施の形態１において、省電力制御及び省電力制御を終了して通常電力制御に戻す制御を、上記記載したものの他、例えば、次のようなものとしてもよい。省電力制御を、プロセッサ１３０１へ供給するクロック１３０７の周波数を低下させ、又は、プロセッサ１３０１へ供給する電力１３０６の電圧を低下させることによって行う。そして、省電力制御を終了して通常電力制御に戻す制御を、プロセッサ１３０１へ供給するクロック１３０７の周波数を増加させ、又は、プロセッサ１３０１へ供給する電力１３０６の電圧を増加させることによって行う。
【０１４８】
［変形例］
＜Ｉ／Ｏデバイス＞
なお、上記実施の形態１にかかるコンピュータシステムの変形例を、図１９に示す。なお、図１９において、図１と同じ構成要素については、同じ符号を用い、説明を省略する。
【０１４９】
図１９に示すコンピュータシステム２８００には、図１と同様に、プロセッサ１３０１、主記憶１３０２、Ｉ／Ｏデバイス群１３０３、電力供給デバイス１３０４が、バス１３０５を介して、相互に接続されている。また、電力供給デバイス１３０４からは、プロセッサ１３０１に向けて、電力１３０６とクロック１３０７が供給されている。
【０１５０】
図１９は、Ｉ／Ｏデバイス群１３０３となりうるデバイスの例を具体的に示している。
【０１５１】
アンテナ２８１０は、放送波や、形態電話網の電波を受信するデバイスである。
【０１５２】
チューナ２８１１は、アンテナ２８１０が受信したアナログ電波をデジタル信号に変換するものである。
【０１５３】
デコーダ２８１２は、チューナが変換したデジタル信号を、デコードするものである。デコーダ２８１２がデコードするコーデックの例として、ＭＰＥＧ２、ＭＰＥＧ４−ＡＶＣ、ＭＰＥＧ４−ＭＶＣなどが挙げられる。
【０１５４】
ＯＳＤ生成器２８１３は、デコーダ２８１２でデコードされた映像データや、プロセッサ１３０１が生成した画面データなどを、映像データの形に合成する。
【０１５５】
映像表示器２８１４は、ＯＳＤ生成器２８１３が合成した映像データを画面に表示する。映像表示器２８１４の例として、液晶ディスプレイ、プラズマディスプレイ、有機ＥＬディスプレイ、ＬＥＤディスプレイなどが挙げられる。
【０１５６】
スピーカ２８１６は、デコーダ２８１２でデコードされた音声データの音声出力を行う。
【０１５７】
半導体メモリ読み書き装置２８２１、ＨＤＤ２８２２（ハードディスク記憶装置）、光ディスク読み書き装置２８２３は、記憶デバイスとして使用されうる。
【０１５８】
また、ネットワーク通信器２８２５は、コンピュータシステム２８００外部からの、ネットワーク信号を受信する。ネットワーク通信器２８２５の例としては、ｅｔｈｅｒｎｅｔアダプタや、無線ＬＡＮアダプタが挙げられる。
【０１５９】
リモコン受信器２８２６は、外部からの赤外線による制御信号などを受信する。
【０１６０】
なお、ここで説明したＩ／Ｏデバイス群１３０３となりうるデバイスを、コンピュータシステム２８００に搭載するか否かは任意である。また、ここで説明したデバイスとは異なるデバイスを搭載してもよい。例えば、キーボード、マウス、タッチパネル等の入力装置も、Ｉ／Ｏデバイス群１３０３となりうる。
【０１６１】
Ｉ／Ｏデバイスを部分的に搭載したコンピュータシステム２８００は、パーソナルコンピュータ、メインフレーム、テレビ、ビデオデッキ、ＨＤＤレコーダー、携帯電話、カーナビゲーションシステム、固定電話、コピー機、ネットワーク中継機器、タッチパネルつきモバイル端末等の一部分を構成しうる。
【０１６２】
また、第一の電力制御部１７０３と、第二の電力制御部１７０５の制御対象は、電力１３０６の電圧と、クロック１３０７の周波数に限らない。
【０１６３】
第一の電力制御部１７０３と、第二の電力制御部１７０５の制御対象は、プロセッサ１３０１もしくは、コンピュータシステム１３００，２８００に供給される電力を制御するものであればよい。
【０１６４】
［実施の形態２］
実施の形態２におけるマルチスレッド対応のコンピュータシステム２９００の構成を、図２０を参照しながら説明する。
【０１６５】
なお、図２０において、図１のコンピュータシステム１３００と同じ構成要素については、同じ符号を用い、説明を省略する。
【０１６６】
本実施の形態２にかかるコンピュータシステム２９００と、前記実施の形態１にかかるコンピュータシステム１３００とでは、以下の点で異なる。
【０１６７】
（ｉ）コンピュータシステム２９００には、レジスタ群２９１０がスレッドの個数分だけ存在し、各レジスタ群２９１０にスレッド識別子レジスタ２９１２と、タイムスライスレジスタ２９１３が備えられている。
【０１６８】
（ｉｉ）コンピュータシステム２９００には、プロセッサ２９０１において動作するスレッドを切り替えるスレッド切替え部２９２０が備えられている。
【０１６９】
（ｉｉｉ）第一の電力制御部、及び第二の電力制御部には、レジスタ群２９１０へタイムスライス設定情報を出力する機能と、実行ユニット１３５０の稼動本数を制御する機能とが備えられている。
【０１７０】
＜レジスタ群、スレッド切替え部、その他＞
レジスタ群２９１０のデータ構造を、図２１を参照しながら説明する。
【０１７１】
図２１には、第一及び第二スレッドにそれぞれ対応する第一及び第二レジスタ群２９１０ａ，２９１０ｂが示されている。
【０１７２】
各レジスタ群２９１０には、それぞれ図４で説明したレジスタ群１３１０の構成要素に加えて、スレッド識別子レジスタ２９１２、タイムスライスレジスタ２９１３が備えられる。
【０１７３】
スレッド識別子レジスタ２９１２は、複数存在するスレッドの中から、特定のスレッドを識別するためのスレッド識別子を格納するレジスタである。例えば、第一スレッドに対応する第一レジスタ群２９１０ａに属するスレッド識別子レジスタ２９１２ａには「１」が書き込まれ、第二スレッドに対応する第二レジスタ群２９１０ｂに属するスレッド識別子レジスタ２９１２ｂには「２」が書き込まれる。
【０１７４】
タイムスライスレジスタ２９１３は、各スレッドに割り当てられる時間、つまり、タイムスライスが格納される。例えば、第一スレッドに１００クロックサイクル、第二スレッドに１００クロックサイクルの比率でタイムスライスを割り当てる場合は、第一スレッドに対応する第一レジスタ群２９１０ａのタイムスライスレジスタ２９１３ａに「１００」が格納される。また、第二スレッドに対応する第二レジスタ群２９１０ｂのタイムスライスレジスタ２９１３ｂに「１００」が格納される。
【０１７５】
スレッド切替え部２９２０は、各スレッドのタイムスライスレジスタ２９１３の値に応じて、プロセッサ２９０１の実行時間を各スレッドに時分割で割り当てる。
【０１７６】
ここで、スレッド切替え部２９２０について具体的に説明する。
【０１７７】
スレッド切替え部２９２０は、レジスタ群２９１０及び命令フェッチ／デコードユニット１３２０と直接に、あるいはバスを介して接続されている。そして、スレッド切替え部２９２０は、現在実行されているスレッドに対応するレジスタ群２９１０のプログラムカウンタ１３１１の値を読み出し、命令フェッチ／デコードユニット１３２０に転送する。また、スレッド切替え部２９２０は、プログラムカウンタ１３１１の値とともにスレッド識別子も転送する。
【０１７８】
例えば、第一スレッドが実行される場合は、スレッド切替え部２９２０は、スレッド識別子の値「１」と、第一レジスタ群２９１０ａのプログラムカウンタ１３１１ａの値を命令フェッチ／デコードユニット１３２０に転送する。これにより、第一スレッドを実行するプログラムの命令がフェッチ／デコードされる。
【０１７９】
なお、命令フェッチ／デコードユニット１３２０でフェッチした命令列には、スレッド識別子レジスタ２９１２の情報、つまり、スレッド識別子の値（例えば「１」）が付与される。
【０１８０】
ここで、スレッド切替えのタイミングは、プロセッサ２９０１外に設けられたタイマ／カウンタ（図示省略）によって通知される。以下、具体的に説明する。
【０１８１】
例えば、第一スレッドが開始される際には、タイマ／カウンタにタイムスライスレジスタ２９１３ａに格納されたタイムスライスが設定され、タイマ／カウンタがスタートさせられる。タイマ／カウンタは、設定されたタイムスライスが経過すると、スレッド切替え部２９２０に通知する。その通知を受けたスレッド切替え部２９２０は、次のスレッドに対応するレジスタ群、例えば、第二レジスタ群２９１０ｂのスレッド識別子の値「２」とプログラムカウンタ１３１１ｂの値とを、命令フェッチ／デコードユニット１３２０に転送する。
【０１８２】
これにより、命令フェッチ／デコードユニット１３２０でフェッチされる命令のアドレスが、第二スレッドを実行するプログラムの命令のアドレスに変更される。その結果、第二スレッドを実行するプログラムの命令がフェッチ／デコードされ、動作するスレッドが切り替えられる。
【０１８３】
タイマ／カウンタは、設定時間経過後にリセットされ、次に実行されるスレッド、例えば、第二スレッドのタイムスライスが設定された後、スタートさせられる。
【０１８４】
このようにして、各スレッドに割り当てられたタイムスライスに応じて動作するスレッドが切り替えられる。なお、プロセッサ２９０１内にタイマ／カウンタを設けてもよい。
【０１８５】
本実施の形態において、タイムスライスレジスタ２９１３と、スレッド切替え部２９２０とによって、「スレッド管理部」が構成されている。また、「スレッド管理部」は、スレッド識別子レジスタ２９１２を含むものとしてもよい。
【０１８６】
発行ユニット１３３０は、演算等の命令を発行する場合に、複数存在するレジスタ群２９１０の中から、命令列に付与されたスレッド識別子に対応するレジスタ群２９１０の値を読み出す。
【０１８７】
リタイアメントユニット１３６０は、実行ユニット１３５０の実行結果を、複数存在するレジスタ群２９１０の中から、命令列に付与されたスレッド識別子に対応するレジスタ群２９１０へ書き戻す。
【０１８８】
ループ範囲記憶部１９００は、ループ範囲にスレッド識別子を対応付けて格納する。また、複数のスレッドについて、ループ範囲及びスレッド識別子を格納できる。
【０１８９】
ループ検出部１７０１は、ループ処理を検出した場合に、ループ範囲記憶部１９００にループ範囲とともにスレッド識別子を書き込む。
【０１９０】
ループ伝搬依存解析部１７０２は、ループ範囲記憶部１９００からループ範囲とともにループ処理が検出されたスレッドのスレッド識別子を取得する。そして、ループ伝搬依存解析部１７０２は、対象となるスレッドのループ範囲の命令列についてループ伝搬依存の解析処理を行う。ループ伝搬依存が存在しなかった場合は、ループ伝搬依存解析部１７０２は、第一の電力制御部３０１３に実行指示１７１２を出力する。ここで、ループ伝搬依存解析部１７０２は、実行指示１７１２にスレッドを識別する情報を付与する。例えば、ループ伝搬依存解析部１７０２と第一の電力制御部３０１３とを接続する複数の信号線が、それぞれ複数のスレッドに対応しており、解析処理の対象となったスレッドに対応する信号線の電圧を高くすることでスレッドを識別する情報が付与される。
【０１９１】
ループ脱出検出部１７０４は、第一の電力制御部３０１３からスレッド識別子とともに実行指示１７１３を受ける。そして、ループ脱出検出部１７０４は、ループ範囲記憶部１９００から前記スレッド識別子に対応するループ範囲を取得する。そして、対象となるスレッドの分岐命令の実行結果等に基づき、ループ処理の終了を検出する。
【０１９２】
なお、ループ脱出検出部１７０４は、複数のスレッドについてループ処理の終了を検出することができる。そして、いずれかのスレッドについてループ処理の終了を検出した場合は、第二の電力制御部３０１５に実行指示１７１４とともにスレッド識別子を送る。
【０１９３】
＜電力制御部＞
第一の電力制御部３０１３及び第二の電力制御部３０１５は、リタイアメントユニット１３６０内に設けられる。これにより、リタイアメントユニット１３６０の機能を用いてレジスタ群２９１０への書き込み等を容易に行うことができる。
【０１９４】
第一の電力制御部３０１３は、電力供給デバイス１３０４へ電力制御情報１７３１を出力する機能に加え、レジスタ群２９１０へタイムスライス設定情報３１０３を出力する機能と、実行ユニット１３５０の稼動本数減少指示３１０７を出力する機能を有している。
【０１９５】
第二の電力制御部３０１５は、電力供給デバイス１３０４へ電力制御情報１７５１を出力する機能に加え、レジスタ群２９１０へタイムスライス設定情報３１０５を出力する機能と、実行ユニット１３５０の稼動本数増加指示３１０９を出力する機能を有している。
【０１９６】
（１）省電力制御１
第一の電力制御部３０１３の動作のフローチャートを図２２に示す。
【０１９７】
まず、ステップＳ３２０１で、第一の電力制御部３０１３は、ループ伝搬依存解析部１７０２から、実行指示１７１２を受け取ったか判定を行う。判定結果がＹＥＳの場合は、ステップＳ３２０３へ進む。判定結果がＮＯの場合は、ステップＳ３２０１の判定を再度実行する。なお、前述のように実行指示１７１２にはスレッドを識別する情報が含まれている。
【０１９８】
次に、ステップＳ３２０３において、第一の電力制御部３０１３は、レジスタ群２９１０のうち、実行指示１７１２によって指定されたスレッドに対応するレジスタ群２９１０へ（現在動作中のスレッドに対応する、レジスタ群２９１０へ）、当該スレッドに関する変更後のタイムスライスが変更前のタイムスライスより減少するような、タイムスライス設定情報３１０３を出力する。
【０１９９】
例えば、指定されたスレッド識別子が「２」であった場合は、第一の電力制御部３０１３は、スレッド識別子レジスタ２９１２が「２」である第二レジスタ群２９１０ｂのタイムスライスレジスタ２９１３ｂの値を、「１００」から「５０」に変更する。
【０２００】
ステップＳ３２０５において、第一の電力制御部３０１３は、電力供給デバイス１３０４へ、電力制御情報１７３１を出力する。例えば、クロック１３０７の周波数を４分の３にするように指示する。
【０２０１】
ステップＳ３２０７において、第一の電力制御部３０１３は、ループ脱出検出部１７０４へ、指定されたスレッド識別子とともに実行指示１７１３を出力する。
【０２０２】
第二の電力制御部３０１５の動作のフローチャートを図２３に示す。
【０２０３】
まず、ステップＳ３３０１で、第二の電力制御部３０１５は、ループ脱出検出部１７０４から、実行指示１７１４を受け取ったか判定を行う。判定結果がＹＥＳの場合は、ステップＳ３３０３へ進む。判定結果がＮＯの場合は、ステップＳ３３０１を再度実行する。なお、前述のように実行指示１７１４にはスレッド識別子が含まれている。
【０２０４】
次に、ステップＳ３３０３において、第二の電力制御部３０１５は、スレッド識別子が示すスレッドに対応するレジスタ群２９１０へ（現在動作中のスレッドに対応する、レジスタ群２９１０へ）、当該スレッドに関する変更後のタイムスライスが変更前のタイムスライスより増加するように（例えば、第一の電力制御部３０１３により減少させられる前のタイムスライスに戻るように）、タイムスライス設定情報３１０５を出力する。
【０２０５】
例えば、スレッド識別子が「２」であった場合は、第二の電力制御部３０１５は、複数存在するレジスタ群２９１０のうち、スレッド識別子レジスタ２９１２が「２」である第二レジスタ群２９１０ｂのタイムスライスレジスタ２９１３ｂの値を、「５０」から「１００」へ戻す。
【０２０６】
次に、ステップＳ３３０５において、第二の電力制御部３０１５は、電力供給デバイス１３０４へ、電力制御情報１７５１を出力する。その結果、電力供給デバイス１３０４は、例えば、第一の電力制御部３０１３で低減させていたプロセッサ２９０１に供給するクロック１３０７の周波数を増加させる（元に戻す）。
【０２０７】
ここで、省電力制御時において、ビジーウェイト状態のスレッド（上記の例では第二スレッド）と、ビジーウェイト状態ではないスレッド、つまり、通常の処理を行っているスレッド（上記の例では第一スレッド）とに割り当てられるプロセッサリソース（プロセッサの処理能力）について考察する。
【０２０８】
各スレッドに割り当てられるプロセッサリソースは、一般的には「各スレッドのタイムスライス÷全スレッドのタイムスライスの総和×クロック１３０７の周波数」の式で表すことができる。
【０２０９】
ここで説明した例では、省電力制御実行時のクロック１３０７の周波数は、第一、第二スレッドともに通常電力制御時のクロック１３０７の周波数の４分の３に減少する。
【０２１０】
一方、省電力制御実行時の「各スレッドのタイムスライス÷全スレッドのタイムスライスの総和」は、第一スレッドでは通常電力制御時の３分の４に増加する（１００÷２００から、１００÷１５０）。また、第二スレッドでは通常電力制御時の３分の２に減少する（１００÷２００から、５０÷１５０）。
【０２１１】
このため、この例では、ビジーウェイト状態ではない第一スレッドに割り当てられるプロセッサリソースは、クロック１３０７の周波数の減少割合の４分の３と、タイムスライスの割り当て比率の増加割合の３分の４とを乗じて「１」となる。すなわち、省電力制御が行われても、第一スレッドに割り当てられるプロセッサリソースは減少しない。
【０２１２】
一方、第二スレッドに割り当てられるプロセッサリソースは半減し、電力の浪費が抑制される。
【０２１３】
これにより、ビジーウェイトが実行されていないスレッドの処理速度を維持しながら、ビジーウェイト状態のスレッドに割り当てるプロセッサリソースを選択的に低減し、ビジーウェイトを実行することによってプロセッサ２９０１が消費する電力ならびに、コンピュータシステム２９００が消費する電力を低減することが可能となる。
【０２１４】
上記の省電力制御は、以下のように考えることもできる。
【０２１５】
上記の例において、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に相当するプロセッサリソースは、上記計算式を用いて「５０÷２００×周波数ｆ」となる。つまり、上記タイムスライスの減少分は、通常電力制御時のプロセッサリソースの４分の１に相当する。
【０２１６】
そこで、上記４分の１のプロセッサリソースに応じて、クロック１３０７の周波数を４分の１だけ減少させれば、ビジーウェイト状態ではないスレッドのプロセッサリソースを減少させずに、プロセッサ２９０１の消費電力を低減させることができる。また、ビジーウェイト状態の特定スレッドが、ビジーウェイト状態を脱した時に、他のスレッドのプロセッサリソースを減少させることなく、前記特定スレッドに割り当てるプロセッサリソースを増加させることができる。
【０２１７】
このように、上記の省電力制御は、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、クロック１３０７の周波数を減少させるものである。
【０２１８】
（２）省電力制御２
上記の例では、コンピュータシステム２９００は、第一の電力制御部３０１３と、第二の電力制御部３０１５は、クロック１３０７の周波数を制御することで省電力制御を行い、コンピュータシステム２９００で浪費される電力を抑制していた。
【０２１９】
それに対し、省電力制御を行う方法はほかにも存在する。
【０２２０】
例えば、クロック１３０７の周波数を制御するかわりに、あるいは周波数の制御とともに、実行ユニット１３５０の稼動本数を減少させることで、省電力制御を行ってもよい。
【０２２１】
実行ユニット１３５０の稼動本数を減少させることで省電力制御を行う、第一の電力制御部３０１３、及び第二の電力制御部３０１５の処理のフローチャートを説明する。
【０２２２】
まず、第一の電力制御部３０１３の処理を、図２４のフローチャートを参照しながら説明する。
【０２２３】
まず、ステップＳ３４０１において、第一の電力制御部３０１３は、ループ伝搬依存解析部１７０２から、実行指示１７１２を受け取ったか判定を行う。判定結果がＹＥＳの場合は、ステップＳ３４０３へ進む。判定結果がＮＯの場合は、ステップＳ３４０１へ戻る。なお、前述のように実行指示１７１２にはスレッドを識別する情報が含まれている。
【０２２４】
次に、ステップＳ３４０３において、第一の電力制御部３０１３は、レジスタ群２９１０のうち、実行指示１７１２によって指定されたスレッドに対応するレジスタ群２９１０へ（現在動作中のスレッドに対応する、レジスタ群２９１０へ）タイムスライス設定情報３１０３を出力する。例えば、現在実行中のスレッド識別子が「２」であった場合は、第一の電力制御部３０１３は、スレッド識別子レジスタ２９１２が「２」である第二レジスタ群２９１０ｂのタイムスライスレジスタ２９１３ｂの値を、「１００」から「５０」に変更する。
【０２２５】
次に、ステップＳ３４０５において、第一の電力制御部３０１３は、実行ユニット１３５０へ実行ユニット１３５０の稼働本数を減少させるための稼動本数減少指示３１０７を出力する。例えば、実行ユニット１３５０が４本存在した場合は、稼動本数を３本に削減するよう、実行ユニット１３５０へ指示する。
【０２２６】
ここで、稼動本数減少指示３１０７について説明する。
【０２２７】
図示を省略しているが、第一の電力制御部３０１３は、発行ユニット１３３０と信号線によって接続されている。そして、第一の電力制御部３０１３は、発行ユニット１３３０に複数の実行ユニット１３５０のうちの一部への命令の発行停止を指示する。この指示は、例えば、複数の実行ユニット１３５０の各々に対応する信号線のうち、停止させようとする実行ユニット１３５０に対応する信号線に信号を送信する。これにより、一部の実行ユニット１３５０への命令の発行が停止される。
【０２２８】
また、各実行ユニット１３５０に電力を供給する給電路には、トランジスタによって構成される電子スイッチが設けられている。そして、第一の電力制御部３０１３は、稼働停止対象の実行ユニット１３５０に対応する電子スイッチをオフにすることにより、実行ユニット１３５０への電力供給を遮断し、稼動本数を削減することができる。なお、実行ユニット１３５０への電力供給遮断は、発行ユニット１３３０への命令の発行停止を指示した後に行われる。
【０２２９】
ステップＳ３４０７において、第一の電力制御部３０１３は、ループ脱出検出部１７０４へ、実行指示１７１３を出力する。
【０２３０】
第二の電力制御部３０１５の処理を、図２５のフローチャートを参照しながら説明する。
【０２３１】
まず、ステップＳ３５０１で、第二の電力制御部３０１５は、ループ脱出検出部１７０４から、実行指示１７１４を受け取ったか判定を行う。判定結果がＹＥＳの場合は、ステップＳ３５０３へ進む。判定結果がＮＯの場合は、ステップＳ３５０１の処理を再度実行する。なお、前述のように実行指示１７１４にはスレッド識別子が含まれている。
【０２３２】
次に、ステップＳ３５０３において、第二の電力制御部３０１５は、スレッド識別子が示すスレッドに対応するレジスタ群２９１０へ（現在動作中のスレッドに対応する、レジスタ群２９１０へ）タイムスライス設定情報３１０５を出力する。例えば、スレッド識別子が「２」であった場合は、スレッド識別子レジスタ２９１２が「２」である第二レジスタ群２９１０ｂのタイムスライスレジスタ２９１３ｂの値を、「５０」から「１００」へ戻す。
【０２３３】
次に、ステップＳ３５０５において、第二の電力制御部３０１５は、実行ユニット１３５０へ実行ユニット１３５０の稼働本数を増加させるための稼動本数増加指示３１０９を出力する。例えば、実行ユニット１３５０の稼動本数を、第一の電力制御部３０１３で減少させられる前の本数である、４本に戻すよう指示する。なお、稼動本数増加指示３１０９は、前述の稼動本数減少指示３１０７と逆の順序で行われる。つまり、電子スイッチをオンにした後、発行ユニット１３３０への命令の発行再開が指示される。
【０２３４】
ここで、省電力制御時において、ビジーウェイトを実行しているスレッド（上記の例では第二スレッド）と、ビジーウェイトを実行していないスレッド、つまり、通常の処理を行っているスレッド（上記の例では第一スレッド）とに割り当てられるプロセッサリソース（プロセッサの処理能力）について考察する。
【０２３５】
各スレッドに割り当てられるプロセッサリソースは、一般的に、「各スレッドのタイムスライス÷全スレッドのタイムスライスの総和×実行ユニット１３５０の稼動本数」である。
【０２３６】
この例では、第一スレッドについて、省電力制御実行時における実行ユニット１３５０の稼動本数は、通常電力制御時の４分の３に減少するが、省電力制御実行時における「各スレッドに割り当てられるタイムスライス÷全スレッドのタイムスライスの総和」は、通常電力制御時の３分の４に増加する（１００÷２００から、１００÷１５０へ増加する）ため、両者の積は「１」となる。一方、第二スレッドについては、両者の積は２分の１となる。
【０２３７】
このため、この例では、ビジーループが実行されていないスレッド、すなわち、第一スレッドに割り当てられるプロセッサリソースは、省電力制御が実行されても減少しない。
【０２３８】
これにより、ビジーループが実行されていないスレッドの処理速度を維持しながら、ビジーループが実行されているスレッドに割り当てる処理能力を選択的に低減し、ビジーウェイトを実行することによってプロセッサ２９０１が消費する電力ならびに、コンピュータシステム２９００が消費する電力を低減することが可能となる。
【０２３９】
上記の省電力制御は、以下のように考えることもできる。
【０２４０】
上記の例において、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に相当するプロセッサリソースは、上記計算式を用いて「５０÷２００×実行ユニットの稼働本数」となる。つまり、上記タイムスライスの減少分は、通常電力制御時のプロセッサリソースの４分の１に相当する。
【０２４１】
そこで、上記４分の１のプロセッサリソースに応じて、実行ユニット１３５０の稼動本数を４分の１だけ減少させれば、ビジーウェイト状態ではないスレッドのプロセッサリソースを減少させずに、プロセッサ２９０１の消費電力を低減させることができる。また、ビジーウェイト状態の特定スレッドがビジーウェイト状態を脱した時に、実行ユニット１３５０の稼動本数を増加させることにより、他のスレッドのプロセッサリソースを減少させることなく、前記特定スレッドに割り当てるプロセッサリソースを増加させることができる。
【０２４２】
このように、上記の省電力制御は、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、実行ユニットの稼働本数を減少させるものである。
【０２４３】
（３）省電力制御補足
上記２種類の省電力制御を合わせると、各スレッドに割り当てられるプロセッサリソース（処理能力）は、「各スレッドのタイムスライス÷全スレッドのタイムスライスの総和×クロック１３０７の周波数×実行ユニット１３５０の稼動本数」となる。
【０２４４】
本実施の形態によれば、上記の計算に基づき、ビジーループが実行されていないスレッドのプロセッサリソースを減少させることなく、ビジーループが実行されているスレッドのプロセッサリソースを選択的に低減させることができる。
【０２４５】
また、省電力制御において、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、クロック１３０７の周波数及び実行ユニット１３５０の稼働本数の少なくとも一方を減少させることができる。
【０２４６】
なお、省電力制御時にビジーループが実行されていないスレッドのプロセッサリソースが増加してもよい。この場合であっても、ビジーループの実行により浪費される電力を低減することができる。
【０２４７】
なお、実施の形態２において、省電力制御及び省電力制御を終了して通常電力制御に戻す制御を、省電力制御１及び省電力制御２で記載したものの他、例えば、次のようなものとしてもよい。
【０２４８】
省電力制御を、プロセッサ２９０１へ供給する電力１３０６の電圧を低下させることによって、又は、プロセッサ２９０１へ供給する電力１３０６の電圧及びクロック１３０７の周波数を低下させることによって行う。そして、省電力制御を終了して通常電力制御に戻す制御を、プロセッサ２９０１へ供給する電力１３０６の電圧を増加させることによって、又は、プロセッサ２９０１へ供給する電力１３０６の電圧及びクロック１３０７の周波数を増加させることによって行う。
【０２４９】
また、省電力制御を、実行ユニット１３５０の稼働本数を減少させるとともにプロセッサ２９０１へ供給する電力１３０６の電圧を低下させることによって、又は、実行ユニット１３５０の稼働本数を減少させるとともにプロセッサ２９０１へ供給する電力１３０６の電圧及びクロック１３０７の周波数を低下させることによって行う。そして、省電力制御を終了して通常電力制御に戻す制御を、実行ユニット１３５０の稼働本数を増加させるとともにプロセッサ２９０１へ供給する電力１３０６の電圧を増加させることによって、又は、実行ユニット１３５０の稼働本数を増加させるとともにプロセッサ２９０１へ供給する電力１３０６の電圧及びクロック１３０７の周波数を増加させることによって行う。
【０２５０】
なお、第一の電力制御部３０１３と、第二の電力制御部３０１５の制御対象は、電力１３０６の電圧、クロック１３０７の周波数、実行ユニット１３５０の稼働本数に限らない。
【０２５１】
第一の電力制御部３０１３と、第二の電力制御部３０１５の制御対象は、プロセッサ２９０１もしくは、コンピュータシステム２９００に供給される電力を制御するものであればよい。
【０２５２】
［実施の形態３］
実施の形態３におけるコンピュータシステムの構成を、図２６を参照しながら説明する。
【０２５３】
なお、図２６において、図１のコンピュータシステム１３００と同じ構成要素については、同じ符号を用い、説明を省略する。
【０２５４】
本実施の形態３に係るコンピュータシステム４０００と、前記実施の形態１に係るコンピュータシステム１３００とでは、以下の点で異なる。
【０２５５】
（ｉ）コンピュータシステム４０００には、ループ検出部１７０１とループ脱出検出部１７０４の代わりにプログラムカウンタ監視部４１００が備えられている。
【０２５６】
（ｉｉ）コンピュータシステム４０００には、ループ伝搬依存解析部１７０２の代わりにバス監視部４２００が備えられている。
【０２５７】
＜プロセッサ＞
集積回路４０１０内のプロセッサ４０２０は、実施の形態１のプロセッサ１３０１から、省電力制御装置（ループ検出部１７０１、ループ伝搬依存解析部１７０２、第一の電力制御部１７０３、ループ脱出検出部１７０４、第二の電力制御部１７０５）を取り除いた構成である。また、発行ユニット１３３０Ａは、実施の形態１の発行ユニット１３３０から、ループ伝搬依存解析部１７０２を取り除いた構成であり、リタイアメントユニット１３６０Ａは、実施の形態１のリタイアメントユニット１３６０からループ検出部１７０１、ループ脱出検出部１７０４を取り除いた構成である。
【０２５８】
＜省電力制御装置＞
実施の形態３では、プログラムカウンタ監視部４１００、バス監視部４２００、第一の電力制御部１７０３、第二の電力制御部１７０５が、省電力制御装置を構成する。なお、プログラムカウンタ監視部４１００、バス監視部４２００、第一の電力制御部１７０３、第二の電力制御部１７０５の一部又は全部をプロセッサ内に設けるようにしてもよい。
【０２５９】
（１−１）プログラムカウンタ監視部４１００（省電力制御に関する動作）
プログラムカウンタ監視部４１００の省電力制御に関する動作を、図２７のフローチャートを参照しながら説明する。但し、図２７のフローチャートは、プロセッサ４０２０がループ処理を実行する間、プログラムカウンタ１３１１の値は一定のパターンで繰り返されることに着目したものである。
【０２６０】
プログラムカウンタ監視部４１００は、ステップＳ４５０１において、プログラムカウンタ１３１１の値が一定のパターンで繰り返しているかを監視する。そして、ステップＳ４５０１の判定結果がＮＯの場合（プログラムカウンタ１３１１の値が一定のパターンで繰り返していない場合）、ステップＳ４５０１に戻る。ステップＳ４５０１の判定結果がＹＥＳの場合（プログラムカウンタ１３１１の値が一定のパターンで繰り返している場合）、ステップＳ４５０３へ進む。
【０２６１】
プログラムカウンタ監視部４１００は、ステップＳ４５０３において、バス監視実行の実行指示１７１１Ａをバス監視部４２００へ出力する。
【０２６２】
（１−２）バス監視部４２００
バス監視部４２００の動作を、図２８のフローチャートを参照しながら説明する。但し、図２８のフローチャートは、プロセッサ４０２０がループ処理を実行し、そのループ間にループ伝搬依存関係がなければ読み出しに係るアドレスに変化が生じない場合があることに着目したものである。
【０２６３】
バス監視部４２００は、ステップＳ４６０１で、プログラムカウンタ監視部４１００から実行指示１７１１Ａを受け取ったか判定する。ステップＳ４６０１の判定結果がＹＥＳの場合にはステップＳ４６０３へ進む。ステップＳ４６０１の判定結果がＮＯの場合には、ステップＳ４６０１の判定を再度実行する。
【０２６４】
バス監視部４２００は、ステップＳ４６０３で、バス１３０５を監視して、読み出しに係るアドレスに変化があるかを判定する。ステップＳ４６０３の判定結果がＹＥＳの場合（読み出しに係るアドレスに変化がある場合）には、ステップＳ４６０５へ進む。ステップＳ４６０３の判定結果がＮＯの場合（読み出しに係るアドレスに変化がない場合）には、ステップＳ４６０７へ進む。
【０２６５】
バス監視部４２００は、ステップＳ４６０５において、第一の電力制御部１７０３へ省電力制御実行の実行指示１７１２を出力しない。
【０２６６】
バス監視部４２００は、ステップＳ４６０７において、第一の電力制御部１７０３へ省電力制御実行の実行指示１７１２を出力する。なお、第一の電力制御部１７０３は、バス監視部４２００から実行指示１７１２を受けると、電力制御情報１７３１を電力供給デバイス１３０４へ送信するとともに、省電力制御終了検出のための実行指示１７１３Ａをプログラムカウンタ４１００へ出力する。なお、第一の電力制御部１７０３による省電力制御は、実施の形態１に記載した各省電力制御を利用できる。
【０２６７】
（１−３）プログラムカウンタ監視部４１００（省電力制御終了に関する動作）
プログラムカウンタ監視部４１００の省電力制御終了に関する動作を、図２９のフローチャートを参照しながら説明する。但し、図２９のフローチャートは、プロセッサ４０２０がループ処理の実行終了後、プログラムカウンタ１３１１の値がループ処理の実行中の一定のパターンでの繰り返しから外れることに着目したものである。
【０２６８】
プログラムカウンタ監視部４１００は、ステップＳ４７０１で、第一の電力制御部１７０３から実行指示１７１３Ａを受け取ったか判定する。ステップＳ４７０１の判定結果がＹＥＳの場合にはステップＳ４７０３へ進む。ステップＳ４７０１の判定結果がＮＯの場合にはステップＳ４７０１の判定を再度実行する。
【０２６９】
プログラムカウンタ監視部４１００は、ステップＳ４７０３で、プログラムカウンタ１３１１の値がステップＳ４５０１の判定時の一定のパターンと同じ一定のパターンで繰り返しているかを監視する。そして、ステップＳ４７０３の判定結果がＹＥＳの場合（プログラムカウンタ１３１１の値が一定のパターンで繰り返している場合）、プロセッサ４０２０がループ処理の実行を継続しているものとして、ステップＳ４７０３に戻る。ステップＳ４７０３の判定結果がＮＯの場合（プログラムカウンタ１３１１の値が一定のパターンで繰り返していない場合）、プロセッサ４０２０がループ処理の実行を終了したものとみなし、ステップＳ４７０３へ進む。
【０２７０】
プログラムカウンタ監視部４１００は、ステップＳ４７０５において、第二の電力制御部１７０５へ省電力制御終了実行の実行指示１７１４を出力する。なお、第二の電力制御部１７０５は、プログラムカウンタ監視部４１００から実行指示１７１４を受けると、電力制御情報１７３５を電力供給デバイス１３０４へ送信する。なお、第二の電力制御部１７０５による省電力制御を終了して通常電力制御に戻す制御は、実施の形態１に記載した各省電力制御を終了して通常電力制御に戻す制御を利用できる。
【０２７１】
［実施の形態４］
実施の形態４におけるコンピュータシステムの構成を、図３０を参照しながら説明する。
【０２７２】
なお、図３０において、図２０のコンピュータシステム２９００又は図２６のコンピュータシステム４０００と同じ構成要素については、同じ符号を用い、説明を省略する。
【０２７３】
本実施の形態４に係るコンピュータシステム４５００と、前記実施の形態２に係るコンピュータシステム２９００とでは、以下の点で異なる。
【０２７４】
（ｉ）コンピュータシステム４５００には、ループ検出部１７０１とループ脱出検出部１７０４の代わりにプログラムカウンタ監視部４１００が備えられている。
【０２７５】
（ｉｉ）コンピュータシステム４５００には、ループ伝搬依存解析部１７０２の代わりにバス監視部４２００が備えられている。
【０２７６】
＜プロセッサ＞
集積回路４５１０内のプロセッサ４５２０は、実施の形態２のプロセッサ２９０１から、省電力制御装置（ループ検出部１７０１、ループ伝搬依存解析部１７０２、第一の電力制御部３０１３、ループ脱出検出部１７０４、第二の電力制御部３０１５）を取り除いた構成である。
【０２７７】
＜省電力制御装置＞
実施の形態４では、プログラムカウンタ監視部４１００、バス監視部４２００、第一の電力制御部３０１３、第二の電力制御部３０１５が、省電力制御装置を構成する。なお、プログラムカウンタ監視部４１００、バス監視部４２００、第一の電力制御部３０１３、第二の電力制御部３１０５の一部又は全部をプロセッサ内に設けるようにしてもよい。
【０２７８】
（１−１）プログラムカウンタ監視部４１００（省電力制御に関する動作）
プログラムカウンタ監視部４１００には、各スレッドのプログラムカウンタ１３１１の値が入力されるとともに、スレッド切替え部２９２０から現在動作中のスレッドを示す情報が入力される。
【０２７９】
プログラムカウンタ監視部４１００は、プロセッサ４２００がスレッドを切替えながら動作するものであることから、プログラムカウンタ１３１１をスレッド単位で監視する。そして、プログラムカウンタ監視部４１００は、スレッド切替え部２９２０から受け取った情報に対応するスレッドのプログラムカウンタ１３１１の値が一定のパターンで繰り返していることを検出した場合に、バス監視実行の実行指示１７１１Ａをバス監視部４２００へ出力する。なお、この実行指示１７１１Ａはプログラムカウンタ１３１１の値が一定のパターンで繰り返しているスレッドを示す情報を含むものとする。
【０２８０】
（１−２）バス監視部４２００
バス監視部４２００には、スレッド切替え部２９２０から現在動作中のスレッドを示す情報が入力される。
【０２８１】
バス監視部４２００は、プログラムカウンタ監視部４１００から受け取った各実行指示１７１１Ａに含まれる情報が示すスレッドについてバス１３０５を監視する。そして、バス監視部４２００は、スレッド切替え部２９２０から受け取った現在動作中のスレッドの読み出しに係るアドレスに変化がないことを検出した場合に、第一の電力制御部３０１３へ省電力制御実行の実行指示１７１２を出力する。この実行指示１７１２には読み出しに係るアドレスに変化がないことが検出されたスレッドを示す情報を含むものとする。
【０２８２】
第一の電力制御部３０１３は、省電力制御終了検出のための実行指示１７１３Ａをプログラムカウンタ４１００へ出力する。なお、第一の電力制御部３０１３による省電力制御は、実施の形態２に記載した各省電力制御を利用できる。また、第一の電力制御部３０１３によるタイムスライス数の減少制御は、実施の形態２に記載した各タイムスライス数の減少制御を利用できる。
【０２８３】
（１−３）プログラムカウンタ監視部４１００（省電力制御終了に関する動作）
プログラムカウンタ監視部４１００は、第一の電力制御部３０１３から受け取った各実行指示１７１３Ａに含まれる情報が示すスレッドについてプログラムカウンタ１３１１を監視する。そして、プログラムカウンタ監視部４１００は、スレッド切替え部２９２０から受け取った現在動作中のスレッドのプログラムカウンタ１３１１の値が一定のパターンで繰り返していないことを検出した場合に、第二の電力制御部３０１４へ省電力制御終了実行の実行指示１７１４を出力する。なお、この実行指示１７１４はプログラムカウンタ１３１１の値が一定のパターンで繰り返さなくなったスレッドを示す情報を含むものとする。
【０２８４】
なお、第二の電力制御部３０１５による省電力制御を終了して通常電力制御に戻す制御は、実施の形態２に記載した各省電力制御を終了して通常電力制御に戻す制御を利用できる。また、第二の電力制御部３０１５によるタイムスライス数の増加制御は、実施の形態２に記載した各タイムスライス数の増加制御を利用できる。
【０２８５】
[その他]
（１）前記実施の形態および変形例の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。また、本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【０２８６】
（２）前記実施の形態１，２および変形例において、実行ユニットによって実行された後の分岐命令が検出され、命令列保持部１３４０に格納されたループ範囲の命令列についてループ伝搬依存の有無を解析する処理が行われていた。
【０２８７】
それに対し、命令キャッシュ１３７０に読み込まれた実行前の命令列に含まれる分岐命令をループ検出部によって検出し、検出されたループ処理について予めループ伝搬依存の有無を解析する処理を行うこともできる。そして、ビジーウェイト用のループが検出された場合、分岐命令のアドレス、あるいはループ範囲をバッファに格納しておくことができる。その結果、バッファに格納されたアドレスの命令が実行された場合、ビジーウェイト用のループが実行されることを検出することができる。
【０２８８】
この場合、ループ検出部はリタイアメントユニット１３６０以外の箇所に設けることができ、ループ伝搬依存解析部も発行ユニット１３３０以外の箇所に設けることができる。また、命令キャッシュから命令のフェッチ等を行うユニットを、命令フェッチ／デコードユニット１３２０と別個に設けてもよい。
【０２８９】
（３）前記実施の形態２，４において、省電力制御時に実行ユニットの稼働本数が減少させられていた。これと同様に、実施の形態１，３においても、省電力制御時に実行ユニットの稼働本数を減少させることができる。
【０２９０】
（４）前記実施の形態１，２及び変形例において、ループ検出部１７０４は分岐命令等の実行結果に基づいてループ処理の検出を行っている。ここで、リタイアメントユニット１３６０に、発行された命令と、その命令のアドレスとを格納するリオーダーバッファが設けられている場合がある。この場合、発行ユニット１３３０からリオーダーバッファに送られた分岐命令に基づいて、分岐命令の発行を検出しておくことができる。その後、分岐命令の実行結果がリタイアメントユニットに送られてきた場合、あるいは、分岐命令の実行結果がリタイアした場合（プログラムカウンタが書き換えられた場合等）に分岐命令の実行を検出することができる。
【０２９１】
（５）前記実施の形態１〜４及び変形例において、電力供給デバイスは、プロセッサへ供給するクロックの周波数を記憶するクロック周波数記憶部を備え、プロセッサがクロック周波数記憶部からクロック周波数を読み取ることができるようにしてもよい。
【０２９２】
この場合の実装方法の例として第一の例と第二の例を挙げる。
【０２９３】
第一の例では、クロック周波数記憶部は、メモリマップされたレジスタとして実装される。
【０２９４】
クロック周波数記憶部は、バス上の特定のアドレスに割り当てられる。プロセッサは、バスを介して、クロック周波数記憶部からクロック周波数を読み取る。
【０２９５】
第二の例では、クロック周波数記憶部は、プロセッサが特定の命令を特定の命令を実行することにより、プロセッサによって取得される。
【０２９６】
プロセッサは、実行ユニットにおいて、特定の命令を実行した場合に、電力供給デバイスに存在するクロック周波数記憶部からクロック周波数を読み取る。
【０２９７】
図３１に特定の命令を備える命令セット１４００Ａの例を示す。図３１で示す命令セット１４００Ａは、図４で説明した命令セット１４００に、ＲＥＡＤＣＬＫ命令１４２０が追加されたものであり、ＲＥＡＤＣＬＫ命令１４２０が、クロック周波数記憶部からクロック周波数を読み取るためにプロセッサで実行される特定の命令に該当する。
【０２９８】
（６）前記実施の形態２、４及び変形例において、タイムスライスは、プロセッサによって読み取ることができるようにしてもよい。
【０２９９】
例えば、タイムスライスは、プロセッサが特定の命令を特定の命令を実行することにより、プロセッサによって取得される。
【０３００】
プロセッサは、実行ユニットにおいて、特定の命令を実行した場合に、タイムスライスを読み取る。
【０３０１】
図３２に特定の命令を備える命令セット１４００Ｂの例を示す。図３２で示す命令セット１４００Ｂは、図４で説明した命令セット１４００に、ＲＥＡＤＣＬＫ命令１４２０とＲＥＡＤＴＳ命令１４２１が追加されたものであり、ＲＥＡＤＴＳ命令１４２１が、タイムスライスを読み取るためにプロセッサで実行される特定の命令に該当する。
【０３０２】
［補足］
本発明の一態様における集積回路は、プロセッサを備えた集積回路であって、前記プロセッサにおいて、１以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、前記ループ処理において命令間の依存が実行回の異なる２つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、を備える。
【０３０３】
本態様の集積回路は、ループ検出部によってループ処理を検出し、ループ伝搬依存解析部によってループ処理がビジーウェイト用であるか否かを判別することができる。そのため、特定の命令列（例えば、インターロック用の命令列）との比較なしにビジーウェイト用のループを検出することができる。よって、特定の命令列以外の命令列によって構成されるビジーウェイト用のループを容易に検出し、ビジーウェイト時に省電力制御を行うことができる。その結果、より多様なビジーウェイトの実行を検出し、ビジーウェイトの実行により浪費される電力を低減することができる。
【０３０４】
ここで、ループ伝搬依存は、ループ処理において、第ｉ回目に実行されるループの命令と、第ｊ回目（ｊ＞ｉ）に実行されるループの命令との間に依存関係が生じることをいう。
【０３０５】
具体的には、例えば、第ｉ回目のループ内のいずれかの命令によって特定の変数（レジスタ）に書き込まれた値が、第ｊ回目のループ内のいずれかの命令によって特定の変数（レジスタ）から読み出される場合にループ伝搬依存が存在する。そして、ループ処理にループ伝搬依存が存在する場合、前記ループ処理はビジーウェイト用ではなく、演算等を実行するためのループ処理であると判断され、省電力制御の対象外となる。
【０３０６】
ここで、ループ伝搬依存が存在するループの例と、ループ伝搬依存が存在しないループの例を図を参照しながら説明する。
【０３０７】
まず、ループ伝播依存の存在するループ処理の例を、図１１を参照しながら説明する。
【０３０８】
図１１の命令列２６００では、２００４番地から２０１０番地の間でループが構成されている。
【０３０９】
２００４番地のＡＤＤ命令で、Ｒ２レジスタに４を加算した値を、Ｒ２レジスタに入力する。次に、２００８番地のＬＤＲ命令によって、Ｒ２レジスタの指すアドレスからＲ０レジスタへ値を読込む。次に、２００ｃ番地のＣＭＰ命令によってＲ０レジスタの値と、予め設定値が格納されているＲ１レジスタの値を比較する。値が一致した場合は、２０１０番地のＢＮＥ命令で、ループを脱出する。値が一致しなかった場合は、２０１０番地のＢＮＥ命令で、２００４番地へ分岐する。
【０３１０】
図１１に示す命令列２６００が構成するループでは、２００４番地のＡＤＤ命令で書き込まれたレジスタ（Ｒ２レジスタ）の値が、次の回の同じ命令（２００４番地のＡＤＤ命令に）よって読み出される。したがって、図１１に示す命令列２６００が構成するループは、第ｉ回目のループ内の命令によって特定のレジスタに書き込まれた値が、第ｊ回目（ｊ＞ｉ）のループ内の命令によって特定のレジスタから読み出されるループに該当する。ゆえに、図１１に示す命令列２６００が構成するループには、ループ伝播依存が存在する。ループ伝播依存の存在するループは、ビジーウェイト用ではないと判断され、省電力制御の対象外となる。
【０３１１】
次に、ループ伝播依存が存在しないループの例を、図８を参照しながら説明する。
【０３１２】
図８の命令列２１００では、１００４番地から１０１０番地の間でループが構成されている。
【０３１３】
１００８番地のＬＤＲ命令によって、Ｒ２レジスタの指すアドレスからＲ０レジスタへ値を読込む。次に、１００ｃ番地のＣＭＰ命令によってＲ０レジスタの値と、あらかじめ値が格納されたＲ１レジスタの値を比較する。値が一致した場合は、１０１０番地のＢＮＥ命令で、ループを脱出する。すなわち、分岐不成立により、ループ処理が終了する。一方、値が一致しなかった場合は、１０１０番地のＢＮＥ命令で、１００４番地へ分岐する。すなわち、分岐が成立する。
【０３１４】
図８に示す命令列２１００は、前段のループで書き込まれたレジスタの値は、後段のループで読み出されないことに留意されたい。ループ内において書き込みが行われるレジスタはＲ０のみであるが、前段のループにてＲ０レジスタに書き込まれた値は後段のループでは読み込まれない。したがって、図８に示す命令列２１００が構成するループは、第ｉ回目のループ内の命令によってレジスタに書き込まれた特定の値が、第ｊ回目（ｊ＞ｉ）のループ内の命令によって読み出されないループである。ゆえに、図８に示す命令列が構成するループには、ループ伝播依存が存在しない。ループ伝播依存の存在しないループは、ビジーウェイト用であると判断され、省電力制御の対象となる。
【０３１５】
ループ処理の検出は、例えば、ループに含まれる命令の実行後に行ってもよいし、実行前に行ってもよい。さらに、命令キャッシュに格納された命令列からループ処理を検出してもよい。
【０３１６】
また、ループ伝搬依存の検出処理は、ループ検出処理の後であれば、ループに含まれる命令の実行前に行ってもよいし、実行後に行ってもよい。
【０３１７】
本発明の一態様における制御方法は、プロセッサを備えたコンピュータシステムの制御方法であって、前記プロセッサにおいて、１以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出ステップと、前記ループ処理において命令間の依存が実行回の異なる２つのループにまたがるループ伝搬依存を検出するループ伝搬依存検出ステップと、前記ループ検出ステップによって検出されたループ処理に、前記ループ伝搬依存解析ステップによってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御ステップと、を備える。
【０３１８】
本発明の一態様におけるコンピュータシステムは、プロセッサを備えたコンピュータシステムであって、前記プロセッサにおいて、１以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、前記ループ処理において命令間の依存が実行回の異なる２つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、を備える。
【０３１９】
本態様の制御方法及びコンピュータシステムの夫々は、上記の一態様における集積回路と同様の効果を奏する。
【０３２０】
本発明の一態様における集積回路を、さらに、前記ループ処理の実行が終了したことを検出するループ終了検出部を備え、前記電力制御部は、省電力制御が行われている状態において、前記ループ終了検出部が、前記ループ処理の終了を検出した場合に省電力制御を終了させる、ものとすることができる。
【０３２１】
本発明の一態様における集積回路を、前記ループ伝搬依存解析部は、前記ループ処理において、第一のループで変数に書き込まれた値が、前記第一のループの後に実行される第二のループで前記変数から読み出されることをもって、ループ伝搬依存があると判定する、ものとすることができる。
【０３２２】
本発明の一態様における集積回路を、前記ループ検出部は、前記プロセッサにおいて、先行したアドレスに分岐する命令が実行されたことをもって、前記プロセッサがループ実行状態になったことを検出する、ものとすることができる。これにより、プロセッサにおいてプログラムが実行されている時に、分岐命令の実行に基づいて容易にループ処理を検出することができる。
【０３２３】
本発明の一態様における集積回路を、さらに、ループ範囲を記憶する、ループ範囲記憶部を有し、前記ループ検出部は、先行したアドレスに分岐する分岐命令を検出した場合に、前記ループ範囲記憶部にループの範囲を出力し、さらに、前記ループ伝搬依存解析部に依存関係解析を指示し、前記ループ伝搬依存解析部は、前記ループ範囲記憶部に記憶されたループの範囲の命令列についてループ伝搬依存の検出処理を行う、ものとすることができる。
【０３２４】
本発明の一態様における集積回路を、前記ループ終了検出部は、前記ループ範囲記憶部に記憶されたループの範囲外に分岐する分岐命令が実行されたこと、又は、前記ループの範囲の末尾に位置する条件分岐命令の実行結果が分岐不成立であることをもって、前記プロセッサにおけるループ処理の実行が終了したことを検出する、ものとすることができる。
【０３２５】
本発明の一態様における集積回路を、前記ループ範囲記憶部は、ループの先頭アドレスと、ループの末尾アドレスとを含む情報を記憶する、ものとすることができる。
【０３２６】
本発明の一態様における集積回路を、前記プロセッサは、フェッチされた命令列を保持する命令列保持部を備えており、前記ループ伝搬依存解析部は、前記命令列保持部に保持された前記ループの範囲の命令列についてループ伝搬依存の検出処理を行う、ものとすることができる。
【０３２７】
本発明の一態様における集積回路を、前記命令列保持部に記憶される命令列は、プリフェッチされた命令を含む、ものとすることができる。
【０３２８】
本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給するクロックの周波数を増加させる制御を行う、ものとすることができる。クロックの周波数を減少させることで、ビジーウェイトによる電力の浪費を低減し得る。
【０３２９】
本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給する電力の電圧を低下させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給する電力の電圧を増大させる制御を行う、ものとすることができる。電力の電圧を低下させることで、ビジーウェイトによる電力の浪費を低減し得る。
【０３３０】
本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給する電力の電圧を低下させるとともに前記プロセッサへ供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給する電力の電圧を増大させるとともに前記プロセッサへ供給するクロックの周波数を増加させる制御を行う、ものとすることができる。クロックの周波数を減少させ、電力の電圧を低下させることで、ビジーウェイトによる電力の浪費を低減し得る。
【０３３１】
本発明の一態様における集積回路を、前記ループ伝搬依存解析部は、前記ループ処理において、一の命令の書き込み対象の変数と、読み出し対象の変数とが同じ場合に、ループ伝搬依存が存在すると判定する、ものとすることができる。
【０３３２】
本発明の一態様における集積回路を、前記プロセッサは、複数の実行ユニットを備え、前記電力制御部は、省電力制御を行う場合に、前記複数の実行ユニットの一部のものを停止させる制御を行い、省電力制御を終了する場合に、停止させた前記複数の実行ユニットの一部のものの実行を再開させる制御を行う、ものとすることができる。複数の実行ユニットの一部のものを停止させることで、ビジーウェイトによる電力の浪費を低減し得る。
【０３３３】
本発明の一態様における集積回路を、前記プロセッサは、複数のスレッドの各々に割り当てられるタイムスライスを管理する、スレッド管理部を有し、前記電力制御部は、省電力制御を行う場合に、ループ伝搬依存が検出されないループ処理を実行しているビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部に指示し、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示する、ものとすることができる。これにより、ビジーウェイト状態のスレッドに割り当てるタイムスライスを減少させることで、ビジーウェイトによる電力の浪費を低減し得る。
【０３３４】
本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態の前記スレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させる制御を行う、ものとすることができる。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。
【０３３５】
本発明の一態様における集積回路を、前記プロセッサは、複数の実行ユニットを備え、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態の前記スレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記複数の実行ユニットのうちの一部を停止させる制御を行い、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記複数の実行ユニットの一部の実行を再開させる制御を行う、ものとすることができる。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。
【０３３６】
本発明の一態様における集積回路を、前記プロセッサは、複数の実行ユニットを備え、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させ、前記複数の実行ユニットのうちの一部を停止させる制御を行い、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を、前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させ、前記複数の実行ユニットの一部の実行を再開させる制御を行う、ものとすることができる。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。
【０３３７】
本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させ、前記プロセッサに供給する電力の電圧を低下させる制御を行い、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させ、前記プロセッサに供給する電力の電圧を増大させる制御を行う、ものとすることができる。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。
【０３３８】
本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、前記プロセッサに供給するクロックの周波数を減少させる、ものとすることができる。
【０３３９】
本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、前記複数の実行ユニットの稼働本数を減少させる、ものとすることができる。
【０３４０】
本発明の他の態様における集積回路は、プロセッサを備えた集積回路であって、プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第１監視部と、前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第２監視部と、前記第１監視部によって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第２監視部によって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御部と、を備える。
【０３４１】
本発明の他の態様における制御方法は、プロセッサを備えたコンピュータシステムの制御方法であって、プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第１監視ステップと、前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第２監視ステップと、前記第１監視ステップによって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第２監視ステップによって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御ステップと、を備える。
【０３４２】
本発明の他の態様におけるコンピュータシステムは、  プロセッサを備えたコンピュータシステムであって、プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第１監視部と、前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第２監視部と、前記第１監視部によって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第２監視部によって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御部と、を備える。
【０３４３】
他の態様の集積回路、制御方法、コンピュータシステムの夫々によれば、多様なビジーウェイトの実行により浪費される電力を低減することができる。
【０３４４】
本発明の他の態様における集積回路を、前記電力制御部は、省電力制御が行われている場合において、前記第１監視部によって前記カウンタ値が一定のパターンで繰り返さなくなったことが検出されると、前記省電力制御を終了させる、ものとすることができる。
【産業上の利用可能性】
【０３４５】
本発明にかかる集積回路は、プロセッサを備え、プロセッサがビジーウェイトを実行中であることを検出する機能と、ビジーウェイト実行中に省電力制御を行う機能を有している。そのため、コンピュータシステムに搭載することが有用である。【０３４６】
また、本発明が応用可能なコンピュータシステムの例として、パーソナルコンピュータ、メインフレーム（汎用大型コンピュータ）、テレビ、ビデオデッキ、ＨＤＤレコーダー、携帯電話、カーナビゲーションシステム、固定電話、コピー機、ネットワーク中継機器、タッチパネル付きモバイル端末、ゲーム機などが挙げられる。
【符号の説明】
【０３４７】
１３００    コンピュータシステム
１３０１    プロセッサ
１３０２    主記憶
１３０３    Ｉ／Ｏデバイス
１３０４    電力供給デバイス
１３０５    バス
１３０６    電力
１３０７    クロック
１３１０    レジスタ群
１３１１    プログラムカウンタ
１３２０    命令フェッチ／デコードユニット
１３３０    発行ユニット
１３４０    命令列保持部
１３５０    実行ユニット
１３６０    リタイアメントユニット
１３７０    命令キャッシュ
１３８０    データキャッシュ
１４００    命令セット
１５００    レジスタセット
１５１２    プログラムカウンタ
１５１３    条件フラグレジスタ
１７０１    ループ検出部
１７０２    ループ伝搬依存解析部
１７０３    第一の電力制御部
１７０４    ループ脱出検出部
１７０５    第二の電力制御部
１９００    ループ範囲記憶部
２２００    依存関係解析用バッファ
２２０２    ＤＳＴレジスタ
２２０３    ＳＲＣレジスタ
２７００    依存関係解析用バッファ
２８００    コンピュータシステム
２８５１    フロー依存検出回路
２８５３    予備的検出回路
２８５５    命令バッファ
２８５７    比較回路
２８６１    命令バッファ
２８７１    簡易ループ伝搬依存検出回路
２９００    コンピュータシステム
２９０１    プロセッサ
２９１０    レジスタ群
２９１２    スレッド識別子レジスタ
２９１３    タイムスライスレジスタ
２９２０    スレッド切替え部
３０１３    第一の電力制御部
３０１５    第二の電力制御部
【図１】
0005853216.tif 000002
【図２】
0005853216.tif 000003
【図３】
0005853216.tif 000004
【図４】
0005853216.tif 000005
【図５】
0005853216.tif 000006
【図６】
0005853216.tif 000007
【図７】
0005853216.tif 000008
【図８】
0005853216.tif 000009
【図９】
0005853216.tif 000010
【図１０】
0005853216.tif 000011
【図１１】
0005853216.tif 000012
【図１２】
0005853216.tif 000013
【図１３】
0005853216.tif 000014
【図１４】
0005853216.tif 000015
【図１５】
0005853216.tif 000016
【図１６】
0005853216.tif 000017
【図１７】
0005853216.tif 000018
【図１８】
0005853216.tif 000019
【図１９】
0005853216.tif 000020
【図２０】
0005853216.tif 000021
【図２１】
0005853216.tif 000022
【図２２】
0005853216.tif 000023
【図２３】
0005853216.tif 000024
【図２４】
0005853216.tif 000025
【図２５】
0005853216.tif 000026
【図２６】
0005853216.tif 000027
【図２７】
0005853216.tif 000028
【図２８】
0005853216.tif 000029
【図２９】
0005853216.tif 000030
【図３０】
0005853216.tif 000031
【図３１】
0005853216.tif 000032
【図３２】
0005853216.tif 000033
【図３３】
0005853216.tif 000034
【図３４】
0005853216.tif 000035