OpenMP中omp_set_max_active_levels的最佳值是多少?

问题描述:

我有一个具体的例子,但我也对一个更一般的答案感兴趣。给出下面的代码,和一个均匀地平衡二叉树:OpenMP中omp_set_max_active_levels的最佳值是多少?

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

+0

您应该使用任务而不是嵌套节。 – Zulan

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

+0

谢谢,我同意但我必须为此作业。任务更容易,但我也试图理解章节是如何工作的。 –