スレッドレベルの投機実行、トランザクション メモリ

http://journal.mycom.co.jp/articles/2006/06/28/isca/
 プロセッサはマルチコア化が一気に進んでいるが、メモリのデータが独立していて並列性の高い特定のプログラムしか恩恵を受けにくい。更なるマルチコアの利用のためには、データには依存関係が存在していても実際には並列可能なスレッドを抽出する方法として投機スレッドが考えられている。この方法では先にスレッドへデータへのアクセスを許可し後から整合性を確認する。メモリのアクセス許可と整合性の確認をもつハードウェアが必要となるので、ソフト・ハードの共同研究となり難易度が高い。

 そのうちソフトウェアをどのように適応させるのかに興味があったのでGoogleトロント大、カーネギーメロン大の共著が面白かった。この論文ではスレッドの大きさが大きすぎるとリスクが大きくなるのでサブスレッドに分けて途中まで進めていく、とても良いアイディアだ。ロックしなければならないトランザクション処理で4CPUで2-3倍の性能向上が見込めるらしく、かなり優秀だと思う。

 さて、シングルスレッド+高性能のCPUとどちらが有利なのだろ。大雑把にエネルギー換算すると、シングルスレッドで2倍の性能向上に4倍の電力が必要と考えられるから、この論文の投機スレッドの効率50%だと4CPUを利用する場合とトントンになる。(CPU間の処理分が必要だから投機スレッド方がやや不利。)スレッド実行効率と単体スレッドで処理した場合と同じ電力を使うCPU数は逆数の関係になるから、効率75%で4CPU以下87.5%で8CPU以下を利用することに、マルチCPUを使ってもさほど有利にならない。破棄されるスレッドをどこまで抑えられるか、捨てられたスレッドのコストをどこまで抑えられるかがキモになる。