1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WSLにCode_Aster14.6並列版のインストール

Last updated at Posted at 2021-12-18

はじめに

WSLで並列版Code_Asterが構築ができたので共有したいと思います。
先人たちに感謝。

環境

OS : Windows 10
WSL : Ubuntu 18.04 LTS

インストール済みのパッケージの問題でエラーが発生することがあるので新規ディストリビューションを作ってインストールするのも一考です。

インストール 工程

以下の工程でインストールしていきます。工程3まで実施すれば単一版は動きます。

  1. 準備
  2. OpenBLAS
  3. Code_Aster with OpenBLAS
  4. ScaLAPACK
  5. Parmetis, Scotch, MUMPS
  6. Petsc
  7. 並列版Code_Aster

#1 準備
Windowsの環境変数を読み込むとエラーが出るようなので読み込まないように設定します。

echo -e "[interop] \nappendWindowsPath = false" |sudo tee /etc/wsl.conf

上記を反映するためにwslを再起動します。

次にインストール先 ( /opt )の所有権の変更と必要なパッケージのインストールを行います。

sudo chown username /opt    #usernameにユーザ名を入れる
sudo apt update
sudo apt install gcc g++ gfortran cmake python3 python3-dev python3-numpy tk tcl bison flex liblapack-dev libblas-dev libboost-all-dev zlib1g-dev libsuperlu-dev grace git libx11-dev swig

下記バージョンのソースをサイトからダウンロードして~/softwareに置きます。

パッケージ バージョン ダウンロード先
Code_Aster aster-full-src-14.6.0-1.noarch.tar.gz https://www.code-aster.org
OpenBLAS OpenBLAS-0.2.20.tar.gz https://github.com/xianyi/OpenBLAS/
ScaLAPACK scalapack_installer.tgz http://www.netlib.org/scalapack/#_scalapack_installer_for_linux
scalapack-2.0.0.tgz
Parmetis parmetis-4.0.3.tar.gz http://glaros.dtc.umn.edu/gkhome/metis/parmetis/download
Petsc petsc-3.9.4.tar.gz https://www.mcs.anl.gov/petsc/download/index.html
hypre hypre_2.14.0.orig.tar.gz https://launchpad.net/ubuntu/+source/hypre

##2 OpenBLAS
解凍してインストールしていきます。
利用しているCPUがTargetList.txtにない場合はインストールを失敗するので適当なCPUを指定しておきます。

cd ~/software
tar xf OpenBLAS-0.2.20.tar.gz 
cd OpenBLAS-0.2.20
make NO_AFFINITY=1 USE_OPENMP=1  TARGET=HASWELL
make PREFIX=/opt/OpenBLAS install  TARGET=HASWELL
echo /opt/OpenBLAS/lib | sudo tee -a /etc/ld.so.conf.d/openblas.conf
sudo ldconfig

##3 Code_Aster with OpenBLAS
並列版の前に単一版をインストールします。

cd ~/software
tar xf aster-full-src-14.6.0-1.noarch.tar.gz
cd aster-full-src-14.6.0
sed -i "s:PREFER_COMPILER\ =\ 'GNU':PREFER_COMPILER\ =\'GNU_without_MATH'\nMATHLIB=\ '/opt/OpenBLAS/lib/libopenblas.a':g" setup.cfg
python3 setup.py install

私の環境ではサマリーは以下でした。

...
--------------------------------------------------------------------------------
     SUMMARY OF INSTALLATION
--------------------------------------------------------------------------------
...

Installation of   : aster 14.6.0
Destination       : /opt/aster
Elapsed time      : 519.89 s
                                                                      [  OK  ]
Installation of   : Code_Aster + 9 of its prerequisites
Destination       : /opt/aster
Elapsed time      : 1330.75 s
                                                                      [  OK  ]

テスト計算も実施してみます。

/opt/aster/bin/as_run --vers=14.6 --test forma01a

...
as_run 2020.0

