1
0
mirror of https://github.com/paboyle/Grid.git synced 2024-11-09 23:45:36 +00:00

Updates with todo from Carleton

This commit is contained in:
paboyle 2018-09-20 18:50:11 +01:00
parent 4af6c7e7aa
commit 76fc06a5dc

View File

@ -12,6 +12,8 @@ Welcome to Grid's documentation!
Preliminaries Preliminaries
==================================== ====================================
.. attention:: manual version 1 (CD)
Grid is primarily an *application* *development* *interface* (API) for structured Cartesian grid codes and written in C++11. Grid is primarily an *application* *development* *interface* (API) for structured Cartesian grid codes and written in C++11.
In particular it is aimed at Lattice Field Theory simulations in general gauge theories, but In particular it is aimed at Lattice Field Theory simulations in general gauge theories, but
with a particular emphasis on supporting SU(3) and U(1) gauge theories relevant to hadronic physics. with a particular emphasis on supporting SU(3) and U(1) gauge theories relevant to hadronic physics.
@ -221,6 +223,7 @@ If you want to build all the tests just use `make tests`.
Detailed build configuration options Detailed build configuration options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. todo:: CD: The double dash here gets turned into a pdf long dash. Not good.
======================================== ============================================================================================================================== ======================================== ==============================================================================================================================
Option usage Option usage
@ -242,6 +245,9 @@ Detailed build configuration options
`--enable-doxygen-doc` enable the Doxygen documentation generation (build with `make doxygen-doc`) `--enable-doxygen-doc` enable the Doxygen documentation generation (build with `make doxygen-doc`)
======================================== ============================================================================================================================== ======================================== ==============================================================================================================================
.. todo:: CD: Somewhere, please provide more explanation of the --enable--gen-simd-width value
.. todo:: CD: Are there really two --enable-precision lines?
Possible communication interfaces Possible communication interfaces
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -258,6 +264,9 @@ The following options can be use with the `--enable-comms=` option to target dif
For the MPI interfaces 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). The `-auto` suffix is not supported by the Cray environment wrapper scripts. Use the standard wrappers ( `CXX=CC` ) set up by Cray `PrgEnv` modules instead. For the MPI interfaces 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). The `-auto` suffix is not supported by the Cray environment wrapper scripts. Use the standard wrappers ( `CXX=CC` ) set up by Cray `PrgEnv` modules instead.
.. todo:: CD: Later below, there is an "mpi3". Should it be listed and
explained here? Is there an "mpit"?
Possible SIMD types Possible SIMD types
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -288,6 +297,7 @@ Alternatively, some CPU codenames can be directly used:
`BGQ` Blue Gene/Q `BGQ` Blue Gene/Q
============ ===================================================================================================================== ============ =====================================================================================================================
Notes Notes
^^^^^^^ ^^^^^^^
* We currently support AVX512 for the Intel compiler and GCC (KNL and SKL target). Support for clang will appear in future * We currently support AVX512 for the Intel compiler and GCC (KNL and SKL target). Support for clang will appear in future
@ -439,6 +449,8 @@ shared memory to communicate within this node::
mpirun -np 8 ./omp_bind.sh ./Benchmark_dwf --mpi 2.2.2.1 --dslash-unroll --threads 8 --grid 16.16.16.16 --cacheblocking 4.4.4.4 mpirun -np 8 ./omp_bind.sh ./Benchmark_dwf --mpi 2.2.2.1 --dslash-unroll --threads 8 --grid 16.16.16.16 --cacheblocking 4.4.4.4
.. todo:: CD: Maybe need bash highlighting, not cpp below - Generates warning
Where omp_bind.sh does the following:: Where omp_bind.sh does the following::
#!/bin/bash #!/bin/bash
@ -550,7 +562,9 @@ scalar matrix and vector classes::
template<class vobj > class iScalar { private: vobj _internal ; } template<class vobj > class iScalar { private: vobj _internal ; }
template<class vobj,int N> class iVector { private: vobj _internal[N] ; } template<class vobj,int N> class iVector { private: vobj _internal[N] ; }
template<class vobj,int N> class iMatrix { private: vobj _internal[N] ; } template<class vobj,int N> class iMatrix { private: vobj _internal[N] ; }
.. todo:: CD: Why is iMatrix only [N] and not [N][N]?
These are template classes and can be passed a fundamental scalar or vector type, or These are template classes and can be passed a fundamental scalar or vector type, or
nested to form arbitrarily complicated tensor products of indices. All mathematical expressions nested to form arbitrarily complicated tensor products of indices. All mathematical expressions
@ -572,6 +586,11 @@ For Lattice field theory, we define types according to the following tensor
product structure ordering. The suffix "D" indicates either double types, and product structure ordering. The suffix "D" indicates either double types, and
replacing with "F" gives the corresponding single precision type. replacing with "F" gives the corresponding single precision type.
.. todo:: CD: The test cases have R, which takes the compiled default.
Do we want to expose that and say something here?
.. todo:: CD: What is "Lattice" here? This section is about "iXXX" types.
Maybe say a few more introductory words.
======= ======= ====== ====== =========== ======================= ======= ======= ====== ====== =========== =======================
Lattice Lorentz Spin Colour scalar_type Field Lattice Lorentz Spin Colour scalar_type Field
======= ======= ====== ====== =========== ======================= ======= ======= ====== ====== =========== =======================
@ -586,6 +605,10 @@ Scalar Scalar Matrix Matrix ComplexD SpinColourMatrixD
The types are implemented via a recursive tensor nesting system. The types are implemented via a recursive tensor nesting system.
.. todo:: CD: What choices are available for vtype? Is the "v" for "variable"?
.. todo:: CD: Should we say iLorentzColourMatrix is a Grid-provided typename?
Is there a list of similar convenience types?
**Example** we declare:: **Example** we declare::
template<typename vtype> template<typename vtype>
@ -675,6 +698,12 @@ General code can access any specific index by number with a peek/poke semantic::
template<int Level,class vtype> template<int Level,class vtype>
void pokeIndex (vtype &pokeme,arg,int i,int j) void pokeIndex (vtype &pokeme,arg,int i,int j)
.. todo:: CD: The are the choices for "vtype"?
.. todo:: CD: The example below does not use the template pair shown
above. It is good, but perhaps, also show the pair form of
the same example if there is one.
**Example**:: **Example**::
for (int mu = 0; mu < Nd; mu++) { for (int mu = 0; mu < Nd; mu++) {
@ -777,6 +806,8 @@ The traceless anti-Hermitian part is taken with::
Reunitarisation (or reorthogonalisation) is enabled by:: Reunitarisation (or reorthogonalisation) is enabled by::
.. todo:: CD: U(3) or SU(3) projection?
template<class vtype,int N> iMatrix<vtype,N> template<class vtype,int N> iMatrix<vtype,N>
ProjectOnGroup(const iMatrix<vtype,N> &arg) ProjectOnGroup(const iMatrix<vtype,N> &arg)
@ -946,12 +977,18 @@ Internally, Grid defines a portable abstraction SIMD vectorisation, via the foll
* vComplexD * vComplexD
.. todo:: CD: Maybe say something about how SIMD vectorization works
here. Does a vRealF collect values for several SIMD lanes
at once?
These have the usual range of arithmetic operators and functions acting upon them. They do not form These have the usual range of arithmetic operators and functions acting upon them. They do not form
part of the API, but are mentioned to (partially) explain the need for controlling the part of the API, but are mentioned to (partially) explain the need for controlling the
layout transformation in lattice objects. layout transformation in lattice objects.
They are documented further in the Internals chapter. They are documented further in the Internals chapter.
.. todo:: CD: Might they be needed for interfacing with external code?
Coordinates Coordinates
------------ ------------
@ -979,6 +1016,16 @@ This enables the coordinates to be manipulated without heap allocation or thread
and avoids introducing STL functions into GPU code, but does so at the expense of introducing and avoids introducing STL functions into GPU code, but does so at the expense of introducing
a maximum dimensionality. This limit is easy to change (lib/util/Coordinate.h). a maximum dimensionality. This limit is easy to change (lib/util/Coordinate.h).
.. todo:: CD: It would be very useful to explain how the communicator
works. That would include how the processor grid is
organized, how the lattice is subdivided across MPI ranks,
why Grid prefers to renumber the MPI ranks, what coordinates
go with what ranks? Ordinarily, this is hidden from the
user, but it is important for interfacing with external
code. Some methods and members of the communicator class
need to be "exposed" to make that possible. This might be a
good place for such a subsection?
Grids Grids
------------- -------------
@ -991,6 +1038,9 @@ We use a partial vectorisation transformation, must select
which space-time dimensions participate in SIMD vectorisation. which space-time dimensions participate in SIMD vectorisation.
The Lattice containers are defined to have opaque internal layout, hiding this layout transformation. The Lattice containers are defined to have opaque internal layout, hiding this layout transformation.
.. todo:: CD: The constructor simply defines the layout parameters.
It doesn't allocate space, right? Might be good to say.
We define GridCartesian and GridRedBlackCartesian which both inherit from GridBase:: We define GridCartesian and GridRedBlackCartesian which both inherit from GridBase::
class GridCartesian : public GridBase class GridCartesian : public GridBase
@ -1021,6 +1071,11 @@ The Grid object provides much `internal` functionality to map a lattice site to
a node and lexicographic index. These are not needed by code interfacing a node and lexicographic index. These are not needed by code interfacing
to the data parallel layer. to the data parallel layer.
.. todo:: CD: What is specified with "split_rank" above?
.. todo:: CD: Maybe list the exposed Grid options within the "SpaceTimeGrid"
class.
**Example** (tests/solver/Test_split_grid.cc):: **Example** (tests/solver/Test_split_grid.cc)::
const int Ls=8; const int Ls=8;
@ -1094,6 +1149,10 @@ Vector Scalar Matrix Matrix ComplexD LatticeSpinColourMatrixD
Additional single precison variants are defined with the suffix "F". Additional single precison variants are defined with the suffix "F".
Other lattice objects can be defined using the sort of typedef's shown above if needed. Other lattice objects can be defined using the sort of typedef's shown above if needed.
.. todo:: CD: Are there others to expose, such as LatticeInteger,
LatticeFermionD, LatticeGaugeFieldD, LatticePropagatorD,
etc? If so, could this list be made complete?
Opaque containers Opaque containers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -1108,6 +1167,8 @@ are provided (lib/lattice/Lattice_transfer.h)::
unvectorizeToLexOrdArray(std::vector<sobj> &out, const Lattice<vobj> &in); unvectorizeToLexOrdArray(std::vector<sobj> &out, const Lattice<vobj> &in);
vectorizeFromLexOrdArray(std::vector<sobj> &in , Lattice<vobj> &out); vectorizeFromLexOrdArray(std::vector<sobj> &in , Lattice<vobj> &out);
.. todo:: CD: Explain the choices for sobj and vobj.
The Lexicographic order of data in the external vector fields is defined by (lib/util/Lexicographic.h):: The Lexicographic order of data in the external vector fields is defined by (lib/util/Lexicographic.h)::
Lexicographic::IndexFromCoor(const Coordinate &lcoor, int &lex,Coordinate *local_dims); Lexicographic::IndexFromCoor(const Coordinate &lcoor, int &lex,Coordinate *local_dims);
@ -1115,7 +1176,7 @@ The Lexicographic order of data in the external vector fields is defined by (lib
This ordering is :math:`x + L_x * y + L_x*L_y*z + L_x*L_y*L_z *t` This ordering is :math:`x + L_x * y + L_x*L_y*z + L_x*L_y*L_z *t`
Peek and poke routines are provided to perform single site operations. These operations are Peek and poke routines are provided to perform single site operations. These operations are
extremely low performance and are not intended for algorithm development or performance critical code. extremely low performance and are not intended for algorithm development or performance-critical code.
The following are `collective` operations and involve communication between nodes. All nodes receive the same The following are `collective` operations and involve communication between nodes. All nodes receive the same
result by broadcast from the owning node:: result by broadcast from the owning node::
@ -1143,9 +1204,16 @@ peeking and poking specific indices in a data parallel manner::
template<int Index,class vobj> // Matrix poke template<int Index,class vobj> // Matrix poke
void PokeIndex(Lattice<vobj> &lhs,const Lattice<> & rhs,int i,int j) void PokeIndex(Lattice<vobj> &lhs,const Lattice<> & rhs,int i,int j)
.. todo:: CD: Maybe mention that these match operations with scalar
objects, as listed above under "Internal index manipulation."
The inconsistent capitalisation on the letter P is due to an obscure bug in g++ that has not to The inconsistent capitalisation on the letter P is due to an obscure bug in g++ that has not to
our knowledge been fixed in any version. The bug was reported in 2016. our knowledge been fixed in any version. The bug was reported in 2016.
.. todo:: CD: Do you want to mention/expose PropToFerm and FermToProp?
Are there other such convenience routines to make part of the API?
Global Reduction operations Global Reduction operations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -1310,7 +1378,7 @@ the iftrue and iffalse argument::
This plays the data parallel analogue of the C++ ternary operator:: This plays the data parallel analogue of the C++ ternary operator::
a = b ? c : d; a == b ? c : d;
In order to create the predicate in a coordinate dependent fashion it is often useful In order to create the predicate in a coordinate dependent fashion it is often useful
to use the lattice coordinates. to use the lattice coordinates.
@ -1319,19 +1387,21 @@ The LatticeCoordinate function::
template<class iobj> LatticeCoordinate(Lattice<iobj> &coor,int dir); template<class iobj> LatticeCoordinate(Lattice<iobj> &coor,int dir);
fills an Integer field with the coordinate in the N-th dimension. fills an Integer field with the coordinate in the direction specified by "dir".
A usage example is given A usage example is given
**Example**:: **Example**::
int dir =3; int dir = 3;
int block=4; int block = 4;
LatticeInteger coor(FineGrid); LatticeInteger coor(FineGrid);
LatticeCoordinate(coor,dir); LatticeCoordinate(coor,dir);
result = where(mod(coor,block)==(block-1),x,z); result = where(mod(coor,block)==(block-1),x,z);
.. todo:: CD: A few words motivating this example?
(Other usage cases of LatticeCoordinate include the generation of plane wave momentum phases.) (Other usage cases of LatticeCoordinate include the generation of plane wave momentum phases.)
Site local fused operations Site local fused operations
@ -1398,7 +1468,10 @@ The first parallel primitive is the thread_loop
accelerator_loops accelerator_loops
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The second parallel primitive is an accelerated_loop The second parallel primitive is the "accelerator_loop".
.. todo:: CD: What is the difference between these two loops?
**Example**:: **Example**::
@ -1462,7 +1535,7 @@ lattice site :math:`x_\mu = 1` in the rhs to :math:`x_\mu = 0` in the result.
CovariantCshift CovariantCshift
^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
Covariant Cshift operations are provided for common cases of boundary condition. These may be further optimised Covariant Cshift operations are provided for common cases of the boundary condition. These may be further optimised
in future:: in future::
template<class covariant,class gauge> template<class covariant,class gauge>
@ -1473,7 +1546,6 @@ in future::
Lattice<covariant> CovShiftBackward(const Lattice<gauge> &Link, int mu, Lattice<covariant> CovShiftBackward(const Lattice<gauge> &Link, int mu,
const Lattice<covariant> &field); const Lattice<covariant> &field);
Boundary conditions Boundary conditions
^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
@ -1502,6 +1574,10 @@ treating the boundary.
Gimpl::CovShiftIdentityBackward(U[nu], nu)))); Gimpl::CovShiftIdentityBackward(U[nu], nu))));
} }
.. todo:: CD: This example uses Gimpl instead of Impl. What is the
difference, and what are the exposed choices for Impl?
Inter-grid transfer operations Inter-grid transfer operations
----------------------------------------------------- -----------------------------------------------------
@ -2071,6 +2147,8 @@ MooeeInvDag
All Fermion operators will derive from this base class. All Fermion operators will derive from this base class.
.. todo:: CD: Descriptions needed.
Linear Operators Linear Operators
------------------- -------------------
@ -2082,6 +2160,8 @@ between RB and non-RB variants. Sparse matrix is like the fermion action def, an
the wrappers implement the specialisation of "Op" and "AdjOp" to the cases minimising the wrappers implement the specialisation of "Op" and "AdjOp" to the cases minimising
replication of code. replication of code.
.. todo:: CD: Descriptions needed below.
**Abstract base**:: **Abstract base**::
template<class Field> class LinearOperatorBase { template<class Field> class LinearOperatorBase {
@ -2097,7 +2177,6 @@ replication of code.
virtual void HermOp(const Field &in, Field &out)=0; virtual void HermOp(const Field &in, Field &out)=0;
}; };
============== ============================================== ============== ==============================================
Member Description Member Description
============== ============================================== ============== ==============================================
@ -2109,8 +2188,9 @@ HermOpAndNorm
HermOp HermOp
============== ============================================== ============== ==============================================
MdagMLinearOperator
^^^^^^^^^^^^^^^^^^^^ MdagMLinearOperator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This Linear operator takes a SparseMatrix (Fermion operator) and implements the unpreconditioned This Linear operator takes a SparseMatrix (Fermion operator) and implements the unpreconditioned
MdagM operator with the above interface:: MdagM operator with the above interface::
@ -2202,6 +2282,8 @@ SchurDiagOneRH
SchurStaggeredOperator SchurStaggeredOperator
======================= ====================================================================================== ======================= ======================================================================================
.. todo:: CD: Descriptions needed.
Operator Functions Operator Functions
=================== ===================
@ -2250,6 +2332,8 @@ Audit this::
Algorithms Algorithms
========================================= =========================================
.. todo:: CD: The whole section needs to be completed, of course
Approximation Approximation
-------------- --------------
@ -2319,6 +2403,12 @@ Schur decomposition
Lattice Gauge theory utilities Lattice Gauge theory utilities
========================================= =========================================
.. todo:: CD: The whole section needs to be completed, of course
.. todo:: CD: Gamma matrices?
Spin projection, reconstruction?
Lie Algebra?
Types Types
-------------- --------------
@ -2342,6 +2432,8 @@ Wilson loops
Lattice actions Lattice actions
========================================= =========================================
.. todo:: CD: The whole section needs to be completed, of course
Gauge Gauge
-------- --------
@ -2354,10 +2446,13 @@ Pseudofermion
HMC HMC
========================================= =========================================
.. todo:: CD: The whole section needs to be completed, of course
Development of the internals Development of the internals
======================================== ========================================
.. todo:: CD: The whole section needs to be completed, of course
The interfaces used in this chapter of the manual are subject The interfaces used in this chapter of the manual are subject
to change without notice as new architectures are addressed. to change without notice as new architectures are addressed.
@ -2382,6 +2477,21 @@ Optimised fermion operators
Optimised communications Optimised communications
--------------------------------------------- ---------------------------------------------
Interfacing with external software
========================================
.. todo:: CD: Such a section should be very useful
.. todo:: CD: The whole section needs to be completed, of course
MPI initialization and coordination
-----------------------------------
Creating Grid fields
--------------------
Mapping fields between Grid and user layouts
--------------------------------------------
.. image:: logo.png .. image:: logo.png
:width: 200px :width: 200px
:align: center :align: center