每个任务OpenMP多个线程

时间:2017-03-15 15:26:15

标签: c task openmp

是否可以在OpenMP(4.x)中为任务分配多个线程?

我想解决的问题的大致概述:

#pragma omp task
{
    #pragma omp parallel for num_threads(2)
    <for loop>
}

1 个答案:

答案 0 :(得分:2)

是的,您可以使用嵌套的并行区域,完全使用您描述的语法。您需要通过设置环境变量OMP_NESTED=True或调用omp_set_nested来专门启用它,并且它需要得到实现的支持。

那就是说,你必须在表现方面非常小心。通常,OpenMP将每个核心使用1个线程,这对于调度程序和硬件来说非常好。嵌套的并行区域将导致超额订阅(每个核心多个线程),因此当线程竞争核心时可能会导致性能问题。这尤其正确,因为许多任务可能会打开人类并行区域。

另请参阅this discussion关于嵌套循环上的嵌套并行区域。