CDS & MPI

By far, the most common reason people give for not considering CDS is the belief that MPI is already more than adequate, and it is a standard, while CDS is not.  This motivates us to address these issues here.  elepar believes that if people can make the choice based on hard facts, CDS will appear quite attractive, even to those who have their doubts due to the "non-standard" nature of CDS.  A point-by-point comparison between CDS and MPI would be far too long and complex to be useful, so we restrict this discussion to philosophy and design approach.

Differences in philosophy

Perhaps the most important philosophical difference between CDS and MPI is that of overall goal.  MPI, as its name implies, is a message passing interface, and message passing is a mechanism for facilitating inter-processor communication by utilizing distributed copying (i.e. where one process specifies the source of the copy and the other specifies the destination).  CDS, on the other hand, is for facilitating inter-process communication, regardless of whether those processes are on different processors or on the same processor, or share memory or don't.  CDS is therefore a means of expressing the data sharing policies of the individual processes, and then utilizing the most efficient mechanisms (which may include message passing) to facilitate those policies.

A lower-level philosophy which crept into MPI (and then necessarily remained there throughout) was the lack of reliance on "agents".  An agent, in this context, corresponds to the idea of a daemon, a utility thread, or a communication co-processor:  It is an entity which has access to some portion of a process's information (i.e. data space), and is capable of responding to external requests for that information without the direct involvement of the process (or main thread in the process) itself.  As a general rule, any feature or requirement which would require the use of agents in its implementation (for one or more architectures) was excluded from MPI. CDS, on the other hand, assumes the presence of some limited access to remote processes which may require the use of agents (just as other message-passing models require agents to queue incoming messages).

This philosophical difference has motivated many other differences.  It means that in MPI, no communication (whether message passing or one-sided or broadcast) can be assured to take place without the involvement of processes on both sides of the communication.  It is the reason that an MPI_SEND, for example, is not guaranteed to even queue the message in the receiver, and therefore is not guaranteed to complete until the matching MPI_RECV has been performed.  It is the reason that many operations in MPI are "collective", meaning that all involved processes must perform the operation (usually requiring or serving as a global synchronization, and requiring that all processes use identical arguments).  It is the reason that the one-sided MPI operations are rather complex.  On the other hand, in CDS, a few simple forms of one-sided communication (enq, deq, read, and write) are assumed to complete with the involvement of only one process, and therefore to require an agent (acting for the other process) on some systems (though with barely more functionality than that already supported by existing architectures to facilitate message queueing).  From these basic one-sided operations springs the functionality of the rest of CDS, including shared memory, message passing, and multi-to-multi operations.  elepar believes that the additional asynchronous behavior possible in CDS more than justifies the presence of an agent by creating more efficient programs--i.e. ones that require fewer synchronizations and less necessity for manual load balancing.

Another related philosophical difference is the placing of a high value on static process creation, while CDS views dynamic process creation as normal.  In a similar vein, all processes in an MPI program are known to all others, by virtue of being part of the MPI_WORLD communicator, while in CDS, an information-hiding approach is taken which values the revelation of a process's identity only to those other processes which may have dealings with it.

MPI was designed to be fully functional in a Fortran environment.  CDS, while arguably as functional as MPI in a Fortran environment, relies on C-like pointers to achieve the utmost in efficiency, and since such pointers are unavailable in standard Fortrans, the Fortran programmer is slightly limited relative to the C programmer in some cases (though is never completely excluded from any CDS functionality in Fortran).  Interestingly, even MPI-2 found conformance to Fortran90 too difficult to attain, and therefore has not published a Fortran90 binding.

Differences in design approach

Perhaps the most apparent differences in CDS and MPI come from their very different design approaches.  MPI was designed in two stages (MPI-1 and MPI-2), and each stage (especially the latter) involved a rather large number of self-selected designers from academia and industry, broken up into subcommittees, each led by a "chapter author".  This approach had several impacts on the design: The CDS design, on the other hand, has so far been completely controlled and led by a single person, which is not to say that good ideas and suggestions have not come from other sources.  In fact, in addition to several other sources, CDS has the benefit of the MPI design rationale and experience.  During this time, CDS did not have a large installed base, and so design changes were as simple as the stroke of a pen (or mouse).  As a result, CDS is compact, cohesive, and easy to understand. Now that CDS has progressed to its current state of maturity, elepar believes that it is ready to be exposed to a more traditional standards process, to help assure the stability and viability which some potential users will require.

Copyright 2000 © elepar   All rights reserved