Ah, missed that - afraid I no speakee fortran any more (thankfully got to 
remove that module from my brain 20+ years ago).

On May 5, 2010, at 1:18 PM, Andrew J Marquis wrote:

> Dear Ralph,
> 
>  thanks for that. I have done much the same (as I indicated in my original 
> post). I this case my C-program correctly spawned the slaves and the slaves 
> printed the correctly passed argument lists. On running this and my fortran 
> slave I get:
> 
> nsize, mytid: iargs           2           0 :           1
> spray:   0 1:1 2 3 4             
> 
> nsize, mytid: iargs           2           1 :           1
> spray:   1 1:5 6 7 8             
> 
> 
> which is what I expect.
> 
> I still think the error may well be mine rather that ompi's but I am at a 
> loss to see what is going on !!
> 
> Thanks for the help so far,
> 
> Fred Marquis.
> 
> 
> c-program
> =========
> #include "mpi.h"
> #include <stdio.h>
> #include <stdlib.h>
> 
> int main( int argc, char *argv[] )
> {
>    int np[2] = { 1, 1 };
>    int errcodes[2];
>    char *cmds[2] = { "./spray", "./spray" };
>    char *args[2] = { "1 2 3 4", "5 6 7 8" };
>    char **array_of_argv[2]; 
>       char *argv0[] = {"1 2 3 4", (char *)0}; 
>       char *argv1[] = {"5 6 7 8", (char *)0}; 
>       array_of_argv[0] = argv0; 
>       array_of_argv[1] = argv1; 
> 
> 
>    MPI_Comm parentcomm, intercomm;
>    MPI_Info infos[2] = { MPI_INFO_NULL, MPI_INFO_NULL };
> 
>    MPI_Init( &argc, &argv );
>    MPI_Comm_spawn_multiple( 2, cmds, array_of_argv, np, infos, 
>                             0, MPI_COMM_WORLD, &intercomm, errcodes );
>    MPI_Finalize();
>    return 0;
> }
> 
> On Wed, May 05, 2010 at 07:47:20PM +0100, Ralph Castain wrote:
>> I think OMPI is okay - here is a C sample program and the associated output:
>> 
>> $ mpirun -np 3 ./spawn_multiple
>> Parent [pid 98895] about to spawn!
>> Parent [pid 98896] about to spawn!
>> Parent [pid 98897] about to spawn!
>> Parent done with spawn
>> Parent sending message to children
>> Parent done with spawn
>> Parent done with spawn
>> Hello from the child 0 of 2 on host Ralph pid 98898: argv[1] = foo
>> Child 0 received msg: 38
>> Hello from the child 1 of 2 on host Ralph pid 98899: argv[1] = bar
>> Parent disconnected
>> Parent disconnected
>> Child 1 disconnected
>> Child 0 disconnected
>> Parent disconnected
>> 
> 
> 
>> 
>> 
>> On May 5, 2010, at 12:08 PM, Fred Marquis wrote:
>> 
>>> Hi,
>>> 
>>> I am using mpi_comm_spawn_multiple to spawn multiple commands with argument 
>>> lists. I am trying to do this in fortran (77) using version openmpi-1.4.1 
>>> and the ifort compiler v9.0. The operating system is SuSE Linux 10.1 
>>> (x86-64).
>>> 
>>> I have put together a simple controlling example program (test_pbload.F) 
>>> and an example slave program (spray.F) to try and explain my problem.
>>> 
>>> In the controlling program mpi_comm_spawn_multiple is used to set 2 copies 
>>> of the slave running. The first is started with the argument list "1 2 3 4" 
>>> and the second with "5 6 7 8".
>>> 
>>> The slaves are started OK and the slaves print out the argument lists and 
>>> exit. In addition the slaves print out their rank numbers so I can see 
>>> which argument list belongs to which slave.
>>> 
>>> What I am finding is that the argument lists are not being sent to the 
>>> slaves correctly, indeed both slaves seem to be getting both arguments 
>>> lists !!!
>>> 
>>> To compile and run the programs I follow the steps below.
>>> 
>>> Controlling program "test_pbload.F"
>>> 
>>>  mpif77 -o test_pbload test_pbload.F
>>> 
>>> Slave program "spray.F"
>>> 
>>>  mpif77 -o spray spray.F
>>> 
>>> Run the controller
>>> 
>>>  mpirun -np 1 test_pbload
>>> 
>>> 
>>> 
>>> 
>>> The output of which is from the first slave:
>>> 
>>> nsize, mytid: iargs           2           0 :           2
>>> spray:   0 1:1 2 3 4   < FIRST ARGUMENT           
>>> spray:   0 2:4 5 6 7   < SECOND ARGUMENT             
>>> 
>>> and the second slave:
>>> 
>>> nsize, mytid: iargs           2           1 :           2
>>> spray:   1 1:1 2 3 4   < FIRST ARGUMENT             
>>> spray:   1 2:4 5 6 7   < SECOND ARGUMENT  
>>> 
>>> In each case the arguments (2 in both cases) are the same.
>>> 
>>> I have written a C version of the controlling program and everthing works 
>>> as expected so I presume that I have either got the specification of the 
>>> argument list wrong or I have discovered an error/bug. At the moment I 
>>> working on the former -- but am at a loss to see what is wrong !!
>>> 
>>> Any help, pointers etc really appreciated.
>>> 
>>> 
>>> Controlling program (that uses MPI_COMM_SPAWN_MULTIPLE) test_pbload.F
>>> 
>>>     program main
>>> c
>>>     implicit none
>>> #include "mpif.h"
>>> 
>>>     integer error
>>>     integer intercomm
>>>     CHARACTER*25 commands(2), argvs(2, 2) 
>>>     integer nprocs(2),info(2),ncpus
>>> c
>>>     call mpi_init(error)
>>> c
>>>      ncpus = 2
>>> c
>>>      commands(1) = ' ./spray ' 
>>>      nprocs(1) = 1
>>>      info(1) = MPI_INFO_NULL
>>>      argvs(1, 1) = ' 1 2 3 4 '
>>>      argvs(1, 2) = ' ' 
>>> c
>>>      commands(2) = ' ./spray ' 
>>>      nprocs(2) = 1
>>>      info(2) = MPI_INFO_NULL
>>>      argvs(2, 1) = ' 4 5 6 7 ' 
>>>      argvs(2, 2) = ' ' 
>>> c
>>>     call mpi_comm_spawn_multiple( ncpus,
>>>    1      commands, argvs, nprocs, info,
>>>    2      0, MPI_COMM_WORLD, intercomm, 
>>>    3      MPI_ERRCODES_IGNORE, error )
>>> c
>>>     call mpi_finalize(error)
>>> c
>>>     end
>>> 
>>> Slave program (started by the controlling program) spray.F
>>> 
>>>     program main
>>>     integer error
>>>     integer pid
>>>     character*20 line(100)
>>>     call mpi_init(error)
>>> c
>>>     CALL MPI_COMM_SIZE(MPI_COMM_WORLD,NSIZE,error)
>>>     CALL MPI_COMM_RANK(MPI_COMM_WORLD,MYTID,error)
>>> c
>>>     iargs=iargc()
>>>     write(*,*) 'nsize, mytid: iargs', nsize, mytid, ":", iargs
>>> c
>>>     if( iargs.gt.0 ) then
>>>        do i = 1, iargs
>>>           call getarg(i,line(i))
>>>           write(*,'(1x,a,i3,20(i2,1h:,a))') 
>>>    1       'spray: ',mytid,i,line(i)
>>>        enddo
>>>     endif
>>> c
>>>     call mpi_finalize(error)
>>> c
>>>     end
>>> 
>>> _______________________________________________
>>> users mailing list
>>> us...@open-mpi.org
>>> http://www.open-mpi.org/mailman/listinfo.cgi/users
>> 
> 
>> _______________________________________________
>> users mailing list
>> us...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/users
> 
> 
> -- 
>   ----------------------------------------------------------
>   Dr. A.J. Marquis       Tel:      +44 (0)20 7594 7040
>   Dept. of Mech. Eng.    Fax:      +44 (0)20 7594 1472
>   Imperial College
>   Exhibition Road        E-Mail:   a.marq...@imperial.ac.uk
>   London   SW7 2AZ
> 
>   BOFH: Maintence window broken
> 
>   All views expressed are my own !
>   ----------------------------------------------------------
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users


Reply via email to