Я использую 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
Я не понимаю, почему это отличается?
спасибо.