次の方法で共有


MPI_Alltoall関数

からデータを収集し、グループのすべてのメンバーにデータを分散します。 MPI_Alltoallは、MPI_Allgather関数の拡張機能です。 各プロセスは、各受信側に個別のデータを送信します。 プロセス i から送信される j番目のブロックは、プロセス j によって受信され、受信バッファーの i番目のブロックに配置されます。

構文

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

パラメーター

  • sendbuf [in]
    グループ内のすべてのプロセスに送信されるデータへのポインター。 バッファー内の要素の数値とデータ型は、 sendcount パラメーターと sendtype パラメーターで指定されます。

    comm パラメーターがコマンド内を参照している場合は、すべてのプロセスで MPI_IN_PLACE を指定することでインプレース オプションを指定できます。 sendcount パラメーターと sendtype パラメーターは無視されます。 各プロセスは、対応する受信バッファー要素にデータを入力します。 n番目のプロセスは、受信バッファーの n番目の要素にデータを送信します。

  • sendcount
    sendbuf パラメーターで指定されたバッファー内の要素の数。 sendcount が 0 の場合、メッセージのデータ部分は空です。

  • sendtype
    送信バッファー内の要素の MPI データ型。

  • recvbuf [out]
    各プロセスから受信したデータを含むバッファーへのポインター。 バッファー内の要素の数値とデータ型は、 recvcount パラメーターと recvtype パラメーターで指定されます。

  • recvcount
    受信バッファー内の要素の数。 カウントが 0 の場合、メッセージのデータ部分は空です。

  • recvtype
    受信バッファー内の要素の MPI データ型。

  • comm
    MPI_Comm コミュニケーター ハンドル。

戻り値

成功 したMPI_SUCCESS を返します。 それ以外の場合、戻り値はエラー コードです。

Fortran では、戻り値は IERROR パラメーターに格納されます。

Fortran

    MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

注釈

すべてのパラメーターは、すべてのプロセスで重要です。 comm パラメーターは、すべてのプロセスで同じである必要があります。

プロセスの sendcount パラメーターと sendtype パラメーターで指定される型シグネチャは、recvcount パラメーターと recvtype パラメーターで指定された型シグネチャと等しい必要があります。 したがって、送信されるデータの量は、プロセスのペア間で受信されるデータの量と同じである必要があります。 送信者と受信側の間の個別の型マップは引き続き許可されます。

comm パラメーターがコマンド内を参照する場合、 のMPI_ALLGATHER(...)呼び出しの結果は、各プロセスが を使用してそれ自体を含む各プロセスへの送信を実行し、 を使用MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)して他のすべてのプロセスMPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)から受信した場合と同じになります。

comm パラメーターが相互通信子を参照している場合、結果はグループ A の各プロセスがグループ B の各プロセスにメッセージを送信するかのように、その逆になります。 グループ A のプロセス ij番目の送信バッファーは、グループ B のプロセス ji番目の受信バッファーと一致している必要があります。その逆も同様です。

グループ A のプロセスによって送信されるアイテムの数は、グループ B のプロセスによって送信されるアイテムの数と等しい必要はありません。特に、逆方向の通信に sendcount == 0 を指定することで、データを 1 方向にのみ移動できます。

要件

製品

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_Allgather

MPI_Send

MPI_Recv