Highly Efficient FFT for Exascale: HeFFTe v2.3
|
Functions | |
template<typename index > | |
ioboxes< index > | heffte::mpi::gather_boxes (box3d< index > const my_inbox, box3d< index > const my_outbox, MPI_Comm const comm) |
Gather all boxes across all ranks in the comm. More... | |
int | heffte::mpi::comm_rank (MPI_Comm const comm) |
Returns the rank of this process within the specified comm. More... | |
bool | heffte::mpi::world_rank (int rank) |
Returns true if this process has the me rank within the MPI_COMM_WORLD (useful for debugging). More... | |
int | heffte::mpi::world_rank () |
Returns the rank of this process within the MPI_COMM_WORLD (useful for debugging). More... | |
template<typename vector_like > | |
void | heffte::mpi::dump (int me, vector_like const &x, std::string const &message) |
Write the message and the data from the vector-like x, performed only on rank me (if positive), otherwise using all ranks. More... | |
int | heffte::mpi::comm_size (MPI_Comm const comm) |
Returns the size of the specified communicator. More... | |
MPI_Comm | heffte::mpi::new_comm_from_group (std::vector< int > const &ranks, MPI_Comm const comm) |
Creates a new sub-communicator from the provided processes in comm. More... | |
void | heffte::mpi::comm_free (MPI_Comm const comm) |
Calls free on the MPI comm. More... | |
template<typename scalar > | |
MPI_Datatype | heffte::mpi::type_from () |
Returns the MPI equivalent of the scalar C++ type. More... | |
template<> | |
MPI_Datatype | heffte::mpi::type_from< int > () |
Specialization to hand the int type. | |
template<> | |
MPI_Datatype | heffte::mpi::type_from< float > () |
Specialization to hand the float type. | |
template<> | |
MPI_Datatype | heffte::mpi::type_from< double > () |
Specialization to hand the double type. | |
template<> | |
MPI_Datatype | heffte::mpi::type_from< std::complex< float > > () |
Specialization to hand the single-precision complex type. | |
template<> | |
MPI_Datatype | heffte::mpi::type_from< std::complex< double > > () |
Specialization to hand the double-precision complex type. | |
HeFFTe is using the C-style of API for the message passing interface (MPI). A set of inline wrappers allow for easier inclusion into C++ methods which helps preserve const-correctness and simplifies variable initialization.
|
inline |
Gather all boxes across all ranks in the comm.
Constructs an ioboxes struct with input and output boxes collected from all ranks.
my_inbox | is the input box on this rank |
my_outbox | is the output box on this rank |
comm | is the communicator with all ranks |
Uses MPI_Allgather().
|
inline |
Returns the rank of this process within the specified comm.
comm | is an MPI communicator associated with the process. |
Uses MPI_Comm_rank().
Example:
as opposed to:
|
inline |
Returns true if this process has the me rank within the MPI_COMM_WORLD (useful for debugging).
rank | within the world communicator |
Useful for debugging, e.g., cout statements can be easily constrained to a single processor, e.g.,
|
inline |
Returns the rank of this process within the MPI_COMM_WORLD (useful for debugging).
Useful for debugging.
void heffte::mpi::dump | ( | int | me, |
vector_like const & | x, | ||
std::string const & | message | ||
) |
Write the message and the data from the vector-like x, performed only on rank me (if positive), otherwise using all ranks.
Very useful for debugging purposes, when a vector or vector-like object has to be inspected for a single MPI rank.
vector_like | is an object that can be used for ranged for-loop, e.g., std::vector or std::array |
me | the rank to write to cout |
x | is the data to be written out |
message | will be written on the line before x, helps identify what x should contain, e.g., result or reference data |
|
inline |
Returns the size of the specified communicator.
comm | is an MPI communicator associated with the process. |
Uses MPI_Comm_size().
|
inline |
Creates a new sub-communicator from the provided processes in comm.
ranks | is a list of ranks associated with the comm. |
comm | is an active communicator that holds all processes in the ranks. |
Uses MPI_Comm_group(), MPI_Group_incl(), MPI_Comm_create(), MPI_Group_free().
|
inline |
Calls free on the MPI comm.
comm | is the communicator to be deleted, cannot be used after this call. |
Uses MPI_Comm_free().
Note that the method would use const_cast() to pass the MPI_Comm (which is a pointer) to the delete method. This circumvents the C-style of API that doesn't respect the fact that deleting a const-pointer is an acceptable operation.
|
inline |
Returns the MPI equivalent of the scalar C++ type.
This template cannot be instantiated directly, only the specializations are useful. Direct instantiation indicates an unknown conversion from a C++ to an MPI type.
scalar | a C++ scalar type, e.g., float, double, std::complex<float>, etc. |