CP2K@京大CRAY

まずGNUコンパイラを準備。

module swap PrgEnv-cray PrgEnv-gnu
module load fftw

ライブラリ類は基本的に

./configure FC=ftn CC=cc CXX=CC –prefix=/somewhere/somepath

make

でビルドできる。

libsmmも、付属のpbs.wlmをオプションだけ変えて使ってバッチジョブでビルドできる。

ちょっとだけ問題だったのはlibint。ビルドの途中でバイナリを実行するのだが、このシステムでは基本的にログインノードで負荷の高いバイナリを実行できない(Illegal Instructionと出て止まる。何か条件はあるんだろうが、具体的には不明で、負荷の高いという表現がよいのかわからない。例えばcp2k.popt等は実行できないが、Hello Worldは動く。今回もbuild~やvrr~の処理が完了し、hrr1~の処理に突入した段階で止まる。makeはsingle coreで実行しているし、serial/parallelの問題というわけでもなさそうだし、ulimit -s unlimitedを実行すればよいというわけでもなかった)。そこで、build_libintが異常終了したタイミングで

cd ~/src/libint-1.1.4/src/lib/libint/src

tssrun /home/b/bxxxxx/src/libint-1.1.4/src/lib/libint/../../../src/bin/libint/build_libint

と会話処理でbuild_libintを実行したのち(要するにMakefileの動きに従って、止まった処理をtssrunで実行)、makeを再開するとビルドできた。

コンパイルを4通りほど試してわかったのは、

・-O3は-O2より30%ほど高速化する

・libsmmとlibxsmmでは速度には違いが無い

 

ひとまず使おうと思うバイナリのコンパイルオプションは以下のとおり。

CC = cc
CPP =
FC = ftn
LD = ftn
AR = ar -r

LIBINT_DIR = /home/b/bxxxxx/src/libint-1.1.4
LIBSMM_DIR = /home/b/bxxxxx/src/cp2k-5.1/tools/build_libsmm
LIBGRID_DIR = /home/b/bxxxxx/src/cp2k-5.1/tools/autotune_grid

CPPFLAGS =
DFLAGS = -D__FFTW3 -D__parallel -D__SCALAPACK -D__HAS_NO_SHARED_GLIBC -D__LIBINT -D__LIBSMM -D__HAS_LIBGRID
CFLAGS = $(DFLAGS)
FCFLAGS = $(DFLAGS) -O3 \
-mavx -funroll-loops -ffast-math -ftree-vectorize \
-ffree-form -ffree-line-length-512 -fno-omit-frame-pointer
LDFLAGS = $(FCFLAGS)
LIBS = -L$(LIBGRID_DIR) -lgrid \
$(LIBINT_DIR)/lib/libderiv.a $(LIBINT_DIR)/lib/libint.a -lstdc++ \
$(LIBSMM_DIR)/lib/libsmm_dnn_cray.gnu.a \
-lfftw3 -lz -ldl

 

テストするとCO.inp、multipole_ch_qu.dbg_f_real.inp、UO2-4x4x4-cs-fixd-npt.inpの3つにWRONGが出る。前二つはほぼteleranceに近い値なので良いとして、UO2-4x4x4-cs-fixd-nptは完全に間違っている。同様のエラーは報告があり、そこでは放っておくということになっている…

-O2にすると、前二つはそのままだがUO2-4x4x4-cs-fixd-nptのWRONGは消えるので、NPTを計算することがあれば大事を取って-O2でコンパイルしたバイナリを使うことにする。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です