Turbo Mode

基調講演レポートにもあったTurbo Mode。元々はPenryn世代のCore 2に搭載されたもので、Dual Coreの片方が待機状態、もう片方がFull Loadの場合、一時的に1 bin(具体的に言えば200MHz)Full Loadのコアの動作周波数を引き上げるというものであった。これがCore i7世代でどう変わるかといえば、

  • Quad Coreが全てFull Loadの場合はそのまま(Photo08)。
  • コアのうち2つが待機状態の場合、Full Loadの2 Coreを1 Bin up(Photo09)。
  • それでも負荷が高い場合、うち1つのコアを更に1 Bin up(Photo10)。

という2段階のTurboに変更された。

Photo08:基本的にはCore i7世代のTDPの大枠はCore 2世代と変わらないとしており、概ねCore i7 Extremeで130W台(SkullTrail向けのQX9775の150Wは、この際除外して考えていいだろう)、Core i7で95W程度(B3 SteppingのCore 2 Q6600は105Wだったが、これは例外)に収まる(というか、収める)つもりなのだろう。

Photo09:コアが1つだけ遊んでいる、という状態ではこれは働かないと思われる。逆にコアが1つしか動いてないという状況でどうなるのかが楽しみだ。

Photo10:どちらのコアに1 Bin upするのかは不明。常にCore 0が1 Bin upするのかもしれない。

で、「Binって何?」という説明で出てきたプレゼンテーションがPhoto11である。要するに1 Binは相変わらず200MHzを指す模様だ。

Photo11:例えば3.2GHzで動いていれば、1 Bin upが3.4GHz、もう1 Bin upで3.6GHzになるという話。あくまで「例えば」なので、Core i7が3.2GHzを定格とするという意味ではない、との事。

ただし、Core i7はHyper-Threadingを搭載している関係で、このあたりがちょっと複雑になる。図1は32bit Windows、図2は64bit Windowsで、仮想CPU(つまりHyper-Threadingにより生成された、2つ目のCPU)がどうOS内で割り振られるか、を簡単に示したものだ。要するに仮想CPUの番号の割り振り方がOSによって異なる、という話である。

図1

図2

もっとも、「では32bitの場合、3スレッド以上の処理を行わないと実CPU #2は使われないか?」というと、そういう訳ではないらしい。

インサイドMicrosoft Windows第4版 上巻のP416には「スレッド用のプロセッサを選択するとき、すべての論理プロセッサがアイドル状態にある物理プロセッサが存在する場合には、その物理プロセッサの論理プロセッサが選択される。スレッドを実行させている別の論理プロセッサを所有している物理プロセッサ上のアイドルプロセッサが選択されるわけではない。」という記述があり、本来はこの割り振り方と無関係に空いているCPUを順に使っていってくれる「筈」……なのだが、どうも実際に使ってみるとうまく割り振られていないという事がある。したがって、この辺りがどの程度まで効果が出るか、もやはり実際にアプリケーションを使いながら確認するしかなさそうだ。

ちなみにSmackoverの場合、BIOS SettingでこのTurboのOn/Offと、Hyper-ThreadingのOn/Offは可能だが、稼動するコアの数までは変えられない(「1コアのみ動かす」と「全コア動かす」の選択はできるそうだ)との話であった。