4
我有一個數據集,我想在interval_size
的區間內使用tbb::parallel_for
。我的仿函數消耗的每個時間間隔應該是interval_size
,除了最後一個部分時間間隔,當interval_size
不能均勻分配我的數據集時,這個間隔可能會更小。靜態分區tbb :: parallel_for
有沒有辦法使用TBB以這種方式進行靜態分區?這個測試會產生幾個區間比interval_size
小我的系統上:
#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;
}
輸出:
$ 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
謝謝。 TBB是否提供了保證塊大小不會超過'blocked_range'提供的'grainize'? –
@JaredHoberock如果使用'simple_partitioner',則可以保證上面的公式。 – inf