The OpenMP specification can be downloaded from the web, but it is not a really a good starting point for learning how to write real programs using the OpenMP constructs. However, this book does have a lot of material that you really don't need just to write programs. This extra information is in the form of context and information on parallel computing in general, since this book is really intended to double as a textbook and a practical guide for professionals. The following briefly describes the contents.
Chapter one contains some background information on OpenMP and its applications. You can skip it if you are not interested in this or already know the material.
Chapter two is a brief overview of the features of OpenMP at a high level. It discusses how OpenMP deals with problems that come from the complex memory hierarchy that exists on modern computers.
Chapter three is a good starting point if you know you need OpenMP, know why you need it, and just need to get something going. It discusses a complete OpenMP program in both C and Fortran that uses a couple of OpenMP's most widely used features, plus it explains the basics of the OpenMP syntax. The problem discussed is specifically how to perform a matrix times a vector operation in parallel.
Chapter four is a more complete overview of the OpenMP programming paradigm and it contains many example programs. First the most widely used features are introduced with a focus on those features that enable work to be shared among multiple threads. The scope narrows until the author is down to some of OpenMP's less widely known features. The programs start simple and get more complex as the chapter progresses, always staying within the field of scientific computing.
Chapters five and six go together, and discuss how to optimize performance with OpenMP. There are a number of practical programming tips and an extended example that gives insight into the process of investigating performance problems.
Chapter seven talks about program correctness and troubleshooting. This can be hard to do in shared-memory parallel programs.
Chapter 8 is on translation by the compiler of an OpenMP program into an application that can be executed in parallel. It talks about behind the scenes occurrences with OpenMP computing including the operation of OpenMP-aware compilers, performance tools, and debuggers. It also discusses strategies for obtaining high performance.
Chapter 9 is a special topics chapter and discusses trends that could influence extensions to the OpenMP specification in the future. Obviously it is not necessary for the practicing professional to know this, but it is interesting.
My perspective is that of someone that knows I must use OpenMP, and I need good concrete examples and an accompanying tutorial to get me going. Chapters three through eight were ideal for my purpose. Other books I examined ran the gamut from talking about why OpenMP is important and lacking practical details, to overpriced textbooks, to books that were about OpenMP plus some other parallel programming paradigms and weren't specific or modern enough. This one is clear, concise, modern, and the price can't be beat. The only drawback for me was the dual emphasis on C and Fortran, but then I'm sure the Fortran information is still useful to a good number of programmers.