並列屋から見たTurboBoost

マルチポスト元→http://exth.net/~tgbt/wordpress/2009/09/28/2570/


別に並列屋の総意を代弁するとかいうつもりではないよ.


【元麻布春男の週刊PCホットライン】Turbo Boostがもたらす選択の難しさ - PC Watch
この記事の末尾では定格クロックとブーストクロックの高低が逆転してしまう可能性について触れている.確かにこの逆転は性能の上下がわかりにくくなるのでとらえにくくなると思う.


並列屋の端くれ(?)として思うのはちょっと違う点.
なにはともあれラインナップを見ると,TurboBoostの効果はおおよそでコア数2倍がクロック周波数10%に相当している気がする.4コアと2コアでは周波数10%差,2コアと1コアでは10%差.4コアと2コアだと周波数20%差.とても大雑把に見ると,だいたいこんな感じ.
ところで,単一プログラムをマルチコアCPUで並列処理した場合の性能の変化は,アプリケーションに強く依存することが知られている.アプリによってはほぼコア数分だけの性能変化が起きることがあるし,その一方で5%くらいしか変わらないこともある.
クロック周波数と性能について考えた場合も話は割と単純ではなくて,周波数分だけ性能に差が出ることもあるし,ディスクやメモリなどの性能が支配的でCPUのクロック周波数分だけの性能差が出ないこともある.でもコア数よりはアプリケーションの性能に直結していると考えて良いと思う.


とても簡単に考えると,コアが複数あるCPUでは全てのコアを使った方が絶対的な性能は上がると思って良い.でも消費電力とかを考慮したバランスで見ると,そうとも言えなくなる.
例えば,シングルコアだけ動かした場合に比べてデュアルコアの場合に消費電力が2倍だとすると,多くのアプリケーションはコア数に比例した性能が出ないので,シングルコア実行の方が電力あたりの性能は良くなる.
逆にシングルコアでもデュアルコアでも消費電力が変わらないなら,デュアルコアの方が電力あたりの性能が良くなる可能性がとても高くなる.


で,問題はTurboBoost.こいつはやっかいで,要するに「クロック周波数が高いシングルコアCPU」と「クロック周波数が低めのマルチコアCPU」を切り替えて使えるCPUだ.先ほどの例と違って,コアの数とクロック周波数が連動して動いちゃう.だから,中途半端に並列性がある計算を行おうとする場合は,絶対性能(処理時間そのもの)と相対性能(消費電力あたりの処理時間)のどちらの尺度を用いた場合でも,1コアだけ使って実行した場合と複数コアを使って実行した場合のどちらが良いかがわからない.
もちろん,並列性が高い処理はマルチコアで,そうでない処理はシングルコアで,と切り替えて使うことが想定されているとは思うんだけど,その閾値の判断が対象問題の性質だけではなくCPUの型番にも影響するから,簡単には判断できない.


というわけで,これってどうやって最適化するのがいいんだろうなあと考え中.自動チューニングしろってのはまあ正しいとして,「対象ブロックにおける並列度とクロック周波数の影響度」をなんらかの方法で測定・パラメタ化する技術が要るよなあ.入力データの性質が変わらないのであれば,そこそこまともにチューニングできるかしら.うーむ?