このページの本文へ

前へ 1 2 3 4 次へ

ロードマップでわかる!当世プロセッサー事情 第71回

x86を高速化する切り札技術「命令変換」の仕組み

2010年10月04日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/)

  • この記事をはてなブックマークに追加
  • 本文印刷

 これをさらに積極的に進めたのがMacro Fusionである。こちらは複数のx86命令を、ひとつのμOpで扱えるというものだ。当初対象になったのは、cmp/test命令とjcc命令の組み合わせである。cmp/testというのは値を比較する命令で、この結果は「EFLAGS」というステータスを格納するレジスターに反映される。

  • cmp reg1, reg2

 上の命令はreg1とreg2の値を比較するもので、その結果(等しい/等しくない/どちらが大きいか、など)はEFLAGSの状態値を見れば判断できる。一方jcc(Jump if condition is Met)命令は、このEFLAGSの値を参照して、それが指定された条件であれば所定のアドレスに飛ぶ、というものである。要するにループ制御(例えばこのループを1000回繰り返す)などに、cmpやtestとjccはセットで使われるわけだ。

図4

図4 Macro Fusionの例。「CMP」と「JCC」が、Decode段で「cmp+jcc」という1命令にまとめられている

 こうした、非常に煩雑に出るものについては、上の図4のようにDecode段でひとまとめにしてしまい、そのまま処理をすることでμOpを節約する。これも最終的には、省電力化や性能向上に役立つ。MicroOps Fusionまでは、あくまでも「ひとつのx86命令が複数のμOpに分解される」というものだったがMacro Fusionではついに「複数のx86命令がひとつのμOpに集約される」ことになったわけだ。


 ここまで説明して気付かれた方もおられようが、最近のμOpはすでにRISC風という最初の定義からは、かなり遠いところにある。RISC対CISCの優劣論争も、90年代に入ってかなり下火になった。と言うよりも意味がなくなっていた。

 理由は2つある。ひとつはCISCが内部的にはRISC風の処理をするようになって、少なくとも命令セットと性能の間に直接的な関係がなくなってしまったこと。もうひとつはRISCの側もなんだかんだで命令を拡張していった結果、CISCとさして違いがなくなってしまったことだ。

 これに倣ったわけではないのだろうが、μOpもずいぶんと拡張を遂げた結果、かなり複雑なものに進化してしまっている。幸いなのは80年代と異なり、とにかく使えるトランジスター数が膨大になったため、多少複雑な命令だろうがなんだろうが、力技で解決できるようになったことだ。

 それでもx86命令のままで処理しないのは、x86命令がスーパースカラーやアウトオブオーダーを考慮していない命令体系だからだ。x86命令を効果的に処理するためには、一度変換したほうがいい、というわけだ。

前へ 1 2 3 4 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン