2009年12月6日日曜日

POWER processorのgroup dispatchとは

前回のPOWER7に燗する記事を書いていて気になったので、"group dispatch"について調べました、というか、Inside the IBM PowerPC 970 ? Part I: Design Philosophy and Front Endを読みました。2002年に書かれたPower 970とPentium4との比較記事なので、かなり古いですが、POWERアーキテクチャの基本は変わってないはず。

まず、Pentium4の概要から。Pentium4は、1つのインストラクションを複数のmicro-operation (uOP) に変換し、実行ユニットはuOPをOut-of-orderで実行します。

Power 970の場合も、インストラクションをinternal operation (IOP) に変換するところまではPentium4と同じです。ところが、この後IOPは「グループ」と呼ばれる単位にまとめられます。グループは、最大5つ(POWER7では最大6つ)のIOPから成り、Out-of-orderは(各IOP単位ではなく)グループ単位で制御されます。こうすることで、Out-of-orderに必要なモジュール(reservation stationとかreorder bufferとか)を小さくして、トランジスタを削減できます。

ただし、この「グループ」の構成にはいろいろ制約があるようです。
  • スロット0からスロット4に入るIOPはプログラム順でなくてはならない
  • 分岐IOPはスロット4にしか入れられない。また、スロット4には分岐IOPしか入れられない
  • 1つの命令を構成する複数のIOPは、複数のグループに分割できない
これを満たせない場合は、スロットにはNOPが入ります。したがって実行効率が低下します。(この問題はVLIW/EPICが抱える問題と同じですね)

同じOut-of-orderでも、Pentium4はuOP単位で処理しているので効率が良さそうです。「グループ」のメリットはトランジスタの削減なんでしょうが、トランジスタを減らせても実効性能も落ちてしまったら意味ないと思うんですが・・・。IBMがあえてそういう設計にしたからには、NOPはあまり挟まれない(グループのスロットはたいてい埋まる)ということなんでしょうね。

0 件のコメント:

コメントを投稿