Add running tests to install-guide
[alexxy/gromacs.git] / install-guide / install-guide.md
1 % Installation guide for GROMACS @PROJECT_VERSION@
2
3 # Building GROMACS #
4
5 These instructions pertain to building GROMACS
6 @PROJECT_VERSION@. Up-to-date installation instructions may be found
7 at <http://www.gromacs.org/Documentation/Installation_Instructions>.
8
9 # Quick and dirty installation #
10
11 1. Get the latest version of your C and C++ compilers.
12 2. Check that you have CMake version @GMX_CMAKE_MINIMUM_REQUIRED_VERSION@ or later.
13 3. Get and unpack the latest version of the GROMACS tarball.
14 4. Make a separate build directory and change to it. 
15 5. Run `cmake` with the path to the source as an argument
16 6. Run `make`, `make test`, and `make install`
17
18 Or, as a sequence of commands to execute:
19
20     tar xfz gromacs-@PROJECT_VERSION@.tar.gz
21     cd gromacs-@PROJECT_VERSION@
22     mkdir build
23     cd build
24     cmake .. -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON
25     make
26     make test
27     sudo make install
28     source /usr/local/gromacs/bin/GMXRC
29
30 This will download and build first the prerequisite FFT library
31 followed by GROMACS. If you already have FFTW installed, you can
32 remove that argument to `cmake`. Overall, this build of GROMACS will
33 be correct and reasonably fast on the machine upon which `cmake`
34 ran. If you want to get the maximum value for your hardware with
35 GROMACS, you will have to read further. Sadly, the interactions of
36 hardware, libraries, and compilers are only going to continue to get
37 more complex.
38
39 # Typical GROMACS installation #
40
41 As above, and with further details below, but you should consider
42 using the following [CMake options](#using-cmake-command-line-options) with the
43 appropriate value instead of `xxx` :
44
45 * `-DCMAKE_C_COMPILER=xxx` equal to the name of the C99 [compiler](#compiler) you wish to use (or the environment variable `CC`)
46 * `-DCMAKE_CXX_COMPILER=xxx` equal to the name of the C++98 [compiler](#compiler) you wish to use (or the environment variable `CXX`)
47 * `-DGMX_MPI=on` to build using an [MPI](#mpi-support) wrapper compiler
48 * `-DGMX_GPU=on` to build using nvcc to run with an NVIDIA [GPU](#native-gpu-acceleration)
49 * `-DGMX_SIMD=xxx` to specify the level of [SIMD support](#simd-support) of the node on which `mdrun` will run
50 * `-DGMX_BUILD_MDRUN_ONLY=on` to [build only the `mdrun` binary](#building-only-mdrun), e.g. for compute cluster back-end nodes
51 * `-DGMX_DOUBLE=on` to run GROMACS in double precision (slower, and not normally useful)
52 * `-DCMAKE_PREFIX_PATH=xxx` to add a non-standard location for CMake to [search for libraries](#helping-cmake-find-the-right-librariesheadersprograms)
53 * `-DCMAKE_INSTALL_PREFIX=xxx` to install GROMACS to a non-standard location (default `/usr/local/gromacs`)
54 * `-DBUILD_SHARED_LIBS=off` to turn off the building of [shared libraries](#static-linking)
55 * `-DGMX_FFT_LIBRARY=xxx` to select whether to use `fftw`, `mkl` or `fftpack` libraries for [FFT support](#fast-fourier-transform-library)
56 * `-DCMAKE_BUILD_TYPE=Debug` to build GROMACS in debug mode
57
58 # Building older GROMACS versions #
59
60 For installation instructions for old GROMACS versions, see the
61 documentation at
62 <http://www.gromacs.org/Documentation/Installation_Instructions_4.5>
63 and
64 <http://www.gromacs.org/Documentation/Installation_Instructions_4.6>
65
66 # Prerequisites #
67
68 ## Platform ##
69
70 GROMACS can be compiled for many operating systems and architectures.
71 These include any distribution of Linux, Mac OS X or Windows, and
72 architectures including x86, AMD64/x86-64, PPC, ARM v7 and SPARC VIII.
73
74 ## Compiler ##
75
76 Technically, GROMACS can be compiled on any platform with an ANSI C99
77 and C++98 compiler, and their respective standard C/C++ libraries.
78 Getting good performance on an OS and architecture requires choosing a
79 good compiler. In practice, many compilers struggle to do a good job
80 optimizing the GROMACS architecture-optimized SIMD kernels.
81
82 For best performance, the GROMACS team strongly recommends you get the
83 most recent version of your preferred compiler for your platform.
84 There is a large amount of GROMACS code that depends on effective
85 compiler optimization to get high performance. This makes GROMACS
86 performance sensitive to the compiler used, and the binary will often
87 only work on the hardware for which it is compiled.
88
89 * In particular, GROMACS includes a lot of explicit SIMD
90 (single instruction, multiple data) optimization that can use
91 assembly instructions available on most modern processors. This
92 can have a substantial effect on performance, but for recent
93 processors you also need a similarly recent compiler that includes
94 support for the corresponding SIMD instruction set to get this
95 benefit. The configuration does a good job at detecting this,
96 and you will usually get warnings if GROMACS and your hardware
97 support a more recent instruction set than your compiler.
98
99 * On Intel-based x86 hardware, we recommend you to use the GNU
100 compilers version 4.7 or later or Intel compilers version 12 or later
101 for best performance. The Intel compiler has historically been better
102 at instruction scheduling, but recent gcc versions have proved to be
103 as fast or sometimes faster than Intel.
104
105 * The Intel and GNU compilers produce much faster GROMACS executables
106 than the PGI and Cray compilers.
107
108 * On AMD-based x86 hardware up through the "K10" microarchitecture
109 ("Family 10h") Thuban/Magny-Cours architecture (e.g. Opteron
110 6100-series processors), it is worth using the Intel compiler for
111 better performance, but gcc version 4.7 and later are also reasonable.
112
113 * On the AMD Bulldozer architecture (Opteron 6200), AMD introduced
114 fused multiply-add instructions and an "FMA4" instruction format not
115 available on Intel x86 processors. Thus, on the most recent AMD
116 processors you want to use gcc version 4.7 or later for best
117 performance! The Intel compiler will only generate code for the subset
118 also supported by Intel processors, and that is significantly slower.
119
120 * If you are running on Mac OS X, the best option is the Intel
121 compiler. Both clang and gcc will work, but they produce lower
122 performance and each have some shortcomings. Current Clang does not
123 support OpenMP. This may change when clang 3.5 becomes available.
124
125 * For all non-x86 platforms, your best option is typically to use the
126 vendor's default or recommended compiler, and check for specialized
127 information below.
128
129 ## Compiling with parallelization options ##
130
131 GROMACS can run in parallel on multiple cores of a single
132 workstation using its built-in thread-MPI. No user action is required
133 in order to enable this.
134
135 ### GPU support ###
136
137 If you wish to use the excellent native GPU support in GROMACS,
138 NVIDIA's [CUDA](http://www.nvidia.com/object/cuda_home_new.html)
139 version @REQUIRED_CUDA_VERSION@ software development kit is required,
140 and the latest version is strongly encouraged. NVIDIA GPUs with at
141 least NVIDIA compute capability @REQUIRED_CUDA_COMPUTE_CAPABILITY@ are
142 required, e.g. Fermi or Kepler cards. You are strongly recommended to
143 get the latest CUDA version and driver supported by your hardware, but
144 beware of possible performance regressions in newer CUDA versions on
145 older hardware. Note that while some CUDA compilers (nvcc) might not
146 officially support recent versions of gcc as the back-end compiler, we
147 still recommend that you at least use a gcc version recent enough to
148 get the best SIMD support for your CPU, since GROMACS always runs some
149 code on the CPU. It is most reliable to use the same C++ compiler
150 version for GROMACS code as used as the back-end compiler for nvcc,
151 but it could be faster to mix compiler versions to suit particular
152 contexts.
153
154 ### MPI support ###
155
156 If you wish to run in parallel on multiple machines across a network,
157 you will need to have
158
159 * an MPI library installed that supports the MPI 1.3
160   standard, and
161 * wrapper compilers that will compile code using that library.
162
163 The GROMACS team recommends [OpenMPI](http://www.open-mpi.org) version
164 1.6 (or higher), [MPICH](http://www.mpich.org) version 1.4.1 (or
165 higher), or your hardware vendor's MPI installation. The most recent
166 version of either of these is likely to be the best. More specialized
167 networks might depend on accelerations only available in the vendor's
168 library. [LAMMPI](http://www.lam-mpi.org) might work, but since it has
169 been deprecated for years, it is not supported.
170
171 Often [OpenMP](http://en.wikipedia.org/wiki/OpenMP) parallelism is an
172 advantage for GROMACS, but support for this is generally built into
173 your compiler and detected automatically.
174
175 In summary, for maximum performance you will need to examine how you
176 will use GROMACS, what hardware you plan to run on, and whether you
177 can afford a non-free compiler for slightly better
178 performance. Unfortunately, the only way to find out is to test
179 different options and parallelization schemes for the actual
180 simulations you want to run. You will still get *good*,
181 performance with the default build and runtime options, but if you
182 truly want to push your hardware to the performance limit, the days of
183 just blindly starting programs with `mdrun` are gone.
184
185 ## CMake ##
186
187 GROMACS @PROJECT_VERSION@ uses the CMake build system, and requires
188 version @GMX_CMAKE_MINIMUM_REQUIRED_VERSION@ or higher. Lower versions
189 will not work. You can check whether CMake is installed, and what
190 version it is, with `cmake --version`. If you need to install CMake,
191 then first check whether your platform's package management system
192 provides a suitable version, or visit
193 <http://www.cmake.org/cmake/help/install.html> for pre-compiled
194 binaries, source code and installation instructions. The GROMACS team
195 recommends you install the most recent version of CMake you can.
196
197 ## Fast Fourier Transform library ##
198
199 Many simulations in GROMACS make extensive use of fast Fourier
200 transforms, and a software library to perform these is always
201 required. We recommend [FFTW](http://www.fftw.org) (version 3 or
202 higher only) or
203 [Intel MKL](http://software.intel.com/en-us/intel-mkl). The choice of
204 library can be set with `cmake -DGMX_FFT_LIBRARY=<name>`, where
205 `<name>` is one of `fftw`, `mkl`, or `fftpack`. FFTPACK is bundled
206 with GROMACS as a fallback, and is acceptable if mdrun performance is
207 not a priority.
208
209 ### FFTW ###
210
211 FFTW is likely to be available for your platform via its package
212 management system, but there can be compatibility and significant
213 performance issues associated with these packages. In particular,
214 GROMACS simulations are normally run in "mixed" floating-point
215 precision, which is suited for the use of single precision in
216 FFTW. The default FFTW package is normally in double
217 precision, and good compiler options to use for FFTW when linked to
218 GROMACS may not have been used. Accordingly, the GROMACS team
219 recommends either
220
221 * that you permit the GROMACS installation to download and
222   build FFTW from source automatically for you (use
223   `cmake -DGMX_BUILD_OWN_FFTW=ON`), or
224 * that you build FFTW from the source code.
225
226 Note that the GROMACS-managed download of the FFTW tarball has a
227 slight chance of posing a security risk. If you use this option, you
228 will see a warning that advises how you can eliminate this risk
229 (before the opportunity has arisen).
230
231 If you build FFTW from source yourself, get the most recent version
232 and follow its [installation
233 guide](http://www.fftw.org/doc/Installation-and-Customization.html#Installation-and-Customization).
234 Choose the precision for FFTW (i.e. single or float vs. double) to
235 match whether you will later use mixed or double precision for
236 GROMACS. There is no need to compile FFTW with
237 threading or MPI support, but it does no harm. On x86 hardware,
238 compile *only* with `--enable-sse2` (regardless of precision) even if
239 your processors can take advantage of AVX extensions. Since GROMACS
240 uses fairly short transform lengths we do not benefit from the FFTW
241 AVX acceleration, and because of memory system performance
242 limitations, it can even degrade GROMACS performance by around
243 20%. There is no way for GROMACS to limit the use to SSE2 SIMD at run
244 time if AVX support has been compiled into FFTW, so you need to set
245 this at compile time.
246
247 ### MKL ###
248
249 Using MKL with the Intel Compilers version 11 or higher is very
250 simple. Set up your compiler environment correctly, perhaps with a
251 command like `source /path/to/compilervars.sh intel64` (or consult
252 your local documentation). Then set `-DGMX_FFT_LIBRARY=mkl` when you
253 run cmake. In this case, GROMACS will also use MKL for BLAS and LAPACK
254 (see
255 [linear algebra libraries](#linear-algebra-libraries)). Generally,
256 there is no advantage in using MKL with GROMACS, and FFTW is often
257 faster.
258
259 Otherwise, you can get your hands dirty and configure MKL by setting
260
261     -DGMX_FFT_LIBRARY=mkl
262     -DMKL_LIBRARIES="/full/path/to/libone.so;/full/path/to/libtwo.so"
263     -DMKL_INCLUDE_DIR="/full/path/to/mkl/include"
264
265 where the full list (and order!) of libraries you require are found in
266 Intel's MKL documentation for your system.
267
268 ## Optional build components ##
269
270 * Compiling to run on NVIDIA GPUs requires CUDA
271 * An external Boost library can be used to provide better
272   implementation support for smart pointers and exception handling,
273   but the GROMACS source bundles a subset of Boost 1.55.0 as a fallback
274 * Hardware-optimized BLAS and LAPACK libraries are useful
275   for a few of the GROMACS utilities focused on normal modes and
276   matrix manipulation, but they do not provide any benefits for normal
277   simulations. Configuring these are discussed at
278   [linear algebra libraries](#linear-algebra-libraries).
279 * The built-in GROMACS trajectory viewer `gmx view` requires X11 and
280   Motif/Lesstif libraries and header files. You may prefer to use
281   third-party software for visualization, such as
282   [VMD](http://www.ks.uiuc.edu/Research/vmd) or
283   [PyMOL](http://www.pymol.org).
284 * An external TNG library for trajectory-file handling can be used,
285   but TNG 1.6 is bundled in the GROMACS source already
286 * zlib is used by TNG for compressing some kinds of trajectory data
287 * Running the GROMACS test suite requires libxml2
288 * Building the GROMACS documentation requires ImageMagick, pdflatex,
289   bibtex, doxygen and pandoc.
290 * The GROMACS utility programs often write data files in formats
291   suitable for the Grace plotting tool, but it is straightforward to
292   use these files in other plotting programs, too.
293
294 # Doing a build of GROMACS #
295
296 This section will cover a general build of GROMACS with CMake, but it
297 is not an exhaustive discussion of how to use CMake. There are many
298 resources available on the web, which we suggest you search for when
299 you encounter problems not covered here. The material below applies
300 specifically to builds on Unix-like systems, including Linux, and Mac
301 OS X. For other platforms, see the specialist instructions below.
302
303 ## Configuring with CMake ##
304
305 CMake will run many tests on your system and do its best to work out
306 how to build GROMACS for you. If your build machine is the same as
307 your target machine, then you can be sure that the defaults will be
308 pretty good. The build configuration will for instance attempt to
309 detect the specific hardware instructions available in your
310 processor. However, if you want to control aspects of the build, or
311 you are compiling on a cluster head node for back-end nodes with a
312 different architecture, there are plenty of things you can set
313 manually.
314
315 The best way to use CMake to configure GROMACS is to do an
316 "out-of-source" build, by making another directory from which you will
317 run CMake. This can be outside the source directory, or a subdirectory
318 of it. It also means you can never corrupt your source code by trying
319 to build it! So, the only required argument on the CMake command line
320 is the name of the directory containing the `CMakeLists.txt` file of
321 the code you want to build. For example, download the source tarball
322 and use
323
324     $ tar xfz gromacs-@PROJECT_VERSION@.tgz
325     $ cd gromacs-@PROJECT_VERSION@
326     $ mkdir build-gromacs
327     $ cd build-gromacs
328     $ cmake ..
329
330 You will see `cmake` report a sequence of results of tests and
331 detections done by the GROMACS build system. These are written to the
332 `cmake` cache, kept in `CMakeCache.txt`. You can edit this file by
333 hand, but this is not recommended because you could make a mistake.
334 You should not attempt to move or copy this file to do another build,
335 because file paths are hard-coded within it. If you mess things up,
336 just delete this file and start again with `cmake`.
337
338 If there is a serious problem detected at this stage, then you will see
339 a fatal error and some suggestions for how to overcome it. If you are
340 not sure how to deal with that, please start by searching on the web
341 (most computer problems already have known solutions!) and then
342 consult the gmx-users mailing list. There are also informational
343 warnings that you might like to take on board or not. Piping the
344 output of `cmake` through `less` or `tee` can be
345 useful, too.
346
347 Once `cmake` returns, you can see all the settings that were chosen
348 and information about them by using e.g. the curses interface
349
350     $ ccmake ..
351
352 You can actually use `ccmake` (available on most Unix platforms,
353 if the curses library is supported) directly in the first step, but then
354 most of the status messages will merely blink in the lower part
355 of the terminal rather than be written to standard out. Most platforms
356 including Linux, Windows, and Mac OS X even have native graphical user interfaces for
357 `cmake`, and it can create project files for almost any build environment
358 you want (including Visual Studio or Xcode).
359 Check out <http://www.cmake.org/cmake/help/runningcmake.html> for
360 general advice on what you are seeing and how to navigate and change
361 things. The settings you might normally want to change are already
362 presented. You may make changes, then re-configure (using `c`), so that it
363 gets a chance to make changes that depend on yours and perform more
364 checking. It may take several configuration passes to reach the desired
365 configuration, in particular if you need to resolve errors.
366
367 A key thing to consider here is the setting of
368 `CMAKE_INSTALL_PREFIX`. You will need to be able to write to this
369 directory in order to install GROMACS later, and if you change your
370 mind later, changing it in the cache triggers a full re-build,
371 unfortunately. So if you do not have super-user privileges on your
372 machine, then you will need to choose a sensible location within your
373 home directory for your GROMACS installation. Even if you do have
374 super-user privileges, you should use them only for the installation
375 phase, and never for configuring, building, or running GROMACS!
376
377 When you have reached the desired configuration with `ccmake`, the
378 build system can be generated by pressing `g`.  This requires that the previous
379 configuration pass did not reveal any additional settings (if it did, you need
380 to configure once more with `c`).  With `cmake`, the build system is generated
381 after each pass that does not produce errors.
382
383 You cannot attempt to change compilers after the initial run of
384 `cmake`. If you need to change, clean up, and start again.
385
386 ### Using CMake command-line options ###
387
388 Once you become comfortable with setting and changing options, you may
389 know in advance how you will configure GROMACS. If so, you can speed
390 things up by invoking `cmake` and passing the various options at once
391 on the command line. This can be done by setting cache variable at the
392 cmake invocation using the `-DOPTION=VALUE`; note that some
393 environment variables are also taken into account, in particular
394 variables like CC, CXX, FCC (which may be familiar to autoconf users).
395
396 For example, the following command line
397
398     $ cmake .. -DGMX_GPU=ON -DGMX_MPI=ON -DCMAKE_INSTALL_PREFIX=/home/marydoe/programs
399
400 can be used to build with GPUs, MPI and install in a custom
401 location. You can even save that in a shell script to make it even
402 easier next time. You can also do this kind of thing with `ccmake`,
403 but you should avoid this, because the options set with `-D` will not
404 be able to be changed interactively in that run of `ccmake`.
405
406 ### SIMD support ###
407
408 GROMACS has extensive support for detecting and using the SIMD
409 capabilities of many modern HPC CPU architectures. If you are building
410 GROMACS on the same hardware you will run it on, then you don't need
411 to read more about this, unless you are getting configuration warnings
412 you do not understand. By default, the GROMACS build system will
413 detect the SIMD instruction set supported by the CPU architecture (on
414 which the configuring is done), and thus pick the best
415 available SIMD parallelization supported by GROMACS. The build system
416 will also check that the compiler and linker used also support the
417 selected SIMD instruction set and issue a fatal error if they
418 do not.
419
420 Valid values are listed below, and the
421 applicable value lowest on the list is generally the one you should
422 choose:
423
424 1. `None` For use only on an architecture either lacking SIMD,
425   or to which GROMACS has not yet been ported and none of the
426   options below are applicable.
427 2. `SSE2` This SIMD instruction set was introduced in Intel
428    processors in 2001, and AMD in 2003. Essentially all x86
429    machines in existence have this, so it might be a good choice if
430    you need to support dinosaur x86 computers too.
431 3. `SSE4.1` Present in all Intel core processors since 2007,
432    but notably not in AMD magny-cours. Still, almost all recent
433    processors support this, so this can also be considered a good
434    baseline if you are content with portability between reasonably
435    modern processors.
436 4. `AVX_128_FMA` AMD bulldozer processors (2011) have this.
437    Unfortunately Intel and AMD have diverged the last few years;
438    If you want good performance on modern AMD processors
439    you have to use this since it also allows the reset of the
440    code to use AMD 4-way fused multiply-add instructions. The drawback
441    is that your code will not run on Intel processors at all.
442 5. `AVX_256` This instruction set is present on Intel processors
443    since Sandy Bridge (2011), where it is the best choice unless
444    you have an even more recent CPU that supports AVX2. While this
445    code will work on recent AMD processors, it is significantly
446    less efficient than the AVX_128_FMA choice above - do not be
447    fooled to assume that 256 is better than 128 in this case.
448 6. `AVX2_256` Present on Intel Haswell processors released in 2013,
449    and it will also enable Intel 3-way fused multiply-add instructions.
450    This code will not work on AMD CPUs.
451 7. `IBM_QPX ` BlueGene/Q A2 cores have this.
452 8. `Sparc64_HPC_ACE` Fujitsu machines like the K computer have this.
453
454 The CMake configure system will check that the compiler you have
455 chosen can target the architecture you have chosen. `mdrun` will check
456 further at runtime, so if in doubt, choose the lowest setting you
457 think might work, and see what `mdrun` says. The configure system also
458 works around many known issues in many versions of common HPC
459 compilers. However, since the options also enable general compiler
460 flags for the platform in question, you can end up in situations
461 where e.g. an `AVX_128_FMA` binary will just crash on any
462 Intel machine, since the code will try to execute general illegal
463 instructions (inserted by the compiler) before `mdrun` gets to the
464 architecture detection routines.
465
466 A further `GMX_SIMD=Reference` option exists, which is a special
467 SIMD-like implementation written in plain C that developers can use
468 when developing support in GROMACS for new SIMD architectures. It is
469 not designed for use in production simulations, but if you are using
470 an architecture with SIMD support to which GROMACS has not yet been
471 ported, you may wish to try this option instead of the default
472 `GMX_SIMD=None`, as it can often out-perform this when the
473 auto-vectorization in your compiler does a good job. And post on the
474 GROMACS mailing lists, because GROMACS can probably be ported for new
475 SIMD architectures in a few days.
476
477 ### CMake advanced options ###
478
479 The options that are displayed in the default view of `ccmake` are
480 ones that we think a reasonable number of users might want to consider
481 changing. There are a lot more options available, which you can see by
482 toggling the advanced mode in `ccmake` on and off with `t`. Even
483 there, most of the variables that you might want to change have a
484 `CMAKE_` or `GMX_` prefix. There are also some options that will be
485 visible or not according to whether their preconditions are satisfied.
486
487 ### Helping CMake find the right libraries/headers/programs ###
488
489 If libraries are installed in non-default locations their location can
490 be specified using the following environment variables:
491
492 * `CMAKE_INCLUDE_PATH` for header files
493 * `CMAKE_LIBRARY_PATH` for libraries
494 * `CMAKE_PREFIX_PATH` for header, libraries and binaries
495   (e.g. `/usr/local`).
496
497 The respective `include`, `lib`, or `bin` is
498 appended to the path. For each of these variables, a list of paths can
499 be specified (on Unix, separated with ":"). Note that these are
500 enviroment variables (and not `cmake` command-line arguments) and in
501 a `bash` shell are used like:
502
503     $ CMAKE_PREFIX_PATH=/opt/fftw:/opt/cuda cmake ..
504
505 Alternatively, these variables are also `cmake` options, so they can
506 be set like `-DCMAKE_PREFIX_PATH=/opt/fftw:/opt/cuda`.
507
508 The `CC` and `CXX` environment variables are also useful
509 for indicating to `cmake` which compilers to use, which can be very
510 important for maximising GROMACS performance. Similarly,
511 `CFLAGS`/`CXXFLAGS` can be used to pass compiler
512 options, but note that these will be appended to those set by
513 GROMACS for your build platform and build type. You can customize
514 some of this with advanced options such as `CMAKE_C_FLAGS`
515 and its relatives.
516
517 See also: <http://cmake.org/Wiki/CMake_Useful_Variables#Environment_Variables>
518
519 ### Native GPU acceleration ###
520 If you have the CUDA Toolkit installed, you can use `cmake` with:
521
522     $ cmake .. -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda
523
524 (or whichever path has your installation). In some cases, you might
525 need to specify manually which of your C++ compilers should be used,
526 e.g. with the advanced option `CUDA_HOST_COMPILER`.
527
528 The GPU acceleration has been tested on AMD64/x86-64 platforms with
529 Linux, Mac OS X and Windows operating systems, but Linux is the
530 best-tested and supported of these. Linux running on ARM v7 (32 bit)
531 CPUs also works.
532
533 ### Static linking ###
534 Dynamic linking of the GROMACS executables will lead to a
535 smaller disk footprint when installed, and so is the default on
536 platforms where we believe it has been tested repeatedly and found to work.
537 In general, this includes Linux, Windows, Mac OS X and BSD systems.
538 Static binaries take much more space, but on some hardware and/or under
539 some conditions they are necessary, most commonly when you are running a parallel
540 simulation using MPI libraries (e.g. BlueGene, Cray).
541
542 * To link GROMACS binaries
543 statically against the internal GROMACS libraries, set
544 `-DBUILD_SHARED_LIBS=OFF`.
545 * To link statically against external (non-system) libraries as well,
546 the `-DGMX_PREFER_STATIC_LIBS=ON` option can be used. Note, that in
547 general `cmake` picks up whatever is available, so this option only
548 instructs `cmake` to prefer static libraries when both static and
549 shared are available. If no static version of an external library is
550 available, even when the aforementioned option is `ON`, the shared
551 library will be used. Also note, that the resulting binaries will
552 still be dynamically linked against system libraries on platforms
553 where that is the default. To use static system libraries, additional
554 compiler/linker flags are necessary, e.g. `-static-libgcc
555 -static-libstdc++`.
556
557 ### Portability aspects ###
558
559 Here, we consider portability aspects related to CPU instruction sets,
560 for details on other topics like binaries with statical vs dynamic
561 linking please consult the relevant parts of this documentation or
562 other non-GROMACS specific resources.
563
564 A GROMACS build will normally not be portable, not even across
565 hardware with the same base instruction set like x86. Non-portable
566 hardware-specific optimizations are selected at configure-time, such
567 as the SIMD instruction set used in the compute-kernels. This
568 selection will be done by the build system based on the capabilities
569 of the build host machine or based on cross-compilation information
570 provided to `cmake` at configuration.
571
572 Often it is possible to ensure portability by choosing the least
573 common denominator of SIMD support, e.g. SSE2 for x86, and ensuring
574 the you use `cmake -DGMX_USE_RDTSCP=off` if any of the target CPU
575 architectures does not support the `RDTSCP` instruction.  However, we
576 discourage attempts to use a single GROMACS installation when the
577 execution environment is heterogeneous, such as a mix of AVX and
578 earlier hardware, because this will lead to programs (especially
579 `mdrun`) that run slowly on the new hardware. Building two full
580 installations and locally managing how to call the correct one
581 (e.g. using the module system) is the recommended
582 approach. Alternatively, as at the moment the GROMACS tools do not
583 make strong use of SIMD acceleration, it can be convenient to create
584 an installation with tools portable across different x86 machines, but
585 with separate `mdrun` binaries for each architecture. To achieve this,
586 one can first build a full installation with the
587 least-common-denominator SIMD instruction set, e.g. `-DGMX_SIMD=SSE2`,
588 then build separate `mdrun` binaries for each architecture present in
589 the heterogeneous environment. By using custom binary and library
590 suffixes for the `mdrun`-only builds, these can be installed to the
591 same location as the "generic" tools installation. Building [only the
592 `mdrun` binary](#building-only-mdrun) is possible by setting the `-DGMX_BUILD_MDRUN_ONLY=ON`
593 option.
594
595 ### Linear algebra libraries ###
596
597 As mentioned above, sometimes vendor BLAS and LAPACK libraries
598 can provide performance enhancements for GROMACS when doing
599 normal-mode analysis or covariance analysis. For simplicity, the text
600 below will refer only to BLAS, but the same options are available
601 for LAPACK. By default, CMake will search for BLAS, use it if it
602 is found, and otherwise fall back on a version of BLAS internal to
603 GROMACS. The `cmake` option `-DGMX_EXTERNAL_BLAS=on` will be set
604 accordingly. The internal versions are fine for normal use. If you
605 need to specify a non-standard path to search, use
606 `-DCMAKE_PREFIX_PATH=/path/to/search`. If you need to specify a
607 library with a non-standard name (e.g. ESSL on AIX or BlueGene), then
608 set `-DGMX_BLAS_USER=/path/to/reach/lib/libwhatever.a`.
609
610 If you are using Intel MKL for FFT, then the BLAS and
611 LAPACK it provides are used automatically. This could be
612 over-ridden with `GMX_BLAS_USER`, etc.
613
614 On Apple platforms where the Accelerate Framework is available, these
615 will be automatically used for BLAS and LAPACK. This could be
616 over-ridden with `GMX_BLAS_USER`, etc.
617
618 ### Changing the names of GROMACS binaries and libraries ###
619
620 It is sometimes convenient to have different versions of the same
621 GROMACS programs installed. The most common use cases have been single
622 and double precision, and with and without MPI. This mechanism can
623 also be used to install side-by-side multiple versions of `mdrun`
624 optimized for different CPU architectures, as mentioned previously.
625
626 By default, GROMACS will suffix programs and libraries for such builds
627 with `_d` for double precision and/or `_mpi` for MPI (and nothing
628 otherwise). This can be controlled manually with `GMX_DEFAULT_SUFFIX
629 (ON/OFF)`, `GMX_BINARY_SUFFIX` (takes a string) and `GMX_LIBS_SUFFIX`
630 (also takes a string). For instance, to set a custom suffix for
631 programs and libraries, one might specify:
632
633     cmake .. -DGMX_DEFAULT_SUFFIX=OFF -DGMX_BINARY_SUFFIX=_mod -DGMX_LIBS_SUFFIX=_mod
634
635 Thus the names of all programs and libraries will be appended with
636 `_mod`.
637
638 ### Changing installation tree structure ###
639
640 By default, a few different directories under `CMAKE_INSTALL_PREFIX` are used
641 when when GROMACS is installed. Some of these can be changed, which is mainly
642 useful for packaging GROMACS for various distributions. The directories are
643 listed below, with additional notes about some of them. Unless otherwise noted,
644 the directories can be renamed by editing the installation paths in the main
645 CMakeLists.txt.
646
647 `bin/`
648   : The standard location for executables, some scripts, and some symlinks.
649     Some of the scripts hardcode the absolute installation prefix, which needs
650     to be changed if the scripts are relocated.
651 `include/gromacs/`
652   : The standard location for installed headers.
653 `lib/`
654   : The standard location for libraries. The default depends on the system, and
655     is determined by CMake.
656     The name of the directory can be changed using `GMX_LIB_INSTALL_DIR` CMake
657     variable.
658 `share/gromacs/`
659   : Various data files and some documentation go here.
660     The `gromacs` part can be changed using `GMX_DATA_INSTALL_DIR`. Using this
661     CMake variable is the preferred way of changing the installation path for
662     `share/gromacs/top/`, since the path to this directory is built into
663     `libgromacs` as well as some scripts, both as a relative and as an absolute
664     path (the latter as a fallback if everything else fails).
665 `share/man/`
666   : Installed man pages go here.
667
668 ## Building GROMACS ##
669
670 Once you have configured with `cmake`, you can build GROMACS. It is
671 expected that the `make` procedure will always complete successfully,
672 and give few or no warnings. The tests GROMACS makes on the settings
673 you choose are pretty extensive, but there are probably a few cases we
674 have not thought of yet. Search the web first for solutions to
675 problems, but if you need help, ask on gmx-users, being sure to
676 provide as much information as possible about what you did, the system
677 you are building on, and what went wrong. This may mean scrolling back
678 a long way through the output of `make` to find the first error
679 message!
680
681 If you have a multi-core or multi-CPU machine with `N`
682 processors, then using
683     $ make -j N
684 will generally speed things up by quite a bit. Other build generator systems
685 supported by `cmake` (e.g. `ninja`) also work well.
686
687 ### Building only mdrun ###
688
689 Past versions of the build system offered "mdrun" and "install-mdrun"
690 targets (similarly for other programs too) to build and install only
691 the mdrun program, respectively. Such a build is useful when the
692 configuration is only relevant for `mdrun` (such as with
693 parallelization options for MPI, SIMD, GPUs, or on BlueGene or Cray),
694 or the length of time for the compile-link-install cycle is relevant
695 when developing.
696
697 This is now supported with the `cmake` option
698 `-DGMX_BUILD_MDRUN_ONLY=ON`, which will build a cut-down version of
699 `libgromacs` and/or the `mdrun` program (according to whether shared
700 or static). Naturally, now `make install` installs only those
701 products. By default, mdrun-only builds will default to static linking
702 against GROMACS libraries, because this is generally a good idea for
703 the targets for which an mdrun-only build is desirable. If you re-use
704 a build tree and change to the mdrun-only build, then you will inherit
705 the setting for `BUILD_SHARED_LIBS` from the old build, and will be
706 warned that you may wish to manage `BUILD_SHARED_LIBS` yourself.
707
708 ## Installing GROMACS ##
709
710 Finally, `make install` will install GROMACS in the
711 directory given in `CMAKE_INSTALL_PREFIX`. If this is a system
712 directory, then you will need permission to write there, and you
713 should use super-user privileges only for `make install` and
714 not the whole procedure.
715
716 ## Getting access to GROMACS after installation ##
717
718 GROMACS installs the script `GMXRC` in the `bin`
719 subdirectory of the installation directory
720 (e.g. `/usr/local/gromacs/bin/GMXRC`), which you should source
721 from your shell:
722
723     $ source /your/installation/prefix/here/bin/GMXRC
724
725 It will detect what kind of shell you are running and set up your
726 environment for using GROMACS. You may wish to arrange for your
727 login scripts to do this automatically; please search the web for
728 instructions on how to do this for your shell. 
729
730 Many of the GROMACS programs rely on data installed in the
731 `share/gromacs` subdirectory of the installation directory. By
732 default, the programs will use the environment variables set in the
733 `GMXRC` script, and if this is not available they will try to guess the
734 path based on their own location.  This usually works well unless you
735 change the names of directories inside the install tree. If you still
736 need to do that, you might want to recompile with the new install
737 location properly set, or edit the `GMXRC` script.
738
739 ## Testing GROMACS for correctness ##
740
741 Since 2011, the GROMACS development uses an automated system where
742 every new code change is subject to regression testing on a number of
743 platforms and software combinations. While this improves
744 reliability quite a lot, not everything is tested, and since we
745 increasingly rely on cutting edge compiler features there is
746 non-negligible risk that the default compiler on your system could
747 have bugs. We have tried our best to test and refuse to use known bad
748 versions in `cmake`, but we strongly recommend that you run through
749 the tests yourself. It only takes a few minutes, after which you can
750 trust your build.
751
752 The simplest way to run the checks is to build GROMACS with
753 `-DREGRESSIONTEST_DOWNLOAD`, and run `make check`.
754 GROMACS will automatically download and run the tests for you.
755 Alternatively, you can download and unpack the tarball yourself from
756 <http://gerrit.gromacs.org/download/regressiontests-@REGRESSIONTEST_VERSION@.tar.gz>,
757 and use the advanced `cmake` option `REGRESSIONTEST_PATH` to
758 specify the path to the unpacked tarball, which will then be used for
759 testing. If the above does not work, then please read on.
760
761 The regression tests are available from the GROMACS website and ftp
762 site.  Once you have downloaded them, unpack the tarball, source
763 `GMXRC` as described above, and run `./gmxtest.pl all`
764 inside the regression tests folder. You can find more options
765 (e.g. adding `double` when using double precision, or
766 `-only expanded` to run just the tests whose names match
767 "expanded") if you just execute the script without options.
768
769 Hopefully, you will get a report that all tests have passed. If there
770 are individual failed tests it could be a sign of a compiler bug, or
771 that a tolerance is just a tiny bit too tight. Check the output files
772 the script directs you too, and try a different or newer compiler if
773 the errors appear to be real. If you cannot get it to pass the
774 regression tests, you might try dropping a line to the gmx-users
775 mailing list, but then you should include a detailed description of
776 your hardware, and the output of `mdrun -version` (which contains
777 valuable diagnostic information in the header).
778
779 A build with `-DGMX_BUILD_MDRUN_ONLY` cannot be tested with
780 `make check` from the build tree, because most of the tests
781 require a full build to run things like `grompp`. To test such an
782 mdrun fully requires installing it to the same location as a normal
783 build of GROMACS, downloading the regression tests tarball manually
784 as described above, sourcing the correct `GMXRC` and running the
785 perl script manually. For example, from your GROMACS source
786 directory:
787
788     $ mkdir build-normal
789     $ cd build-normal
790     $ cmake .. -DCMAKE_INSTALL_PREFIX=/your/installation/prefix/here
791     $ make -j 4
792     $ make install
793     $ cd ..
794     $ mkdir build-mdrun-only
795     $ cd build-mdrun-only
796     $ cmake .. -DGMX_MPI=ON -DGMX_GPU=ON -DGMX_BUILD_MDRUN_ONLY=ON -DCMAKE_INSTALL_PREFIX=/your/installation/prefix/here
797     $ make -j 4
798     $ make install
799     $ cd /to/your/unpacked/regressiontests
800     $ source /your/installation/prefix/here/bin/GMXRC
801     $ ./gmxtest.pl all -np 2
802
803 If your `mdrun` program has been suffixed in a non-standard way, then
804 the `./gmxtest.pl -mdrun` option will let you specify that name to the
805 test machinery. You can use `./gmxtest.pl -double` to test the
806 double-precision version. You can use `./gmxtest.pl -crosscompiling`
807 to stop the test harness attempting to check that the programs can
808 be run.
809
810
811 ## Testing GROMACS for performance ##
812 We are still working on a set of benchmark systems for testing
813 the performance of GROMACS. Until that is ready, we recommend that
814 you try a few different parallelization options, and experiment with
815 tools such as `gmx tune_pme`.
816
817 ## Having difficulty? ##
818 You are not alone - this can be a complex task! If you encounter a
819 problem with installing GROMACS, then there are a number of
820 locations where you can find assistance. It is recommended that you
821 follow these steps to find the solution:
822
823 1. Read the installation instructions again, taking note that you
824    have followed each and every step correctly.
825
826 2. Search the GROMACS website and users emailing list for information
827    on the error. Adding
828    "site:https://mailman-1.sys.kth.se/pipermail/gromacs.org_gmx-users"
829    to a Google search may help filter better results.
830
831 3. Search the internet using a search engine such as Google.
832
833 4. Post to the GROMACS users emailing list gmx-users for
834    assistance. Be sure to give a full description of what you have
835    done and why you think it did not work. Give details about the
836    system on which you are installing.  Copy and paste your command
837    line and as much of the output as you think might be relevant -
838    certainly from the first indication of a problem. In particular,
839    please try to include at least the header from the mdrun logfile,
840    and preferably the entire file.  People who might volunteer to help
841    you do not have time to ask you interactive detailed follow-up
842    questions, so you will get an answer faster if you provide as much
843    information as you think could possibly help. High quality bug
844    reports tend to receive rapid high quality answers.
845
846 # Special instructions for some platforms #
847
848 ## Building on Windows ##
849
850 Building on Windows using native compilers is rather similar to
851 building on Unix, so please start by reading the above. Then, download
852 and unpack the GROMACS source archive. Make a folder in which to do
853 the out-of-source build of GROMACS. For example, make it within the
854 folder unpacked from the source archive, and call it `build-gromacs`.
855
856 For CMake, you can either use the graphical user interface provided on
857 Windows, or you can use a command line shell with instructions similar
858 to the UNIX ones above. If you open a shell from within your IDE
859 (e.g. Microsoft Visual Studio), it will configure the environment for
860 you, but you might need to tweak this in order to get either a 32-bit
861 or 64-bit build environment. The latter provides the fastest
862 executable. If you use a normal Windows command shell, then you will
863 need to either set up the environment to find your compilers and
864 libraries yourself, or run the `vcvarsall.bat` batch script provided
865 by MSVC (just like sourcing a bash script under Unix).
866
867 With the graphical user interface, you will be asked about what
868 compilers to use at the initial configuration stage, and if you use
869 the command line they can be set in a similar way as under UNIX. You
870 will probably make your life easier and faster by using the new
871 facility to download and install FFTW automatically.
872
873 For the build, you can either load the generated solutions file into
874 e.g. Visual Studio, or use the command line with `cmake --build` so
875 the right tools get used.
876
877 ## Building on Cray ##
878
879 GROMACS builds mostly out of the box on modern Cray machines, but
880 * you may need to specify the use of static or dynamic libraries
881   (depending on the machine) with `-DBUILD_SHARED_LIBS=off`,
882 * you may need to set the F77 environmental variable to `ftn` when
883   compiling FFTW,
884 * you may need to use `-DCMAKE_SKIP_RPATH=YES`, and
885 * you may need to modify the CMakeLists.txt files to specify the
886   `BUILD_SEARCH_END_STATIC` target property.
887
888 ## Building on BlueGene ##
889
890 ### BlueGene/Q ###
891
892 There is currently native acceleration on this platform for the Verlet
893 cut-off scheme. There are no plans to provide accelerated kernels for
894 the group cut-off scheme, but the default plain C kernels will work
895 (slowly).
896
897 Only static linking with XL compilers is supported by GROMACS. Dynamic
898 linking would be supported by the architecture and GROMACS, but has no
899 advantages other than disk space, and is generally discouraged on
900 BlueGene for performance reasons.
901
902 Computation on BlueGene floating-point units is always done in
903 double-precision. However, mixed-precision builds of GROMACS are still
904 normal and encouraged since they use cache more efficiently. The
905 BlueGene hardware automatically converts values stored in single
906 precision in memory to double precision in registers for computation,
907 converts the results back to single precision correctly, and does so
908 for no additional cost. As with other platforms, doing the whole
909 computation in double precision normally shows no improvement in
910 accuracy and costs twice as much time moving memory around.
911
912 You need to arrange for FFTW to be installed correctly, following the
913 above instructions.
914
915 `mpicc` is used for compiling and linking. This can make it awkward to
916 attempt to use IBM's optimized BLAS/LAPACK called ESSL (see the
917 section on
918 [linear algebra libraries](#linear-algebra-libraries)). Since mdrun is
919 the only part of GROMACS that should normally run on the compute
920 nodes, and there is nearly no need for linear algebra support for
921 mdrun, it is recommended to use the GROMACS built-in linear algebra
922 routines - it is rare for this to run slowly.
923
924 The recommended configuration is to use
925
926     cmake .. -DCMAKE_TOOLCHAIN_FILE=Platform/BlueGeneQ-static-XL-CXX \
927              -DCMAKE_PREFIX_PATH=/your/fftw/installation/prefix \
928              -DGMX_MPI=ON \
929              -DGMX_BUILD_MDRUN_ONLY=ON
930     make
931     make install
932
933 which will build a statically-linked MPI-enabled mdrun for the compute
934 nodes. Otherwise, GROMACS default configuration behaviour applies.
935
936 It is possible to configure and make the remaining GROMACS tools with
937 the compute-node toolchain, but as none of those tools are MPI-aware
938 and could then only run on the compute nodes, this would not normally
939 be useful. Instead, these should be planned to run on the login node,
940 and a separate GROMACS installation performed for that using the login
941 node's toolchain - not the above platform file, or any other
942 compute-node toolchain.
943
944 Note that only the MPI build is available for the compute-node
945 toolchains. The GROMACS thread-MPI or no-MPI builds are not useful at
946 all on BlueGene/Q.
947
948 ### BlueGene/P ###
949
950 There is currently no SIMD support on this platform and no plans to
951 add it. The default plain C kernels will work.
952
953 ### Fujitsu PRIMEHPC ###
954
955 This is the architecture of the K computer, which uses Fujitsu
956 `Sparc64VIIIfx` chips. On this platform, GROMACS @PROJECT_VERSION@ has
957 accelerated group kernels, no accelerated Verlet kernels, and a custom
958 build toolchain.
959
960 ### Intel Xeon Phi ###
961
962 GROMACS @PROJECT_VERSION@ has preliminary support for Intel Xeon Phi. Only symmetric
963 (aka native) mode is supported. GROMACS is functional on Xeon Phi, but
964 it has so far not been optimized to the same level as other
965 architectures have. The performance depends among other factors on the
966 system size, and for
967 now the performance might not be faster than CPUs. Building for Xeon
968 Phi works almost as any other Unix. See the instructions above for
969 details. The recommended configuration is
970
971     cmake .. -DCMAKE_TOOLCHAIN_FILE=Platform/XeonPhi
972     make
973     make install
974
975 # Tested platforms #
976
977 While it is our best belief that GROMACS will build and run pretty
978 much everywhere, it is important that we tell you where we really know
979 it works because we have tested it. We do test on Linux, Windows, and
980 Mac with a range of compilers and libraries for a range of our
981 configuration options. Every commit in our git source code repository
982 is currently tested on x86 with gcc versions ranging from 4.4 through
983 4.7, and versions 12 and 13 of the Intel compiler as well as Clang
984 version 3.1 through 3.4. For this, we use a variety of GNU/Linux
985 flavors and versions as well as recent version of Mac OS X.  Under
986 Windows we test both MSVC and the Intel compiler. For details, you can
987 have a look at the continuous integration server at
988 <http://jenkins.gromacs.org>.
989
990 We test irregularly on ARM v7, BlueGene/Q, Cray, Fujitsu PRIMEHPC, Google
991 Native Client and other environments, and with other compilers and
992 compiler versions, too.