Как вкладывать omp в omp single используя OpenMP - PullRequest
3 голосов
/ 05 мая 2011

У меня есть цикл for, который я не хочу распараллеливать, который вызывает функцию, которую я хочу распараллелить (в которой есть цикл for, который я хочу распараллелить). Я хочу поместить параллельную область за пределы всей партии, чтобы мои потоки создавались только один раз (чтобы уменьшить накладные расходы на создание потоков).

Однако на данный момент у меня есть omp single, охватывающий цикл for, который вызывает функцию, и omp for внутри функции для работы с внутренним циклом for. Он протягивает руку, и, согласно OMP single висит внутри для , это потому, что это незаконно!

Если я не могу сделать это таким образом, как я могу подойти к этому? Я хочу убедиться, что только один поток запускает внешний цикл for и вызывает функцию, но внутри функции я могу получить полный параллелизм.

Возможно ли это? Есть идеи?

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Большинство реализаций создают потоки только один раз - либо при запуске программы, либо при обнаружении первой параллельной области.После создания они, как правило, не уничтожаются, а помещаются в пул свободных потоков (обрабатывается реализацией OpenMP), когда встречается конец параллельной области.Это означает, что вы должны иметь возможность поместить параллельную область в цикл и не создавать накладных расходов на создание потока каждый раз, когда обнаруживается параллельная область.Каждый раз, когда обнаруживается параллельная область, возникают небольшие накладные расходы, но они намного меньше, чем при создании потоков.

0 голосов
/ 05 мая 2011

Как насчет: - поместить ваш внутренний цикл в параллель #pragma omp - установить количество активных потоков в один перед внешним циклом - установить его обратно в N перед вызовом вашей другой функции - поместить #pragma omp для внутриfunction

?

Параллельные секции являются переходными по границам функций в OMP, и установка количества активных потоков не должна быть слишком вредной.Однако не нужно тестировать / оценивать.

...