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的最佳值嗎? 此代碼將創建多少個線程?
您應該使用任務而不是嵌套節。 – Zulan