如何从 TBB
parallel_for 获取进度信息?
tbb::parallel_for(tbb::blocked_range<size_t>(0,1000),classA);
最佳答案
如果您只需要计算当前执行的迭代次数,一个简单的解决方案可能是使用全局原子计数器:
#include <tbb/tbb.h>
tbb::atomic<size_t> atomic_progress_counter;
void ParallelFoo() {
tbb::parallel_for( tbb::blocked_range<size_t>(0, 1000),
[&]( tbb::blocked_range<size_t> r ) {
for( size_t i=r.begin(); i!=r.end(); ++i ) {
Foo(i);
++atomic_progress_counter;
}
}
);
}
但是,如果每次迭代的工作量很小并且硬件并发性很大,则共享变量的原子增量可能会增加显着的开销。例如,我会在 Intel 的 Xeon Phi 协处理器上谨慎使用此方法。
关于c++ - Intel TBB取得工作进展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20429319/