首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TBB并行流水线似乎按顺序运行?

TBB并行流水线似乎按顺序运行?
EN

Stack Overflow用户
提问于 2020-04-24 08:22:05
回答 1查看 170关注 0票数 0

我正在使用一些OpenCV代码处理数据流水线,在实现我的流水线后,我发现没有加速,也没有减慢。我正在试图调查为什么会这样。

我想出了下面的例子:

代码语言:javascript
复制
int start = 0;
tbb::parallel_pipeline(16,
    tbb::make_filter<void, int>(tbb::filter::serial_out_of_order, [&](tbb::flow_control& fc){
        if(start < 1000) {
            return start++;
        }
        fc.stop();
        return start;
    }) &
    tbb::make_filter<int, int>(tbb::filter::parallel, [](int num){
        std::cout << num << std::endl;
        return num + 1;
    }) &
    tbb::make_filter<int, void>(tbb::filter::parallel, [](int num){
    })
);

执行此代码时,将按顺序打印1-1000。这是正确的行为吗?还是我的环境有问题?

EN

回答 1

Stack Overflow用户

发布于 2020-04-24 19:28:33

实际上,在第二个过滤器开始时不太可能看到重新排序。

parallel_pipeline的工作方式是同一线程尽可能长时间地将给定项目放入管道中(在管道中,第一个过滤器之后的所有过滤器都是并行的,因此同一线程将为一个项目执行所有三个过滤器)。一个线程将一个项目移动到下一个筛选器的开销比另一个线程窃取下一个项目的任务、处理第一个筛选器,然后再移动到第二个筛选器所需的开销小得多。如果例如第一线程被OS抢占,则重新排序仍然是可能的,但不太可能。

为了更好地观察无序执行,将print语句移到第三个筛选器,并在第二个筛选器中添加一些随机量的“工作”,以便它处理项目的时间有所不同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61399069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档