Parallel Programming in OpenMP

Enhanced computer application performance is the only practical purpose of parallel processing. Many computer applications continue to exceed the capabilities delivered by the fastest single processors, so it is compelling to harness the aggregate capabilities of multiple processors to provide additional computational power. Even applications with adequate single-processor performance on high-end systems often enjoy a significant cost advantage when implemented in parallel on systems utilizing multiple, lower-cost, commodity microprocessors. Raw performance and price performance: these are the direct rewards of parallel processing.
The cost that a software developer incurs to attain meaningful parallel performance comes in the form of additional design and programming complexity inherent in producing correct and efficient computer code for multiple processors. If computer application performance or price performance is important to you, then keep reading. It is the goal of both OpenMP and this book to minimize the complexity introduced when adding parallelism to application code.
In this chapter, we introduce the benefits of parallelism through examples and then describe the approach taken in OpenMP to support the development of parallel applications. The shared memory multiprocessor target architecture is described at a high level, followed by a brief explanation of why OpenMP was developed and how it came to be. Finally, a road map of the remainder of the book is presented to help navigate through the rest of the text. This will help readers with different levels of experience in parallel programming come up to speed on OpenMP as quickly as possible.
This book...