如何使用MPI将整个2D阵列分散到所有进程

如何使用MPI将整个2D阵列分散到所有进程,mpi,Mpi,正如标题所示,我正在寻找一个完整的2D数组,并将整个数组分散到其他进程中。以下是我正在使用的代码: int main(int argc, char **argv) { MPI_Init(&argc,&argv); int i,j,size,rank; MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (argc!=3

正如标题所示,我正在寻找一个完整的2D数组,并将整个数组分散到其他进程中。以下是我正在使用的代码:

int main(int argc, char **argv)
{
    MPI_Init(&argc,&argv);
    int i,j,size,rank;
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    if (argc!=3)
    {
        printf("Usage : pairwise numberOfSequences lengthOfSequences\n eg. pairwise 10000 50\n");
        exit(0);
    }
    sscanf(argv[1],"%d",&N);
    sscanf(argv[2],"%d",&M);

    char strings[N][M+1];


    if(rank == 0)
    {
        for (i=0; i<N; i++)
        {
            //Here I read from a file into the array strings and this works
            scanf("%s\n",strings[i]);
            printf("Rank:%d  i value:%d # %s\n",rank,i,strings[i]);
        }
    }   

    MPI_Barrier(MPI_COMM_WORLD);

    char array_for_all[N][M+1];

    //I think here my parameters are wrong for Scatter.
    MPI_Scatter(strings, N*(M+1),MPI_CHAR,array_for_all, N*(M+1), MPI_CHAR, 0,MPI_COMM_WORLD);

    for (i=0; i<N; i++)
    {
        printf("Rank:%d  i value:%d # %s\n",rank,i,array_for_all[i]);
    }

我不确定我是否正确地实现了分散。我不想将数组的一部分发送到每个进程,我想将整个数组发送到每个进程,或者有更好的方法吗?

正如@Wesley所指出的,正确的方法是使用MPI\u Bcast,在所有进程上广播数据。第一个参数应该是指向以下数据的指针:&字符串[0][0]


如果你想把所有的数据发送给每个人,那听起来很像Bcast。
#include <stdio.h>
#include <mpi.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
    MPI_Init(&argc,&argv);
    int N,M;
    int i,j,size,rank;
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    if (argc!=3)
    {
        printf("Usage : pairwise numberOfSequences lengthOfSequences\n eg. pairwise 10000 50\n");
        exit(0);
    }
    sscanf(argv[1],"%d",&N);
    sscanf(argv[2],"%d",&M);
    char strings[N][M+1];


    if(rank == 0)
    {
        for (i=0; i<N; i++)
        {
            //Here I read from a file into the array strings and this works
            scanf("%s",strings[i]);
            printf("Rank:%d  i value:%d # %s\n",rank,i,strings[i]);fflush(stdout);
        }
        printf("input over, now output :\n");fflush(stdout);
    }   

    //I think here my parameters are wrong for Scatter.
    MPI_Bcast(&strings[0][0],N*(M+1), MPI_CHAR, 0,MPI_COMM_WORLD);
    // MPI_Scatter(strings, N*(M+1),MPI_CHAR,array_for_all, N*(M+1), MPI_CHAR, 0,MPI_COMM_WORLD);

    for (i=0; i<N; i++)
    {
        printf("Rank:%d  i value:%d # %s\n",rank,i,strings[i]);fflush(stdout);
    }
    MPI_Finalize();
    return 0;
}