C++ mpi module for stochmagnet_main Package
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
MPI_GridEnvironment< N > Class Template Reference

This class is a grid Environment of templated dimension N=1,2,3. More...

#include <MPI_GridEnvironment.h>

Inheritance diagram for MPI_GridEnvironment< N >:
Inheritance graph
[legend]
Collaboration diagram for MPI_GridEnvironment< N >:
Collaboration graph
[legend]

Public Member Functions

virtual tMemSize getMemorySize () const override
 return the memory size of the class
 
virtual tMemSize getContentsMemorySize () const override
 return the memory size of the included associations More...
 
template<typename Q >
void setGridSize (const std::array< Q, N > &Ns)
 get the grids number More...
 
const std::array< tMPICoreId, N > & getGridSize () const
 get the grids number
 
template<typename Q >
void setIndices (const std::array< Q, N > &indices)
 set the indices of the current core More...
 
const std::array< tMPICoreId, N > & getIndices () const
 get the indices of the current core within the grid environment
 
const std::array< tBoolean, N > & getGridPeriodicity () const
 return the periodicity of the grid
 
const tBoolean & isPeriodic (const tUCInt &k) const
 return true if the grid is periodic in direction k More...
 
template<typename Q >
void setGridPeriodicity (const std::array< Q, N > &Ts)
 set grid periodicity More...
 
virtual void initialize ()
 initialize the environment More...
 
tMPIError getCoreIdAtIndices (const std::array< tMPICoreId, N > &indices, tMPICoreId &coreId) const
 the core id within the grid at indices More...
 
tMPIError getCoreIndices (const tMPICoreId &coreId, std::array< tMPICoreId, N > &indices) const
 get the indices of the core with coreId More...
 
- Public Member Functions inherited from MPI_Environment
const tMPIComm & getWorld () const
 get the world of the environment for reading
 
tMPIComm & getWorld ()
 get the world of the environment for reading
 
const tMPICoreId & getCoresNumber () const
 get the number of cores of this environment of common environment More...
 
const tMPICoreId & getCoreId () const
 get the id of the current process of this environment More...
 
tMPIError abort (const tMPIError &errCode) const
 abort the process on all cores with the error code More...
 
tBoolean synchronize () const
 wait that all the cores has finished her job
 
tBoolean isMessageAvaliable (tMPICoreId &source, tMPITag &tag, tMPIBoolean &isAvailable, tMPIStatus &status) const
 test if the message is available frm the environment this More...
 
- Public Member Functions inherited from CORE_Object
template<class T >
std::shared_ptr< T > getSharedPointer ()
 return the shared pointer for this More...
 
template<class T >
std::shared_ptr< const T > getConstSharedPointer () const
 return a const shared pointer for this More...
 
template<class T >
tBoolean isInstanceOf () const
 test if the clas T is an instance of this class More...
 
tString getClassName () const
 return the name of the class More...
 
tString getPointerString () const
 retrun the pointer of the class as a string More...
 
tString getIdentityString () const
 retrun the string identification of the class More...
 
virtual tString toString () const
 return the string representation of the object node More...
 

Static Public Member Functions

