Open MX Truong Vinh Truong Duy The University

  • Slides: 14
Download presentation
Open. MXのコンパイル方法 Truong Vinh Truong Duy (The University of Tokyo) 2014/10/10

Open. MXのコンパイル方法 Truong Vinh Truong Duy (The University of Tokyo) 2014/10/10

Open. MXのダウンロード 1. Open. MXのダウンロード % wget http: //www. openmx-square. org/openmx 3. 7. tar.

Open. MXのダウンロード 1. Open. MXのダウンロード % wget http: //www. openmx-square. org/openmx 3. 7. tar. gz % tar openmx 3. 7. tar. gz 2. パッチのダウンロード % % wget http: //www. openmx-square. org/bugfixed/14 Feb 17/patch 3. 7. 8. tar. gz cp. /patch 3. 7. 8. tar. gz openmx 3. 7/source cd openmx 3. 7/source tar zxvf patch 3. 7. 8. tar. gz 3. これから、Open. MXのコンパイルへ 2

Open. MX Ver. 3. 7のコンパイル 1. openmx 3. 7/source/makefileのCC, FC, LIBを適切に設定 する CC: C

Open. MX Ver. 3. 7のコンパイル 1. openmx 3. 7/source/makefileのCC, FC, LIBを適切に設定 する CC: C コンパイラ FC: Fortran コンパイラ LIB: FFTライブラリ, LAPACKとBLASライブラリ 2. コンパイル % make 3. インストール % make install 4. 実行ファイル openmx 3. 7/work/openmx 3

CC, FC, LIBの基本的な設定 FFTROOT=/path/to/fft/folder (FFTライブラリ) LBSROOT=/path/to/lapack/and/blas/folder (LAPACKとBLASライブラリ) openmp_flag = -openmp (インテルコンパイラ) openmp_flag = -fopenmp

CC, FC, LIBの基本的な設定 FFTROOT=/path/to/fft/folder (FFTライブラリ) LBSROOT=/path/to/lapack/and/blas/folder (LAPACKとBLASライブラリ) openmp_flag = -openmp (インテルコンパイラ) openmp_flag = -fopenmp (GNUコンパイラ) openmp_flag = -mp -Dnosse (PGIコンパイラ) fortran_lib = -lifcore (インテルコンパイラ) fortran_lib = -lgfortran (GNUコンパイラ) fortran_lib = -pgf 90 libs (PGIコンパイラ) CC=mpicc -O 3 openmp_flag -I/$(FFTROOT)/include -I/$(LBSROOT)/include FC=mpif 90 -O 3 -I/$(LBSROOT)/include LIB=-L/$(FFTROOT)/lib -lfftw -L/$(LBSROOT)/lib -llapack –lblas fortran_lib 4

サンプル 1:インテルコンパイラとMKLライブラリ FFTROOT=/usr/local/fftw 3 (FFTライブラリ) LBSROOT=/opt/intel/mkl (MKLのLAPACKとBLASライブラり) openmp_flag = -openmp (インテルコンパイラ) fortran_lib = -lifcore

サンプル 1:インテルコンパイラとMKLライブラリ FFTROOT=/usr/local/fftw 3 (FFTライブラリ) LBSROOT=/opt/intel/mkl (MKLのLAPACKとBLASライブラり) openmp_flag = -openmp (インテルコンパイラ) fortran_lib = -lifcore (インテルコンパイラ) CC=mpicc -O 3 -openmp -I/$(FFTROOT)/include -I/$(LBSROOT)/include FC=mpiifort -O 3 -I/$(LBSROOT)/include LIB=-L/$(FFTROOT)/lib -lfftw 3 -L/$(LBSROOT)/lib/intel 64 -lmkl_intel_lp 64 -lmkl_intel_thread -lmkl_core -lpthread -lifcore 5

サンプル 2:PGIコンパイラとACMLライブラリ FFTROOT=/usr/local/fftw 3 (FFTライブラリ) LBSROOT=/usr/local/acml/gnu 64 (ACMLのLAPACKとBLASライブラり) openmp_flag = -mp -Dnosse (PGIコンパイラ) fortran_lib

