[研究]Meep
MITで開発されたフリーのFDTDシミュレーション・ソフトウェア.フロントエンドとしてスクリプト言語Scheme (libctl) を利用できるが,libctlのベースとなっているguileライブラリが動的リンクを要求するので,大学のScoreクラスタで動作しないようだ.そこで,C++からライブラリとしてMeepを読み込んで利用する事にする.
インストール方法
大学のクラスタではIntelのコンパイラが標準になっているが,gnuのコンパイラでビルドした方が何故か高速に実行されるようだ.(blas等にMKLを使用出来なかったのが原因か?MKLは静的リンクが上手く行かなかった.)必要なライブラリ等も含めて以下の様にビルドした.
hdf5-1.8.3
parallel hdf5は大学のnfsのマウントの仕方が仕様条件を満たしていないため,serialバージョンをビルドする.(mpicc等でビルドしない.)
cd hdf5-1.8.3 ./configure \ CC=gcc CXX=g++ FC=g77 \ CFLAGS="-static -O3 -march=pentium4" \ CXXFLAGS="-static -O3 -march=pentium4" \ FCFLAGS="-static -O3 -march=pentium4" \ LDFLAGS="-static -O3 -march=pentium4" \ --prefix=$HOME/usr \ --enable-production \ --enable-static \ --with-default-api-version=v16 make make install
harminv-1.3.1
cd harminv-1.3.1 ./configure \ CC="mpicc -compiler gnu" CXX="mpic++ -compiler gnu" \ F77="mpif77 -compiler gnu" \ CFLAGS="-static -O3 -march=pentium4" \ CXXFLAGS="-static -O3 -march=pentium4" \ FFLAGS="-static -O3 -march=pentium4" \ LDFLAGS="-static -O3 -march=pentium4" \ --prefix=$HOME/usr \ --with-blas='-lblas -lg2c' \ --with-lapack='-llapack -lg2c' make make install
meep-1.0.3
cd meep-1.0.3 ./configure \ CC="mpicc -compiler gnu" CXX="mpic++ -compiler gnu" \ F77="mpif77 -compiler gnu" \ CFLAGS="-static -O3 -march=pentium4" \ CXXFLAGS="-static -O3 -march=pentium4" \ FFLAGS="-static -O3 -march=pentium4" \ MPICXX="mpic++ -compiler gnu" \ CPPFLAGS="-I$HOME/usr/include" \ LDFLAGS="-static -O3 -march=pentium4 -L$HOME/usr/lib" \ --prefix=$HOME/usr \ --with-mpi \ --with-libctl=no \ --with-blas='-lblas -lg2c' \ --with-lapack='-llapack -lg2c' make make install
h5utils-1.11.1
cd h5utils-1.11.1 ./configure \ CPPFLAGS="-I$HOME/usr/include" \ LDFLAGS="-L$HOME/usr/lib" \ --prefix=$HOME/usr \ --without-octave make make install
自作プログラムのコンパイルと実行
.profileに以下を追記して,ログインし直す.
export PATH=$HOME/usr/bin:$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:. export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$HOME/usr/lib/pkgconfig
自作プログラム (hoge.cpp) のコンパイルは以下の様に行う.
mpic++ -compiler gnu `pkg-config --cflags meep_mpi` hoge.cpp -o hoge \ `pkg-config --libs meep_mpi`
実際に実行するクラスタのワーキングディレクトリ(/work1_scmgr2等) にアカウント名のフォルダを作成し,そこに実行可能ファイルをコピーしておく.実行スクリプト (go.sh等) は以下の様な内容になる.
#!/bin/sh -f #@$-q cluster2 #@$-eo cd /work1_scmgr2/アカウント名 scrun -scored=cluster2,nodes=16x1 ./hoge > ./hoge.out
ジョブの投入は,
$ qsub go.sh
作成したワーキングディレクトリーにデータ(hoge.out, *.h5等)が保存される.計算が終了したら,忘れずにデータをホームディレクトリに移動しておく.詳しくは並列型ジョブの実行方法を参照.
最終更新時間:2011年05月13日 15時29分44秒