(57)【要約】   【課題】  半導体装置において高性能および低消費電力という二つの要求の双方を満たす。  【解決手段】  演算部１２、および、主記憶装置と接続されるキャッシュメモリ（Ｌ２キャッシュ）２２を内部に有する半導体装置１０は、キャッシュミスおよびその解消を示す情報を記憶する記憶部と、所定のタイムインターバルごとに記憶部に記憶された情報に基づき、演算部１２における演算処理、および、主記憶装置とのデータ転送処理の負荷に応じて、将来のタイムインターバルにおける電源電圧およびクロック周波数を調整する電圧／クロック周波数制御部１４とを備える。【選択図】  図１
2005196430.tif 000002
【特許請求の範囲】
【請求項１】
演算部、および、主記憶装置と接続されるキャッシュメモリを内部に有する半導体装置であって、
キャッシュミスおよびその解消を示す情報を記憶する記憶手段と、
所定のタイムインターバルごとに前記記憶手段に記憶された情報に基づき、前記演算部における演算処理、および、主記憶装置とのデータ転送処理の負荷に応じて、将来のタイムインターバルにおける電源電圧およびクロック周波数を調整する電圧／クロック周波数制御手段とを備えたことを特徴とする半導体装置。
【請求項２】
前記電圧／クロック周波数制御手段が、キャッシュミス発生時に前記記憶手段にエントリを追加し、その解消時にエントリを削除し、かつ、前記タイムインターバル経過の際に、前記タイムインターバルにおけるエントリ数の平均値を算出し、当該平均値を、負荷を示す値とすることを特徴とする請求項１に記載の半導体装置。
【請求項３】
前記電圧／クロック周波数制御手段が、キャッシュミス発生時に、前記記憶手段中のレジスタの値を加算し、その解消時にレジスタの値を減算し、各クロックサイクルにおけるレジスタの値を記憶手段に記憶し、かつ、前記タイムインターバル経過の際に、前記記憶手段を参照して前記タイムインターバルに含まれるクロックサイクルにおけるキャッシュミス数の分布を算出し、前記分布を示す値を、負荷を示す値とすることを特徴とする請求項１に記載の半導体装置。
【請求項４】
さらに、前記記憶手段が複数のカウンタを有し、
前記電圧／クロック周波数制御手段が、各クロックサイクルにおけるレジスタの値にしたがって、対応するカウンタの値をカウントアップし、かつ、前記タイムインターバル経過の際に、各カウンタの値を参照して前記キャッシュミス数の分布を算出することを特徴とする請求項３に記載の半導体装置。
【請求項５】
前記記憶手段が、第１ないし第ｎのカウンタＣｎｔ０〜Ｃｎｔｎを有し、
前記電圧／クロック周波数制御手段が、各クロックサイクルにおけるレジスタの値が０、１、・・・、ｎ以上であるときに、それぞれ，第１のカウンタないし第ｎのカウンタの値をカウントアップし、かつ、
負荷を示す値Loadとして
Load＝（Ｃｎｔ０の値）×ｗ０＋（Ｃｎｔ１の値）×ｗ１＋・・・
＋（Ｃｎｔｎの値）×ｗｎ
（ただし、Ｗ０〜Ｗｎは重み）
を算出することを特徴とする請求項４に記載の半導体装置。
【請求項６】
前記電圧／クロック周波数制御手段が、負荷を示す値が、上限閾値を越えた場合に、電源電圧およびクロック周波数を低下させ、下限閾値より小さくなった場合に、前記電源電圧およびクロック周波数を増大させるように構成されたことを特徴とする請求項１ないし５の何れか一項に記載の半導体装置。
【請求項７】
電源電圧およびクロック周波数の組が複数設けられ、
前記電圧／クロック周波数制御手段が、前記負荷を示す値が、上限閾値を越えた場合に、前記電源電圧およびクロック周波数がそれぞれ所定の段階低下するような電源電圧およびクロック周波数の組を選択し、下限閾値より小さくなった場合に、前記電源電圧およびクロック周波数がそれぞれ所定の段階増大するような電源電圧およびクロック周波数の組を選択するように構成されたことを特徴とする請求項６に記載の半導体装置。
【請求項８】
演算部、および、主記憶装置と接続されるキャッシュメモリを内部に有する半導体装置の電源電圧およびクロック周波数を制御する方法であって、
所定のタイムインターバルごとに記憶手段に記憶された情報に基づき、前記演算部における演算処理、および、主記憶装置とのデータ転送処理の負荷を算出する負荷算出ステップと、
前記負荷に基づいて、将来のタイムインターバルにおける電源電圧およびクロック周波数を調整する調整ステップとを備えたことを特徴とする方法。
【請求項９】
前記負荷算出ステップが、キャッシュミス発生時に前記記憶手段にエントリを追加し、その解消時にエントリを削除するステップと、
前記タイムインターバル経過の際に、前記タイムインターバルにおけるエントリ数の平均値を算出するステップとを有し、当該平均値を、負荷を示す値とすることを特徴とする請求項８に記載の方法。
【請求項１０】
前記負荷算出ステップが、キャッシュミス発生時に、前記記憶手段中のレジスタの値を加算し、その解消時にレジスタの値を減算するステップと、
各クロックサイクルにおけるレジスタの値を前記記憶手段に記憶するステップと、
前記タイムインターバル経過の際に、前記記憶手段を参照して前記タイムインターバルに含まれるクロックサイクルにおけるキャッシュミス数の分布を算出するステップとを有し、前記分布を示す値を、負荷を示す値とすることを特徴とする請求項８に記載の方法。
【請求項１１】
さらに、記憶手段が複数のカウンタを有し、
前記負荷算出ステップが、各クロックサイクルにおけるレジスタの値にしたがって、対応するカウンタの値をカウントアップするステップと、
前記タイムインターバル経過の際に、各カウンタの値を参照して前記キャッシュミス数の分布を算出するステップとを有することを特徴とする請求項１０に記載の方法。
【請求項１２】
前記記憶手段が、第１ないし第ｎのカウンタＣｎｔ０〜Ｃｎｔｎを有し、
前記負荷算出ステップが、各クロックサイクルにおけるレジスタの値が０、１・・・、ｎ以上であるときに、それぞれ，第１のカウンタないし第ｎのカウンタの値をカウントアップするステップと、
負荷を示す値Loadとして
Load＝（Ｃｎｔ０の値）×ｗ０＋（Ｃｎｔ１の値）×ｗ１＋・・・
＋（Ｃｎｔｎの値）×ｗｎ
（ただし、Ｗ０〜Ｗｎは重み）
を算出するステップとを有することを特徴とする請求項１１に記載の方法。
【請求項１３】
前記調整ステップが、負荷を示す値が、上限閾値を越えた場合に、電源電圧およびクロック周波数を低下させ、下限閾値より小さくなった場合に、前記電源電圧およびクロック周波数を増大させるステップを有することを特徴とする請求項８ないし１２の何れか一項に記載の方法。
【請求項１４】
電源電圧およびクロック周波数の組が複数設けられ、
前記調整ステップが、前記負荷を示す値が、上限閾値を越えた場合に、前記電源電圧およびクロック周波数がそれぞれ所定の段階低下するような電源電圧およびクロック周波数の組を選択し、下限閾値より小さくなった場合に、前記電源電圧およびクロック周波数がそれぞれ所定の段階増大するような電源電圧およびクロック周波数の組を選択するステップを有することを特徴とする請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的に電源電圧／クロック周波数を変更する半導体装置およびその電圧／クロック周波数制御方法に関する。
【背景技術】
【０００２】
近年、マイクロプロセッサの低消費電力化、低消費エネルギー化は、マイクロプロセッサの設計における最も重要な課題となっている。モバイル計算機のバッテリー駆動時間の延長という要求はもちろんのこと、商用サーバ、さらには科学技術計算用途などのハイエンドのプロセッサにおいても、放熱の問題から消費電力低減は必要不可欠な課題となっている。
【０００３】
プロセッサ設計の際には、放熱面での消費電力の上限を定めた熱設計消費電力(Thermal Design Power：ＴＤＰ)に基づいて設計する必要があるが、最近ではこのＴＤＰがプロセッサの性能を制限する第１要因となることも珍しくない。これは、ＴＤＰを満たすために電源電圧を低くすると、プロセッサのクロック周波数を低下せざるを得ないためである。したがって、モバイル計算機から性能を重視するハイエンドのシステムに至るまで、あらゆる計算機システムにおいて低消費電力マイクロプロセッサの構成方式やそのための回路技術が重要となっている。
【０００４】
一方、高性能および低消費電力という二つの要求を満たすために、動的電源電圧変更(Dynamic Voltage Scaling：ＤＶＳ)機能をもつプロセッサが提案されている。たとえば、インテル社のペンティアム(Pentium：登録商標)プロセッサには、SpeedStepというＤＶＳ機能が備えられている。
【非特許文献１】D. Marculescu著、“On the Use of Microarchitecture-Driven Dynamic Voltage Scaling”、第２７回ＩＳＣＡ、“Complexity-EffectiveDesign”におけるワークショップ、２０００年６月
【非特許文献２】G. Semeraro他著、“Dynamic Frequency andVoltage Control for a Multiple Clock Domain Microarchitecture”、Proc.MICOR-35、第３５６頁〜第３６７頁、２００２年１２月
【発明の開示】
【発明が解決しようとする課題】
【０００５】
たとえば、非特許文献１では、全てのキャッシュミスをトリガーとして、キャッシュミスが解決されるまでの間、低消費電力モードに移行する手法が提案されている。しかしながら、この手法では、演算処理と主記憶アクセスとの負荷バランスについてあまり考慮されていない。また、２段階の周波数をもつプロセッサのみを対象としており、多段階の電源電圧・クロック周波数から最適なものを選択することができないという問題点もある。
【０００６】
また、非特許文献２では、プロセッサチップ内を複数のクロック周波数領域に分割し、各領域の負荷バランスに基づき、それぞれのクロック周波数を最適化するプロセッサが提案されている。しかしながら、この手法では、主記憶との間のデータ転送の負荷バランスが考慮されていないという問題点があった。
【０００７】
本発明は、高性能および低消費電力という要求を満たす半導体装置およびその電源電圧／クロック周波数制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明においては、１つのアプリケーションの実行中にプロセッサの演算処理と主記憶アクセスによるデータ転送の負荷を監視し、データ転送の負荷が大きい場合にはＤＶＳの手法によりプロセッサの電源電圧・クロック周波数を下げることで、性能に影響を与えずに消費電力を低減させる。
【０００９】
より具体的には、本発明の目的は、演算部、および、主記憶装置と接続されるキャッシュメモリを内部に有する半導体装置であって、キャッシュミスおよびその解消を示す情報を記憶する記憶手段と、所定のタイムインターバルごとに前記記憶手段に記憶された情報に基づき、前記演算部における演算処理、および、主記憶装置とのデータ転送処理の負荷に応じて、将来のタイムインターバルにおける電源電圧およびクロック周波数を調整する電圧／クロック周波数制御手段とを備えたことを特徴とする半導体装置により達成される。
【００１０】
好ましい実施態様においては、前記電圧／クロック周波数制御手段が、キャッシュミス発生時に前記記憶手段にエントリを追加し、その解消時にエントリを削除し、かつ、前記タイムインターバル経過の際に、前記タイムインターバルにおけるエントリ数の平均値を算出し、当該平均値を、負荷を示す値とする。これは第１の実施の形態に対応する。
【００１１】
別の好ましい実施態様においては、前記電圧／クロック周波数制御手段が、キャッシュミス発生時に、前記記憶手段中のレジスタの値を加算し、その解消時にレジスタの値を減算し、各クロックサイクルにおけるレジスタの値を記憶手段に記憶し、かつ、前記タイムインターバル経過の際に、前記記憶手段を参照して前記タイムインターバルに含まれるクロックサイクルにおけるキャッシュミス数の分布を算出し、前記分布を示す値を、負荷を示す値とする。これは第２の実施の形態に対応する。
【００１２】
より好ましくは、さらに、前記記憶手段が複数のカウンタを有し、前記電圧／クロック周波数制御手段が、各クロックサイクルにおけるレジスタの値にしたがって、対応するカウンタの値をカウントアップし、かつ、前記タイムインターバル経過の際に、各カウンタの値を参照して前記キャッシュミス数の分布を算出する。
【００１３】
たとえば、前記記憶手段が、第１ないし第ｎのカウンタＣｎｔ０〜Ｃｎｔｎを有し、
前記電圧／クロック周波数制御手段が、各クロックサイクルにおけるレジスタの値が０、１、・・・、ｎ以上であるときに、それぞれ，第１のカウンタないし第ｎのカウンタの値をカウントアップし、かつ、負荷を示す値Loadとして
Load＝（Ｃｎｔ０の値）×ｗ０＋（Ｃｎｔ１の値）×ｗ１＋・・・
＋（Ｃｎｔｎの値）×ｗｎ
（ただし、Ｗ０〜Ｗｎは重み）を算出してもよい。カウンタ数として、第１のカウンタＣｎｔ０〜第２のカウンタＣｎｔ２の３つのカウンタを利用しても良い。無論、それより少ないカウンタ或いは多数のカウンタを採用してもよいことは言うまでもない。
【００１４】
また、別の好ましい実施態様においては、前記電圧／クロック周波数制御手段が、負荷を示す値が、上限閾値を越えた場合に、電源電圧およびクロック周波数を低下させ、下限閾値より小さくなった場合に、前記電源電圧およびクロック周波数を増大させるように構成されている。
【００１５】
より好ましくは、電源電圧およびクロック周波数の組が複数設けられ、前記電圧／クロック周波数制御手段が、前記負荷を示す値が、上限閾値を越えた場合に、前記電源電圧およびクロック周波数がそれぞれ所定の段階低下するような電源電圧およびクロック周波数の組を選択し、下限閾値より小さくなった場合に、前記電源電圧およびクロック周波数がそれぞれ所定の段階増大するような電源電圧およびクロック周波数の組を選択するように構成されている。
【００１６】
また、本発明の目的は、演算部、および、主記憶装置と接続されるキャッシュメモリを内部に有する半導体装置の電源電圧およびクロック周波数を制御する方法であって、所定のタイムインターバルごとに記憶手段に記憶された情報に基づき、前記演算部における演算処理、および、主記憶装置とのデータ転送処理の負荷を算出する負荷算出ステップと、前記負荷に基づいて、将来のタイムインターバルにおける電源電圧およびクロック周波数を調整する調整ステップとを備えたことを特徴とする方法によっても達成される。
【００１７】
好ましい実施態様においては、前記負荷算出ステップが、キャッシュミス発生時に前記記憶手段にエントリを追加し、その解消時にエントリを削除するステップと、前記タイムインターバル経過の際に、前記タイムインターバルにおけるエントリ数の平均値を算出するステップとを有し、当該平均値を、負荷を示す値とする。
【００１８】
別の好ましい実施態様においては、前記負荷算出ステップが、キャッシュミス発生時に、前記記憶手段中のレジスタの値を加算し、その解消時にレジスタの値を減算するステップと、各クロックサイクルにおけるレジスタの値を前記記憶手段に記憶するステップと、前記タイムインターバル経過の際に、前記記憶手段を参照して前記タイムインターバルに含まれるクロックサイクルにおけるキャッシュミス数の分布を算出するステップとを有し、前記分布を示す値を、負荷を示す値とする。
【００１９】
より好ましい実施態様においては、さらに、記憶手段が複数のカウンタを有し、前記負荷算出ステップが、各クロックサイクルにおけるレジスタの値にしたがって、対応するカウンタの値をカウントアップするステップと、前記タイムインターバル経過の際に、各カウンタの値を参照して前記キャッシュミス数の分布を算出するステップとを有する。
【００２０】
たとえば、前記記憶手段が、第１ないし第ｎのカウンタＣｎｔ０〜Ｃｎｔｎを有し、
前記負荷算出ステップが、各クロックサイクルにおけるレジスタの値が０、１・・・、ｎ以上であるときに、それぞれ，第１のカウンタないし第ｎのカウンタの値をカウントアップするステップと、負荷を示す値Loadとして
Load＝（Ｃｎｔ０の値）×ｗ０＋（Ｃｎｔ１の値）×ｗ１＋・・・
＋（Ｃｎｔｎの値）×ｗｎ
（ただし、Ｗ０〜Ｗｎは重み）を算出するステップとを有しているのが望ましい。
【００２１】
また、別の好ましい実施態様においては、前記調整ステップが、負荷を示す値が、上限閾値を越えた場合に、電源電圧およびクロック周波数を低下させ、下限閾値より小さくなった場合に、前記電源電圧およびクロック周波数を増大させるステップを有する。
【００２２】
より好ましくは、電源電圧およびクロック周波数の組が複数設けられ、前記調整ステップが、前記負荷を示す値が、上限閾値を越えた場合に、前記電源電圧およびクロック周波数がそれぞれ所定の段階低下するような電源電圧およびクロック周波数の組を選択し、下限閾値より小さくなった場合に、前記電源電圧およびクロック周波数がそれぞれ所定の段階増大するような電源電圧およびクロック周波数の組を選択するステップを有する。
【発明の効果】
【００２３】
本発明によれば、高性能および低消費電力という要求を満たす半導体装置およびその電源電圧／クロック周波数制御方法を提供することが可能となる。
【発明を実施するための最良の形態】
【００２４】
以下、添付図面を参照して本発明の実施の形態について説明する。図１は、本発明の第１の実施の形態にかかる半導体装置の概略を示すブロックダイヤグラムである。本実施の形態にかかる半導体装置は、主としてプロセッサを指すが、これに限定されるものではなく、内部にキャッシュを備え、かつ、外部記憶装置との間でデータアクセスをするようなものを含む。
【００２５】
図１に示すように、本発明の第１の実施の形態にかかる半導体装置１０は、実際の演算を実行する演算部１２、電源電圧およびクロック周波数を制御する電圧／クロック周波数制御部１４、キャッシュメモリ群１６を有する。本実施の形態において、キャッシュメモリ群１６は、一時キャッシュとしてＬ１命令キャッシュ(ICache)１８およびＬ１データキャッシュ(DCache)２０を有し、２次キャッシュとしてＬ２キャッシュ(L2Cache)２２を有する。Ｌ２キャッシュ２２が、メモリバスを介して外部の主記憶装置に接続される。また、この半導体装置は、ノンブロッキングキャッシュを採用しており、キャッシュミスが生じてもプロセッサが処理を実行できるようになっている。また、本実施の形態において、電圧／クロック周波数制御部１４は、未解決のキャッシュミスの情報を保持するためのレジスタ（Miss
State Holding Register：ＭＳＨＲ）を有している。なお、ＭＳＨＲは、メモリバスを介して外部の主記憶装置との転送が生じるキャッシュを制御する論理部（キャッシュ制御論理部）が保持するように構成し、キャッシュ制御論理部が、ＭＳＨＲの更新を実行しても良いことは言うまでもない。この場合に、電圧／クロック周波数制御部１４は、ＭＳＨＲの値を参照できれば良い。
【００２６】
本実施の形態にかかる半導体装置の動作の詳細な説明に先立って、ＤＶＳの手法および本発明の概略について説明する。ＤＶＳは、電源駆動／バッテリー駆動の別、或いは、プロセッサのタスク処理要求の負荷などに応じて、動的にプロセッサのクロック周波数と電源電圧とを調整する手法である。バッテリー駆動時間を長くしたい、或いは、行うべきタスクが少なくプロセッサのアイドル状態が長いような場合には、プロセッサチップの電源電圧を下げて消費電力削減を狙う。
【００２７】
このＤＶＳによる消費電力および性能への影響は、以下のように定式化することができる。まず、ＣＭＯＳ半導体のスイッチングに起因する消費電力Ｐは、以下の（１）式で表わすことができる。
【００２８】
Ｐ∝Ｃ×Ｖｄｄ２×ｆ          ・・・（１）
ここで、ＣはＣＭＯＳの負荷容量、Ｖｄｄは電源電圧、ｆはクロック周波数である。また、ＣＭＯＳ半導体回路の遅延時間Ｄは、一般的に、（２）式で表わすことができる。
【００２９】
Ｄ∝Ｖｄｄ／（ＶＧ−ＶＴ）α    ・・・（２）
ここで、ＶＧはゲート電圧、ＶＴは閾値電圧である。また、αはトランジスタ中のキャリアの速度飽和を表わす値で典型的には１〜２の値をとる。（１）式に示すように、消費電力は電源電圧の２乗に比例するため、電源電圧を下げることで大きな消費電力削減が期待できる。しかしながら、（２）式から、電源電圧を下げると回路の遅延時間が増加してしまうため、正確な動作を保障するためには同時にクロック周波数を下げる必要がある。このようにＣＭＯＳ回路では電源電圧の変更に伴い、消費電力と性能との間にトレードオフが存在する。
【００３０】
近年、プロセッサと主記憶との間の性能格差が深刻化しており、キャッシュミスが頻繁に生じるようなアプリケーションでは、プロセッサは多くの時間を主記憶からのデータ転送待ちに費やしている。そこで、本発明においては、ＤＶＳを用いた場合のクロック周波数低下に起因する性能のペナルティを、そのデータ転送待ち時間により隠蔽することで、性能低下を最小限に抑えつつ消費電力を削減する。
【００３１】
図２は、従来（ＤＶＳなし）の電源電圧制御（図２（ａ）と本発明にかかる電源電圧制御（図２（ｂ））とを比較する図である。これら例では、キャッシュミスが生じた場合でもプロセッサが処理を実行し続けることができるノンブロッキングキャッシュを前提としている。また、主記憶からのデータ転送(cache miss resolve)は、同時には一つのリクエストしか実行できないと考える。
【００３２】
ＤＶＳなしの従来のプロセッサにおいては、キャッシュミスによるデータ待ちのストール時間が多く、効率的にプロセッサを稼動させていないことがわかる。その一方、ＤＶＳの手法を用いた場合には、主記憶間とのデータ転送処理の負荷が高い場合に、プロセッサの電源電圧およびクロック周波数を下げることでストール時間が減少し、また、消費電力を削減することができるため、効率的に処理を実行することができる。ここで、図２（ｂ）に示すように、適切なクロック周波数を選択することができれば、性能低下は生じない。本発明では、このように性能低下を生じることを回避しつつ、電源電圧およびクロック周波数を下げることを可能にする。このためには、演算処理と主記憶アクセスとの負荷バランスを予測し、最適な電源電圧およびクロック周波数を決定する必要がある。ノンブロッキングキャッシュの場合、キャッシュミス解決のためのデータ転送中でも、プロセッサの実行が継続されるため、転送中に再び新たなキャッシュミスが生じる可能性がある。したがって、ある時点では複数のキャッシュミスが存在していることも少なくない。ここで、一般的に、キャッシュと主記憶との間のデータ転送は、同時には１つのリクエストしか処理できないため、キャッシュミスによるデータ転送要求が積み重なると、プロセッサはストールする可能性が高い、すなわち演算処理に対して、データ転送要求の負荷が高いことになる。そこで、本発明では、「同時に存在するキャッシュミスの数」の情報に基づいてＤＶＳを実現する。以下、第１の実施の形態にかかる手法について詳細に説明する。
【００３３】
図３（ａ）に示すように、この第１の実施の形態にかかる電圧／クロック周波数制御部１４は、キャッシュミスがあると（ステップ３０１でイエス(Yes)）、ＭＳＨＲにエントリを追加し（ステップ３０２）、キャッシュミスが解消すると（ステップ３０３でイエス(Yes)）、ＭＳＨＲからエントリを削除する（ステップ３０４）。各クロックサイクルで、エントリ数を累算し（ステップ３０５）、ＭＳＨＲ中に記憶しておく。また、後述するように、Ｔｉｖｌ経過後、次のタイムインターバルでの電源電圧およびクロック周波数が決定されると、ＡｖＮｕｍＭＳＨＲはリセットされる。
【００３４】
図３（ｂ）に示すように、設定されたタイムインターバルＴｉｔｖｌ経過後（ステップ３１１）、電圧／クロック周波数制御部１４は、タイムインターバルＴｉｔｖｌに含まれるサイクル数で、累算されたエントリ数を割ることで（ステップ３１２）、ＭＳＨＲの平均のエントリ数ＡｖＮｕｍＭＳＨＲを得ることができる。
【００３５】
また、本実施の形態においては、タイムインターバルＴｉｔｖｌを導入し、当該タイムインターバルＴｉｔｖｌごとに負荷を予測している。つまり、図４に示すように、あるタイムインターバル（たとえば、Ｔｉｔｖｌ１）の負荷（Load1）に基づいて、次のインターバル（Ｔｉｔｖｌ２）の負荷（Load2’）を予測して、次のインターバルにおいて、それに基づく電源電圧およびクロック周波数で半導体装置を動作させる。たとえば、タイムインターバルＴｉｔｖｌは、１００００クロックサイクルとする。無論、タイムインターバルはこの値に限定されるものではない。
【００３６】
ここでは、基本的には、前回のタイムインターバルでの負荷(load(N-1))が高ければ、次のタイムインターバルでの負荷(LoadN)も同様に高いと予測し、その一方、前回のタイムインターバルでの負荷(Load(N-1))が低ければ、次のタイムインターバルでの負荷(LoadN)も同様に低いと予測する。この予測ロジックについて、図５を参照して説明する。本実施の形態では、レベルが高くなるのにしたがって、電源電圧およびクロック周波数が高くなるような、電源電圧およびクロックの組を複数用意しておく。また、負荷「Load」の上限／下限の閾値ＴＨＵ／ＴＨＬが設定される。たとえば、第１の実施の形態において、ＴＨＵ＝１．２、ＴＨＬ＝０．８に設定しておく。無論、他の値を設定しても良いことは言うまでも無い。
【００３７】
なお、第１の実施の形態において、負荷「Load」として、タイムインターバルにおける平均のエントリ数ＡｖＮｕｍＭＳＨＲが利用される。たとえば、同時に存在するキャッシュミスの数が常に「１」であった場合には、「ＡｖＮｕｍＭＳＨＲ＝１」であるため、「load＝１」となる。
【００３８】
図５に示すように、電源／クロック周波数制御部１４は、「Load＞ＴＨＵ」であると（ステップ５０１でイエス(Yes)）、電源電圧／クロック周波数を１レベル下げる（ステップ５０２）。ここで、１レベル下げるとは、電源電圧およびクロック周波数の双方が１段階低くなるような、前述した電源電圧およびクロック周波数の組を選択することをいう。この場合、主記憶のアクセスの負荷が大きい（半導体装置自体の処理の負荷は小さい）ため、電源電圧およびクロック周波数を小さくできると考える。その一方、「Load＜ＴＨＬ」であった場合（ステップ５０３でイエス(Yes)）には、電源電圧／クロック周波数が１レベル上げられる（ステップ５０４）。
【００３９】
次に、第２の実施の形態について説明する。第１の実施の形態においては、負荷「Load」を取得するために、タイムインターバルにおける平均のエントリ数ＡｖＮｕｍＭＳＨＲを利用したが、第２の実施の形態においては、キャッシュミスをカウントする手法を採用する。
【００４０】
図６に示すように、第２の実施の形態においては、Ｌ２キャッシュ（L2Cache）にキャッシュミスやライトバック(write-back)が生じたときに、レジスタＲＬ２ｍの値がインクリメントされ、キャッシュミスなどが解消した（解決した）ときに、レジスタＲＬ２ｍの値がデクリメントされる。また、第２の実施の形態においては、３つのカウンタＣｎｔ０〜Ｃｎｔ２が設けられ、各クロックサイクルで、レジスタＲＬ２ｍの値に応じてカウント値を変化させている。図７に示すように、電源／クロック周波数制御部１４は、各クロックサイクルにおいて、レジスタＲＬ２ｍの値を参照し（ステップ７０１）、その値に応じて所定のカウンタをインクリメントする（ステップ７０２〜ステップ７０５）。たとえば、カウンタＲＬ２ｍの値が「１」より大きければ、カウンタＣｎｔ２がインクリメントされる（ステップ７０３）。また、カウンタＲＬ２ｍの値が「１」、「０」であれば、カウンタＣｎｔ１、Ｃｎｔ０がそれぞれインクリメントされる（ステップ７０４、７０５）。カウンタＣｎｔ０〜Ｃｎｔ１により、あるタイムインターバルにおいて同時に存在したキャッシュミス数の分布を知ることができる。
【００４１】
第２の実施の形態にかかる電圧／クロック周波数制御部１４は、タイムインターバルＴｉｔｖｌ経過後に、カウンタＣｎｔ０〜Ｃｎｔ２の値を参照して、以下の（３）式にしたがって負荷「Load」を算出する。
【００４２】
Load＝(Cnt2)×Ｗ２＋(Cnt1)×Ｗ１＋(Cnt0)×Ｗ０        ・・・（３）
なお、(Cnt0)〜(Cnt2)は、それぞれ、カウンタＣｎｔ０〜Ｃｎｔ２の値である。第２の実施の形態においては、Ｗ２＝２、Ｗ１＝１、Ｗ０＝−１としている。それぞれの重みを同じとするのであれば、Ｗ０＝０とするところ、ここでは、Ｗ０の重みを他よりも重くしている。これは、Ｃｎｔ０がカウントされているということは、半導体装置自体が忙しくしていることを意味しており、その場合には半導体装置を高速に動かすべきであるという知見による。無論、この値（或いは値の比）は上述したものに限定されないことはいうまでもない。
【００４３】
第２の実施の形態においても、上述した負荷「Load」の算出後、図５に示すような電源電圧／クロック周波数の変更が実行される。第２の実施の形態において、タイムインターバルＴｉｔｖｌのクロックサイクル数を「１００００」とすると、同時に存在するキャッシュミスの数が常に「１」であれば、「Load＝１００００」となる。そこで、たとえば、「ＴＨＵ＝１２０００」、「ＴＨＬ＝８０００」に設定すればよい。無論、他の値をとっても良いことは言うまでもない。
【００４４】
第１の実施の形態および第２の実施の形態にかかる半導体装置について、シミュレーションによりベンチマークテストを行った。ベンチマークプログラムとして、２つのベクトルの内積を求めるプログラム（以下、「Vector」と称する）、および、ＳＰＥＣ  ＣＰＵ２０００中のいくつかの浮動小数点プログラムを利用した。また、電源電圧／クロック周波数の組は、インテル社のペンティアム（登録商標）Ｍプロセッサと同様に６レベルで変更可能とした（図８参照）。
【００４５】
第１の実施の形態におけるパラメータの設定は以下の通りである。
【００４６】
Ｔｉｔｖｌ＝１００００サイクル  ＴＨＵ＝１．２  ＴＨＬ＝０．８
また、第２の実施の形態におけるパラメータの設定は以下の通りである。
【００４７】
Ｔｉｔｖｌ＝１００００サイクル  ＴＨＵ＝１００００  ＴＨＬ＝６０００
シミュレーションパラメータは、以下のように設定した。
【００４８】
フェッチサイズ(fetch size)：４
ｂ−ｐｒｅｄ．：ｂｉｍｏｄａｌ  ２Ｋｔａｂｌｅ
ＢＴＢ：５１２−ｓｅｔｓ  ４−ｗａｙ
ｍｉｓｓ  ｂ−ｐｒｅｄ．ｐｅｎａｌｔｙ：３サイクル
ＲＵＵサイズ：６４
ＬＳＱサイズ：３２
Ｌ１ＩＣａｃｈｅ：３２ＫＢ  ２−ｗａｙ、３２Ｂｌｉｎｅ、１サイクルレイテンシ
Ｌ１ＤＣａｃｈｅ：３２ＫＢ  ４−ｗａｙ、３２Ｂｌｉｎｅ、１サイクルレイテンシ
Ｌ２Ｃａｃｈｅ：１２８ＫＢ  ４−ｗａｙ、６４Ｂｌｉｎｅ、１０サイクルレイテンシ
バス(Bus)：８Ｂ幅
メモリレイテンシ：５０ｎｓ（１．６ＧＨｚでは８０サイクル）
比較例においては、電源電圧１．４８４Ｖ、クロック周波数１．６ＧＨｚでそれぞれのプログラムを実行させた。
【００４９】
図９は、それぞれのプログラムを実行させたときの実行時間、および、そのときのクロック周波数の分布を示す。図中、「ｎｏｒｍ」は比較例を示し、「ＤＰＴ１」、「ＤＰＴ２」は、それぞれ第１の実施の形態、第２の実施の形態を示す。図９に示すように、第１の実施の形態および第２の実施の形態ではプログラムに応じて様々なクロック周波数で半導体装置が動作していることがわかる。その一方、「Vector」と「188.ammp」をのぞき、クロック周波数を下げているのにもかかわらずそれほどの性能低下が見られないことが理解できる。特に、「179.art」、および、「301.aspi（第２の実施の形態）」では、ほとんどの時間「６００ＭＨｚ」と低速で動作しているのにもかかわらず、あまり性能の低下がみられない。上記シミュレーションによれば、第１の実施の形態で平均４．６％の性能低下が見られ、第２の実施の形態で平均６．１％の性能低下が見られた。
【００５０】
また、図１０は、それぞれのプログラムを実行させたときの消費エネルギーを示している。ほぼ全てのプログラムで、比較例「ｎｏｒｍ」よりも消費エネルギーが削減されていることがわかる。第１の実施の形態では平均３２％、第２の実施の形態では平均４６％、消費エネルギーが削減された。このように、本実施の形態によれば、大幅な消費エネルギーの低減が実現できるにもかかわらず、性能低下はわずかであることがわかった。
【００５１】
本実施の形態によれば、半導体装置の計算処理と主記憶間データ転送処理との負荷バランスに応じて、クロック周波数および電源電圧を最適化している。これにより、最高周波数で動作させた場合と比較して、性能低下を最小限に抑えつつ著しい消費電力の低減を実現することが可能となる。
【００５２】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【００５３】
たとえば、前記実施の形態においては、半導体装置は１次キャッシュおよび２次キャッシュを備え、半導体装置が、２次キャッシュのキャッシュミスやミスの解消を取得している。しかしながら、本発明においては、主記憶と接続されたキャッシュのキャッシュミス等の情報を取得できるような構成をとっていれば良い。
【００５４】
また、前記実施の形態において、半導体装置のタイムインターバルＴｉｔｖｌを実行するプログラムに応じて変更しても良い。プログラムによりタイムインターバルを短くしてよりきめの細かい制御をするほうが望ましい場合もある。また、閾値ＴｈＵおよびＴｈＬを可変としても良い。
【００５５】
さらに、前記実施の形態においては、前回のタイムインターバルでの負荷に基づいて今回のタイムインターバルにおけるクロック周波数および電源電圧が決定されているがこれに限定されるものではなく、決定された値を、それより後（たとえば、次回のタイムインターバル）でのクロック周波数および電源電圧として適用しても良い。
【図面の簡単な説明】
【００５６】
【図１】図１は、本発明の第１の実施の形態にかかる半導体装置の構成を示すブロックダイヤグラムである。
【図２】図２は、従来の電源電圧制御と本発明にかかる電源電圧制御とを比較する図である。
【図３】図３は、本実施の形態にかかる半導体装置の電圧／クロック周波数制御部にて実行される処理を示すフローチャートである。
【図４】図４は、本実施の形態にかかるタイムインターバルごとの電圧制御を説明する図である。
【図５】図５は、本実施の形態にかかる半導体装置の電圧／クロック周波数制御部にて実行される処理を示すフローチャートである。
【図６】図６は、第２の実施の形態にかかるレジスタＲＬ２ｍの値の変化を説明する図である。
【図７】図７は、第２の実施の形態にかかる半導体装置の電圧／クロック周波数制御部にて実行される処理を示すフローチャートである。
【図８】図８は、シミュレーションにおけるクロック周波数および電源電圧を示す図である。
【図９】図９は、シミュレーション結果（プログラム実行時間およびそのときのクロック周波数の分布）を示す図である。
【図１０】図１０は、シミュレーション結果（消費エネルギー）を示す図である。
【符号の説明】
【００５７】
１０    半導体装置
１２    演算部
１４    電圧／クロック周波数制御部
１６    キャッシュメモリ群
１８    Ｌ１命令キャッシュ
２０    Ｌ１データキャッシュ
２２    Ｌ２キャッシュ
【図１】
2005196430.tif 000003
【図２】
2005196430.tif 000004
【図３】
2005196430.tif 000005
【図４】
2005196430.tif 000006
【図５】
2005196430.tif 000007
【図６】
2005196430.tif 000008
【図７】
2005196430.tif 000009
【図８】
2005196430.tif 000010
【図９】
2005196430.tif 000011
【図１０】
2005196430.tif 000012