在从机mpi spawn c中接收数据

在从机mpi spawn c中接收数据,mpi,spawn,Mpi,Spawn,我尝试使用mpi_comm_spawn&scatter实现以下场景: 1-主进程生成2个进程和一个作业 2-他将一个数组分散到那些衍生进程 3-生成的进程接收分散数组排序,然后将其发送回 4-主机接收阵列的已排序部分 我想知道如何执行步骤2,到目前为止,我已经尝试了发送和接收,它们工作得很好,但我想用散射功能来完成 编辑:这是我想在主代码中做的,我缺少从代码中接收分散阵列的部分 /*Master Here*/ MPI_Comm_spawn(slave, MPI_ARGV_NULL, 2, MP

我尝试使用mpi_comm_spawn&scatter实现以下场景:

1-主进程生成2个进程和一个作业

2-他将一个数组分散到那些衍生进程

3-生成的进程接收分散数组排序,然后将其发送回

4-主机接收阵列的已排序部分

我想知道如何执行步骤2,到目前为止,我已经尝试了发送和接收,它们工作得很好,但我想用散射功能来完成

编辑:这是我想在主代码中做的,我缺少从代码中接收分散阵列的部分

/*Master Here*/

MPI_Comm_spawn(slave, MPI_ARGV_NULL, 2, MPI_INFO_NULL,0, MPI_COMM_WORLD, &inter_comm, array_of_errcodes);

printf("MASTER Sending a message to slaves \n");
MPI_Send(message, 50, MPI_CHAR,0 , tag, inter_comm);

MPI_Scatter(array, 10, MPI_INT, &array_r, 10, MPI_INT, MPI_ROOT, inter_comm);

谢谢。

master.c

#include "mpi.h"

int main(int argc, char *argv[])
{ 
   int n_spawns = 2;
   MPI_Comm intercomm;

   MPI_Init(&argc, &argv);

   MPI_Comm_spawn("worker_program", MPI_ARGV_NULL, n_spawns, MPI_INFO_NULL, 0, MPI_COMM_SELF, &intercomm, MPI_ERRCODES_IGNORE); 

   int sendbuf[2] = {3, 5};
   int recvbuf; // redundant for master.

   MPI_Scatter(sendbuf, 1, MPI_INT, &recvbuf, 1, MPI_INT, MPI_ROOT, intercomm);

   MPI_Finalize();
   return 0;
}
#include "mpi.h"
#include <stdio.h>

int main(int argc, char *argv[])
{  
   MPI_Init(&argc, &argv);

   MPI_Comm intercomm; 
   MPI_Comm_get_parent(&intercomm);

   int sendbuf[2]; // redundant for worker.
   int recvbuf;

   MPI_Scatter(sendbuf, 1, MPI_INT, &recvbuf, 1, MPI_INT, 0, intercomm);
   printf("recvbuf = %d\n", recvbuf);

   MPI_Finalize();
   return 0;
}
worker.c

#include "mpi.h"

int main(int argc, char *argv[])
{ 
   int n_spawns = 2;
   MPI_Comm intercomm;

   MPI_Init(&argc, &argv);

   MPI_Comm_spawn("worker_program", MPI_ARGV_NULL, n_spawns, MPI_INFO_NULL, 0, MPI_COMM_SELF, &intercomm, MPI_ERRCODES_IGNORE); 

   int sendbuf[2] = {3, 5};
   int recvbuf; // redundant for master.

   MPI_Scatter(sendbuf, 1, MPI_INT, &recvbuf, 1, MPI_INT, MPI_ROOT, intercomm);

   MPI_Finalize();
   return 0;
}
#include "mpi.h"
#include <stdio.h>

int main(int argc, char *argv[])
{  
   MPI_Init(&argc, &argv);

   MPI_Comm intercomm; 
   MPI_Comm_get_parent(&intercomm);

   int sendbuf[2]; // redundant for worker.
   int recvbuf;

   MPI_Scatter(sendbuf, 1, MPI_INT, &recvbuf, 1, MPI_INT, 0, intercomm);
   printf("recvbuf = %d\n", recvbuf);

   MPI_Finalize();
   return 0;
}

你似乎误解了,我想在mpi_comm_spawn中使用它们,但我没有找到任何关于如何使用performCare来共享代码的信息?我添加了部分代码以帮助你理解我正在尝试的操作,当我生成奴隶的代码时,我不知道如何让他们接收我放入MPI_散点器中的数据。谢谢,我尝试了它,效果很好,收集也是如此。