В чем преимущество "#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конструкцией.