У меня есть очень простой parallel_for
l oop, который выполняет некоторую работу с большим вектором. Хотя это надуманный пример, я надеюсь измерить любые потенциальные накладные расходы с помощью планирования путем изменения размера зерна. L oop выглядит следующим образом:
tbb_start = std::chrono::high_resolution_clock::now();
tbb::parallel_for(tbb::blocked_range<int>(0, values.size(), grainSize),
[&](tbb::blocked_range<int> r)
{
for (int i = r.begin(); i < r.end(); ++i)
{
values[i] = std::sin(i * 0.001);
}
});
tbb_end = std::chrono::high_resolution_clock::now();
loop_duration = (tbb_end - tbb_start);
std::cout << "TBB Time: " << loop_duration.count() << "ms" << std::endl;
Мое предположение здесь состоит в том, что увеличение размера зерна уменьшит накладные расходы на планирование (поскольку больше работы будет выполнено меньшим количеством потоков). Как тогда измерить это изменение в накладных расходах? Согласно этой статье:
https://www.epcc.ed.ac.uk/sites/default/files/PDF/ewomp99paper.pdf
Авторы берут разницу между временем параллельной и последовательной работы, делят ее на число процессоров и это число будут накладные расходы. Это стандартный способ сделать это? Есть ли другой (возможно, лучший) способ?