次に、動作周波数を3.6GHz固定(Turbo無効)のままコア数を減らしてみた。今回利用したASUSTeK Crosshair V Formulaの場合、BIOS Setupの中で有効コア数を1~8コアまで変化させられる。ただご存知の通り、Bulldozerでは2コアを1つのModuleとして扱っている。そこで今回は2P(Module単位で有効コア数を変更)と1P(各Moduleの片方のコアを全部無効としたうえで、Module単位で有効コア数を変更)の2つを試してみた。
何か文章で書くと判りにくいのだが、要するにこういうことだ。Bulldozerコアは図1の様に、8つのコアが4つのModuleに分かれる形で格納されている。で、2Pでは図1の様に2/4/6/8コアを有効にする形でのテストを行った。一方1Pのケースでは図3の様に、すべてのModuleの片方のコアを無効にした上で、1/2/3/4コアを有効にしたという話だ。
さて結果はグラフ123に示す通りである。Idle時の消費電力は1Pも2Pもほとんど差がなく、グラフ上では完全に重なって見える。
一方Int/Float時の消費電力だが、たとえば4Moduleの場合、
Int 1P | 219W |
Int 2P | 238W |
Float 1P | 206W |
Float 2P | 228W |
と、1Pと2Pでの差が非常に少ない。これをもう少し判りやすいようにIdleとの差を示したのがグラフ124、これに近似直線を加えたのがグラフ125である。
Intの場合、3.6GHz動作で、
2P:20.5W/Module
1P:17.0W/Module
程度の消費電力となる。
なんでこんなに1Pで下がり方が少ないかというのは、BulldozerがModule単位でのPower Gatingを行っている事が関係している。遅ればせながらAMDもついにClock Gatingに加えてPower Gatingを搭載しており、たとえば図2でModule数=1のケースだと、Module=2/3/4についてはPower Gatingによりそもそも電力が供給されない。なので消費電力はUncore(L3キャッシュやメモリコントローラ、HyperTransport LinkなどNorthBridgeに相当する分)+2コア分ということになる。で、図3でModule数=1のケースだと、Core 2はClock Gatingにより動作はとめられるが、Power Gatingまでは行われないので、Static Powerは引き続き消費することになる。それにそもそもBulldozerの構成だとFrontendやFPUなどは共用だから、1コア減らしても大して変わらない、ということになる。上の結果で言えば、4ModuleでIntを実行した場合の消費電力の差は19Wであるから、コア1個あたりでは5Wに満たない程度だ。1Module全体での消費電力は5.7W/GHzで、これが3.6GHzで動くと20.5Wほどになる。このうちIntのBack endは3.5Wほどだから、つまりFront end+FPU+L2で13.5Wほど消費している、ということが計算できる。まぁCPUの中で一番消費電力が大きいのがDecoder部で、Front endにこのDecoderを含んでいる以上それほど不思議な数字ではないと言えよう。
ところでもう一度グラフ120~122を見てみると、確かにここまでの計算は3.8GHzまでは通用するのだが、そこから急激に消費電力が増えている。おそらく現状のGlobalFoundariesの32nm SOIプロセスでは、この3.8GHzあたりが閾値になっているのだろう、と想像される。だから、この周波数以下では比較的リニアに消費電力が増えるが、これを無理に超えると大きく消費電力が増えるのであろう。
この推察には傍証もある。今月14日にBulldozerベースのOpteron 6200/4200が発表されたが、ラインナップを見てみると、見事なほどに3.7GHz以下に抑えられている事がわかる。要するにこれを超えると急激に消費電力が増えるので、それを見越してのラインナップなのであろう。ではなぜデスクトップでは最大4.2GHzまで引っ張るのか、というとこれは性能面でのディスアドバンテージを少しでも動作周波数でカバーするための方策で、いわば力ずくでの解決である。
もっともこの結果からひとつ判るのは、Turboの最大周波数を3.8GHzあたりに抑えておけば、消費電力はわりと穏当な範囲に収まるだろうということだ。実際、3.8GHzと4.2GHzでは動作周波数が30Wも違う。TDPが140WのCPUだから、Turboの上限を3.8GHzに抑えればTDPが110W相当になるということになる。