Quantum Espressoを色々なライブラリでコンパイルして、自分のPCに最速な状態にする

### 非力なPCで第一原理計算（DFT）のお勉強をしているが、もう限界

書籍を使って第一原理計算のお勉強をしているが、使っているPCのスペックが低いからか、ちょっと動かすたびに計算の待ち時間が生じて、ちょっと辛い状態に。
今は、Ubuntuのapt-getで簡単にインストールできるQuantum Espressoを使っている状態。
### そうだ！コンパイラやライブラリを変えたら速くなる！？
ということで、フリーで入手できるコンパイラ/ライブラリの組み合わせで、Sourceからインストールした記録を示します。
お役に立てたらLGTMお願いいたします。

### PCのスペック、実行環境
- **CPU** : AMD Phenom II X2 1065T  (化石！？)
- **メモリ** ：12GB (DDR3-1333)
- **ストレージ** ：Samsung SSD 860 EVO 
- **OS** : Ubuntu 20.04 on wsl2 on Windows10

※CPU補足。10年以上前の2010年頃に発売された2.9GHzで6コアのAMD製45nmプロセスCPU。2022年現在も、普通にPCを使う分には困らずに稼働しております。。。。

### ベンチマーク結果
早速ですが、ベンチマーク結果を示します。
CPUコアを変えて実施、各コアで３回実施して平均値(±最大/小値)をプロットしてます。
縦軸は、計算にかかった時間。下にある方が高速、という結果です。
![time.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302038/49c0719c-9fdd-b0ac-670a-a748c7a9a557.png)

フリー系のoss(次項参照)とintel系でのコンパイルが同じ、というかossの方が気持ち速い！！
Intel系使わなくてもここまで速くなるとは思ってませんでした。
fftw3の寄与が大きそうな感じなのと、古い&AMDCPUを使っているので、intelOneAPIの恩恵を十分に受けられていない可能性はありますが。
とはいえ、私のPCの場合、oss使って4コア計算で、apt-getよりも2倍速くなりました。
ちなみに、6コアPCですが、計算速度が、コア4→5で悪化してきたので6コアは行わず。５コアの時点でばらつきも少し大きくなってきている感じが。wsl使ってるからでしょうか。

### 利用したQuantum Espresso
Quantum Espresso 6.8を下記のインストール/コンパイルしたもの

- **apt**: apt-getコマンドでインストールしたQE
- **default**: Sourceを、オプションなどつけず、GCC系(+デフォルトのOpneMPI)でコンパイルしたもの
- **intel** : intelOneAPIを用いて、intelコンパイラ、intelMKL(intel_fftw3ラッパー有）、IntelMPIでコンパイルしたもの。ver._2021.1。2022系を使ったがうまくコンパイルできなかった。
- **oss** : GCC, OpenMPI, OpenBLAS（BLAS,LAPACK,CBLAS), ScaLAPACK(withOpenBLAS), FFTW3のOpenSourceたちを使ってコンパイル。ちなみに、OpenBLAS、ScaLAPACK、FFTW3自体のコンパイルもGCCを使用。すべてoss。

計算は、セルにSi3O6を含んだSiO2のSCF計算です
並列計算はMPIで実施（OpenMPはオフ）


### QEのコンパイルコマンド
備忘録もかねて、コンパイルのコマンドも載せておきます。
ライブラリを適切にリンクするのって難しい。

**oss**

```bash
$ ./configure DFLAGS='-D__FFTW3 -D__MPI -D__SCALAPACK' IFLAGS='-I$(TOPDIR)/include -I$(TOPDIR)/FoX/finclude -I/path_OpenBLAS/include -I/path_FFTW3/include' BLAS_LIBS='/path_OpenBLAS/libopenblas.a' LAPACK_LIBS='/path_OpenBLAS/libopenblas.a' SCALAPACK_LIBS='/path_ScaLAPACK/libscalapack.a' FFT_LIBS='/path_FFTW/libfftw3.a'
```
**intel**

```bash
$ ./configure DFLAGS='-D__OPENMP -D__DFTI -D__MPI -D__SCALAPACK' IFLAGS='-I$(TOPDIR)/include -I$(TOPDIR)/FoX/finclude -I/path_mkl/include' FFT_LIBS='/path_intel_fftw3/***.a' LAPACK_LIBS='-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm' BLAS_LIBS='-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm' SCALAPACK_LIBS='-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_core -liomp5 -lpthread -lm' BLACS_LIBS='-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_core -liomp5 -lpthread -lm' --enable-openmp
# 上記コンパイルではOpenMPは有効。計算実行時にOpenMPは1コアを指定して実行。
```

### 最後に
フリーで偉大なるソフトウェアを公開・維持してくださっている方々に心から感謝→[QE](https://www.quantum-espresso.org/)（GNUGPL)、[OpenMPI](https://www.open-mpi.org/)(NewBSD)、[OpenBLAS](https://github.com/xianyi/OpenBLAS)(BSD-3)、[ScaLAPACK](http://www.netlib.org/scalapack/)(modified BSD)、[FFTW](https://www.fftw.org/)(GNUGPL)。そして、最近は最新版を無償利用させてくれている[Intel](https://www.intel.com/content/www/us/en/developer/tools/oneapi/overview.html#gs.pmcopx)さんにも感謝。

-----

ASEとQuantum Espresso関連の投稿記事リンク

**ASEとQuantum Espressoを使って、**
- [手動でCuの単位格子最適化して、平衡体積弾性率を見積る](https://qiita.com/egoo/items/3b68017fedd3d160014a)
- [Ptが単純立方構造、fcc、hpcのいずれの構造をとるかを調べる](https://qiita.com/egoo/items/8fa70a073df10782caaa)
- [六方晶Hfの格子定数aとcを最適化する](https://qiita.com/egoo/items/003669a4bc5da4f503ca)
- [H2Oなどの３原子分子を構造を最適化して、安定構造を見つける](https://qiita.com/egoo/items/b6c4b8a1f5280fbfd718)
- （表面系とかもそのうちアップ予定）

**他**
- [ASEでモデルの図を保存する,描写する,モデルを出力する(png,cif,traj,pov)](https://qiita.com/egoo/items/55be3a27cd8a83c26ef2)
- [Quantum Espressoを色々なライブラリでコンパイルして、自分のPCに最速な状態にする](https://qiita.com/egoo/items/7fc55b4f7fa9c4b2f87d)