Hello,

I am trying to use the dynamic process property of the open-mpi, but met some
problems.

In my program, the master program spawns some worker programs, the number of
workers depends on the universe_size. Now the problem is that the worker
programs can only be spawned on one node, the same node where the master
program is on. I specified the nodes using the hostfiles. Here is the content
of my hostfile:
n18 slots=1
n17 slots=4

The master is running on the n18, and I hope it can spawn 4 workers on the
n17. The command I started the program is:
mpirun --hostfile hostfile -np 1 master ...

Howerver, all the 4 workers are spawned on the n18 too, none of them running
on the n17. Here is my code to spawn workers:

// Spawns workers.
void master::Master::spawnWorkers(const char* command, const char*
arguments[]) {

  char schema[80];
  int mpi_spawn_error;
  Task * task = tasks.front();
  mpi_spawn_info=MPI::Info::Create();
 
  for(int iworker=1; iworker<=number_of_workers; ++iworker) {
    sprintf(schema, "c%d", iworker);
    mpi_spawn_info.Set("spawn_sched_round_robin", schema);
    intercomm_workers[iworker]=MPI::COMM_SELF.Spawn(command, arguments, 1,
mpi_spawn_info, mpi_comm_rank, &mpi_spawn_error);
   if (mpi_spawn_error!=MPI::SUCCESS) {
      std::cerr << "(Master) Error in spawning worker (rank=" <<
mpi_comm_rank << ").\n";
      MPI::COMM_WORLD.Abort((1 << 16)+1);
    } else {
      std::cerr << "Master spawned worker (rank=" << iworker << ").\n";
      intracomm_workers[iworker]=intercomm_workers[iworker].Merge(true);
      std::cerr << "Master merging inter - and intra - communicators for
worker (rank=" << iworker << ").\n";
    }
  }
 
  mpi_spawn_info.Free();

}

In the code the command is just executable file name of the worker.

I guess I didn't set the mpi_spaw_info which is MPI::Info type correctly. But
I have no idea how to set it.

Any advice?

Thanks.

Regards
Yongsheng Zhao 

Reply via email to