Proto
3.2
|
Abstract Generic Parallel Copier. More...
#include <Proto_Copier.H>
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 |
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
Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::Copier | ( | ) |
Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::Copier | ( | OP | a_op | ) |
|
delete |
|
inlinevirtual |
|
inline |
|
inline |
|
pure virtual |
Implemented in Proto::LevelExchangeCopier< T, C, MEM, CTR >, Proto::LevelCopier< T, C, SRC_MEM, DST_MEM, CTR >, Proto::MBLevelExchangeCopier< T, C, MEM, CTR >, Proto::MBLevelFullCopier< T, C, SRC_MEM, DST_MEM, CTR >, Proto::FluxRegisterCopier< T, C, MEM >, Proto::MBFluxRegisterCopier< T, C, MEM >, Proto::MBBoundaryCopier< T, C, MEM, CTR >, and Proto::MBLevelCopier< T, C, SRC_MEM, DST_MEM, CTR >.
|
inlinedelete |
|
inline |
Referenced by Proto::MotionItem< P_SRC, P_DST >::MotionItem().
|
inline |
|
inline |
std::vector< MotionItem< P_SRC, P_DST > > & Proto::Copier< OP, P_SRC, P_DST, SRC_MEM, DST_MEM >::motionPlan | ( | MotionType | a_type | ) |
|
inline |
|
inline |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
friend |
Referenced by Proto::MotionItem< P_SRC, P_DST >::MotionItem().
|
friend |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
private |
|
private |
|
private |
|
private |