Merge release-2019 branch into master
[alexxy/gromacs.git] / docs / install-guide / index.rst
1 .. Note that this must be a single rst file in order for Sphinx
2    to build into into a single plain-text file to place in the
3    installation tarball.
4
5 .. _install guide:
6
7 ******************
8 Installation guide
9 ******************
10
11 .. highlight:: bash
12
13 Introduction to building |Gromacs|
14 ----------------------------------
15
16 These instructions pertain to building |Gromacs|
17 |version|. You might also want to check the `up-to-date installation instructions`_.
18
19 Quick and dirty installation
20 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21 1. Get the latest version of your C and C++ compilers.
22 2. Check that you have CMake version |CMAKE_MINIMUM_REQUIRED_VERSION| or later.
23 3. Get and unpack the latest version of the |Gromacs| tarball.
24 4. Make a separate build directory and change to it.
25 5. Run ``cmake`` with the path to the source as an argument
26 6. Run ``make``, ``make check``, and ``make install``
27 7. Source ``GMXRC`` to get access to |Gromacs|
28
29 Or, as a sequence of commands to execute:
30
31 .. parsed-literal::
32
33     tar xfz gromacs-|version|.tar.gz
34     cd gromacs-|version|
35     mkdir build
36     cd build
37     cmake .. -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON
38     make
39     make check
40     sudo make install
41     source /usr/local/gromacs/bin/GMXRC
42
43 This will download and build first the prerequisite FFT library
44 followed by |Gromacs|. If you already have FFTW installed, you can
45 remove that argument to ``cmake``. Overall, this build of |Gromacs|
46 will be correct and reasonably fast on the machine upon which
47 ``cmake`` ran. On another machine, it may not run, or may not run
48 fast. If you want to get the maximum value for your hardware with
49 |Gromacs|, you will have to read further. Sadly, the interactions of
50 hardware, libraries, and compilers are only going to continue to get
51 more complex.
52
53 Quick and dirty cluster installation
54 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
55
56 On a cluster where users are expected to be running across multiple
57 nodes using MPI, make one installation similar to the above, and
58 another using an MPI wrapper compiler and which is `building only
59 mdrun`_, because that is the only component of |Gromacs| that uses
60 MPI. The latter will install a single simulation engine binary,
61 i.e. ``mdrun_mpi`` when the default suffix is used. Hence it is safe
62 and common practice to install this into the same location where
63 the non-MPI build is installed.
64
65 Typical installation
66 ^^^^^^^^^^^^^^^^^^^^
67
68 As above, and with further details below, but you should consider
69 using the following `CMake options`_ with the
70 appropriate value instead of ``xxx`` :
71
72 * ``-DCMAKE_C_COMPILER=xxx`` equal to the name of the C99 `Compiler`_ you wish to use (or the environment variable ``CC``)
73 * ``-DCMAKE_CXX_COMPILER=xxx`` equal to the name of the C++98 `compiler`_ you wish to use (or the environment variable ``CXX``)
74 * ``-DGMX_MPI=on`` to build using `MPI support`_ (generally good to combine with `building only mdrun`_)
75 * ``-DGMX_GPU=on`` to build using nvcc to run using NVIDIA `CUDA GPU acceleration`_ or an OpenCL_ GPU
76 * ``-DGMX_USE_OPENCL=on`` to build with OpenCL_ support enabled. ``GMX_GPU`` must also be set.
77 * ``-DGMX_SIMD=xxx`` to specify the level of `SIMD support`_ of the node on which |Gromacs| will run
78 * ``-DGMX_BUILD_MDRUN_ONLY=on`` for `building only mdrun`_, e.g. for compute cluster back-end nodes
79 * ``-DGMX_DOUBLE=on`` to build |Gromacs| in double precision (slower, and not normally useful)
80 * ``-DCMAKE_PREFIX_PATH=xxx`` to add a non-standard location for CMake to `search for libraries, headers or programs`_
81 * ``-DCMAKE_INSTALL_PREFIX=xxx`` to install |Gromacs| to a `non-standard location`_ (default ``/usr/local/gromacs``)
82 * ``-DBUILD_SHARED_LIBS=off`` to turn off the building of shared libraries to help with `static linking`_
83 * ``-DGMX_FFT_LIBRARY=xxx`` to select whether to use ``fftw3``, ``mkl`` or ``fftpack`` libraries for `FFT support`_
84 * ``-DCMAKE_BUILD_TYPE=Debug`` to build |Gromacs| in debug mode
85
86 Building older versions
87 ^^^^^^^^^^^^^^^^^^^^^^^
88
89 Installation instructions for old |Gromacs| versions can be found at
90 the |Gromacs| `documentation page
91 <http://manual.gromacs.org/documentation>`_.
92
93 Prerequisites
94 -------------
95
96 Platform
97 ^^^^^^^^
98
99 |Gromacs| can be compiled for many operating systems and
100 architectures.  These include any distribution of Linux, Mac OS X or
101 Windows, and architectures including x86, AMD64/x86-64, several
102 PowerPC including POWER8, ARM v7, ARM v8, and SPARC VIII.
103
104 Compiler
105 ^^^^^^^^
106
107 |Gromacs| can be compiled on any platform with ANSI C99 and C++11
108 compilers, and their respective standard C/C++ libraries. Good
109 performance on an OS and architecture requires choosing a good
110 compiler. We recommend gcc, because it is free, widely available and
111 frequently provides the best performance.
112
113 You should strive to use the most recent version of your
114 compiler. Since we require full C++11 support the minimum supported
115 compiler versions are
116
117 * GNU (gcc) 4.8.1
118 * Intel (icc) 17.0.1
119 * LLVM (clang) 3.3
120 * Microsoft (MSVC) 2017 (C++14 is used)
121
122 Other compilers may work (Cray, Pathscale, older clang) but do
123 not offer competitive performance. We recommend against PGI because
124 the performance with C++ is very bad.
125
126 The xlc compiler is not supported and version 16.1 does not compile on
127 POWER architectures for |Gromacs|\ -\ |version|. We recommend to use
128 the gcc compiler instead, as it is being extensively tested.
129
130 You may also need the most recent version of other compiler toolchain
131 components beside the compiler itself (e.g. assembler or linker);
132 these are often shipped by your OS distribution's binutils package.
133
134 C++11 support requires adequate support in both the compiler and the
135 C++ library. The gcc and MSVC compilers include their own standard
136 libraries and require no further configuration. For configuration of
137 other compilers, read on.
138
139 On Linux, both the Intel and clang compiler use the libstdc++ which
140 comes with gcc as the default C++ library. For |Gromacs|, we require
141 the compiler to support libstc++ version 4.8.1 or higher. To select a
142 particular libstdc++ library, use:
143
144 * For Intel: ``-DGMX_STDLIB_CXX_FLAGS=-gcc-name=/path/to/gcc/binary``
145   or make sure that the correct gcc version is first in path (e.g. by
146   loading the gcc module). It can also be useful to add
147   ``-DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,/path/to/gcc/lib64
148   -L/path/to/gcc/lib64"`` to ensure linking works correctly.
149 * For clang:
150   ``-DCMAKE_CXX_FLAGS=--gcc-toolchain=/path/to/gcc/folder``. This
151   folder should contain ``include/c++``.
152
153 On Windows with the Intel compiler, the MSVC standard library is used,
154 and at least MSVC 2017 is required. Load the enviroment variables with
155 vcvarsall.bat.
156
157 To build with any compiler and clang's libcxx standard library, use
158 ``-DGMX_STDLIB_CXX_FLAGS=-stdlib=libc++
159 -DGMX_STDLIB_LIBRARIES='-lc++abi -lc++'``.
160
161 If you are running on Mac OS X, the best option is the Intel
162 compiler. Both clang and gcc will work, but they produce lower
163 performance and each have some shortcomings. clang 3.8 now offers
164 support for OpenMP, and so may provide decent performance.
165
166 For all non-x86 platforms, your best option is typically to use gcc or
167 the vendor's default or recommended compiler, and check for
168 specialized information below.
169
170 For updated versions of gcc to add to your Linux OS, see
171
172 * Ubuntu: `Ubuntu toolchain ppa page`_
173 * RHEL/CentOS: `EPEL page`_ or the RedHat Developer Toolset
174
175 Compiling with parallelization options
176 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
177
178 For maximum performance you will need to examine how you will use
179 |Gromacs| and what hardware you plan to run on. Often OpenMP_
180 parallelism is an advantage for |Gromacs|, but support for this is
181 generally built into your compiler and detected automatically.
182
183 .. _gmx-gpu-support:
184
185 GPU support
186 ~~~~~~~~~~~
187
188 |Gromacs| has excellent support for NVIDIA GPUs supported via CUDA.
189 On Linux, NVIDIA CUDA_ toolkit with minimum version |REQUIRED_CUDA_VERSION|
190 is required, and the latest version is strongly encouraged. Using
191 Microsoft MSVC compiler requires version 9.0. NVIDIA GPUs with at
192 least NVIDIA compute capability |REQUIRED_CUDA_COMPUTE_CAPABILITY| are
193 required. You are strongly recommended to
194 get the latest CUDA version and driver that supports your hardware, but
195 beware of possible performance regressions in newer CUDA versions on
196 older hardware.
197 While some CUDA compilers (nvcc) might not
198 officially support recent versions of gcc as the back-end compiler, we
199 still recommend that you at least use a gcc version recent enough to
200 get the best SIMD support for your CPU, since |Gromacs| always runs some
201 code on the CPU. It is most reliable to use the same C++ compiler
202 version for |Gromacs| code as used as the host compiler for nvcc.
203
204 To make it possible to use other accelerators, |Gromacs| also includes
205 OpenCL_ support. The minimum OpenCL version required is
206 |REQUIRED_OPENCL_MIN_VERSION|. The current OpenCL implementation is recommended for
207 use with GCN-based AMD GPUs, and on Linux we recommend the ROCm runtime.
208 Intel integrated GPUs are supported with the Neo drivers.
209 OpenCL is also supported with NVIDIA GPUs, but using
210 the latest NVIDIA driver (which includes the NVIDIA OpenCL runtime) is
211 recommended. Also note that there are performance limitations (inherent
212 to the NVIDIA OpenCL runtime).
213 It is not possible to configure both CUDA and OpenCL
214 support in the same build of |Gromacs|, nor to support both
215 Intel and other vendors' GPUs with OpenCL.
216
217 .. _mpi-support:
218
219 MPI support
220 ~~~~~~~~~~~
221
222 |Gromacs| can run in parallel on multiple cores of a single
223 workstation using its built-in thread-MPI. No user action is required
224 in order to enable this.
225
226 If you wish to run in parallel on multiple machines across a network,
227 you will need to have
228
229 * an MPI library installed that supports the MPI 1.3
230   standard, and
231 * wrapper compilers that will compile code using that library.
232
233 The |Gromacs| team recommends OpenMPI_ version
234 1.6 (or higher), MPICH_ version 1.4.1 (or
235 higher), or your hardware vendor's MPI installation. The most recent
236 version of either of these is likely to be the best. More specialized
237 networks might depend on accelerations only available in the vendor's
238 library. LAM-MPI_ might work, but since it has
239 been deprecated for years, it is not supported.
240
241 CMake
242 ^^^^^
243
244 |Gromacs| builds with the CMake build system, requiring at least
245 version |CMAKE_MINIMUM_REQUIRED_VERSION|. You can check whether
246 CMake is installed, and what version it is, with ``cmake
247 --version``. If you need to install CMake, then first check whether
248 your platform's package management system provides a suitable version,
249 or visit the `CMake installation page`_ for pre-compiled binaries,
250 source code and installation instructions. The |Gromacs| team
251 recommends you install the most recent version of CMake you can.
252
253 .. _FFT support:
254
255 Fast Fourier Transform library
256 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
257
258 Many simulations in |Gromacs| make extensive use of fast Fourier
259 transforms, and a software library to perform these is always
260 required. We recommend FFTW_ (version 3 or higher only) or Intel
261 MKL_. The choice of library can be set with ``cmake
262 -DGMX_FFT_LIBRARY=<name>``, where ``<name>`` is one of ``fftw3``,
263 ``mkl``, or ``fftpack``. FFTPACK is bundled with |Gromacs| as a
264 fallback, and is acceptable if simulation performance is not a
265 priority. When choosing MKL, |Gromacs| will also use MKL for BLAS and
266 LAPACK (see `linear algebra libraries`_). Generally, there is no
267 advantage in using MKL with |Gromacs|, and FFTW is often faster.
268 With PME GPU offload support using CUDA, a GPU-based FFT library
269 is required. The CUDA-based GPU FFT library cuFFT is part of the
270 CUDA toolkit (required for all CUDA builds) and therefore no additional
271 software component is needed when building with CUDA GPU acceleration.
272
273 Using FFTW
274 ~~~~~~~~~~
275
276 FFTW_ is likely to be available for your platform via its package
277 management system, but there can be compatibility and significant
278 performance issues associated with these packages. In particular,
279 |Gromacs| simulations are normally run in "mixed" floating-point
280 precision, which is suited for the use of single precision in
281 FFTW. The default FFTW package is normally in double
282 precision, and good compiler options to use for FFTW when linked to
283 |Gromacs| may not have been used. Accordingly, the |Gromacs| team
284 recommends either
285
286 * that you permit the |Gromacs| installation to download and
287   build FFTW from source automatically for you (use
288   ``cmake -DGMX_BUILD_OWN_FFTW=ON``), or
289 * that you build FFTW from the source code.
290
291 If you build FFTW from source yourself, get the most recent version
292 and follow the `FFTW installation guide`_. Choose the precision for
293 FFTW (i.e. single/float vs. double) to match whether you will later
294 use mixed or double precision for |Gromacs|. There is no need to
295 compile FFTW with threading or MPI support, but it does no harm. On
296 x86 hardware, compile with *both* ``--enable-sse2`` and
297 ``--enable-avx`` for FFTW-3.3.4 and earlier. From FFTW-3.3.5, you
298 should also add ``--enable-avx2`` also. On Intel processors supporting
299 512-wide AVX, including KNL, add ``--enable-avx512`` also.
300 FFTW will create a fat library with codelets for all different instruction sets,
301 and pick the fastest supported one at runtime.
302 On ARM architectures with NEON SIMD support and IBM Power8 and later, you
303 definitely want version 3.3.5 or later,
304 and to compile it with ``--enable-neon`` and ``--enable-vsx``, respectively, for
305 SIMD support. If you are using a Cray, there is a special modified
306 (commercial) version of FFTs using the FFTW interface which can be
307 slightly faster.
308
309 Using MKL
310 ~~~~~~~~~
311
312 Use MKL bundled with Intel compilers by setting up the compiler
313 environment, e.g., through ``source /path/to/compilervars.sh intel64``
314 or similar before running CMake including setting
315 ``-DGMX_FFT_LIBRARY=mkl``.
316
317 If you need to customize this further, use
318
319 ::
320
321     cmake -DGMX_FFT_LIBRARY=mkl \
322           -DMKL_LIBRARIES="/full/path/to/libone.so;/full/path/to/libtwo.so" \
323           -DMKL_INCLUDE_DIR="/full/path/to/mkl/include"
324
325 The full list and order(!) of libraries you require are found in Intel's MKL documentation for your system.
326
327 Using ARM Performance Libraries
328 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
329
330 The ARM Performance Libraries provides FFT transforms implementation for ARM
331 architectures.
332 Preliminary support is provided for ARMPL in |Gromacs| through its FFTW-compatible API.
333 Assuming that the ARM HPC toolchain environment including the ARMPL paths
334 are set up (e.g. through loading the appropriate modules like
335 ``module load Module-Prefix/arm-hpc-compiler-X.Y/armpl/X.Y``) use the following cmake
336 options:
337
338 ::
339
340     cmake -DGMX_FFT_LIBRARY=fftw3 \
341           -DFFTWF_LIBRARY="${ARMPL_DIR}/lib/libarmpl_lp64.so" \
342           -DFFTWF_INCLUDE_DIR=${ARMPL_DIR}/include
343
344
345 Other optional build components
346 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
347
348 * Run-time detection of hardware capabilities can be improved by
349   linking with hwloc, which is automatically enabled if detected.
350 * Hardware-optimized BLAS and LAPACK libraries are useful
351   for a few of the |Gromacs| utilities focused on normal modes and
352   matrix manipulation, but they do not provide any benefits for normal
353   simulations. Configuring these is discussed at
354   `linear algebra libraries`_.
355 * The built-in |Gromacs| trajectory viewer ``gmx view`` requires X11 and
356   Motif/Lesstif libraries and header files. You may prefer to use
357   third-party software for visualization, such as VMD_ or PyMol_.
358 * An external TNG library for trajectory-file handling can be used
359   by setting ``-DGMX_EXTERNAL_TNG=yes``, but TNG
360   |GMX_TNG_MINIMUM_REQUIRED_VERSION| is bundled in the |Gromacs|
361   source already.
362 * The lmfit library for Levenberg-Marquardt curve fitting is used in
363   |Gromacs|. Only lmfit |GMX_LMFIT_REQUIRED_VERSION| is supported.  A
364   reduced version of that library is bundled in the |Gromacs|
365   distribution, and the default build uses it. That default may be
366   explicitly enabled with ``-DGMX_USE_LMFIT=internal``. To use an
367   external lmfit library, set ``-DGMX_USE_LMFIT=external``, and adjust
368   ``CMAKE_PREFIX_PATH`` as needed.  lmfit support can be disabled with
369   ``-DGMX_USE_LMFIT=none``.
370 * zlib is used by TNG for compressing some kinds of trajectory data
371 * Building the |Gromacs| documentation is optional, and requires
372   ImageMagick, pdflatex, bibtex, doxygen, python 2.7, sphinx
373   |EXPECTED_SPHINX_VERSION|, and pygments.
374 * The |Gromacs| utility programs often write data files in formats
375   suitable for the Grace plotting tool, but it is straightforward to
376   use these files in other plotting programs, too.
377
378 Doing a build of |Gromacs|
379 --------------------------
380
381 This section will cover a general build of |Gromacs| with CMake_, but it
382 is not an exhaustive discussion of how to use CMake. There are many
383 resources available on the web, which we suggest you search for when
384 you encounter problems not covered here. The material below applies
385 specifically to builds on Unix-like systems, including Linux, and Mac
386 OS X. For other platforms, see the specialist instructions below.
387
388 .. _configure-cmake:
389
390 Configuring with CMake
391 ^^^^^^^^^^^^^^^^^^^^^^
392
393 CMake will run many tests on your system and do its best to work out
394 how to build |Gromacs| for you. If your build machine is the same as
395 your target machine, then you can be sure that the defaults and
396 detection will be pretty good. However, if you want to control aspects
397 of the build, or you are compiling on a cluster head node for back-end
398 nodes with a different architecture, there are a few things you
399 should consider specifying.
400
401 The best way to use CMake to configure |Gromacs| is to do an
402 "out-of-source" build, by making another directory from which you will
403 run CMake. This can be outside the source directory, or a subdirectory
404 of it. It also means you can never corrupt your source code by trying
405 to build it! So, the only required argument on the CMake command line
406 is the name of the directory containing the ``CMakeLists.txt`` file of
407 the code you want to build. For example, download the source tarball
408 and use
409
410 .. parsed-literal::
411
412     tar xfz gromacs-|version|.tgz
413     cd gromacs-|version|
414     mkdir build-gromacs
415     cd build-gromacs
416     cmake ..
417
418 You will see ``cmake`` report a sequence of results of tests and
419 detections done by the |Gromacs| build system. These are written to the
420 ``cmake`` cache, kept in ``CMakeCache.txt``. You can edit this file by
421 hand, but this is not recommended because you could make a mistake.
422 You should not attempt to move or copy this file to do another build,
423 because file paths are hard-coded within it. If you mess things up,
424 just delete this file and start again with ``cmake``.
425
426 If there is a serious problem detected at this stage, then you will see
427 a fatal error and some suggestions for how to overcome it. If you are
428 not sure how to deal with that, please start by searching on the web
429 (most computer problems already have known solutions!) and then
430 consult the gmx-users mailing list. There are also informational
431 warnings that you might like to take on board or not. Piping the
432 output of ``cmake`` through ``less`` or ``tee`` can be
433 useful, too.
434
435 Once ``cmake`` returns, you can see all the settings that were chosen
436 and information about them by using e.g. the curses interface
437
438 ::
439
440     ccmake ..
441
442 You can actually use ``ccmake`` (available on most Unix platforms)
443 directly in the first step, but then
444 most of the status messages will merely blink in the lower part
445 of the terminal rather than be written to standard output. Most platforms
446 including Linux, Windows, and Mac OS X even have native graphical user interfaces for
447 ``cmake``, and it can create project files for almost any build environment
448 you want (including Visual Studio or Xcode).
449 Check out `running CMake`_ for
450 general advice on what you are seeing and how to navigate and change
451 things. The settings you might normally want to change are already
452 presented. You may make changes, then re-configure (using ``c``), so that it
453 gets a chance to make changes that depend on yours and perform more
454 checking. It may take several configuration passes to reach the desired
455 configuration, in particular if you need to resolve errors.
456
457 When you have reached the desired configuration with ``ccmake``, the
458 build system can be generated by pressing ``g``.  This requires that the previous
459 configuration pass did not reveal any additional settings (if it did, you need
460 to configure once more with ``c``).  With ``cmake``, the build system is generated
461 after each pass that does not produce errors.
462
463 You cannot attempt to change compilers after the initial run of
464 ``cmake``. If you need to change, clean up, and start again.
465
466 .. _non-standard location:
467
468 Where to install |Gromacs|
469 ~~~~~~~~~~~~~~~~~~~~~~~~~~
470
471 |Gromacs| is installed in the directory to which
472 ``CMAKE_INSTALL_PREFIX`` points. It may not be the source directory or
473 the build directory.  You require write permissions to this
474 directory. Thus, without super-user privileges,
475 ``CMAKE_INSTALL_PREFIX`` will have to be within your home directory.
476 Even if you do have super-user privileges, you should use them only
477 for the installation phase, and never for configuring, building, or
478 running |Gromacs|!
479
480 .. _cmake options:
481
482 Using CMake command-line options
483 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
484
485 Once you become comfortable with setting and changing options, you may
486 know in advance how you will configure |Gromacs|. If so, you can speed
487 things up by invoking ``cmake`` and passing the various options at once
488 on the command line. This can be done by setting cache variable at the
489 cmake invocation using ``-DOPTION=VALUE``. Note that some
490 environment variables are also taken into account, in particular
491 variables like ``CC`` and ``CXX``.
492
493 For example, the following command line
494
495 ::
496
497     cmake .. -DGMX_GPU=ON -DGMX_MPI=ON -DCMAKE_INSTALL_PREFIX=/home/marydoe/programs
498
499 can be used to build with CUDA GPUs, MPI and install in a custom
500 location. You can even save that in a shell script to make it even
501 easier next time. You can also do this kind of thing with ``ccmake``,
502 but you should avoid this, because the options set with ``-D`` will not
503 be able to be changed interactively in that run of ``ccmake``.
504
505 .. _gmx-simd-support:
506
507 SIMD support
508 ~~~~~~~~~~~~
509
510 |Gromacs| has extensive support for detecting and using the SIMD
511 capabilities of many modern HPC CPU architectures. If you are building
512 |Gromacs| on the same hardware you will run it on, then you don't need
513 to read more about this, unless you are getting configuration warnings
514 you do not understand. By default, the |Gromacs| build system will
515 detect the SIMD instruction set supported by the CPU architecture (on
516 which the configuring is done), and thus pick the best
517 available SIMD parallelization supported by |Gromacs|. The build system
518 will also check that the compiler and linker used also support the
519 selected SIMD instruction set and issue a fatal error if they
520 do not.
521
522 Valid values are listed below, and the applicable value with the
523 largest number in the list is generally the one you should choose.
524 In most cases, choosing an inappropriate higher number will lead
525 to compiling a binary that will not run. However, on a number of
526 processor architectures choosing the highest supported value can
527 lead to performance loss, e.g. on Intel Skylake-X/SP and AMD Zen.
528
529 1. ``None`` For use only on an architecture either lacking SIMD,
530    or to which |Gromacs| has not yet been ported and none of the
531    options below are applicable.
532 2. ``SSE2`` This SIMD instruction set was introduced in Intel
533    processors in 2001, and AMD in 2003. Essentially all x86
534    machines in existence have this, so it might be a good choice if
535    you need to support dinosaur x86 computers too.
536 3. ``SSE4.1`` Present in all Intel core processors since 2007,
537    but notably not in AMD Magny-Cours. Still, almost all recent
538    processors support this, so this can also be considered a good
539    baseline if you are content with slow simulations and prefer
540    portability between reasonably modern processors.
541 4. ``AVX_128_FMA`` AMD Bulldozer, Piledriver (and later Family 15h) processors have this.
542 5. ``AVX_256`` Intel processors since Sandy Bridge (2011). While this
543    code will work on the  AMD Bulldozer and Piledriver processors, it is significantly less
544    efficient than the ``AVX_128_FMA`` choice above - do not be fooled
545    to assume that 256 is better than 128 in this case.
546 6. ``AVX2_128`` AMD Zen microarchitecture processors (2017);
547    it will enable AVX2 with 3-way fused multiply-add instructions.
548    While the Zen microarchitecture does support 256-bit AVX2 instructions,
549    hence ``AVX2_256`` is also supported, 128-bit will generally be faster,
550    in particular when the non-bonded tasks run on the CPU -- hence
551    the default ``AVX2_128``. With GPU offload however ``AVX2_256``
552    can be faster on Zen processors.
553 7. ``AVX2_256`` Present on Intel Haswell (and later) processors (2013),
554    and it will also enable Intel 3-way fused multiply-add instructions.
555 8. ``AVX_512`` Skylake-X desktop and Skylake-SP Xeon processors (2017);
556    it will generally be fastest on the higher-end desktop and server
557    processors with two 512-bit fused multiply-add units (e.g. Core i9
558    and Xeon Gold). However, certain desktop and server models
559    (e.g. Xeon Bronze and Silver) come with only one AVX512 FMA unit
560    and therefore on these processors ``AVX2_256`` is faster
561    (compile- and runtime checks try to inform about such cases).
562    Additionally, with GPU accelerated runs ``AVX2_256`` can also be
563    faster on high-end Skylake CPUs with both 512-bit FMA units enabled.
564 9. ``AVX_512_KNL`` Knights Landing Xeon Phi processors
565 10. ``Sparc64_HPC_ACE`` Fujitsu machines like the K computer have this.
566 11. ``IBM_VMX`` Power6 and similar Altivec processors have this.
567 12. ``IBM_VSX`` Power7, Power8, Power9 and later have this.
568 13. ``ARM_NEON`` 32-bit ARMv7 with NEON support.
569 14. ``ARM_NEON_ASIMD`` 64-bit ARMv8 and later.
570
571 The CMake configure system will check that the compiler you have
572 chosen can target the architecture you have chosen. mdrun will check
573 further at runtime, so if in doubt, choose the lowest number you
574 think might work, and see what mdrun says. The configure system also
575 works around many known issues in many versions of common HPC
576 compilers.
577
578 A further ``GMX_SIMD=Reference`` option exists, which is a special
579 SIMD-like implementation written in plain C that developers can use
580 when developing support in |Gromacs| for new SIMD architectures. It is
581 not designed for use in production simulations, but if you are using
582 an architecture with SIMD support to which |Gromacs| has not yet been
583 ported, you may wish to try this option instead of the default
584 ``GMX_SIMD=None``, as it can often out-perform this when the
585 auto-vectorization in your compiler does a good job. And post on the
586 |Gromacs| mailing lists, because |Gromacs| can probably be ported for new
587 SIMD architectures in a few days.
588
589 CMake advanced options
590 ~~~~~~~~~~~~~~~~~~~~~~
591
592 The options that are displayed in the default view of ``ccmake`` are
593 ones that we think a reasonable number of users might want to consider
594 changing. There are a lot more options available, which you can see by
595 toggling the advanced mode in ``ccmake`` on and off with ``t``. Even
596 there, most of the variables that you might want to change have a
597 ``CMAKE_`` or ``GMX_`` prefix. There are also some options that will be
598 visible or not according to whether their preconditions are satisfied.
599
600 .. _search for libraries, headers or programs:
601
602 Helping CMake find the right libraries, headers, or programs
603 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
604
605 If libraries are installed in non-default locations their location can
606 be specified using the following variables:
607
608 * ``CMAKE_INCLUDE_PATH`` for header files
609 * ``CMAKE_LIBRARY_PATH`` for libraries
610 * ``CMAKE_PREFIX_PATH`` for header, libraries and binaries
611   (e.g. ``/usr/local``).
612
613 The respective ``include``, ``lib``, or ``bin`` is
614 appended to the path. For each of these variables, a list of paths can
615 be specified (on Unix, separated with ":"). These can be set as
616 enviroment variables like:
617
618 ::
619
620     CMAKE_PREFIX_PATH=/opt/fftw:/opt/cuda cmake ..
621
622 (assuming ``bash`` shell). Alternatively, these variables are also
623 ``cmake`` options, so they can be set like
624 ``-DCMAKE_PREFIX_PATH=/opt/fftw:/opt/cuda``.
625
626 The ``CC`` and ``CXX`` environment variables are also useful
627 for indicating to ``cmake`` which compilers to use. Similarly,
628 ``CFLAGS``/``CXXFLAGS`` can be used to pass compiler
629 options, but note that these will be appended to those set by
630 |Gromacs| for your build platform and build type. You can customize
631 some of this with advanced CMake options such as ``CMAKE_C_FLAGS``
632 and its relatives.
633
634 See also the page on `CMake environment variables`_.
635
636 .. _CUDA GPU acceleration:
637
638 CUDA GPU acceleration
639 ~~~~~~~~~~~~~~~~~~~~~
640
641 If you have the CUDA_ Toolkit installed, you can use ``cmake`` with:
642
643 ::
644
645     cmake .. -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda
646
647 (or whichever path has your installation). In some cases, you might
648 need to specify manually which of your C++ compilers should be used,
649 e.g. with the advanced option ``CUDA_HOST_COMPILER``.
650
651 By default, code will be generated for the most common CUDA architectures.
652 However, to reduce build time and binary size we do not generate code for
653 every single possible architecture, which in rare cases (say, Tegra systems)
654 can result in the default build not being able to use some GPUs.
655 If this happens, or if you want to remove some architectures to reduce
656 binary size and build time, you can alter the target CUDA architectures.
657 This can be done either with the ``GMX_CUDA_TARGET_SM`` or
658 ``GMX_CUDA_TARGET_COMPUTE`` CMake variables, which take a semicolon delimited
659 string with the two digit suffixes of CUDA (virtual) architectures names, for
660 instance "35;50;51;52;53;60". For details, see the "Options for steering GPU
661 code generation" section of the nvcc man / help or Chapter 6. of the nvcc
662 manual.
663
664 The GPU acceleration has been tested on AMD64/x86-64 platforms with
665 Linux, Mac OS X and Windows operating systems, but Linux is the
666 best-tested and supported of these. Linux running on POWER 8, ARM v7 and v8
667 CPUs also works well.
668
669 Experimental support is available for compiling CUDA code, both for host and
670 device, using clang (version 3.9 or later).
671 A CUDA toolkit (>= v7.0) is still required but it is used only for GPU device code
672 generation and to link against the CUDA runtime library.
673 The clang CUDA support simplifies compilation and provides benefits for development
674 (e.g. allows the use code sanitizers in CUDA host-code).
675 Additionally, using clang for both CPU and GPU compilation can be beneficial
676 to avoid compatibility issues between the GNU toolchain and the CUDA toolkit.
677 clang for CUDA can be triggered using the ``GMX_CLANG_CUDA=ON`` CMake option.
678 Target architectures can be selected with  ``GMX_CUDA_TARGET_SM``,
679 virtual architecture code is always embedded for all requested architectures
680 (hence GMX_CUDA_TARGET_COMPUTE is ignored).
681 Note that this is mainly a developer-oriented feature and it is not recommended
682 for production use as the performance can be significantly lower than that
683 of code compiled with nvcc (and it has also received less testing).
684 However, note that with clang 5.0 the performance gap is significantly narrowed
685 (at the time of writing, about 20% slower GPU kernels), so this version
686 could be considered in non performance-critical use-cases.
687
688
689 OpenCL GPU acceleration
690 ~~~~~~~~~~~~~~~~~~~~~~~
691
692 The primary targets of the |Gromacs| OpenCL support is accelerating
693 simulations on AMD and Intel hardware. For AMD, we target both
694 discrete GPUs and APUs (integrated CPU+GPU chips), and for Intel we
695 target the integrated GPUs found on modern workstation and mobile
696 hardware. The |Gromacs| OpenCL on NVIDIA GPUs works, but performance
697 and other limitations make it less practical (for details see the user guide).
698
699 To build |Gromacs| with OpenCL_ support enabled, two components are
700 required: the OpenCL_ headers and the wrapper library that acts
701 as a client driver loader (so-called ICD loader).
702 The additional, runtime-only dependency is the vendor-specific GPU driver
703 for the device targeted. This also contains the OpenCL_ compiler.
704 As the GPU compute kernels are compiled  on-demand at run time,
705 this vendor-specific compiler and driver is not needed for building |Gromacs|.
706 The former, compile-time dependencies are standard components,
707 hence stock versions can be obtained from most Linux distribution
708 repositories (e.g. ``opencl-headers`` and ``ocl-icd-libopencl1`` on Debian/Ubuntu).
709 Only the compatibility with the required OpenCL_ version |REQUIRED_OPENCL_MIN_VERSION|
710 needs to be ensured.
711 Alternatively, the headers and library can also be obtained from vendor SDKs
712 (e.g. `from AMD <http://developer.amd.com/appsdk>`_),
713 which must be installed in a path found in ``CMAKE_PREFIX_PATH`` (or via the environment
714 variables ``AMDAPPSDKROOT`` or ``CUDA_PATH``).
715
716 To trigger an OpenCL_ build the following CMake flags must be set
717
718 ::
719
720     cmake .. -DGMX_GPU=ON -DGMX_USE_OPENCL=ON
721
722 To build with support for Intel integrated GPUs, it is required
723 to add ``-DGMX_OPENCL_NB_CLUSTER_SIZE=4`` to the cmake command line,
724 so that the GPU kernels match the characteristics of the hardware.
725 The `Neo driver <https://github.com/intel/compute-runtime/releases>`_
726 is recommended.
727
728 On Mac OS, an AMD GPU can be used only with OS version 10.10.4 and
729 higher; earlier OS versions are known to run incorrectly.
730
731 By default, any clFFT library on the system will be used with
732 |Gromacs|, but if none is found then the code will fall back on a
733 version bundled with |Gromacs|. To require |Gromacs| to link with an
734 external library, use
735
736 ::
737
738     cmake .. -DGMX_GPU=ON -DGMX_USE_OPENCL=ON -DclFFT_ROOT_DIR=/path/to/your/clFFT -DGMX_EXTERNAL_CLFFT=TRUE
739
740 Static linking
741 ~~~~~~~~~~~~~~
742
743 Dynamic linking of the |Gromacs| executables will lead to a
744 smaller disk footprint when installed, and so is the default on
745 platforms where we believe it has been tested repeatedly and found to work.
746 In general, this includes Linux, Windows, Mac OS X and BSD systems.
747 Static binaries take more space, but on some hardware and/or under
748 some conditions they are necessary, most commonly when you are running a parallel
749 simulation using MPI libraries (e.g. Cray).
750
751 * To link |Gromacs| binaries statically against the internal |Gromacs|
752   libraries, set ``-DBUILD_SHARED_LIBS=OFF``.
753 * To link statically against external (non-system) libraries as well,
754   set ``-DGMX_PREFER_STATIC_LIBS=ON``. Note, that in
755   general ``cmake`` picks up whatever is available, so this option only
756   instructs ``cmake`` to prefer static libraries when both static and
757   shared are available. If no static version of an external library is
758   available, even when the aforementioned option is ``ON``, the shared
759   library will be used. Also note that the resulting binaries will
760   still be dynamically linked against system libraries on platforms
761   where that is the default. To use static system libraries,
762   additional compiler/linker flags are necessary, e.g. ``-static-libgcc
763   -static-libstdc++``.
764 * To attempt to link a fully static binary set
765   ``-DGMX_BUILD_SHARED_EXE=OFF``. This will prevent CMake from explicitly
766   setting any dynamic linking flags. This option also sets
767   ``-DBUILD_SHARED_LIBS=OFF`` and ``-DGMX_PREFER_STATIC_LIBS=ON`` by
768   default, but the above caveats apply. For compilers which don't
769   default to static linking, the required flags have to be specified. On
770   Linux, this is usually ``CFLAGS=-static CXXFLAGS=-static``.
771
772 gmxapi external API
773 ~~~~~~~~~~~~~~~~~~~
774
775 For dynamic linking builds and on non-Windows platforms, an extra library and
776 headers are installed by setting ``-DGMXAPI=ON`` (default).
777 Build targets ``gmxapi-cppdocs`` and ``gmxapi-cppdocs-dev`` produce documentation in
778 ``docs/api-user`` and ``docs/api-dev``, respectively.
779 For more project information and use cases,
780 refer to the tracked :issue:`2585`,
781 associated GitHub `gmxapi <https://github.com/kassonlab/gmxapi>`_ projects,
782 or DOI `10.1093/bioinformatics/bty484 <https://doi.org/10.1093/bioinformatics/bty484>`_.
783
784 gmxapi is not yet tested on Windows or with static linking, but these use cases
785 are targeted for future versions.
786
787 Portability aspects
788 ~~~~~~~~~~~~~~~~~~~
789
790 A |Gromacs| build will normally not be portable, not even across
791 hardware with the same base instruction set, like x86. Non-portable
792 hardware-specific optimizations are selected at configure-time, such
793 as the SIMD instruction set used in the compute kernels. This
794 selection will be done by the build system based on the capabilities
795 of the build host machine or otherwise specified to ``cmake`` during
796 configuration.
797
798 Often it is possible to ensure portability by choosing the least
799 common denominator of SIMD support, e.g. SSE2 for x86, and ensuring
800 the you use ``cmake -DGMX_USE_RDTSCP=off`` if any of the target CPU
801 architectures does not support the ``RDTSCP`` instruction.  However, we
802 discourage attempts to use a single |Gromacs| installation when the
803 execution environment is heterogeneous, such as a mix of AVX and
804 earlier hardware, because this will lead to programs (especially
805 mdrun) that run slowly on the new hardware. Building two full
806 installations and locally managing how to call the correct one
807 (e.g. using a module system) is the recommended
808 approach. Alternatively, as at the moment the |Gromacs| tools do not
809 make strong use of SIMD acceleration, it can be convenient to create
810 an installation with tools portable across different x86 machines, but
811 with separate mdrun binaries for each architecture. To achieve this,
812 one can first build a full installation with the
813 least-common-denominator SIMD instruction set, e.g. ``-DGMX_SIMD=SSE2``,
814 then build separate mdrun binaries for each architecture present in
815 the heterogeneous environment. By using custom binary and library
816 suffixes for the mdrun-only builds, these can be installed to the
817 same location as the "generic" tools installation.
818 `Building just the mdrun binary`_ is possible by setting the
819 ``-DGMX_BUILD_MDRUN_ONLY=ON`` option.
820
821 Linear algebra libraries
822 ~~~~~~~~~~~~~~~~~~~~~~~~
823
824 As mentioned above, sometimes vendor BLAS and LAPACK libraries
825 can provide performance enhancements for |Gromacs| when doing
826 normal-mode analysis or covariance analysis. For simplicity, the text
827 below will refer only to BLAS, but the same options are available
828 for LAPACK. By default, CMake will search for BLAS, use it if it
829 is found, and otherwise fall back on a version of BLAS internal to
830 |Gromacs|. The ``cmake`` option ``-DGMX_EXTERNAL_BLAS=on`` will be set
831 accordingly. The internal versions are fine for normal use. If you
832 need to specify a non-standard path to search, use
833 ``-DCMAKE_PREFIX_PATH=/path/to/search``. If you need to specify a
834 library with a non-standard name (e.g. ESSL on Power machines
835 or ARMPL on ARM machines), then
836 set ``-DGMX_BLAS_USER=/path/to/reach/lib/libwhatever.a``.
837
838 If you are using Intel MKL_ for FFT, then the BLAS and
839 LAPACK it provides are used automatically. This could be
840 over-ridden with ``GMX_BLAS_USER``, etc.
841
842 On Apple platforms where the Accelerate Framework is available, these
843 will be automatically used for BLAS and LAPACK. This could be
844 over-ridden with ``GMX_BLAS_USER``, etc.
845
846 .. _installing with MiMiC:
847
848 Building with MiMiC QM/MM support
849 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
850
851 MiMiC QM/MM interface integration will require linking against MiMiC
852 communication library, that establishes the communication channel
853 between |Gromacs| and CPMD. The MiMiC Communication library can be
854 downloaded `here <https://gitlab.com/MiMiC-projects/CommLib>`__.
855 Compile and install it. Check that the installation folder of the
856 MiMiC library is added to CMAKE_PREFIX_PATH if it is installed in
857 non-standard location. Building QM/MM-capable version requires
858 double-precision version of |Gromacs| compiled with MPI support:
859
860 * ``-DGMX_DOUBLE=ON -DGMX_MPI -DGMX_MIMIC=ON``
861
862 Changing the names of |Gromacs| binaries and libraries
863 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
864
865 It is sometimes convenient to have different versions of the same
866 |Gromacs| programs installed. The most common use cases have been single
867 and double precision, and with and without MPI. This mechanism can
868 also be used to install side-by-side multiple versions of mdrun
869 optimized for different CPU architectures, as mentioned previously.
870
871 By default, |Gromacs| will suffix programs and libraries for such builds
872 with ``_d`` for double precision and/or ``_mpi`` for MPI (and nothing
873 otherwise). This can be controlled manually with ``GMX_DEFAULT_SUFFIX
874 (ON/OFF)``, ``GMX_BINARY_SUFFIX`` (takes a string) and ``GMX_LIBS_SUFFIX``
875 (also takes a string). For instance, to set a custom suffix for
876 programs and libraries, one might specify:
877
878 ::
879
880     cmake .. -DGMX_DEFAULT_SUFFIX=OFF -DGMX_BINARY_SUFFIX=_mod -DGMX_LIBS_SUFFIX=_mod
881
882 Thus the names of all programs and libraries will be appended with
883 ``_mod``.
884
885 Changing installation tree structure
886 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
887
888 By default, a few different directories under ``CMAKE_INSTALL_PREFIX`` are used
889 when when |Gromacs| is installed. Some of these can be changed, which is mainly
890 useful for packaging |Gromacs| for various distributions. The directories are
891 listed below, with additional notes about some of them. Unless otherwise noted,
892 the directories can be renamed by editing the installation paths in the main
893 CMakeLists.txt.
894
895 ``bin/``
896     The standard location for executables and some scripts.
897     Some of the scripts hardcode the absolute installation prefix, which needs
898     to be changed if the scripts are relocated.
899     The name of the directory can be changed using ``CMAKE_INSTALL_BINDIR`` CMake
900     variable.
901 ``include/gromacs/``
902     The standard location for installed headers.
903 ``lib/``
904     The standard location for libraries. The default depends on the system, and
905     is determined by CMake.
906     The name of the directory can be changed using ``CMAKE_INSTALL_LIBDIR`` CMake
907     variable.
908 ``lib/pkgconfig/``
909     Information about the installed ``libgromacs`` library for ``pkg-config`` is
910     installed here.  The ``lib/`` part adapts to the installation location of the
911     libraries.  The installed files contain the installation prefix as absolute
912     paths.
913 ``share/cmake/``
914     CMake package configuration files are installed here.
915 ``share/gromacs/``
916     Various data files and some documentation go here. The first part can
917     be changed using ``CMAKE_INSTALL_DATADIR``, and the second by using
918     ``GMX_INSTALL_DATASUBDIR`` Using these CMake variables is the preferred
919     way of changing the installation path for
920     ``share/gromacs/top/``, since the path to this directory is built into
921     ``libgromacs`` as well as some scripts, both as a relative and as an absolute
922     path (the latter as a fallback if everything else fails).
923 ``share/man/``
924     Installed man pages go here.
925
926 Compiling and linking
927 ^^^^^^^^^^^^^^^^^^^^^
928
929 Once you have configured with ``cmake``, you can build |Gromacs| with ``make``.
930 It is expected that this will always complete successfully, and
931 give few or no warnings. The CMake-time tests |Gromacs| makes on the settings
932 you choose are pretty extensive, but there are probably a few cases we
933 have not thought of yet. Search the web first for solutions to
934 problems, but if you need help, ask on gmx-users, being sure to
935 provide as much information as possible about what you did, the system
936 you are building on, and what went wrong. This may mean scrolling back
937 a long way through the output of ``make`` to find the first error
938 message!
939
940 If you have a multi-core or multi-CPU machine with ``N``
941 processors, then using
942
943 ::
944
945     make -j N
946
947 will generally speed things up by quite a bit. Other build generator systems
948 supported by ``cmake`` (e.g. ``ninja``) also work well.
949
950 .. _building just the mdrun binary:
951
952 Building only mdrun
953 ~~~~~~~~~~~~~~~~~~~
954
955 This is now supported with the ``cmake`` option
956 ``-DGMX_BUILD_MDRUN_ONLY=ON``, which will build a different version of
957 ``libgromacs`` and the ``mdrun`` program.
958 Naturally, now ``make install`` installs only those
959 products. By default, mdrun-only builds will default to static linking
960 against |Gromacs| libraries, because this is generally a good idea for
961 the targets for which an mdrun-only build is desirable.
962
963 Installing |Gromacs|
964 ^^^^^^^^^^^^^^^^^^^^
965
966 Finally, ``make install`` will install |Gromacs| in the
967 directory given in ``CMAKE_INSTALL_PREFIX``. If this is a system
968 directory, then you will need permission to write there, and you
969 should use super-user privileges only for ``make install`` and
970 not the whole procedure.
971
972 .. _getting access to |Gromacs|:
973
974 Getting access to |Gromacs| after installation
975 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
976
977 |Gromacs| installs the script ``GMXRC`` in the ``bin``
978 subdirectory of the installation directory
979 (e.g. ``/usr/local/gromacs/bin/GMXRC``), which you should source
980 from your shell:
981
982 ::
983
984     source /your/installation/prefix/here/bin/GMXRC
985
986 It will detect what kind of shell you are running and set up your
987 environment for using |Gromacs|. You may wish to arrange for your
988 login scripts to do this automatically; please search the web for
989 instructions on how to do this for your shell.
990
991 Many of the |Gromacs| programs rely on data installed in the
992 ``share/gromacs`` subdirectory of the installation directory. By
993 default, the programs will use the environment variables set in the
994 ``GMXRC`` script, and if this is not available they will try to guess the
995 path based on their own location.  This usually works well unless you
996 change the names of directories inside the install tree. If you still
997 need to do that, you might want to recompile with the new install
998 location properly set, or edit the ``GMXRC`` script.
999
1000 Testing |Gromacs| for correctness
1001 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1002
1003 Since 2011, the |Gromacs| development uses an automated system where
1004 every new code change is subject to regression testing on a number of
1005 platforms and software combinations. While this improves
1006 reliability quite a lot, not everything is tested, and since we
1007 increasingly rely on cutting edge compiler features there is
1008 non-negligible risk that the default compiler on your system could
1009 have bugs. We have tried our best to test and refuse to use known bad
1010 versions in ``cmake``, but we strongly recommend that you run through
1011 the tests yourself. It only takes a few minutes, after which you can
1012 trust your build.
1013
1014 The simplest way to run the checks is to build |Gromacs| with
1015 ``-DREGRESSIONTEST_DOWNLOAD``, and run ``make check``.
1016 |Gromacs| will automatically download and run the tests for you.
1017 Alternatively, you can download and unpack the |Gromacs|
1018 regression test suite |gmx-regressiontests-package| tarball yourself
1019 and use the advanced ``cmake`` option ``REGRESSIONTEST_PATH`` to
1020 specify the path to the unpacked tarball, which will then be used for
1021 testing. If the above does not work, then please read on.
1022
1023 The regression tests are also available from the download_ section.
1024 Once you have downloaded them, unpack the tarball, source
1025 ``GMXRC`` as described above, and run ``./gmxtest.pl all``
1026 inside the regression tests folder. You can find more options
1027 (e.g. adding ``double`` when using double precision, or
1028 ``-only expanded`` to run just the tests whose names match
1029 "expanded") if you just execute the script without options.
1030
1031 Hopefully, you will get a report that all tests have passed. If there
1032 are individual failed tests it could be a sign of a compiler bug, or
1033 that a tolerance is just a tiny bit too tight. Check the output files
1034 the script directs you too, and try a different or newer compiler if
1035 the errors appear to be real. If you cannot get it to pass the
1036 regression tests, you might try dropping a line to the gmx-users
1037 mailing list, but then you should include a detailed description of
1038 your hardware, and the output of ``gmx mdrun -version`` (which contains
1039 valuable diagnostic information in the header).
1040
1041 A build with ``-DGMX_BUILD_MDRUN_ONLY`` cannot be tested with
1042 ``make check`` from the build tree, because most of the tests
1043 require a full build to run things like ``grompp``. To test such an
1044 mdrun fully requires installing it to the same location as a normal
1045 build of |Gromacs|, downloading the regression tests tarball manually
1046 as described above, sourcing the correct ``GMXRC`` and running the
1047 perl script manually. For example, from your |Gromacs| source
1048 directory:
1049
1050 ::
1051
1052     mkdir build-normal
1053     cd build-normal
1054     cmake .. -DCMAKE_INSTALL_PREFIX=/your/installation/prefix/here
1055     make -j 4
1056     make install
1057     cd ..
1058     mkdir build-mdrun-only
1059     cd build-mdrun-only
1060     cmake .. -DGMX_MPI=ON -DGMX_GPU=ON -DGMX_BUILD_MDRUN_ONLY=ON -DCMAKE_INSTALL_PREFIX=/your/installation/prefix/here
1061     make -j 4
1062     make install
1063     cd /to/your/unpacked/regressiontests
1064     source /your/installation/prefix/here/bin/GMXRC
1065     ./gmxtest.pl all -np 2
1066
1067 If your mdrun program has been suffixed in a non-standard way, then
1068 the ``./gmxtest.pl -mdrun`` option will let you specify that name to the
1069 test machinery. You can use ``./gmxtest.pl -double`` to test the
1070 double-precision version. You can use ``./gmxtest.pl -crosscompiling``
1071 to stop the test harness attempting to check that the programs can
1072 be run. You can use ``./gmxtest.pl -mpirun srun`` if your command to
1073 run an MPI program is called ``srun``.
1074
1075 The ``make check`` target also runs integration-style tests that may run
1076 with MPI if ``GMX_MPI=ON`` was set. To make these work with various possible
1077 MPI libraries, you may need to
1078 set the CMake variables ``MPIEXEC``, ``MPIEXEC_NUMPROC_FLAG``,
1079 ``MPIEXEC_PREFLAGS`` and ``MPIEXEC_POSTFLAGS`` so that
1080 ``mdrun-mpi-test_mpi`` would run on multiple ranks via the shell command
1081
1082 ::
1083
1084     ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${NUMPROC} ${MPIEXEC_PREFLAGS} \
1085           mdrun-mpi-test_mpi ${MPIEXEC_POSTFLAGS} -otherflags
1086
1087 A typical example for SLURM is
1088
1089 ::
1090
1091      cmake .. -DGMX_MPI=on -DMPIEXEC=srun -DMPIEXEC_NUMPROC_FLAG=-n -DMPIEXEC_PREFLAGS= -DMPIEXEC_POSTFLAGS=
1092
1093
1094 Testing |Gromacs| for performance
1095 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1096
1097 We are still working on a set of benchmark systems for testing
1098 the performance of |Gromacs|. Until that is ready, we recommend that
1099 you try a few different parallelization options, and experiment with
1100 tools such as ``gmx tune_pme``.
1101
1102 Having difficulty?
1103 ^^^^^^^^^^^^^^^^^^
1104
1105 You are not alone - this can be a complex task! If you encounter a
1106 problem with installing |Gromacs|, then there are a number of
1107 locations where you can find assistance. It is recommended that you
1108 follow these steps to find the solution:
1109
1110 1. Read the installation instructions again, taking note that you
1111    have followed each and every step correctly.
1112
1113 2. Search the |Gromacs| webpage_ and users emailing list for information
1114    on the error. Adding
1115    ``site:https://mailman-1.sys.kth.se/pipermail/gromacs.org_gmx-users``
1116    to a Google search may help filter better results.
1117
1118 3. Search the internet using a search engine such as Google.
1119
1120 4. Post to the |Gromacs| users emailing list gmx-users for
1121    assistance. Be sure to give a full description of what you have
1122    done and why you think it did not work. Give details about the
1123    system on which you are installing.  Copy and paste your command
1124    line and as much of the output as you think might be relevant -
1125    certainly from the first indication of a problem. In particular,
1126    please try to include at least the header from the mdrun logfile,
1127    and preferably the entire file.  People who might volunteer to help
1128    you do not have time to ask you interactive detailed follow-up
1129    questions, so you will get an answer faster if you provide as much
1130    information as you think could possibly help. High quality bug
1131    reports tend to receive rapid high quality answers.
1132
1133 .. _gmx-special-build:
1134
1135 Special instructions for some platforms
1136 ---------------------------------------
1137
1138 Building on Windows
1139 ^^^^^^^^^^^^^^^^^^^
1140
1141 Building on Windows using native compilers is rather similar to
1142 building on Unix, so please start by reading the above. Then, download
1143 and unpack the |Gromacs| source archive. Make a folder in which to do
1144 the out-of-source build of |Gromacs|. For example, make it within the
1145 folder unpacked from the source archive, and call it ``build-gromacs``.
1146
1147 For CMake, you can either use the graphical user interface provided on
1148 Windows, or you can use a command line shell with instructions similar
1149 to the UNIX ones above. If you open a shell from within your IDE
1150 (e.g. Microsoft Visual Studio), it will configure the environment for
1151 you, but you might need to tweak this in order to get either a 32-bit
1152 or 64-bit build environment. The latter provides the fastest
1153 executable. If you use a normal Windows command shell, then you will
1154 need to either set up the environment to find your compilers and
1155 libraries yourself, or run the ``vcvarsall.bat`` batch script provided
1156 by MSVC (just like sourcing a bash script under Unix).
1157
1158 With the graphical user interface, you will be asked about what
1159 compilers to use at the initial configuration stage, and if you use
1160 the command line they can be set in a similar way as under UNIX.
1161
1162 Unfortunately ``-DGMX_BUILD_OWN_FFTW=ON`` (see `Using FFTW`_) does not
1163 work on Windows, because there is no supported way to build FFTW on
1164 Windows. You can either build FFTW some other way (e.g. MinGW), or
1165 use the built-in fftpack (which may be slow), or `using MKL`_.
1166
1167 For the build, you can either load the generated solutions file into
1168 e.g. Visual Studio, or use the command line with ``cmake --build`` so
1169 the right tools get used.
1170
1171 Building on Cray
1172 ^^^^^^^^^^^^^^^^
1173
1174 |Gromacs| builds mostly out of the box on modern Cray machines, but
1175 you may need to specify the use of static binaries with
1176 ``-DGMX_BUILD_SHARED_EXE=off``, and you may need to set the F77
1177 environmental variable to ``ftn`` when compiling FFTW.
1178 The ARM ThunderX2 Cray XC50 machines differ only in that the recommended
1179 compiler is the ARM HPC Compiler (``armclang``).
1180
1181
1182 Building on Solaris
1183 ^^^^^^^^^^^^^^^^^^^
1184
1185 The built-in |Gromacs| processor detection does not work on Solaris,
1186 so it is strongly recommended that you build |Gromacs| with
1187 ``-DGMX_HWLOC=on`` and ensure that the ``CMAKE_PREFIX_PATH`` includes
1188 the path where the hwloc headers and libraries can be found. At least
1189 version 1.11.8 of hwloc is recommended.
1190
1191 Oracle Developer Studio is not a currently supported compiler (and
1192 does not currently compile |Gromacs| correctly, perhaps because the
1193 thread-MPI atomics are incorrectly implemented in |Gromacs|).
1194
1195 Fujitsu PRIMEHPC
1196 ^^^^^^^^^^^^^^^^
1197
1198 This is the architecture of the K computer, which uses Fujitsu
1199 Sparc64VIIIfx chips. On this platform, |Gromacs| has
1200 accelerated group kernels using the HPC-ACE instructions, no
1201 accelerated Verlet kernels, and a custom build toolchain. Since this
1202 particular chip only does double precision SIMD, the default setup
1203 is to build |Gromacs| in double. Since most users only need single, we have added
1204 an option GMX_RELAXED_DOUBLE_PRECISION to accept single precision square root
1205 accuracy in the group kernels; unless you know that you really need 15 digits
1206 of accuracy in each individual force, we strongly recommend you use this. Note
1207 that all summation and other operations are still done in double.
1208
1209 The recommended configuration is to use
1210
1211 ::
1212
1213     cmake .. -DCMAKE_TOOLCHAIN_FILE=Toolchain-Fujitsu-Sparc64-mpi.cmake \
1214              -DCMAKE_PREFIX_PATH=/your/fftw/installation/prefix \
1215              -DCMAKE_INSTALL_PREFIX=/where/gromacs/should/be/installed \
1216              -DGMX_MPI=ON \
1217              -DGMX_BUILD_MDRUN_ONLY=ON \
1218              -DGMX_RELAXED_DOUBLE_PRECISION=ON
1219     make
1220     make install
1221
1222 Intel Xeon Phi
1223 ^^^^^^^^^^^^^^
1224
1225 Xeon Phi processors, hosted or self-hosted, are supported.
1226 Only symmetric (aka native) mode is supported on Knights Corner. The
1227 performance depends among other factors on the system size, and for
1228 now the performance might not be faster than CPUs. When building for it,
1229 the recommended configuration is
1230
1231 ::
1232
1233     cmake .. -DCMAKE_TOOLCHAIN_FILE=Platform/XeonPhi
1234     make
1235     make install
1236
1237
1238 The Knights Landing-based Xeon Phi processors behave like standard x86 nodes,
1239 but support a special SIMD instruction set. When cross-compiling for such nodes,
1240 use the ``AVX_512_KNL`` SIMD flavor.
1241 Knights Landing processors support so-called "clustering modes" which
1242 allow reconfiguring the memory subsystem for lower latency. |Gromacs| can
1243 benefit from the quadrant or SNC clustering modes.
1244 Care needs to be taken to correctly pin threads. In particular, threads of
1245 an MPI rank should not cross cluster and NUMA boundaries.
1246 In addition to the main DRAM memory, Knights Landing has a high-bandwidth
1247 stacked memory called MCDRAM. Using it offers performance benefits if
1248 it is ensured that ``mdrun`` runs entirely from this memory; to do so
1249 it is recommended that MCDRAM is configured in "Flat mode" and ``mdrun`` is
1250 bound to the appropriate NUMA node (use e.g. ``numactl --membind 1`` with
1251 quadrant clustering mode).
1252
1253
1254 Tested platforms
1255 ----------------
1256
1257 While it is our best belief that |Gromacs| will build and run pretty
1258 much everywhere, it is important that we tell you where we really know
1259 it works because we have tested it. We do test on Linux, Windows, and
1260 Mac with a range of compilers and libraries for a range of our
1261 configuration options. Every commit in our git source code repository
1262 is currently tested on x86 with a number of gcc versions ranging from 4.8.1
1263 through 7, versions 16 and 18 of the Intel compiler, and Clang
1264 versions 3.4 through 5. For this, we use a variety of GNU/Linux
1265 flavors and versions as well as recent versions of Windows. Under
1266 Windows, we test both MSVC 2017 and version 16 of the Intel compiler.
1267 For details, you can
1268 have a look at the `continuous integration server used by GROMACS`_,
1269 which runs Jenkins_.
1270
1271 We test irregularly on ARM v7, ARM v8, Cray, Fujitsu
1272 PRIMEHPC, Power8, Google Native Client and other environments, and
1273 with other compilers and compiler versions, too.