2007年7月28日土曜日

動きません。

GROMACSの方ですが、mpich-1.2.7にバージョンを上げてみました。
そうするとSSE2がちゃんとうごいているよというメッセージを最後にハングしました。
mpich2は大規模にシステムを変えなければいけないのでOPENMPIを選択して
現在コンパイル中です。
http://www.open-mpi.org/
LAM/MPIの次期バージョンということで、これから使うならこっちの方がよいかなと。
しかし静的リンクを行うのを推奨していないので、微妙ですが。

---openmpi-ダメですね。rsh通信が出来ないようです。
staticリンクが出来なかったのでライブラリ関係が心配でしたがそれはクリア
していたようです。しかし…本家サイトにあるようにhostを指定しても
hostfileをperlで用意しても、無駄。(TT)

なんか無駄な事してたなぁ…。
4cpuで五万原子でPMEで一日あたり0.3nsec計算できるようです。
うーんと、やっぱ4cpuで使うかな?

脱力感が抜けません。

やっと夏らしくなったので、ここで怪談ページのリンクを張っておきますかね。

稲生物怪録をば。
http://ww22.tiki.ne.jp/~ballet/mononoke/index.html

この怪談は実話だと言われている説もあるようです。

注意して読んでいくと次の点に気がつきます。

目を瞠る程の怪異が起こるのは一人の時だけで、話を聞いた近在の人間がいるときは畳が動いたり家鳴りがするだけ。あとは主人公と非常に親しい人物が一緒の時や、主人公だけの時、とんでもない化け物が出てくる。

主人公は友人がたくさんいるタイプだったようなので、そいつらが集まれば、家鳴りや畳を動かしたりとかできますね。それとか下男に噂を言い触らさせたりするような事も容易だし。事のきっかけとなった相撲取り(おそらく計画犯)が亡くなったりしたのも、実はただ失踪しただけかもしれない(身持ちが悪く方々を転々としていたらしい)。失踪ではないのならば、すべてのストーリーはこの相撲取りを毒殺する為に、健康なのに急死したという事実を隠蔽する為に作られた物なのか?(その相撲取りから怪異を聞いて尋ねてきた人は居ない)しかしメリットのあるような人物は出てこない。すべての怪異がトリックだとしたら…こんな風に邪推すると結構おもしろいですね。

2007年7月27日金曜日

ショックだ。。。

Gromacsネタ

えっと、僕は並列計算が可能なように二種類程コンパイルしました。
MPICH1.2.5とMKLを使うバージョン
MPICH1.2.5とfftw-3.1を使うバージョン

そして、CPUが4を越えると、動かなくなる(hung up)状態になるんです。

コンパイルの仕方が悪かったのかと考えつつメーリングリストをみると、
MPICH.1.2.*では4以上だとhungする。MPICH2.1.*ならいけると
報告している人がいた!2006年だから、ちょうどgromacs-3.3.1で
同じバージョンだ!!

つまりmpich.2.1以前は対応していないんだよね、GROMACS…。

動かなくなるという現象はPMEやPPPMを使った時に生じます。
particle mech ewald, particle-particle Particle-Mesh ,の略です。
静電相互作用の計算方法です。


で、いれるしかないよね?こうなったら…。MPICH2.1を!!

2007年7月26日木曜日

息抜き

にゃっちもさっちも

今日は別件で忙しかったのでGromacsをいじることが出来ませんでした。いつもはortran77のみ(perlあるいはpython)で処理するので、C言語のstructやtypedefに非常に戸惑いを感じています。昨日の夜やっていたのが、苦Cです。
http://homepage3.nifty.com/mmgames/c_guide/
一応最後まで読み切りました(これまでにもちょっとずつ読んでいた。)commonに相当する事やallocateとかも出来るようです。

一応一通りはC言語のプログラムで書いてあることは分かるはず^^;printfとかfgetsとか、関数、ではなくて、書式とかという意味で。(標準関数は覚えなくとも後付けで必要なのが分かってくる)

しかーし。structの内部データにアクセスするときに、structのあるデータのポインタを渡している(メモリ上のアドレスで、これが分かれば値を取りにいける)部分が一杯出てきています。で、どこでそのstructを定義しているの?というのが分からず。

小さい解析用のプログラムでも見て練習したほうがよいようです。

hotmail vs gmail

とある友人からのネタで、gmailのフェッチ機能をhotmailに適応出来きるかどうか調べてよと、言われて、僕は調べてみたんです。