サンプル 2:PGIコンパイラとACMLライブラリ FFTROOT=/usr/local/fftw 3 (FFTライブラリ) LBSROOT=/usr/local/acml/gnu 64 (ACMLのLAPACKとBLASライブラり) openmp_flag = -mp -Dnosse (PGIコンパイラ) fortran_lib = -pgf 90 libs (PGIコンパイラ) CC=mpicc -O 3 -mp -Dnosse -I/$(FFTROOT)/include -I/$(LBSROOT)/include FC=mpif 90 -O 3 -I/$(LBSROOT)/include LIB=-L/$(FFTROOT)/lib -lfftw 3 -L/$(LBSROOT)/lib/ -lacml -pgf 90 libs 6

サンプル 3:GNUコンパイラとMKLライブラリ FFTROOT=/usr/local/fftw 3 LBSROOT=/opt/intel/mkl openmp_flag = -fopenmp fortran_lib = -lgfortran (FFTライブラリ) (MKLのLAPACKとBLASライブラり) (GNUコンパイラ)

サンプル 3:GNUコンパイラとMKLライブラリ FFTROOT=/usr/local/fftw 3 LBSROOT=/opt/intel/mkl openmp_flag = -fopenmp fortran_lib = -lgfortran (FFTライブラリ) (MKLのLAPACKとBLASライブラり) (GNUコンパイラ) CC=mpicc -O 3 -fopenmp -I/$(FFTROOT)/include -I/$(LBSROOT)/include FC=mpif 90 -O 3 -I/$(LBSROOT)/include LIB=-L/$(FFTROOT)/lib -lfftw 3 -L/$(LBSROOT)/lib/intel 64 -lmkl_intel_lp 64 -lmkl_intel_thread -lmkl_core -lpthread -lgfortran 7

サンプル 4:GNUコンパイラとACMLライブラリ FFTROOT=/usr/local/fftw 3 (FFTライブラリ) LBSROOT=/usr/local/acml/gnu 64 (ACMLのLAPACKとBLASライブラり) openmp_flag = -fopenmp (GNUコンパイラ) fortran_lib =

サンプル 4:GNUコンパイラとACMLライブラリ FFTROOT=/usr/local/fftw 3 (FFTライブラリ) LBSROOT=/usr/local/acml/gnu 64 (ACMLのLAPACKとBLASライブラり) openmp_flag = -fopenmp (GNUコンパイラ) fortran_lib = -lgfortran (GNUコンパイラ) CC=mpicc -O 3 -fopenmp -I/$(FFTROOT)/include -I/$(LBSROOT)/include FC=mpif 90 -O 3 -I/$(LBSROOT)/include LIB=-L/$(FFTROOT)/lib -lfftw 3 -L/$(LBSROOT)/lib/ -lacml -lgfortran 8

役に立つコマンド l コンパイラが分からないとき %mpicc -compile-info (MPICHの場合) %mpicc -help (Open. MPIの場合) l フォートランライブラリが見つからないとき /usr/bin/ld: cannot

役に立つコマンド l コンパイラが分からないとき %mpicc -compile-info (MPICHの場合) %mpicc -help (Open. MPIの場合) l フォートランライブラリが見つからないとき /usr/bin/ld: cannot find -lifcore (インテルコンパイラ) /usr/bin/ld: cannot find -lpgf 90 (PGIコンパイラ) /usr/bin/ld: cannot find -lgfortran (GNUコンパイラ) まず、コンパイラのフォルダーを探す %which ifort (インテルコンパイラ) /opt/intel/fce/10. 0. 026/bin/ifort %which pgf 90 (PGIコンパイラ) /opt/pgi/linux 86 -64/7. 0/bin/pgf 90 %which gfortran (GNUコンパイラ) /usr/bin/gfortran 次に、LIBに追加 LIB=. . . -L/opt/intel/fce/10. 0. 026/lib -lifcore (インテルコンパイラ) LIB=. . . -L/opt/pgi/linux 86 -64/7. 0/lib -pgf 90 libs (PGIコンパイラ) LIB=. . . -L/usr/lib -lgfortran (GNUコンパイラ) 9

よく出るエラーメッセージ 1 l オブジェクトファイルがありません gcc: openmx. o: No such file or directory gcc: openmx_common.

