Skip to content

Building DCore on sekirei with Intel C 2017 and gcc5.1

Yuichi Motoyama edited this page Feb 17, 2019 · 3 revisions

注意点

TRIQSも最新のALPSCoreもBoostのヘッダファイルのみに依存。ただし、C++14を使う場合には、最新のBoost 1.66が必要。 Intel C++はg++のヘッダファイルを利用しているので、C++14をサポートしたgnu5.1をロードする必要あり。 Intel C++ 2016ではTRIQSがコンパイルできない。

インストールの手順

  1. 基本的なライブラリの導入 (Python, Boost 1.66, Eigen3) by MAInstaller
  2. TRIQSライブラリの導入 by MAInstaller
  3. TRIQSアプリ群の導入 (cthyb, DFTTools, hubbard-I).
  4. DCoreの導入
  5. ALPSCoreライブラリの導入 by MAInstaller
  6. ALPSCore/CT-HYB + triqs_interfaceの導入
source /home/issp/materiapps/tool/env-cxx1y.sh

とすると必要なツール・ライブラリへのパスがとおる。 TRIQS のインストール に進んで良い。

インストール後は以下のように環境変数がなっているはず。

source /home/issp/materiapps/tool/env.d/cmakevars.sh
source /home/issp/materiapps/tool/hdf5/hdf5vars-1.8.12-1.sh
source /home/issp/materiapps/tool/fftw/fftwvars-3.3.4-1.sh
source /home/issp/materiapps/tool/python/pythonvars-2.7.11-1.sh
source $HOME/materiapps/eigen3/eigen3vars-3.3.4-0.sh
source $HOME/materiapps/boost/boostvars-1.66.0-0.sh

module remove gnu intel
module add gnu/5.1.0 intel/17.0.4.196

export ALPSCore_DIR=$HOME/opt/ALPSCore

Pythonモジュール

pipを使って必要なモジュールを導入。mpi4pyのインストール時には、適切なmpi環境がロードされていることを確認。 mpi4pyのビルドには数十分かかる。 h5pyは、同じバージョンのC/C++のHDF5ライブラリにリンクされている必要があるので、以下のような扱いが必要。

> pip install Mako mpi4py numpy scipy --user
> HDF5_DIR=$HDF5_ROOT pip install h5py==2.3.1 --user --no-cache-dir

正しいHDF5ライブラリにリンクされていることを確認。

> ldd /home/i0412/i041200/.local/lib/python2.7/site-packages/h5py/h5f.so
	linux-vdso.so.1 =>  (0x00002aaaaaaab000)
	/home/app/intel/compilers_and_libraries_2017.2.174/linux/mkl/lib/intel64_lin/libmkl_core.so (0x00002aaaaacc5000)
	/home/app/intel/compilers_and_libraries_2017.2.174/linux/mkl/lib/intel64_lin/libmkl_sequential.so (0x00002aaaac7b8000)
	libhdf5.so.8 => /home/issp/materiapps/tool/hdf5/hdf5-1.8.12-1/lib/libhdf5.so.8 (0x00002aaaad551000)
	libhdf5_hl.so.8 => /home/issp/materiapps/tool/hdf5/hdf5-1.8.12-1/lib/libhdf5_hl.so.8 (0x00002aaaada31000)
	libpython2.7.so.1.0 => /home/issp/materiapps/tool/python/python-2.7.11-1/lib/libpython2.7.so.1.0 (0x00002aaaadc62000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aaaae0a8000)
	libc.so.6 => /lib64/libc.so.6 (0x00002aaaae2c6000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00002aaaae642000)
	libz.so.1 => /lib64/libz.so.1 (0x00002aaaae846000)
	librt.so.1 => /lib64/librt.so.1 (0x00002aaaaea5d000)
	libm.so.6 => /lib64/libm.so.6 (0x00002aaaaec66000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00002aaaaeedf000)
	/lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
alabaster==0.7.9
appdirs==1.4.2
Babel==2.3.4
backports-abc==0.5
backports.shutil-get-terminal-size==1.0.0
certifi==2017.1.23
cycler==0.10.0
Cython==0.25.2
decorator==4.0.11
docutils==0.13.1
enum34==1.1.6
functools32==3.2.3.post2
h5py==2.3.1
imagesize==0.7.1
ipython==5.3.0
ipython-genutils==0.1.0
Jinja2==2.9.5
Mako==1.0.6
MarkupSafe==0.23
matplotlib==2.0.0
mpi4py==2.0.0
numpy==1.12.1
packaging==16.8
pathlib2==2.2.1
pexpect==4.2.1
pickleshare==0.7.4
prompt-toolkit==1.0.13
ptyprocess==0.5.1
Pygments==2.2.0
pyparsing==2.1.10
python-dateutil==2.6.0
pytz==2016.10
pyzmq==16.0.2
requests==2.13.0
scandir==1.5
scipy==0.19.0
simplegeneric==0.8.1
singledispatch==3.4.0.3
six==1.10.0
snowballstemmer==1.2.1
Sphinx==1.5.3
subprocess32==3.2.7
tornado==4.4.2
traitlets==4.3.2
wcwidth==0.1.7

TRIQSのインストール

品岡製のMAInstallerを使用

テストは並列環境で行う必要あり。テストに使うジョブファイルは以下のとおり。

