---
# System prepended metadata

title: lammps hpc test
tags: [lammps]

---

# lammps hpc test
## 國網 slurm
### 提交工作檔
說明:lammps在國網編譯
2 nodes 8 cpus in total
```shell=
#!/bin/bash
# ----------------------------------------------------------------------------
#SBATCH -p gp1d
#SBATCH -A ACD110038
#SBATCH --nodes=2
#SBATCH -J lammps_test
#SBATCH --time=00:30:00
#SBATCH --exclusive
#SBATCH --nodelist=gn1103,gn1104
#SBATCH --gres=gpu:1,gpu:1
#SBATCH --cpus-per-task=4

module purge
module load nvidia/cuda/.10.0.130
module load ucx/1.5
module load openmpi/3.1.4

LMPLOC=/home/nckuhpclab04/lammps_openmpi-3.1.4_cmake/lammps/build/lmp
INPUT=/home/nckuhpclab04/in.lj

mpirun --host gn1103,gn1104 -np 8 -n 2 $LMPLOC < $INPUT
```

## 國網PBS
說明:lammps在台灣杉一號編譯(CPU)
12nodes 25ppn np300
```shell=
#!/bin/bash
#PBS -N lammps_test1
#PBS -q ct400  ##佇列名稱
#PBS -l select=12:ncpus=25:mpiprocs=25 ##12nodes 每個nodes25核 25個MPI序列
#PBS -l walltime=15:00:00 ##最大運行時間
#PBS -P ACD110038 ##計畫名稱
#PBS -j oe ##照打
#PBS -o pbsout_lammps_openmpi4=-4.0.5_12nodes_25ppn.txt ##output 名稱

module load mpi/openmpi-4.0.5/gcc930

LMPLOC=/home/nckuhpclab04/lammps/lammps/build/lmp
INPUT=/home/nckuhpclab04/lammps_job_script/in.lj

mpirun -np 300 $LMPLOC < $INPUT
```


