G+Smo
24.08.0
Geometry + Simulation Modules
|
A serial communication class.
This communicator can be used if no MPI is available or one wants to run sequentially even if MPI is available and used.
Public Member Functions | |
gsSerialComm | duplicate () const |
Duplicates the communicator. | |
int | rank () const |
return rank of process, i.e. zero More... | |
gsSerialComm | split (int, int) const |
Splits the communicator into two. | |
Static Public Member Functions | |
template<typename T > | |
static int | allgather (T *sbuf, int count, T *rbuf) |
Gathers data from all tasks and distribute it to all. More... | |
template<typename T > | |
static int | allgatherv (T *in, int sendlen, T *out, int *recvlen, int *displ) |
Gathers data of variable length from all tasks and distribute it to all. More... | |
template<typename BinaryFunction , typename Type > | |
static int | allreduce (Type *inout, int len) |
Compute something over all processes for each component of an array and return the result in every process. More... | |
template<typename BinaryFunction , typename Type > | |
static void | allreduce (Type *in, Type *out, int len) |
Compute something over all processes for each component of an array and return the result in every process. More... | |
static int | barrier () |
Wait until all processes have arrived at this point in the program. | |
template<typename T > | |
static int | broadcast (T *, int, int) |
Distribute an array from the process with rank root to all other processes. | |
static int | compare (gsSerialComm) |
Compares two communicators. | |
template<typename T > | |
static int | gather (T *in, T *out, int len, int) |
Gather arrays on root task. More... | |
template<typename T > | |
static int | gatherv (T *in, int sendlen, T *out, int *recvlen, int *displ, int root) |
Gather arrays of variable size on root task. More... | |
static int | group (const MPI_Group *) |
Returns the group of the communicator. | |
static gsSerialStatus | iprobe (int, int *, int=0) |
Query the status from a source process with a defined tag (non-blocking) More... | |
template<typename T > | |
static int | irecv (T *, int, int, MPI_Request, int=0) |
Receives data from a source process with a defined tag (non-blocking) More... | |
template<typename T > | |
static int | isend (T *, int, int, MPI_Request, int=0) |
Sends data to a destination process with a defined tag (non-blocking) More... | |
template<typename T > | |
static T | max (T &in) |
Compute the maximum of the argument over all processes and return the result in every process. Assumes that T has an operator<. | |
template<typename T > | |
static int | max (T *inout, int len) |
Compute the maximum over all processes for each component of an array and return the result in every process. Assumes that T has an operator<. | |
template<typename T > | |
static T | min (T &in) |
Compute the minimum of the argument over all processes and return the result in every process. Assumes that T has an operator<. | |
template<typename T > | |
static int | min (T *inout, int len) |
Compute the minimum over all processes for each component of an array and return the result in every process. Assumes that T has an operator<. | |
static std::string | name () |
Returns the name of the communicator. | |
static gsSerialStatus | probe (int, int=0) |
Query the status from a source process with a defined tag (blocking) More... | |
template<typename T > | |
static T | prod (T &in) |
Compute the product of the argument over all processes and return the result in every process. Assumes that T has an operator*. | |
template<typename T > | |
static int | prod (T *inout, int len) |
Compute the product over all processes for each component of an array and return the result in every process. Assumes that T has an operator*. | |
template<typename T > | |
static int | recv (T *, int, int, int=0, const void *=NULL) |
Receives data from a source process with a defined tag (blocking) More... | |
template<typename T > | |
static int | scatter (T *send, T *recv, int len, int root) |
Scatter array from a root to all other task. More... | |
template<typename T > | |
static int | scatterv (T *send, int *sendlen, int *displ, T *recv, int recvlen, int root) |
Scatter arrays of variable length from a root to all other tasks. More... | |
template<typename T > | |
static int | send (T *, int, int, int=0) |
Sends data to a destination process with a defined tag (blocking) More... | |
static int | size () |
return rank of process, i.e. one | |
template<typename T > | |
static T | sum (T &in) |
Compute the sum of the argument over all processes and return the result in every process. Assumes that T has an operator+. | |
template<typename T > | |
static int | sum (T *inout, int len) |
Compute the sum over all processes for each component of an array and return the result in every process. Assumes that T has an operator+. | |
|
inlinestatic |
Gathers data from all tasks and distribute it to all.
The block of data sent from the jth process is received by every process and placed in the jth block of the buffer recvbuf.
[in] | sbuf | The buffer with the data to send. Has to be the same for each task. |
[in] | count | The number of elements to send by any process. |
[out] | rbuf | The receive buffer for the data. Has to be of size notasks*count, with notasks being the number of tasks in the communicator. |
|
inlinestatic |
Gathers data of variable length from all tasks and distribute it to all.
The block of data sent from the jth process is received by every process and placed in the jth block of the buffer out.
[in] | in | The send buffer with the data to send. |
[in] | sendlen | The number of elements to send on each task. |
[out] | out | The buffer to store the received data in. |
[in] | recvlen | An array with size equal to the number of processes containing the number of elements to recieve from process i at position i, i.e. the number that is passed as sendlen argument to this function in process i. |
[in] | displ | An array with size equal to the number of processes. Data recieved from process i will be written starting at out+displ[i]. |
|
inlinestatic |
Compute something over all processes for each component of an array and return the result in every process.
The template parameter BinaryFunction is the type of the binary function to use for the computation
inout | The array to compute on. |
len | The number of components in the array |
|
inlinestatic |
Compute something over all processes for each component of an array and return the result in every process.
The template parameter BinaryFunction is the type of the binary function to use for the computation
in | The array to compute on. |
out | The array to store the results in. |
len | The number of components in the array |
|
inlinestatic |
Gather arrays on root task.
Each process sends its in array of length len to the root process (including the root itself). In the root process these arrays are stored in rank order in the out array which must have size len * number of processes.
[in] | in | The send buffer with the data to send. |
[out] | out | The buffer to store the received data in. Might have length zero on non-root tasks. |
[in] | len | The number of elements to send on each task. [in]root The root task that gathers the data. |
|
inlinestatic |
Gather arrays of variable size on root task.
Each process sends its in array of length sendlen to the root process (including the root itself). In the root process these arrays are stored in rank order in the out array.
[in] | in | The send buffer with the data to be sent |
[in] | sendlen | The number of elements to send on each task |
[out] | out | The buffer to store the received data in. May have length zero on non-root tasks. |
[in] | recvlen | An array with size equal to the number of processes containing the number of elements to receive from process i at position i, i.e. the number that is passed as sendlen argument to this function in process i. May have length zero on non-root tasks. |
[out] | displ | An array with size equal to the number of processes. Data received from process i will be written starting at out+displ[i] on the root process. May have length zero on non-root tasks. |
[in] | root | The root task that gathers the data. |
|
inlinestatic |
Query the status from a source process with a defined tag (non-blocking)
One process queries the status of receiving data from the source process source. The argument tag specifies the message ID.
[in] | source | The rank of the process which sended the message |
[out] | flag | True if a message with the specified source, tag, and communicator is available (logical) |
[in] | tag | Specifies the message ID |
|
inlinestatic |
Receives data from a source process with a defined tag (non-blocking)
One process receives data of length len from the source process source. The argument tag specifies the message ID.
[out] | out | The buffer to store the received data in |
[in] | len | The number of elements which will be received |
[in] | source | The rank of the process which sended the message |
[out] | request | communication request |
[in] | tag | Specifies the message ID |
|
inlinestatic |
Sends data to a destination process with a defined tag (non-blocking)
One process sends data of length len to the destination process dest. The argument tag specifies the message ID.
[in] | in | The send buffer with the data to send |
[in] | len | The number of elements which will be sent |
[in] | dest | The rank of the process which should receive the message |
[out] | request | communication request |
[in] | tag | Specifies the message ID |
|
inlinestatic |
Query the status from a source process with a defined tag (blocking)
One process queries the status of receiving data from the source process source. The argument tag specifies the message ID.
[in] | source | The rank of the process which sended the message |
[in] | tag | Specifies the message ID |
|
inline |
return rank of process, i.e. zero
This function is intentionally left non-static to avoid compiler warnings of unused object.
|
inlinestatic |
Receives data from a source process with a defined tag (blocking)
One process receives data of length len from the source process source. The argument tag specifies the message ID.
[out] | out | The buffer to store the received data in |
[in] | len | The number of elements which will be received |
[in] | source | The rank of the process which sended the message |
[in] | tag | Specifies the message ID |
|
inlinestatic |
Scatter array from a root to all other task.
The root process sends the elements with index from k*len to (k+1)*len-1 in its array to task k, which stores it at index 0 to len-1.
[in] | send | The array to scatter. Might have length zero on non-root tasks. |
[out] | recv | The buffer to store the received data in. Upon completion of the method each task will have same data stored there as the one in send buffer of the root task before. |
[in] | len | The number of elements in the recv buffer. |
[in] | root | The root task that gathers the data. |
|
inlinestatic |
Scatter arrays of variable length from a root to all other tasks.
The root process sends the elements with index from send+displ[k] to send+displ[k]-1 in * its array to task k, which stores it at index 0 to recvlen-1.
[in] | send | The array to scatter. May have length zero on non-root tasks. |
[in] | sendlen | An array with size equal to the number of processes containing the number of elements to scatter to process i at position i, i.e. the number that is passed as recvlen argument to this function in process i. |
[in] | displ | An array with size equal to the number of processes. Data scattered to process i will be read starting at send+displ[i] on root the process. |
[out] | recv | The buffer to store the received data in. Upon completion of the method each task will have the same data stored there as the one in send buffer of the root task before. |
[in] | recvlen | The number of elements in the recv buffer. |
[in] | root | The root task that gathers the data. |
|
inlinestatic |
Sends data to a destination process with a defined tag (blocking)
One process sends data of length len to the destination process dest. The argument tag specifies the message ID.
[in] | in | The send buffer with the data to send |
[in] | len | The number of elements which will be sent |
[in] | dest | The rank of the process which should receive the message |
[in] | tag | Specifies the message ID |