なんと、hotmailはPOP3サーバー持っていなかったんですね!昔からのhotmailユーザーだったので、結構ショックでした。何時OEで受け取れなくなったんだろうかというと、2004年ということ。元々hotmail使っていてもOEでは受け取っていませんでした。(OE::Outlook Express) それはあまりにも勧誘メールがひつこかったからというのが大きかったんですね。そして次第に使わなくなっていって、アカウントは消失してしまいました。最近になって新たにアカウントをhotmailで取ったのですが、同時期にgoogleでも取ってみていたんです。しばらくどちらをメインでということでも悩んだのですが、googleにはigoogleというサービスがあって、自分の好きなアイテムを登録できるというのが気に入って、すべてのオンラインで利用しているサービスをgoogleに集約させる事にしました。hotmailはこれから使えなくなるのでしょうか?windows live hotmailが次期hotmailという事らしいですが、テキスト送信が出来ないということを聞くとアレルギーが^^;昔のhotmailだってテキスト送信できたのに。


どちらにしろ、gmailはhotmailをfetch出来ないという事には代わりが無いようです。一方で、hotmailではないけれども、windows liveというソフトであらゆるweb mailが受け取れる事で対応出来るようですね。

googleならば、文書などを共有できるというのが良いですね。共同でプログラムコードも作れたりして!

2007年7月25日水曜日

GROMACSの特殊な環境へのインストール

通常のPCでlinuxであれば、結構楽にインストールする事が出来ます。しかし、大型計算機で私的に使いたいという要望がある時は別の問題が発生します。システムレベルでリンクライブラリが定義されていないような物をリンクする必要が生じるからです。通常はそのような場合はstaticリンクを用いて回避します。しかしMKLはstaticリンクの方法を間違えると非常にややこしい事に陥ります。

通常は動的ライブラリとして-lmklというオプションをリンク時に与えればいいのですが、上のような状況でさらにMPICHで並列化処理をしたいとなると、どこかのノードでlibmkl.soなんてみつからないぞとエラーを言ってきます。さらにはiccの最新バージョンをやはり私的に使用していると同じような事になります。

dynamic linkできないという問題です。

元々のシステムのコンパイラを使えばよいっていっても最新の外注プログラムは動かないんですよ。新しくしないと。

そこで、mpichとicc,ifort,mklを/home/hoge/intel/内にインストールしている場合
どうするかを以下に書こうと思います。

というよりはスクリプトを作って対応しました。
----chconfig.csh----
#!/bin/csh

setenv INSTALLDIR /home/hoge/program/gromacs-3.3.1
setenv COMPDIR /home/hoge/intel

echo just installing mdrun_mpi $INSTALLDIR
echo making configure for MPICH MKL ICC static

setenv CC icc
setenv CXX icpc
setenv MPICC $COMPDIR/mpich/bin/mpicc
setenv F77 ifort
setenv MKLPATH $COMPDIR/mkl/8.0.2/lib/32
setenv MKLIPTH $COMPDIR/mkl/8.0.2/include
setenv ICCPATH $COMPDIR/cc/9.0/lib


setenv LD_LIBRARY_PATH /home/hoge/intel/mkl/8.0.2/lib/32:/home/hoge/intel/cc/9.0/lib

setenv LDFLAGS "$LDFLAGS -L$MKLPATH -lmkl_ia32 -lguide -lpthread "
setenv CPPFLAGS " -I$MKLIPTH"
setenv CXXFLAGS " -I$MKLIPTH"

sed "s/-lmkl /-lmkl_ia32 -lguide -lpthread /g" configure |cat > test
sed "s/LDFLAGS -all-static/LDFLAGS -static/g" test |cat > configure.int.static

rm test

echo "configure"
chmod +x configure.int.static
./configure.int.static --enable-double --enable-mpi --disable-nice --with-fft=mkl --program-suffix=_mpi --prefix=$INSTALLDIR --enable-all-static

echo "compile"
make mdrun
echo "install"
make install-mdrun
echo "all done"
ldd $INSTALLDIR/bin/mdrun_mpi

----------------------end of script-----------
この中核となるのが、configureのsedによる編集部分です。-lmklが自動的に設定されるので動的リンクが働いて --enable-all-staticのオプションが動作しませんでした。さらにiccでは-all-staticというオプションがないので、-staticに変えないとダメでした。

