Rather than being an introduction to parallel programming, this book is an introduction to a new programming language called Par. It is also an introduction to a new style of programming with annotations. Coffin assumes his readers have a basic understanding of parallel computing and compiler construction. Although quite a few programming examples are given, the book has no proofs or formulas, so it can be read easily.
Par is a language that Coffin designed as a doctoral student at the University of Arizona. Combined with generalized directives, called annotations, Par is intended for the development of portable applications for shared-memory, multiple instruction, multiple data (MIMD) architectures. Portability is accomplished by segregating the algorithm from the mapping and scheduling annotations. Annotations carry two powerful notions. First, they cannot affect program correctness. This property would be a welcome addition to most parallel programming models used today. Second, they are encoded using the Par language itself. Programmable compiler directives have the potential of being reused and standardized. Par does have some serious drawbacks. For example, Par has been designed for a shared-memory, fork-join model of computation. It is therefore not well suited to work sharing or strictly message-passing systems. Also, Par has never been implemented. So, although the concepts introduced in this book are important and quite interesting, do not expect to order a Par compiler anytime soon.
On the brighter side, Coffin includes a good chapter on related work at the end of this book. He describes some recent developments in the area of parallel compilers. This summary includes a discussion of the efforts to parallelize currently popular programming languages. It also covers work on less popular programming languages for parallel computation.
Overall, this book is interesting, but I question its usefulness as a trade book. It should have been focused into a transaction or generalized into a survey and submitted to a journal. Also, since Par has not been implemented, the title is misleading. Only one chapter covers the Par programming language itself, so this book is far from a language tutorial. Finally, the author should have stated in the preface that Par has not been implemented. Saving this critical bit of information until chapter 5 is not fair to the reader.