mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
README update
This commit is contained in:
parent
66d832c733
commit
07416e4567
112
README.md
112
README.md
@ -16,11 +16,27 @@
|
|||||||
|
|
||||||
**Data parallel C++ mathematical object library.**
|
**Data parallel C++ mathematical object library.**
|
||||||
|
|
||||||
Please send all pull requests to the `develop` branch.
|
|
||||||
|
|
||||||
License: GPL v2.
|
License: GPL v2.
|
||||||
|
|
||||||
Last update 2016/08/03.
|
Last update Nov 2016.
|
||||||
|
|
||||||
|
_Please send all pull requests to the `develop` branch._
|
||||||
|
|
||||||
|
### Bug report
|
||||||
|
|
||||||
|
_To help us tracking and solving more efficiently issues with Grid, please report problems using the issue system of GitHub rather than sending emails to Grid developers._
|
||||||
|
|
||||||
|
When you file an issue, please go though the following checklist:
|
||||||
|
|
||||||
|
1. Check that the code is pointing to the `HEAD` of `develop` or any commit in `master` which is tagged with a version number.
|
||||||
|
2. Give a description of the target platform (CPU, network, compiler).
|
||||||
|
3. Give the exact `configure` command used.
|
||||||
|
4. Attach `config.log`.
|
||||||
|
5. Attach `config.summary`.
|
||||||
|
6. Attach the output of `make V=1`.
|
||||||
|
7. Describe the issue and any previous attempt to solve it. If relevant, show how to reproduce the issue using a minimal working example.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Description
|
### Description
|
||||||
This library provides data parallel C++ container classes with internal memory layout
|
This library provides data parallel C++ container classes with internal memory layout
|
||||||
@ -42,7 +58,7 @@ optimally use MPI, OpenMP and SIMD parallelism under the hood. This is a signifi
|
|||||||
for most programmers.
|
for most programmers.
|
||||||
|
|
||||||
The layout transformations are parametrised by the SIMD vector length. This adapts according to the architecture.
|
The layout transformations are parametrised by the SIMD vector length. This adapts according to the architecture.
|
||||||
Presently SSE4 (128 bit) AVX, AVX2 (256 bit) and IMCI and AVX512 (512 bit) targets are supported (ARM NEON and BG/Q QPX on the way).
|
Presently SSE4 (128 bit) AVX, AVX2, QPX (256 bit), IMCI, and AVX512 (512 bit) targets are supported (ARM NEON on the way).
|
||||||
|
|
||||||
These are presented as `vRealF`, `vRealD`, `vComplexF`, and `vComplexD` internal vector data types. These may be useful in themselves for other programmers.
|
These are presented as `vRealF`, `vRealD`, `vComplexF`, and `vComplexD` internal vector data types. These may be useful in themselves for other programmers.
|
||||||
The corresponding scalar types are named `RealF`, `RealD`, `ComplexF` and `ComplexD`.
|
The corresponding scalar types are named `RealF`, `RealD`, `ComplexF` and `ComplexD`.
|
||||||
@ -50,7 +66,7 @@ The corresponding scalar types are named `RealF`, `RealD`, `ComplexF` and `Compl
|
|||||||
MPI, OpenMP, and SIMD parallelism are present in the library.
|
MPI, OpenMP, and SIMD parallelism are present in the library.
|
||||||
Please see https://arxiv.org/abs/1512.03487 for more detail.
|
Please see https://arxiv.org/abs/1512.03487 for more detail.
|
||||||
|
|
||||||
### Installation
|
### Quick start
|
||||||
First, start by cloning the repository:
|
First, start by cloning the repository:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
@ -71,12 +87,10 @@ mkdir build; cd build
|
|||||||
../configure --enable-precision=double --enable-simd=AVX --enable-comms=mpi-auto --prefix=<path>
|
../configure --enable-precision=double --enable-simd=AVX --enable-comms=mpi-auto --prefix=<path>
|
||||||
```
|
```
|
||||||
|
|
||||||
where `--enable-precision=` set the default precision (`single` or `double`),
|
where `--enable-precision=` set the default precision,
|
||||||
`--enable-simd=` set the SIMD type (see possible values below), `--enable-
|
`--enable-simd=` set the SIMD type, `--enable-
|
||||||
comms=` set the protocol used for communications (`none`, `mpi`, `mpi-auto` or
|
comms=`, and `<path>` should be replaced by the prefix path where you want to
|
||||||
`shmem`), and `<path>` should be replaced by the prefix path where you want to
|
install Grid. Other options are detailed in the next section, you can also use `configure
|
||||||
install Grid. The `mpi-auto` communication option set `configure` to determine
|
|
||||||
automatically how to link to MPI. Other options are available, use `configure
|
|
||||||
--help` to display them. Like with any other program using GNU autotool, the
|
--help` to display them. Like with any other program using GNU autotool, the
|
||||||
`CXX`, `CXXFLAGS`, `LDFLAGS`, ... environment variables can be modified to
|
`CXX`, `CXXFLAGS`, `LDFLAGS`, ... environment variables can be modified to
|
||||||
customise the build.
|
customise the build.
|
||||||
@ -93,24 +107,86 @@ To minimise the build time, only the tests at the root of the `tests` directory
|
|||||||
make -C tests/<subdir> tests
|
make -C tests/<subdir> tests
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Build configuration options
|
||||||
|
|
||||||
|
- `--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>`
|
||||||
|
- `--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-simd=<code>`: setup Grid for the SIMD target `<code>` (default: `GEN`). A list of possible SIMD targets is detailed in a section below.
|
||||||
|
- `--enable-precision={single|double}`: set the default precision (default: `double`).
|
||||||
|
- `--enable-precision=<comm>`: Use `<comm>` for message passing (default: `none`). A list of possible SIMD targets is detailed in a section below.
|
||||||
|
- `--enable-rng={ranlux48|mt19937}`: choose the RNG (default: `ranlux48 `).
|
||||||
|
- `--disable-timers`: disable system dependent high-resolution timers.
|
||||||
|
- `--enable-chroma`: enable Chroma regression tests.
|
||||||
|
|
||||||
|
### Possible communication interfaces
|
||||||
|
|
||||||
|
The following options can be use with the `--enable-simd=` option to target different communication interfaces:
|
||||||
|
|
||||||
|
| `<comm>` | Description |
|
||||||
|
| ------------- | -------------------------------------------- |
|
||||||
|
| `none` | no communications |
|
||||||
|
| `mpi[-auto]` | MPI communications |
|
||||||
|
| `mpi3[-auto]` | MPI communications using MPI 3 shared memory |
|
||||||
|
| `shmem ` | Cray SHMEM communications |
|
||||||
|
|
||||||
|
For `mpi` and `mpi3` the optional `-auto` suffix instructs the `configure` scripts to determine all the necessary compilation and linking flags. This is done by extracting the informations from the MPI wrapper specified in the environment variable `MPICXX` (if not specified `configure` will scan though a list of default names).
|
||||||
|
|
||||||
### Possible SIMD types
|
### Possible SIMD types
|
||||||
|
|
||||||
The following options can be use with the `--enable-simd=` option to target different SIMD instruction sets:
|
The following options can be use with the `--enable-simd=` option to target different SIMD instruction sets:
|
||||||
|
|
||||||
| String | Description |
|
| `<code>` | Description |
|
||||||
| ----------- | -------------------------------------- |
|
| ----------- | -------------------------------------- |
|
||||||
| `GEN` | generic portable vector code |
|
| `GEN` | generic portable vector code |
|
||||||
| `SSE4` | SSE 4.2 (128 bit) |
|
| `SSE4` | SSE 4.2 (128 bit) |
|
||||||
| `AVX` | AVX (256 bit) |
|
| `AVX` | AVX (256 bit) |
|
||||||
| `AVXFMA4` | AVX (256 bit) + FMA |
|
| `AVXFMA` | AVX (256 bit) + FMA |
|
||||||
|
| `AVXFMA4` | AVX (256 bit) + FMA4 |
|
||||||
| `AVX2` | AVX 2 (256 bit) |
|
| `AVX2` | AVX 2 (256 bit) |
|
||||||
| `AVX512` | AVX 512 bit |
|
| `AVX512` | AVX 512 bit |
|
||||||
| `AVX512MIC` | AVX 512 bit for Intel MIC architecture |
|
| `QPX` | QPX (256 bit) |
|
||||||
| `ICMI` | Intel ICMI instructions (512 bit) |
|
|
||||||
|
|
||||||
Alternatively, some CPU codenames can be directly used:
|
Alternatively, some CPU codenames can be directly used:
|
||||||
|
|
||||||
| String | Description |
|
| `<code>` | Description |
|
||||||
| ----------- | -------------------------------------- |
|
| ----------- | -------------------------------------- |
|
||||||
| `KNC` | [Intel Knights Corner](http://ark.intel.com/products/codename/57721/Knights-Corner) |
|
| `KNC` | [Intel Xeon Phi codename Knights Corner](http://ark.intel.com/products/codename/57721/Knights-Corner) |
|
||||||
| `KNL` | [Intel Knights Landing](http://ark.intel.com/products/codename/48999/Knights-Landing) |
|
| `KNL` | [Intel Xeon Phi codename Knights Landing](http://ark.intel.com/products/codename/48999/Knights-Landing) |
|
||||||
|
| `BGQ` | Blue Gene/Q |
|
||||||
|
|
||||||
|
#### Notes:
|
||||||
|
- We currently support AVX512 only for the Intel compiler. Support for GCC and clang will appear in future versions.
|
||||||
|
- For BG/Q only [bgclang](http://trac.alcf.anl.gov/projects/llvm-bgq) is supported. We do not presently plan to support more compilers for this platform.
|
||||||
|
- BG/Q performances are currently rather poor. This is being investigated for future versions.
|
||||||
|
|
||||||
|
### Build setup for Intel Knights Landing platform
|
||||||
|
|
||||||
|
The following configuration is recommended for the Intel Knights Landing platform:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
../configure --enable-precision=double\
|
||||||
|
--enable-simd=KNL \
|
||||||
|
--enable-comms=mpi3-auto \
|
||||||
|
--with-gmp=<path> \
|
||||||
|
--with-mpfr=<path> \
|
||||||
|
--enable-mkl \
|
||||||
|
CXX=icpc MPICXX=mpiicpc
|
||||||
|
```
|
||||||
|
|
||||||
|
where `<path>` is the UNIX prefix where GMP and MPFR are installed. If you are working on a Cray machine that does not use the `mpiicpc` wrapper, please use:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
../configure --enable-precision=double\
|
||||||
|
--enable-simd=KNL \
|
||||||
|
--enable-comms=mpi3 \
|
||||||
|
--with-gmp=<path> \
|
||||||
|
--with-mpfr=<path> \
|
||||||
|
--enable-mkl \
|
||||||
|
CXX=CC CC=cc
|
||||||
|
```
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user