mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-03 21:44:33 +00:00 
			
		
		
		
	README update
This commit is contained in:
		
							
								
								
									
										112
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								README.md
									
									
									
									
									
								
							@@ -16,11 +16,27 @@
 | 
			
		||||
 | 
			
		||||
**Data parallel C++ mathematical object library.**
 | 
			
		||||
 | 
			
		||||
Please send all pull requests to the `develop` branch.
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
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.
 | 
			
		||||
Please see https://arxiv.org/abs/1512.03487 for more detail.
 | 
			
		||||
 | 
			
		||||
### Installation
 | 
			
		||||
### Quick start
 | 
			
		||||
First, start by cloning the repository:
 | 
			
		||||
 | 
			
		||||
``` bash
 | 
			
		||||
@@ -71,12 +87,10 @@ mkdir build; cd build
 | 
			
		||||
../configure --enable-precision=double --enable-simd=AVX --enable-comms=mpi-auto --prefix=<path>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
where `--enable-precision=` set the default precision (`single` or `double`),
 | 
			
		||||
`--enable-simd=` set the SIMD type (see possible values below), `--enable-
 | 
			
		||||
comms=` set the protocol used for communications (`none`, `mpi`, `mpi-auto` or
 | 
			
		||||
`shmem`), and `<path>` should be replaced by the prefix path where you want to
 | 
			
		||||
install Grid. The `mpi-auto` communication option set `configure` to determine
 | 
			
		||||
automatically how to link to MPI. Other options are available, use `configure
 | 
			
		||||
where `--enable-precision=` set the default precision,
 | 
			
		||||
`--enable-simd=` set the SIMD type, `--enable-
 | 
			
		||||
comms=`, 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
 | 
			
		||||
--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.
 | 
			
		||||
@@ -93,24 +107,86 @@ To minimise the build time, only the tests at the root of the `tests` directory
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
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           |
 | 
			
		||||
| `SSE4`      | SSE 4.2 (128 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)                        |
 | 
			
		||||
| `AVX512`    | AVX 512 bit                            |
 | 
			
		||||
| `AVX512MIC` | AVX 512 bit for Intel MIC architecture |
 | 
			
		||||
| `ICMI`      | Intel ICMI instructions (512 bit)      |
 | 
			
		||||
| `QPX`       | QPX (256 bit)                          |
 | 
			
		||||
 | 
			
		||||
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) |
 | 
			
		||||
| `KNL`       | [Intel Knights Landing](http://ark.intel.com/products/codename/48999/Knights-Landing) |
 | 
			
		||||
| `KNC`       | [Intel Xeon Phi codename Knights Corner](http://ark.intel.com/products/codename/57721/Knights-Corner) |
 | 
			
		||||
| `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
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user