------------------------------------------------------------
--- DIAGNOSTIC JOB : <A>_ALARM
------------------------------------------------------------

アラームが出ますが計算できているようです。


ここで並列計算用のホストファイルを作成しておきます。

echo "$HOSTNAME cpu=$(cat /proc/cpuinfo | grep processor | wc -l)" > /opt/aster/etc/codeaster/mpi_hostfile

##4 ScaLAPACK
解凍してインストールしていきます。
scalapack.tgzを先に/build/download へ配置してからセットアップします。

cd ~/software
tar xf scalapack_installer.tgz 
mkdir -p scalapack_installer/build/download
cp scalapack-2.0.0.tgz scalapack_installer/build/download/
mv scalapack_installer/build/download/scalapack-2.0.0.tgz scalapack_installer/build/download/scalapack.tgz
cd scalapack_installer
./setup.py --lapacklib=/opt/OpenBLAS/lib/libopenblas.a --mpicc=mpicc --mpif90=mpif90 --mpiincdir=/usr/lib/x86_64-linux-gnu/openmpi/include --ldflags_c=-fopenmp --ldflags_fc=-fopenmp --prefix=/opt/scalapack

##5 Parmetis,Scotch,MUMPS
###5.1 Parmetis
解凍してmetis.hを編集してからインストールします。

cd ~/software
tar xf parmetis-4.0.3.tar.gz 
cd parmetis-4.0.3
sed -i -e 's/#define IDXTYPEWIDTH 32/#define IDXTYPEWIDTH 64/' metis/include/metis.h
make config prefix=/opt/parmetis-4.0.3 
make
make install

###5.2 Scotch
先ほど解凍したaster-full-src-14.6.0/SRC に含まれているscotch-6.0.4-aster7.tar.gz を/opt に解凍します。
解凍したscotch-6.0.4/src に移りビルドします。

cd /opt
tar xf ~/software/aster-full-src-14.6.0/SRC/scotch-6.0.4-aster7.tar.gz
cd scotch-6.0.4/src
make scotch esmumps ptscotch ptesmumps CCD=mpicc

###5.3 MUMPS
これについても、aster-full-src-14.6.0/SRC に含まれている mumps-5.1.2-aster7.tar.gz を/opt に解凍して移動します。

cd /opt
tar xf ~/software/aster-full-src-14.6.0/SRC/mumps-5.1.2-aster7.tar.gz
cd mumps-5.1.2

この場所に下記のようなMakefile.inc を作成します。

**Makefile.inc**(クリックして表示)
Makefile.inc
################################################################################
ISCOTCH    = -I/opt/aster/public/metis-5.1.0/include -I/opt/parmetis-4.0.3/include -I/opt/scotch-6.0.4/include
LSCOTCH    = -L/opt/aster/public/metis-5.1.0/lib -L/opt/parmetis-4.0.3/lib -L/opt/scotch-6.0.4/lib -L/opt/scalapack/lib -Wl,-Bdynamic -lesmumps -lptscotch -lptscotcherr -lptscotcherrexit -lscotch -lscotcherr -lscotcherrexit 
LPORDDIR = $(topdir)/PORD/lib/
IPORD    = -I$(topdir)/PORD/include/
LPORD    = -L$(LPORDDIR) -lpord
LMETIS    = -L/opt/aster/public/metis-5.1.0/lib -L/opt/parmetis-4.0.3/lib -L/opt/scotch-6.0.4/lib -L/opt/scalapack/lib -Wl,-Bdynamic -lparmetis  -Wl,-Bdynamic -lmetis  
ORDERINGSF  = -Dpord -Dmetis -Dparmetis -Dscotch -Dptscotch
ORDERINGSC  = $(ORDERINGSF)
LORDERINGS = $(LMETIS) $(LPORD) $(LSCOTCH)
IORDERINGSF = $(ISCOTCH)
IORDERINGSC = $(IMETIS) $(IPORD) $(ISCOTCH)
################################################################################

