処理を低下させずCPUを最大限に利用させようとしたらこうなった>Bulldozer

http://pc.watch.impress.co.jp/docs/column/kaigai/20091120_330076.html (PC watch)
http://pc.watch.impress.co.jp/docs/column/kaigai/20091126_331235.html (PC watch)


intelHyper-Threadingは、1つのCPUの空いている演算ユニットを他のスレッドのプログラムで埋める事により、システム全体で処理出来るコードを増やして性能を上げましょう的なアプローチであるが、
使用する演算ユニットが衝突したりすると性能低下が発生してしまう可能性がある。
良くて1.2〜1.3倍にしかならない*1ので、そうならないために、Hyper-Threading用のチューニングが必要になる。


デュアルコアだと、上記Hyper-Threadingの様な性能低下は発生しないが、今度は利用しない演算ユニットが多く発生するために、使用しない演算ユニットが発生する事で、今後コア数を増やすと無駄になる箇所が増えてくる。


じゃぁ、デュアルコア構成にはするが、頻繁に使われる演算ユニットは専用に持たせて性能アップを図り、頻繁に利用されない演算ユニットは共有させてCPUダイサイズの無駄を省けるようにすればイイんじゃね?
後者の記事だと、『浮動小数点演算ユニットは、99%の時間は使われていない』だそうで、じゃぁ浮動小数点演算ユニットは共有化させていいのではないか?
.....と言う理論を実現したのが、AMDの新しいBulldozerコア。


サーバ用途でも、専ら整数演算ユニットの処理が多いから、HPC(ハイパフォーマンスコンピューティング)分野以外であれば、この方法がもっとも効率がよいとの判断なのだろう。


じゃぁ、問題のHPC分野はどうするの?と言う問いが出てくるだろう。


答えは恐らく、CPUとGPUを融合させるFusion
グラフィック分野は、DirectX11のCompute ShaderやOpenCLの台頭により、GPUで演算させる下準備が出来ている。
AMD/Ati陣営は既にDirectX11対応製品を世に送り出している。
HPC分野は、このGPGPUに任せる算段ではなかろうか?


もしここまで考えていたとすると、AMDは先見の目が凄いなぁ。