■64ビットOSは速いのか?(2012/02/14) | ||||||||||||||||||||
世の中はバレンタインデーだそうだが、そんなことは置いておいて。 Windows7の普及とともに、64ビット版のWindows7を搭載したPCが各メーカから売り出されるようになっている。 しかし、世の中のソフトにはネイティブな64ビットでビルドされた64ビット専用のソフトなど殆どなく、64ビット対応とか言って実際は32ビットモードで動作するような訳のわからないことになっている。 Windows7も、64ビット版ではWOW64と言う技術を使い、64ビット版OSの上で32ビット版をエミュレートして動作させる機能があり、旧来の32ビットアプリケーションの動作を妨げないような工夫が凝らされている。 更にそれでも不具合が出るアプリのためにXPモードなる仮想マシンも用意されており、MicrosoftのHPから無償でダウンロード/使用できるようになっている。(使用可能なホストOSはWindows7 Professional、Ultimate、Enterpriseで、Home版では使用できない) そこで、Windows7の64ビット版(=x64)が32ビット版が主流だったWindowsXPに対して、パフォーマンス的にメリットがあるのか無いのか、比較してみた。 テスト用に準備したプログラムは、32000個のランダムな整数データをバブルソートで整列させるという単純なもの。 順次演算なのでシングルスレッドで動作させるプログラム、クイックソートのように再帰の可能なアルゴリズムで、再帰する度に新たなスレッドを起こせば、マルチコアのCPUではかなりなパフォーマンスも望めるかも知れないが、今回はCPUの性能を測る訳ではないのでバブルソートが合っているのではないかと思う。 データは、32ビット整数、64ビット整数の2種類を準備し、プログラムも内部で32ビット整数の変数を扱うものと、64ビット整数の変数を扱うものの2種を用意した。 結果は、以下のデータが示すように32ビットデータを扱うのなら32ビットOSのWindowsXPが64ビットOSのWindows7よりも20%程度速いという結果となった。
これは、64ビットのデータを32ビットOSでは2個に分割して処理しているという点がパフォーマンスの低下に繋がるのだと思われる。 64ビットOSで32ビットデータの処理が遅くなるのは、32ビットのデータでも8バイト(64ビット)を使用する無駄遣いのオーバヘッドではないかと推測できる。 では、64ビットOS上で動かす32ビットアプリと64ビットアプリではどんな差が出るのか、試してみた。
こちらでも、最も速いのはx86の32ビットデータとなっている、32ビットアプリに64ビットデータを扱わせるのはやはり苦しいらしく、60%も余計に時間が掛かる結果となった。 総合すると、64ビットOSで64ビットデータを扱うアプリケーションなら、32ビット版より64ビット版の方が60%程度の処理速度の向上が見込めるが、32ビットデータを扱うアプリケーションなら32ビット版のアプリの方が若干速いと言うことらしい。 32ビットデータ 符号付き整数では約±21億4748万、符号なしでは約42億9496万を表すことができる、個人資産はビル・ゲイツでもない限り扱えるが、市や県の年間予算は扱えそうにない。 64ビットデータ 符号付き整数では約±922京(兆の1万倍)、符号なしでは1845京を表すことができるので超大国の国家予算でも扱える、天体では97.4万光年まではキロ換算できる。(1光年は約9兆4600万キロ)
|