図1.20に見られるように、電源電圧を下げるとクロックも下げざるを得なくなる。しかし、プロセサのやるべき仕事が少なく、クロックを下げて処理速度を落としても十分間に合うという状態では、電源電圧と動作クロック周波数をつり合いのとれた形で下げてやると、大幅に消費電力を減らすことができ、電源電圧を20%下げると消費電力はほぼ半減する。このように処理負荷に応じて電源電圧とクロック周波数を変えるのがDynamic Voltage Frequency Scaling(DVFS)という方法で、マイクロプロセサとしては、今は亡きTransmetaのCrusoeで最初に採用され、その後、多くのプロセサで採用が広がっている省電力手法である。

そして、最後に残るパラメタがαである。前に、αが小さくなる理由としてプロセサが浮動小数点演算器は使っていないというケースを挙げたが、実は、使っていない=電力を喰わないということにはならない。使っていなくても、なんらかのゴミ入力が入ると、それを浮動小数点数とみて演算を行ってしまい回路がスイッチして電力を消費してしまう。また、図1.21に示すフリップフロップ(Flip-Flop:FF)は入力が一定で変化しないとしても、クロックが入ることにより、図1.21で赤色で示したインバータや配線はスイッチしてしまう。このため、演算を行っていない場合でも、浮動小数点演算器の中のクロック分配系やレジスタの中のクロック系の回路は動いてしまう。この部分はα=2.0の部分であるので、かなりの消費電力になってしまう。

図1.21 Dフリップフロップの回路図とクロック入力でスイッチする部分(赤色)

このため、最近のプロセッサでは使用しない論理ブロックへのクロックを止めるクロックゲート(Clock Gate)という手法が取られている。図1.22はクロックゲート機能を持つクロック分配系を示している。なお、この図では各FFへのクロック接続だけを示し、データの接続は省略している。

図1.22 クロックゲート機能を持つクロック分配系

次の図1.23に示すように、Gate信号が"0"の場合には2入力NANDゲートの出力はClock入力に拘わらず"1"となり、FF群にクロックを供給するクロックバッファ(小さな三角)への入力は"0"に固定される。したがって、クロックが変化しても、2入力NANDの出力以降のクロック分配系はスイッチせず、ダイナミック電力も消費しない。そして、Gate信号が"1"となると、2入力NANDの出力はClockの否定、さらにそれがインバータで否定されてクロックバッファの入力にはClockが入力される。

図1.23 クロックゲートを行った場合のFFへのクロック入力波形

クロックゲートを行うにあたり注意が必要なことは、Clock入力が"1"の状態でGate信号を変化させると、Clockパルスの幅が狭くなってしまいFFが異常な動作をしたりする恐れがあるので、必ずClock入力が"0"のタイミングでGate信号が変化するように設計しなければならないということである。

浮動小数点演算器などの論理ブロックの入力レジスタへのクロックを止めてしまうと、ゴミ入力も入らなくなり、演算器全体のダイナミック電力をゼロにすることができる。しかし、浮動小数点演算器などは内部が何段かのパイプライン構成になっており、論理ブロック単位でクロックゲートを行うと、一部のパイプステージだけが使われている状態でも全部のステージにクロックを入れることになってしまう。このため、パイプラインの各ステージについて必要なサイクルだけクロックを供給して動作させ、動作する必要がないステージはクロックを止めて省エネするというようなより細分化されたファイングレインクロックゲートを行うプロセサが増えている。

また、最近のプロセサでは、マイクロアーキテクチャレベルでαを減らす工夫も用いられるようになってきている。

性能が最重要課題であったころのキャッシュは、図1.24に示すようにタグアレイとデータアレイのアクセスを並列に行い、タグがマッチしたWayの読み出しデータだけを選択して出力し、その他のWayのデータアレイからの読み出しデータは捨てるという動作を行っていた。つまり、タグがマッチしなかった3つのWayのデータアレイの読み出しは(結果論であるが)不必要な読み出しで、ムダな電力を消費していた。

図1.24 速度最優先の従来の4Wayキャッシュの構

しかし、消費電力優先の最近のマイクロプロセサでは図1.25のような構造が採られる。この構造では、まず、第1段でタグアレイを読んでタグマッチの結果をFFに記憶する。また、データアレイをアクセスするIndexも第2段での使用に備えてパイプラインレジスタに記憶しておく。

そして、第2段ではタグがマッチしたWayのデータアレイだけがEnableされ、ヒットしたデータを読み出すという構造になっている。この例の4Wayのキャッシュの場合、4Wayのタグアレイを並行に読んでタグマッチを検出するところは同じであるが、図1.19の構造では4Way分のデータアレイを読むのに対して、図1.25の構造ではタグがマッチしてエネーブルされた1つのwayのデータアレイだけを読むことになり、3Way分のSRAMを読む電力が節約できる。

図1.25 消費電力最優先の4Wayキャッシュの構造