* CNSでベンチマークテストをしてみる [#de5850df]
 今回Core i7を導入してみたのでこれを機にCNSでベンチマークテストをしてみました。環境によってはオーバークロックで遊んでいますが、電圧を盛ったりはしないようにしています(冷却を頑張ってないので・・・)。特に注釈がない限り、常用可能なオーバークロックのセットアップにしています。~
 CNSは基本的にIntel CompilerでOpenMPを有効にしてコンパイルしました。テストした時期によってコンパイラやカーネルのバージョンが異なります。
 
 ** CNS 1.21 OpenMP [#l8f07e5c]
 やはり際だった速さのCorei7マシンと、値段通りのAtomマシンとくっきり分かれました。
 
 |プロセッサ         |型番 |クロック数 |スレッド数|時間        |メモリ  |M/B              |OS      |カーネル|コンパイラ|Arch   |h
 |                   |CENTER:|CENTER:  |CENTER:   |RIGHT:      |CENTER: |                 |CENTER: |CENTER: |CENTER:   |CENTER:|c
 |~Xeon              |X5680|3.33GHz    |12        |'' 1分20秒''|96GB    |Dell Z800        |SL 5.4  |2.6.18  |13.0.1    |x86_64 |
 |~Xeon              |E5-2670|2.60GHz  |16        |'' 1分21秒''|128GB   |HP               |Cent 6.5|2.6.32  |13.0.1    |x86_64 |
 |~Xeon              |X5570|2.93GHz    |8         |'' 1分39秒''|        |                 |RHEL 5  |2.6.18  |11.1.067  |x86_64 |
 |~Opteron           |6282SE|2.6GHz    |16(*)     |'' 1分57秒''|128GB   |Dell R815        |RHEL 6.4|2.6.32  |13.0.1    |x86_64 |
 |~Opteron           |6282SE|2.6GHz    |8(*)      |'' 2分00秒''|128GB   |Dell R815        |RHEL 6.4|2.6.32  |13.0.1    |x86_64 |
 |~Core i7           |940  |2.93GHz    |8 (HT)    |'' 2分02秒''|DDR3 3GB|Intel DX58SO     |Vine 4.2|2.6.16  |11.0.074  |i386   |
 |~Core2 Quad        |Q9650|3.48GHz(OC)|4         |'' 2分04秒''|DDR2 2GB|ASUS P5KPL-AM EPU|Vine 5.1|2.6.27  |11.1.072  |i386   |
 |~Xeon(KVM)         |E5-2609|2.40GHz  |4         |'' 2分12秒''|24GB    |Dell DL160 Gen8  |Cent 6.5|2.6.32  |13.1.117  |x86_64 |
 |~Core2 Quad        |Q9650|3.00GHz    |4         |'' 2分15秒''|DDR2 4GB|Shuttle SG31G2   |Vine 5.1|2.6.27  |12.0.084  |i386   |
 |~Core2 Quad        |Q9650|3.00GHz    |4         |'' 2分21秒''|DDR2 4GB|Shuttle SG31G2   |Vine 5.0|2.6.27  |11.1.046  |i386   |
 |~Core2 Quad        |Q6600|3.30GHz(OC)|4         |'' 2分32秒''|DDR2 2GB|MSI MS-7360      |Cent 5.5|2.6.18  |11.1.072  |i386   |
 |~Core2 Quad        |Q6600|3.00GHz(OC)|4         |'' 2分36秒''|DDR2 4GB|AOpen EZ965      |Vine 4.2|2.6.16  |11.0.074  |i386   |
 |~Opteron           |6282SE|2.6GHz    |32        |'' 2分42秒''|128GB   |Dell R815        |RHEL 6.4|2.6.32  |13.0.1    |x86_64 |
 |~Core2 Quad        |Q6600|2.70GHz(OC)|4         |'' 2分54秒''|DDR2 4GB|AOpen EZ965      |Vine 4.2|2.6.16  |11.0.074  |i386   |
 |~Core2 Quad        |Q6600|2.40GHz    |4         |'' 3分16秒''|DDR2 2GB|MSI MS-7360      |Fedora 9|2.6.25  |11.0.074  |i386   |
 |~Core2 Quad (VBox) |Q9650|3.00GHz    |2         |'' 3分57秒''|512MB   |VBox 4.1.2(Linux)|Vine 5.2|2.6.27  |11.1.072  |i386   |
 |~Xeon(QEMU)        |X5675|3.07GHz    |1         |'' 4分28秒''|2GB     |さくらのクラウド |Vine 5.2|2.6.27  |11.1.072  |i386   |
 |~Core2 Duo(QEMU)   |T7700|2.40GHz    |2         |'' 4分43秒''|512MB   |さくらのVPS 512  |Vine 5.2|2.6.27  |11.1.072  |i386   |
 |~Core2 Duo         |E6400|2.13GHz    |2         |'' 5分06秒''|DDR2 4GB|DELL OptiPlex 745|Vine 4.2|2.6.16  |11.0.074  |i386   |
 |~Core2 Duo (VBox)  |E8400|3.00GHz    |1         |'' 5分18秒''|512MB   |VBox 3.0.12(Win) |Vine 5.1|2.6.27  |11.1.046  |x86_64 |
 |~Core2 Quad (VBox) |Q9650|3.00GHz    |4         |'' 5分45秒''|1GB     |VBox 4.1.2(Linux)|Vine 5.2|2.6.27  |11.1.072  |i386   |
 |~Pentium Dual-Core |E2160|1.80GHz    |2         |'' 6分08秒''|DDR2 4GB|AOpen EZ965      |Vine 4.2|2.6.16  |11.0.074  |i386   |
 |~Pentium4(Prescott)|     |3.00GHz    |2 (HT)    |''11分24秒''|DDR 1GB |EPSON AT951      |Vine 5.1|2.6.27  |11.1.072  |i386   |
 |~Atom              |330  |1.60GHz    |4 (HT)    |''16分18秒''|DDR2 1GB|Shuttle X27D     |Vine 4.2|2.6.16  |11.0.074  |i386   |
 |~AMD Geode         |LX800|500MHz     |1        |''210分58秒''|DRAM 256MB|ALIX.2D2       |Vine 4.2|2.6.26  |GCC 3.3.6 |i386   |
 |~Marvell Kirkwood  |88F6281|1.20GHz  |1        |''630分25秒''|DRAM 512MB|SheevaPlug  |Ubuntu 9.04|2.6.31.8|GCC 4.2.1 |arm    |
 - (*)環境変数OMP_NUM_THREADSで制限。
 
 これらの結果は私の環境で行った結果なので、あくまで参考値ということで(スレッド数のHTはハイパースレッディング、VBoxはVirtualBox)。
 ~''2013-08-23'' -- Opteronサーバを触る機会がありましたので、実機でベンチマーク。BIOS設定をHPC Enabledにして実行しています。Intel Compilerとx86-Open64で比較しましたが、CNSに関してはIntel Compilerの方が圧倒的に速かったのでOpen64の結果は割愛します。スレッド数が8を超えてもパフォーマンス上昇は見られず、32コアはむしろ遅いという結果になりました。カーネルは2.6.32-358.114.1.openstack。
 ~''2013-08-22'' -- Xeon 12コアPCのセットアップを行う機会がありましたので久しぶりに試してみました。8スレッドを超えてくるとスレッド増による伸びしろが減ってきている気がします。X5570とX5680を比較するとクロック数の差プラスアルファぐらいの差しかありません。[[アムダールの法則>http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A0%E3%83%80%E3%83%BC%E3%83%AB%E3%81%AE%E6%B3%95%E5%89%87]]による限界が近いのかもしれません。カーネルは2.6.18-164。
 ~''2010-09-06'' -- 新たにマザーボードが手に入ったのでQ9650でオーバークロックを試してみました。400MHzオーバークロック動作(3.6GHz)では計算途中で止まってしまったので、386MHz動作(3.48GHz)で計算が完了しました。定格である3.0GHzに対して15%オーバークロックで、計算時間は12%ほど短縮されましたのでだいたいクロック数通りでした。それでようやくi7と同程度という結果でした。メモリクロックを667MHzにすれば動作800MHz以下になりメモリへの負担は軽減されますが、その際は4秒(3%)ほど計算時間が長くなりました。とりあえずはメモリクロック800MHzで927MHzの動作で常用してみようと思います(メモリが死ぬかも・・・)。
 ~''2010-06-09'' -- クラスタPCを使う機会がありましたので試してみました。1ノードのコアが最大が8だったのでスレッド数も最大8でした。さすがにHTより速くなりますね。
 ~なお、Core2 Quadの2.7GHzはベースクロックを266MHz->300MHzに、3.0GHzは333MHzにオーバークロック動作したものです。頑張ればもっとオーバークロックできるという記事もあるのですが、私の環境ではこの辺りが限界みたいでした(366MHzの3.3GHz動作でLinuxは起動しましたが動作が不安定だったので確認できませんでした)。クロック数がそのまま実行時間に反映されていますが、2.7GHzに比べて3GHzは意外と伸びが悪いようです。また、同一クロックでもQ6600やQ9650よりもCore i7の方が速いという結果が出ました。
 ~完全にお遊びですが、組込用であるx86互換のGeodeLXとARM互換のSheevaPlugでも処理を流してみました。GeodeはPCEngines社のALIXボードを使い、ビルドはg77installであっさりOK(まあx86互換なので)。SheevaPlugでのビルドはMakefileを多少書き換える程度(マシンの種類の認識をLinuxにした)で可能でした。クロック数の小さいALIXの方がSheevaPlugよりも速いという結果になりました。浮動小数点演算の違いでしょうか(よく知りません&huh;)。ま、そもそも計算用途で使うものではありませんので。
 ~また、WindowsXP上のVirtualBoxでも試してみました。E8400のPCで512MBメモリを割り当てた環境です。x86_64アーキテクチャで実行し、Intel CompilerもIntel64版を使用しています。E6400実機とほぼ同等の結果を出しているところはなかなか興味深いです。いずれ実機のIntel64環境でも試してみたいですね。
 #br
 今回使ったPDBは非対称単位中に10分子のものなので多スレッドが有利だったのかもしれません。また、''tee''コマンドでログを書き出しながらだったのでディスクアクセス速度の速さも効いているものと思われます。なお、時間はrefine.log中の最後に出力される開始時刻と終了時刻から求めました。
 
 - &ref(bench-2djw.tar.bz2); -- 今回使ったPDB 2DJW
 
 このファイルは[[PDB>http://www.pdb.org/]]より2DJWのPDBファイルと構造因子ファイルを取得し、CNSで使える形式にした物です。分解能が2.4Åな上にデータもあまり良くないのですが、まあいいでしょう&huh;。ベンチマークに適したPDBなどあれば教えてください⌣。~
 実行方法はファイルを展開し、refine.inpを流すだけです。
  % tar jxvf bench-2djw.tar.bz2
  % cd bench-2djw
  % cns < refine.inp | tee refine.log
 
 ** CNS 1.3 [#z6027242]
 2010-07-22にリリースされた1.3で同様のベンチマークを行いました。インプットファイルが異なるので1.3のrefine.inpを使いました。修正点はPDB、CV、分解能の部分のみです。詳しくは調べてませんが処理の内容等変わっているようで、計算時間が大幅に伸びています。なお、スレッド数が増えてもさほど効果が現れていないところが興味深いです。OpenMPによる計算が少なくなったのでしょうか。
 |プロセッサ         |型番 |クロック数 |スレッド数|時間        |メモリ   |M/B              |OS      |カーネル|コンパイラ|Arch   |h
 |                   |CENTER:|CENTER:  |CENTER:   |RIGHT:      |CENTER:  |                 |CENTER: |CENTER: |CENTER:   |CENTER:|c
 |~Xeon              |X5570|2.93GHz    |8         |'' 5分10秒''|         |                 |RHEL 5  |2.6.18  |11.1.067  |x86_64 |
 |~Core i7           |940  |2.93GHz    |8 (HT)    |'' 6分33秒''|DDR3 16GB|Intel DX58SO     |Vine 5.1|2.6.27  |11.1.072  |i386   |
 |~Core2 Quad        |Q9650|3.48GHz(OC)|4         |'' 6分37秒''|DDR2 2GB |ASUS P5KPL-AM EPU|Vine 5.1|2.6.27  |11.1.072  |i386   |
 |~Core2 Quad        |Q9650|3.00GHz    |4         |'' 7分29秒''|DDR2 4GB |Shuttle SG31G2   |Vine 5.1|2.6.27  |11.1.046  |i386   |
 かなりマシンパワーが要求されますね・・・~
 これだけ時間がかかるとQ9650のオーバークロックも意味がありそうです&smile;