|
Intel Threading Building Blocks
Multi-core chips from Intel and AMD offer a dramatic boost
in speed and responsiveness, and plenty of opportunities for
multiprocessing on ordinary desktop computers. But they also
present a challenge: More than ever, multithreading is a
requirement for good performance. This guide explains how to
maximize the benefits of these
processors through a portable
C++ library that works on Windows, Linux, Macintosh, and
Unix systems. With it, you'll learn how to use Intel
Threading Building Blocks (TBB) effectively for parallel
programming -- without having to be a threading expert.
Written by James Reinders, Chief Evangelist of Intel
Software Products, and based on the experience of Intel's
developers and customers, this book explains the key tasks
in multithreading and how to accomplish them with TBB in a
portable and robust manner. With plenty of examples and full
reference material, the book lays out common patterns of
uses, reveals the gotchas in TBB, and gives important
guidelines for choosing among alternatives in order to get
the best performance.
You'll learn how Intel Threading Building Blocks:
Enables you to specify tasks instead of threads for better
portability, easier programming, more understandable source
code, and better performance and scalability in general
Focuses on the goal of parallelizing computationally
intensive work to deliver high-level solutions
Is compatible with other threading packages, and doesn't
force you to pick one package for your entire program
Emphasizes scalable, data-parallel programming, which allows
program performance to increase as you add processors
Relies on generic programming, which enables you to write
the best possible algorithms with the fewest constraints
Any C++ programmer who wants to write an application to run
on a multi-core system will benefit from this book. TBB is
also very approachable for a C programmer or a C++
programmer without much experience with templates. Best of
all, you don't need experience with parallel programming or
multi-core processors to use this book.
Foreword
Note from the Lead Developer of Intel Threading Building Blocks
Preface
1. Why Threading Building Blocks?
Overview
Benefits
2. Thinking Parallel
Elements of Thinking Parallel
Decomposition
Scaling and Speedup
What Is a Thread?
Mutual Exclusion and Locks
Correctness
Abstraction
Patterns
Intuition
3. Basic Algorithms
Initializing and Terminating the Library
Loop Parallelization
Recursive Range Specifications
Summary of Loops
4. Advanced Algorithms
Parallel Algorithms for Streams
5. Containers
concurrent_queue
concurrent_vector
concurrent_hash_map
6. Scalable Memory Allocation
Limitations
Problems in Memory Allocation
Memory Allocators
Replacing malloc, new, and delete
7. Mutual Exclusion
When to Use Mutual Exclusion
Mutexes
Mutexes
Atomic Operations
8. Timing
9. Task Scheduler
When Task-Based Programming Is Inappropriate
Much Better Than Raw Native Threads
Initializing the Library Is Your Job
Example Program for Fibonacci Numbers
Task Scheduling Overview
How Task Scheduling Works
Recommended Task Recurrence Patterns
Making Best Use of the Scheduler
Task Scheduler Interfaces
Task Scheduler Summary
10. Keys to Success
Key Steps to Success
Relaxed Sequential Execution
Safe Concurrency for Methods and Libraries
Debug Versus Release
For Efficiency's Sake
Enabling Debugging Features
Mixing with Other Threading Packages
Naming Conventions
11. Examples
The Aha! Factor
A Few Other Key Points
parallel_for Examples
The Game of Life
Parallel_reduce Examples
CountStrings: Using concurrent_hash_map
Quicksort: Visualizing Task Stealing
A Better Matrix Multiply (Strassen)
Advanced Task Programming
Packet Processing Pipeline
Memory Allocation
Game Threading Example
Physics Interaction and Update Code
Open Dynamics Engine
12. History and Related Projects
Libraries
Languages
Pragmas
Generic Programming
Caches
Costs of Time Slicing
Quick Introduction to Lambda Functions
Further Reading
Index
|