Может ли каждая итерация цикла for/for_each выполняться параллельно? (С++ 11)

Я выполняю итерацию по вектору структур и обработке каждой структуры по отдельности. Это выглядит примерно так:

for_each(begin(data),end(data),DoTask);
//assume "data" is std::vector<DataT>  
//assume DoTask is a function that takes a DataT by reference

Код значительно медленный, потому что DoTask подключается к определенным веб-сайтам и анализирует HTML.
Какой был бы лучший способ ускорить это?
Моя цель состоит в том, чтобы одновременно проанализировать несколько DataT. Я очень новичок в потоковом режиме, но std:: async и std:: future выглядят многообещающими.

Ответ 1

Вы можете сделать что-то вроде этого

for(T& d : data) std::thread(DoTask, d).detach();

Или вы можете использовать что-то более сложное, например, как блоки потоков Intel Thread Building и функцию parallel_for (не это имя?).

Ответ 2

Используете ли вы GCC? В последних версиях есть параллельная версия for_each (см. здесь о том, как ее использовать).

Ответ 3

Вы всегда можете использовать Библиотека параллельных шаблонов (PPL) от Microsoft, если вы нацелились на Windows/VS2010 (или более поздней). Он имеет parallel_for_each:

parallel_for_each(values.begin(), values.end(), [] (int& value)
{
  value *= 2;
});