File MpiWorld.h

Defines

NUM_MPI_EXEC_GRAPH_DETAILS
MPI_MSG_COUNT_PREFIX
MPI_MSGTYPE_COUNT_PREFIX
namespace faabric
namespace mpi

Typedefs

typedef faabric::util::FixedCapacityQueue<MpiMessage> InMemoryMpiQueue
class MpiWorld

Public Functions

MpiWorld()
void create(faabric::Message &call, int newId, int newSize)
void broadcastHostsToRanks()
void initialiseFromMsg(faabric::Message &msg)
void initialiseRankFromMsg(faabric::Message &msg)
std::string getHostForRank(int rank)
std::string getUser()
std::string getFunction()
int getId() const
int getSize() const
bool destroy()
void getCartesianRank(int rank, int maxDims, const int *dims, int *periods, int *coords)
void getRankFromCoords(int *rank, int *coords)
void shiftCartesianCoords(int rank, int direction, int disp, int *source, int *destination)
void send(int sendRank, int recvRank, const uint8_t *buffer, faabric_datatype_t *dataType, int count, MpiMessageType messageType = MpiMessageType::NORMAL)
int isend(int sendRank, int recvRank, const uint8_t *buffer, faabric_datatype_t *dataType, int count, MpiMessageType messageType = MpiMessageType::NORMAL)
void broadcast(int rootRank, int thisRank, uint8_t *buffer, faabric_datatype_t *dataType, int count, MpiMessageType messageType = MpiMessageType::NORMAL)
void recv(int sendRank, int recvRank, uint8_t *buffer, faabric_datatype_t *dataType, int count, MPI_Status *status, MpiMessageType messageType = MpiMessageType::NORMAL)
int irecv(int sendRank, int recvRank, uint8_t *buffer, faabric_datatype_t *dataType, int count, MpiMessageType messageType = MpiMessageType::NORMAL)
void awaitAsyncRequest(int requestId)
void sendRecv(uint8_t *sendBuffer, int sendcount, faabric_datatype_t *sendDataType, int sendRank, uint8_t *recvBuffer, int recvCount, faabric_datatype_t *recvDataType, int recvRank, int myRank, MPI_Status *status)
void scatter(int sendRank, int recvRank, const uint8_t *sendBuffer, faabric_datatype_t *sendType, int sendCount, uint8_t *recvBuffer, faabric_datatype_t *recvType, int recvCount)
void gather(int sendRank, int recvRank, const uint8_t *sendBuffer, faabric_datatype_t *sendType, int sendCount, uint8_t *recvBuffer, faabric_datatype_t *recvType, int recvCount)
void allGather(int rank, const uint8_t *sendBuffer, faabric_datatype_t *sendType, int sendCount, uint8_t *recvBuffer, faabric_datatype_t *recvType, int recvCount)
void reduce(int sendRank, int recvRank, uint8_t *sendBuffer, uint8_t *recvBuffer, faabric_datatype_t *datatype, int count, faabric_op_t *operation)
void allReduce(int rank, uint8_t *sendBuffer, uint8_t *recvBuffer, faabric_datatype_t *datatype, int count, faabric_op_t *operation)
void op_reduce(faabric_op_t *operation, faabric_datatype_t *datatype, int count, uint8_t *inBuffer, uint8_t *resultBuffer)
void scan(int rank, uint8_t *sendBuffer, uint8_t *recvBuffer, faabric_datatype_t *datatype, int count, faabric_op_t *operation)
void allToAll(int rank, uint8_t *sendBuffer, faabric_datatype_t *sendType, int sendCount, uint8_t *recvBuffer, faabric_datatype_t *recvType, int recvCount)
void probe(int sendRank, int recvRank, MPI_Status *status)
void barrier(int thisRank)
std::shared_ptr<InMemoryMpiQueue> getLocalQueue(int sendRank, int recvRank)
long getLocalQueueSize(int sendRank, int recvRank)
void overrideHost(const std::string &newHost)
double getWTime()
void prepareMigration(int newGroupId, int thisRank, bool thisRankMustMigrate)

Private Functions

int getIndexForRanks(int sendRank, int recvRank) const
void initLocalRemoteLeaders()
void initLocalQueues()
void initSendRecvSockets()
int getPortForRank(int rank)
void sendRemoteMpiMessage(int sendRank, int recvRank, MpiMessage &msg)
MpiMessage recvRemoteMpiMessage(int sendRank, int recvRank)
int getUnackedMessageBuffer(int sendRank, int recvRank)
MpiMessage recvBatchReturnLast(int sendRank, int recvRank, int requestId = 0)
void checkRanksRange(int sendRank, int recvRank)
MpiMessage internalRecv(int sendRank, int recvRank, bool isLocal)
void doRecv(const MpiMessage &msg, uint8_t *buffer, faabric_datatype_t *dataType, int count, MPI_Status *status, MpiMessageType messageType = MpiMessageType::NORMAL)

Private Members

int id = -1
int size = -1
std::string thisHost
faabric::util::TimePoint creationTime
std::atomic<int> evictionLatch = 0
std::atomic_flag isDestroyed = false
std::string user
std::string function
std::vector<int> cartProcsPerDim
std::map<std::string, std::set<int>> ranksForHost
std::vector<std::string> hostForRank
std::vector<int> portForRank
int localLeader = -1
std::vector<std::shared_ptr<InMemoryMpiQueue>> localQueues
faabric::transport::PointToPointBroker &broker