Proto  3.2
Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Friends | List of all members
Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM > Class Template Referenceabstract

Abstract Generic Parallel Copier. More...

#include <Proto_Copier.H>

Inheritance diagram for Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >:
Inheritance graph
[legend]

Public Member Functions

 Copier ()
 
 Copier (OP a_op)
 
 Copier (Copier &a_copier)=delete
 
virtual ~Copier ()
 
void define (OP a_op)
 
void clear ()
 
virtual void buildMotionPlans (OP &a_op)=0
 
Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM > & operator= (const Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM > &a_rhs)=delete
 
bool operator== (const Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM > &a_rhs) const
 
void execute ()
 
void sort ()
 
std::vector< MotionItem< P_SRC, P_DST > > & motionPlan (MotionType a_type)
 
CopierIterator< P_SRC, P_DST > begin (MotionType a_type) const
 
void print () const
 

Protected Attributes

OP m_op
 
std::vector< MotionItem< P_SRC, P_DST > > m_localMotionPlan
 
std::vector< MotionItem< P_SRC, P_DST > > m_fromMotionPlan
 
std::vector< MotionItem< P_SRC, P_DST > > m_toMotionPlan
 
bool m_isDefined = false
 

Private Member Functions

void makeItSo ()
 
void makeItSoBegin ()
 
void makeItSoLocal ()
 
void makeItSoEnd ()
 
void completePendingSends () const
 
void allocateBuffers ()
 
void writeToSendBuffers ()
 
void postSends () const
 
void readFromRecvBuffers ()
 
void postRecvs () const
 
void clearBuffers ()
 
void clearMotionPlan ()
 

Private Attributes

size_t m_sendCapacity
 
size_t m_recvCapacity
 
void * m_sendBuffer
 
void * m_recvBuffer
 

Friends

template<typename PP_SRC , typename PP_DST >
class MotionItem
 
template<typename PP_SRC , typename PP_DST >
class CopierIterator
 

Detailed Description

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
class Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >

Abstract Generic Parallel Copier.

Copier is an abstract super-class that handles the MPI communication component of a generic parallel copy operation. Copying is executed by processing a set of "motion plans" which define how data moves from, to, and within this process.

The construction of the motion plans must be defined using the abstract buildMotionPlans() function.

The template parameter class OP defines the serialization of any underlying dataholders. Generally OP must have a reference to the dataholder(s) themselves and must also implement the following API:

void linearIn (void* a_buffer, Box a_range, DataIndex a_patchIndex); void linearOut(void* a_buffer, Box a_domain, DataIndex a_patchIndex); void size(Box a_region, DataIndex a_patchIndex); void localCopy(Box a_domain, DataIndex a_domainIndex, Box a_range, DataIndex a_rangeIndex);

linearIn: Reads data from a_buffer into the part of a patch designated by a_patchIndex intersecting a_range linearOut: Writes data to a_buffer from the part of a patch designated by a_patchIndex intersecting a_domain size: Computes the number of elements in the patch designated by a_patchIndex intersectiong a_region localCopy: Executes the copy operation between two data patches located on the same parallel process

Constructor & Destructor Documentation

◆ Copier() [1/3]

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::Copier ( )

◆ Copier() [2/3]

template<class OP, typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::Copier ( OP  a_op)

◆ Copier() [3/3]

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::Copier ( Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM > &  a_copier)
delete

◆ ~Copier()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::~Copier ( )
inlinevirtual

Member Function Documentation

◆ define()

template<class OP, typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::define ( OP  a_op)
inline

◆ clear()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::clear ( )
inline

◆ buildMotionPlans()

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
virtual void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::buildMotionPlans ( OP &  a_op)
pure virtual

◆ operator=()

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
Copier<OP, P_SRC, P_DST, SRC_MEM, DST_MEM>& Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::operator= ( const Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM > &  a_rhs)
inlinedelete

◆ operator==()

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
bool Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::operator== ( const Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM > &  a_rhs) const
inline

◆ execute()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::execute ( )
inline

◆ sort()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::sort ( )
inline

◆ motionPlan()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
std::vector< MotionItem< P_SRC, P_DST > > & Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::motionPlan ( MotionType  a_type)

◆ begin()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
CopierIterator< P_SRC, P_DST > Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::begin ( MotionType  a_type) const
inline

◆ print()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::print ( ) const
inline

◆ makeItSo()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::makeItSo ( )
private

◆ makeItSoBegin()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::makeItSoBegin ( )
private

◆ makeItSoLocal()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::makeItSoLocal ( )
private

◆ makeItSoEnd()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::makeItSoEnd ( )
private

◆ completePendingSends()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::completePendingSends ( ) const
private

◆ allocateBuffers()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::allocateBuffers ( )
private

◆ writeToSendBuffers()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::writeToSendBuffers ( )
private

◆ postSends()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::postSends ( ) const
private

◆ readFromRecvBuffers()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::readFromRecvBuffers ( )
private

◆ postRecvs()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::postRecvs ( ) const
private

◆ clearBuffers()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::clearBuffers ( )
private

◆ clearMotionPlan()

template<class OP , typename P_SRC , typename P_DST , MemType SRC_MEM, MemType DST_MEM>
void Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::clearMotionPlan ( )
private

Friends And Related Function Documentation

◆ MotionItem

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
template<typename PP_SRC , typename PP_DST >
friend class MotionItem
friend

◆ CopierIterator

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
template<typename PP_SRC , typename PP_DST >
friend class CopierIterator
friend

Member Data Documentation

◆ m_op

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
OP Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_op
protected

◆ m_localMotionPlan

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
std::vector<MotionItem<P_SRC, P_DST> > Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_localMotionPlan
protected

◆ m_fromMotionPlan

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
std::vector<MotionItem<P_SRC, P_DST> > Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_fromMotionPlan
protected

◆ m_toMotionPlan

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
std::vector<MotionItem<P_SRC, P_DST> > Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_toMotionPlan
protected

◆ m_isDefined

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
bool Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_isDefined = false
protected

◆ m_sendCapacity

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
size_t Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_sendCapacity
private

◆ m_recvCapacity

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
size_t Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_recvCapacity
private

◆ m_sendBuffer

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
void* Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_sendBuffer
private

◆ m_recvBuffer

template<class OP, typename P_SRC, typename P_DST, MemType SRC_MEM, MemType DST_MEM>
void* Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::m_recvBuffer
private

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