Nektar++
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Nektar::LibUtilities::Comm Class Referenceabstract

Base communications class. More...

#include <Comm.h>

Inheritance diagram for Nektar::LibUtilities::Comm:
[legend]

Public Member Functions

 Comm (int narg, char *arg[])
 
virtual ~Comm ()
 
void Finalise ()
 
int GetSize () const
 Returns number of processes. More...
 
int GetRank ()
 
const std::string & GetType () const
 
void Block ()
 Block execution until all processes reach this point. More...
 
NekDouble Wtime ()
 Return the time in seconds. More...
 
template<class T >
void Send (int pProc, T &pData)
 
template<class T >
void Recv (int pProc, T &pData)
 
template<class T >
void SendRecv (int pSendProc, T &pSendData, int pRecvProc, T &pRecvData)
 
template<class T >
void SendRecvReplace (int pSendProc, int pRecvProc, T &pData)
 
template<class T >
void AllReduce (T &pData, enum ReduceOperator pOp)
 
template<class T >
void AlltoAll (T &pSendData, T &pRecvData)
 
template<class T1 , class T2 >
void AlltoAllv (T1 &pSendData, T2 &pSendDataSizeMap, T2 &pSendDataOffsetMap, T1 &pRecvData, T2 &pRecvDataSizeMap, T2 &pRecvDataOffsetMap)
 
template<class T >
void AllGather (T &pSendData, T &pRecvData)
 
template<class T >
void AllGatherv (T &pSendData, T &pRecvData, Array< OneD, int > &pRecvDataSizeMap, Array< OneD, int > &pRecvDataOffsetMap)
 
template<class T >
void AllGatherv (T &pRecvData, Array< OneD, int > &pRecvDataSizeMap, Array< OneD, int > &pRecvDataOffsetMap)
 
template<class T >
void Bcast (T &pData, int pRoot)
 
template<class T >
void Exscan (T &pData, enum ReduceOperator pOp, T &ans)
 
template<class T >
Gather (int rootProc, T &val)
 
template<class T >
Scatter (int rootProc, T &pData)
 
template<class T >
void DistGraphCreateAdjacent (T &sources, T &sourceweights, int reorder)
 
template<class T1 , class T2 >
void NeighborAlltoAllv (T1 &pSendData, T2 &pSendDataSizeMap, T2 &pSendDataOffsetMap, T1 &pRecvData, T2 &pRecvDataSizeMap, T2 &pRecvDataOffsetMap)
 
