DALAB情報発信用ブログ:OpenCAE+GPGPU+Peridynamics編

DALABで行っている研究活動の中で、OpenCAEやGPGPUや破壊解析の取り組みについてまとめてゆきます。

DEXCS-Salomeの有効活用:並列版Code_Asterのコンパイル(2)

2011年07月23日 21時10分39秒 | DEXCS情報
準備ができたら、並列版のCode_Asterのコンパイルに進みます。

■ Code_Asterのインストール
以下のコマンドを順に実行してゆきます。途中で setup.cfg を変更するための sed スクリプトがありますが、複雑な記述なので間違えないようにしてください。どうしても上手くいかないときは、(1)に示した構築手順のまとめに見本の setup.cfg があるので、比較してください。
$ cd ~/Install_Files → インストール作業用ディレクトリに移動
$ tar xfvz aster-full-src-10.6.0-3.noarch.tar.gz → ソフトウエアパッケージを展開
$ cd aster-full-src-10.6.0/ → aster インストール作業用ディレクトリに移動
$ sed -i "s:PREFER_COMPILER\ =\ 'GNU':PREFER_COMPILER\ =\'GNU_without_MATH'\nMATHLIB=\ '-L/usr/lib/atlas-base/atlas -lblas -llapack':g" setup.cfg → セットアップ用設定ファイル setup.cfg のコンパイラの設定を変更
$ python setup.py install --prefix=/opt/aster → コンパイルしてインストールを実行しますが、途中で setup.cfg に関して確認を求められますが、進めてよいので y を入力します。コンパイルには、相当に時間がかかります。何らかの誤りがあると、エラー ERROR が表示され中断します。その時は setup.log を良く調べて対応してください。
メッセージが色々と出て、致命的なエラーの中断が出なければ、最後に以下のメッセージが出ます。これで並列版Code_Asterのコンパイルとインストールの完了です。でも、まだまだ作業があります。
Installation of : Code_Aster + 13 of its prerequisites
Destination : /opt/aster
Elapsed time : 1060.69 s → コンパイル環境に違う

■ hostfile の設定
MPI の動作環境の設定のため、/opt/aster/etc/codeaster ディレクトリの中に、適当なエディタで mpi_hostfile ファイルを作成し、「コンピュータ名 CPU=コア数」を記入します。
例えばここでの作業では、検証用に仮想マシン上で dexcs-salome-par というクアッド(4)コアマシンを1台使っているので、「dexcs-salome-par cpu=4」となります。多数の計算ノードを使うようになったら、ここに追記します。
$ cd /opt/aster/etc/codeaster
$ vi mpi_hostfile

■ scalapackのインストール
並列処理ライブラリの scalapack をインストールします。ここではソースからのコンパイルを行います。以下のコマンドを実行してください。コンパイルでは少しだけ時間がかかります。なおインストール先は /opt/scalpack になります。
$ mkdir /opt/scalapack → インストール用ディレクトリを作成
$ mkdir /opt/scalapack/build
$ mkdir /opt/scalapack/lib
$ cp ~/Install_Files/mpiblacs.tgz /opt/scalapack/build → インストール作業用ディレクトリにソフトウエアパッケージをコピー
$ cp ~/Install_Files/scalapack-1.8.0.tgz /opt/scalapack/build
$ cd /opt/scalapack/build → インストール作業用ディレクトリに移動
$ tar xfvz mpiblacs.tgz → ソフトウエアパッケージを展開
$ tar xfvz scalapack-1.8.0.tgz
$ cd /opt/scalapack/build/BLACS → BLACSインストール作業用ディレクトリに移動

コンパイル用の Bmake.inc を BMAKES/Bmake.MPI-LINUX をもとに以下の様に作成します。
$ cp ./BMAKES/Bmake.MPI-LINUX ./Bmake.inc → ./Bmake.inc の原型をコピー
修正箇所は Bmake.inc ファイルの、以下15行です。
BTOPdir = /opt/scalapack/build/BLACS
BLACSFINIT = $(BLACSdir)/blacsF77.a
BLACSCINIT = $(BLACSdir)/blacsC.a
BLACSLIB = $(BLACSdir)/blacs.a
MPIdir =
MPILIBdir = /usr/lib/openmpi/lib
MPIINCdir = /usr/lib/openmpi/include
MPILIB = $(MPILIBdir)/libmpi.a
INTFACE = -DAdd
F77 = mpif90
F77FLAGS = $(F77NO_OPTFLAGS) -O3
CC = mpicc
CCFLAGS = -O3
CCLOADER = $(F77)
RANLIB = /usr/bin/ranlib

