Q: What is HPC++?
A: HPC++ is an API (application programmers interface)
to a runtime system for doing computations and other tasks in parallel.
It provides the ability for applications running in different address spaces
(contexts) to communicate with each other, to share data, and to invoke
remote member functions. HPC++ also provides a multithreaded environment
to facilitate the overlapping of computation and communication.
Q: What is Tulip?
A: Tulip is an implementation of the HPC++ API. In particular,
Tulip is designed to be fast, taking advantage of the fastest communication
hardware available. It uses zero-copy DMA (direct memory access)
whenever possible, saving time and the kernel services necessary to buffer
data transfer. It also provides a user-level thread package which
is faster than most POSIX thread implementations, which are scheduled by
the kernel. So by using Tulip, one is able to build fast multithreaded
applications which take advantage of shared memory multiprocessor designs,
while at the same time using fast zero-copy data transfer between SMP boxes.
Q: Why else might I want to use Tulip?
A: The Tulip runtime is a fundamental component of the design of several application frameworks at Los Alamos National Laboratory (e.g., POOMA). If you want to be a good citizen while using these frameworks you will not want to use a threading and communication system which interferes with those of the framework. Tulip will also take advantage of HIPPI and Myrinet on machines using this communication hardware.
Q: Why might I not want to use Tulip?
A: Tulip was designed to be fast and make several assumptions
inorder to be fast. The primary assumptions of Tulip are that the
machine architectures are homogeneous and that threads are not preempted.
If you need to communicate between machines with different binary arhitectures
you will need to use HPC++ layered on an implemetation other that Tulip,
for instance, Nexus. This will be slower but it will allow you to
get your messages through.
Q: What does the HPC++ API look like?
A: Well for starters it is object oriented and widely uses
the C++ templating mechanism. HPC++ uses a global pointer metaphor
for references to remote data. One transfers data using get and put
semantics. HPC++ was designed as a thin layer runtime layer used
by the framework designer and compiler writer, so it may not have all of
the objects and services that you might like. For instance, it does
not provide a distributed object interface to the application programmer.
If this is a style you prefer, build your own object wrappers on top of
the HPC++ API that can give you a distributed object orientation.
If you build nice services on top of HPC++, let us know; share your code
with us and we will put it in a contrib directory for all to use.
Remember, regarding the API, our design is to lean and mean.
Q: How does HPC++ relate to CORBA, which also can be used to build and run applications in a distributed environment.
A: HPC++ provides a thin C++ layer over various communication
software layers and system services on parallel architectures.
CORBA provides a rich variety of services and allows a variety of programming
languages in which to implement applications. However, since it was
primarily designed for client/server applications distributed over the
internet, it uses TCP/IP for communication and is slow compared to the
communication speed necessary to support communication between parallel
applications.