MPIX_Barrier_init(3)

πŸ“¦
version 4.1.6 Β· 3 versions
, in ubuntu noble

πŸ’– MPIX_Barrier_init(3) β€” Open MPI πŸ’–

okay bestie, gather round, because this is the Open MPI page for MPIX_Barrier_init(3) and its whole collective-init bestie squad 🫢 no cap, it's a big one, so we're doing this in parts. part 1 is right here, and it's giving iconic reference material. let's go πŸ’…


✨ NAME ✨

MPIX_Allgather_init, MPIX_Allgatherv_init, MPIX_Allreduce_init, MPIX_Alltoall_init, MPIX_Alltoallv_init, MPIX_Alltoallw_init, MPIX_Barrier_init, MPIX_Bcast_init, MPIX_Exscan_init, MPIX_Gather_init, MPIX_Gatherv_init, MPIX_Reduce_init, MPIX_Reduce_scatter_init, MPIX_Reduce_scatter_block_init, MPIX_Scan_init, MPIX_Scatter_init, MPIX_Scatterv_init, MPIX_Neighbor_allgather_init, MPIX_Neighbor_allgatherv_init, MPIX_Neighbor_alltoall_init, MPIX_Neighbor_alltoallv_init, MPIX_Neighbor_alltoallw_init β€” Builds a handle for a collective communication or neighborhood collective communication 🌈

fr fr, that's the whole roster. one giant friend group of functions whose entire job is building a handle. πŸŽ€

🌸 SYNTAX 🌸

C Syntax πŸ’»

first up, the includes. yes, both of them, don't skip the second one bestie:

#include <mpi.h>
#include <mpi-ext.h>

and now, the whole squad, one by one, exactly as written ✨

int MPIX_Allgather_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, int recvcount,
     MPI_Datatype recvtype, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Allgatherv_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
     const int displs[], MPI_Datatype recvtype, MPI_Comm comm,
     MPI_Info info, MPI_Request *request)
