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 (defaultyes
) -
--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 (defaultno
) -
--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 withmake doxygen-doc
)
This document was updated on March 2018.