Subject: user's guide

From: [email-masked] (Peter Pacheco)
Date: Mon, 9 Aug 93 19:17:23 PDT

Salutations!

If we're to have a successful standard, it seems very important that
we have a User's Guide.  So I thought I would try to get the ball
rolling on this.  I've appended a draft table of contents with
a few notes.

We definitely need suggestions for sample programs that we
can include in the Guide.  At the beginning of the Guide, it 
would be good to have some short, easy programs to get the user 
started.  Later on, of course, it would be good to have some
longer, more sophisticated programs.  Throughout the Guide, 
it would be useful to have short examples illustrating various 
features of MPI.

So send your questions, comments, criticisms . . .

					Do your worst,
					Peter Pacheco
					Department of Mathematics
					University of San Francisco
					San Francisco, CA 94117
					(415) 666-6630
					[email-masked]

Introduction.
    [Brief discussion of history and purpose of MPI.]
    [Quick overview of MPI.]
    [Pointers to literature on parallel processing for those 
	users who need more background before reading the Guide.]

Chapter I.  Basic message passing using MPI.
    1.  MPI_SEND and MPI_RECV.
    2.  Basic program.
        [How about calculating a definite integral using the
        trapezoidal rule.  Include source code with mpi_init, 
	or whatever is decided on.  Will we also need to call
	mpi_iomode?]
    3.  More short examples.
    4.  Some short exercises.

Chapter 2.  Collective communication using MPI.
    1.  Making the basic program run faster.
	[Assuming trapezoidal rule:]
        (a)  Roll-your-own global sum.
        (b)  MPI_REDUCE.
    2.  Other MPI collective communication routines and examples.
        [Defer detailed discussion of some routines to appendix?]
        (a)  Barrier.
        (b)  Broadcast.
        (c)  Gather.
        (d)  Scatter.
        (e)  Scatter_gather.
        (f)  All_cast.
	(h)  Scan.
    3. Short exercises.

Chapter 3.  Writing larger programs with MPI.
    1.  Communicators (using naive user functions).
    2.  Topologies.
    3.  Writing programs that partition data.
        [A possible example:  Solve a pde using finite 
	differences on a mesh.]
    4.  Writing programs that partition control.
        [A possible example:  Supervisor-worker type 
	problem, e.g., find the chromatic number of a graph
	using the chromatic polynomial.]
    5.  Other Examples.
    6.  Estimating Performance.
    7.  Short Exercises [on use of communicators, etc.]

Chapter 4.  Debugging and Profiling.
    [Do we need this chapter?  MPI, of course,
    mandates nothing about debuggers or profilers.
    However, if the Guide is to be useful to the
    infamous "naive" user, it might be a good
    idea to include something here.]

Chapter 5.  Making your program run faster.
    1.  A quick overview of what happens when a message is sent.
    2.  Non-blocking communication in MPI.
    3.  User-defined buffering in MPI.
    4.  Parallel libraries and contexts.
    5.  Exercises.

Chapter 6.  Everything you always wanted to know about MPI.
    1.  Environmental enquiry functions.
    2.  More on communicators, groups, and contexts.
    3.  Exercises.

[Do we want a section on what's NOT in MPI, e.g., parallel i/o?
It also might be appropriate to include a section with
pointers to the literature on parallel algorithms.]

Appendix A.  A summary of MPI.

Bibliography.