PLAT    =
LIBEXT  = .a
OUTC    = -o 
OUTF    = -o 
RM      = /bin/rm -f
CC      = mpicc
FC      = mpif90
FL      = mpif90
# WARNING: AR must ends with a blank space!
AR      = /usr/bin/ar rcs 
#
RANLIB  = echo

#
INCPAR = -I/opt/aster/public/metis-5.1.0/include -I/opt/parmetis-4.0.3/include -I/opt/scotch-6.0.4/include
LIBPAR = 
#
INCSEQ = -I$(topdir)/libseq
LIBSEQ = -L$(topdir)/libseq -lmpiseq

#
LIBBLAS = -L/opt/aster/public/metis-5.1.0/lib -L/opt/parmetis-4.0.3/lib -L/opt/scotch-6.0.4/lib -L/opt/scalapack/lib -Wl,-Bdynamic -lpthread -lm -lblas -llapack -lscalapack -L/opt/OpenBLAS/lib -lopenblas 
LIBOTHERS =  -L/opt/aster/public/metis-5.1.0/lib -L/opt/parmetis-4.0.3/lib -L/opt/scotch-6.0.4/lib -L/opt/scalapack/lib -Wl,-Bdynamic -ldl -lutil -lpthread   
#Preprocessor defs for calling Fortran from C (-DAdd_ or -DAdd__ or -DUPPER)
CDEFS   = -D_USE_MPI=1 -DHAVE_MPI=1 -D_USE_OPENMP=1 -DHAVE_METIS_H=1 -D_HAVE_METIS=1 -DHAVE_METIS=1 -DHAVE_PARMETIS_H=1 -D_HAVE_PARMETIS=1 -DHAVE_PARMETIS=1 -DHAVE_STDIO_H=1 -DHAVE_SCOTCH=1 -DAdd_ -Dmetis -Dparmetis

#Begin Optimized options
OPTF    = -O -fPIC -DPORD_INTSIZE64 -fopenmp
OPTL    = -O -Wl,--export-dynamic -fopenmp -L/opt/aster/public/metis-5.1.0/lib -L/opt/parmetis-4.0.3/lib -L/opt/scotch-6.0.4/lib -L/opt/scalapack/lib -L/usr/lib -L/usr/lib/x86_64-linux-gnu/openmpi/lib -L/opt/aster/public/metis-5.1.0/lib -L/opt/parmetis-4.0.3/lib -L/opt/scotch-6.0.4/lib -L/opt/scalapack/lib -L/usr//lib -L/usr/lib/x86_64-linux-gnu/openmpi/lib -Lnow -Lrelro -L/opt/aster/public/metis-5.1.0/lib -L/opt/parmetis-4.0.3/lib -L/opt/scotch-6.0.4/lib -L/opt/scalapack/lib -L/usr//lib -L/usr/lib/x86_64-linux-gnu/openmpi/lib -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi -lgfortran -lquadmath -lpthread -L/opt/aster/public/metis-5.1.0/lib -L/opt/parmetis-4.0.3/lib -L/opt/scotch-6.0.4/lib -L/opt/scalapack/lib -L/usr//lib -L/usr/lib/x86_64-linux-gnu/openmpi/lib
OPTC    = -O -fPIC -fopenmp
#End Optimized options

INCS = $(INCPAR)
LIBS = $(LIBPAR)
LIBSEQNEEDED = 

準備ができたらビルドします。

make all

##6 Petsc
これも同じく /opt で解凍します。
/opt/petsc-3.9.4/config/BuildSystem/config/packages にある metis.py ファイルの43~48行目をコメントアウトします。
さらにOpenMPIのライブラリをLD_LIBRARY_PATHに登録してから、configure にhypreの保存先を指定して実行し、ビルドします。

