28#ifndef GRID_COMMUNICATOR_BASE_H
29#define GRID_COMMUNICATOR_BASE_H
70 static void Init(
int *argc,
char ***argv);
94 void ShiftedRanks(
int dim,
int shift,
int & source,
int & dest);
135 std::vector<obj> column;
141 std::vector<MpiCommsRequest_t> list;
149 sizeof(obj),d*100+p);
155 accum = accum + column[p];
188 int xmit_to_rank,
int do_xmit,
190 int recv_from_rank,
int do_recv,
195 int xmit_to_rank,
int do_xmit,
197 int recv_from_rank,
int do_recv,
198 int xbytes,
int rbytes,
int dir);
205 void *xmit,
void *xmit_comp,
206 int xmit_to_rank,
int do_xmit,
207 void *recv,
void *recv_comp,
208 int recv_from_rank,
int do_recv,
209 int xbytes,
int rbytes,
int dir);
223 void Broadcast(
int root,
void* data,
int bytes);
228 template<
class T>
void AllToAll(
int dim,std::vector<T> &in, std::vector<T> &out){
231 assert(in.size()==out.size());
233 uint64_t bytes=
sizeof(T);
234 uint64_t words=in.size()/numnode;
235 assert(numnode * words == in.size());
236 assert(words < (1ULL<<31));
237 AllToAll(dim,(
void *)&in[0],(
void *)&out[0],words,bytes);
239 void AllToAll(
int dim ,
void *in,
void *out,uint64_t words,uint64_t bytes);
240 void AllToAll(
void *in,
void *out,uint64_t words ,uint64_t bytes);
244 Broadcast(root,(
void *)&data,
sizeof(data));
AcceleratorVector< int, MaxDims > Coordinate
#define NAMESPACE_BEGIN(A)
std::complex< RealF > ComplexF
std::complex< RealD > ComplexD
void StencilBarrier(void)
void GlobalXOR(uint32_t &)
double StencilSendToRecvFromPrepare(std::vector< CommsRequest_t > &list, void *xmit, int xmit_to_rank, int do_xmit, void *recv, int recv_from_rank, int do_recv, int xbytes, int rbytes, int dir)
static void SetCommunicatorPolicy(CommunicatorPolicy_t policy)
Coordinate _processor_coor
void ProcessorCoorFromRank(int rank, Coordinate &coor)
CartesianCommunicator(const Coordinate &processors, const CartesianCommunicator &parent, int &srank)
void StencilSendToRecvFromComplete(std::vector< CommsRequest_t > &waitall, int i)
void Broadcast(int root, obj &data)
virtual ~CartesianCommunicator()
void Broadcast(int root, void *data, int bytes)
@ CommunicatorPolicyConcurrent
@ CommunicatorPolicySequential
void StencilSendToRecvFromPollDtoH(std::vector< CommsRequest_t > &list)
Coordinate _shm_processors
static void Init(int *argc, char ***argv)
double StencilSendToRecvFrom(void *xmit, int xmit_to_rank, int do_xmit, void *recv, int recv_from_rank, int do_recv, int bytes, int dir)
void AllToAll(int dim, std::vector< T > &in, std::vector< T > &out)
static int RankWorld(void)
void StencilSendToRecvFromPollIRecv(std::vector< CommsRequest_t > &list)
double StencilSendToRecvFromBegin(std::vector< CommsRequest_t > &list, void *xmit, void *xmit_comp, int xmit_to_rank, int do_xmit, void *recv, void *recv_comp, int recv_from_rank, int do_recv, int xbytes, int rbytes, int dir)
static CommunicatorPolicy_t CommunicatorPolicy
static void BarrierWorld(void)
const Coordinate & ThisProcessorCoor(void)
void CommsComplete(std::vector< MpiCommsRequest_t > &list)
void GlobalSumVector(RealF *, int N)
const Coordinate & ShmGrid(void)
void SendToRecvFrom(void *xmit, int xmit_to_rank, void *recv, int recv_from_rank, int bytes)
int RankFromProcessorCoor(Coordinate &coor)
static Grid_MPI_Comm communicator_world
const Coordinate & ProcessorGrid(void)
static void BroadcastWorld(int root, void *data, int bytes)
void GlobalSumP2P(obj &o)
void InitFromMPICommunicator(const Coordinate &processors, Grid_MPI_Comm communicator_base)
void SendToRecvFromBegin(std::vector< MpiCommsRequest_t > &list, void *xmit, int dest, void *recv, int from, int bytes, int dir)
void ShiftedRanks(int dim, int shift, int &source, int &dest)
unsigned long _ndimension
Grid_MPI_Comm communicator
std::vector< Grid_MPI_Comm > communicator_halo