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

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

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

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

2 ответов


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

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

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


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