c++ - Intel TBB取得工作进展

标签 c++ tbb

如何从 TBBparallel_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/

相关文章:

c++ - TBB 数据对象是否可用于 OpenMP?

c++ - 将可变参数函数模板的每个参数传递给返回 void 的函数

windows - opencv dll 错误 - 无法在 KERNEL32.dll 中找到过程 LoadPackagedLibrary

c++ - 将 openmp 更改为 tbb

c++ - 如何将 map 的内容从一个类复制到另一个类的新 vector 中

c# - Microsoft TPL(任务并行库)与 Intel TBB(线程构建 block )

c++ - 如何为动态分配的 STL 容器设置分配器?

c++ - C++ 编译器如何处理多重继承的偏移量?

c++ - 基于组件的游戏引擎中的序列化

C++ `std::sort` 在不复制的情况下指向二维数据的指针