#!/bin/sh
#QSUB -queue i18cpu
#QSUB -node 1
#QSUB -mpi 24
#QSUB -omp 1
#QSUB -place pack
#QSUB -over false
#PBS -l walltime=0:10:00
#PBS -N test

cd $PBS_O_WORKDIR

source /etc/profile.d/modules.sh

module remove gnu intel
module add gnu/5.1.0 intel/17.0.4.196

make test CTEST_OUTPUT_ON_FAILURE=1

ただし以下のようなエラーがでて多くのテストに失敗する。おそらくmpijobがそれらのテストでは正常に呼ばれていない。 ただ実用上問題なし。

"test.o1038555" 656L, 29523C                                                                                                                                              221,20        32%
Running tests...
/home/issp/materiapps/tool/cmake/cmake-3.2.3-1/bin/ctest --force-new-ctest-process
Test project /home/i0412/i041200/build/triqs
        Start   1: block
  1/188 Test   #1: block ................................***Failed    0.56 sec
MPT ERROR: mpiexec_mpt must be used to launch all MPI applications

        Start   2: gf_empty
  2/188 Test   #2: gf_empty .............................***Failed    0.09 sec
MPT ERROR: mpiexec_mpt must be used to launch all MPI applications

        Start   3: bug1
  3/188 Test   #3: bug1 .................................***Failed    0.02 sec
MPT ERROR: mpiexec_mpt must be used to launch all MPI applications

        Start   4: fourier1
  4/188 Test   #4: fourier1 .............................   Passed    0.18 sec
        Start   5: auto_assign_matrix_gf
  5/188 Test   #5: auto_assign_matrix_gf ................***Failed    0.10 sec
MPT ERROR: mpiexec_mpt must be used to launch all MPI applications

53% tests passed, 88 tests failed out of 188

TRIQS/hubbardI

cmake \
-DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DTRIQS_PATH=$TRIQS_ROOT \
~/git/hubbardI

fortran/temp_script.pyの編集

lapackの代わりにmklを使うように変更する。

$ cat fortran/temp_script.py
import sys
from numpy.f2py import main
sys.argv = [''] +'-c --f77exec=/home/app/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort --f90exec=/home/app/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -m hubbard_I hubbard_I.pyf hubbard_I.f90 -llapack'.split()
main()

以下修正後。

import sys
from numpy.f2py import main
sys.argv = [''] +'-c --f77exec=/home/app/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort --f90exec=/home/app/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -m hubbard_I hubbard_I.pyf hubbard_I.f90 -L${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl'.split()
main()

TRIQS/dfttools

cmake \
-DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DTRIQS_PATH=$TRIQS_ROOT \
~/git/dft_tools

TRIQS/cthyb

cmake \
-DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DTRIQS_PATH=$TRIQS_ROOT \
-DHYBRIDISATION_IS_COMPLEX=ON \
-DLOCAL_HAMILTONIAN_IS_COMPLEX=ON \
~/git/cthyb

DCore

cmake \
-DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DTRIQS_PATH=$TRIQS_ROOT \
~/git/pyDMFT

一応ログインノード上でmake testも通る。

make test
Running tests...
/home/issp/materiapps/tool/cmake/cmake-3.2.3-1/bin/ctest --force-new-ctest-process 
Test project /home/i0412/i041200/build/pyDMFT
    Start 1: parser_test
1/5 Test #1: parser_test ......................   Passed    0.56 sec
    Start 2: dmft_solver
2/5 Test #2: dmft_solver ......................   Passed    1.10 sec
    Start 3: standard_test
3/5 Test #3: standard_test ....................   Passed    0.86 sec
    Start 4: wannier_test
4/5 Test #4: wannier_test .....................   Passed    1.12 sec
    Start 5: U_matrix_cubic_test
5/5 Test #5: U_matrix_cubic_test ..............   Passed    1.52 sec

100% tests passed, 0 tests failed out of 5

Total Test time (real) =   5.17 sec

ALPSCore

品岡製のMAInstallerを使用してv2.1.1 (default_cxx1y.shを使用)をインストールしても良い

ALPSCore/CT-HYB

同じくmasterブランチの最新版を利用。Boostのヘッダファイルライブラリのみに依存。 デフォルトのビルドタイプはReleaseだが、RelWithDebInfoを指定 (-g -O1)。 Intel C++ 2017で-O2以上の最適化オプションを設定すると、 明らかに異なる結果が得られる。多分、オプティマイザのバグ。

cmake \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_CXX_FLAGS="-std=c++1y" \
    -DCMAKE_INSTALL_PREFIX=$HOME/opt/ALPSCore-CTHYB \
    -DCMAKE_VERBOSE_MAKEFILE=ON \
    -DCMAKE_CXX_COMPILER=mpicxx \
    ~/git/CT-HYB

次に、triqs_interfaceをインストールする。 以下からgit cloneする。

https://github.com/shinaoka/triqs_interface

> export ALPSCoreCTHYB_DIR=$HOME/opt/ALPSCore-CTHYB
> cmake \
 -DCMAKE_BUILD_TYPE=Release \
 -DCMAKE_VERBOSE_MAKEFILE=ON\
 -DTRIQS_PATH=$TRIQS_ROOT \
 -DCMAKE_CXX_COMPILER=mpicxx \
 ~/git/triqs_interface