CPU の数値計算性能について (2003 年)


はじめに

研究で数値計算を活用することがある.その場合に計算時間をいかに縮小 できるかが重要になる.自分が行うような計算においての CPU の性能を調べ ることがあるので,それについて以下にいくつか気づいた点を書く. 結局のところ自分の数値計算がどの程度速く走るかが一番の問題である ので自分のコードでの性能をいろいろ比較してみた. Pentium, Athlon, Alpha 等の CPU を比較すると,pipeline, cache, FSB, latency 等の用語が飛び交いがちだが,結局のところ机上の議論ではわからず, やってみなければわからない.

性能比較の環境について


multitasking の下での性能比較

まずいくつか同じ job を同時進行で走らせた場合 の性能を測定し以下に図示した. (それぞれ ps バージョンにリンクしてある.) 一つ一つの job は自由度 200 程度の production code の典型的 MD 計算である.
CPU time/job
図 1: 1〜32 job 同時に同じ計算を走らせた場合の 1 job あたりの cpu 時間. 若干ばらつきがあるが基本的に P4 で 1 job だけの場合以外は CPU ごとに同じである.

Total elapsed time
図 2: 1〜32 job 同時に同じ計算を走らせた場合の計算全体に要した実時間. 1 job しか走らせない場合を除いて job 数に比例している.

結果から以下のことが読み取れる:

つまり,GNU/Linux 上の multi-tasking によるオーバーヘッドは認められないと言える. (1 job の場合については以下で言及) 全ての job の優先度を同じに設定したが,当然,優先度を変えれば cpu 占有率がそれに応じて変わる. この結果についても multi-tasking のオーバーヘッド無しで期待される通り である.

1 job の場合は特殊なので説明する: AMD, Athlon MP の dual では当然2 CPU なので 1 job (single threaded) では CPU が一つ遊んでしまうので 2 job の場合と実時間は同じである.P4-HTT (Pentium 4, Hyper Threading Technology) も見掛け上は dual CPU であるが実際には 1 CPU しかない見掛 け上の dual である.よって 1 job にしたときは 50% に性能は落ちず,70% 程度になる.HTT は得したように見えるかも知れないが,実際には 1CPU とし て 100% まで使えればさらに良いと言える.


性能の負荷のかけ方への依存性

私の行っている MD 計算は使う実メモリがせいぜい 10MB 程度の非常に CPU intensive な負荷である. MD 計算では自由度の数が問題により変わり,それによりメモリへの 負荷も変わり,性能も若干影響される. どの程度の影響か自由度の数を 10〜30,000 程度まで変えて調べてみた. それぞれの workstation の性能をフルに発揮するために全ての場合 2 jobs 同時に走らせた.

cpu time vs. #dof
図 3: CPU time の自由度の数への依存性. 比例している場合の直線を参考のために含めた. ほぼ cputime/job は自由度数に比例していることが見える.

#dof dependence of cpu peformance
図 4: P4-3.2GHz を基準 (=1) としたときの物理的 1 CPU あたりの性能. 性能は 1/(CPU 時間) とした. 性能が自由度の数に依存することがわかる.

考察:


GNU/Linux Workstation の機種による性能比較

上の結果を CPU の種類, architecture ごとにまとめてみた. P4-3.2GHz HT で複数 job 走らせた場合を基準値 1 とした. 以下にいくつかの CPU の性能を比較してみた.数値計算の性能に興味がある また,CPU 性能を測定する上で定番のベンチの SPECCPU2000 の結果を含める.(CFP, CINT ともに base 値を採用)

表 1: CPU 1 個あたりの性能
CPU type chipset MD での性能 CFP2000 CINT2000 Model number 比
P4 3.2GHz (HTT on) Intel 875P, 865PE 1 (基準値) 1270 1220 1 (基準値)
Athlon MP 2200+ AMD760MPX0.62 592 699 0.68
Athlon XP 2500+ VIA KT400 0.66 0.78
Athlon 64 3200+ VIA K8T800 0.81 1100 1270 1
Alpha 21264 833MHz 0.72 583 483

雑感

Pentium 4 Hyper Threading Technology (HTT) の性能

Pentium 4 では GNU/Linux kernel 2.6.0smp を用いた. HTT off では single CPU と認識されるが, HTT on では dual CPU として認識される. HTT on/off は BIOS で設定するため変更には reboot が必要となる.

HTT の効果を検証してみた.(P4-3.2GHz HT で複数 job 走らせた場合を基準値 1 とした.)

表 3: P4 3.2GHz における全体の性能
HTT type 性能
HTT on, 複数 jobs 1 (基準値)
HTT on, 1 job 0.7
HTT off, 1 job 0.8
HTT の効果が以下のように読み取れる:

