見せてもらおうか、Windows 7 の 64bit の性能とやらを。。。
Windows Vista から ほとんどのエディションに 64bit版 がありましたが、ドライバやアプリケーションなどの対応がまだまだ不十分だったこともあってそれほど普及していたとは言えませんでした(辛口で言えば、 Windows Vista自体が(ry。。。 )。しかし、あれから3年近く経過しドライバーやアプリケーションの対応も進みました。またメモリが大容量・低価格化したこともあって、4GB以上を搭載するコンピューターも増えてきたのも 64bit 環境の普及には大きな後押しになるでしょう。そんな時期に登場した Windows 7 。Windows 7 へのアップグレードを契機に 64bit 環境 が普及するのではないかと言われています。
64bit というと、多くの解説サイトで 4GB 以上のメモリを搭載できるという利点を挙げています。これは、32bit アプリケーションにも恩恵があります。例えば、6GBのメモリを積んだコンピューターでメモリを沢山使う32bit アプリケーションを2つ同時に実行した場合、OSが 32bit では両方合わせて4GB以下ですが、OSが 64bit ならば各アプリケーションにつき4GB使うことができます(厳密にはOSが占有する分や制限などで数値が若干違う)。
さて、Microsoft の『Windows 7 の機能 - 64 ビット サポート』を覗いてみると、『大量の情報が処理できます。』という一文があります。64bit の OS を使うには 64bit 対応のCPUが必要になりますが、逆に言えば 64bit 版の OS ならば CPU の 64bit の機能を使うことができるということでもあります。つまり、同じ処理をしても性能が上がる?ということが考えられます。
と、いうことでちょっとしたベンチプログラムを作ってみました。まぁ、ベンチプログラムと言っても、単純に 整数演算と浮動小数点演算を複数回行って、かかる時間を測定するプログラムです。同じ内容のプログラムを 64bit アプリケーションと32bit アプリケーションで作成して、64bit 版の Windows 7 上で実行して比較してみました。
同じ計算する場合でも、 64bit のアプリケーションの演算は 64bit で実行されますが、32bitのアプリケーションの演算は 32bit で実行されるので 64bit の性能を見ることができます。ただし、32bit アプリケーションはWow上で実行されるのでネイティブで実行するよりも若干パフォーマンスが低下していると思うので厳密な比較ではないかもしれません。
1.ベンチマークテスト(1)
行ったテストは、『64bit 整数』、『32bit 整数』、『64bit 浮動小数点』の『和差算(足し算、引き算)』+『積除算(かけ算、割り算)』です。3回実行して平均を表にまとめました。なお、一般的なプログラムでは 32bit プログラムでも浮動小数点演算は 64bit が基本で 32bit はあまり利用されないのでここでは割愛しました。
演算 | 32bit アプリケーション | 64bit アプリケーション | |
64bit 整数 | 和差+積除 | 760ms | 184ms |
32bit 整数 | 和差+積除 | 61ms | 65ms |
64bit 浮動小数点 | 和差+積除 | 122ms | 130ms |
この結果から、『32bitの整数演算』と『64bitの浮動小数点演算』に関してはほとんど性能が変わらないということが分かります。若干 64bit アプリケーションの方がパフォーマンスが低いですが細かいことは気にしないでいきましょう、きっと誤差ですw 64bit の整数演算で4倍以上の性能向上が見られます。つまり、64bit のアプリケーションは 『64bit 整数演算』で性能が向上することがわかりました。
2.ベンチマークテスト(2)
では、64bit 整数演算の和差算と積除算のどこで性能が向上しているのか調べてみました。
32bitアプリケーション | 64bitアプリケーション | ||
64bit 整数 | 和差算 | 47ms | 44ms |
64bit 整数 | 積除算 | 735ms | 169ms |
この結果から、『64bitの整数演算』の『積除算』で性能が向上していたことがわかります。和差算の方は誤差と言えると思います。
3.ベンチマークテスト(3)
実は Core 2 Duo は 64bit に対応はしているものの、32bit に比べてパフォーマンスが低いと言われています。というのも、Core 2 Duo の 64bit 演算器の実装はかなり突貫工事だったようで、Core 2 Duo で搭載されているいくつかの性能向上のための技術が 64bit では利用できないのです。Core i7 ではその部分が改善されて 64bit でも 32bit と同様の高いパフォーマンスが得られるようになっているそうです。
上記のベンチマークは Core i7 で実行しましたが、Core 2 Duo でも試してみました。内容は上記のテストで効果があった『64bitの整数の積除算』です。ただし、クロックやメモリなど環境が全く異なるので上の数値との比較はできません。
32bitアプリケーション | 64bitアプリケーション | ||
64bit 整数 | 積除算 | 577ms | 183ms |
上記の環境とは比較できないので、32bitの速度が向上したと見ることはできません。しかし、 32bit アプリケーションに対する 64bit アプリケーションの速度向上が 3倍程度と Core i7 に比べて低いことがわかります。それでも、 64bit アプリケーションの方が 3倍も速いということは特筆すべきところです。 『3倍』という数字には特別な意味を感じる方もいるでしょうw
結論としては、 64bit版の Windows 7 では 64bit ネイティブのアプリケーションで 64bit 整数演算が32bit版に比べて 3倍 ~ 4倍 性能向上することがわかりました。もっとも、プログラミングをしたことがある方はわかるかもしれませんが、通常のプログラミングでは 64bit の整数型などは使うことは希なので、意図的に64bit に最適化する必要はあるかもしれません。