C++ OpenMP构造在至少一个线程完成后继续执行

C++ OpenMP构造在至少一个线程完成后继续执行,c++,openmp,C++,Openmp,我需要在其中一个线程完成执行后立即继续执行。平行段内的逻辑确保一切都已圆满完成。我有嵌套并行化,因此当数据还没有准备好进行处理时,我会让一些顶级线程休眠,以免消耗计算能力。因此,当一个顶级线程完成时,我希望继续执行,而不是等待其他线程醒来并自然返回 我用 #pragma omp parallel for num_threads(wanted_thread_no) 你是如何并行的?您是否使用任务、分区或分区 如果我理解正确,并且使用任务原语,则可以在上一个任务之后使用#pragma omp pa

我需要在其中一个线程完成执行后立即继续执行。平行段内的逻辑确保一切都已圆满完成。我有嵌套并行化,因此当数据还没有准备好进行处理时,我会让一些顶级线程休眠,以免消耗计算能力。因此,当一个顶级线程完成时,我希望继续执行,而不是等待其他线程醒来并自然返回

我用

#pragma omp parallel for num_threads(wanted_thread_no)

你是如何并行的?您是否使用任务、分区或分区

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

请查看第13页的pdf(pdf格式)

它明确地说:

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

这是你想要的吗

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


谢谢你的建议。从我所读到的-nowait意味着所有线程都没有完成。我至少需要1个线程才能完成,然后我就知道所有其他线程都没有任何工作要做了。如果外循环有N次迭代,而内循环有M次(对于N次循环中的每一次),是否需要任何外循环?内循环是一个依赖树/图,在多个分支上有N个子级。另一个循环查找可以独立于其他分支进行更新的分支