コンパイルを進めます。
$ make mpi → BLACSのライブラリをコンパイル
エラーがなく最後に以下が表示されて、blacs.a が出来たら成功です。
/usr/bin/ranlib /opt/scalapack/build/BLACS/LIB/blacs.a
$ cp LIB/*.a /opt/scalapack/lib → BLACS のライブラリを移動

コンパイル用の SLmake.inc を SLmake.inc.example をもとに以下の様に作成します。
$ cd /opt/scalapack/build/scalapack-1.8.0 → scalapack インストール作業用ディレクトリに移動
$ cp SLmake.inc.example SLmake.inc → SLmake.inc の原型をコピー
修正個所は SLmake.inc ファイルの、以下の12行です。
home = /opt/scalapack/build/scalapack-1.8.0
BLACSdir = /opt/scalapack/lib
SMPLIB = /usr/lib/openmpi/libmpi.a
BLACSFINIT = $(BLACSdir)/blacsF77.a
BLACSCINIT = $(BLACSdir)/blacsC.a
BLACSLIB = $(BLACSdir)/blacs.a
F77 = mpif90
CCFLAGS = -O3
CDEFS = -DNO_IEEE $(USEMPI) -DAdd_
RANLIB = /usr/bin/ranlib
BLASLIB = /usr/lib/atlas-base/atlas/libblas.a
LAPACKLIB = /usr/lib/atlas-base/atlas/liblapack.a

コンパイルを進めます。
$ make → scalapack のライブラリをコンパイル
エラーがなく最後に以下が表示されて、libscalapack.a が出来たら成功です。
/usr/bin/ranlib /opt/scalapack/build/scalapack-1.8.0/libscalapack.a
$ cp libscalapack.a /opt/scalapack/lib → scalapack のライブラリを移動

■ ParMetisのインストール
並列処理用データ分割ツール ParMetis をインストールします。以下のコマンドを実行してください。
$ cp ~/Install_Files/ParMetis-3.2.0.tar.gz /opt → インストール用ソフトウエアパッケージを /opt にコピー
$ cd /opt → /opt に移動
$ tar xfvz ParMetis-3.2.0.tar.gz → ソフトウエアパッケージを展開
$ cd ParMetis-3.2.0 → ParaMetis インストール作業用ディレクトリに移動
ここで修正作業が必要です。ディレクトリの中に構築用設定ファイル Makefile.in があります。これに XTRALIBS = -lmpi を追加設定の場所に記入します。適当なエディタで行ってください。出来たらコンパイルします。
$ make
暫く待ちます。エラーが出ずに下記のメッセージが出たら完成です。
chmod 744 ../Graphs/pometis3.2.0

■ mumpsのインストール
並列連立方程式ソルバー mumps をインストールします。以下のコマンドを実行してください。
$ cp ~/Install_Files/aster-full-src-10.6.0/SRC/mumps-4.9.2-2.tar.gz /opt/ → インストール用ソフトウエアパッケージを /opt にコピー
$ cd /opt → /opt に移動
$ tar xfvz mumps-4.9.2-2.tar.gz → ソフトウエアパッケージを展開
$ mv mumps-4.9.2 mumps-4.9.2_mpi → 作業ディレクトリの名前を変更
$ cd mumps-4.9.2_mpi/ → mumps インストール作業用ディレクトリに移動

修正個所は Makefile.in ファイルの、以下の17行です。SCALAP に blacs.a が2回指定されていますが、この通りにします。
SCOTCHDIR = /opt/aster/public/scotch_5.1.11_esmumps
LMETISDIR = /opt/ParMetis-3.2.0
LMETIS = -L$(LMETISDIR) -lparmetis -lmetis
ORDERINGSF = -Dpord -Dparmetis -Dmetis
CC = mpicc
FC = mpif90
FL = mpif90
SCALAP = /opt/scalapack/lib/libscalapack.a \
/opt/scalapack/lib/blacs.a \
/opt/scalapack/lib/blacsF77.a \
/opt/scalapack/lib/blacs.a \
/usr/lib/atlas-base/atlas/libblas.a \
/usr/lib/atlas-base/atlas/liblapack.a
INCPAR = -I/usr/lib/openmpi/include/ $(IPORD)
LIBPAR = $(SCALAP) -L/usr/lib/openmpi/lib -lmpi
LIBBLAS = -L/usr/lib/atlas-base/atlas/libblas.a
OPTF = -O -Dintel_ -DALLOW_NON_INIT -O2 -ffixed-line-length-0 -x f77-cpp-input -fPIC -fopenmp
OPTL = -O -fopenmp
OPTC = -O -O2 -fno-stack-protector -fPIC -fopenmp
INC = $(INCPAR)
LIB = $(LIBPAR)
LIBSEQNEEDED =

ファイルを準備したらコンパイルします。暫く待ちます。
$ make all
エラーが出ずに、以下のメッセージが出れば完成です。
mpif90 -o zsimpletest -O -fopenmp zsimpletest.o …… 

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。