The book is now out of print, and is made available electronically by kind permission of MIT Press.
The main subject of this book is the interesting and powerful class of functional programming languages, and their application to parallel programming. The reason for choosing such a language is the ease with which such programs can be manipulated algebraically, and the bulk of the book is devoted to introducing and demonstrating this in action.
It is through the algebraic manipulation of programs that the problems of parallel programming are addressed. We retreat from the hope that a single program will serve for all the different parallel computers we might wish to use, and instead begin with a single specifying program. Versions for different target architectures can then be derived by the application of a toolbox of reusable mathematical transformations, leading to versions tuned to the various machine structures available.
After giving a thorough introductory grounding to both writing and manipulating functional programs, this book then illustrates how these techniques can be used to specify, reason about and implement parallel programs for a variety of multiprocessor systems, but in particular a class of loosely-coupled multiprocessors whose operation can be described by a process network.
The book concludes by introducing an extended functional language in which the functional program text is augmented with a declarative description of how processes are partitioned and mapped onto a network of processing elements. The purpose of these annotations is to provide an abstract description of the process network specified by the program so that an efficient mapping of processes to processors can be carried out by the compiler.
Full text: pdf, compressed postscript (370KB)
I'm afraid a few of the diagrams are missing; for this you'll have to find a printed copy of the book!