Reputation: 37836
I'm iterating over a vector of structs and processing each struct individually.
It looks something like this:
for_each(begin(data),end(data),DoTask);
//assume "data" is std::vector<DataT>
//assume DoTask is a function that takes a DataT by reference
The code is significantly slow because DoTask connects to particular websites and analyzes HTML.
What would be the best way to speed this up?
My goal is to analyze multiple DataTs at the same time.
I'm very new to threading, but std::async and std::future look promising.
Upvotes: 10
Views: 5324
Reputation: 75130
You can do something like this
for(T& d : data) std::thread(DoTask, d).detach();
Or you can use something more complicated like Intel's Thread Building Blocks and the parallel_for
(isn't that the name?) function thereof.
Upvotes: 9
Reputation: 30969
Are you using GCC? Recent versions have a parallel version of for_each
(see here for how to use it).
Upvotes: 6
Reputation: 7434
You can always use The Parallel Patterns Library (PPL) from Microsoft, if you target Windows/VS2010 (or later). It has parallel_for_each
:
parallel_for_each(values.begin(), values.end(), [] (int& value)
{
value *= 2;
});
Upvotes: 3