Computing Reviews
Today's Issue Hot Topics Search Browse Recommended My Account Log In
Best of 2016 Recommended by Editor Recommended by Reviewer Recommended by Reader
Search
Multicore and GPU programming : an integrated approach
Barlas G., Morgan Kaufmann Publishers Inc., San Francisco, CA, 2015. 698 pp. Type: Book
Date Reviewed: Aug 16 2016

Parallel programming is a key skill for current software engineers, at least if they intend to exploit the capabilities of current hardware. Multicore microprocessors are now commonplace, even in mobile devices, whereas the advent of general-purpose graphics processing units (GPGPUs) has led to heterogeneous parallel computing platforms, where each computing node has remarkably different capabilities, a situation that also appears in traditional distributed systems. Hence, an integrated approach for dealing with parallel programming is, no doubt, a value proposition.

Barlas’ textbook on parallel programming delivers what it promises on its back cover: a broad coverage of major parallel programming tools. It covers how to program not only multicore processors and graphics processing units (GPUs), as its title might suggest, but also shared-nothing multiprocessors that lead to more scalable computer architectures.

A short standard introduction to parallel computing breaks the ice with the usual material you might expect, including Flynn’s taxonomy of computer architectures, Amdahl’s law, and an overview of some noteworthy contemporary systems (the Cell BE processor in the Sony PlayStation 3 console, the NVidia Kepler GPU architecture, the AMD accelerated processing units (APUs) used in the Sony PlayStation 4, the Tilera TILE, and the Intel Xeon Phi processors). A second introductory chapter is devoted to parallel program design. In this chapter, the author presents Ian Foster’s PCAM methodology for parallel program design: partitioning, communication, agglomeration, and mapping. He also describes some common design patterns from parallel programming, which are organized into two categories: decomposition patterns (determining the parts of the computation that can proceed concurrently) and program structure patterns. The latter are also grouped into two subcategories: globally parallel, locally sequential (GPLS), for example MapReduce, and globally sequential, locally parallel (GSLP), for example fork/join and loop parallelism.

The bulk of the book consists of tutorial-like chapters that cover the major technologies used to develop parallel programs. Namely, the author describes in detail how threads and OpenMP can be used in shared-memory systems, how the message passing interface (MPI) allows the development of efficient programs for distributed memory systems, and how CUDA is used to program NVidia GPUs. The chapter on threads and all the subsequent examples that resort to threads are based on the use of QThreads, the thread library in the Qt cross-platform framework, which targets various software and hardware platforms, including all the usual suspects (that is, Linux, Windows, OS X, Android, and iOS). The chapter on MPI is complemented by some examples that employ the Boost.MPI C++ library and, finally, the chapter on GPU programming using CUDA is accompanied by a shorter chapter on the Thrust C++ template library, originally intended to simplify GPU programming as a CUDA front end, yet now available for different back ends such as OpenMP or Intel Threading Building Blocks (TBB). As a matter of fact, for me it was a surprise that the author chose Qt threads instead of the standard POSIX threads (commonly known as Pthreads) or the aforementioned Intel TBB C++ template library. In any case, it should be easy for the reader to port the examples in this book to any other threading library.

The book ends with an informative chapter on load balancing. Most of the chapter is devoted to static load balancing using the divisible load theory (DLT) approach, also known as divisible load scheduling in the literature. DLT involves modeling costs for both communication and computation, defining the communication configuration, and predicting how the computational load should be partitioned to minimize execution time. The author makes a thorough analysis of two different scenarios and provides pointers to relevant bibliographic references.

Extensive code snippets are sprinkled throughout the text. Although they do not follow Knuth’s literate programming approach, they are accompanied by explanatory notes and itemized highlights that are invaluable for students to understand the reasons behind particular coding decisions. Complete case studies mix and match the technologies covered in the text with different applications, from parallel sorting, array computation, and encryption to scientific computing and DNA sequence alignment. Some notable examples combine multiple technologies, such as the multithreaded master-worker configuration that uses both threads (for multicore processors) and MPI (for distributed computing), or the AES encryption implementation that combines CUDA and MPI in clusters of GPU-equipped machines.

Barlas has succeeded in providing a highly readable textbook that covers many relevant parallel programming technologies. Plenty of examples enable its adoption in hands-on parallel computing courses for advanced undergraduate students, whereas the “doable” exercises at the end of each chapter are also suitable for self-learning.

More reviews about this item: Amazon

Reviewer:  Fernando Berzal Review #: CR144690 (1612-0868)
Bookmark and Share
  Reviewer Selected
Editor Recommended
Featured Reviewer
 
 
Multiprocessing/ Multiprogramming/ Multitasking (D.4.1 ... )
 
 
Graphics Processors (I.3.1 ... )
 
 
Multiple Data Stream Architectures (Multiprocessors) (C.1.2 )
 
Would you recommend this review?
yes
no
Other reviews under "Multiprocessing/Multiprogramming/Multitasking": Date
Algorithms for scheduling homogeneous multiprocessor computers
Ondáš J., Springer-Verlag, London, UK, 1984. Type: Book (9789780387136578)
Aug 1 1985
Parallel programming
Perrott R., Addison-Wesley Longman Publishing Co., Inc., Boston, MA, 1987. Type: Book (9789780201142310)
Jul 1 1988
Operating systems: communicating with and controlling the computer
Keller L., Prentice-Hall, Inc., Upper Saddle River, NJ, 1988. Type: Book (9789780136380405)
Sep 1 1989
more...

E-Mail This Printer-Friendly
Send Your Comments
Contact Us
Reproduction in whole or in part without permission is prohibited.   Copyright 1999-2024 ThinkLoud®
Terms of Use
| Privacy Policy