OpenMP 中omp_set_max_active_levels的最佳值是多少?

What is the optimum value for omp_set_max_active_levels in OpenMP?

本文关键字:最佳值 levels 多少 active omp set max OpenMP      更新时间:2023-10-16

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

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的最佳值吗?此代码将创建多少个线程?

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