OpenMP中omp_set_max_active_levels的最佳值是多少?

时间:2017-06-17 18:46:23

标签: c++ recursion parallel-processing openmp sections

我有一个具体的例子,但我也对更一般的答案感兴趣。给出以下代码和均衡的二叉树:

void mainTraverse(tree *node) {
    omp_set_nested(1);
    omp_set_max_active_levels(4);
    recurseTraverse(node);
}

void recurseTraverse(tree *node) 
{
    if (node == NULL)
        return;

    #pragma omp parallel
    {
        #pragma omp sections
        {
            #pragma omp section
            recurseTraverse(node->left);

            #pragma omp section
            recurseTraverse(node->right);
        }
    }

    // lengthy per-node computation here
}

根据OpenMP规范:

omp_set_max_active_levels例程限制了嵌套的活动并行区域的数量。

但这究竟是什么意思呢? 4是set_max_active_levels的最佳值吗? 这段代码会创建多少个线程?

1 个答案:

答案 0 :(得分:1)

您应该使用OpenMP任务(不是部分和嵌套并行性)来执行此操作,正是因为您的问题无法回答!