与依赖项并行运行多个任务

时间:2014-09-09 12:24:13

标签: c++ parallel-processing tbb tbb-flow-graph

我有多个“网站”(m),每个人必须处理一个事件(数据块。所有可用的东西)。每个事件(其中n个)被发送到每个站点进行处理。所以你可能会认为我有nxm任务。处理顺序并不重要,只有一个站点一次不能处理多个事件(因此Task(m,x)不能与Task(m,y)并行运行)

目前,它是在网站上使用“OMP parallel for”实现的,嵌套在事件的常规for循环中

for(...event...)
#pragma omp parallel for
    for(...site...)
        site.process(event)

这工作正常,但并非所有网站都为每个事件都具有相同的复杂性。即所有网站必须等待最慢的网站才能进入下一个活动。我估计如果我允许工人继续下一个事件,我可以节省两倍。

实现此目的的最佳方法是什么?我正在使用C ++ 我正在研究TBB流程图或多个管道......

还有一个考虑因素是必须从磁盘读取每个“事件”,并占用一些内存。虽然不是关键,但我想在系统中一次只有很少的事件(或限制它们)。在目前的实现中,我只有一个(加上一对在后台准备) 感谢

1 个答案:

答案 0 :(得分:0)

我会使用一个管理程序来跟踪每一方的处理事件(m * n bool矩阵)和当前正在使用的事件"。

每个网站都以"随机"事件。 经理在网站上循环检查他们是否完成了当前事件,并在可能的情况下分配一个新事件。

C ++ 11为此类任务提供std::async

每个进程调用都是异步完成的,您可以遍历相应的future元素以检查它们是否已完成(wait_for)。