【问题标题】:Receiving data in slaves mpi spawn c在从机中接收数据 mpi spawn c
【发布时间】:2023-04-09 13:13:01
【问题描述】:

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

1- Master 通过一个作业生成 2 个进程。

2- 他将一个数组分散到那些产生的进程中。

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

4- master 接收数组的排序部分。

我想知道如何执行第 2 步,到目前为止,我已经尝试过发送和接收,它们工作得很好,但我想使用 scatter 函数来完成。

编辑:这是我想在主代码中做的事情,我错过了从服务器中接收分散数组的部分

/*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);

谢谢。

【问题讨论】:

  • 你似乎误解了,我想将它们与 mpi_comm_spawn 一起使用,我没有找到任何有关如何执行的信息
  • 愿意分享您的代码吗?
  • 我添加了部分代码以帮助您了解我正在尝试做什么,当我生成从站的代码时,我不知道如何让他们接收我放入 MPI_Scatter 中的数据

标签: mpi spawn


【解决方案1】:

ma​​ster.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;
}

worker.c

#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;
}

命令行

mpicc master.c -o master_program
mpicc worker.c -o worker_program
mpirun -n 1 master_program

【讨论】:

  • 谢谢,我试过了,效果很好,和聚会一样。
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2019-05-04
  • 2015-03-08
  • 2018-08-30
  • 2019-01-21
  • 2018-11-11
  • 1970-01-01
相关资源
最近更新 更多