В чем преимущество "#pragma omp master "в отличие от" #pragma omp single"?


В OpenMP любой код внутри директивы #pragma omp master выполняется одним потоком (ведущим), без подразумеваемого барьера в конце области. (См. раздел о главной директиве в учебнике LLNL OpenMP ).

Это кажется эквивалентным #pragma omp single nowait (за исключением того, что вместо 'master' любой поток может выполнять одну область).

При каких обстоятельствах, если таковые имеются, целесообразно использовать #pragma omp master?

2 8

2 ответа:

Хотя конструкция single nowait большую часть времени эквивалентна конструкции master:

  1. Конструкция master может быть использована внутри конструкции разделения труда, если возникнет какая-либо необходимость. Это не относится к конструкции single nowait, так как две конструкции совместного использования работы не могут быть вложены в одну и ту же параллельную область

  2. Некоторые библиотеки хотят, чтобы основной поток выполнял определенные операции. Например, библиотека MPI, при инициализации с уровнем поддержки потока равным MPI_THREAD_FUNNELED, позволяет только основным потокам выполнять вызовы MPI

В дополнение к ограничениям вложенности single конструкция может быть реализована медленнее, чем master конструкция, потому что она более сложная и гибкая. Возможно, вы захотите проверить вашу конкретную реализацию, но в целом master может быть реализована быстрее, поэтому многократные обращения к ней могут принести пользу по сравнению с single nowait конструкцией.