【问题标题】:OpenMP construct to continue execution as soon as at least 1 thread is finishedOpenMP 构造在至少 1 个线程完成后立即继续执行
【发布时间】:2012-12-13 22:31:36
【问题描述】:

一旦其中一个线程完成执行,我需要继续执行。并行部分内部的逻辑确保一切都已圆满完成。我已经嵌套了并行化,因此当数据尚未准备好进行处理时,我将一些顶级线程置于睡眠状态,以免消耗计算能力。因此,当其中一个顶级线程完成时,我想继续执行,而不是等待其他线程唤醒并自然返回。

我用

#pragma omp parallel for num_threads(wanted_thread_no)

【问题讨论】:

  • 如果外循环有 N 次迭代,而内循环有 M(对于 N 中的每一个),你想要任何外循环吗
  • 内部是一个依赖树/图,在许多分支上有 N 个子节点。另一个循环寻找可以独立于其他分支更新的分支

标签: c++ openmp


【解决方案1】:

你如何并行化?您使用任务、部分还是?

如果我理解正确并且如果您使用任务原语,您可以在最后一个任务之后使用#pragma omp parallel nowait

在第 13 页查看此 pdf(pdf)。

http://openmp.org/wp/presos/omp-in-action-SC05.pdf

它明确表示:

默认情况下,“omp for”的末尾有一个障碍。使用 “nowait” 子句关闭屏障。 #pragma omp for nowait“nowait”在两个连续的、独立的 omp for 循环之间很有用。

这是你想要的吗?

也要看看这个,即使它说的是同样的事情。

http://openmp.org/mp-documents/omp-hands-on-SC08.pdf

【讨论】:

  • 感谢您的想法。从我所读到的 - nowait 意味着没有一个线程已经完成。我至少需要 1 个线程才能完成,然后我就会知道所有其他线程都没有任何工作要做。
猜你喜欢
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多