28#define TIMPI_LOG_SCOPE(f,c)
214 _max_tag = std::numeric_limits<int>::max();
227 if (this->
size() > 1)
240 if (this->
size() > 1)
288#ifndef TIMPI_HAVE_MPI
307 const unsigned char rnew =
r;
308 return this->
verify(rnew);
316 const unsigned char rnew = *
r;
320 const unsigned char *
rptr =
nullptr;
327 if (this->
size() > 1)
331 std::vector<short int>
temp;
temp.reserve(
r.size());
332 for (std::size_t
i=0;
i !=
r.size(); ++
i)
334 return this->
verify(temp);
342 if (this->
size() > 1)
344 std::size_t
rsize =
r ?
r->size() : 0;
358 for (std::size_t
i=0;
i !=
rsize; ++
i)
362 std::vector<short int> *
ptemp =
r ? &
temp:
nullptr;
372 if (this->
size() > 1)
376 unsigned int temp =
r;
380 OpFunction<unsigned int>::min(),
388 unsigned int &
min_id)
const
390 if (this->
size() > 1)
403 OpFunction<int>::min_location(), this->
get()));
414 if (this->
size() > 1)
418 unsigned int temp =
r;
422 OpFunction<unsigned int>::max(),
430 unsigned int &
max_id)
const
432 if (this->
size() > 1)
445 OpFunction<int>::max_location(),
458 if (
st ==
"sendreceive")
460 else if (
st ==
"alltoall")
462 else if (
st !=
"nbx")
Encapsulates the MPI_Comm object.
void max(const T &r, T &o, Request &req) const
Non-blocking maximum of the local value r into o with the request req.
SendMode send_mode() const
Gets the user-requested SendMode.
processor_id_type size() const
void maxloc(T &r, unsigned int &max_id) const
Take a local variable and replace it with the maximum of it's values on all processors,...
MessageTag get_unique_tag(int tagvalue=MessageTag::invalid_tag) const
Get a tag that is unique to this Communicator.
void split(int color, int key, Communicator &target) const
status probe(const unsigned int src_processor_id, const MessageTag &tag=any_tag) const
Blocking message probe.
Communicator()
Default Constructor.
void clear()
Free and reset this communicator.
processor_id_type rank() const
void barrier() const
Pause execution until all processors reach a certain point.
void reference_unique_tag(int tagvalue) const
Reference an already-acquired tag, so that we know it will be dereferenced multiple times before we c...
Communicator & operator=(const Communicator &)=delete
timpi_pure bool semiverify(const T *r) const
Check whether a local pointer points to the same value on all processors where it is not null,...
void min(const T &r, T &o, Request &req) const
Non-blocking minimum of the local value r into o with the request req.
timpi_pure bool verify(const T &r) const
Check whether a local variable has the same value on all processors, returning true if it does or fal...
void send_mode(const SendMode sm)
Explicitly sets the SendMode type used for send operations.
communicator _communicator
void duplicate(const Communicator &comm)
void minloc(T &r, unsigned int &min_id) const
Take a local variable and replace it with the minimum of it's values on all processors,...
void dereference_unique_tag(int tagvalue) const
Dereference an already-acquired tag, and see if we can re-release it.
SyncType
What algorithm to use for parallel synchronization?
void assign(const communicator &comm)
Utility function for setting our member variables from an MPI communicator.
void sync_type(const SyncType st)
Explicitly sets the SyncType used for sync operations.
void nonblocking_barrier(Request &req) const
Start a barrier that doesn't block.
SyncType sync_type() const
Gets the user-requested SyncType.
void split_by_type(int split_type, int key, info i, Communicator &target) const
std::map< int, unsigned int > used_tag_values
Encapsulates the MPI tag integers.
static const int invalid_tag
Invalid tag, to allow for default construction.
Encapsulates the MPI_Request.
MPI_Info info
Info object used by some MPI-3 methods.
DIE A HORRIBLE DEATH HERE typedef MPI_Comm communicator
Communicator object for talking with subsets of processors.
const unsigned int any_source
Processor id meaning "Accept from any source".
Tnew cast_int(Told oldvar)
void ignore(const Args &...)