ラベル gromacs の投稿を表示しています。 すべての投稿を表示
ラベル gromacs の投稿を表示しています。 すべての投稿を表示

2007年7月30日月曜日

本格的にストップ

MPICH-1.2シリーズの利点は各ホストマシンでデーモンを立ち上げなくてよいこと、すなわち管理の手間がそれだけ省けるという事だ。
MPICH-2やOPENMPI,LAM/MPIはデーモンを立ち上げなくてはいけない。MPICH-1.2シリーズで運営していたクラスターに、適応するには非常に面倒な事になる。

…たぶん入れてもよいだろうが、やはり後継のMPICH-2が希望されると思うが、pythonをアップデートする必要がある…。

GROMACSの使用方法や、オプションなどの変更方法などを追求するのはここでストップした方が良いようです。かといってNAMDを使いたいとは思わない。GROMACSの良い所は、アプリケーションが融合していない、インタラクティブなスクリプトが無い(tclやpythonなどを使った特殊言語)ところと、マニュアルがしっかりしているところと、面倒な温度制御(多段階制御)がちゃんと理路整然と入っている所と、マルチメディア命令を使ってループ計算をfortranや通常のCより早く処理できるようにソースファイルレベルで最適化されている事。

今後使えるようならNAMDかGROMACSを使ってみたいので、改良方法などを考えておく
事とするかな。fortranでも良いのだが、フリーではないんだよね。
pythonで面倒くさいインプット入力をさせて、fortranに渡して、
fortranでMPIプログラムを作る事も可能だ。

計算速度はここの言語のコンパイラオプションやループの作り方とかにも依存するんだけど、やはり系が大きくなると、通信速度や処理方法が問題となる。その点MPICH2が今のところベストな選択であるようだ。

GAMESSについてくるDDI(というのか?)の通信プログラムはMPICHより良いのじゃないかと思う。それでMD書くかな…。

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月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オプションが無い。

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


2007年7月21日土曜日

Gromacsのインストール

gromacsのパッケージをインストールする際にfftwのインストールが推奨されているけれども、MKLを使った方が無難かなと思ったので、その対処方法を記述します。
(To install GROMACS package, it is recommended with installing fftw package also. But I know MKL shows quite good performace and no trouble, I will write down here how I installed GROMACS with MKL)

最初に intel c complierとintel fortran compilerとMath kernel LibralyとMPICHがインストールされていて、pathがちゃんと設定されている必要がある。そしてコンパイラーの名前を設定してあげなければいけない。cshかtcshを使っているのなら以下のように設定すれば良い。.chsrcのなかに書いてもいいけど、コマンドで与えたほうがよいかな。
(First of all. the system should be installed of intel C compiler and intel fortran compiler , Math Kernel Librally and MPICH, and setting file (.cshrc or .tcshrc ) should be include the proper path of these packages. After that, the name of compiler should be declared like below in the case of CSH or TCSH enviroment. )


setenv FC ifort
setenv F77 ifort
setenv F90 ifort
setenv CC icc
setenv CXX icpc
setenv MPICC mpicc
setenv CPPFLAGS -I/opt/intel/mkl/8.0.2/include
setenv LDFLAGS "-L/opt/intel/mkl/8.0.2/lib/32 -lpthread"

(just type these as a command , that is ok.)

そして、設定が終わったらgromacsのパッケージを解凍して、ディレクトリのなかに入り、
以下のコマンドを打っていく。
(Then, extract the gromacs archive, and goto the created directory , hit the below commands.)

./configure \
--with-fft=mkl \


make
make install

さらにMPI処理をさせたいプログラムはmdrunしかないので、以下のコマンドをって並列用にコンパイルを行う。mdrunがMDを行うコアプログラムだから。
(Next when parallel works are needed, compile only 'mdrun' program with mpich. Because the 'mdrun' is a core program that do MD job. )

make clean
./configure \
--with-fft=mkl \
--enable-mpi \
--disable-nice

make mdrun
make install-mdrun

これでインストールが終了しました。

これをしないとチュートリアルが動きませんでした。
(GMXLIB should be setted like this... without this, tutorial program is not worked properly. )
setenv GMXLIB /usr/local/gromacs/share/gromacs/top/

チュートリアルはここにあります。
(tutorial program is here.)
usr/local/gromacs/share/gromacs/tutor/gmxdemo/demo

C言語

今、GROMACSというフリーソフトのソースコードを読もうとしています。

といっても、まだコンパイルすらしていません。
使い方も意味不明な所が多く、まず最初にマニュアルを読んで出来ることと
出来ないことを明確にする所から始めています。

http://www.gromacs.org/


で、まださっぱり分かりません。
どうも周期境界を持った系以外では計算できないようです。
使い方も結構簡単で、チュートリアルがWeb上にあります。

このプログラムはGromosのforce fieldを使用することを前提に作られています。
しかし、商用のamberやcharmmなどのforce filedにも対応させるソフトも
同じサイトで公開されています。

インプットを作るソフトから解析するソフトまであるので、
きっと使いこなすのは楽でしょう。

プログラムを改変してまでやりたいことはumbrella samplingの
反応座標を変えたいこと位しかないですし。

最近ではfortranのコンパイラを導入するのでさえ不便ですから、c言語主体
となるのも良いのかもしれません。