2020-07-23 16:41:14 +02:00
# MD-Bench
2020-08-17 16:07:58 +02:00
2022-09-29 14:08:10 +02:00
![Image ](figures/features-v3.png "MD-Bench Features" )
2022-09-29 14:23:34 +02:00
MD-Bench is a toolbox for the performance engineering of short-range force calculation kernels on molecular-dynamics applications.
It aims at covering all available state-of-the-art algorithms from different community codes such as LAMMPS and GROMACS.
2022-09-29 14:46:24 +02:00
Apart from that, many tools to study and evaluate the in-depth performance of such kernels on distinct hardware are offered, like the gather-bench which is a benchmark to mimic the data movement from such kernels and the stubbed force calculation cases used to isolate the impacts caused by memory latencies and control flow divergence.
2022-09-29 14:23:34 +02:00
2022-09-29 14:46:24 +02:00
| Verlet Lists | GROMACS MxN | Stubbed cases |
2022-09-29 14:38:08 +02:00
| ---------------------------------------------- | -------------------------------------------------- | ------------------------------------------------- |
| ![Image ](figures/verlet_v2.png "Verlet Lists" ) | ![Image ](figures/gromacs_mxn_v2.png "GROMACS MxN" ) | ![Image ](figures/stub_new_v3.png "Stubbed cases" ) |
2020-08-17 16:07:58 +02:00
2022-09-29 14:47:45 +02:00
![Image ](figures/gather_bench.png "gather-bench" )
2022-09-29 14:46:24 +02:00
2022-09-29 12:39:09 +02:00
## Build instructions
2020-08-17 16:07:58 +02:00
2022-09-29 12:21:29 +02:00
Properly configure your building by changing `config.mk` file. The following options are available:
- **TAG:** Compiler tag (available options: GCC, CLANG, ICC, ONEAPI, NVCC).
- **ISA:** Instruction set (available options: SSE, AVX, AVX2, AVX512).
- **MASK\_REGISTERS:** Use AVX512 mask registers (always true when ISA is set to AVX512).
- **OPT\_SCHEME:** Optimization algorithm (available options: lammps, gromacs).
- **ENABLE\_LIKWID:** Enable likwid to make use of HPM counters.
- **DATA\_TYPE:** Floating-point precision (available options: SP, DP).
- **DATA\_LAYOUT:** Data layout for atom vector properties (available options: AOS, SOA).
- **ASM\_SYNTAX:** Assembly syntax to use when generating assembly files (available options: ATT, INTEL).
- **DEBUG:** Toggle debug mode.
- **EXPLICIT\_TYPES:** Explicitly store and load atom types.
- **MEM\_TRACER:** Trace memory addresses for cache simulator.
- **INDEX\_TRACER:** Trace indexes and distances for gather-md.
- **COMPUTE\_STATS:** Compute statistics.
Configurations for LAMMPS Verlet Lists optimization scheme:
- **ENABLE\_OMP\_SIMD:** Use omp simd pragma on half neighbor-lists kernels.
- **USE\_SIMD\_KERNEL:** Compile kernel with explicit SIMD intrinsics.
Configurations for GROMACS MxN optimization scheme:
- **USE\_REFERENCE\_VERSION:** Use reference version (only for correction purposes).
- **XTC\_OUTPUT:** Enable XTC output.
- **HALF\_NEIGHBOR\_LISTS\_CHECK\_CJ:** Check if j-clusters are local when decreasing the reaction force.
Configurations for CUDA:
- **USE\_CUDA\_HOST\_MEMORY:** Use CUDA host memory to optimize host-device transfers.
2020-08-17 16:07:58 +02:00
2022-09-29 12:39:09 +02:00
When done, just use `make` to compile the code.
2020-08-17 16:07:58 +02:00
You can clean intermediate build results with `make clean` , and all build results with `make distclean` .
You have to call `make clean` before `make` if you changed the build settings.
2022-09-29 12:39:09 +02:00
## Usage
2020-08-17 16:07:58 +02:00
2022-09-29 12:39:09 +02:00
Use the following command to run a simulation:
2020-08-17 16:09:40 +02:00
2022-09-29 12:39:09 +02:00
```bash
./MD-Bench-< TAG > -< OPT_SCHEME > [OPTION]...
```
2020-08-17 16:09:40 +02:00
2022-09-29 12:39:09 +02:00
Where `TAG` and `OPT_SCHEME` correspond to the building options with the same name.
Without any options, a Copper FCC lattice system with size 32x32x32 (131072 atoms) over 200 time-steps using the Lennard-Jones potential (sigma=1.0, epsilon=1.0) is simulated.
2020-08-19 10:04:34 +02:00
2022-09-29 12:39:09 +02:00
The default behavior and other options can be changed using the following parameters:
2020-08-19 10:04:34 +02:00
```
2022-09-29 12:39:09 +02:00
-p < string > : file to read parameters from (can be specified more than once)
-f < string > : force field (lj or eam), default lj
-i < string > : input file with atom positions (dump)
-e < string > : input file for EAM
2020-08-19 10:04:34 +02:00
-n / --nsteps < int > : set number of timesteps for simulation
-nx/-ny/-nz < int > : set linear dimension of systembox in x/y/z direction
2022-09-29 12:39:09 +02:00
-r / --radius < real > : set cutoff radius
-s / --skin < real > : set skin (verlet buffer)
--freq < real > : processor frequency (GHz)
--vtk < string > : VTK file for visualization
--xtc < string > : XTC file for visualization
2020-08-19 10:04:34 +02:00
```
2022-09-29 12:52:54 +02:00
## Examples
## Citations
2022-09-29 14:28:18 +02:00
R. Ravedutti Lucio Machado, J. Eitzinger, H. Köstler, and G. Wellein: MD-Bench: A generic proxy-app toolbox for state-of-the-art molecular dynamics algorithms. Accepted for [PPAM ](https://ppam.edu.pl/ ) 2022, the 14th International Conference on Parallel Processing and Applied Mathematics, Gdansk, Poland, September 11-14, 2022. PPAM 2022 Best Paper Award. Preprint: [arXiv:2207.13094 ](https://arxiv.org/abs/2207.13094 )
2022-09-29 12:52:54 +02:00
## Credits
2022-09-29 14:08:10 +02:00
MD-Bench is developed by the Erlangen National High Performance Computing Center ([NHR@FAU](https://hpc.fau.de/)) at the University of Erlangen-Nürnberg.
2022-09-29 12:52:54 +02:00
## License
2022-09-29 14:08:10 +02:00
[LGPL-3.0 ](https://github.com/RRZE-HPC/MD-Bench/blob/master/LICENSE )