Parallel programming: for multicore and cluster systems is now in its third English edition (2023). The original German text had, in turn, its three editions in 2000, 2007, and 2012. The current third English edition includes selected (as opposed to pervasive) updates and unspecified revisions to the second English edition (2013). Its scope is vast, covering hardware architecture, programming models, and the efficient implementation of algorithms in a parallel execution environment. Intended as a resource for teaching, it is written in a modular style so as to be suitable for courses with different emphases, for example, if choosing to cover only selected portions of its content.
Chapter 1 is an introduction to parallel programming. Chapter 2 is a vast overview of hardware architectures for concurrent execution, inclusive of current developments. Chapter 3 addresses the whole taxonomy of programming models and paradigms, with attention to applicability in distributed memory, shared memory, and private memory environments. Chapter 4 is about the performance of code running on concurrent systems, its theory, and its practice. Chapter 5 covers practical programming of distributed memory systems with the Message Passing Interface (MPI) library. Chapter 6 is about programming shared memory systems with the Pthreads library, or with Java threads; or programming shared/private memory systems with OpenMP. Chapter 7 covers the architecture of the latest Nvidia graphics processing unit (GPU), including a few of the previous ones, and introduces the associated programming model in the context of non-graphics-oriented, scientific applications. Chapter 8 is a review of selected numerical algorithms and their efficient implementations for parallel execution.
The content is competently introduced and systematically organized. Most material is presented bottom-up. Added to the modular structure, this results in a flood of details that may overwhelm student audiences. In many sections, this textbook reads like an encyclopedia of parallel programming, which may or may not suit a particular teaching style. In this case, the task of organizing information into a palatable, easy-to-assimilate delivery rests completely with the instructor. Thanks to the uniform and well-arranged writing structure, retracing where content is presented remains simple.
The translation from German is unambiguous. However, it appears verbose and exact to the point of becoming punctilious. An alternate English rendition could have been more discursive without losing effectiveness. Parts of the book have been expertly updated and are current to the hour. However, older information remains that, presented with the authority of a textbook, can become misleading. For instance, examples of distributed memory interconnect (p. 25) include hardware of historical interest that is represented as current; some questionable statements on the relative popularity of programming languages (p. 123) rely on references predating the year 2000. Instances of this nature occur pervasively and are unapologetic.
The sections on programming libraries cater to obvious but unspoken priorities. MPI is a staple in niche circles, and well introduced. More recent general-purpose distributed memory libraries (for example, Akka) are otherwise completely ignored. With regard to shared memory libraries, the treatment of Pthreads and Java threads is truly engaging, including informative sections explaining, with grace, how to implement common synchronization patterns from elementary functionality. On the other hand, the recent and theoretically relevant structured concurrency model introduced by Kotlin--an up-and-coming Java Virtual Machine language--is not even mentioned.
Parallel programming: for multicore and cluster systems is breathlessly encyclopedic, brilliant, and idiosyncratic--and likely to polarize opinions. Incontestably, it’s a valuable shelf reference. For a parallel programming autodidact, it may provide a steep learning curve depending on interests and prior knowledge. As a textbook, it shows an exuberant, distinct personality that instructors may love or may find unattractive.