i7を導入してみたのでこれを機にCNSでベンチマークテストをしてみました。環境によってはオーバークロックで遊んでいますが、電圧を盛ったりはしないようにしています(冷却を頑張ってないので・・・)。注釈がない限り、常用可能なオーバークロックのセットアップにしています。CompilerでOpenMPを有効にしてコンパイルしました。テストした時期によってコンパイラやカーネルのバージョンが異なります。OpenMPやはり際だった速さのCorei7マシンと、値段通りのAtomマシンとくっきり分かれました。arm(*)環境変数OMP_NUM_THREADSで制限。これらの結果は私の環境で行った結果なので、あくまで参考値ということで(スレッド数のHTはハイパースレッディング、VBoxはVirtualBox)。Opteronサーバを触る機会がありましたので、実機でベンチマーク。Enabledにして実行しています。Compilerの方が圧倒的に速かったのでOpen64の結果は割愛します。スレッド数が8を超えてもパフォーマンス上昇は見られず、32コアはむしろ遅いという結果になりました。カーネルは2.6.32-358.114.1.openstack。12コアPCのセットアップを行う機会がありましたので久しぶりに試してみました。8スレッドを超えてくるとスレッド増による伸びしろが減ってきている気がします。X5570とX5680を比較するとクロック数の差プラスアルファぐらいの差しかありません。アムダールの法則による限界が近いのかもしれません。カーネルは2.6.18-164。新たにマザーボードが手に入ったのでQ9650でオーバークロックを試してみました。400MHzオーバークロック動作(3.6GHz)では計算途中で止まってしまったので、386MHz動作(3.48GHz)で計算が完了しました。定格である3.0GHzに対して15%オーバークロックで、計算時間は12%ほど短縮されましたのでだいたいクロック数通りでした。それでようやくi7と同程度という結果でした。メモリクロックを667MHzにすれば動作800MHz以下になりメモリへの負担は軽減されますが、その際は4秒(3%)ほど計算時間が長くなりました。メモリクロック800MHzで927MHzの動作で常用してみようと思います(メモリが死ぬかも・・・)。クラスタPCを使う機会がありましたので試してみました。1ノードのコアが最大が8だったのでスレッド数も最大8でした。HTより速くなりますね。Quadの2.7GHzはベースクロックを266MHz->300MHzに、3.0GHzは333MHzにオーバークロック動作したものです。頑張ればもっとオーバークロックできるという記事もあるのですが、私の環境ではこの辺りが限界みたいでした(366MHzの3.3GHz動作でLinuxは起動しましたが動作が不安定だったので確認できませんでした)。クロック数がそのまま実行時間に反映されていますが、2.7GHzに比べて3GHzは意外と伸びが悪いようです。i7の方が速いという結果が出ました。完全にお遊びですが、組込用であるx86互換のGeodeLXとARM互換のSheevaPlugでも処理を流してみました。GeodeはPCEngines社のALIXボードを使い、ビルドはg77installであっさりOK(まあx86互換なので)。SheevaPlugでのビルドはMakefileを多少書き換える程度(マシンの種類の認識をLinuxにした)で可能でした。クロック数の小さいALIXの方がSheevaPlugよりも速いという結果になりました。ま、そもそも計算用途で使うものではありませんので。WindowsXP上のVirtualBoxでも試してみました。E8400のPCで512MBメモリを割り当てた環境です。CompilerもIntel64版を使用しています。E6400実機とほぼ同等の結果を出しているところはなかなか興味深いです。実機のIntel64環境でも試してみたいですね。今回使ったPDBは非対称単位中に10分子のものなので多スレッドが有利だったのかもしれません。teeコマンドでログを書き出しながらだったのでディスクアクセス速度の速さも効いているものと思われます。時間はrefine.log中の最後に出力される開始時刻と終了時刻から求めました。2DJWこのファイルはPDBより2DJWのPDBファイルと構造因子ファイルを取得し、CNSで使える形式にした物です。分解能が2.4Åな上にデータもあまり良くないのですが、まあいいでしょう。ベンチマークに適したPDBなどあれば教えてください。実行方法はファイルを展開し、refine.inpを流すだけです。1.32010-07-22にリリースされた1.3で同様のベンチマークを行いました。インプットファイルが異なるので1.3のrefine.inpを使いました。修正点はPDB、CV、分解能の部分のみです。詳しくは調べてませんが処理の内容等変わっているようで、計算時間が大幅に伸びています。スレッド数が増えてもさほど効果が現れていないところが興味深いです。OpenMPによる計算が少なくなったのでしょうか。