cd /opt
tar xf ~/software/petsc-3.9.4.tar.gz
cd petsc-3.9.4
sed -i '43,48 s/^/#/g' config/BuildSystem/config/packages/metis.py
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/openmpi/lib/:$LD_LIBRARY_PATH
./configure --with-debugging=0 COPTFLAGS=-O CXXOPTFLAGS=-O FOPTFLAGS=-O --with-shared-libraries=0 --with-scalapack-dir=/opt/scalapack --PETSC_ARCH=linux-metis-mumps --with-metis-dir=/opt/aster/public/metis-5.1.0 --with-parmetis-dir=/opt/parmetis-4.0.3 --with-ptscotch-dir=/opt/scotch-6.0.4 --LIBS="-lgomp" --with-mumps-dir=/opt/mumps-5.1.2 -with-x=0 --with-blas-lapack-lib=[/opt/OpenBLAS/lib/libopenblas.a] --download-ml=yes --download-hypre=[path/to/hypre]
make PETSC_DIR=/opt/petsc-3.9.4 PETSC_ARCH=linux-metis-mumps all

##7 並列版Code_Aster

/opt/aster/etc/codeaster/asrun の mpi_get_procid_cmdの部分を書き換えます。

sed -i 's/mpi_get_procid_cmd.*/mpi_get_procid_cmd : echo $OMPI_COMM_WORLD_RANK/'  /opt/aster/etc/codeaster/asrun

Code_Aster のソースファイル内に並列版Code_Aster のソースファイルがあるので解凍して移動します。

cd ~/software/aster-full-src-14.6.0/SRC
tar xf aster-14.6.0.tgz
cd aster-14.6.0

waftools/mathematics.py の362~364行目をコメントアウトします。

sed -i '362,364 s/^/#/g' waftools/mathematics.py

次に現在のディレクトリ内(aster-full-src-14.6.0/SRC/aster-14.6.0)に下に示すような
Ubuntu_gnu_mpi.py と Ubuntu_gnu.py を作成します。

**Ubuntu_gnu_mpi.py**(クリックして表示)
Ubuntu_gnu_mpi.py
# encoding: utf-8

"""
Fichier de configuration WAF pour version parallèle sur Ubuntu 14.6 :
- Compilateur : GNU
- MPI         : système (OpenMPI, Ubuntu 14.6)
- BLAS        : OpenBLAS
- Scalapack   : système (Ubuntu 14.6)
- PETSc       : 
"""

import Ubuntu_gnu

def configure(self):
    opts = self.options
    Ubuntu_gnu.configure(self)

    self.env.prepend_value('LIBPATH', [
        '/opt/petsc-3.9.4/linux-metis-mumps/lib',
        '/opt/parmetis-4.0.3/lib',
        '/opt/mumps-5.1.2/lib',])

    self.env.prepend_value('INCLUDES', [
        '/opt/petsc-3.9.4/linux-metis-mumps/include',
        '/opt/petsc-3.9.4/include',
        '/usr/include/superlu',
        '/opt/parmetis-4.0.3/include',
        '/opt/mumps-5.1.2/include',])

    self.env.append_value('LIB', ('X11',))

    opts.parallel = True

    opts.enable_mumps  = True
    opts.mumps_version = '5.1.2'
    opts.mumps_libs = 'dmumps zmumps smumps cmumps mumps_common pord metis scalapack openblas esmumps scotch scotcherr'
#    opts.embed_mumps = True

    opts.enable_petsc = True
    opts.petsc_libs='petsc HYPRE ml'
#    opts.petsc_libs='petsc'
#    opts.embed_petsc = True

#    opts.enable_parmetis  = True
    self.env.append_value('LIB_METIS', ('parmetis'))
    self.env.append_value('LIB_SCOTCH', ('ptscotch','ptscotcherr','ptscotcherrexit','ptesmumps'))

**Ubuntu_gnu.py**(クリックして表示)
Ubuntu_gnu.py
# encoding: utf-8

"""
Fichier de configuration WAF pour version séquentielle sur Ubuntu 14.6 :
- Compilateur : GNU
- BLAS        : OpenBLAS
"""
import os

def configure(self):
    opts = self.options

    # mfront path
