[gmx-users] Maximising Hardware Performance on Local node: Optimal settings

Christian Blau blau at kth.se
Wed Dec 4 18:36:04 CET 2019


Hi Matt,


Here are a few bullet points that might help you, maybe other experts can contribute more.


If you're running on a single machine, using thread-mpi over mpi is a good choice.

"-pin on" might help you.

60k atoms is not very large, here are some other systems ready to benchmark https://www.mpibpc.mpg.de/grubmueller/bench 
that be able to tell you more about your performance on a range of systems.

It is normal that the GPU is not fully utilized; the newest GROMACS release should be able to make more use of the GPU, 
so you might want to try out the beta-3 version to get an idea, but please don't use for production, but wait till 
January when GROMACS-2020 is released.

If you want to maximise sampling, incorporate running multiple simulations simultaneously in your benchmark set (mdrun 
-multidir makes things easy here), most often this is what you actually want and can give you a drastic increase in 
output from your hardware (guessing a long shot, you might get 4 * 150 ns/day)


I assume you had already a look at this, but for reference check here:

http://manual.gromacs.org/documentation/current/user-guide/mdrun-performance.html

http://manual.gromacs.org/documentation/current/onlinehelp/gmx-mdrun.html
http://manual.gromacs.org/documentation/current/user-guide/mdrun-features.html

https://onlinelibrary.wiley.com/doi/abs/10.1002/jcc.26011


Best,

Christian

On 2019-12-04 17:53, Matthew Fisher wrote:
> Dear all,
>
> We're currently running some experiments with a new hardware configuration and attempting to maximise performance from it. Our system contains 1x V100 and 2x 12 core (24 logical) Xeon Silver 4214 CPUs which, after optimisation of CUDA drivers & kernels etc., we've been able to get a performance of 210 ns/day for 60k atoms with GROMACS 2019.3 (allowing mdrun to select threads, which has surprised us as it only creates 24 OpenMP threads for our 48 logical core system). Furthermore we have a surprising amount of wasted GPU time. Therefore, we were wondering if anyone had any advice on how we could maximise our hardware output? We've enclosed the real cycle and time accounting display below.
>
> Any help will be massively appreciated
>
> Thanks,
> Matt
>
>       R E A L   C Y C L E   A N D   T I M E   A C C O U N T I N G
>
> On 1 MPI rank, each using 24 OpenMP threads
>
>   Computing:          Num   Num      Call    Wall time         Giga-Cycles
>                       Ranks Threads  Count      (s)         total sum    %
> -----------------------------------------------------------------------------
>   Neighbor search        1   24      12501      32.590       1716.686   3.2
>   Launch GPU ops.        1   24    2500002     105.169       5539.764  10.2
>   Force                  1   24    1250001     140.283       7389.414  13.6
>   Wait PME GPU gather    1   24    1250001      79.714       4198.902   7.7
>   Reduce GPU PME F       1   24    1250001      25.159       1325.260   2.4
>   Wait GPU NB local      1   24    1250001     264.961      13956.769  25.7
>   NB X/F buffer ops.     1   24    2487501     177.862       9368.871  17.3
>   Write traj.            1   24        252       5.748        302.799   0.6
>   Update                 1   24    1250001      81.151       4274.601   7.9
>   Constraints            1   24    1250001      70.231       3699.389   6.8
>   Rest                                          47.521       2503.167   4.6
> -----------------------------------------------------------------------------
>   Total                                       1030.389      54275.623 100.0
> -----------------------------------------------------------------------------
>
>                 Core t (s)   Wall t (s)        (%)
>         Time:    24729.331     1030.389     2400.0
>                   (ns/day)    (hour/ns)
> Performance:      209.630        0.114


More information about the gromacs.org_gmx-users mailing list