具体的な例がありますが、より一般的な回答にも興味があります。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の最適値ですか? このコードはいくつのスレッドを作成しますか?
ネストされたセクションの代わりにタスクを使用する必要があります。 – Zulan