В чем преимущество "#pragma omp master "в отличие от" #pragma omp single"?
В OpenMP любой код внутри директивы #pragma omp master
выполняется одним потоком (ведущим), без подразумеваемого барьера в конце области. (См. раздел о главной директиве в учебнике LLNL OpenMP ).
Это кажется эквивалентным #pragma omp single nowait
(за исключением того, что вместо 'master' любой поток может выполнять одну область).
При каких обстоятельствах, если таковые имеются, целесообразно использовать #pragma omp master
?
2 ответа:
Хотя конструкция
single nowait
большую часть времени эквивалентна конструкцииmaster
:
Конструкция
master
может быть использована внутри конструкции разделения труда, если возникнет какая-либо необходимость. Это не относится к конструкцииsingle nowait
, так как две конструкции совместного использования работы не могут быть вложены в одну и ту же параллельную областьНекоторые библиотеки хотят, чтобы основной поток выполнял определенные операции. Например, библиотека MPI, при инициализации с уровнем поддержки потока равным
MPI_THREAD_FUNNELED
, позволяет только основным потокам выполнять вызовы MPI
В дополнение к ограничениям вложенности
single
конструкция может быть реализована медленнее, чемmaster
конструкция, потому что она более сложная и гибкая. Возможно, вы захотите проверить вашу конкретную реализацию, но в целомmaster
может быть реализована быстрее, поэтому многократные обращения к ней могут принести пользу по сравнению сsingle nowait
конструкцией.