よく出るエラーメッセージ 1 l オブジェクトファイルがありません gcc: openmx. o: No such file or directory gcc: openmx_common. o: No such file or directory ……… OR icc: error #10236: File not found: 'elpa 1. o' icc: error #10236: File not found: 'solve_evp_real. o' icc: error #10236: File not found: 'solve_evp_complex. o‘ ……… l 原因:(1) openmp_flagが違う、または、(2)mpicc、mpif 90が違う 解決法 (1) openmp_flagをチェック openmp_flag = -openmp (インテルコンパイラ) openmp_flag = -fopenmp (GNUコンパイラ) openmp_flag = -mp -Dnosse (PGIコンパイラ) l (2)mpicc、mpif 90をチェック(mpiccでなくmpiicc、mpipgcc。 mpif 90でなく mpiifort、mpifc 77、mpipgf 77 、mpipgf 90など ) 10

よく出るエラーメッセージ 2 l MPIフォートランライブラリが見つかりません elpa 1. o: In function `elpa 1_mp_tridiag_real_': elpa 1. f

よく出るエラーメッセージ 2 l MPIフォートランライブラリが見つかりません elpa 1. o: In function `elpa 1_mp_tridiag_real_': elpa 1. f 90: (. text+0 x 2 b 7): undefined reference to elpa 1. f 90: (. text+0 x 2 d 6): undefined reference to elpa 1. f 90: (. text+0 x 2 f 5): undefined reference to elpa 1. f 90: (. text+0 x 314): undefined reference to ……… `mpi_comm_rank_' `mpi_comm_size_' `mpi_comm_rank_' `mpi_comm_size_‘ l 原因:リンクをするとき、CコンパイラがMPIフォートランライブラ リを見つけられない。特に、インテルコンパイラによく起こる問 題。 l 解決法 - LIBにMPIフォートランライブラリを追加 LIB =. . . -lmpi_f 77 -lmpi_f 90 -lifcore 11

よく出るエラーメッセージ 3 l Open. MPランタイムライブラリが見つかりません /libmkl_intel_thread. a(dgeqrf_par. o): In function `mkl_lapack_dgeqrf': __tmp_par_dgeqrf_omp. f: (.

よく出るエラーメッセージ 3 l Open. MPランタイムライブラリが見つかりません /libmkl_intel_thread. a(dgeqrf_par. o): In function `mkl_lapack_dgeqrf': __tmp_par_dgeqrf_omp. f: (. text+0 x 730): undefined reference to `__kmpc_critical' __tmp_par_dgeqrf_omp. f: (. text+0 x 833): undefined reference to `__kmpc_flush' __tmp_par_dgeqrf_omp. f: (. text+0 x 85 c): undefined reference to `__kmpc_flush' __tmp_par_dgeqrf_omp. f: (. text+0 xa 32): undefined reference to `__kmpc_flush' ……… libmkl_intel_thread. a(zher 2 k_drv. o): In function `mkl_blas_zher 2 k': . . /blas/thread/32 e/level 3/zher 2 k. c: (. text+0 x 66 b): undefined reference to `__kmpc_global_thread_num'. . /blas/thread/32 e/level 3/zher 2 k. c: (. text+0 x 68 b): undefined reference to `__kmpc_ok_to_fork'. . /blas/thread/32 e/level 3/zher 2 k. c: (. text+0 x 6 aa): undefined reference to `__kmpc_push_num_threads' l 原因:リンクをするとき、CコンパイラがOpen. MPランタイムライ ブラリを見つけられない。特に、MKLライブラリによく起こる問 題。 l 解決法 - LIBにOpen. MPランタイムライブラリを追加 LIB =. . . -liomp 5 -lpthread 12

よく出るエラーメッセージ 4 l MKLライブラリが見つかりません /usr/bin/ld: cannot find -lmkl_intel_lp 64 collect 2: ld returned 1

よく出るエラーメッセージ 4 l MKLライブラリが見つかりません /usr/bin/ld: cannot find -lmkl_intel_lp 64 collect 2: ld returned 1 exit status make: *** [openmx] Error 1 l 原因:リンクをするとき、CコンパイラがダイナミックにMKLライ ブラリを見つけられない。特に、MKLライブラリによく起こる問 題。 l 解決法 - LIBのMKLイブラリ部分をダイナミックからスタティックに変更 LIB=-L/$(FFTROOT)/lib -lfftw 3 -L/$MKLROOT/lib/intel 64 -Wl, --start-group $(MKLROOT)/lib/intel 64/libmkl_lapack 95_lp 64. a $(MKLROOT)/lib/intel 64/libmkl_intel_thread. a $(MKLROOT)/lib/intel 64/libmkl_core. a -Wl, --end-group -lifcore 13