[mpich-discuss] Running one MPI program from another

Rod Cook rod at cookies.demon.co.uk
Fri Apr 24 08:49:44 CDT 2009


[mpich-discuss] Running one MPI program from anotherJayesh

The environment block was the problem. I've included a modified version of the test program that works. I've also made the mod in my actual application and works OK .

Thanks for your help, much appreciated.

Rod


#include "stdafx.h"
#include "Userenv.h"
#include <afx.h>
#include "mpi.h"
int run_program( char * program )
{
   STARTUPINFO si;
   PROCESS_INFORMATION pi;
   LPVOID env = NULL;
   CreateEnvironmentBlock(&env, NULL, FALSE);
   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );
   if( !CreateProcess( NULL,   // No module name (use command line)
      program,        // Command line
      NULL,           // Process handle not inheritable
      NULL,           // Thread handle not inheritable
      FALSE,          // Set handle inheritance to FALSE
      CREATE_UNICODE_ENVIRONMENT,              // Created environment block contains unicode
      env,            // Use created environment block
      NULL,           // Use parent's starting directory 
      &si,            // Pointer to STARTUPINFO structure
      &pi )           // Pointer to PROCESS_INFORMATION structure
      ) 
   {
      return -1;
   }
   WaitForSingleObject( pi.hProcess, INFINITE );
   CloseHandle( pi.hProcess );
   CloseHandle( pi.hThread );
   return 0;
}
int main(int argc, char* argv[])
{
   MPI_Init(NULL,NULL);
   run_program("prog");
   MPI_Finalize();
 return 0;
}





  ----- Original Message ----- 
  From: Jayesh Krishna 
  To: 'Rod Cook' 
  Cc: mpich-discuss at mcs.anl.gov 
  Sent: Thursday, April 23, 2009 3:53 PM
  Subject: RE: [mpich-discuss] Running one MPI program from another


  Hi,
   Since you are passing in a NULL value for the environment block the new process created is inheriting the environment from the parent (since this environment includes the runtime env for an MPI process it should not be shared among two MPI processes). This could be your problem. Can you try passing a dummy environment block instead of NULL in CreateProcess() ?

  Regards,
  Jayesh



------------------------------------------------------------------------------
  From: Rod Cook [mailto:rod at cookies.demon.co.uk] 
  Sent: Thursday, April 23, 2009 3:42 AM
  To: Jayesh Krishna
  Cc: mpich-discuss at mcs.anl.gov
  Subject: Re: [mpich-discuss] Running one MPI program from another


  Jayesh

  Using "mpiexec -n 1 prog" doesn't work.

  Cheers

  Rod

    ----- Original Message ----- 
    From: Jayesh Krishna 
    To: 'Rod Cook' 
    Cc: mpich-discuss at mcs.anl.gov 
    Sent: Wednesday, April 22, 2009 8:38 PM
    Subject: [mpich-discuss] Running one MPI program from another


    Hi,
     Try launching "mpiexec -n 1 prog" instead of "prog" with CreateProcess(). Let us know if it works for you.

    Regards,
    Jayesh

    --------------------------------------------------------------------------------
    From: mpich-discuss-bounces at mcs.anl.gov [mailto:mpich-discuss-bounces at mcs.anl.gov] On Behalf Of Rod Cook
    Sent: Wednesday, April 22, 2009 10:12 AM
    To: Jayesh Krishna
    Cc: mpich-discuss at mcs.anl.gov
    Subject: Re: [mpich-discuss] Running one MPI program from another


    Jayesh,

    I can get my example code to work using MPI_Comm_spawn but it doesn't work for my actual application. The problem with using MPI_Comm_spawn is that I don't know how to tell that the spawned program has finished -- this is why I used CreateProcess because it is possible to wait for the program to terminate. The spawned program could be a non MPI executable or a standalone MPI executable which can't communicate with the program calling MPI_Comm_spawn.

    Cheers,

    Rod
    ----- Original Message -----
    From: Jayesh Krishna
    To: 'Rod Cook'
    Cc: mpich-discuss at mcs.anl.gov
    Sent: Wednesday, April 22, 2009 3:40 PM
    Subject: RE: [mpich-discuss] Running one MPI program from another


    Hi,
     Did you try MPI_Comm_spawn() ?

    Regards,
    Jayesh



    --------------------------------------------------------------------------------
    From: mpich-discuss-bounces at mcs.anl.gov [mailto:mpich-discuss-bounces at mcs.anl.gov] On Behalf Of Rod Cook
    Sent: Wednesday, April 22, 2009 7:50 AM
    To: mpich-discuss at mcs.anl.gov
    Subject: [mpich-discuss] Running one MPI program from another


    Hi,

    I am trying to run an MPI program (prog) from another MPI program (test) using CreateProcess under Windows XP.  I am using MPICH2 v1.08.

    Source for test
    #include "stdafx.h"
    #include <afx.h>
    #include "mpi.h"
    int run_program( char * program )
    {
       STARTUPINFO si;
       PROCESS_INFORMATION pi;
       ZeroMemory( &si, sizeof(si) );
       si.cb = sizeof(si);
       ZeroMemory( &pi, sizeof(pi) );
       if( !CreateProcess( NULL, program, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi )  )
       {
          return -1;
       }
       WaitForSingleObject( pi.hProcess, INFINITE );
       CloseHandle( pi.hProcess );
       CloseHandle( pi.hThread );
       return 0;
    }
    int main(int argc, char* argv[])
    {
       MPI_Init(NULL,NULL);
       run_program("prog");
       MPI_Finalize();
     return 0;
    }

    Source for prog
    #include "stdafx.h"
    #include "mpi.h"
    int main(int argc, char* argv[])
    {
       MPI_Init( NULL, NULL );
       MPI_Finalize();
       return 0;
    }

    I get the following error when I run test:

    >mpiexec -n 1 test
    MPIDU_Sock_post_connect failed.
    [0] PMI_ConnectToHost failed: unable to post a connect to Yellowtail yellowtail
                     :2057, error: Unknown error class, error stack:
    MPIDU_Sock_post_connect(1228): unable to connect to Yellowtail yellowtail
     on port 2057, exhausted all endpoints (errno -1)
    MPIDU_Sock_post_connect(1275): unable to connect to                  on port 2057,
     No connection could be made because the target machine actively refused it. (er
    rno 10061)
    MPIDU_Sock_post_connect(1275): unable to connect to yellowtail on port 2057, No
    connection could be made because the target machine actively refused it. (errno
    10061)
    MPIDU_Sock_post_connect(1275): unable to connect to Yellowtail on port 2057, No
    connection could be made because the target machine actively refused it. (errno
    10061)
    uPMI_ConnectToHost returning PMI_FAIL
    [0] PMI_Init failed.
    Fatal error in MPI_Init: Other MPI error, error stack:
    MPIR_Init_thread(294): Initialization failed
    MPID_Init(83)........: channel initialization failed
    MPID_Init(334).......: PMI_Init returned -1
    >

    In my actual application prog is either a standalone MPI program which I can't change or a non MPI program (in which case test works) .


    I'd be gratefull for any help.


    Thanks

    Rod Cook
      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/mpich-discuss/attachments/20090424/19ee77c7/attachment-0001.htm>


More information about the mpich-discuss mailing list