The Aha! Factor

a•ha /ä-'hä/ interjection, Middle English: Depending on manner of utterance, used to express surprise, pleasure, irony, derision, mockery, contempt, or triumph.

Studying these examples will hopefully have you saying Aha! a few times as the possibilities unfold. Here is a short list of some Aha! moments I have seen through the eyes of others, and on my own:

Splitting ranges can be complex operations

Splitting a parallel range can be far more interesting than it first seems. You can play with the data in the region represented by the range. Oh, the possibilities! See Example 11-31.

Recursion maps to parallel_for

Recursive functions convert to parallelism using parallel_for easily. It is not obvious to use parallel_for for recursion—at least not until you have this Aha! moment. It makes sense because recursion is about splitting up work, and so is parallel_for. See the section “Quicksort: Visualizing Task Stealing,” later in this chapter. Sometimes direct use of the task scheduler may seem better; see the section “A Better Matrix Multiply (Strassen),” later in this chapter.

Use implicit synchronization

Implicit synchronization is better than using locks. Develop a mindset to think about using implicit synchronization and avoiding locks. See the section “Advanced Task Programming,” later in this chapter.

Memory is shared between tasks

It’s all in the shared memory. When discussing pipelines and other algorithms, and being careful to partition access to data, it is possible ...

Get Intel Threading Building Blocks now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.