次期 Itanium は VLIW 実行を止める、というのは嘘だった

6月24日(id:nminoru:20110604:poulson)に書いた次期 Itanium の poulson が VLIW 実行を止めて、Out-of-order なスーパースカラーになるという話は嘘だったようだ。

資料を読む限り命令の issue は従来通り in-oder で、12 命令を同時発行するためにはコンパイラによって 12 命令以上を含む命令グループを構成しておく必要があるようだ。

フロントエンドの命令プリフェッチは 32 bytes/cycle で、これは過去の Itanium2 と一緒。1バンドル16バイトで最大3命令が入っており、1サイクルに最大 6 命令しかプリフェッチできない*1。これで 12 命令同時実行可能というからくりは、デコードされた IA-64 命令を貯めておく命令キューの存在だ。Poulson はデコード後の命令を 96 命令までキャッシュできる。ただしこれが効くのはループコードのように命令フェッチが止まる場合だ。なので 12 命令同時実行可能なのは「命令フェッチがループのようにコード」で「あらかじめ Poulson 向けにコンパイルした場合」のみだ。

実行演算器は ALU x6、Integer Unit が x2、FP Unit x2、Memory Unit x2、Branch Unit x3 になっている*2。メモリユニット数が 2 のままというのは如何ともしがたいのね。

それとは別に以下のような命令が加わるらしい。

  • 整数演算命令 mpy4、mpyshl4、clz
  • スレッド制御用に hint@priority
  • ハードプリフェッチ制御用に mov dahr
  • ソフトプリフェッチ制御用に lfetch.count

*1:ただし、32バイト命令フェッチが可能なのは 32 バイト境界に沿っている場合だけで、命令バンドルが 32 * N + 16 に沿う場合には 16 バイトフェッチになる

*2:整数演算も可能な Memory Unit x2、Integer Unit x2 があるのは確定だが、別に ALU x2 があって合計で ALU x6 なのかもしれない。