Please send all pull requests to the develop branch.

Requirements

Required libraries

  • GMP is the GNU Multiple Precision Library (RHMC support).
  • MPFR is a C library for multiple-precision floating-point computations with correct rounding (RHMC support).
  • Eigen: bootstrapping GRID downloads and uses for internal dense matrix (non-QCD operations) the Eigen library.

Grid optionally uses:

  • HDF5 for structured data I/O

  • LIME for ILDG and SciDAC file format support.

  • FFTW either generic version or via the Intel MKL library.

  • LAPACK either generic version or Intel MKL library.

Compilers

  • Intel ICPC v17 and later

  • Clang v3.5 and later (need 3.8 and later for OpenMP)

  • GCC v4.9.x

  • GCC v6.3 and later (recommended)

Important:

Some versions of GCC appear to have a bug under high optimisation (-O2, -O3).

The safety of these compiler versions cannot be guaranteed at this time. Follow Issue 100 for details and updates.

GCC v5.x, v6.1, v6.2

Quick start

First, start by cloning the repository:

git clone https://github.com/paboyle/Grid.git

Then enter the cloned directory and set up the build system:

cd Grid
./bootstrap.sh

Now you can execute the configure script to generate makefiles as in this example (here from a build directory):

mkdir build
cd build
../configure --enable-precision=double --enable-simd=AVX --enable-comms=mpi-auto --prefix=<path>

where:

  --enable-precision=single|double

sets the default precision. Since this is largely a benchmarking convenience, it is anticipated that the default precision may be removed in future implementations, and that explicit type selection be made at all points. Naturally, most code will be type templated in any case.::

   --enable-simd=GEN|SSE4|AVX|AVXFMA|AVXFMA4|AVX2|AVX512|NEONv8|QPX

sets the SIMD architecture,

   --enable-comms=mpi|none

selects whether to use MPI communication (mpi) or no communication (none).

   --prefix=<path>

should be passed the prefix path where you want to install Grid.

Other options are detailed in the next section, you can also use

   configure --help

to display them.

Like with any other program using GNU autotool, the

   CXX, CXXFLAGS, LDFLAGS, ... 

environment variables can be modified to customise the build.

Finally, you can build and install Grid:

make
make install   #this is optional

To minimise the build time, only the tests at the root of the tests directory are built by default. If you want to build tests in the sub-directory <subdir> you can execute:

make -C tests/<subdir> tests

If you want to build all the tests at once just use make tests.

Build configuration options

A full list of configurations options is available with the ./configure --help command:

  • --prefix=<path>: installation prefix for Grid.

  • --with-gmp=<path>: look for GMP in the UNIX prefix <path>

  • --with-mpfr=<path>: look for MPFR in the UNIX prefix <path>

  • --with-fftw=<path>: look for FFTW in the UNIX prefix <path>

  • --with-hdf5=<path>: look for HDF5 in the UNIX prefix <path>

  • --with-lime=<path>: look for the C-LIME library in the UNIX prefix <path>

  • --enable-sfw-fp16=<yes|no: Enable software FP16 communications support (default yes)

  • --enable-lapack[=<path>]: enable LAPACK support in Lanczos eigensolver. A UNIX prefix containing the library can be specified (optional).

  • --enable-mkl[=<path>]: use Intel MKL for FFT (and LAPACK if enabled) routines. A UNIX prefix containing the library can be specified (optional).

  • --enable-numa: enable numa first touch policy optimization (default no)

  • --enable-simd=<code>: setup Grid for the SIMD target <code> (default: GEN). List of possible SIMD targets.

  • --enable-gen-simd-width=<size>: select the size (in bytes) of the generic SIMD vector type (default: 32 bytes).

  • --enable-precision={single|double}: set the default precision (default: double).

  • --enable-comms=<comm>: Use <comm> for message passing (default: none). List of possible comm targets.

  • --enable-shm=<shm>: Use <shm> for shared memory behaviour (default: shmopen). List of possible shm targets.

  • --enable-shmpath=<path>: Select <path> for the shared memory mmap base path for libhugetlbfs.

  • --enable-rng={sitmo|ranlux48|mt19937} choose the RNG (default: sitmo).

  • --disable-timers: disable system dependent high-resolution timers.

  • --enable-chroma: enable Chroma regression tests. A compiled version of Chroma is assumed to be present.

  • --enable-doxygen-doc: enable the Doxygen documentation generation (build with make doxygen-doc)

This document was updated on March 2018.