64bit CPU について 思うこと | Museo Kircheriano

64bit CPU について 思うこと

64bit の Windows がリリースされてから、色々な情報を見るわけですが、
あまりにも嘘が多い!
というより、多すぎる!!


ちょっとばかり、憤りを感じたので、これを書いてみる。

・x64 は itanium 用
itanium のアーキテクチャ は IA-64


・IA-64 は、64bit 演算ができるから高速
これは、全く違う話
IA-64 は、それまでの intel のCPUとアーキテクチャが根本から違うので、
単純な比較はしにくい。
intel の普通のプロセッサーは、スカラータイプですが、
IA-64 は、 VLIW というもので、並列演算機が非常に多い代わりに
制御を特に行なわないもので コンパイラの段階で並列度を
最大限に上げる最適化を行なうことで、性能を得るというものです。
64bit の演算が出来るから速いわけではありません。
並列度の高さとそれを十分に生かしきれるコンパイラが有ってこその高速です。
ついでに言うなら、実行制御系の回路が単純なので、クロックを上げやすい。


※実際下手な16bit CPUより速い8bit CPUというのもありました。


=> 高速化を意識したハードウェアとコンパイラがあるから高速化を行なえる。


・x64 は 64bit 演算が出来るから高速/64bit CPUは32bit と大して性能は変わらない。
これも、全く違う話
x64 は、intel の x86 アーキテクチャの 64bit 拡張ですが、
純粋に64bit 演算で速くなるのは、32bit 以上の桁で行なう演算であり、
そんなものは一般的な処理では多くありません。
x64 が高速に実行できる理由は、64bit モードにすると、使える
汎用レジスタが大幅に増えるから。
アセンブラを組んだことがある人間ならわかりますが、
レジスタが少ない場合は、スタックといって、CPU内のレジスタをメモリに
書き込む動作が起きやすく、CPUからメモリに書き込む動作は、
レジスタに比べてかなり遅いので、ここで遅延が発生します。
レジスタが多い別の利点として、コンパイラの最適化では有効に働くので、
高速になりやすくなります。(RISCのCPUに近くなります)

※MMX みたいな飽和演算を同時に実行と言うことであれば、64bit レジスタが
より多く同時に実行できるから速くはなりますが、これも一般的ではありません。
これなら、最初からMMXを使うでしょうから。


=> レジスタが多いから 最適化が効果的に働き、コンパイラ等で高速化しやすい


・x64 は、32bit 命令はエミュレーションで実行されるので遅い
これは、IA-64 の状況と勘違いされている
IA-64 は、一応 x86 の実行ユニットがあるけど、これもエミュレーション
ではありません。
x64 に関しては、 64bit モードでも、 32bit 命令はネイティブに実行できます。
使えないのは、仮想86モードに関するような特殊な命令くらいなので、
ほとんどのアプリケーションはネイティブで動くはずです。
(IA64では、エミュレーションの方が内蔵のx86ユニットより速いという話はある)


※16bit の命令が使えないので、それが必要ならエミュレーションしか
ないとは思いますが、今更、使わんでしょ。


=> エミュレーションは行なう必要は基本的にない。


・x64 は64bit のアドレス空間が使えるからメモリーがたくさん使える
64bit のCPUだから 64bit のアドレスを使えるというものではありません。
かつての 8bit CPUは、ほとんどが16bit アドレスをつけていましたし、
32bit でも 16M バイトしか使えないCPUもありました、
8bit CPUは、ほとんどが 64kbyte のメモリが使えました。
これは外に引き出している、アドレス線の数というだけです。
x64 については現状は、48bit までに制限されてます。
ちなみに 386 は、36bit のアドレスが使えるので、64Gバイト までの
メモリが使えます、一応。


※386 等での 4Gバイト以上は、セグメント管理になるので、使いたいと
思う人は少ないとは思いますが

※この話が出てきた背景は、intel のCPUは、歴史的に データバスとアドレスバスを
時分割で共用するアーキテクチャだったことがあるからなんだろうな。
おかげで周辺チップが必ず必要という嫌なアーキテクチャでもあるんだけど。
i386 では、 アドレスバスも32bit になったしな。SXは除くけど。


=> メモリーが沢山使えるのは、アドレスバスが多いから。
この場合の大量メモリとは、フラットな空間でのメモリのこと。


・x64 は互換性が低い
ほとんどの32bit 命令が実行できるので、互換性が低いとはいえないでしょう。
載っているOSの問題という可能性はありますが、それでも普通のアプリなら
動く範疇です。
例外は、ハードウェア寄りのデバイスドライバーのようなライブラリ、これは
64bit でないと動かない可能性はある。

※IA-64 は全く違うアーキテクチャなので、互換性はほとんどない。

=> アプリケーションレベルなら互換性は高い


・Windows XP x64 は、IA64 用
IA64 用 Windows XPは、外販されていませんし、一般人が入手できるものではありません。
Itanium の 載っている ワークステーションにバンドルされているものがあっただけです。
ちなみにIA64 用 Windows XP は既に販売終了となっています。
Vista / 7 の後継もありません。
名称は Windows XP 64 bit edition
x64 は、AMD64 及び EM64T を 指す呼称で、対応CPU は、 AMD Athlon64 等、
intel Pentium D、Core2Duo 等になります。
こちらは、バンドル版を一般的に購入できます。


=> 完全な嘘


----

まぁ、いつものことですが、32bit CPU とか 16bit CPU とかの定義はよくわからん。
古いやつですが、

・内部的には、完璧にレジスタを含めて 32bit 、外部のデータバスは、16it

モトローラ 68000

定義:16bit CPU

・内部的には、完璧にレジスタを含めて 32bit、外部のデータバスは、16it

インテル i386SX

定義:32bit CPU

・内部的には、完璧にレジスタを含めて 32bit、外部のデータバスは、64bit

インテル 初代 Pentium 等

定義:32bit CPU

やっぱり、商業的な事情ですかねぇ。
64bit OS 絡みで これだけ、情報が混乱するんだから、しかたないんでしょうかね。

これに振り回されるユーザがアホなだけと誰かに言われそうな気もする。