HPC++ Frequently Asked Questions List

This is a list of frequently asked questions regarding the HPC++ and Tulip runtime system. The format is in terms of a list of questions and answers to them.

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.