2013年10月27日日曜日

64bit化の利点と欠点

最近Appleの製品が64bit化したことで、64bit化についての話が盛り上がっているようです。しかし、Windowsの64bit化の際には、あまり意味がないと冷静な意見が多かったのに対して、Appleの場合は理由もなく絶賛されている気がするのですが、気のせいでしょうか?

Ubuntuも今まで32bitが奨励でしたが、Ubuntu 13.10より64bit版が奨励されるようになりました。 メモリが2GB以下の場合は32bit版を奨励するようです。

実際64bit化の恩恵は少ないと思われます。速度的にはベンチマークを見ても確かに早くはなるのですが、この種の計算が一般に使われるとは思いません。

利点

よく言われる64bit化の利点は、32bitでは最大でも4GBのメモリしか使えない問題が解決できることでしょう。最近はメモリの値段も安くなりましたし、4GBメモリの搭載ぐらいは当たり前になってきたので、64bit化も良いかと思います。 ただしiPhone5Sは1GBメモリのようで、意味はないです。

IntelのCPUの場合には、64bit化によりレジスタの数が増えているので、それも高速化に役立つようです。

その他、大きな整数値が速い利点もありますが、32bitでも 40億近い数値が扱えますので、普通は必要ないでしょう。

欠点

欠点はサイズが大きくなることでしょう。

  1. 32bit版と64bit版を両方動かすためのシステムのサイズの拡大
  2. 32bit版と64bit版を両方動かすためのアプリケーションのサイズの拡大
  3. アプリケーション自身のサイズの拡大
通常64bit版はシステム側に32bit版のアプリケーションを動作をさせるための仕組みが入っています。Fedoraでは /lib64 の他に、/libが32bit用のフォルダがありますし、Windowsも C:¥Windows¥System32の他にC:¥Windows¥SysWOW64という32bit用の動作のためのフォルダが出来ます。

アプリケーションも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 件のコメント:

コメントを投稿