DFTのMKLのroutineを使う際にするオプション"-lmkl_ia32 -lguide -lpthread"はそのままstaticリンクを行います。これだけではiccの方が見失うのでやはり-staticは必要でした。

このスクリプトでmdrun_mpiという並列専用のMdアプリケーションを作成する事が出来ました。

今度は別で、どうやってキューイングシステムに入れて計算させるかという事が必要となります。mpirunをコントロールするスクリプトscriptAがあるシステムを使っている場合、
投入時のスクリプトの最後の方に
scriptA miprun mdrun_mpi -N 2 -s $TPR -o $TRR -g $LOG

と書けば、アーカイブ化されたインプット$TPRを用いて$LOGにログを出力し、$TRRに座標を出力するように出来ます。

で、なんとか計算させることが出来ました。


mdrun以外のアプリケーションを非並列で、倍精度の条件で、
-enable-all-staticを使ってコンパイルするとdynamicリンクしているのがlddコマンドで分かります。なので、
上のスクリプトで
--program-suffix=_statとして、make&make installに書き換えてやると…成功しました!!これだけで2時間はかかった。_statには意味がない。並列でもシングルでも動くライブラリ非依存のプログラムが完成しました。これで、同じ機械上ならば、動的ライブラリを参照する事無く使えます。

走らせてやると、2cpuで、並列効率98%、一日で4.89nsecほど(@6000原子程)。
かなり早いらしい…。

次はこのプログラムの中身を解読し、独自の関数を埋め込まなければいけません。
そのために孤立系を用意しなければ。

2007年7月23日月曜日

demoをやってみた。

普通のlinuxの環境ならfortranが入っていないかもしれない。入っていなくてもintel fortran compilerとintel math kernel librallyを無償で入手する事が出来る(linux版のみ)
http://www.intel.com/cd/software/products/asmo-na/eng/340679.htm

最新版になっているんですね。とりあえず、math kernel librally以外は最初に入っているgccがあればなんとかいけそうです。

/usr/local/gromacs/share/tutor/gmxdemo/
というディレクトリの中にデモプログラムがあります。
このディレクトリを適当な場所にコピーして
./demo
と実行すると、インタラクティブにスクリプトが動いてMDを体験できます。そもそもMDってなんだ?という事をここではまったく説明していませんが^^;

そうすると、下の絵のように、小さいαhelixのタンパク質が周期境界条件下で動かせたという事になります。(別途VMDというフリーソフトでスナップショットを描画)



赤は酸素、白は水素、青は窒素、黄色は砒素を表しています。灰色は炭素です。真ん中の灰色のネジ見たいな物がタンパク質(ペプチド)で、周期境界条件なのでイメージングされたものが奥に見えます。実際に計算しているのは真ん中のペプチドと周囲の水だけです。

計算して分かったのが、demoの最後のMDのトラジェクトリをg_hbondで評価してやると
最初の構造から急に水素結合の数が増えます。これは最初の構造が空間が空いていたような
構造出会ったことを意味するのだろうと思います。demoのスクリプトをいじってやると
水のポテンシャルの形やタンパク質のポテンシャルの形、温度や圧力制御の方法などなど
を変えてみる事が出来ます。内容物を変えていくらでも考えることはいっぱいあるでしょうね。

GROMACSのソースコードを今読んでいます。一番の親となるコードを発見し、
fortranのように楽勝で読み取れるというわけではないのがわかりました。
C言語らしく、小さな関数の寄せ集めで、ルートをたどるのが面倒です。

2007年7月22日日曜日

GROMACSを動かした見た感想

--enable-doubleで倍精度が出るようになりますが、速度としては遅くなるようです。
leap-flogは悪くないインテグレーター(積分する事)だと思うし、
温度制御もnose-hooverを使える。

興味があるのが周期境界条件が無い場合の近似的な計算で、
いわゆるCAPオプションが欲しい所。しかし、GROMACSにはありません。

一方でmdrunに渡されるオプションの中に
neighbor searching の箇所の
pdb=no
というスイッチがあります。これは境界を持たないというスイッチなので、
周期境界条件を無くす方法がこれに当たります。しかし、CAPオプションが
無いので境界にある分子を止めなければいけません。

分子を止める方法としてはmake_ndxというコマンドを使うと出来るようです。
これで残基を固定する事が出来ます。さらに細かく原子までも指定できます。


gromacsの僕の不足と感じる所::
umbrella samplingの反応座標を、距離や角度ではなく座標でしか取れない。
CAPオプションが無い。

この二点のみになりました。