在C ++中实现具有嵌套并行和任务依赖性支持的通用任务调度程序

时间:2014-02-08 02:45:20

标签: c++ multithreading parallel-processing

我想创建一个通用任务调度程序,它支持具有依赖关系的嵌套并行,即能够从其他(父)任务内创建和排队(子)任务,同时父任务执行依赖关于子任务结果。不幸的是,我无法弄清楚如何实现这一点。我坚持以下简单的案例: 让我们假设我们有2个工作线程,我们创建/排队2个父任务。每个任务将在单独的线程上开始执行。现在每个任务产生2个子任务,并在返回之前等待它们完成。但是因为没有其他可用线程(因为两个工作线程被阻塞等待子任务完成),所以永远不会执行子任务。因此,父任务永远不会返回。

  • 我能想到的一个解决方案是在同一个线程上串行执行所有子任务。但这并不高效,因为其中一个父任务及其子任务可能会很快完成,然后一个线程将坐在那里什么都不做。
  • 另一个解决方案是为每个子任务生成一个新线程。但这可能导致大量的线程,这不是一个好主意。
  • 另一种解决方案是,当且仅当线程可用时才将新的子任务入队。如果没有,则在父任务的同一线程上串行执行子任务。这个看起来有点高效,但我不确定它是否正确或如何实施。

是否有用于上述问题的标准方式/模式?我还尝试在任务调度程序上阅读英特尔的TBB文档,但目前还不清楚TBB如何实现这一点。

0 个答案:

没有答案