1

以下のプログラムは、1つの重要なMPI関数自体(MPI_Scatter)のみで構成されています。そしてそれは間違って動作します:関数はMPI_SUCCESSを返しますが、クライアントによって受信されたデータ(ゼロ以外のランク)はサーバーによって送信されたデータ(ランクゼロ)とは異なります。

#include <stdio.h>
#include <mpi.h>

int main(int argc, char* argv[])
{
    int rank;
    int data;
    int temp;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    if (rank == 0)
    {
        data = 123; // data to send
        MPI_Scatter(&data, 1, MPI_INT, &temp, 1, MPI_INT, 0, MPI_COMM_WORLD); // MPI_SUCCESS
    }   
    else
    {
        MPI_Scatter(NULL, 0, MPI_INT, &data, 1, MPI_INT, 0, MPI_COMM_WORLD); // MPI_SUCCESS     
        printf("\nClient[%i] data = %i", rank, data);   // Incorrect data received
    }

    MPI_Finalize();
    return 0;
}
4

1 に答える 1

4

ここにあなたが理解するのを助けるために小さな絵があります、

ここに画像の説明を入力してください

参照:http ://www.mpitutorial.com/mpi-scatter-gather-and-allgather/

于 2012-09-30T02:55:51.440 に答える