wrench::Communicator

class Communicator

A class that implements a communicator (ala MPI) abstractions.

Public Functions

~Communicator()

Destructor.

void barrier()

Barrier method (all participants wait for each other), using standard WRENCH/SimGrid mechanisms.

unsigned long getNumRanks()

Get the number of processes participating in the communicator.

Returns:

a number of processes

unsigned long join()

Join the communicator and obtain a rank, which will block until all other communicator participants have joined (or just obtain the rank and return immediately if already joined).

Returns:

a rank

unsigned long join(unsigned long desired_rank)

Join the communicator with a particular rank, which will block until all other communicator participants have joined (or return immediately if already joined).

Parameters:

desired_rank – the desired rank

Returns:

the desired rank

void MPI_Alltoall(double bytes, std::string config = "ompi")

Perform an MPI AllToAll collective, using SimGrid’s SMPI implementation.

Parameters:
  • bytes – the number of bytes in each message sent/received

  • config – the SMPI config option

void MPI_Barrier(std::string config = "ompi")

Perform an MPI Barrier, using SimGrid’s SMPI implementation.

Parameters:

config – the SMPI config option

void MPI_Bcast(int root_rank, double bytes, std::string config = "ompi")

Perform an MPI cast collective, using SimGrid’s SMPI implementation.

Parameters:
  • root_rank – the rank of the root of the broadcast

  • bytes – the number of bytes in each message sent/received

  • config – the SMPI config option

void sendAndReceive(const std::map<unsigned long, double> &sends, int num_receives)

Perform asynchronous sends and receives operations, using standard WRENCH/SimGrid point to point communications.

Parameters:
  • sends – the specification of all outgoing communications as <rank, volume in bytes> pairs

  • num_receives – the number of expected received (from any source)

void sendReceiveAndCompute(const std::map<unsigned long, double> &sends, int num_receives, double flops)

Perform concurrent asynchronous sends, receives, and a computation, using standard WRENCH/SimGrid point to point communications.

Parameters:
  • sends – the specification of all outgoing communications as <rank, volume in bytes> pairs

  • num_receives – the number of expected received (from any source)

  • flops – the number of floating point operations to compute

Public Static Functions

static std::shared_ptr<Communicator> createCommunicator(unsigned long size)

Factory method to construct a communicator.

Parameters:

size – the size of the communicator (# of processes)

Returns:

a shared pointer to a communicator