我有一个具体的例子,但我也对更一般的答案感兴趣。给出以下代码和均衡的二叉树:
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 :(得分:1)
您应该使用OpenMP任务(不是部分和嵌套并行性)来执行此操作,正是因为您的问题无法回答!