MPI-从任务0(根)接收多个int

MPI-从任务0(根)接收多个int,mpi,Mpi,我正在解决这个问题。我正在实现循环映射,我有4个处理器,因此一个任务映射到处理器1根上,然后其他三个任务映射到worker。我使用循环映射,输入几个整数,例如0-40。我想从每个工人那里得到,在这种情况下,每个工人将得到10个整数,进行一些计数并保存它 我使用MPI_Send从根发送整数,但我不知道如何乘法从同一进程根接收一些数字。我也发送int,缓冲区大小固定在1,当有数字时,例如12,它会做坏事。如何检查整数的长度 如有任何建议,将不胜感激。感谢P>我假定你在C++中工作,尽管你的问题没有说

我正在解决这个问题。我正在实现循环映射,我有4个处理器,因此一个任务映射到处理器1根上,然后其他三个任务映射到worker。我使用循环映射,输入几个整数,例如0-40。我想从每个工人那里得到,在这种情况下,每个工人将得到10个整数,进行一些计数并保存它

我使用MPI_Send从根发送整数,但我不知道如何乘法从同一进程根接收一些数字。我也发送int,缓冲区大小固定在1,当有数字时,例如12,它会做坏事。如何检查整数的长度


如有任何建议,将不胜感激。感谢

P>我假定你在C++中工作,尽管你的问题没有说。无论如何,让我们看看MPI_Send的参数:

MPI_SEND(buf, count, datatype, dest, tag, comm)
int values[40];
for (int i=0; i<40; i++)
    values[i] = i;
for (int i=1; i<4; i++)  // start at rank 1: don't send to ourselves
    MPI_Send(values+10*i, 10, MPI_INTEGER, i, 0, MPI_COMM_WORLD);
第二个参数指定要发送多少数据项。这个调用基本上意味着buf指向内存中的一个点,在这个点上有许多值,它们都是datatype类型的,一个接一个地发送它们。这样可以发送整个数组的内容,如下所示:

int values[10];
for (int i=0; i<10; i++)
    values[i] = i;
MPI_Send(values, 10, MPI_INTEGER, 1, 0, MPI_COMM_WORLD);

然而,这是分布式计算中的一种常见操作,MPI赋予了它自己的功能。“分散”功能完全符合您的要求:它使用一个数组,并在调用它的所有进程之间平均分配它。这是一个调用,这是一个稍微高级的话题,所以如果你只是学习MPI,听起来好像你,那么就可以跳过它,直到你舒服地使用MPIYEnter和MPIYRCV。< /P> < P>我假定你在C++中工作,尽管你的问题没有说。无论如何,让我们看看MPI_Send的参数:

MPI_SEND(buf, count, datatype, dest, tag, comm)
int values[40];
for (int i=0; i<40; i++)
    values[i] = i;
for (int i=1; i<4; i++)  // start at rank 1: don't send to ourselves
    MPI_Send(values+10*i, 10, MPI_INTEGER, i, 0, MPI_COMM_WORLD);
第二个参数指定要发送多少数据项。这个调用基本上意味着buf指向内存中的一个点,在这个点上有许多值,它们都是datatype类型的,一个接一个地发送它们。这样可以发送整个数组的内容,如下所示:

int values[10];
for (int i=0; i<10; i++)
    values[i] = i;
MPI_Send(values, 10, MPI_INTEGER, 1, 0, MPI_COMM_WORLD);
然而,这是分布式计算中的一种常见操作,MPI赋予了它自己的功能。“分散”功能完全符合您的要求:它使用一个数组,并在调用它的所有进程之间平均分配它。这是一个调用,这是一个稍微高级的主题,因此,如果您只是在学习听起来像您的MPI,那么可以跳过它,直到您习惯使用MPI_Send和MPI_Recv