No es posible usar fork()
ya que el proceso secundario no podrá usar las funciones MPI. Hay un mecanismo simple en MPI para crear dinámicamente nuevos procesos. Debe utilizar la función MPI_Comm_spawn
o el doc OpenMPI MPI_Comm_spawn_mutliple
: 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;
}
remito a mi respuesta a [esta cuestión] [1]. [1]: http://stackoverflow.com/questions/9683331/changing-number-of-processors-during-execution-of-the-code-in-mpis-based-paralle/9683758# 9683758 –
@HighPerformanceMark: Pero eso solo comienza un nuevo proceso. Esto no es exactamente una copia en 'tenedor' de escritura desde la ubicación precisa (y configuración) del proceso actual. – bitmask
preguntaste '¿es eso o algo similar posible?', Propongo que mph_comm_spawn es similar. Pero si no es adecuado para sus necesidades, puede que tenga que volver a escribir MPI. O use otra biblioteca de paralelización/conjunto de herramientas/enfoque. –