В своей программе я использую Boost-Spirit-Qi для анализа больших наборов данных. Входные данные представляют собой последовательные записи. Я пытаюсь использовать TBB для повышения эффективности синтаксического анализа. Процедура параллельной обработки следующая:
typedef map<string, data_struct_t> mdata_t;
vector<string> text;
mdata_t data;
parallel_for(blocked_range<size_t>(0, input.size(), gs),
[&] (blocked_range<size_t>& r) {
data_struct_t cs;
mdata_t cr;
string s;
for(size_t i=r.begin(); i<r.end(); i++) {
s = text[i];
Parser::task1(s, cs);
Parser::task2(s, cs);
Parser::task3(s, cs);
....
Parser::task8(s, cs);
cr.insert(std::make_pair(cs.title, cs));
}
data.insert(cr.begin(), cr.end());
}, ap);
Моя программа использует только 10% ЦП (2 ЦП, 16 ядер) и работает на 8 ядрах. Не понимаю, почему остальные 8 ядер не используются (один процессор). Буду признателен за указание мне правильного алгоритма распараллеливания этой задачи.
Спасибо за совет.
Стэн