MPI_Ireduce is the non-blocking version of MPI_Reduce; it is the means by which MPI processes can apply a reduction calculation. The values sent by the MPI processes will be combined using the reduction operation given and the result will be stored on the MPI process specified as root. Unlike MPI_Reduce however, MPI_Ireduce returns immediately, before the reduction is guaranteed to be complete. The user must therefore explicitly wait (MPI_Wait) or test (MPI_Test) for the completion of MPI_Ireduce before safely reusing the buffers passed. Also, MPI_Ireduce 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 are MPI_Reduce, MPI_Allreduce, MPI_Iallreduce. Refer to MPI_Reduce to see the blocking counterpart of MPI_Ireduce.