Foreword
John L. Hennessy, President, Stanford University
For a number of years, I have believed that advances in software, rather than hardware, held the key to
making parallel computing more commonplace. In particular, the lack of a broadly supported standard for
programming shared-memory multiprocessors has been a chasm both for users and for software vendors
interested in porting their software to these multiprocessors. OpenMP represents the first vendor-
independent, commercial "bridge" across this chasm.
Such a bridge is critical to achieve portability across different shared-memory multiprocessors. In the
parallel programming world, the challenge is to obtain both this functional portability as well as
performance portability. By performance portability, I mean the ability to have reasonable expectations
about how parallel applications will perform on different multiprocessor architectures. OpenMP makes
important strides in enhancing performance portability among shared-memory architectures.
Parallel computing is attractive because it offers users the potential of higher performance. The central
problem in parallel computing for nearly 20 years has been to improve the "gain to pain ratio." Improving
this ratio, with either hardware or software, means making the gains in performance come at less pain to
the programmer! Shared-memory multiprocessing was developed with this goal in mind. It provides a
familiar programming model, allows parallel applications to be developed incrementally, and supports
fine-grain communication in a very cost effective manner. All of these factors make it easier to achieve
high performance on parallel machines. More recently, the development of cache-coherent distributed
shared memory has provided a method for scaling shared-memory architectures to larger numbers of
processors. In many ways, this development removed the hardware barrier to scalable, shared-memory
multiprocessing.
OpenMP represents the important step of providing a software standard for these shared-memory
multiprocessors. Our goal now must be to learn how to program these machines effectively (i.e., with a
high value for gain/pain). This book will help users accomplish this important goal. By focusing its
attention on how to use OpenMP, rather than on defining the standard, the authors have made a
significant contribution to the important task of mastering the programming of multiprocessors.
Preface
OpenMP is a parallel programming model for shared memory and distributed shared memory
multiprocessors. Pioneered by SGI and developed in collaboration with other parallel computer vendors,
OpenMP is fast becoming the de facto standard for parallelizing applications. There is an independent
OpenMP organization today with most of the major computer manufacturers on its board, including
Compaq, Hewlett-Packard, Intel, IBM, Kuck & Associates (KAI), SGI, Sun, and the U.S. Department of
Energy ASCI Program. The OpenMP effort has also been endorsed by over 15 software vendors and
application developers, reflecting the broad industry support for the OpenMP standard.
Unfortunately, the main information available about OpenMP is the OpenMP specification (available from
the OpenMP Web site at http://www.openmp.org). Although this is appropriate as a formal and complete
specification, it is not a very accessible format for programmers wishing to use OpenMP for developing
parallel applications. This book tries to fulfill the needs of these programmers.
This introductory-level book is primarily designed for application developers interested in enhancing the
performance of their applications by utilizing multiple processors. The book emphasizes practical
concepts and tries to address the concerns of real application developers. Little background is assumed
of the reader other than single-processor programming experience and the ability to follow simple
program examples in the Fortran programming language. While the example programs are usually in
Fortran, all the basic OpenMP constructs are presented in Fortran, C, and C++.
The book tries to balance the needs of both beginning and advanced parallel programmers. The
introductory material is a must for programmers new to parallel programming, but may easily be skipped
by those familiar with the basic concepts of parallelism. The latter are more likely to be interested in
applying known techniques using individual OpenMP mechanisms, or in addressing performance issues
in their parallel program.