MPI_Iallreduce is the non-blocking version of MPI_Allreduce; it is the means by which MPI processes can apply a reduction calculation and make the reduction result available to all MPI processes involved. Unlike MPI_Allreduce however, MPI_Iallreduce 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_Iallreduce before safely reusing the buffers passed. Also, MPI_Iallreduce 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_Iallreduce are MPI_Allreduce, MPI_Reduce, MPI_Ireduce. Refer to MPI_Allreduce to see the blocking counterpart of MPI_Iallreduce.