Создавать MPI-процессы на лету с помощью fork? - PullRequest
5 голосов
/ 14 марта 2012

Если я использую MPI, у меня есть ряд процессов, указанных при запуске основной программы.Однако я хотел бы начать с одного процесса и динамически принимать решение во время выполнения, если и когда мне нужно больше, чтобы отключить больше процессов.Возможно ли это или что-то подобное?

В противном случае мне пришлось бы заново изобретать MPI, которого я бы очень хотел избежать.

1 Ответ

7 голосов
/ 30 апреля 2014

Невозможно использовать fork(), так как дочерний процесс не сможет использовать функции MPI.В MPI существует простой механизм для создания динамически новых процессов.Вы должны использовать функцию MPI_Comm_spawn или MPI_Comm_spawn_mutliple

OpenMPI doc: http://www.open -mpi.org / doc / v1.4 / man3 / MPI_Comm_spawn.3.php

#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

#define NUM_SPAWNS 2

int main( int argc, char *argv[] )
{
  int np = NUM_SPAWNS;
  int errcodes[NUM_SPAWNS];
  MPI_Comm parentcomm, intercomm;

  MPI_Init( &argc, &argv );
  MPI_Comm_get_parent( &parentcomm );
  if (parentcomm == MPI_COMM_NULL) {
    MPI_Comm_spawn( "spawn_example", MPI_ARGV_NULL, np, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &intercomm, errcodes );
    printf("I'm the parent.\n");
  } else {
    printf("I'm the spawned.\n");
  }
  fflush(stdout);
  MPI_Finalize();
  return 0;
}
...