Introduction and Overview
We begin with an overview of the current state of parallel programming; this chapter provides a common basis of information and terminology before the following chapters dive into the various domains and parallel programming experiences. Parallel programming is how we program modern computers anytime we want to reach their full potential. As we will explain, this is because computers themselves have universally become parallel computers.
Parallel programs are comprised of multiple tasks that may be executed in parallel. These programs are designed for concurrency purposefully to utilize parallel computers; we refer to them as parallel programs instead of concurrent programs because we are interested in the benefits of parallelism. Concurrency is the property of having multiple tasks that are active at that same time but not necessarily doing work simultaneously; parallel computers add the ability for concurrent work to be simultaneously making progress.