Next: Active Messages and Variants
Up: Related Work
Previous: Tulip
  Contents
According to the Nexus [24] developers,
Nexus is a portable library providing the multithreading, communication, and
resource management facilities required to implement advanced languages,
libraries, and applications in heterogeneous parallel and distributed computing
environments. Its interface provides multiple threads of control, dynamic
processor acquisition, dynamic address space creation, a global memory model
via interprocessor references, and asynchronous events. Its implementation
supports multiple communication protocols and resource characterization
mechanisms that allow automatic selection of optimal protocols.
Nexus is a cooperative effort between Argonne National Laboratory, the
USC/Information Sciences Institute, the Aerospace Corporation, and the High
Performance Computing Laboratory at Northern Illinois University. Nexus is
probably the one system most closely related to Converse. Both Nexus and
Converse provide the same basic facilities, active messages and threads.
However, there are some significant differences in design philosophy between
the two. The following list summarizes the differences between the two.
- In Nexus, if two processors share memory, they share all variables. There
is no mechanism to allow an individual processor to have private data. This
makes it difficult to implement functions like malloc efficiently.
Converse makes it possible to choose whether a resource (like the malloc
heap) is to be shared between processors or private. This choice can be made on
a resource-by-resource basis.
- Converse threads are nonpreemptive, whereas Nexus threads are usually
preemptive. Nonpreemptive threading, in combination with the processor-private
data described earlier, almost completely eliminates locking and the need for
thread-safe libraries. On the other hand, the preemptive threads in Nexus will
be more useful in real-time or interactive systems.
- Nexus thread-blocking primitives (mutexes and condition variables) are at
a higher level of abstraction than Converse thread-blocking primitives
(suspend, awaken, thread identifiers). The ones in Converse are less
expensive, which may be relevant to language implementers.
- Nexus has two features not present in Converse. First, Nexus can
convert the data format of one machine to the data format of another, enabling
the use of heterogeneous networks. Second, Nexus can dynamically add
workstations to the set of processors it is using. These two features are
clearly advantageous in certain cases. On the other hand, both have a cost, in
that they complicate the Nexus API significantly.
- Converse includes convenience modules for dynamic load-balancing,
futures, automatic parameter marshalling, tag-based message lookup, and many of
the other functions a language implementer may want. Nexus is more minimalist,
providing only what is strictly needed.
Next: Active Messages and Variants
Up: Related Work
Previous: Tulip
  Contents
Milind Bhandarkar
2002-06-12