筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2008-09-28 ベンチマーク
■ Pentium 4 3GHz HT vs Athlon 64 3200+ (環境解説篇)
ベンチマークするのも今更な枯れた環境でベンチマークします。
対象の2台の概要は
- Pentium 4 3GHz Prescott HT
- Fedora 9 x86
- gcc 4.3.0
- Kernel 2.6.26
- ext3
- Athlon 64 3200+ 2.0GHz@2.2GHz Winchester
- Debian lenny x86_64
- gcc 4.3.1
- Kernel 2.6.26
- ReiserFS
という感じ。OS が違う時点で色々違うけど気にしない。
Pentium 4 3GHz 機の環境
CPU は Pentium 4 3GHz Prescott HT でメモリは 1GB、OS は Fedora 9。cpuinfo は HT なので同じような情報がもう1個分あるけど省略。
$ /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 15 model : 3 model name : Intel(R) Pentium(R) 4 CPU 3.00GHz stepping : 4 cpu MHz : 3000.666 cache size : 1024 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 5 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe constant_tsc pebs bts pni monitor ds_cpl cid xtpr bogomips : 6004.60 clflush size : 64 power management:
カーネルはこんな感じ。
$ uname -a Linux fedora.vmeta.jp 2.6.26.3-29.fc9.i686 #1 SMP Wed Sep 3 03:42:27 EDT 2008 i686 i686 i386 GNU/Linux
コンパイラはこう。
$ gcc -v Using built-in specs. Target: i386-redhat-linux コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-cpu=generic --build=i386-redhat-linux スレッドモデル: posix gcc version 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)
Athlon 64 3200+ 機の環境
CPU は Athlon64 3200+ の +10% オーバークロック、OS は Debian lenny、メモリは 1GB。
$ lv /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 15 model : 31 model name : AMD Athlon(tm) 64 Processor 3200+ stepping : 0 cpu MHz : 2199.797 cache size : 512 KB fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow up rep_good lahf_lm bogomips : 4404.84 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ts fid vid ttp
64bit 対応なので amd64 で環境を構築している。
$ uname -a Linux fender64 2.6.26-1-amd64 #1 SMP Wed Sep 10 15:31:12 UTC 2008 x86_64 GNU/Linux
コンパイラは Fedora とマイナーバージョンが違うけど気にしない。
$ gcc -v Using built-in specs. Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.1-9' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-cld --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.3.1 (Debian 4.3.1-9)
■ Pentium 4 3GHz HT vs Athlon 64 3200+ (bzip2篇)
bzip2 で gcc-4.3.2 の tarball を圧縮してみる。 bzip2 はそれぞれの環境でソースからコンパイルしたものを使用する。オプションはデフォルトのまま。 ディスクの I/O の影響があるので user の値だけを見る。 最適化オプションありとなしの場合で調査した。
Pen 4 3GHz HT (デフォルト -O2)
マルチスレッドには対応してないので Hyper-Threading の恩恵はほぼなし。
$ time /usr/local/bin/bzip2 -9 gcc-4.3.2.tar real 2m37.268s user 2m36.117s sys 0m0.828s
Pen 4 3GHz HT (-O0)
最適化なしだと当然タイムは落ちる。
$ time /usr/local/bin/bzip2 -9 gcc-4.3.2.tar real 3m57.649s user 3m56.639s sys 0m0.741s
Athlon 64 3200+ +10%OC (-O2)
Pen 4 を大きく上回る結果になった。
$ time /usr/local/bin/bzip2 -9 gcc-4.3.2.tar real 1m56.965s user 1m55.879s sys 0m0.824s
Athlon 64 3200+ +10%OC (-O0)
最適化をしなかった場合の落ち込みは Pen 4 より激しく、結果は逆転した。
$ time /usr/local/bin/bzip2 -9 gcc-4.3.2.tar real 4m36.903s user 4m35.345s sys 0m0.792s
Athlon 64 3200+ +10%OC (32bit -02)
chroot 環境下に構築した 32bit 環境での結果。ただし gcc は gcc-4.1.2。 64bit 環境に比べて 12% ほど遅い。
$ time /usr/local/bin/bzip2 -9 gcc-4.3.2.tar real 2m11.309s user 2m10.112s sys 0m0.872s
Athlon 64 3200+ +10%OC (32bit -O0)
最適化なしだと、64bit 環境の場合と結果は逆転したが、Pen 4 には敵わず。
$ bzip2 -d gcc-4.3.2.tar.bz2; time /usr/local/bin/bzip2 -9 gcc-4.3.2.tar real 4m29.754s user 4m28.333s sys 0m0.832s
■ Pentium 4 3GHz HT vs Athlon 64 3200+ (emacsのビルド篇)
emacs-22.3 のビルドにかかる時間で比較する。ソースツリーは tmpfs 上に展開した。
コンパイルオプションは特に何もつけず揃えたが、ライブラリの有無で機能のオンオフが切り替わっている可能性があるのであまり当てにならない。bogomips よりは正確かも。
今回は、CPU 時間で見てもあまり意味がない。Pen 4 はHyper-Threading により OS からは複数の論理 CPU に見えるため、論理CPU ごとのCPU時間を合計すると実実行時間を越えることがあるから。ソースツリーを tmpfs 上に置いたことで IO のロスが小さくなったため real で比べても問題ない(他のタスクが走ってたら意味ないけど)ので real で比較する。
結果はまたまた Athlon 64 の勝ち。
同時に生成するプロセス数が多いと Pen 4 は Hyper-Threading により実行時間が短縮できるが、Athlon 64 はプロセス切り替えのオーバヘッド分だけ長くなるのが対照的。逆に、同時に生成するプロセス数を1つだけに制限すると Pen 4 は同時に実行可能なタスク数に対して割り当てられるタスク数が不足するので実行時間を短縮できず、Athlon 64 はオーバヘッドが減った分だけ時間が短縮された。
Pen 4 3GHz HT
$ ./configure $ time make -j6 real 2m2.046s user 3m30.388s sys 0m7.021s $ make clean; time make -j1 real 2m18.906s user 2m13.093s sys 0m5.302s
Athlon 64 3200+ 2GHz@2.2GHz
$ ./configure $ time make -j6 real 1m32.491s user 1m27.873s sys 0m4.128s $ make clean; time make -j1 real 1m29.504s user 1m25.241s sys 0m3.768s
■ Pentium 4 3GHz HT vs Athlon 64 3200+ (ffmpeg で H.264 エンコード篇)
本来比較したかったのはこれです。総合的に Athlon 64 が有利とい
前述の通りの環境でそれぞれビルドした ffmpeg を使ってエンコードします。オプションは同じでそれぞれの CPU に対して最適化する。
5分ほどの MPEG2 動画、20分ほどの Type 2 DV ファイルをそれぞれ H.264 の動画に変換。ビデオは H.264 700kpbs、オーディオは AAC 128kbps、コンテナは MP4 で 2pass エンコードという設定。
Pentium 4 3GHz HT
--enable-libfaac --enable-libx264 --enable-gpl --enable-libmp3lame --cpu=prescott --enable-pthreads --prefix=/usr/local/ffmpeg
5分ほどの MPEG2 ファイルをエンコード。
$ time ( /usr/local/ffmpeg/bin/ffmpeg -y \ -i source.vob -deinterlace \ -s 640x480 -b 700k -ac 2 -ar 44100 \ -ab 128k -threads 4 -vcodec libx264 \ -acodec libfaac -f mp4 -qmin 20 -qmax 50 \ -level 13 -pass 1 /tmp/tmp.tmp && \ /usr/local/ffmpeg/bin/ffmpeg -y \ -i /tmp/tmp.tmp -deinterlace \ -s 640x480 -b 700k -ac 2 -ar 44100 \ -ab 128k -threads 4 -vcodec libx264 \ -acodec libfaac -f mp4 -qmin 20 -qmax 50 \ -level 13 -pass 2 output.mp4 )
real 11m19.127s user 19m28.652s sys 0m8.547s
Athlon 64 3200+ 2GHz@2.2GHz
コンパイルオプションはこんな感じ。
--enable-libfaac --enable-libx264 --enable-gpl --enable-libmp3lame --cpu=athlon64 --prefix=/usr/local/ffmpeg --enable-libfaad --enable-pthreads
まずは5分ほどの MPEG2 動画から。エンコードのオプションは Pentium 4 とまったく同じなので省略。
real 10m17.134s user 9m42.060s sys 0m11.317s
同様のオプションで Type 2 DV の動画をエンコードすると。
real 45m33.325s user 44m7.521s sys 0m58.312s
(書きかけ)