TOP PAGE‎ > ‎Code_Asterの並列化‎ > ‎

Code_Asterの並列化 12.6

*この手順は公式フォーラムの、tamaskovics と Thomas DE SOZA の投稿を参考に作りました。

対応バージョン

OS:Ubuntu 14.04
Code_Aster : ver.12.6


準備作業

ファイルのダウンロード

ダウンロードしたファイルの保存先 ~/Install_Files
インストール先 /opt と /opt/aster

下記のファイルをそれぞれのサイトからダウンロードして、Install_Filesに置く。

 公式サイト  ファイル名
 Code_Aster  aster-full-src-12.6.0-3.noarch.tar.gz
 OpenBLAS  OpenBLAS-0.2.18.tar.gz
 ScaLAPACK
 scalapack_installer.tgz
 PETSc  petsc-3.4.5.tar.gz

インストール先フォルダの所有者の変更

/optはrootの所有となっているので、これをログインユーザーの所有に変更する。(usenameは自分のログインユーザーを入力する)
$ sudo chown username /opt/

Code_Asterのコンパイルに必要なライブラリのインストール

単独版のCode_Asterに必要なライブラリをインストールする。
$ sudo apt-get install gfortran g++ python-dev python-qt4 python-numpy liblapack-dev libblas-dev tcl tk zlib1g-dev bison flex checkinstall openmpi-bin libopenmpi-dev libx11-dev cmake qt4-dev-tools libmotif-dev

OpenBLASのコンパイル


単独板Code_AsterのコンパイルにOpenBLASをMath LIbraryとして用いるために、コンパイルしておく。

$ cd ~/Install_Files/

$ tar xfvz OpenBLAS-0.2.18..tar.gz

$ cd OpenBLAS-0.2.18

$ make NO_AFFINITY=1 USE_OPENMP=1

$ make PREFIX=/opt/OpenBLAS install

$ echo /opt/OpenBLAS/lib | sudo tee -a /etc/ld.so.conf.d/openblas.conf

$ sudo ldconfig


単独版Code_Asterのコンパイル

まずは、単独版Code_Asterを/optにコンパイルする。計算の高速化のために、Math LIbraryはOpenBLASを用いる。
sedコマンドで、setuup.cfgを書き換える。

$ cd ~/Install_Files

$ tar xfvz aster-full-src-12.6.0-3.noarch.tar.gz

$ cd aster-full-src-12.6.0/

$ sed -i "s:PREFER_COMPILER\ =\ 'GNU':PREFER_COMPILER\ =\'GNU_without_MATH'\nMATHLIB=\ '/opt/OpenBLAS/lib/libopenblas.a':g" setup.cfg

$ python setup.py install


並列計算用のホストファイルを作成する。別のマシンとクラスターを組む場合は、同様の書式で追加していく。
$ echo "$HOSTNAME cpu=$(cat /proc/cpuinfo | grep processor | wc -l)" > /opt/aster/etc/codeaster/mpi_hostfile

ScaLAPACKのコンパイル

$ cd ~/Install_Files

$ tar xfvz scalapack_installer.tgz

$ cd scalapack_installer_1.0.2

$ ./setup.py --lapacklib=/opt/OpenBLAS/lib/libopenblas.a --mpicc=mpicc --mpif90=mpif90 --mpiincdir=/usr/lib/openmpi/include --ldflags_c=-fopenmp --ldflags_fc=-fopenmp --prefix=/opt/scalapack


BLACS: error running BLACS test routines xCbtest というエラーが最後に表示されるが、/opt/scalapack/lib/libscalapack.aのファイルが作成されていれば、コンパイルは成功している。


MUMPSのコンパイル

Code_Asterのソースファイル中にあmumps-4.10.0、/optにコピーしてmpiコンパイラでコンパイルする。
$ cp ~/Install_Files/aster-full-src-12.6.0/SRC/mumps-4.10.0-aster3-2.tar.gz /opt/

