QuantumEspressoをUbuntuにインストール

VASPを使っていたけど、お金かかるからフリーのQuantumEspresso使うことを検討する。

GNUコンパイラでビルド

QuantomEspressをダウンロード

QuantomEspressのHPからダウンロードする。

ダウンロードしたら解凍

tar -xzvf qe-7.1-ReleasePack.tar.gz

QuantomEspressをビルド

cmakeでビルドする。

cd qe-7.1
mkdir build; cd build
cmake -DQE_ENABLE_MPI=OFF -DCMAKE_C_COMPILER=gcc -DCMAKE_Fortran_COMPILER=gfortran -DQE_FFTW_VENDOR=Internal ../
make
mv bin/* ~/.local/bin/

-DQE_FFTW_VENDOR=Internalつけないと怒られた。MPIはとりあえずいらない。

実行・結果

下記にあるFeの計算をやってみる。

pw.x < Fe.scf.in > gnu.out

無事計算できたようだ。

General routines
calbec       :      0.29s CPU      0.30s WALL (   16876 calls)
fft          :      0.14s CPU      0.14s WALL (     338 calls)
ffts         :      0.00s CPU      0.00s WALL (      46 calls)
fftw         :     16.34s CPU     16.58s WALL (  243244 calls)
interpolate  :      0.01s CPU      0.01s WALL (      24 calls)

PWSCF        :     27.30s CPU     28.09s WALL

FFTW3

最初、QE_FFTW_VENDORをつけないとエラーが出たとき、

Failed to find an external FFTW library. Alternatively, '-DQE_FFTW_VENDOR=Internal' may be used to enable reference FFTW at a performance loss compared to optimized libraries.

というエラーがでて、これによるとQE_FFTW_VENDOR=Internalだと遅いようなので、FFTW3を入れてみる。

wget https://www.fftw.org/fftw-3.3.10.tar.gz 
tar -xzvf fftw-3.3.10.tar.gz 
mkdir build; cd build 
cmake -DENABLE_THREADS=ON -DENABLE_OPENMP=ON ../ 
make 
sudo make install

cmakeのオプションがあってるんだかわからないが、何もつけずにビルドしたら、Quantum Espressoビルドする時に、undefined reference to 'fftw_init_threads'とか怒られたので、つけてみたらうまくいった。

もう一回Buildする。

rm -rf build
mkdir build; cd build
cmake -DQE_ENABLE_MPI=OFF -DCMAKE_C_COMPILER=gcc -DCMAKE_Fortran_COMPILER=gfortran -DQE_FFTW_VENDOR=FFTW3 ../
make
mv bin/* ~/.local/bin/

実行・結果

pw.x < Fe.scf.in > gnu_fftw3.out
General routines
calbec       :      0.29s CPU      0.30s WALL (   16876 calls)
fft          :      0.22s CPU      0.23s WALL (     338 calls)
ffts         :      0.05s CPU      0.05s WALL (      46 calls)
fftw         :     21.54s CPU     21.78s WALL (  243244 calls)
interpolate  :      0.06s CPU      0.06s WALL (      24 calls)

PWSCF : 32.80s CPU 33.49s WALL

なんか遅くなってる。。。どうもFFTW3が遅い。

Intelコンパイラでビルド

インテルコンパイラは今や無料でインストールできるので、Intelコンパイラで早くならないか試してみる。CPUはcore i7なのでインテルコンパイラの恩恵は十分受けられるはず。インテルコンパイラのインストールは下記参考。

FFTW3をビルド

rm -rf build
mkdir build; cd build 
cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort -DENABLE_THREADS=ON -DENABLE_OPENMP=ON ../
make 
sudo make install

QE_FFTW_VENDOR=Intel_DFTIとか、QE_FFTW_VENDOR=Intel_FFTW3とか色々試してみたが、どれもうまく行かなかった。

QuantomEspressをビルド

rm -rf build
mkdir build; cd build
cmake -DQE_ENABLE_MPI=OFF -DCMAKE_C_COMPILER=icc -DCMAKE_Fortran_COMPILER=ifort -DQE_FFTW_VENDOR=FFTW3 ../
make
mv bin/* ~/.local/bin/

実行・結果

pw.x < Fe.scf.in > intel.out
General routines
calbec       :      0.30s CPU      0.30s WALL (   16876 calls)
fft          :      0.22s CPU      0.23s WALL (     338 calls)
ffts         :      0.04s CPU      0.05s WALL (      46 calls)
fftw         :     19.84s CPU     20.02s WALL (  243244 calls)
interpolate  :      0.05s CPU      0.06s WALL (      24 calls)


PWSCF        :     30.03s CPU     30.63s WALL

インテル遅くね??

系が大きくなれば早くなるのだろうか?

CUDA

CUDAを使ってみたい。

nvidia hpcインストール

まずは、nvidia hpcをインストール。下記のサイトの通りにやる。

wget https://developer.download.nvidia.com/hpc-sdk/22.5/nvhpc_2022_225_Linux_x86_64_cuda_11.7.tar.gz
tar xpzf nvhpc_2022_225_Linux_x86_64_cuda_11.7.tar.gz
nvhpc_2022_225_Linux_x86_64_cuda_11.7/install

QuantomEspressをビルド

cmake -DCMAKE_C_COMPILER=nvc -DCMAKE_Fortran_COMPILER=nvfortran -DQE_FFTW_VENDOR=Internal -DQE_ENABLE_CUDA=ON ../

実行・結果

pw.x < Fe.scf.in > cuda.out
Segmentation fault (core dumped)

と出て、そもそも実行できないorz。

cuFFTとか色々使って一日格闘してみたがうまく行かなかったのでCUDA計画は中止。

MPI

mpiでスピードアップをねらう。

cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_Fortran_COMPILER=mpif90 -DQE_FFTW_VENDOR=FFTW3 ../
make

FFTW3もMPIでビルドしないとだめ?

実行・結果

mpirun -np 4 pw.x < Fe.scf.in > mpi.out
Authorization required, but no authorization protocol specified
Authorization required, but no authorization protocol specified
Note: The following floating-point exceptions are signalling: IEEE_DENORMAL
Note: The following floating-point exceptions are signalling: IEEE_DENORMAL
Note: The following floating-point exceptions are signalling: IEEE_DENORMAL

実行時になんかメッセージが出るんだが?

General routines
calbec       :      0.47s CPU      0.48s WALL (   16918 calls)
fft          :      0.17s CPU      0.17s WALL (     338 calls)
ffts         :      0.03s CPU      0.03s WALL (      46 calls)
fftw         :     14.02s CPU     14.28s WALL (  243116 calls)
interpolate  :      0.04s CPU      0.04s WALL (      24 calls)

Parallel routines

PWSCF        :     20.37s CPU     20.85s WALL

ちょっとは早くなってる。

QE_FFTW_VENDOR=Internal

QE_FFTW_VENDOR=Internalにしたらどうなるだろうか?

cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_Fortran_COMPILER=mpif90 -DQE_FFTW_VENDOR=Internal ../
make

実行・結果

mpirun -np 4 pw.x < Fe.scf.in > mpi_internal.out
Authorization required, but no authorization protocol specified
Authorization required, but no authorization protocol specified
Note: The following floating-point exceptions are signalling: IEEE_DENORMAL
Note: The following floating-point exceptions are signalling: IEEE_DENORMAL

相変わらずなんかのメッセージが表示される。

General routines
 albec       :      0.42s CPU      0.44s WALL (   16918 calls)
fft          :      0.12s CPU      0.12s WALL (     338 calls)
ffts         :      0.00s CPU      0.00s WALL (      46 calls)
fftw         :     10.44s CPU     10.77s WALL (  243116 calls)
interpolate  :      0.01s CPU      0.01s WALL (      24 calls)

Parallel routines

PWSCF        :     16.58s CPU     17.20s WALL

Internal FFTWが一番早い。。。

ってことは、gnuコンパイラ+Internal FFTWが最速なのか?

gnuコンパイラ

gnuコンパイラでインストール。ちなみにEnvironmental moduleでintelのオン/オフしている。

cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_Fortran_COMPILER=mpif90 -DQE_FFTW_VENDOR=Internal ../
make

実行・結果

mpirun -np 4 pw.x < Fe.scf.in > mpi_gnu_internal.out
General routines
calbec       :      0.25s CPU      0.27s WALL (   16918 calls)
fft          :      0.09s CPU      0.09s WALL (     338 calls)
ffts         :      0.00s CPU      0.00s WALL (      46 calls)
fftw         :      9.78s CPU     10.16s WALL (  243116 calls)
interpolate  :      0.01s CPU      0.01s WALL (      24 calls)

Parallel routines

PWSCF        :     16.79s CPU     17.57s WALL

差はなかった。

コメントする

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