Subject: Re: MPI Goals and Scope: More Details Please?

From: [email-masked] (Tom Henderson)
Date: Wed, 10 Mar 93 10:40:35 MST

Bill writes,

> I'd like to clarify what we mean by
> 
>  > We feel that the MPI standard should provide enough information to
>  > specify an entire, source-code portable program.  
> 
> This is NOT intended to mean that MPI must provide a way to specify ANY (or
> even most) source-code portable parallel program.  Rather, given restrictions
> strong enough to satisfy a 2/3rds majority ( :) ), a way to specify at least
> one source-code portable program.  In the spirit of extensibility, whatever
> mechanism is proposed for this simple interface should not preclude non-MPI
> solutions for more demanding situations.
> Bill
> 

Could you give an example of the one source-code portable program (or class of 
programs) you expect MPI to support in current and future versions?  I think 
that might help me understand your statement a bit better.  

Also, what do you mean by "non-MPI solution" and "demanding situations"?  

Thanks,

Tom Henderson
NOAA Forecast Systems Laboratory
[email-masked]

---

From: William Gropp <[email-masked]>
Date: Wed, 10 Mar 93 12:25:51 CST

X-Resent-To: [email-masked] ; Wed, 10 Mar 1993 12:41:58 EST
   Date: Wed, 10 Mar 93 10:40:35 MST
   From: [email-masked] (Tom Henderson)

Basically, SPMD programs that have "simple" I/O requirements.  For example,
we could ask the following:

   IF fprintf (C) or write (Fortran) are supported, THEN each use writes
   to the selected file, with NO guarentees on the ordering of output.
   Something similiar for fscanf/read .

Thus, we can now write the following two programs (using the MPI_main startup
approach):

    MPI_main()
    {
    printf( "Hello world\n" );
    }

and 

   MPI_main()
   {
   int i;
   for (i=0; i<MPI_numtids( MPI_GroupAll ); i++) {
	if (i == MPI_RankInGroup( MPI_MyTid(), MPI_GroupAll )) {
	    printf( "Hello world from task %d\n", i );
	    fflush( stdout );
            }
        MPI_barrier( MPI_GroupAll );
        }
    }

This second program could also be implemented by passing a token rather than
a barrier; I've used this for simplicity.

Everything else, such as dynamically creating new tasks, fully MPMD (multiple
Program multiple data) applications, etc.  
Bill