2017-06-17 95 views
1

我有一個具體的例子,但我也對一個更一般的答案感興趣。給出下面的代碼,和一個均勻地平衡二叉樹: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

回答

1

您應該使用OpenMP任務(而不是部分和嵌套並行)完成此任務,正是因爲您的問題無法回答!

+0

謝謝,我同意但我必須爲此作業。任務更容易,但我也試圖理解章節是如何工作的。 –