HTT は万能ではない.私は通常複数個 job を入れることが多いので HTT on で使っているが, CPU あたり single-threaded job 1つしか走らせない場合は HTT off の方がむしろ速い.(single threaded=HTT 不対応なアプリケーション 常時一つしか走らせない状況も一般には考えられる.例えばゲームをするなど.)

Athlon64 について

Athlon 64 が出回り出して少したったので買ってみた.スペックは MSI K8T NEO-FSR (K8T800) に Athlon64 3200+ である. Linux では 64bit native な OS があり,さらに 32bit のコードも走る AMD64 には魅力があるのである.上表にある P4-3.2GHz 両方フルに稼働すると数値計算では 8 割程度の性能である. しかし,これはともに 2 つ job が走っている状況での話であり, single thread, 1 job なら HTT on の P4-3.2 より Athlon 64 の方が一割程度速い.(と言っても single thread なら P4 も HTT off にす れば良くそうすれば同程度).P4 では HTT が効いているとも言える. おおむね CFP2000 の数値どおりである.

K8T800+Athlon 64 に Linux install はここ近年稀に苦労した:

  1. TurboLinux 8 for AMD64: TL8 は Athlon 64, K8T800 に作られていたので 事前に Turbo Linux web 上の情報で 製品情報, FAQ 等で問題はなさそうなことを確認. さらに Turbo linux に電話で問い合わせたところ Athlon64, K8T800 で問題なし,との回答をもらって購入.

    CD boot して install. Partition 切ったりしながら install 全てで (120GB+160GB HDD format 含め) 一時間程度. いたって順調だと思ったところ,install 後 kernel panic で立ち上がらない. 調べたところ TL8 用 updatekit が存在することを発見して install しなおしたところあっさり動いた. しかし,network に負荷をかけると hang up してしまう. 非常に不安定で使い物にならない.

    個人的には以下の点が問題であると思う.

    正直言って,AMD64 用の Linux やる気あるの? という疑問を禁じ得ない. 事実 ia32 用には 2003 年夏に TL10D を出しているが, AMD64 用にはいまだに TL10 をリリースしてない. ia32 用に関してはすでに updatekit も出してやる気が感じられることは付け加えておく.
  2. Mandrake 9.2 for AMD64: 初めは install できそうだが,partition 切るところで何度やっても format 失敗.ext2, ext3 のどちらでも. これは workaround があるのかもしれないが,この程度のことで 詰まっているようでは先が思いやられるので避ける.
  3. Redhat 9.2 for AMD64 (taroon β): CD が 4 枚というのは煩わしいだがあっさり入って安定している.

やはり Pentium 4 に比べて 64bit Linux 運用に苦労が多すぎる. その割に性能はたいして高くない. 研究では自分の時間が一番大切なので今の段階では AMD64 機を メインに使うには私には時期尚早である. これは AMD のせいではなくシェアの少ないことに起因するのだが, 使う側としてはそうは言ってられない.

個人的には AMD を応援したい気持もあり,実際 P4-3.2 を買うまでの 数台は AMD 機で P4 機は P4-3.2 機だけである. AMD64 CPU は P4-3.2 に比べて大分安い. これには AMD の苦労がひしひしと感じられる. しかし,workstation は CPU だけではないので結局全体では 値段は同じようなものになってしまう. AMD 64 の native compiler が出てくると数値計算の能力は大きく 変わるのではないだろうか? 例えば alpha は純正 compiler は非常に高性能である. 現状では Intel(!) の ia32 用の compiler を AMD64 用に使っている. AMD 社がベンチ結果を出すときもそうなのである. それでも gcc よりは2倍程度速い. 数値計算は AMD64 でしょ!という時期が来ることを期待している.
(2004 年 2 月)


結論

  1. 1,2 割程度以内でモデルナンバー通りの性能を発揮している. 性能は用途により異なるのでこの程度の誤差はやむをえない.
  2. 単純な数値計算には Pentium 4 は比較的強いようである.
  3. Pentium 4 が強いのはあくまでもフルに性能を引き出したとき (HTT on, multithread) である. single thread 1 job であれば Athlon 64 の方が速い, と言っても Pentium 4 の HTT off と同じ程度.
  4. AMD64 用 Linux distribution は ia32 に比べて未熟である. 早速状況が改善されることを望みたい.
  5. AMD64 を native compiler での性能を見てみたい.

当然ながら,性能比較は私にとって実用上重要な性能についてのものであり, 一般的なユーザーにとっての性能とは傾向が違う場合が十分考えられる. さらに,数値計算をする場合でも負荷のかけ方がまったく異なる場合も考えられ, (例えばメモリ律速になる場合等) その場合はまた性能が少し変わる可能性がある. 机上の議論はいろいろできるが,これについてもやってみなければわからない.

(2004 年 2 月)


Home page for Kenichiro AOKI
Last modified: Mon Apr 5 14:15:55 JST 2004