template<class T >
void Irsend (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
template<class T >
void SendInit (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
template<class T >
void Irecv (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
template<class T >
void RecvInit (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
void StartAll (const CommRequestSharedPtr &request)
 
void WaitAll (const CommRequestSharedPtr &request)
 
CommRequestSharedPtr CreateRequest (int num)
 
CommSharedPtr CommCreateIf (int flag)
 If the flag is non-zero create a new communicator. More...
 
void SplitComm (int pRows, int pColumns)
 Splits this communicator into a grid of size pRows*pColumns and creates row and column communicators. By default the communicator is a single row. More...
 
CommSharedPtr GetRowComm ()
 Retrieve the row communicator to which this process belongs. More...
 
CommSharedPtr GetColumnComm ()
 Retrieve the column communicator to which this process belongs. More...
 
bool TreatAsRankZero ()
 
bool IsSerial ()
 
std::tuple< int, int, int > GetVersion ()
 
bool RemoveExistingFiles ()
 
std::pair< CommSharedPtr, CommSharedPtrSplitCommNode ()
 

Protected Member Functions

 Comm ()
 
virtual void v_Finalise ()=0
 
virtual int v_GetRank ()=0
 
virtual void v_Block ()=0
 
virtual NekDouble v_Wtime ()=0
 
virtual void v_Send (void *buf, int count, CommDataType dt, int dest)=0
 
virtual void v_Recv (void *buf, int count, CommDataType dt, int source)=0
 
virtual void v_SendRecv (void *sendbuf, int sendcount, CommDataType sendtype, int dest, void *recvbuf, int recvcount, CommDataType recvtype, int source)=0
 
virtual void v_SendRecvReplace (void *buf, int count, CommDataType dt, int pSendProc, int pRecvProc)=0
 
virtual void v_AllReduce (void *buf, int count, CommDataType dt, enum ReduceOperator pOp)=0
 
virtual void v_AlltoAll (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0
 
virtual void v_AlltoAllv (void *sendbuf, int sendcounts[], int sensdispls[], CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0
 
virtual void v_AllGather (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0
 
virtual void v_AllGatherv (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0
 
virtual void v_AllGatherv (void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0
 
virtual void v_Bcast (void *buffer, int count, CommDataType dt, int root)=0
 
virtual void v_Exscan (Array< OneD, unsigned long long > &pData, enum ReduceOperator pOp, Array< OneD, unsigned long long > &ans)=0
 
virtual void v_Gather (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0
 
virtual void v_Scatter (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0
 
virtual CommSharedPtr v_CommCreateIf (int flag)=0
 
virtual void v_DistGraphCreateAdjacent (int indegree, const int sources[], const int sourceweights[], int reorder)=0
 
virtual void v_NeighborAlltoAllv (void *sendbuf, int sendcounts[], int sdispls[], CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0
 
virtual void v_Irsend (void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0
 
virtual void v_SendInit (void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0
 
virtual void v_Irecv (void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0
 
virtual void v_RecvInit (void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0
 
virtual void v_StartAll (CommRequestSharedPtr request)=0
 
virtual void v_WaitAll (CommRequestSharedPtr request)=0
 
virtual CommRequestSharedPtr v_CreateRequest (int num)=0
 
virtual void v_SplitComm (int pRows, int pColumns)=0
 
virtual bool v_TreatAsRankZero ()=0
 
virtual bool v_IsSerial ()=0
 
virtual std::tuple< int, int, int > v_GetVersion ()=0
 
virtual bool v_RemoveExistingFiles ()
 
virtual std::pair< CommSharedPtr, CommSharedPtrv_SplitCommNode ()
 

Protected Attributes

int m_size
 Number of processes. More...
 
std::string m_type
 Type of communication. More...
 
CommSharedPtr m_commRow
 Row communicator. More...
 
CommSharedPtr m_commColumn
 Column communicator. More...
 

Detailed Description

Base communications class.

Definition at line 89 of file Comm.h.

Constructor & Destructor Documentation

◆ Comm() [1/2]

Nektar::LibUtilities::Comm::Comm ( int  narg,
char *  arg[] 
)

Definition at line 43 of file Communication/Comm.cpp.

44 {
45  boost::ignore_unused(narg, arg);
46 }

◆ ~Comm()

Nektar::LibUtilities::Comm::~Comm ( )
virtual

Definition at line 52 of file Communication/Comm.cpp.

53 {
54 }

◆ Comm() [2/2]

Nektar::LibUtilities::Comm::Comm ( )
protected

Definition at line 48 of file Communication/Comm.cpp.

49 {
50 }

Member Function Documentation

◆ AllGather()

template<class T >
void Nektar::LibUtilities::Comm::AllGather ( T &  pSendData,
T &  pRecvData 
)

Definition at line 398 of file Comm.h.

399 {
400  BOOST_STATIC_ASSERT_MSG(
402  "AllGather only valid with Array or vector arguments.");
403 
404  int sendSize = CommDataTypeTraits<T>::GetCount(pSendData);
405  int recvSize = sendSize;
406 
407  pRecvData = T(recvSize * GetSize());
408 
409  v_AllGather(CommDataTypeTraits<T>::GetPointer(pSendData), sendSize,
411  CommDataTypeTraits<T>::GetPointer(pRecvData), recvSize,
413 }
int GetSize() const
Returns number of processes.
Definition: Comm.h:269
virtual void v_AllGather(void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0

References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), GetSize(), and v_AllGather().

◆ AllGatherv() [1/2]

template<class T >
void Nektar::LibUtilities::Comm::AllGatherv ( T &  pRecvData,
Array< OneD, int > &  pRecvDataSizeMap,
Array< OneD, int > &  pRecvDataOffsetMap 
)

Definition at line 440 of file Comm.h.

442 {
443  BOOST_STATIC_ASSERT_MSG(
445  "AllGatherv only valid with Array or vector arguments.");
446 
448  pRecvDataSizeMap.get(), pRecvDataOffsetMap.get(),
450 }
virtual void v_AllGatherv(void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0

References v_AllGatherv().

◆ AllGatherv() [2/2]

template<class T >
void Nektar::LibUtilities::Comm::AllGatherv ( T &  pSendData,
T &  pRecvData,
Array< OneD, int > &  pRecvDataSizeMap,
Array< OneD, int > &  pRecvDataOffsetMap 
)

Definition at line 419 of file Comm.h.

422 {
423  BOOST_STATIC_ASSERT_MSG(
425  "AllGatherv only valid with Array or vector arguments.");
426 
427  int sendSize = CommDataTypeTraits<T>::GetCount(pSendData);
428 
429  v_AllGatherv(CommDataTypeTraits<T>::GetPointer(pSendData), sendSize,
432  pRecvDataSizeMap.get(), pRecvDataOffsetMap.get(),
434 }

References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), and v_AllGatherv().

◆ AllReduce()

template<class T >
void Nektar::LibUtilities::Comm::AllReduce ( T &  pData,
enum ReduceOperator  pOp 
)

Definition at line 349 of file Comm.h.

350 {
354 }
virtual void v_AllReduce(void *buf, int count, CommDataType dt, enum ReduceOperator pOp)=0

References v_AllReduce().

◆ AlltoAll()

template<class T >
void Nektar::LibUtilities::Comm::AlltoAll ( T &  pSendData,
T &  pRecvData 
)

Definition at line 356 of file Comm.h.

357 {
358  static_assert(CommDataTypeTraits<T>::IsVector,
359  "AlltoAll only valid with Array or vector arguments.");
360  int sendSize = CommDataTypeTraits<T>::GetCount(pSendData);
361  int recvSize = CommDataTypeTraits<T>::GetCount(pRecvData);
362  ASSERTL0(sendSize == recvSize,
363  "Send and Recv arrays have incompatible sizes in AlltoAll");
364 
365  int count = sendSize / GetSize();
366  ASSERTL0(count * GetSize() == sendSize,
367  "Array size incompatible with size of communicator");
368 
371  CommDataTypeTraits<T>::GetPointer(pRecvData), count,
373 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:215
virtual void v_AlltoAll(void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0

References ASSERTL0, Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), GetSize(), and v_AlltoAll().

◆ AlltoAllv()

template<class T1 , class T2 >
void Nektar::LibUtilities::Comm::AlltoAllv ( T1 &  pSendData,
T2 &  pSendDataSizeMap,
T2 &  pSendDataOffsetMap,
T1 &  pRecvData,
T2 &  pRecvDataSizeMap,
T2 &  pRecvDataOffsetMap 
)

Definition at line 379 of file Comm.h.

382 {
383  static_assert(CommDataTypeTraits<T1>::IsVector,
384  "AlltoAllv only valid with Array or vector arguments.");
385  static_assert(std::is_same<T2, std::vector<int>>::value ||
386  std::is_same<T2, Array<OneD, int>>::value,
387  "Alltoallv size and offset maps should be integer vectors.");
389  (int *)CommDataTypeTraits<T2>::GetPointer(pSendDataSizeMap),
390  (int *)CommDataTypeTraits<T2>::GetPointer(pSendDataOffsetMap),
393  (int *)CommDataTypeTraits<T2>::GetPointer(pRecvDataSizeMap),
394  (int *)CommDataTypeTraits<T2>::GetPointer(pRecvDataOffsetMap),
396 }
virtual void v_AlltoAllv(void *sendbuf, int sendcounts[], int sensdispls[], CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0

References v_AlltoAllv().

◆ Bcast()

template<class T >
void Nektar::LibUtilities::Comm::Bcast ( T &  pData,
int  pRoot 
)

Definition at line 455 of file Comm.h.

456 {
460 }
virtual void v_Bcast(void *buffer, int count, CommDataType dt, int root)=0

References v_Bcast().

◆ Block()

void Nektar::LibUtilities::Comm::Block ( )
inline

Block execution until all processes reach this point.

Definition at line 293 of file Comm.h.

294 {
295  v_Block();
296 }
virtual void v_Block()=0

References v_Block().

◆ CommCreateIf()

CommSharedPtr Nektar::LibUtilities::Comm::CommCreateIf ( int  flag)
inline

If the flag is non-zero create a new communicator.

Definition at line 689 of file Comm.h.

690 {
691  return v_CommCreateIf(flag);
692 }
virtual CommSharedPtr v_CommCreateIf(int flag)=0

References v_CommCreateIf().

◆ CreateRequest()

CommRequestSharedPtr Nektar::LibUtilities::Comm::CreateRequest ( int  num)
inline

Creates a number of CommRequests.

Parameters
numNumber of requests to generate in the communication request object
Returns
Communication request object

Definition at line 681 of file Comm.h.

682 {
683  return v_CreateRequest(num);
684 }
virtual CommRequestSharedPtr v_CreateRequest(int num)=0

References v_CreateRequest().

◆ DistGraphCreateAdjacent()

template<class T >
void Nektar::LibUtilities::Comm::DistGraphCreateAdjacent ( T &  sources,
T &  sourceweights,
int  reorder 
)

This replaces the current MPI communicator with a new one that also holds the distributed graph topology information. If reordering is enabled using this might break code where process/rank numbers are assumed to remain constant. This also assumes that the graph is bi-directional, so all sources are also destinations with equal weighting.

Parameters
sourcesRanks of processes for which the calling process is the destination/source
sourceweightsWeights of the corresponding edges into the calling process
reorderRanks may be reordered (true) or not (false)

Definition at line 528 of file Comm.h.

529 {
530  static_assert(
532  "DistGraphCreateAdjacent only valid with Array or vector arguments.");
533 
535  CommDataTypeTraits<T>::GetCount(sourceweights),
536  "Sources and weights array sizes don't match");
537 
538  int indegree = CommDataTypeTraits<T>::GetCount(sources);
539 
541  indegree, (const int *)CommDataTypeTraits<T>::GetPointer(sources),
542  (const int *)CommDataTypeTraits<T>::GetPointer(sourceweights), reorder);
543 }
virtual void v_DistGraphCreateAdjacent(int indegree, const int sources[], const int sourceweights[], int reorder)=0

References ASSERTL0, Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), and v_DistGraphCreateAdjacent().

◆ Exscan()

template<class T >
void Nektar::LibUtilities::Comm::Exscan ( T &  pData,
enum ReduceOperator  pOp,
T &  ans 
)

Definition at line 463 of file Comm.h.

464 {
467  "Input and output array sizes don't match");
472 }
virtual void v_Exscan(Array< OneD, unsigned long long > &pData, enum ReduceOperator pOp, Array< OneD, unsigned long long > &ans)=0

References ASSERTL0, and v_Exscan().

◆ Finalise()

void Nektar::LibUtilities::Comm::Finalise ( )
inline

Definition at line 261 of file Comm.h.

262 {
263  v_Finalise();
264 }
virtual void v_Finalise()=0

References v_Finalise().

◆ Gather()

template<class T >
T Nektar::LibUtilities::Comm::Gather ( int  rootProc,
T &  val 
)

Concatenate all the input arrays, in rank order, onto the process with rank == rootProc

Definition at line 478 of file Comm.h.

479 {
480  static_assert(CommDataTypeTraits<T>::IsVector,
481  "Gather only valid with Array or vector arguments.");
482  bool amRoot = (GetRank() == rootProc);
483  unsigned nEl = CommDataTypeTraits<T>::GetCount(val);
484 
485  unsigned nOut = amRoot ? GetSize() * nEl : 0;
486  T ans(nOut);
487  void *recvbuf = amRoot ? CommDataTypeTraits<T>::GetPointer(ans) : NULL;
488 
490  CommDataTypeTraits<T>::GetDataType(), recvbuf, nEl,
492  return ans;
493 }
virtual void v_Gather(void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0

References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), Nektar::LibUtilities::CommDataTypeTraits< T >::GetPointer(), GetRank(), GetSize(), and v_Gather().

◆ GetColumnComm()

CommSharedPtr Nektar::LibUtilities::Comm::GetColumnComm ( )
inline

Retrieve the column communicator to which this process belongs.

Definition at line 723 of file Comm.h.

724 {
725  if (!m_commColumn.get())
726  {
727  return shared_from_this();
728  }
729  else
730  {
731  return m_commColumn;
732  }
733 }
CommSharedPtr m_commColumn
Column communicator.
Definition: Comm.h:178

References m_commColumn.

◆ GetRank()

int Nektar::LibUtilities::Comm::GetRank ( )
inline

Definition at line 277 of file Comm.h.

278 {
279  return v_GetRank();
280 }
virtual int v_GetRank()=0

References v_GetRank().

Referenced by export_Comm(), Gather(), and Scatter().

◆ GetRowComm()

CommSharedPtr Nektar::LibUtilities::Comm::GetRowComm ( )
inline

Retrieve the row communicator to which this process belongs.

Definition at line 707 of file Comm.h.

708 {
709  if (!m_commRow.get())
710  {
711  return shared_from_this();
712  }
713  else
714  {
715  return m_commRow;
716  }
717 }
CommSharedPtr m_commRow
Row communicator.
Definition: Comm.h:177

References m_commRow.

◆ GetSize()

int Nektar::LibUtilities::Comm::GetSize ( ) const
inline

Returns number of processes.

Definition at line 269 of file Comm.h.

270 {
271  return m_size;
272 }
int m_size
Number of processes.
Definition: Comm.h:175

References m_size.

Referenced by AllGather(), AlltoAll(), export_Comm(), Gather(), Scatter(), and Nektar::LibUtilities::CommMpi::v_AllReduce().

◆ GetType()

const std::string & Nektar::LibUtilities::Comm::GetType ( ) const
inline

Definition at line 285 of file Comm.h.

286 {
287  return m_type;
288 }
std::string m_type
Type of communication.
Definition: Comm.h:176

References m_type.

Referenced by export_Comm().

◆ GetVersion()

std::tuple< int, int, int > Nektar::LibUtilities::Comm::GetVersion ( )
inline
Returns
tuple of {major, minor, patch} version numbers

Definition at line 748 of file Comm.h.

749 {
750  return v_GetVersion();
751 }
virtual std::tuple< int, int, int > v_GetVersion()=0

References v_GetVersion().

◆ Irecv()

template<class T >
void Nektar::LibUtilities::Comm::Irecv ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Begins a nonblocking receive

Parameters
pProcRank of source
pDataArray/vector to place incoming data in to
countNumber of elements to receive in to pData
requestCommunication request object
locLocation in request to use

Definition at line 630 of file Comm.h.

632 {
634  CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
635 }
virtual void v_Irecv(void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0

References CG_Iterations::loc, and v_Irecv().

◆ Irsend()

template<class T >
void Nektar::LibUtilities::Comm::Irsend ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Starts a ready-mode nonblocking send

Parameters
pProcRank of destination
pDataArray/vector to send
countNumber of elements to send in pData
requestCommunication request object
locLocation in request to use

Definition at line 596 of file Comm.h.

598 {
600  CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
601 }
virtual void v_Irsend(void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0

References CG_Iterations::loc, and v_Irsend().

◆ IsSerial()

bool Nektar::LibUtilities::Comm::IsSerial ( )
inline

Definition at line 740 of file Comm.h.

741 {
742  return v_IsSerial();
743 }
virtual bool v_IsSerial()=0

References v_IsSerial().

◆ NeighborAlltoAllv()

template<class T1 , class T2 >
void Nektar::LibUtilities::Comm::NeighborAlltoAllv ( T1 &  pSendData,
T2 &  pSendDataSizeMap,
T2 &  pSendDataOffsetMap,
T1 &  pRecvData,
T2 &  pRecvDataSizeMap,
T2 &  pRecvDataOffsetMap 
)

Sends data to neighboring processes in a virtual topology communicator. All processes send different amounts of data to, and receive different amounts of data from, all neighbors

Parameters
pSendDataArray/vector to send to neighbors
pSendDataSizeMapArray/vector where entry i specifies the number of elements to send to neighbor i
pSendDataOffsetMapArray/vector where entry i specifies the displacement (offset from pSendData) from which to send data to neighbor i
pRecvDataArray/vector to place incoming data in to
pRecvDataSizeMapArray/vector where entry i specifies the number of elements to receive from neighbor i
pRecvDataOffsetMapArray/vector where entry i specifies the displacement (offset from pRecvData) from which to receive data from neighbor i

Definition at line 564 of file Comm.h.

567 {
568  static_assert(
570  "NeighbourAlltoAllv only valid with Array or vector arguments.");
571  static_assert(
572  std::is_same<T2, std::vector<int>>::value ||
573  std::is_same<T2, Array<OneD, int>>::value,
574  "NeighborAllToAllv size and offset maps should be integer vectors.");
577  (int *)CommDataTypeTraits<T2>::GetPointer(pSendDataSizeMap),
578  (int *)CommDataTypeTraits<T2>::GetPointer(pSendDataOffsetMap),
581  (int *)CommDataTypeTraits<T2>::GetPointer(pRecvDataSizeMap),
582  (int *)CommDataTypeTraits<T2>::GetPointer(pRecvDataOffsetMap),
584 }
virtual void v_NeighborAlltoAllv(void *sendbuf, int sendcounts[], int sdispls[], CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0

References v_NeighborAlltoAllv().

◆ Recv()

template<class T >
void Nektar::LibUtilities::Comm::Recv ( int  pProc,
T &  pData 
)

Definition at line 313 of file Comm.h.

314 {
318 }
virtual void v_Recv(void *buf, int count, CommDataType dt, int source)=0

References v_Recv().

◆ RecvInit()

template<class T >
void Nektar::LibUtilities::Comm::RecvInit ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Create a persistent request for a receive

Parameters
pProcRank of source
pDataArray/vector to place incoming data in to
countNumber of elements to receive in to pData
requestCommunication request object
locLocation in request to use

Definition at line 647 of file Comm.h.

649 {
651  CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
652 }
virtual void v_RecvInit(void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0

References CG_Iterations::loc, and v_RecvInit().

◆ RemoveExistingFiles()

bool Nektar::LibUtilities::Comm::RemoveExistingFiles ( )
inline

Definition at line 753 of file Comm.h.

754 {
755  return v_RemoveExistingFiles();
756 }

References v_RemoveExistingFiles().

◆ Scatter()

template<class T >
T Nektar::LibUtilities::Comm::Scatter ( int  rootProc,
T &  pData 
)

Scatter pData across ranks in chunks of len(pData)/num_ranks

Definition at line 497 of file Comm.h.

498 {
499  static_assert(CommDataTypeTraits<T>::IsVector,
500  "Scatter only valid with Array or vector arguments.");
501 
502  bool amRoot = (GetRank() == rootProc);
503  unsigned nEl = CommDataTypeTraits<T>::GetCount(pData) / GetSize();
504 
505  void *sendbuf = amRoot ? CommDataTypeTraits<T>::GetPointer(pData) : NULL;
506  T ans(nEl);
507 
511  return ans;
512 }
virtual void v_Scatter(void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0

References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), Nektar::LibUtilities::CommDataTypeTraits< T >::GetPointer(), GetRank(), GetSize(), and v_Scatter().

◆ Send()

template<class T >
void Nektar::LibUtilities::Comm::Send ( int  pProc,
T &  pData 
)

Definition at line 306 of file Comm.h.

307 {
311 }
virtual void v_Send(void *buf, int count, CommDataType dt, int dest)=0

References v_Send().

◆ SendInit()

template<class T >
void Nektar::LibUtilities::Comm::SendInit ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Creates a persistent request for a send

Parameters
pProcRank of destination
pDataArray/vector to send
countNumber of elements to send in pData
requestCommunication request object
locLocation in request to use

Definition at line 613 of file Comm.h.

615 {
617  CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
618 }
virtual void v_SendInit(void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0

References CG_Iterations::loc, and v_SendInit().

◆ SendRecv()

template<class T >
void Nektar::LibUtilities::Comm::SendRecv ( int  pSendProc,
T &  pSendData,
int  pRecvProc,
T &  pRecvData 
)

Definition at line 324 of file Comm.h.

325 {
332 }
virtual void v_SendRecv(void *sendbuf, int sendcount, CommDataType sendtype, int dest, void *recvbuf, int recvcount, CommDataType recvtype, int source)=0

References v_SendRecv().

◆ SendRecvReplace()

template<class T >
void Nektar::LibUtilities::Comm::SendRecvReplace ( int  pSendProc,
int  pRecvProc,
T &  pData 
)

Definition at line 338 of file Comm.h.

339 {
343  pRecvProc);
344 }
virtual void v_SendRecvReplace(void *buf, int count, CommDataType dt, int pSendProc, int pRecvProc)=0

References v_SendRecvReplace().

◆ SplitComm()

void Nektar::LibUtilities::Comm::SplitComm ( int  pRows,
int  pColumns 
)
inline

Splits this communicator into a grid of size pRows*pColumns and creates row and column communicators. By default the communicator is a single row.

Definition at line 699 of file Comm.h.

700 {
701  v_SplitComm(pRows, pColumns);
702 }
virtual void v_SplitComm(int pRows, int pColumns)=0

References v_SplitComm().

◆ SplitCommNode()

std::pair< CommSharedPtr, CommSharedPtr > Nektar::LibUtilities::Comm::SplitCommNode ( )
inline

Definition at line 758 of file Comm.h.

759 {
760  return v_SplitCommNode();
761 }
virtual std::pair< CommSharedPtr, CommSharedPtr > v_SplitCommNode()

References v_SplitCommNode().

◆ StartAll()

void Nektar::LibUtilities::Comm::StartAll ( const CommRequestSharedPtr request)
inline

Starts a collection of persistent requests

Parameters
requestCommunication request object

Definition at line 659 of file Comm.h.

660 {
661  v_StartAll(request);
662 }
virtual void v_StartAll(CommRequestSharedPtr request)=0

References v_StartAll().

◆ TreatAsRankZero()

bool Nektar::LibUtilities::Comm::TreatAsRankZero ( )
inline

Definition at line 735 of file Comm.h.

736 {
737  return v_TreatAsRankZero();
738 }
virtual bool v_TreatAsRankZero()=0

References v_TreatAsRankZero().

◆ v_AllGather()

virtual void Nektar::LibUtilities::Comm::v_AllGather ( void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcount,
CommDataType  recvtype 
)
protectedpure virtual

◆ v_AllGatherv() [1/2]

virtual void Nektar::LibUtilities::Comm::v_AllGatherv ( void recvbuf,
int  recvcounts[],
int  rdispls[],
CommDataType  recvtype 
)
protectedpure virtual

◆ v_AllGatherv() [2/2]

virtual void Nektar::LibUtilities::Comm::v_AllGatherv ( void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcounts[],
int  rdispls[],
CommDataType  recvtype 
)
protectedpure virtual

◆ v_AllReduce()

virtual void Nektar::LibUtilities::Comm::v_AllReduce ( void buf,
int  count,
CommDataType  dt,
enum ReduceOperator  pOp 
)
protectedpure virtual

◆ v_AlltoAll()

virtual void Nektar::LibUtilities::Comm::v_AlltoAll ( void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcount,
CommDataType  recvtype 
)
protectedpure virtual

◆ v_AlltoAllv()

virtual void Nektar::LibUtilities::Comm::v_AlltoAllv ( void sendbuf,
int  sendcounts[],
int  sensdispls[],
CommDataType  sendtype,
void recvbuf,
int  recvcounts[],
int  rdispls[],
CommDataType  recvtype 
)
protectedpure virtual

◆ v_Bcast()

virtual void Nektar::LibUtilities::Comm::v_Bcast ( void buffer,
int  count,
CommDataType  dt,
int  root 
)
protectedpure virtual

◆ v_Block()

virtual void Nektar::LibUtilities::Comm::v_Block ( )
protectedpure virtual

◆ v_CommCreateIf()

virtual CommSharedPtr Nektar::LibUtilities::Comm::v_CommCreateIf ( int  flag)
protectedpure virtual

◆ v_CreateRequest()

virtual CommRequestSharedPtr Nektar::LibUtilities::Comm::v_CreateRequest ( int  num)
protectedpure virtual

◆ v_DistGraphCreateAdjacent()

virtual void Nektar::LibUtilities::Comm::v_DistGraphCreateAdjacent ( int  indegree,
const int  sources[],
const int  sourceweights[],
int  reorder 
)
protectedpure virtual

◆ v_Exscan()

virtual void Nektar::LibUtilities::Comm::v_Exscan ( Array< OneD, unsigned long long > &  pData,
enum ReduceOperator  pOp,
Array< OneD, unsigned long long > &  ans 
)
protectedpure virtual

◆ v_Finalise()

virtual void Nektar::LibUtilities::Comm::v_Finalise ( )
protectedpure virtual

◆ v_Gather()

virtual void Nektar::LibUtilities::Comm::v_Gather ( void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcount,
CommDataType  recvtype,
int  root 
)
protectedpure virtual

◆ v_GetRank()

virtual int Nektar::LibUtilities::Comm::v_GetRank ( )
protectedpure virtual

◆ v_GetVersion()

virtual std::tuple<int, int, int> Nektar::LibUtilities::Comm::v_GetVersion ( )
protectedpure virtual

◆ v_Irecv()

virtual void Nektar::LibUtilities::Comm::v_Irecv ( void buf,
int  count,
CommDataType  dt,
int  source,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_Irsend()

virtual void Nektar::LibUtilities::Comm::v_Irsend ( void buf,
int  count,
CommDataType  dt,
int  dest,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_IsSerial()

virtual bool Nektar::LibUtilities::Comm::v_IsSerial ( )
protectedpure virtual

◆ v_NeighborAlltoAllv()

virtual void Nektar::LibUtilities::Comm::v_NeighborAlltoAllv ( void sendbuf,
int  sendcounts[],
int  sdispls[],
CommDataType  sendtype,
void recvbuf,
int  recvcounts[],
int  rdispls[],
CommDataType  recvtype 
)
protectedpure virtual

◆ v_Recv()

virtual void Nektar::LibUtilities::Comm::v_Recv ( void buf,
int  count,
CommDataType  dt,
int  source 
)
protectedpure virtual

◆ v_RecvInit()

virtual void Nektar::LibUtilities::Comm::v_RecvInit ( void buf,
int  count,
CommDataType  dt,
int  source,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_RemoveExistingFiles()

bool Nektar::LibUtilities::Comm::v_RemoveExistingFiles ( void  )
protectedvirtual

Reimplemented in Nektar::FieldUtils::FieldConvertComm.

Definition at line 57 of file Communication/Comm.cpp.

58 {
59  return true;
60 }

Referenced by RemoveExistingFiles().

◆ v_Scatter()

virtual void Nektar::LibUtilities::Comm::v_Scatter ( void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcount,
CommDataType  recvtype,
int  root 
)
protectedpure virtual

◆ v_Send()

virtual void Nektar::LibUtilities::Comm::v_Send ( void buf,
int  count,
CommDataType  dt,
int  dest 
)
protectedpure virtual

◆ v_SendInit()

virtual void Nektar::LibUtilities::Comm::v_SendInit ( void buf,
int  count,
CommDataType  dt,
int  dest,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_SendRecv()

virtual void Nektar::LibUtilities::Comm::v_SendRecv ( void sendbuf,
int  sendcount,
CommDataType  sendtype,
int  dest,
void recvbuf,
int  recvcount,
CommDataType  recvtype,
int  source 
)
protectedpure virtual

◆ v_SendRecvReplace()

virtual void Nektar::LibUtilities::Comm::v_SendRecvReplace ( void buf,
int  count,
CommDataType  dt,
int  pSendProc,
int  pRecvProc 
)
protectedpure virtual

◆ v_SplitComm()

virtual void Nektar::LibUtilities::Comm::v_SplitComm ( int  pRows,
int  pColumns 
)
protectedpure virtual

◆ v_SplitCommNode()

std::pair< CommSharedPtr, CommSharedPtr > Nektar::LibUtilities::Comm::v_SplitCommNode ( )
protectedvirtual

Reimplemented in Nektar::LibUtilities::CommMpi.

Definition at line 62 of file Communication/Comm.cpp.

63 {
64  return std::make_pair(CommSharedPtr(), CommSharedPtr());
65 }
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Definition: Comm.h:54

Referenced by SplitCommNode().

◆ v_StartAll()

virtual void Nektar::LibUtilities::Comm::v_StartAll ( CommRequestSharedPtr  request)
protectedpure virtual

◆ v_TreatAsRankZero()

virtual bool Nektar::LibUtilities::Comm::v_TreatAsRankZero ( )
protectedpure virtual

◆ v_WaitAll()

virtual void Nektar::LibUtilities::Comm::v_WaitAll ( CommRequestSharedPtr  request)
protectedpure virtual

◆ v_Wtime()

virtual NekDouble Nektar::LibUtilities::Comm::v_Wtime ( )
protectedpure virtual

◆ WaitAll()

void Nektar::LibUtilities::Comm::WaitAll ( const CommRequestSharedPtr request)
inline

Waits for all CommRequests in the request object to complete.

Parameters
requestCommunication request object

Definition at line 669 of file Comm.h.

670 {
671  v_WaitAll(request);
672 }
virtual void v_WaitAll(CommRequestSharedPtr request)=0

References v_WaitAll().

◆ Wtime()

double Nektar::LibUtilities::Comm::Wtime ( )
inline

Return the time in seconds.

Definition at line 301 of file Comm.h.

302 {
303  return v_Wtime();
304 }
virtual NekDouble v_Wtime()=0

References v_Wtime().

Member Data Documentation

◆ m_commColumn

CommSharedPtr Nektar::LibUtilities::Comm::m_commColumn
protected

◆ m_commRow

CommSharedPtr Nektar::LibUtilities::Comm::m_commRow
protected

◆ m_size

int Nektar::LibUtilities::Comm::m_size
protected

◆ m_type

std::string Nektar::LibUtilities::Comm::m_type
protected