## 測試結果
* 官方參考
![](https://i.imgur.com/VU42Wod.png)

啥都不改 只改核心數 input = in.lj
EX
`select=25:ncpus=40:mpiprocs=40`
`mpirun -np 1000 $LMPLOC < $INPUT`
4nodes 40 ppn-Total wall time: 27:31:36
![](https://i.imgur.com/UToRr65.png)
10 nodes 30 ppn-Total wall time: 27:42:19
![](https://i.imgur.com/PTICCY4.png)
15 nodes 40 ppn-Total wall time: 27:31:24
![](https://i.imgur.com/s7yETNU.png)
25 nodes 40 ppn-Total wall time: 27:30:41
![](https://i.imgur.com/on0LBrl.png)
45 nodes 25 ppn
甚至跑不完
:::warning
值得注意的是 每個都只有1個 MPI task 配 ppn數的OpenMP threads
就像是沒有真的並行一樣(計算時間都差不多 表示未真的並行)
而且參考官方其實花最多時間的地方是communication
但自己測試的全都是花在計算
重點應該在MPI task
其實也是主要lammps並行計算的點
:::
:::info
看起來 procs=MPI task * OpenMP threads
:::


## kokkos test
### test 1
#### in.lj
->twcc
openmpi/4.1.0
nvidia tesla v100-sxm2
cuda/10.0
compiler/gnu/7.3.0(需要較新的compiler)
cmake/3.15.4
KISS FFT
```
cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_KOKKOS=yes -D Kokkos_ARCH_VOLTA70=yes -D Kokkos_ENABLE_CUDA=yes -D Kokkos_ENABLE_OPENMP=yes -D CMAKE_CXX_COMPILER=/home/nckuhpclab04/lammps_different_build/lammps_kokkos/lammps/lib/kokkos/bin/nvcc_wrapper ../cmake
```
* 4 gpu 17 threadings
`mpirun --host gn1022,gn1023,gn1024,gn1107 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -k on g 4 t 17 -sf kk -pk kokkos newton off neigh full`
![](https://i.imgur.com/RbBpYHt.png)

`mpirun --host gn1022,gn1023,gn1024,gn1107 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -k on g 4 t 40 -sf kk`
4 gpu 40 threadings
:::warning
thread的警告
![](https://i.imgur.com/CvCEQv4.png)
:::
![](https://i.imgur.com/g4YNimV.png)

`mpirun --host gn1022,gn1023,gn1024,gn1107 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -k on g 4 t 17 -sf kk`
* 4 gpu 17 threadings
![](https://i.imgur.com/Ugj7DWX.png)
:::info
可以發現當被實體的核心數限制時，就算超過也會照實體的去計算
至於有沒有使用newton off 跟 full neigh 則沒有差別(似乎本來GPU計算這定就是這樣)
:::

### test 2
#### in.lj
->twcc
openmpi/4.1.0
nvidia tesla v100-sxm2
cuda/10.0
compiler/gnu/7.3.0
cmake/3.15.4
KISS FFT
build with --default-stream perthread

* 4GPU36threading
![](https://i.imgur.com/2qSd58A.png)

* 3GPU36threading
![](https://i.imgur.com/OXMjx7K.png)
* 2GPU36threading
![](https://i.imgur.com/30G9aEy.png)
* 1GPU36threading
![](https://i.imgur.com/NeZR8ua.png)

* 4gpu 36threadings(kokkos package/cuda aware/neigh half/newton off/comm device)


#### in.rhodo
##### 1
```
mpirun --host gn1103,gn1104,gn1105,gn1106 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -sf kk -k on g 1 t 36 -pk kokkos neigh half comm no
```
因
![](https://i.imgur.com/MiXsDt3.png)
4PGU36threadings
![](https://i.imgur.com/VrRGtXx.png)
##### 2
cuda aware
```
mpirun --host gn1107,gn1108,gn1205,gn1206 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -sf kk -k on g 1 t 36 -pk kokkos neigh half newton on cuda/aware on
```
![](https://i.imgur.com/NYgmJFh.png)

### test3
->nscc
openmpi/4.0.0
nvidia tesla v100-sxm2
cuda/10.1
gcc7.4(需要較新的compiler)
cmake/3.14.4
FFTw3/3.2.1

### test4
for cpu
fftw3
mpi/openmpi-4.0.5/gcc930
gcc930
cmake 3.20.0
```
cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_KOKKOS=yes -D Kokkos_ARCH_SKX=yes -D Kokkos_ENABLE_OPENMP=yes ../cmake
```
## GPU package
### test1
twcc
openmpi/3.0.1
cuda/10.0
compiler/gnu/7.3.0
cmake/3.15.4
KISS FFT
```
cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_GPU=yes -D GPU_API=cuda -D GPU_PREC=mixed -D GPU_ARCH=sm_70 -D CUDPP_OPT=no -D CUDA_MPS_SUPPORT=yes ../cmake
```
#### in.lj
4gpu36threadings
```
mpirun --host gn1103,gn1104,gn1105,gn1106 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -sf gpu -pk gpu 4
```
![](https://i.imgur.com/j0aq0Fw.png)


#### in.rhodo
4GPU36threadings
```
mpirun --host gn1103,gn1104,gn1105,gn1106 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -sf gpu -pk gpu 4
```
![](https://i.imgur.com/g7vcHXb.png)
:::info
->已經對此採用較佳的加速 只有pair用gpu加速 還是比kokkos慢，可能是因為cpu 因1:4的限制所以能用得很少 所以其他才沒有gpu快
:::

## USER-OMP package
台灣杉1號
```
cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_USER-OMP=yes ../cmake
```
mpi/openmpi-4.0.5/gcc930
FFTW3
cmake/3.15.4
:::warning
->mpi procs 要跟 ncups一樣
![](https://i.imgur.com/3paWWZP.png)
:::
4nodes 20 ppn
![](https://i.imgur.com/EjIUAqm.png)
4nodes 15 ppn
![](https://i.imgur.com/cEcFJaO.png)
4nodes10ppn(user_omp/no npernode)
![](https://i.imgur.com/wa4GPaM.png)


## OPT package
```
cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_OPT=yes ../cmake
```
cmake/3.15.4
mpi/openmpi-4.0.5/gcc930
FFTW3

### in.lj
4nodes15ppn
![](https://i.imgur.com/mKwoF93.png)
4nodes12ppn
![](https://i.imgur.com/UUFaUnU.png)
4nodes10ppn
![](https://i.imgur.com/O8oFOvT.png)

## user_intel

->nia
cmake/3.14.5
mkl/2019u4
intel/2019u4
openmpi/4.0.1
```
cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_USER-OMP=yes -D PKG_USER-INTEL=yes -D INTEL_ARCH=cpu -D INTEL_LRT_MODE=c++11 -D FFT=MKL -D FFT_SINGLE=no ../cmake
```

###### tags: `lammps`