There are two conventional modes of executing an HPC++ program. The first is multi-threaded, shared memory where the program runs within one context. Parallelism comes from the parallel-loops and the dynamic creation of threads. Sets of threads and contexts can be bound into Groups and there are collective operations such as reductions and prefix operators that can be applied to synchronize the threads within a group. This model of programming is very well suited to modest levels of parallelism (about 32 processors) and where memory locality is not a serious factor.
The second mode of program execution is an explicit Single Program Multiple Data (SPMD) model where n copies of the same program are run on n different contexts. This programming model is similar to that of Split-C, pC++, AC or C/C++ with MPI or PVM in that the distribution of data that must be shared between contexts and the synchronization of accesses to that data must be managed by the programmer. HPC++ differs from these SPMD systems in that, for HPC++ the computation on each context can also be multi-threaded and the synchronization mechanisms for thread groups extend to sets of thread groups running in multiple contexts. It should also be noted that an SPMD computation need not be completely homogeneous: a program may contain two contexts on one node and one context on each of two other nodes. Furthermore, each of these contexts may contain a variable number of threads.
Multi-context SPMD programming with multi-threaded computation within each context supports a range of applications, such as adaptive grid methods for large scale simulation, that are best expressed using a form of multi-level parallelism.
Last modified: Tue Apr 20 20:58:02 EST 1999