インテルやAMDなど、x86系
CPUの命令は、
可変長の
バイナリデータで表現されています。
例えば、EAXという
レジスタ(CPU内の変数)を操作する
基本的な命令だけでも、
0x40: EAXを1増やす
0x01 0xc8: EAXにECXを足す
0x08 0x78 0x56 0x34 0x12: EAXに0x12345678を代入する
など、命令によって長さはバラバラです。
さらに、あまり使わない命令には
0x3eなどをつけて区別しましょうとか、
最初に0x0fをつけて新しい命令を区別しましょうとか、
そういう「命令を区別するための1バイトのコード」によって、
命令コードはかなり複雑になってしまっています。
この、1バイトのコードはプリフィックスと呼ばれています。
複雑な可変長コードは、たぶん、昔メモリが足りなかった頃に、
なるべくバイナリコードが短くなるように工夫した結果なのでしょう。
当時はそれで良かったのでしょうけど。
最近のCPUだと、プリフィックスが大量についたために
命令の解析がとても大変になっているみたいです。
コンピュータに実行してもらう命令を解析する部分が、
クロックとか消費電力の
ボトルネックになっちゃうわけです。
インテルは64ビットCPUを作る時点で一度、
この複雑なプリフィックス命令を捨てた、
新しいCPUを作る試みをしていたのですけど。
この新しい64ビットCPUは結局、
x86をほとんどそのまま64ビットに拡張した、
AMDの64ビットCPUに負けてしまいました。
今の
Core 2などに搭載された64ビット拡張は、
AMDのCPUと互換の64ビット拡張に対応したものです。
で。
インプレスの記事を見ていて気づいたのですけど。
インテルはもう一度、複雑な命令を捨てる試みをするみたい。
ただ、今度は命令をフル
スクラッチするのではなくて、
新しい命令を区別する1バイトを最初において、
続くコードを綺麗に
設計しなおしたものとするみたい。
たぶん、新しい命令にうまく移行できたときには、
古い命令を
エミュレーションに切り替えるつもりなのでしょう。
今度はうまくいくのかしら。
同じコトができるのなら
無駄が少ないほうがうれしいのですけど。
posted by あやまり+ at 18:55|
Comment(0)
|
TrackBack(0)
|
日記