« hello win トドロキ劇「城」 vsイニエスタ神戸(後編) | トップページ | 多摩川クラシコチケットなんとか確保しました »

2018/10/28

命令セットアーキテクチャを考える(番外編) IA-64私的考察

ARMなど一部のアーキテクチャでは条件付き命令というものがあります。コンディションフラグの内容によって、命令実行されたり実行されなかったり(NOP相当)するもので、うまく使うと条件付き分岐命令を使う場合と比べてパイプラインの乱れが少なくて実行効率が上がることが期待できます。

いろんなアーキテクチャを調べていて、IA-64(Itanium)にはもっと大胆な条件付き命令があることを知りました。
条件付き命令がある、というよりもほとんどすべての命令が条件付きになっています。また、コンディションフラグ(IA-64ではPredicate Registerといいます)も64個もあり、どのフラグを使うかを命令コード中で指定できます。このアーキテクチャは、机上で検討するだけだと非常に良いものに思えます。


良いアーキテクチャに思えるIA-64は、プロセッサービジネスとしては失敗作とされています。その理由を素人なりに考えてみました。

まず、IA-64は128bitのbundleと呼ばれる単位に3命令が格納されるVLIW(Very Long Instruction Word)アーキテクチャとなっています。普通のRISCアーキテクチャは32bitで1命令が多いので、それに比べるとバイナリコードでの命令密度が3/4しかありません。これが実行速度があがらなかった一つの要因ではないかと思います。

128bitに3命令しか入らない理由として、汎用レジスタが128本もあり、レジスタ指定ビット数が7bit必要になることがあげられます。普通のRISCアーキテクチャでは汎用レジスタは32本(5bit指定)のことが多く、3オペランド命令では2bit×3 = 6bit多く必要になります。また、64本のPredicate Registerの指定にも6bit必要になり、合計12bit余分に必要になります。
32bitから41bitと、9bitしか増えていないので、命令コード部分で3bit節約していることになり、頑張っているとも言えます。

1命令は41bitで構成されており、128bit - 41bit×3 = 5bitは、templateといって、1bundle内の3命令のパターンを
示します。そうすることで、ハードウェアでの実行スケジューリングはtempalteを見ることで簡単になるように考えられています。その分、コンパイラには高度なスケジューリング機能が求められます。Itanium出荷直後はコンパイラによるチューニング機能が十分ではなかったことも、性能面での不利になったのではないかと思います。


以上のような技術的な要因だけでなく、IA-64のビジネス的失敗の最大の原因はIA-32互換機能にあったんじゃないかなと思っています。

IntelとしてはIA-32のソフトウェア資産を捨て去るという勇気はなかったのでしょうが、IA-32とIA-64はアーキテクチャ的に共通部分がほとんどありません。中途半端にIA-32互換機能をもたせようとしたために出荷時期が遅れ、IA-32互換機能は性能が出ずに期待を裏切り、また、トランジスタ数の増加はチップ面積も大きくなって製造歩留りも落としてしまったはずです。

IA-32との互換性を捨ててまで理想とするアーキテクチャを追い求めたIA-64だからこそ、思い切ってIA-32互換機能を切り捨てるという勇断が必要だったのではないでしょうか。

条件付き命令をほとんどすべての命令で実現するという大胆なアーキテクチャを知るにつれて、このアーキテクチャが花開かなかったことが残念です。

|

« hello win トドロキ劇「城」 vsイニエスタ神戸(後編) | トップページ | 多摩川クラシコチケットなんとか確保しました »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 命令セットアーキテクチャを考える(番外編) IA-64私的考察:

« hello win トドロキ劇「城」 vsイニエスタ神戸(後編) | トップページ | 多摩川クラシコチケットなんとか確保しました »