Newsgroups: comp.parallel.mpi
From: furnish@dino.ph.utexas.edu (Geoffrey Furnish)
Subject: Re: The Answer: C++ Binding of MPI
Organization: Institute for Fusion Studies, University of Texas at Austin
Date: 03 May 1995 21:43:46 GMT
Message-ID: <FURNISH.95May3164346@dino.ph.utexas.edu>

In article <3o5h6q$d2e@ftp.univie.ac.at> gl@coil.mdy.univie.ac.at (Gerald Loeffler) writes:

> A week ago I asked for C++ bindings of MPI. The response was not
> overwhelming: I got two (2) answers telling me to use the
> C-binding. Thanks, folks!

> Nevertheless, by accident I found the answer myself; and just in
                                    ^an^   :-).
> case someone is interested, here it is:
> 
> 	Mississippi State University is developing MPI++, an object-oriented
> 	C++ binding of MPI, that uses ZipCode syntax (!!!!) rather then MPI
> 	syntax for message datatypes. In hope that the other aspects of the
> 	binding are more MPI-like, I will have a look at it.
> 	The only URL I have deals with a paper about it:
> 	ftp://aurora.cs.msstate.edu/pub/reports/MessagePassing/oon-ski94.ps.Z

I am not entirely certain what you intend to mean by "C++ bindings" to
MPI.  The approach taken by the MPI++ authors, which I would describe
as (mind you, I am not one of the authors, you should check with them
too):
	repackaging of the MPI API into functional categories
	represented by C++ classes

is certainly one way of approaching the problem of using MPI from C++.

One could ask for even more.  Driven by frustration at the relative
dearth of C++ based approaches to parallelism, a coworker and I have
created our own library based approach which augments the messaage
passing interface provided by MPI (and NX too, for that matter) with a
set of abstractions for representing what we call "canonical forms" of
message passing.  That is to say, when writing parallel programs with
message passing libraries such as MPI, certain canonical forms of
communication occur with some frequency.  C++ can be used to
encapsulate these constructs in a way which makes them easier to use.

Beyond that, one might ask the message passing API be extended to
simplify data passing through automatic recognition of the data type.
Our library does some to extend the concept of C++ static typing to
the message passing API (which on MPI and some other libraries,
generally works through type-unsafe void *'s).

Anyway, this approach certainly carries a different emphasis than
MPI++; you may want to take a look...

		Canonical Classes for Concurrency Control

The Canonical Classes for Concurrency Control (C4), is a library of
C++ classes which assist in parallel programming.  C4 provides objects
which implement a variety of synchornization and data transmission
paradigms.  Some of these exploit aspects of the C++ language to
provide specific high level control semantics.  Others export an
abstracted interface of some high level construct, allowing the user
to specialize for use with his own classes.

The primary emphasis in C4 is on elevating the abstraction level of
parallel programming through the use of object oriented programming
methods.  C4 is not an "API wrapper" per se; although it does
contain some global functions which ease the use of message passing
API's, this is not the primary focus.

Some examples of specific classes provided by C4 are:

	Spinlocks	(various forms)
	NodeInfo	(multicomputer configuration info)
	Bswap<T>	(typesafe buffer swap)
	DeepObj
	DeepBSwap	(transmit objects with complex internals)
	Baton<T>	(value passing spinlock)

<T> indicates the use of C++ templates.

The programming model for C4 is message passing, and it currently
supports both Intel's NX and the increasingly popular MPI.  Both of
these environments are available for use on networks of workstations.
Between them, NX and MPI cover almost the entire commercial market for
massively parallel supercomputers.

AVAILABILITY

C4 is developed at the University of Texas at Austin and is
distributed under the terms of the Library Gnu Public License.  All
files in the distribution are covered by the LGPL.  No further
per-file attribution is made at this time.

C4 is available via anonymous ftp from:

	dino.ph.utexas.edu:/furnish/c4-DATE.tar.gz

There is a World Wide Web page at:

	http://dino.ph.utexas.edu/~furnish/c4

And there is a majordomo mailing list:

	c4@dino.ph.utexas.edu

If you don't know how to use majordomo, you can for example, send mail
to c4-request@dino.ph.utexas.edu with "subscribe" in the body.  The
list is archived, and you can obtain some files using majordomo
"index" and "get" commands.  Membership on the list is not required
for these operations.

C4 uses the C++ Data Structures Library, available at the same host:

	dino.ph.utexas.edu:/furnish/ds++-DATE.tar.gz

You will need to get DS++ and install it before you will be able to
use C4.

AUTHORS

C4 was written by:

	Geoffrey Furnish	furnish@dino.ph.utexas.edu
	Maurice LeBrun		mjl@dino.ph.utexas.edu

-- 
--
Geoffrey Furnish
UT Institute for Fusion Studies,  furnish@dino.ph.utexas.edu   512-471-6147
MCC Experimental Systems Lab,     furnish@mcc.com              512-338-3717

	"Pushing back the boundary of inanity."