static CORE_UniquePointer< SelfClassNew (const std::array< tMPICoreId, N > &nCoresPerDirection, int &argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a new cart environment More...
 
static tMPIError ComputeGridSize (const MPI_Environment &parent, std::array< tMPICoreId, N > &coresNumber)
 get the cores number per direction if possible More...
 
static tMPIError ComputeGridSize (const tMPICoreId &nAvailableCores, std::array< tMPICoreId, N > &coresNumber)
 get the cores number per direction if possible More...
 
static tBoolean ComputeGridSize (const std::array< tReal, N > &Hs, const std::array< tInteger, N > &Ns, const tMPICoreId &nCores, std::array< tMPICoreId, N > &Gs)
 compute the grid size in order to minimize the ratio S/V where S is the surface of 1 cpu block and V the volume on 1 cpu block More...
 
- Static Public Member Functions inherited from MPI_Environment
static CORE_UniquePointer< MPI_EnvironmentNew (int argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a test class More...
 
static CORE_UniquePointer< MPI_EnvironmentNew (int argc, char *argv[])
 create a test class More...
 
static void GetCoresNumber (tMPICoreId &coresNumber)
 get the number of cores More...
 
static void GetCoresNumber (const MPI_Environment &env, tMPICoreId &coresNumber)
 get the number of cores More...
 
static void GetCoreId (tMPICoreId &id)
 get the id of the current process of common environment More...
 
static void GetCoreId (const MPI_Environment &env, tMPICoreId &id)
 get the id of the current process of common environment More...
 
static tReal GetTime ()
 get the time More...
 
static tMPIError Abort (const MPI_Environment &env, const tMPIError &errCode)
 abort the process on all cores of the environment with the eroor code More...
 
static tMPIError Abort (const tMPIError &errCode)
 abort the process on all cores with the error code More...
 
static tBoolean Synchronize (const MPI_Environment &env)
 wait that all the core of an environment has finished her job More...
 
static tBoolean Synchronize ()
 wait that all the cores has finished her job
 
static tBoolean Wait (tMPIRequest &request, tMPIStatus &status)
 wait the end the the communication by blocking More...
 
static tBoolean Wait (tMPIRequest &request)
 wait for the request is finished More...
 
static tBoolean WaitAll (const tMPICount &nRequests, tMPIRequest requests[], tMPIStatus statuses[])
 wait the end the the communication by blocking More...
 
static tBoolean WaitAll (std::valarray< tMPIRequest > &requests)
 wait for all the requests are finished More...
 
template<size_t D>
static tBoolean WaitAll (std::array< tMPIRequest, D > &requests)
 wait for all the requests are finished More...
 
static tBoolean WaitAll (const tMPICount &nRequests, tMPIRequest *requests)
 wait for all the requests are finished More...
 
static tBoolean IsFinished (tMPIRequest &request, tMPIInteger &isFinished)
 test if the requets is finished More...
 
static tBoolean IsAllFinished (std::valarray< tMPIRequest > &requests, tMPIInteger &isFinished)
 test if the requets is finished More...
 
static tBoolean IsFinished (tMPIRequest &request, tMPIStatus &status, tMPIInteger &isFinished)
 return true if the communication is finished More...
 
static tBoolean IsMessageAvaliable (const MPI_Environment &env, tMPICoreId &source, tMPITag &tag, tMPIBoolean &isAvailable, tMPIStatus &status)
 test if a message is available form any tag and any source More...
 
static tBoolean IsMessageAvaliable (const MPI_Environment &env, const tMPITag &tag, const tMPICoreId &source, tMPIBoolean &isAvailable)
 test if the message with tag from source is available More...
 
static tBoolean IsTagMessageAvaliable (const MPI_Environment &env, const tMPITag &tag, tMPICoreId &source, tMPIBoolean &isAvailable, tMPIStatus &status)
 test if the message with tag is avalaible More...
 
template<typename T >
static tBoolean GetCount (const tMPIStatus &status, tMPICount &nElements)
 get the number of element of the message More...
 
- Static Public Member Functions inherited from CORE_Object
static tBoolean EnableMemoryStack (const tBoolean &isMemoryChecked)
 enable the memory stack More...
 
static void EnableMemoryStack ()
 enable the memory stack
 
static void DisableMemoryStack ()
 disable the memory stack
 
static tBoolean IsMemoryStackEnabled ()
 return trur if the memory stack is enabled
 
static tString MemoryStackToString ()
 get the memory stack in string More...
 
static tIndex GetRegisteredClassesNumber ()
 get the memory stack in string More...
 

Protected Member Functions

 MPI_GridEnvironment ()
 create a root environment
 
 MPI_GridEnvironment (int &argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a root environment More...
 
virtual ~MPI_GridEnvironment (void)
 destroy
 
- Protected Member Functions inherited from MPI_Environment
 MPI_Environment ()
 create a root environment
 
 MPI_Environment (int &argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a root environment More...
 
virtual ~MPI_Environment (void)
 destroy
 
void setIsRootEnvironment (const tBoolean &isRoot)
 set true when the environemnt created is a root one but not a common world
 
- Protected Member Functions inherited from MPI_Object
 MPI_Object (void)
 create
 
virtual ~MPI_Object (void)
 destroy
 
- Protected Member Functions inherited from CORE_Object
 CORE_Object ()
 build an instance of the object
 
virtual ~CORE_Object ()
 destroy the instance of object std

 

Detailed Description

template<tUCInt N>
class MPI_GridEnvironment< N >

This class is a grid Environment of templated dimension N=1,2,3.

Template Parameters
N: dimension of the grid To create a grid from a pranet environment call MPI_GridEnvironment::New(const MPI_Environment& parent,const std::array<tMPICoreId,N>& nCoresPerDirections,const std::array<tBoolean,N>& isPeriodicPerDirections,const tBoolean& canCoreIdBeChanged) .

the nCoresPerDirections array can be set to 0 and it can be built by the method GetGridsNumber(parent.getCoresNumber(),nCoresPerDirections).

To get the indices & thge coreId of the current process per direction, call the method getCoreId(std::array<tMPICoreId,N>& indices,tMPICoreId& coreId) :

To get the coordinates of a process within the grid, call the method getIndices(std::array<tMPICoreId,N>& indices

To create an hyperplan of the grid call New(onst MPI_GridEnvironment<N>& parent,const tUCInt& dir) where dir is the normal of the hyperplan

Author
Stephane Despreaux
Version
2.0

Constructor & Destructor Documentation

◆ MPI_GridEnvironment()

template<tUCInt N>
MPI_GridEnvironment< N >::MPI_GridEnvironment ( int &  argc,
char *  argv[],
const tBoolean &  isOpenMPEnabled 
)
inlineprotected

create a root environment

Parameters
[in]argc: number of arguments
[in]argv: values of arguments
[in]isOpenMPEnabledenable both OpenMP & MPI

It choose MPI_THREAD_FUNNELED by default.

  • MPI_THREAD_SINGLE: Only one thread will execute.
  • MPI_THREAD_FUNNELED: The process may be multi-threaded, but only the main thread will make MPI calls.
  • MPI_THREAD_SERIALIZED: The process may be multi-threaded, and multiple threads may make MPI calls, but only one at a time: MPI calls are not made concurrently from two distinct threads.
  • MPI_THREAD_MULTIPLE: Multiple threads may call MPI, with no restrictions.

Member Function Documentation

◆ ComputeGridSize() [1/3]

template<tUCInt N>
static tMPIError MPI_GridEnvironment< N >::ComputeGridSize ( const MPI_Environment parent,
std::array< tMPICoreId, N > &  coresNumber 
)
inlinestatic

get the cores number per direction if possible

Parameters
[in]parent: parent environment
[out]coresNumber: number of cores per direction.
Returns
an error if if is not possible to dispatch nCores on the grid

◆ ComputeGridSize() [2/3]

template<tUCInt N>
static tBoolean MPI_GridEnvironment< N >::ComputeGridSize ( const std::array< tReal, N > &  Hs,
const std::array< tInteger, N > &  Ns,
const tMPICoreId &  nCores,
std::array< tMPICoreId, N > &  Gs 
)
inlinestatic

compute the grid size in order to minimize the ratio S/V where S is the surface of 1 cpu block and V the volume on 1 cpu block

Parameters
[in]Hssize of cell per direction
[in]Nsnumber of cell per direction
[in]nCores: number of cores to dispath the grid
[out]Gs: the grid size
Returns
true if a combination exists It computes all thi divisors of nCores. It trys all the combinaison to find Gs such that Gs minimize S/V where
  • \( L_s^k=H_s^k.N_s^k \)
  • \( V= \Prod_{k=1}^[k=N} L_s^k / \Prod_{k=1}^[k=N} G_s^k \)
  • \( S= 2. \sum_{i} \Prod_{k=1,k\neq i }^[k=N} L_s^k / \Prod_{k=1,k\neq i}^[k=N} G_s^k \)
  • \( S/V= 2. \sum_{i} G_s^i / L_s^i \)

◆ ComputeGridSize() [3/3]

template<tUCInt N>
static tMPIError MPI_GridEnvironment< N >::ComputeGridSize ( const tMPICoreId &  nAvailableCores,
std::array< tMPICoreId, N > &  coresNumber 
)
inlinestatic

get the cores number per direction if possible

Parameters
[out]nAvailableCores: numbe rof avaliable cores
[out]coresNumber: number of cores per direction.
Returns
an error if if is not possible to dispatch nCores on the grid

◆ getContentsMemorySize()

template<tUCInt N>
virtual tMemSize MPI_GridEnvironment< N >::getContentsMemorySize ( ) const
inlineoverridevirtual

return the memory size of the included associations

Returns
the memory size of the storage in bytes 1 Kb = 1024 bytes 1 Mb = 1024 Kb 1 Gb = 1024 Mb 1 Tb = 1024 Gb 1 Hb = 1024 Tb

Reimplemented from MPI_Environment.

Reimplemented in MPI_DirectionalGridEnvironment< N, D >, MPI_DirectionalGridEnvironment< N, 1 >, and MPI_CanonicalGridEnvironment< N >.

◆ getCoreIdAtIndices()

template<tUCInt N>
tMPIError MPI_GridEnvironment< N >::getCoreIdAtIndices ( const std::array< tMPICoreId, N > &  indices,
tMPICoreId &  coreId 
) const
inline

the core id within the grid at indices

Parameters
[in]indicesthe indices of the current core per direction
[out]coreId: the id of the current core
Returns
an error code

◆ getCoreIndices()

template<tUCInt N>
tMPIError MPI_GridEnvironment< N >::getCoreIndices ( const tMPICoreId &  coreId,
std::array< tMPICoreId, N > &  indices 
) const
inline

get the indices of the core with coreId

Parameters
[in]coreId: the id of the core
[out]indicesthe indices of the core per direction
Returns
an error code

◆ initialize()

template<tUCInt N>
virtual void MPI_GridEnvironment< N >::initialize ( )
inlinevirtual

initialize the environment

  • Sets the cores number & core id of the core
  • Sets the grid size , the indice of the core within the grid size
  • Sets the periodicity of the grid

Reimplemented from MPI_Environment.

Reimplemented in MPI_GraphGridEnvironment< N, D >, MPI_DirectionalGridEnvironment< N, D >, MPI_DirectionalGridEnvironment< N, 1 >, MPI_CartEnvironment< N, D >, and MPI_CanonicalGridEnvironment< N >.

◆ isPeriodic()

template<tUCInt N>
const tBoolean& MPI_GridEnvironment< N >::isPeriodic ( const tUCInt &  k) const
inline

return true if the grid is periodic in direction k

Parameters
[in]kindex of the direction in [0,N[

◆ New()

template<tUCInt N>
static CORE_UniquePointer<SelfClass> MPI_GridEnvironment< N >::New ( const std::array< tMPICoreId, N > &  nCoresPerDirection,
int &  argc,
char *  argv[],
const tBoolean &  isOpenMPEnabled 
)
inlinestatic

create a new cart environment

Parameters
[in]nCoresPerDirection: an array of size nDirections with the number of cores per direction
[in]argc: number of arguments
[in]argv: values of arguments
[in]isOpenMPEnabledenable both OpenMP & MPI
Returns
a new grid environment

◆ setGridPeriodicity()

template<tUCInt N>
template<typename Q >
void MPI_GridEnvironment< N >::setGridPeriodicity ( const std::array< Q, N > &  Ts)
inline

set grid periodicity

Template Parameters
Q: type of periodicity
Parameters
[in]Tsperiodicty per direction

◆ setGridSize()

template<tUCInt N>
template<typename Q >
void MPI_GridEnvironment< N >::setGridSize ( const std::array< Q, N > &  Ns)
inline

get the grids number

Template Parameters
Q: type of grid size
Parameters
[in]Nsnumber of grid per face

◆ setIndices()

template<tUCInt N>
template<typename Q >
void MPI_GridEnvironment< N >::setIndices ( const std::array< Q, N > &  indices)
inline

set the indices of the current core

Template Parameters
Q: type of grid size
Parameters
[in]indices: indices of the core

The documentation for this class was generated from the following file: