使用依赖项并行运行多个任务
Running multiple tasks in parallel with dependencies
我有许多"站点"(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)。
相关文章:
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 在C++程序上同时运行的不同任务
- Qt异步调用:如何在异步调用完成任务后运行一些东西
- 如何在有限的分叉数量下运行类似shell的管道任务
- Windows 并发运行时任务计划,但有例外
- 任务计划程序:设置运行级别时拒绝访问
- 单元测试任务使用 QThreadPool 并行运行
- 在任务管理器的应用程序选项卡中获取运行任务的列表
- asio::strand 上的任务在单个线程上运行
- 如何停止任务运行终端在程序以视觉工作室代码结束后自动退出
- 如何连续运行该计时器任务
- 为并发运行时实现任务本地变量
- 如何在运行时设置 Windows 任务栏图标
- c ++中是否有任何内置功能可以在计划的时间运行任务
- 子项目任务运行时,Gradle 任务未运行
- .exe按计划任务运行不会写入文件
- 简单的c++程序无法作为计划任务运行(交互式/非交互式问题?)
- 让一个任务运行固定数量的指令
- 作为任务数据传递引用-在任务运行时相同的值