我有许多“站点”(m),每个站点都必须处理一个事件(数据块。所有这些都可以随时使用)。每个事件(其中 n 个)被发送到每个站点进行处理。所以你可能认为我有 nxm 任务。处理顺序并不重要,只是一个站点一次不能处理多个事件(因此 Task(m,x) 不能与 Task(m,y) 并行运行)
目前它是在网站上使用“OMP 并行”实现的,嵌套在事件的常规 for 循环中
for(...event...)
#pragma omp parallel for
for(...site...)
site.process(event)
这工作正常,但并非所有站点对每个事件都具有相同的复杂性。即所有站点都必须等待最慢的站点才能继续下一个事件。我估计如果我允许工人继续进行下一个活动,我可以节省两倍。
实现这一点的最佳方法是什么?我正在使用 C++ 我正在研究 TBB Flow Graph 或多个管道...
另一个考虑是每个“事件”都必须从磁盘读取,并占用一点内存。虽然还不是很关键,但我希望一次在系统中拥有尽可能少的事件(或限制它们)。在当前的实现中,我只有一个(加上在后台准备的一对)谢谢