About HPC++

The goal of the HPC++ project is to develop a C++ class and template library that will support a wide range of high-performance parallel and distributed applications in a portable fashion.

The object oriented paradigm has proven extremely useful to model parallel programming concepts as evidenced by languages such as pC++, CC++, MPC++ and libraries and development environments such as Pooma, Paws and ABC++. In this paradigm, an object (or a set of objects) in the application's target language represents a resource that is accessed (typically) by remote clients to get some work done. The resource can be a compute resource such as a linear system solver or a data resource such as a database shared by a set of clients. As is also evident from the above mentioned languages and libraries, C++ has invariably been used as the target language. C++, in spite of all its shortcomings, provides the most practical object oriented program development environment for high-performance parallel applications (although we like Java as a general purpose object oriented programming language, it is still not ready for high-performance programming, due to its run-time overheads). Thus, an object oriented paradigm in the context of the C++ language seems to be the most suitable combination for developing parallel applications.

As mentioned earlier, many different languages and libraries have been developed to support parallel applications. So the natural question to ask is "Why develop another parallel programming language?" In other words, "What is unique, new and significant about HPC++ that sets it apart from these other systems and makes it more useful?" The answer lies in the development effort of HPC++. The HPC++ specification was defined by a large team of people that developed many of the systems mentioned above. The HPC++ development effort aims to capitalize on the lessons learned from the previous efforts and tries to put together the most useful abstractions and mechanisms to create a single cohesive development environment suitable for most high-performance parallel applications. It is an attempt to build a common foundation for developing diverse high-performance parallel applications in a portable fashion. Following is a brief description of the features supported by HPC++. More details regarding various HPC++ features can be found in the Documentation sections.

HPC++ supports constructs to develop both task as well as data parallel applications. By virtue of its support for multiple contexts, it can support large parallel applications; while its multi-threaded model can be used to support small parallel applications. It is suitable for running applications on a wide variety of machines, ranging from desktop workstations, SMP machines (ranging from small machines such as the SGI Power Challenge to large machines such as the SGI/Cray Origin 2000), to distributed memory machines (such as the IBM SP2). It can work efficiently in a small LAN environment with no security requirements, but with the help of the Globus toolkit it can also work in an insecure environment with requirements of user authentication and authorization. HPC++ provides a high bandwidth communication mechanism, and via the Nexus communication library, it is also able to utilize different communication methods and custom protocols (albeit with some extra work on part of the application programmer).

HPC++ supports the standard high-level mechanism of transparent remote method invocation using a stub compiler (similar to Corba and Java RMI), which can be used to invoke remote global functions as well as member functions on remote objects. It supports facilities to create new contexts on remote machines and to attach to existing contexts so that they can join an ongoing parallel computation. It provides full remote exception handling, so that remote servers can throw exceptions to clients.

Considering the usefulness of the Java language for GUI development (and also recognizing its potential as a base for the development of high-performance applications), the HPC++ team has also developed a version of Java RMI (called NexusRMI), whose on-the-wire protocol is compatible with that of HPC++. Thus Java programs can use NexusRMI to transparently communicate with HPC++ objects and vice-versa. Full exception handling between Java and HPC++ contexts is also supported.

As an example of the usefulness of HPC++ for the development of high-performance parallel applications, the Extreme Computing group has developed CAT (Component Architecture Toolkit), which is a component framework for the development of large applications by connecting together application components as ICs. A Problem Solving Environment for Linear Systems Analysis (PSELSA) already exists as an application using the CAT.

[ IU CS ] [ Extreme! Computing ] [ HPC++ ]

Last modified: Thu Feb 4 15:09:15 EST 1999