This is a list of known errata for the first printing of Structured Parallel Programming, Michael McCool, Arch D. Robison, and James Reinders; Morgan Kaufmann (Elsevier), 2012. These issues should all be corrected in the second printing. If you find other issues we should address, please email us.

## General comments:

- As noted on page xxv, the source code for examples is not covered by the copyright of the book and may be reused freely. This is an exception covered by the “other than as may be noted herein” comment on the copyright page.
- Since the book went to press, the product name “Phi” was introduced by Intel to describe products implemented using the Intel MIC architecture.

## Typographical errors:

- Copyright page, change "2012 Elsevier, Inc. All rights reserved." to "2012 Michael McCool, Arch Robison and James Reinders. Published by Elsevier, Inc. All rights reserved."
- Page 5, Section 1.2, remove boldface on "improved performance".
- Page 6, Section 1.2, change "B or" to "B, " and "C, whichever" to "C, or the running time of D, whichever"
- Page 7, Section 1.3.1, change “The data shows that Moore’s original prediction of 2x per year has been amazingly accurate.” to “The data shows that Moore’s prediction of 2x every two years has been amazingly accurate.”
- Page 11, Section 1.3.1, change "good news is that if" to "good news is that once"
- Page 16, Section 1.3.3, in "Compilers are not reliable", typeset "are not" in italics.
- Page 18, Section 1.3.3, change "that ordering the individual operations" to "that reordering the individual operations"
- Page 24, Section 1.5.2, change "OpenCL the map" to "OpenCL is the map"
- Page 29, Section 1.5.7, change "be" to "have to be"
- Page 37, Section 1.5.9, change "also standard" to "also a standard"
- Page 43, Section 2.3, change "conditions, but lanes" to "conditions. Lanes"
- Page 45, Section 2.4.1, change "instructions in Streaming" to "instructions in the Streaming"
- Page 46, Section 2.4.1, change "hardware comparators is required" to "hardware comparators are required"
- Page 54, Section 2.4.3, change "GPUs cores" to "GPU cores"
- Page 55, Section 2.5, change "may be as as good" to "may be as good"
- Page 69, Section 2.6.1, “naïve” appears without an umlaut.
- Page 75, Section 2.6.7, change "This makes the launching and synchronization time logarithmic in the number of workers rather than linear, but it nonetheless grows with the number of workers." to "Although the launching and synchronization time is logarithmic in the number of workers rather than linear, it nonetheless grows with the number of workers."
- Page 89, Section 3.3.3, change "lattice Boltzmann flow flow solvers" to "lattice Boltzmann flow solvers"
- Page 96, Section 3.4.2, change "constant time, but it is" to "constant time, it is"
- Page 97, Section 3.4.5, change "Objects are a language construct" to "Objects are language constructs"
- Page 116, Section 3.8.5, paragraph 2, change “hyperthreading” to “multiple threads” and remove the boldface.
- Page 117, Section 3.8.5, paragraph 1 of “Gather” subsection: change “Hyperthreads” to “Multiple threads”.
- Page 117, Section 3.8.5, paragraph 2 of “Gather” subsection: change “Hyperthreads” to “Multiple threads”.
- Page 123, Section 4.1, change “In the comment pattern” to “in the map pattern” and "convenient way to do it." to "convenient way to do this."
- Page 125, Section 4.2.1, change "Level 2 BLAS perform matrix-vector" to "Level 2 BLAS routines perform matrix-vector" and change "Level 3 BLAS perform matrix-matrix" to "Level 3 BLAS routines perform matrix-matrix"
- Page 132, Section 4.3.1, change "very different number of iterations" to "very different numbers of iterations"
- Page 133, Listing 4.11, indent lines 23-26 by four (more) spaces. Delete "{" on line 23.
- Page 142, Section 4.6.2, change "In the workpile pattern" to "The workpile pattern"
- Page 145, Chapter 5 intro, change "tasks these can also" to "tasks these operations can also" and change "communication and are will" to "communication and will"
- Page 145, Section 5.1, “naïve” appears without an umlaut.
- Page 149, Section 5.1.3, change "This is because, while the tree" to "This is because while the tree"
- Page 151, Section 5.1.4, change "new values to it" to "new values added to it"
- Page 156, Listing 5.4, line 6, change "N, a multiple of 4" to "N a multiple of 4"
- Page 162, Section 5.4, change "exclusive scan excludes the nth output value" to "exclusive scan excludes the nth input value"
- Page 165, Section 5.4.1, change "Section 5.6.3 this." to "Section 5.6.3 demonstrates this."
- Page 172, Section 5.6.5, change "first pass occurred and, so there" to "first pass occurred and so there"
- Page 180, Section 6.1.1, in "The inverse of zip, unzip" typeset "unzip" in boldface
- Page 188, Section 6.4, change “but unpack are specific” to “but zip and unzip are specific”
- Page 194, Section 6.7, paragraph 3, change “SoA to AoS” to “AoS to SoA”; paragraph 5, change “For SoA form” to “For AoS form”; change “from SoA to AoS” to “from AoS to SoA”; change “In AoS form” to “In SoA form”; change “then AoS form” to “then SoA form”
- Page 195, Figure 6.20 caption, “AOS” -> “AoS”
- Page 197, Section 6.8, change "their inverses, unshift and unzip," to "zip's inverse, unzip,"
- Page 213, Section 8.2.1, change "spawned call receives" to "spawned call in this example receives"
- Page 224, Section 8.7, change “56(200) to “56(100)”
- Page 227, Section 8.7.1, change "The reason why" to "This"
- Page 231, Section 8.9.1, change section title from "Cilk Quicksort" to "Cilk Plus Quicksort"; also update table of contents
- Page 233, Section 8.9.2, change "in practice the code above has" to "in practice this code has"
- Page 257, Section 9.4.1, line 20, change “From a type system perspective, the result acts just like a a big stage.” to “From a type system perspective, the result acts just like a big stage.”
- Page 257, Section 9.4, “Our running example is a series–parallel–series pipeline” to “Our running example is a serial–parallel–serial pipeline”
- Page 266, Section 10.2, change "four-dimension" to "four-dimensional"
- Page 270, Section 10.3, change"Furthermore, if the cache" to "However, if the cache"
- Page 297, Listing 12.3: lines 14 and 24 should be replaced with ellipses indicating omitted code blocks.
- Page 326, Section A.3, change "predates lambda expression and" to "predates lambda expressions and"
- Page 331, Section B.3, change "Cilk Plus if you can to reap" to "Cilk Plus hyperobjects, if you can, to reap"
- Page 353, Listing C.1 caption, change "to remember on which" to "to remember which"

