
前回の続きだが、flops.c という FLOPS を測定するプログラムを用いて 32bit と 64bit を速度差を見てみよう。バイナリとコンパイルオプションは適当に選択して以下の通りである。
環境1(デフォルト) OS : Fedora Core 4, CPU : Opteron 270(2GHz) : メモリ 4GB : gcc 4.0.2
環境2 OS : 多分 SuSE, CPU : Opteron 246(2GHz) : メモリ 4GB : gcc 3.3.3
flops-m32 gcc -O3 -m32 flops.c
flops-m64 gcc -O3 -m64 flops.c
flops-m32-1 gcc -O3 -m32 -march=opteron flops.c
flops-m64-1 gcc -O3 -m64 -march=opteron flops.c
flops-m32-2 gcc -O3 -m32 -march=opteron -msse -msse2 flops.c
flops-m64-2 gcc -O3 -m64 -march=opteron -msse -msse2 flops.c
flops-m32-3 gcc -O3 -m32 -march=opteron -m3dnow flops.c
flops-m64-3 gcc -O3 -m64 -march=opteron -m3dnow flops.c
flops-intel1 icc -O3 -static flops.c
flops-intel2 icc -O3 -static -axW -ipo flops.c
flops-intel2 icc -O3 -static -parallel -axW -ipo flops.c
flops-pgi pgcc -O3 -fast -tp amd64 flops.c
いろいろな測定値が出てくるが、FADD 39回, FSUB 2回, FMUL 50回のループからなるFLOPS値の測定値を見てみよう。結果は画像を見ていただくとしよう。この実験だけだと良くわからないが可能性としては以下のような物が考えられる。
1: 64bit にした方が悪くはならないというはほぼ正しい。ただし Opteron 用に tune して SSE2 などを使用すると 32bit と 64bit の差はなくなる。
2: 64bit で 3dnow の使用は危険なのか?
3: 環境1と2の flops-m32 と flops-m64 を比べると gcc 3.3.3 と gcc 4.0.2 の差は大きいように見える。
4: 環境1の Intel コンパイラは非商用無料版なので(関係あるのか?)、性能が良くない。環境2の Intel コンパイラの性能は良い(-parallel の自動並列も含めて)。