C 如何使用MPI发送阵列

C 如何使用MPI发送阵列,c,arrays,mpi,C,Arrays,Mpi,我正在尝试使用MPI将一个数组从一个从机发送到一个主机,然后对输出执行一些操作。我可以发送和接收一个整数,但是当我尝试使用数组时,它不起作用。我尝试过包含和不包含指针&在使用MPI_Send和MPI_receive发送数组时。什么也得不到 下面是我一直使用的示例代码 #include <stdio.h> #include <string.h> #include <stddef.h> #include <stdlib.h> #include "mpi

我正在尝试使用MPI将一个数组从一个从机发送到一个主机,然后对输出执行一些操作。我可以发送和接收一个整数,但是当我尝试使用数组时,它不起作用。我尝试过包含和不包含指针&在使用MPI_Send和MPI_receive发送数组时。什么也得不到

下面是我一直使用的示例代码

#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <stdlib.h>
#include "mpi.h"
main(int argc, char **argv ) {
    char message[20];
    int i,j, ressize, out, numprocs, myid, proc, res[10];
    MPI_Status status;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);

    for(i=0;i<2;i++)
        {
            if(myid == 0)
            {
                for (proc = 0; proc < numprocs; proc++)
                {
                    MPI_Send(&i, 1, MPI_INT, proc, 99, MPI_COMM_WORLD);
                }

                for (proc = 1; proc < numprocs; proc++)
                {
                    MPI_Recv(res, sizeof(res), MPI_INT, MPI_ANY_SOURCE, 99, MPI_COMM_WORLD, &status);
                    for(j=0;j<10;j++){
                        printf("result = %i\n",res[j]);
                    }

                }
            }
            else {
                MPI_Recv(&i, 1 , MPI_INT, 0, 99, MPI_COMM_WORLD, &status);
                for(j=0;j<10;j++){
                    res[j]=i+10;
                    printf("j= %i, res= %i\n",j,i+10);
                }
                ressize = sizeof(res);
                MPI_Send(res, ressize, MPI_INT, 0, 99, MPI_COMM_WORLD);
            }
        }
    MPI_Finalize();
    }
#包括
#包括
#包括
#包括
#包括“mpi.h”
主(内部argc,字符**argv){
字符消息[20];
inti,j,presize,out,numprocs,myid,proc,res[10];
MPI_状态;
MPI_Init(&argc,&argv);
MPI通信大小(MPI通信世界和numprocs);
MPI通信等级(MPI通信世界和myid);

对于(i=0;i请向我们展示一个显示失败的完整程序,我们可以编译、运行并进行实验。(您的片段似乎是针对单个int情况的?)还请更具体地说明“不起作用”部分。我们需要您详细描述您预期会发生什么以及发生了什么。基本上,当我计算数组的值时,这很好,但是当我使用MPI_send发送,然后使用MPI_recieve接收时,我会得到不同的数据,但不确定原因。我只希望得到我发送的数组,并能够进行操作尽管如此,我还是得到了一组不同的值,不知道它们来自哪里。什么是共享完整代码的最佳方式?当我在写问题时添加它时,它没有考虑初始声明代码,所以我把它们放了出来。<代码> sieSof(RES)< /C> >在<代码> MPIIX发送/代码>调用和<代码> SIZEOF(RES)中。
MPI\u Recv
调用中的
应该是
res
的元素数,而不是以字节为单位的总大小。在您的情况下,可能是
10
。将其更改为10可以解决此问题。感谢您的帮助。请注意,您可以将数组中的元素数设置为
sizeof(res)/sizeof(res[0])
,或
#define RES_ELEMS 10U
。请向我们展示一个显示失败的完整程序,我们可以编译、运行并进行实验。(您的片段似乎是针对单个int情况的?)。还请更具体地说明“不起作用”部分。我们需要您详细描述您预期会发生什么以及发生了什么。基本上,当我计算数组的值时,这很好,但是当我使用MPI_send发送,然后使用MPI_recieve接收时,我会得到不同的数据,但不确定原因。我只希望得到我发送的数组,并能够进行操作尽管如此,我还是得到了一组不同的值,不知道它们来自哪里。什么是共享完整代码的最佳方式?当我在写问题时添加它时,它没有考虑初始声明代码,所以我把它们放了出来。<代码> sieSof(RES)< /C> >在<代码> MPIIX发送/代码>调用和<代码> SIZEOF(RES)中。
MPI\u Recv
调用中的应该是
res
的元素数,而不是以字节为单位的总大小。在您的情况下,可能是
10
。将其更改为10可以解决此问题。感谢您的帮助。请注意,您可以将数组中的元素数设置为
sizeof(res)/sizeof(res[0])
,或
#定义资源元素10U