I have a dataset that I would like to use with tbb::parallel_for with intervals of size interval_size . Each interval that my functor consumes must be interval_size , with the exception of the last partial interval, which may be less when interval_size does not evenly share my dataset.
Is there a way to use TBB for static separation this way? This test produces fewer interval_size less than interval_size on my system:
#include <tbb/parallel_for.h> #include <iostream> struct body { void operator()(const tbb::blocked_range<size_t> &r) const { std::cout << "range size: " << r.end() - r.begin() << std::endl; } }; int main() { size_t num_intervals = 4; size_t interval_size = 3; // consume num_intervals plus a partial interval in total size_t n = num_intervals * interval_size + (interval_size - 1); tbb::parallel_for(tbb::blocked_range<size_t>(0, n, interval_size), body(), tbb::simple_partitioner()); return 0; }
Output:
$ g++ test_parallel_for.cpp -ltbb $ ./a.out range size: 3 range size: 2 range size: 2 range size: 3 range size: 2 range size: 2
source share