# Gromacs

<font color='red' size=5> 注意：为了保证GPU性能, 在没有特殊要求的情况下，请使用2021版本的Gromacs，并用GPU计算所有的相互作用。没特殊要求的话请看第三部分。</font>

## 1. Gromacs-2018.8

#### 说明： 
Gromacs使用CPU计算成键相互作用，使用GPU计算非键相互作用。

#### 编译环境：
	gcc/7.4.0
    cmake/3.16.3
    ips/2017u2
    fftw/3.3.7-iccifort-17.0.6-avx2
    cuda/10.0.130
    
#### 软件信息：
	GROMACS version:    2018.8
    Precision:          single
    Memory model:       64 bit
    MPI library:        MPI
    OpenMP support:     enabled (GMX_OPENMP_MAX_THREADS = 64)
    GPU support:        CUDA
    SIMD instructions:  AVX2_256
    FFT library:        fftw-3.3.7-avx2-avx2_128
    CUDA driver:        11.40
    CUDA runtime:       10.0 
    
#### 测试算例：
	ATOM  102808(464 residues, 9nt DNA, 31709 SOL, 94 NA, 94 CL)
    nsteps      = 25000000     ;50 ns

#### eScience中心GPU测试： 所有GPU节点使用单个GPU进行模拟。
[![gromacs2010.png](https://doc.nju.edu.cn/uploads/images/gallery/2021-11/scaled-1680-/gromacs2010.png)](https://doc.nju.edu.cn/uploads/images/gallery/2021-11/gromacs2010.png)

---
## 2. Gromacs-2021.3

#### 说明： 
使用的是集群自带的容器化(singularity)的gromacs-2021.3. Gromacs使用CPU计算成键相互作用，使用GPU计算非键相互作用。

#### 文件位置
	/fs00/software/singularity-images/ngc_gromacs_2021.3.sif
    
#### 提交代码
```shell
#BSUB -q GPU_QUEUE
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx mdrun -nb gpu -deffnm <NAME>
```
    
#### 软件信息：
	GROMACS version:    2021.3-dev-20210818-11266ae-dirty-unknown
    Precision:          mixed
    Memory model:       64 bit
    MPI library:        thread_mpi
    OpenMP support:     enabled (GMX_OPENMP_MAX_THREADS = 64)
    GPU support:        CUDA
    SIMD instructions:  AVX2_256
    FFT library:        fftw-3.3.9-sse2-avx-avx2-avx2_128-avx512
    CUDA driver:        11.20
    CUDA runtime:       11.40
    
#### 测试算例：
	ATOM  102808(464 residues, 9nt DNA, 31709 SOL, 94 NA, 94 CL)
    nsteps      = 25000000     ;50 ns

eScience中心GPU测试： 所有GPU节点使用单个GPU进行模拟。
[![gromacs2021-singularity.png](https://doc.nju.edu.cn/uploads/images/gallery/2021-11/scaled-1680-/gromacs2021-singularity.png)](https://doc.nju.edu.cn/uploads/images/gallery/2021-11/gromacs2021-singularity.png)

---
## 3. Gromacs-2021.3(全部相互作用用GPU计算)
#### 说明：
由于从2019版本开始，不同的相互作用慢慢都可以在GPU上进行运算，2021版本已经可以将所有模拟的计算用GPU来模拟，所以尝试用GPU进行所有相互作用的运算。

#### 文件位置
	/fs00/software/singularity-images/ngc_gromacs_2021.3.sif
    
#### 提交代码
```shell
#BSUB -q GPU_QUEUE
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"	# 需要，否则会占用所有CPU，反而导致速度变慢
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx mdrun -nb gpu -bonded gpu -update gpu -pme gpu -pmefft gpu -deffnm <NAME>	# 设置所有的运算用GPU进行
```
#### 测试算例：
	ATOM  102808(464 residues, 9nt DNA, 31709 SOL, 94 NA, 94 CL)
    nsteps      = 25000000     ;50 ns
    
eScience中心GPU测试： 所有GPU节点使用单个GPU进行模拟。
[![gromacs2021-singularity-gpu.png](https://doc.nju.edu.cn/uploads/images/gallery/2021-11/scaled-1680-/gromacs2021-singularity-gpu.png)](https://doc.nju.edu.cn/uploads/images/gallery/2021-11/gromacs2021-singularity-gpu.png)

---
## 结论：
1. 对于GPU节点来说，如果使用GPU+CPU混合运算，主要限制的速度的会是CPU，所以应该尽可能使用GPU进行相互作用的计算。

## 补充信息
每个GPU队列带有的CPU核数
|Queue|CPU Core|
|---|---|
|72rtxib|4|
|722080tiib|4|
|723090ib|6|
|62v100ib|5|
|83a100ib|8|