使用依赖项并行运行多个任务

Running multiple tasks in parallel with dependencies

本文关键字:任务 运行 并行 依赖      更新时间:2023-10-16

我有许多"站点"(m),每个站点都必须处理一个事件(数据块。所有这些都可以随时使用)。每个事件(其中n个)都被发送到每个站点进行处理。所以你可能会认为我有nxm任务。处理顺序并不重要,只是一个站点一次不能处理多个事件(因此任务(m,x)不能与任务(m、y)并行运行)

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

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

这运行良好,但并非所有网站对每个事件都具有相同的复杂性。即,所有站点都必须等待最慢的站点,然后才能进入下一个事件。我估计,如果我允许员工继续参加下一场活动,我可以节省两倍。

实现这一点的最佳方式是什么?我正在使用C++我正在研究TBB流量图,或多条管线。。。

还有一个需要考虑的问题是,每个"事件"都必须从磁盘中读取,并且占用一些内存。虽然还不是关键的,但我希望一次在系统中有尽可能少的事件(或限制它们)。在当前的实现中,我只有一个(加上正在后台准备的几个)感谢

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

每个站点都以一个"随机"事件开始。经理循环浏览各个站点,检查它们是否完成了当前事件,并在可能的情况下分配一个新事件。

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

每个进程调用都是异步完成的,您可以循环使用相应的未来元素来检查它们是否完成(wait_fo)。