[mpich-discuss] Problems with mpi spawn multiple

fernando_luz fernando_luz at tpn.usp.br
Thu Nov 6 11:07:23 CST 2008


Yes, you're right...

I don't use MPI::ROOT in spawn_multiple... I use normal rank. In the Bcast
I use MPI::ROOT...

Tks again...

PS: In off, in last month I bought in Amazon "Using MPI-2 Advanced Features
of the Message-Passing Interface" and this book come with dedicatory signed
by you. Cool :-)


"Rajeev Thakur" <thakur at mcs.anl.gov> escreveu:
> It is incorrect to use MPI::ROOT in Spawn_multiple. But you need it in
the
> Bcast since it is done on an intercommunicator. See the defintion of
Bcast
> for intercommunicators.
> 
> Rajeev
> 
>> -----Original Message-----
>> From: mpich-discuss-bounces at mcs.anl.gov 
>> [mailto:mpich-discuss-bounces at mcs.anl.gov] On Behalf Of fernando_luz
>> Sent: Thursday, November 06, 2008 8:01 AM
>> To: mpich-discuss at mcs.anl.gov
>> Subject: Re: [mpich-discuss] Problems with mpi spawn multiple
>> 
>> Thanks Rajeev, 
>> 
>> It's works, but I need you MPI::ROOT in process parent, when 
>> I call MPI::COMM_WORLD.Spawn_multiple.
>> 
>> Thanks again for the help
>> 
>> Fernando Luz
>> 
>> 
>> "Rajeev Thakur" <thakur at mcs.anl.gov> escreveu:
>> > The interface for MPI_Comm_spawn_multiple expects the 
>> program names to 
>> > be passed in an array of pointers, not a 2D array of chars. For 
>> > example, if
>> you
>> > declare it as
>> >  
>> > char *program_name[2] = { "worker_02", "worker_02"};
>> > 
>> > it should work.
>> > 
>> > Rajeev
>> > 
>> >> -----Original Message-----
>> >> From: mpich-discuss-bounces at mcs.anl.gov 
>> >> [mailto:mpich-discuss-bounces at mcs.anl.gov] On Behalf Of 
>> fernando_luz
>> >> Sent: Tuesday, November 04, 2008 11:20 AM
>> >> To: mpich-discuss at mcs.anl.gov
>> >> Subject: Re: [mpich-discuss] Problems with mpi spawn multiple
>> >> 
>> >> Yes,
>> >> 
>> >> This code is based in a example code of MPI_Spawn in mpi forum 
>> >> homepage (
>> >> http://www.mpi-forum.org/docs/mpi-20-html/node98.htm#Node98 ). 
>> >> 
>> >> I adapted the code in C++ and to use mpi spawn multiple. This code 
>> >> work's when I use with mpi spawn.
>> >> 
>> >> --------------------------------------------------------------
>> >> -----------------
>> >> manager_02 code:
>> >> 
>> >> #include <mpi.h>
>> >> #include <iostream>
>> >> #include <string>
>> >> 
>> >> #define MAX 128
>> >> 
>> >> MPI::Status status;
>> >> MPI::Intercomm everyone;
>> >> MPI::Info information[10];
>> >> 
>> >> int  size, rank, universe_size, *universe_sizep, n, n_proc[10], 
>> >> size_machine;
>> >> 
>> >> bool flag;
>> >>         
>> >> char machine[MAX], program_name[4][MAX], buffer[MAX], s_wdir[MAX], 
>> >> s_path[MAX], temp[MAX];
>> >> 
>> >> int main(int argc, char *argv[]){
>> >>         
>> >>   MPI::Init(argc, argv);
>> >>   size = MPI::COMM_WORLD.Get_size();
>> >>   rank = MPI::COMM_WORLD.Get_rank();
>> >>   
>> >>   MPI::Get_processor_name(machine,size_machine);
>> >>   
>> >>   if (size != 1)  std::cerr << "Top heavy with management" << 
>> >> std::endl;
>> >>   
>> >>   flag = MPI::COMM_WORLD.Get_attr(MPI::UNIVERSE_SIZE,
>> >> &universe_sizep);
>> >>   
>> >>   if (!flag) {
>> >>     std::cout << "This MPI does not support UNIVERSE_SIZE. 
>> How many 
>> >> processes total?" << std::endl;
>> >>     std::cin >> universe_size;
>> >>   }
>> >>   else universe_size = *universe_sizep;
>> >>   
>> >>   if (universe_size == 1) std::cerr << "Não tem como iniciar um 
>> >> processo com universe_size igual a 1." << std::endl;
>> >>   
>> >>   universe_size = 3;
>> >> 
>> >>   for (int i = 0; i < universe_size-1; i++){
>> >>     strcpy(program_name[i], "worker_02"); 
>> >>     information[i] = information[i].Create();
>> >>     information[i].Set("wdir","/home/fernando_luz/");
>> >>    
>> >> information[i].Set("path","/home/fernando_luz/SVN/TPN3/casos_t
>> >> estes/02/worker_02/");
>> >>     information[i].Set("host", "a54");
>> >>     n_proc[i] = 1;
>> >>   }
>> >>   everyone = MPI::COMM_WORLD.Spawn_multiple(universe_size-1,
>> >> (const char**)
>> >> program_name, MPI::ARGVS_NULL, n_proc, information, rank);
>> >> 
>> >>   strcpy(buffer,"Who are you?");
>> >>   everyone.Bcast(&buffer, MAX, MPI::CHAR, rank);
>> >>   
>> >>   for (int i=0; i < universe_size-1; i++){
>> >>     everyone.Recv(&buffer, MAX, MPI::CHAR, i, 
>> MPI::ANY_TAG, status);
>> >>     std::cout << "I am " << buffer << " with rank " <<
>> >> status.Get_source()
>> >> << std::endl;
>> >>   }
>> >>   
>> >>   for (int i = 0; i < universe_size-1; i++){
>> >>     information[i].Free();
>> >>   }
>> >>   MPI::Finalize(); 
>> >>   return 0;
>> >> }
>> >> 
>> >> --------------------------------------------------------------
>> >> ------------------------------
>> >> 
>> >> ==============================================================
>> >> ==============================
>> >> worker_02 code:
>> >> 
>> >> #include <mpi.h>
>> >> #include <iostream>
>> >> #include <string>
>> >> 
>> >> #define MAX 128
>> >> 
>> >> MPI::Status status;
>> >> MPI::Intercomm parent;
>> >> 
>> >> int  rank, size, size_machine;
>> >> 
>> >> char machine[MAX], buffer[MAX];
>> >> 
>> >> int main(int argc, char *argv[]){
>> >> 
>> >>   MPI::Init(argc, argv);
>> >>   parent = parent.Get_parent();
>> >>   
>> >>   MPI::Get_processor_name(machine,size_machine);
>> >>     
>> >>   if (parent == MPI::COMM_NULL) std::cerr << "No daddy!!" << 
>> >> std::endl;
>> >> 
>> >>   size = parent.Get_remote_size();
>> >> 
>> >>   if (size != 1) std::cerr << "Problems with daddy..." << 
>> std::endl;
>> >> 
>> >>   rank = parent.Get_rank();
>> >> 
>> >>   parent.Bcast(&buffer, MAX, MPI::CHAR, 0);
>> >>         
>> >>   std::cout << "Process " << rank << " received in broadcast: 
>> >> " << buffer
>> >> << std::endl;
>> >> 
>> >>   parent.Send(&machine, MAX, MPI::CHAR, 0, rank);
>> >> 
>> >>   MPI::Finalize(); 
>> >>   return 0;
>> >> }
>> >> 
>> >> ==============================================================
>> >> ================================
>> >> 
>> >> and I start the program with "mpiexec -configfile executa.txt" 
>> >> 
>> >> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> >> ++++++++++++++++++++++++++++++++
>> >> executa.txt file:
>> >> 
>> >> -host a53 -path
>> >> /home/fernando_luz/SVN/TPN3/casos_testes/02/manager_02/
>> >> -wdir /home/fernando_luz/ -l -exitinfo manager_02
>> >> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> >> ++++++++++++++++++++++++++++++++
>> >> 
>> >> Thanks for help
>> >> 
>> >> Fernando Luz
>> >> 
>> >> 
>> >> 
>> > 
>> > 
>> 
>> 
>> 
>> 
> 
> 






More information about the mpich-discuss mailing list