## Clarifications:

- Page 25, Section 1.5.3, line 17, change “You can use these notations when you just want to operate on the elements of two arrays, and you do not care in what order the individual operations are done.” to “You can use these notations when you just want to operate on the elements of arrays, and you do not care in what order the individual operations are done.”
- Page 141, Section 4.4, change "array notation will generally be code-fused" to "array notation may, in some implementations, be code-fused"
- Page 141, Section 4.5, change "fact that sequences of vector operations are automatically fused together" to "fusion of sequences of vector operations"
- Page 194, Section 6.7, paragraph 3, change “array of structures form” to “array of structures (AoS) form”.
- Page 210, Section 8.1, change "shows three-level nesting" to "shows three-level, two-way nesting"
- Page 213, Section 8.2.2, change "more convenient syntax," to "more convenient syntax for constructing functors,"
- Page 226, Section 8.7, change "No overlap" to "In Cilk Plus, no overlap"
- Page 228, Section 8.8, change "into smaller matrix multiplications," to "into smaller matrix multiplications using divide-and-conquer,"
- Page 277, Section 10.7, change “The problem” to “The iterated stencil problem”
- Page 297, Section 12.4, change "Cilk Plus has no direct support" to "Cilk Plus has no direct support for pipelines"
- Page 343, Section B.9, change "transform the code into:" to "transform the code into something such as:"

## Code errors:

Using const-qualified lvalues as an argument to std::move defeats the purpose of std::move, since the compiler will generate a copy of the const object to be moved. This issue has been corrected in the listings available online. The exact changes are described below.

- Page 300, Listing 13.1, Line 1: delete all four occurrences of “const ”.
- Page 301, Listing 13.2, Line 1: delete all four occurrences of “const ”.
- Page 301, Listing 13.2, Line 6: delete the occurrence of “const ”.
- Page 311, Listing 14.3, Line 1: delete both occurrences of “const ”.

Note that in each case, six characters are being deleted, the word “const” and its trailing space.

## Glossary (Appendix E):

- Words set between slashes, /like this/, should actually have been typeset using boldface italics. This problem occurs in the entries for cache fusion, mutex, and work-stealing.
- asymptotic complexity entry: "speedup", "efficiency", "big O notation", "big Omega notation", and "big Theta notation" should be typeset in boldface italics.
- asymptotic efficiency entry: "asymptotic complexity" and "efficiency" should be in boldface italics.
- asymptotic speedup entry: "asymptotic complexity" and "speedup" should be in boldface italics.
- sequential semantics entry: The term “mandatory parallelism” should be typeset in boldface italics (not just italics).
- GPU entry: change “hyperthreading” to “multiple threads per core”. Remove bold italics.
- irregular parallelism entry: “parallelism with disimiliar tasks with unpredictable dependencies.” should be “parallelism with dissimilar tasks with unpredictable dependencies.”
- objects entry: “methods” and “member functions” should be typeset in bold italics.
- loop-carried dependencies entry: insert a space in “multipleiterations” to get “multiple iterations”.

## Index

- Page 400, Entry for “hyperthread” should be deleted (referent was eliminated with above corrections).