TBB: Как я могу измерить накладные расходы? - PullRequest
0 голосов
/ 25 января 2020

У меня есть очень простой 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

Авторы берут разницу между временем параллельной и последовательной работы, делят ее на число процессоров и это число будут накладные расходы. Это стандартный способ сделать это? Есть ли другой (возможно, лучший) способ?

...