<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>[mpich-discuss] Running one MPI program from another</TITLE>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.6000.16825" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=363365613-24042009>Hi,</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=363365613-24042009>&nbsp;Great... Let us know if you need any 
help.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=363365613-24042009></SPAN></FONT>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=363365613-24042009>Regards,</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=363365613-24042009>Jayesh</SPAN></FONT></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> Rod Cook [mailto:rod@cookies.demon.co.uk] 
<BR><B>Sent:</B> Friday, April 24, 2009 8:50 AM<BR><B>To:</B> Jayesh 
Krishna<BR><B>Cc:</B> mpich-discuss@mcs.anl.gov<BR><B>Subject:</B> Re: 
[mpich-discuss] Running one MPI program from another<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV><FONT face=Arial size=2>Jayesh</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>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 .</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Thanks for your help, much 
appreciated.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Rod</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>#include "stdafx.h"<BR>#include 
"Userenv.h"<BR>#include &lt;afx.h&gt;<BR>#include "mpi.h"</FONT></DIV>
<DIV><FONT face=Arial size=2>int run_program( char * program 
)<BR>{<BR>&nbsp;&nbsp; STARTUPINFO si;<BR>&nbsp;&nbsp; PROCESS_INFORMATION 
pi;<BR>&nbsp;&nbsp; LPVOID env = NULL;<BR>&nbsp;&nbsp; 
CreateEnvironmentBlock(&amp;env, NULL, FALSE);<BR>&nbsp;&nbsp; ZeroMemory( 
&amp;si, sizeof(si) );<BR>&nbsp;&nbsp; si.cb = sizeof(si);<BR>&nbsp;&nbsp; 
ZeroMemory( &amp;pi, sizeof(pi) );<BR>&nbsp;&nbsp; if( !CreateProcess( 
NULL,&nbsp;&nbsp; // No module name (use command 
line)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
program,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Command 
line<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Process 
handle not inheritable<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Thread 
handle not inheritable<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Set handle 
inheritance to FALSE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
CREATE_UNICODE_ENVIRONMENT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// Created environment block contains unicode<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
env,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Use 
created environment block<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Use 
parent's starting directory <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&amp;si,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
Pointer to STARTUPINFO structure<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;pi 
)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Pointer to 
PROCESS_INFORMATION structure<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) 
<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<BR>&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp; WaitForSingleObject( pi.hProcess, INFINITE );<BR>&nbsp;&nbsp; 
CloseHandle( pi.hProcess );<BR>&nbsp;&nbsp; CloseHandle( pi.hThread 
);<BR>&nbsp;&nbsp; return 0;<BR>}<BR>int main(int argc, char* 
argv[])<BR>{<BR>&nbsp;&nbsp; MPI_Init(NULL,NULL);<BR>&nbsp;&nbsp; 
run_program("prog");<BR>&nbsp;&nbsp; MPI_Finalize();<BR>&nbsp;return 
0;<BR>}<BR></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<BLOCKQUOTE dir=ltr 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=jayesh@mcs.anl.gov href="mailto:jayesh@mcs.anl.gov">Jayesh 
  Krishna</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=rod@cookies.demon.co.uk 
  href="mailto:rod@cookies.demon.co.uk">'Rod Cook'</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Cc:</B> <A title=mpich-discuss@mcs.anl.gov 
  href="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Thursday, April 23, 2009 3:53 
  PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> RE: [mpich-discuss] Running one 
  MPI program from another</DIV>
  <DIV><BR></DIV>
  <DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
  class=503564814-23042009>Hi,</SPAN></FONT></DIV>
  <DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
  class=503564814-23042009>&nbsp;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&nbsp;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() ?</SPAN></FONT></DIV>
  <DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
  class=503564814-23042009></SPAN></FONT>&nbsp;</DIV>
  <DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
  class=503564814-23042009>Regards,</SPAN></FONT></DIV>
  <DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
  class=503564814-23042009>Jayesh</SPAN></FONT></DIV><BR>
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> Rod Cook 
  [mailto:rod@cookies.demon.co.uk] <BR><B>Sent:</B> Thursday, April 23, 2009 
  3:42 AM<BR><B>To:</B> Jayesh Krishna<BR><B>Cc:</B> 
  mpich-discuss@mcs.anl.gov<BR><B>Subject:</B> Re: [mpich-discuss] Running one 
  MPI program from another<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV><FONT face=Arial size=2>Jayesh</FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial size=2>Using "mpiexec -n 1 prog" doesn't 
  work.</FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial size=2>Cheers</FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial size=2>Rod</FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <BLOCKQUOTE dir=ltr 
  style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
    <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
    <DIV 
    style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
    <A title=jayesh@mcs.anl.gov href="mailto:jayesh@mcs.anl.gov">Jayesh 
    Krishna</A> </DIV>
    <DIV style="FONT: 10pt arial"><B>To:</B> <A title=rod@cookies.demon.co.uk 
    href="mailto:rod@cookies.demon.co.uk">'Rod Cook'</A> </DIV>
    <DIV style="FONT: 10pt arial"><B>Cc:</B> <A title=mpich-discuss@mcs.anl.gov 
    href="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A> </DIV>
    <DIV style="FONT: 10pt arial"><B>Sent:</B> Wednesday, April 22, 2009 8:38 
    PM</DIV>
    <DIV style="FONT: 10pt arial"><B>Subject:</B> [mpich-discuss] Running one 
    MPI program from another</DIV>
    <DIV><BR></DIV><!-- Converted from text/plain format -->
    <P><FONT size=2>Hi,<BR>&nbsp;Try launching "mpiexec -n 1 prog" instead of 
    "prog" with CreateProcess(). Let us know if it works for 
    you.<BR><BR>Regards,<BR>Jayesh<BR><BR>--------------------------------------------------------------------------------<BR>From: 
    <A 
    href="mailto:mpich-discuss-bounces@mcs.anl.gov">mpich-discuss-bounces@mcs.anl.gov</A> 
    [<A 
    href="mailto:mpich-discuss-bounces@mcs.anl.gov">mailto:mpich-discuss-bounces@mcs.anl.gov</A>] 
    On Behalf Of Rod Cook<BR>Sent: Wednesday, April 22, 2009 10:12 AM<BR>To: 
    Jayesh Krishna<BR>Cc: <A 
    href="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A><BR>Subject: 
    Re: [mpich-discuss] Running one MPI program from 
    another<BR><BR><BR>Jayesh,<BR><BR>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.<BR><BR>Cheers,<BR><BR>Rod<BR>----- 
    Original Message -----<BR>From: Jayesh Krishna<BR>To: 'Rod Cook'<BR>Cc: 
    mpich-discuss@mcs.anl.gov<BR>Sent: Wednesday, April 22, 2009 3:40 
    PM<BR>Subject: RE: [mpich-discuss] Running one MPI program from 
    another<BR><BR><BR>Hi,<BR>&nbsp;Did you try MPI_Comm_spawn() 
    ?<BR><BR>Regards,<BR>Jayesh<BR><BR><BR><BR>--------------------------------------------------------------------------------<BR>From: 
    mpich-discuss-bounces@mcs.anl.gov [<A 
    href="mailto:mpich-discuss-bounces@mcs.anl.gov">mailto:mpich-discuss-bounces@mcs.anl.gov</A>] 
    On Behalf Of Rod Cook<BR>Sent: Wednesday, April 22, 2009 7:50 AM<BR>To: 
    mpich-discuss@mcs.anl.gov<BR>Subject: [mpich-discuss] Running one MPI 
    program from another<BR><BR><BR>Hi,<BR><BR>I am trying to run an MPI program 
    (prog) from another MPI program (test) using CreateProcess under Windows 
    XP.&nbsp; I am using MPICH2 v1.08.<BR><BR>Source for test<BR>#include 
    "stdafx.h"<BR>#include &lt;afx.h&gt;<BR>#include "mpi.h"<BR>int run_program( 
    char * program )<BR>{<BR>&nbsp;&nbsp; STARTUPINFO si;<BR>&nbsp;&nbsp; 
    PROCESS_INFORMATION pi;<BR>&nbsp;&nbsp; ZeroMemory( &amp;si, sizeof(si) 
    );<BR>&nbsp;&nbsp; si.cb = sizeof(si);<BR>&nbsp;&nbsp; ZeroMemory( &amp;pi, 
    sizeof(pi) );<BR>&nbsp;&nbsp; if( !CreateProcess( NULL, program, NULL, NULL, 
    FALSE, 0, NULL, NULL, &amp;si, &amp;pi )&nbsp; )<BR>&nbsp;&nbsp; 
    {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<BR>&nbsp;&nbsp; 
    }<BR>&nbsp;&nbsp; WaitForSingleObject( pi.hProcess, INFINITE 
    );<BR>&nbsp;&nbsp; CloseHandle( pi.hProcess );<BR>&nbsp;&nbsp; CloseHandle( 
    pi.hThread );<BR>&nbsp;&nbsp; return 0;<BR>}<BR>int main(int argc, char* 
    argv[])<BR>{<BR>&nbsp;&nbsp; MPI_Init(NULL,NULL);<BR>&nbsp;&nbsp; 
    run_program("prog");<BR>&nbsp;&nbsp; MPI_Finalize();<BR>&nbsp;return 
    0;<BR>}<BR><BR>Source for prog<BR>#include "stdafx.h"<BR>#include 
    "mpi.h"<BR>int main(int argc, char* argv[])<BR>{<BR>&nbsp;&nbsp; MPI_Init( 
    NULL, NULL );<BR>&nbsp;&nbsp; MPI_Finalize();<BR>&nbsp;&nbsp; return 
    0;<BR>}<BR><BR>I get the following error when I run test:<BR><BR>&gt;mpiexec 
    -n 1 test<BR>MPIDU_Sock_post_connect failed.<BR>[0] PMI_ConnectToHost 
    failed: unable to post a connect to Yellowtail 
    yellowtail<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    :2057, error: Unknown error class, error 
    stack:<BR>MPIDU_Sock_post_connect(1228): unable to connect to Yellowtail 
    yellowtail<BR>&nbsp;on port 2057, exhausted all endpoints (errno 
    -1)<BR>MPIDU_Sock_post_connect(1275): unable to connect 
    to&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    on port 2057,<BR>&nbsp;No connection could be made because the target 
    machine actively refused it. (er<BR>rno 
    10061)<BR>MPIDU_Sock_post_connect(1275): unable to connect to yellowtail on 
    port 2057, No<BR>connection could be made because the target machine 
    actively refused it. (errno<BR>10061)<BR>MPIDU_Sock_post_connect(1275): 
    unable to connect to Yellowtail on port 2057, No<BR>connection could be made 
    because the target machine actively refused it. 
    (errno<BR>10061)<BR>uPMI_ConnectToHost returning PMI_FAIL<BR>[0] PMI_Init 
    failed.<BR>Fatal error in MPI_Init: Other MPI error, error 
    stack:<BR>MPIR_Init_thread(294): Initialization 
    failed<BR>MPID_Init(83)........: channel initialization 
    failed<BR>MPID_Init(334).......: PMI_Init returned -1<BR>&gt;<BR><BR>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) .<BR><BR><BR>I'd be 
    gratefull for any help.<BR><BR><BR>Thanks<BR><BR>Rod Cook<BR>&nbsp;</FONT> 
    </P></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>