Share via


MPI_Scatterv 函数

将来自一个成员的数据分散到组的所有成员中。 MPI_Scatterv 函数执行由 MPI_Gatherv 函数执行的操作的反函数。

语法

int MPIAPI MPI_Scatterv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *displs,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        int          root,
        MPI_Comm     comm
);

参数

  • sendbuf [in]
    指向缓冲区的指针,该缓冲区包含根进程要发送的数据。

    对于所有非根进程, 将忽略 sendbuf 参数。

    如果 comm 参数引用内部通信器,可以通过在根进程中指定 MPI_IN_PLACE 来指定就地选项。 将忽略 recvcountrecvtype 参数。 散点向量仍被视为包含 n 段,其中 n 是组大小;与根进程对应的段不会移动。

  • sendcounts [in]
    要发送到每个进程的元素数。 如果 sendcount[i] 为零,则该过程的消息的数据部分为空。

    对于所有非根进程, 将忽略 sendcount 参数。

  • displs [in]
    要发送到每个通信器进程的数据的位置。 数组中的每个位置都相对于 sendbuf 数组的相应元素。

    sendbufsendcountsdispls 参数数组中,每个数组的第 n个元素引用要发送到 n个通信器进程的数据。

    此参数仅在根进程中有效。

  • sendtype
    缓冲区中每个元素的 MPI 数据类型。

    对于所有非根进程, 将忽略 sendcount 参数。

  • recvbuf [out]
    指向缓冲区的指针,该缓冲区包含在每个进程中接收的数据。 缓冲区中元素的数量和数据类型在 recvcountrecvtype 参数中指定。

  • recvcount
    接收缓冲区中的元素数。 如果计数为零,则消息的数据部分为空。

  • recvtype
    接收缓冲区中元素的数据类型。

  • root
    指定通信器内发送进程中的排名。

  • comm
    MPI_Comm通信器句柄。

返回值

返回成功 时MPI_SUCCESS 。 否则,返回值为错误代码。

在 Fortran 中,返回值存储在 IERROR 参数中。

Fortran

    MPI_SCATTERV(SENDBUF, SENDCOUNT, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, DISPLS(*), RECVCOUNT(*), RECVTYPE, ROOT, COMM, IERROR

注解

MPI_Scatterv 函数通过允许将 sendcounts 数组中指定的不同数据计数发送到每个进程来扩展 MPI_Scatter 函数的功能。

计数、类型和位移的规范不应导致根上的任何位置多次读取。

所有函数参数在根进程中都很重要,只有 recvbufrecvcountrecvtyperootcomm 参数在其他进程中是重要的。 参数和 comm 参数在所有进程中都必须相同。

由 sendcount 指定的类型签名和根进程的 sendtype 参数必须与 recvcount 指定的类型签名和所有进程的 recvtype 参数相等。 因此,发送的数据量必须等于在任何进程对之间接收的数据量。 仍允许发送方和接收方之间的非重复类型映射。

如果 comm 是内部通信器,则结果与根执行 n 个发送操作 MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …)一样;并且每个进程都执行了一个接收 ,即 MPI_Recv(recvbuf, recvcount, recvtype, i,…)

如果 comm 参数引用对讲器,则调用涉及交互器中的所有进程,但包含一个组 A,用于定义根进程。 其他组 B 组中的所有进程在参数中设置相同的值,即组 A 中根进程的排名。根进程在参数中MPI_ROOT设置值。 组 A 中的所有其他进程在参数中MPI_PROC_NULL设置值。 数据从根进程广播到组 B 中的所有进程。组 B 中进程的 缓冲区 参数必须与根进程的 缓冲区 参数一致。

要求

产品

HPC Pack 2012 MS-MPI 可再发行程序包、HPC Pack 2008 R2 MS-MPI 可再发行程序包、HPC Pack 2008 MS-MPI 可再发行程序包或 HPC Pack 2008 客户端实用工具

标头

Mpi.h;Mpif.h

Msmpi.lib

DLL

Msmpi.dll

另请参阅

MPI 集合函数

MPI_Datatype

MPI_Gather

MPI_Gatherv

MPI_Scatter