The use of `parallel_for`

is pretty straightforward. The first three examples in this section help you make sure you’re comfortable with Threading Building Blocks basics. The last two examples, `ParallelMerge`

and `SubstringFinder`

, are a little more challenging and will help drill home how versatile `parallel_for`

can be. The next section implements John Conway’s Game of Life and is the only example to mix C++ and managed C++ in this chapter. Chapter 3 covers `parallel_for`

in detail.

ParallelAverage defines a routine named `ParallelAverage`

that sets `output[i]`

to the average of `input[i-1], input[i]`

, and `input[i+1]`

, for `0 ≤ i < n`

.

Example 11-1. ParallelAverage

#include "tbb/parallel_for.h" #include "tbb/blocked_range.h" using namespace tbb; class Average { public: float* input; float* output; void operator()( const blocked_range<int>& range ) const { for( int i=range.begin(); i!=range.end(); ++i ) output[i] = (input[i-1]+input[i]+input[i+1])*(1/3.0f); } }; // Note: The input must be padded such that input[-1] and input[n] // can be used to calculate the first and last output values. void ParallelAverage( float* output, float* input, size_t n ) { Average avg; avg.input = input; avg.output = output;parallel_for( blocked_range<int>( 0, n, 1000 ), avg ); }

Here is a simple seismic wave simulation (wave propagation) based on `parallel_for`

and `blocked_range`

. The key parts of this example are shown here; the entire code is available for download.

The main program ...

Start Free Trial

No credit card required