in benchmarks/simple_pool_benchmark.cpp [94:127]
void BM_tbb_mostly_idle(benchmark::State& state) {
const int num_threads = state.range(0);
const int num_elements = state.range(1);
struct Recurse {
void operator()() const {
work[tid() & 1023] += i;
if (i < num_elements) {
++i;
g->run(*this);
}
}
mutable int i;
mutable Work* work;
mutable tbb::task_group* g;
int num_elements;
};
startRusage();
for (auto UNUSED_VAR : state) {
tbb::task_scheduler_init initsched(num_threads);
tbb::task_group g;
Recurse rec;
rec.i = 0;
rec.work = g_work;
rec.g = &g;
rec.num_elements = num_elements;
rec();
g.wait();
}
endRusage(state);
}