In this chapter, we describe Compositional C++ (CC++ ), a small set of extensions to C++ for parallel programming. CC++ provides constructs for specifying concurrent execution, for managing locality, and for communication. It allows parallel programs to be developed from simpler components using sequential, parallel, and concurrent composition. Hence, algorithms designed using the techniques described in Part I can be translated into CC++ programs in a straightforward manner.
Since the CC++ extensions are simple, we are able in this chapter to provide both a complete language description and a tutorial introduction to important programming techniques. We also provide a brief review of those C++ constructs used in this chapter, so as to make the presentation intelligible to readers familiar with C but not C++ . In the process, we show how the language is used to implement various algorithms developed in Part I.
After studying this chapter, you should be able to write simple CC++ programs. You should know how to create tasks; how to implement structured, unstructured, and asynchronous communication patterns; and how to control the mapping of tasks to processors. You should also know both how to write deterministic programs and when it is useful to introduce nondeterministic constructs. Finally, you should understand how CC++ supports the development of modular programs, and you should know how to specify both sequential and parallel composition.
© Copyright 1995 by Ian Foster