int MPIX_Allreduce_init(const void *sendbuf, void *recvbuf, int count,
     MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Alltoall_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, int recvcount,
     MPI_Datatype recvtype, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Alltoallv_init(const void *sendbuf, const int sendcounts[],
     const int sdispls[], MPI_Datatype sendtype, void *recvbuf,
     const int recvcounts[], const int rdispls[], MPI_Datatype recvtype,
     MPI_Comm comm, MPI_Info info, MPI_Request *request)
int MPIX_Alltoallw_init(const void *sendbuf, const int sendcounts[],
     const int sdispls[], const MPI_Datatype sendtypes[], void *recvbuf,
     const int recvcounts[], const int rdispls[],
     const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Barrier_init(MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
the main character of this page right here πŸ‘‘ β€” yes, MPIX_Barrier_init only takes comm, info, and request. that's it. minimal. slay.
int MPIX_Bcast_init(void *buffer, int count, MPI_Datatype datatype,
     int root, MPI_Comm comm, MPI_Info info, MPI_Request *request)
int MPIX_Exscan_init(const void *sendbuf, void *recvbuf, int count,
     MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Gather_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, int recvcount,
     MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Gatherv_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
     const int displs[], MPI_Datatype recvtype, int root, MPI_Comm comm,
     MPI_Info info, MPI_Request *request)
int MPIX_Reduce_init(const void *sendbuf, void *recvbuf, int count,
     MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm,
     MPI_Info info, MPI_Request *request)
int MPIX_Reduce_scatter_init(const void *sendbuf, void *recvbuf,
     const int recvcounts[], MPI_Datatype datatype, MPI_Op op,
     MPI_Comm comm, MPI_Info info, MPI_Request *request)
int MPIX_Reduce_scatter_block_init(const void *sendbuf, void *recvbuf,
     int recvcount, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm,
     MPI_Info info, MPI_Request *request)
int MPIX_Scan_init(const void *sendbuf, void *recvbuf, int count,
     MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Scatter_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, int recvcount,
     MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Scatterv_init(const void *sendbuf, const int sendcounts[],
     const int displs[], MPI_Datatype sendtype, void *recvbuf,
     int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
     MPI_Info info, MPI_Request *request)
int MPIX_Neighbor_allgather_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, int recvcount,
     MPI_Datatype recvtype, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Neighbor_allgatherv_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
     const int displs[], MPI_Datatype recvtype, MPI_Comm comm,
     MPI_Info info, MPI_Request *request)
int MPIX_Neighbor_alltoall_init(const void *sendbuf, int sendcount,
     MPI_Datatype sendtype, void *recvbuf, int recvcount,
     MPI_Datatype recvtype, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Neighbor_alltoallv_init(const void *sendbuf,
     const int sendcounts[], const int sdispls[], MPI_Datatype sendtype,
     void *recvbuf, const int recvcounts[], const int rdispls[],
     MPI_Datatype recvtype, MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
int MPIX_Neighbor_alltoallw_init(const void *sendbuf,
     const int sendcounts[], const MPI_Aint sdispls[],
     const MPI_Datatype sendtypes[], void *recvbuf,
     const int recvcounts[], const MPI_Aint rdispls[],
     const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Info info,
     MPI_Request *request)
πŸ¦‹ heads up bestie, peep the MPI_Aint in the w variants of the neighbor calls β€” MPIX_Neighbor_alltoallw_init takes const MPI_Aint sdispls[] and const MPI_Aint rdispls[], not plain int. iykyk. don't mix them up πŸ™ˆ

okay that's the end of part 1 β€” the roster and the syntax are fully documented, no details skipped, no cap. πŸ’œ more parts coming, so don't go anywhere, bestie πŸŽ€

πŸ’– Fortran Syntax πŸ’–

okay bestie, the Fortran interface is giving classic. you got your USE MPI and USE MPI_EXT, or if you're feeling vintage, the INCLUDE lines. then boom, all the init functions. they're all about that nonblocking collective life. here's the whole squad:

       USE MPI
       USE MPI_EXT
       ! or the older form: INCLUDE 'mpif.h'; INCLUDE 'mpif-ext.h'
       MPIX_ALLGATHER_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
                 RECVTYPE, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, INFO
            INTEGER   REQUEST, IERROR

       MPIX_ALLGATHERV_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,
                 RECVCOUNT, DISPLS, RECVTYPE, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNT(*)
            INTEGER   DISPLS(*), RECVTYPE, COMM, INFO, REQUEST, IERROR

       MPIX_ALLREDUCE_INIT(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, INFO,
                 REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   COUNT, DATATYPE, OP, COMM, INFO, REQUEST, IERROR

       MPIX_ALLTOALL_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
                 RECVTYPE, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE
            INTEGER   COMM, INFO, REQUEST, IERROR

       MPIX_ALLTOALLV_INIT(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPE,
                 RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE, COMM, INFO, REQUEST,
                 IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNTS(*), SDISPLS(*), SENDTYPE
            INTEGER   RECVCOUNTS(*), RDISPLS(*), RECVTYPE
            INTEGER   COMM, INFO, REQUEST, IERROR

       MPIX_ALLTOALLW_INIT(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPES,
                 RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPES, COMM, INFO, REQUEST,
                 IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNTS(*), SDISPLS(*), SENDTYPES(*)
            INTEGER   RECVCOUNTS(*), RDISPLS(*), RECVTYPES(*)
            INTEGER   COMM, INFO, REQUEST, IERROR

       MPIX_BARRIER_INIT(COMM, INFO, REQUEST, IERROR)
            INTEGER   COMM, INFO, REQUEST, IERROR

       MPIX_BCAST_INIT(BUFFER, COUNT, DATATYPE, ROOT, COMM, INFO, REQUEST,
                 IERROR)
            <type>    BUFFER(*)
            INTEGER   COUNT, DATATYPE, ROOT, COMM, INFO, REQUEST, IERROR

       MPIX_EXSCAN_INIT(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, INFO,
                 REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   COUNT, DATATYPE, OP, COMM, INFO, REQUEST, IERROR

       MPIX_GATHER_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
                 RECVTYPE, ROOT, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT
            INTEGER   COMM, INFO, REQUEST, IERROR

       MPIX_GATHERV_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS,
                 DISPLS, RECVTYPE, ROOT, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*)
            INTEGER   RECVTYPE, ROOT, COMM, INFO, REQUEST, IERROR

       MPIX_REDUCE_INIT(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM,
                 INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   COUNT, DATATYPE, OP, ROOT, COMM, INFO, REQUEST, IERROR

       MPIX_REDUCE_SCATTER_INIT(SENDBUF, RECVBUF, RECVCOUNTS, DATATYPE, OP,
                 COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   RECVCOUNTS(*), DATATYPE, OP, COMM, INFO, REQUEST, IERROR

       MPIX_REDUCE_SCATTER_BLOCK_INIT(SENDBUF, RECVBUF, RECVCOUNT, DATATYPE,
                 OP, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   RECVCOUNT, DATATYPE, OP, COMM, INFO, REQUEST, IERROR

       MPIX_SCAN_INIT(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, INFO,
                 REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   COUNT, DATATYPE, OP, COMM, INFO, REQUEST, IERROR

       MPIX_SCATTER_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
                 RECVTYPE, ROOT, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT
            INTEGER   COMM, INFO, REQUEST, IERROR

       MPIX_SCATTERV_INIT(SENDBUF, SENDCOUNTS, DISPLS, SENDTYPE, RECVBUF,
                 RECVCOUNT, RECVTYPE, ROOT, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNTS(*), DISPLS(*), SENDTYPE
            INTEGER   RECVCOUNT, RECVTYPE, ROOT, COMM, INFO, REQUEST, IERROR

       MPIX_NEIGHBOR_ALLGATHER_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,
                 RECVCOUNT, RECVTYPE, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM,
            INTEGER   INFO, REQUEST, IERROR

       MPIX_NEIGHBOR_ALLGATHERV_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,
                 RECVCOUNT, DISPLS, RECVTYPE, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNT(*),
            INTEGER   DISPLS(*), RECVTYPE, COMM, INFO, REQUEST, IERROR

       MPIX_NEIGHBOR_ALLTOALL_INIT(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,
                 RECVCOUNT, RECVTYPE, COMM, INFO, REQUEST, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE
            INTEGER   COMM, INFO, REQUEST, IERROR

       MPIX_NEIGHBOR_ALLTOALLV_INIT(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPE,
                 RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE, COMM, INFO, REQUEST,
                 IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNTS(*), SDISPLS(*), SENDTYPE
            INTEGER   RECVCOUNTS(*), RDISPLS(*), RECVTYPE
            INTEGER   COMM, INFO, REQUEST, IERROR

       MPIX_NEIGHBOR_ALLTOALLW_INIT(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPES,
                 RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPES, COMM, INFO, REQUEST,
                 IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNTS(*), SENDTYPES(*)
            INTEGER   RECVCOUNTS(*), RECVTYPES(*)
            INTEGER(KIND=MPI_ADDRESS_KIND) SDISPLS(*), RDISPLS(*)
            INTEGER   COMM, INFO, REQUEST, IERROR

that's a lot of init functions, bestie. it's giving "I have options" energy. ✨


🌸 Fortran 2008 Syntax 🌸

now for the modern Fortran 2008 tea. USE mpi_f08 and USE mpi_f08_ext, and then the same init functions but with TYPE(MPI_*) and ASYNCHRONOUS attributes. it's lowkey iconic. here's what we got:

       USE mpi_f08
       USE mpi_f08_ext
       MPIX_Allgather_init(sendbuf, sendcount, sendtype, recvbuf, recvcount,
                 recvtype, comm, info, request, ierror)
            TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
            TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
            INTEGER, INTENT(IN) :: sendcount, recvcount
            TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

       MPIX_Allgatherv_init(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
                 displs, recvtype, comm, info, request, ierror)
            TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
            TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
            INTEGER, INTENT(IN) :: sendcount
            INTEGER, INTENT(IN), ASYNCHRONOUS :: recvcounts(*), displs(*)
            TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

       MPIX_Allreduce_init(sendbuf, recvbuf, count, datatype, op, comm, info,
                 request, ierror)
            TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
            TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
            INTEGER, INTENT(IN) :: count
            TYPE(MPI_Datatype), INTENT(IN) :: datatype
            TYPE(MPI_Op), INTENT(IN) :: op
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

       MPIX_Alltoall_init(sendbuf, sendcount, sendtype, recvbuf, recvcount,
                 recvtype, comm, info, request, ierror)
            TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
            TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
            INTEGER, INTENT(IN) :: sendcount, recvcount
            TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

       MPIX_Alltoallv_init(sendbuf, sendcounts, sdispls, sendtype, recvbuf,
                 recvcounts, rdispls, recvtype, comm, info, request, ierror)
            TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
            TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
            INTEGER, INTENT(IN), ASYNCHRONOUS :: sendcounts(*), sdispls(*),
            recvcounts(*), rdispls(*)
            TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

       MPIX_Alltoallw_init(sendbuf, sendcounts, sdispls, sendtypes, recvbuf,
                 recvcounts, rdispls, recvtypes, comm, info, request, ierror)
            TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
            TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
            INTEGER, INTENT(IN), ASYNCHRONOUS :: sendcounts(*), sdispls(*),
            recvcounts(*), rdispls(*)
            TYPE(MPI_Datatype), INTENT(IN), ASYNCHRONOUS :: sendtypes(*),
            recvtypes(*)
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

       MPIX_Barrier_init(comm, info, request, ierror)
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

       MPIX_Bcast_init(buffer, count, datatype, root, comm, info, request,
                 ierror)
            TYPE(*), DIMENSION(..), ASYNCHRONOUS :: buffer
            INTEGER, INTENT(IN) :: count, root
            TYPE(MPI_Datatype), INTENT(IN) :: datatype
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

       MPIX_Exscan_init(sendbuf, recvbuf, count, datatype, op, comm, info,
                 request, ierror)
            TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
            TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
            INTEGER, INTENT(IN) :: count
            TYPE(MPI_Datatype), INTENT(IN) :: datatype
            TYPE(MPI_Op), INTENT(IN) :: op
            TYPE(MPI_Comm), INTENT(IN) :: comm
            TYPE(MPI_Info), INTENT(IN) :: info
            TYPE(MPI_Request), INTENT(OUT) :: request
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

and that's the Fortran 2008 glow-up πŸ’… stay tuned for more, bestie.

MPIX_Gather_init(sendbuf, sendcount, sendtype, recvbuf,
          recvcount, recvtype, root, comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: sendcount, recvcount, root
      TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Gatherv_init(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
          displs, recvtype, root, comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: sendcount, root
      INTEGER, INTENT(IN), ASYNCHRONOUS :: recvcounts(*), displs(*)
      TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Reduce_init(sendbuf, recvbuf, count, datatype, op, root, comm,
          info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: count, root
      TYPE(MPI_Datatype), INTENT(IN) :: datatype
      TYPE(MPI_Op), INTENT(IN) :: op
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Reduce_scatter_init(sendbuf, recvbuf, recvcounts, datatype, op,
          comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN), ASYNCHRONOUS :: recvcounts(*)
      TYPE(MPI_Datatype), INTENT(IN) :: datatype
      TYPE(MPI_Op), INTENT(IN) :: op
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Reduce_scatter_block_init(sendbuf, recvbuf, recvcount, datatype,
          op, comm, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: recvcount
      TYPE(MPI_Datatype), INTENT(IN) :: datatype
      TYPE(MPI_Op), INTENT(IN) :: op
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Reduce_scatter_block_init(sendbuf, recvbuf, recvcount, datatype, op,
          comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: recvcount
      TYPE(MPI_Datatype), INTENT(IN) :: datatype
      TYPE(MPI_Op), INTENT(IN) :: op
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Scan_init(sendbuf, recvbuf, count, datatype, op, comm, info,
          request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: count
      TYPE(MPI_Datatype), INTENT(IN) :: datatype
      TYPE(MPI_Op), INTENT(IN) :: op
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Scatter_init(sendbuf, sendcount, sendtype, recvbuf, recvcount,
          recvtype, root, comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: sendcount, recvcount, root
      TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Scatterv_init(sendbuf, sendcounts, displs, sendtype, recvbuf,
          recvcount, recvtype, root, comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN), ASYNCHRONOUS :: sendcounts(*), displs(*)
      INTEGER, INTENT(IN) :: recvcount, root
      TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Neighbor_allgather_init(sendbuf, sendcount, sendtype, recvbuf,
          recvcount, recvtype, comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: sendcount, recvcount
      TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Neighbor_allgatherv_init(sendbuf, sendcount, sendtype, recvbuf,
          recvcounts, displs, recvtype, comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: sendcount
      INTEGER, INTENT(IN), ASYNCHRONOUS :: recvcounts(*), displs(*)
      TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Neighbor_alltoall_init(sendbuf, sendcount, sendtype, recvbuf,
          recvcount, recvtype, comm, info, request, ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN) :: sendcount, recvcount
      TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Neighbor_alltoallv_init(sendbuf, sendcounts, sdispls, sendtype,
          recvbuf, recvcounts, rdispls, recvtype, comm, info, request,
          ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN), ASYNCHRONOUS :: sendcounts(*), sdispls(*),
      recvcounts(*), rdispls(*)
      TYPE(MPI_Datatype), INTENT(IN) :: sendtype, recvtype
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPIX_Neighbor_alltoallw_init(sendbuf, sendcounts, sdispls, sendtypes,
          recvbuf, recvcounts, rdispls, recvtypes, comm, info, request,
          ierror)
      TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: sendbuf
      TYPE(*), DIMENSION(..), ASYNCHRONOUS :: recvbuf
      INTEGER, INTENT(IN), ASYNCHRONOUS :: sendcounts(*), recvcounts(*)
      INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN), ASYNCHRONOUS ::
      sdispls(*), rdispls(*)
      TYPE(MPI_Datatype), INTENT(IN), ASYNCHRONOUS :: sendtypes(*),
      recvtypes(*)
      TYPE(MPI_Comm), INTENT(IN) :: comm
      TYPE(MPI_Info), INTENT(IN) :: info
      TYPE(MPI_Request), INTENT(OUT) :: request
      INTEGER, OPTIONAL, INTENT(OUT) :: ierror

✨ DESCRIPTION ✨

okay bestie, deep breath, because this is the whole point of the page 🫢

This builds you a persistent communication request for a collective operation or a neighborhood collective operation. That's it. That's the girl. πŸ’…

So as of Nov. 2018, the whole persistent-collective-communication-operations thing β€” and the persistent collective neighborhood communication operations too β€” is planned to be included in the next MPI Standard after MPI-3.1. Planned! Like, it's on the vision board. πŸ“Œ

https://github.com/mpi-forum/mpi-issues/issues/25

Open MPI implements the 2018 Draft Specification of the MPI standard, which lives at this URL right here:

https://www.mpi-forum.org/docs/drafts/mpi-2018-draft-report.pdf
⚠️ and here's the part you actually need to clock: the interface may still change in the standard. That's the whole reason the prefix is MPIX_ instead of MPI_ for these request creation routines β€” the X is literally the "this could still move, don't @ me" flag. 🚩

To start, complete, and free the request you just created, you use the usual MPI routines β€” MPI_Start etc. Nothing new to learn there, you already ate that. πŸ‘‘

And listen, future versions of Open MPI are gonna switch to the MPI_ prefix and will not require the C header file mpi-ext.h, the Fortran modules mpi_ext and mpi_f08_ext, and the Fortran header file mpif-ext.h β€” but only once the MPI Standard that includes this feature is actually published. So like, glow-up pending. ✨


🌸 EXAMPLE 🌸

here's the vibe, look how clean:

MPI_Request req;
MPIX_Barrier_init(MPI_COMM_WORLD, MPI_INFO_NULL, &req);
MPI_Start(&req);
MPI_Wait(&req, MPI_STATUS_IGNORE);
MPI_Request_free(&req);

init it, start it, wait on it, free it. four lines and you're done, no cap. πŸŽ€


πŸ¦‹ SEE ALSO πŸ¦‹

  • MPI_Start
  • MPI_Startall
  • MPI_Request_free

and that's the whole page, bestie!! πŸ«ΆπŸ’– you just read version 4.1.6 of this man page, dated Sep 30, 2023 β€” shoutout to that little footer, iconic of it honestly. go forth and persist your collectives. slay. πŸ’…βœ¨πŸŒˆ

πŸ“¦ where this page comes from