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_foreasily. It is not obvious to useparallel_forfor recursion—at least not until you have this Aha! moment. It makes sense because recursion is about splitting up work, and so isparallel_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 ...