The target audiences for this book are people interested in high-level parallel programming languages, Dataparallel C programming, or the compilation of such languages for parallel computers. As with many books that try to hit too many targets, this book could be a disappointment, particularly for the first two audiences. Only about 14 pages focus on programming languages in general. The book serves somewhat better as a Dataparallel C reference. The programming model discussed is based on virtual processors, global name space, and synchronous execution of a single instruction stream. These and other programming details are explained clearly and illustrated with numerous examples.
The book is divided into eight chapters:
Introduction
Dataparallel C Programming Language Description
Design of a Multicomputer Dataparallel C Compiler
Design of a Multiprocessor Dataparallel C Compiler
Writing Efficient Programs
Benchmarking the Compilers
Case Studies
Conclusions
It also includes three appendices containing performance data for different machines, a bibliography, and an index. The index is sparse. For example, even though virtual topology is important to the model presented, and several significant discussions of virtual topologies are included in the book, only one is cited in the index. This book serves best as an introduction to compiling data parallel programs for multiprocessors and multicomputers. On both types of architecture, supporting virtual processors and dealing with asynchronicity are prime concerns. Also, on multicomputers, support must be provided to overcome the lack of a global name space, and on multiprocessors the number of barrier synchronizations must be minimized to provide reasonable performance. Overall, the discussions of compilation for both types of architecture are readable and understandable. In particular, the authors are good at dealing with one issue at a time and providing examples that illustrate their points. The chapters on compilation provide introductory insight into some of the issues involved in designing and implementing a working, albeit experimental, parallel compiler for the compilation of data parallel programs for multiprocessors and multicomputers. The authors point out what style of programming should be used to obtain good performance on the various target architectures and why. They say that, “given the current state of the compilers, you must assume a large amount of responsibility for the efficient execution of the compiled programs.…There will always be a need for the programmer to learn a programming style that helps the compiler generate good code.”