IBM Books

MPI Subroutine Reference

MPE_IALLTOALLV, MPE_Ialltoallv

Purpose

Performs a nonblocking alltoallv operation.

C synopsis

#include <mpi.h>
int MPE_Ialltoallv(void* sendbuf,int *sendcounts,int *sdispls,
    MPI_Datatype sendtype,void* recvbuf,int *recvcounts,int *rdispls,
    MPI_Datatype recvtype,MPI_Comm comm,MPI_Request *request);

FORTRAN synopsis

include 'mpif.h' or use mpi
MPE_ALLTOALLV(CHOICE SENDBUF,INTEGER SENDCOUNTS(*),
    INTEGER SDISPLS(*),INTEGER SENDTYPE,CHOICE RECVBUF,
    INTEGER RECVCOUNTS(*),INTEGER RDISPLS(*),INTEGER RECVTYPE,
    INTEGER COMM,INTEGER REQUEST,INTEGER IERROR)

Parameters

sendbuf
is the starting address of the send buffer (choice) (IN)

sendcounts
integer array (of length group size) specifying the number of elements to send to each task (IN)

sdispls
integer array (of length group size). Entry j specifies the displacement relative to sendbuf from which to take the outgoing data destined for task j. (IN)

sendtype
is the datatype of the send buffer elements (handle) (IN)

recvbuf
is the address of the receive buffer (choice) (OUT)

recvcounts
integer array (of length group size) specifying the number of elements that can be received from each task (IN)

rdispls
integer array (of length group size). Entry i specifies the displacement relative to recvbuf at which to place the incoming data from task i. (IN)

recvtype
is the datatype of the receive buffer elements (handle) (IN)

comm
is the communicator (handle) (IN)

request
is the communication request (handle) (OUT)

IERROR
is the FORTRAN return code. It is always the last argument.

Description

This subroutine is a nonblocking version of MPI_ALLTOALLV. It performs the same function as MPI_ALLTOALLV, except that it returns a request handle that must be explicitly completed by using one of the MPI wait or test operations.

Notes

The MPE prefix used with this subroutine indicates that it is an IBM extension to the MPI standard and is not part of the standard itself. MPE routines are provided to enhance the function and the performance of user applications, but applications that use them will not be directly portable to other MPI implementations.

Nonblocking collective communication routines allow for increased efficiency and flexibility in some applications. Because these routines do not synchronize the participating tasks like blocking collective routines generally do, tasks running at different speeds do not waste time waiting for each other.

When it is expected that tasks will be reasonably synchronized, the blocking collective communication routines provided by standard MPI will commonly give better performance than the nonblocking versions.

The nonblocking collective routines can be used in conjunction with the MPI blocking collective routines and can be completed by any of the MPI wait or test functions. Use of MPI_CANCEL and MPI_REQUEST_FREE is not supported.

Applications using nonblocking collective calls often perform best when they run in interrupt mode.

The threads library has a limit of seven outstanding nonblocking collective calls. A nonblocking call is considered outstanding between the time the call is made and the time the wait is completed. This restriction does not apply to the signal library or to any call defined by the MPI standard.

When you use this subroutine in a threads application, make sure all collective operations on a particular communicator are started in the same order at each task. See IBM Parallel Environment for AIX: MPI Programming Guide for more information on programming with MPI in a threads environment.

Errors

Invalid count(s)
count < 0

Invalid datatype(s)

Type not committed

Invalid communicator

Invalid communicator type
must be intracommunicator

A send and receive have unequal message lengths

MPI_IN_PLACE not valid

MPI not initialized

MPI already finalized

Related information

MPI_ALLTOALLV


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]