-
Notifications
You must be signed in to change notification settings - Fork 14
Building DCore on sekirei with Intel C 2017 and gcc5.1
TRIQSも最新のALPSCoreもBoostのヘッダファイルのみに依存。ただし、C++14を使う場合には、最新のBoost 1.66が必要。 Intel C++はg++のヘッダファイルを利用しているので、C++14をサポートしたgnu5.1をロードする必要あり。 Intel C++ 2016ではTRIQSがコンパイルできない。
- 基本的なライブラリの導入 (Python, Boost 1.66, Eigen3) by MAInstaller
- TRIQSライブラリの導入 by MAInstaller
- TRIQSアプリ群の導入 (cthyb, DFTTools, hubbard-I).
- DCoreの導入
- ALPSCoreライブラリの導入 by MAInstaller
- 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
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
品岡製の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
cmake \
-DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DTRIQS_PATH=$TRIQS_ROOT \
~/git/hubbardI
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()
cmake \
-DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DTRIQS_PATH=$TRIQS_ROOT \
~/git/dft_tools
cmake \
-DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DTRIQS_PATH=$TRIQS_ROOT \
-DHYBRIDISATION_IS_COMPLEX=ON \
-DLOCAL_HAMILTONIAN_IS_COMPLEX=ON \
~/git/cthyb
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
品岡製のMAInstallerを使用してv2.1.1 (default_cxx1y.shを使用)をインストールしても良い
同じく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