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:
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:
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.
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.