#    self.env.TFELHOME = '/opt/tfel-3.2.0'

    self.env.append_value('LIBPATH', [
        '/opt/aster/public/hdf5-1.10.3/lib',
        '/opt/aster/public/med-4.0.0/lib',
        '/opt/aster/public/metis-5.1.0/lib',
        '/opt/scotch-6.0.4/lib',
        '/opt/scalapack/lib',
        '/opt/OpenBLAS/lib',])
#        '/opt/tfel-3.2.0/lib',

    self.env.append_value('INCLUDES', [
        '/opt/aster/public/hdf5-1.10.3/include',
        '/opt/aster/public/med-4.0.0/include',
        '/opt/aster/public/metis-5.1.0/include',
        '/opt/scotch-6.0.4/include',
        '/opt/scalapack/include',
        '/opt/OpenBLAS/include'])
#        '/opt/tfel-3.2.0/include',

    opts.maths_libs = 'openblas superlu'
#    opts.embed_math = True

    opts.enable_hdf5 = True
    opts.hdf5_libs  = 'hdf5 z'
#    opts.embed_hdf5 = True

    opts.enable_med = True
    opts.med_libs  = 'med stdc++'
#    opts.embed_med  = True

    opts.enable_mfront = False

    opts.enable_scotch = True
#    opts.embed_scotch  = True

    opts.enable_homard = True
#    opts.embed_aster    = True
#    opts.embed_fermetur = True

    # add paths for external programs
#    os.environ['METISDIR'] = '/opt/aster/public/metis-5.1.0'
#    os.environ['GMSH_BIN_DIR'] = '/opt/aster/public/gmsh-3.0.6-Linux/bin'
    os.environ['HOMARD_ASTER_ROOT_DIR'] = '/opt/aster/public/homard-11.12'

    opts.with_prog_metis = True
#    opts.with_prog_gmsh = True
    # salome: only required by few testcases
    # europlexus: not available on all platforms
#    opts.with_prog_miss3d = True
    opts.with_prog_homard = True
#    opts.with_prog_ecrevisse = True
    opts.with_prog_xmgrace = True

準備ができたらインストールしていきます。

export ASTER_ROOT=/opt/aster
export PYTHONPATH=/$ASTER_ROOT/lib/python3.6/site-packages/:$PYTHONPATH
./waf configure --use-config-dir=$ASTER_ROOT/14.6/share/aster --use-config=Ubuntu_gnu_mpi --prefix=$ASTER_ROOT/PAR14.6MUPT
./waf install -p --jobs=1

完了したら、ASTKでCode_Aster並列版が使用できるように14.6MUPTという名前で登録します。
/opt/aster/etc/codeaster/ に aster というファイルがありますので、それの最後の行に以下のように追加します。

/opt/aster/etc/codeaster/aster
# Code_Aster versions
# versions can be absolute paths or relative to ASTER_ROOT
# examples : NEW11, /usr/lib/codeaster/NEW11

# default version (overridden by --vers option)
default_vers : stable

# available versions
# DO NOT EDIT FOLLOWING LINE !
#?vers : VVV?
vers : stable:/opt/aster/14.6/share/aster
vers : 14.6MUPT:/opt/aster/PAR14.6MUPT/share/aster

以上で全て完了ですが、このインストール方法ではconfig.txtとprofile.shが見つからないといわれるので
所定の位置にそれらのリンクを張ります。

ln -s /opt/aster/PAR14.6MUPT/share/aster/config.txt /opt/aster/PAR14.6MUPT/config.txt
ln -s /opt/aster/PAR14.6MUPT/share/aster/profile.sh /opt/aster/PAR14.6MUPT/profile.sh

並列版を指定してテストしてみます。

/opt/aster/bin/as_run --vers=PAR14.6MUPT --test forma01a
...

(*) cpu and system times may be not correctly counted using mpirun.

as_run 2020.0

------------------------------------------------------------
--- DIAGNOSTIC JOB : <A>_ALARM
------------------------------------------------------------

アラームが出ますがMPIで計算できているようです。
以上で終わりです。ありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?