$ cd /opt

$ tar xfvz mumps-4.10.0-aster3-2.tar.gz

$ mv mumps-4.10.0 mumps-4.10.0_mpi

$ cd mumps-4.10.0_mpi/


Makefile.inc.inをリンク先のように書き換える。MUMPS4.10.0 Makefile.inc

$ make all


PETSc with HYPRE and MLのコンパイル

$ cp ~/Install_Files/petsc-3.4.5.tar.gz /opt

$ cd /opt

$ tar xfvz petsc-3.4.5.tar.gz

$ cd petsc-3.4.5

$ ./config/configure.py --with-mpi-dir=/usr/lib/openmpi --with-blas-lapack-lib=/opt/OpenBLAS/lib/libopenblas.a  --download-hypre=yes --download-ml=yes --with-debugging=0 COPTFLAGS=-O1 CXXOPTFLAGS=-O1 FOPTFLAGS=-O1 --configModules=PETSc.Configure --optionsModule=PETSc.compilerOptions  --with-x=0 --with-shared-libraries=0

$ make PETSC_DIR=/opt/petsc-3.4.5 PETSC_ARCH=arch-linux2-c-opt all

コンパイルが成功したことを確かめる

$ make PETSC_DIR=/opt/petsc-3.4.5 PETSC_ARCH=arch-linux2-c-opt test



並列版Code_Asterのコンパイル

/opt/aster/etc/codeaster/asrunをテキストエディタで開いて、mpi_get_procid_cmdの部分を書き換える。
mpi_get_procid_cmd : echo $OMPI_COMM_WORLD_RANK

使用するプロセッサー数が32を超える場合は、下記の部分も数字を書き換える。
batch_mpi_nbpmax : 32
interactif_mpi_nbpmax : 32


Code_Asterのソースファイルを解凍し移動する。

$ cd ~/Install_Files
$ cd aster-full-src-12.6.0/SRC

$ tar xfvz aster-12.6.0.tgz

$ cd aster-12.6.0


並列用設定ファイル:Ubuntu_gnu_mpi.pyUbuntu_gnu.py を現在のディレクトリに置き、並列版をコンパイルする。
$ export ASTER_ROOT=/opt/aster
$ ./waf configure --use-config-dir=$ASTER_ROOT/12.6/share/aster --use-config=Ubuntu_gnu_mpi --prefix=$ASTER_ROOT/PAR12.6
$ ./waf install -p


最後に、/opt/aster/etc/codeaster/asterを開いて、 vers : testingの下に、vers : PAR12.6:/opt/aster/PAR12.6/share/aster を追加すればASTKにPAR12.6が登録される。

commファイルでの設定

下図のように、MECA_STATIQUEやSTAT_NON_LINEのオプションで並列ソルバー(MUMPSなど)を選択する。
(下図のb_mumps以下の項目はメモリ使用量を低減させるオプション設定である。メモリ低減量と計算時間の増減の目安は下表を参照のこと)


オプション メモリ低減量 計算時間
 MATR_DISTRIBUEE
 変わらない

ASTKの設定

Optionsでプロセッサー数を設定する。
ncpus=OpenMP用(OpenBLAS用)のプロセッサー数
mpi_nbcpu=MPI用のプロセッサー数

mpi_nbnoeud=ノード数

仮に、ncpus=2、mpi_nbcpu=2、と設定した場合は、2*2=4プロセッサーの並列計算となる。



下図のようにASTKでVersionをPAR12.3に切り替える。



Runボタンを押して並列計算を実行する。



ą
Kengo MAEDA,
2016/08/05 20:32
ċ
Makefile.inc
(4k)
Kengo MAEDA,
2016/08/06 3:29
ċ
Ubuntu_gnu.py
(1k)
Kengo MAEDA,
2016/08/05 22:15
ċ
Ubuntu_gnu_mpi.py
(1k)
Kengo MAEDA,
2016/08/05 22:15
Comments