MPI.h

Note

The documentation on this page was automatically extracted from the DOLFIN C++ code and may need to be edited or expanded.

class MPIInfo
class MPI

This class provides utility functions for easy communication with MPI and handles cases when DOLFIN is not configured with MPI.

static unsigned int rank(MPI_Comm comm)

Return process rank for the communicator

static unsigned int size(MPI_Comm comm)

Return size of the group (number of processes) associated with the communicator

static bool is_broadcaster(MPI_Comm comm)

Determine whether we should broadcast (based on current parallel policy)

static bool is_receiver(MPI_Comm comm)

Determine whether we should receive (based on current parallel policy)

static void barrier(MPI_Comm comm)

Set a barrier (synchronization point)

static void all_to_all(MPI_Comm comm, std::vector<std::vector<T>> &in_values, std::vector<std::vector<T>> &out_values)

Send in_values[p0] to process p0 and receive values from process p1 in out_values[p1]

static void broadcast(MPI_Comm comm, std::vector<T> &value, unsigned int broadcaster = 0)

Broadcast vector of value from broadcaster to all processes

static void broadcast(MPI_Comm comm, T &value, unsigned int broadcaster = 0)

Broadcast single primitive from broadcaster to all processes

static void scatter(MPI_Comm comm, const std::vector<std::vector<T>> &in_values, std::vector<T> &out_value, unsigned int sending_process = 0)

Scatter vector in_values[i] to process i

static void scatter(MPI_Comm comm, const std::vector<T> &in_values, T &out_value, unsigned int sending_process = 0)

Scatter primitive in_values[i] to process i

static void gather(MPI_Comm comm, const std::vector<T> &in_values, std::vector<T> &out_values, unsigned int receiving_process = 0)

Gather values on one process

static void gather(MPI_Comm comm, const std::string &in_values, std::vector<std::string> &out_values, unsigned int receiving_process = 0)

Gather strings on one process

static void all_gather(MPI_Comm comm, const std::vector<T> &in_values, std::vector<T> &out_values)

Gather values from all processes. Same data count from each process (wrapper for MPI_Allgather)

static void all_gather(MPI_Comm comm, const std::vector<T> &in_values, std::vector<std::vector<T>> &out_values)

Gather values from each process (variable count per process)

static void all_gather(MPI_Comm comm, const T in_value, std::vector<T> &out_values)

Gather values, one primitive from each process (MPI_Allgather)

static T max(MPI_Comm comm, const T &value)

Return global max value

static T min(MPI_Comm comm, const T &value)

Return global min value

static T sum(MPI_Comm comm, const T &value)

Sum values and return sum

static T avg(MPI_Comm comm, const T &value)

Return average across comm; implemented only for T == Table

static T all_reduce(MPI_Comm comm, const T &value, X op)

All reduce

static std::size_t global_offset(MPI_Comm comm, std::size_t range, bool exclusive)

Find global offset (index) (wrapper for MPI_(Ex)Scan with MPI_SUM as reduction op)

static void send_recv(MPI_Comm comm, const std::vector<T> &send_value, unsigned int dest, int send_tag, std::vector<T> &recv_value, unsigned int source, int recv_tag)

Send-receive data between processes (blocking)

static void send_recv(MPI_Comm comm, const std::vector<T> &send_value, unsigned int dest, std::vector<T> &recv_value, unsigned int source)

Send-receive data between processes

static std::pair<std::int64_t, std::int64_t> local_range(MPI_Comm comm, std::int64_t N)

Return local range for local process, splitting [0, N - 1] into size() portions of almost equal size

static std::pair<std::int64_t, std::int64_t> local_range(MPI_Comm comm, int process, std::int64_t N)

Return local range for given process, splitting [0, N - 1] into size() portions of almost equal size

static std::pair<std::int64_t, std::int64_t> compute_local_range(int process, std::int64_t N, int size)

Return local range for given process, splitting [0, N - 1] into size() portions of almost equal size

static unsigned int index_owner(MPI_Comm comm, std::size_t index, std::size_t N)

Return which process owns index (inverse of local_range)

static MPI_Op MPI_AVG()

Return average reduction operation; recognized by all_reduce(MPI_Comm, Table&, MPI_Op)