C++ OpenMP中omp\U set\U max\U active\U级别的最佳值是多少?
我有一个具体的例子,但我也对更一般的答案感兴趣。给定以下代码和一个均衡的二叉树:C++ OpenMP中omp\U set\U max\U active\U级别的最佳值是多少?,c++,recursion,parallel-processing,openmp,sections,C++,Recursion,Parallel Processing,Openmp,Sections,我有一个具体的例子,但我也对更一般的答案感兴趣。给定以下代码和一个均衡的二叉树: 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
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是设置最大活动水平的最佳值吗?
这段代码将创建多少线程?您应该使用OpenMP任务(而不是分区和嵌套并行)来完成这项工作,因为您的问题无法回答 你应该使用任务而不是嵌套的部分。谢谢,我同意,但我必须为作业这样做。处理任务要容易得多,但我也在努力理解部分是如何工作的。