next up previous
Next: Concurrency Up: ICC++: A C++ Dialect Previous: ICC++: A C++ Dialect

Introduction

  Illinois Concert C++ (hereinafter ICC++) is designed to bring object orientation to bear on managing the complexity of concurrency and distribution in parallel programs. By integrating concurrency and the object model, ICC++ facilitates the construction of programs which exploit irregular and adaptive computational methods and intricate distributed data structures. The design of ICC++ was driven by two goals: providing a clean object model in a concurrent context and permitting the expression of concurrency with minimal disruption to the structure of C++.

Furthermore, ICC++ is structured to permit the application of modern compiler optimization techniques, especially aggressive interprocedural analyses and transformations. This design enables ICC++ to support:

  1. construction of concurrent data abstractions;
  2. convenient expression of irregular and fine-grained concurrency;
  3. high sequential and parallel performance; and
  4. single source code for sequential and parallel program versions.

We believe that these elements are necessary for the widespread acceptance of concurrent object-oriented programming. In the following text, we describe each of them in greater detail. 1) Data abstraction is the key feature of object-oriented programming; it must be possible to build abstractions and ensure their correctness in the face of concurrent operations upon them. Object-oriented programs are by their nature fine-grained, with many objects and small procedures; the natural expression of concurrency is often in these units. To preserve a natural object-oriented programming style, concurrency must be expressed within this structure. 3) Performance is a major justification for parallelism, so high performance is essential. Because many parallel programs are also executed on sequential platforms, parallelizing a program must not preclude its efficient execution on one or a small number of processors. 4) Single source code is important because the vast majority of software is developed for uniprocessors. Having a single source code dramatically increases the accessibility of concurrency by allowing programs to be parallelized without radical rewriting.

To support the four requirements detailed above, ICC++ provides three key features:

Extensional concurrency constructs:
ICC++ provides language constructs for specifying potential concurrency, i.e. for specifying a partial order of execution. This allows an implementation to serialize execution as necessary for efficiency. These constructs introduce concurrency incrementally, thus allowing it to be introduced without disturbing program structure.

An object consistency model:

ICC++ specifies an object consistency model which allows programmers to reason about a data abstraction's correctness. Furthermore, ICC++ also provides concurrency guarantees for objects that enable programmers to reason about progress.

Because it may be preferable to implement a data abstraction with several objects, the consistency model can be extended across multiple objects.

Integrated arrays and objects:
ICC++ integrates arrays and objects in object collections: arrays with an extensible object interface. Collections can have member functions and be used to build concurrent abstractions.

These three key features are explained in Sections 1.2 to 1.4. Section 1.5 discusses the unstructured concurrency primitives of ICC++. The implementation and performance of the polygon overlay program are described in Sections 1.6 and 1.7 respectively. Section 1.8 discusses related work and issues and Section 1.9 closes by summarizing the chapter.


next up previous
Next: Concurrency Up: ICC++: A C++ Dialect Previous: ICC++: A C++ Dialect

Julian Dolby
dolby@cs.uiuc.edu