Definition
MPI_Ireduce_scatter_block is the means by which MPI processes can apply a reduction followed by a scatter, which may trigger extra optimisations compared to manually issuing an MPI_Reduce followed by an MPI_Scatter. Unlike its blocking counterpart MPI_Reduce_scatter_block, MPI_Ireduce_scatter_block will not block until the operation completed. In other words, when MPI_Ireduce_scatter_block returns, the buffers passed may not have been exchanged yet, and it must be considered unsafe to reuse the buffers passed. The user must therefore check for completion with MPI_Wait or MPI_Test before safely reusing the buffer passed. Also, unlike MPI_Ireduce_scatter, MPI_Ireduce_scatter_block restricts all blocks to be of the same length. MPI_Ireduce_scatter_block is a collective operation; it must be called by every MPI process in the communicator given. Predefined operations are: MPI_MIN, MPI_MAX, MPI_BOR, MPI_BXOR, MPI_LOR, MPI_LXOR, MPI_BAND, MPI_LAND, MPI_SUM and MPI_PROD. Other variants of MPI_Ireduce_scatter_block are MPI_Reduce_scatter, MPI_Reduce_scatter_block, MPI_Ireduce_scatter. Refer to MPI_Reduce_scatter_block to see the blocking counterpart of MPI_Ireduce_scatter_block.
int MPI_Ireduce_scatter_block(const void* send_buffer,
void* receive_buffer,
int count,
MPI_Datatype datatype,
MPI_Op operation,
MPI_Comm communicator,
MPI_Request* request);