This book is the raw material for a hands-on, "workshop" type course for undergraduates or graduate students in parallel programming. It can also serves as the core of a more conventional course; and it might profitably be read (we hope and believe) by any professional or researcher who needs an up-to-date synthesis of this fast-growing, fast-changing and fast-maturing field.
By a "workshop" course we mean a course in which student projects play a major part. The exercise sections at the end of each chapter are integral to the text; everyone who consults this book should (at least) read them. Problems in chapters 2 through 5 lay the groundwork; the exercise sections in the last four chapters each center on a detailed investigation of a real and substantial problem. For students who pursue them seriously, these programming problems will require time, care and creativity. In most cases they lack stereotyped solutions. Discussion of student efforts can and ought to play a significant part in class meetings.
The programming examples and exercises use C-Linda (Linda is a registered trademark of Scientific Computing Associates.); C-Linda running on a parallel machine or a network is the ideal lab environment for the workshop course we've described. A C-Linda simulator running on a standard workstation is an adequate environment. Relying on some other parallel language or programming system is perfectly okay as well. The called-for translations between the book and the lab environment might be slightly painful (particularly if the non-Linda parallel language you choose is any variant of the ubiquitous message-passing or remote-procedure-call models), but these translation exercises are always illuminating, and anyway, they build character.
The "more conventional" course we mentioned would deal with parallel systems in general. Parallel software is still the heart and soul of such a course, but teachers should add some material to what is covered in this book. We would arrange the syllabus for such a course as follows: