blob: 0c48193973a18624df3f770f9c34836bee0e5cd2 [file]
% preface.tex
\chapter*{Preface}
The purpose of this book is to help you understand how to program
shared-memory parallel machines without risking your sanity.\footnote{
Or, perhaps more accurately, without much greater risk to your
sanity than that incurred by non-parallel programming.
Which, come to think of it, might not be saying all that much.
Either way, Appendix~\ref{cha:app:Important Questions} discusses
some important questions whose answers are less intuitive in
parallel programming than in sequential programming.}
By describing the algorithms and designs that have worked well in
the past, we hope to help you avoid at least some of the pitfalls
that have beset parallel-programming projects.
But you should think of this book as a foundation on which to build,
rather than as a completed cathedral.
Your mission, if you choose to accept, is to help make further progress
in the exciting field of parallel programming---progress that should
in time render this book obsolete.
Parallel programming is not as hard as some say, and we hope
that this book makes your parallel-programming projects easier and
more fun.
In short, where parallel programming once focused on science, research,
and grand-challenge projects, it is quickly becoming an engineering
discipline.
We therefore examine the specific tasks required for parallel programming
and describe how they may be most effectively handled.
In some surprisingly common special cases, they can even be automated.
This book is written in the hope that presenting the engineering
discipline underlying successful
parallel-programming projects will free a new generation of parallel hackers
from the need to slowly and painstakingly reinvent old wheels, enabling
them to instead focus their energy and creativity on new frontiers.
We sincerely hope that parallel programming brings you at least as
much fun, excitement, and challenge that it has brought to us!