Overview of pC++/Sage++
(version 1.7 / Sep 9 1994)
pC++ is a portable parallel C++ for high performance computers. pC++
is a language extention to C++ that permits data-parallel style
opertations using "collections of objects" from some base "element"
class. Member functions from this element class can be applied to the
entire collection in parallel. This allows programmers to compose
distributed data structures with parallel execution semantics. These
distributed structures can be aligned and distributed over the memory
hierarchy of the parallel machine much like HPF. pC++ also include a
mechanism for encapsulating SPMD style computation in a thread-based
pC++ code is extremely portable. Just like Cfront translates C++ code
into standard ANSI C that can be passed to the native C compiler, the
pC++ preprocessor (written using Sage++) translates pC++ into C++,
which is then compiled on the target architecture. Currently, pC++
has run-time systems for the following parallel machines:
Furthermore, code can be developed and tested on the following
- Thinking Machines CM5
- Silicon Graphics Challenge
- Kendall Square KSR1
- Intel Paragon
- Meiko CS2
- IBM SP1
- BBN TC2000
- Sequent Symmetry
- homogeneous networks of workstations (PVM)
pC++ comes with a prototype version of the TAU tools (Tuning and
Analysis Utilities), a visual programming and performance analysis
environment for pC++. It is based on Sage++. The following four tools
- HP hpux
- DEC Decstation (MIPS based)
- DEC Alpha
- Cray C90
- SGI Irix
- IBM RS6000
There is also tau, the TAU tools main control tool. It allows you to
start the other tools, provides on-line, hyper-text help and some
global functionality like loading another .dep file (the internal
program tree form for pC++ programs).
- fancy (File ANd Class displaY) lets you browse through
the files and classes used in the source text of the application, and
lets you display the source text of functions, methods, or classes.
- cagey (CAll Graph Extended displaY) lets you browse
through the static call graph of the application.
- classy (CLASS hierarchY browser) displays the class
hierarchy defined in the current user application.
- racy (Routine and data ACcess profile displaY) is a
parallel profile data viewer. After compiling an application for
profiling and running it, racy lets you browse through the function
and collection profile data generated.
There is also an experimental prototype of breeze, the barrier
breakpoint debugger for pC++. Use with care.
1. Yes, you can call Fortran from pC++... even Thinking Machines
"node" subset of CMF.
2. pC++ 1.x does not support the type of task parallelism you would
need to do a distributed OS. It is intended for data-parallel
problems only. In the future, there will be more support for task
parallelism by providing ways in which pC++ will work with other
object oriented systems. Watch this space for version 2.0.
Sage++ is an object-oriented compiler preprocessor toolkit. Using Sage++
to transform source code is a three step process:
- PARSING: Source code, either FORTRAN, pC++, or C, is parsed and
saved as a machine-independent parse tree (".dep" file).
- RESTRUCTURING: The ".dep" file is read by a Sage++-built
restructuring tool. Sage++ uses member functions to manipulate the
parse tree. For example, a restructuring program written with Sage++
could identify function-call sites, add variables, optimize loops, add
tracing functions, or globally replace variables. After the parse
tree has been modified, the new ".dep" file is saved.
- UNPARSING: The new ".dep" file is "unparsed", recreating the
source code and reflecting the changes that were made to the parsed
form. After unparsing, the source code can be compiled with the native
Currently, the pC++/Sage++ system includes about 212K lines of code.
For more information about pC++/Sage++, including the user's guides,
view the On-line Documentation or the Program Files from the
Last updated: Tue Jan 26 18:06:10 1999