2017-06-17 11 views
1

具体的な例がありますが、より一般的な回答にも興味があります。OpenMPのomp_set_max_active_levelsに最適な値はどれくらいですか?

omp_set_max_active_levelsルーチン制限ネストされた活性並列領域の数:OpenMPの仕様によれば

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 
} 

次のコード、および均等にバランスの取れた二分木を考えます。

しかし、これはどういう意味ですか? 4はset_max_active_levelsの最適値ですか? このコードはいくつのスレッドを作成しますか?

+0

ネストされたセクションの代わりにタスクを使用する必要があります。 – Zulan

答えて

1

質問は答えが不可能であるため、OpenMPタスク(セクションとネストされた並列処理ではありません)でこれを行う必要があります。

+0

ありがとう、私は同意するが、私は割り当てのためにこれをしなければならなかった。タスクがはるかに簡単でしたが、セクションの仕組みも理解しようとしていました。 –

関連する問題