Ubuntuも今まで32bitが奨励でしたが、Ubuntu 13.10より64bit版が奨励されるようになりました。 メモリが2GB以下の場合は32bit版を奨励するようです。
実際64bit化の恩恵は少ないと思われます。速度的にはベンチマークを見ても確かに早くはなるのですが、この種の計算が一般に使われるとは思いません。
利点
よく言われる64bit化の利点は、32bitでは最大でも4GBのメモリしか使えない問題が解決できることでしょう。最近はメモリの値段も安くなりましたし、4GBメモリの搭載ぐらいは当たり前になってきたので、64bit化も良いかと思います。 ただしiPhone5Sは1GBメモリのようで、意味はないです。
IntelのCPUの場合には、64bit化によりレジスタの数が増えているので、それも高速化に役立つようです。
その他、大きな整数値が速い利点もありますが、32bitでも 40億近い数値が扱えますので、普通は必要ないでしょう。
欠点
欠点はサイズが大きくなることでしょう。
- 32bit版と64bit版を両方動かすためのシステムのサイズの拡大
- 32bit版と64bit版を両方動かすためのアプリケーションのサイズの拡大
- アプリケーション自身のサイズの拡大
アプリケーションも64bit専用のものは、32bit版では動作しないため、アプリケーションは64bit用と32bit用の2つを用意する必要があります。普通の人は64bit版や32bit版などの区別を考えたくないので、それは避けたいです。Appleではユニーバーサルバイナリと言うものがあるので、それを使うことになるかもしれません。しかし、単に2つの実行ファイルを合わせて1つに見せかけるだけなので、ファットバイナリ(サイズの大きいバイナリ)と言われています。
そして64bit用のアプリケーション自身も持つデータも一部が2倍になります。そこそこ良く使われるアドレスのデータが64bitになるのは影響が大きそうです。
たぶんAppleは今までも互換性を重要視していないので1,2の欠点克服のために32bit版はいつか捨てることにするのでしょう。きっと今回の64bit化は将来に32bitを捨てるために早めの準備をし始めただけで、しばらくは利点より欠点の方が多いと思われます。
X32 ABIの話
Linuxでは欠点の3の対策として「64bit化でのレジスタ増加による高速化は利用して、アドレスは32bit」というX32 ABIと言うものが使えるようになっています。アドレスが64bitになることで4GB以上のメモリの使用ができるのですが、そこまでメモリを使うアプリケーションは少ないと考えられるためです。しかし欠点の1に関してはさらにサイズが増えることになります。
Fedora19ではX32 ABI用を使うためのパッケージも無いようですし、カーネル
もconfigを見るとCONFIG_X86_X32=yとなっていませんでした。FedoraでX32 APIを使うにはカーネルのビルドから行う必要があり少し面倒そうです。
Ubuntuでは、X32 ABIを使用できるようになっているようです。以下のように32bit版のビルド環境をインストールすれば、X32 APIのコンパイルも出来るようになります。
$ apt-get install lib6-dev-i386
コンパイルは-mx32オプションを使用します。
$ gcc -mx32 test.c
なお、通常の64bitや、32bitのアプリケーションと作るときのオプションは-m64, -m32です。
-mx32でコンパイルした実行ファイルをlddで確認すると、/lib32x/libc.so.6が使われています。またobjdump -f で確認するとfile formatがelf32-x86-64となっているなど、32bitと64bitが混合されているような表示となっています。
追記:後藤弘茂氏によるとARM32bit命令は変態命令セットのため、「アドレス空間のメリットは3番目」とのことですが、x86のレジスタ数はARM32bitより更に少ないですし、セキュリティも指紋センサーのみにしか使えないなら、やはり64bitの利点ではないような気がする・・・
0 件のコメント:
コメントを投稿