履歴 ログイン

Meep C++

[研究]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等)が保存される.計算が終了したら,忘れずにデータをホームディレクトリに移動しておく.詳しくは並列型ジョブの実行方法を参照.

 チュートリアル

Meep TutorialのC++版

最終更新時間:2011年05月13日 15時29分44秒