Какое оптимальное значение для 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
}

Согласно спецификации OpenMP:

Подпрограмма omp_set_max_active_levels ограничивает количество вложенных активных параллельных областей.

Но что это значит именно?
4 является оптимальным значением для set_max_active_levels?
Сколько потоков создаст этот код?

1

Решение

Вы должны делать это с задачами OpenMP (не с разделами и вложенным параллелизмом) именно потому, что на ваш вопрос невозможно ответить!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]