Как настроить MPI_COMM_SPAWN вести себя как mpirun? - PullRequest
0 голосов
/ 03 мая 2018

Я использую MPI (openMPI 3.0.1) в C для своей работы, и я хочу знать, как настроить mpi_comm_spawn, чтобы он вел себя так, как будто я запускаю свой исполняемый файл с mpirun?

Я использую этот хост-файл:

# This is a single processor node: 

# This is a height-processor node. Oversubscribing
# to it is prevented by setting max-slots=4:

# host  | rank | nb procs | max nb procs
  node7   0,2    slots=2    max-slots=4

# This is a height-processor node. Oversubscribing
# to it is prevented by setting max-slots=8:

# host  | rank        | nb procs | max nb procs
  node8   1,3,4,5,6,7   slots=6    max-slots=8

поэтому, когда я запускаю hostname с

mpirun -hostfile /path/to/mpi_hostfile hostname

я дал

node7
node7
node8
node8
node8
node8
node8
node8

но когда я запускаю новые процессы с помощью (предупреждение, что это псевдокод)

maxprocs = to_unsigned(arg)
info_key = "add-hostfile"
info_value = "/path/to/mpi_hostfile"

mpi_comm_spawn(....)

и это код, который я использую

mpi->comm_spawn->set_attr_command(argv[0]);
mpi->comm_spawn->set_attr_argv(argv + 1);
mpi->comm_spawn->set_attr_maxprocs(universe_size - 1);

if (mc_options.hostfile == nullptr)
  mpi->comm_spawn->set_attr_info(spot::mpi::info_null);
else
  {
     // OpenMPI specific
     const char* hostfile = "add-hostfile";

     mpi->info_create->set_attr_info(&info);
     mpi->info_create->do_info_create();

     mpi->info_set->set_attr_info(info);
     mpi->info_set->set_attr_key(hostfile);
     mpi->info_set->set_attr_value(mc_options.hostfile);
     mpi->info_set->do_info_set();

     mpi->comm_spawn->set_attr_info(info);
   }

 mpi->comm_spawn->set_attr_root(master);
 mpi->comm_spawn->set_attr_comm(spot::mpi::comm_self);
 mpi->comm_spawn->set_attr_intercomm(&children);
 mpi->comm_spawn->
 set_attr_array_of_errcodes(spot::mpi::errcodes_ignore);
 mpi->comm_spawn->do_comm_spawn();

У меня есть все мои процессы на узле 7, и я не могу запустить более 2 процессов (как я указал в mpi_hostfile для узла 7)

Process #0: on HOST node7
Process #1: on HOST node7

если я попытаюсь запустить больше

--------------------------------------------------------------------------
There are not enough slots available in the system to satisfy the 3 slots
that were requested by the application:
/* my executable*/

Either request fewer slots for your application, or make more slots available
for use.
--------------------------------------------------------------------------
[node7:2306] *** An error occurred in MPI_Comm_spawn
[node7:2306] *** reported by process [4042260481,0]
[node7:2306] *** on communicator MPI_COMM_SELF
[node7:2306] *** MPI_ERR_SPAWN: could not spawn processes
[node7:2306] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
[node7:2306] ***    and potentially your MPI job)

и я хочу

node7
node7
node8
node8
node8
node8
node8
node8

как с mpirun Я не понимаю, почему это отличается?

спасибо.

...