
- •Гомогенні та гетерогенні обчислювальні системи
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Системи черг на обчислювальних кластерах
- •Доточкові передачі даних в mpi
- •Паралельні області та послідовні області у OpenMp програмі
- •Структура mpi програми
- •Проблеми організації паралельних обчислень
- •Механізми синхронізації у mpi програмах?
- •Мережі з’єднання у високопродуктивних обчислювальних системах
- •Редукційні операції у mpi програмах?
- •Показники ефективності паралельних алгоритмів
- •Передача даних на всі процеси даного комунікатора у mpi програмах?
- •Паралельні та розподілені обчислення
- •Збирання даних зі всіх процесів даного комунікатора у mpi програмах?
- •Функції для роботи з системним таймером в OpenMp
- •Директива #pragma omp parallel. Призначення, опції, приклади застосування Директива parallel
- •Відкладені операції прийому та передачі у mpi програмах? Отложенные запросы на взаимодействие
- •Директива #pragma omp single та #pragma omp master. Призначення, опції, приклади застосування Директива single
- •Директива master
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Змінні у OpenMp програмах Классы переменных
- •Передача повідомлень з блокуванням у mpi програмах Передача/прием сообщений с блокировкой
- •Функції omp_get_thread_num() та omp_get_num _thread(). Призначення, опції, приклади застосування
- •Колективні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp for. Призначення, опції, приклади застосування
- •Індивідуальні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp sections. Призначення, опції, приклади застосування
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Директива #pragma omp task. Призначення, опції, приклади застосування
- •Функції mpi_Wtime(). Призначення, опції, приклади застосування
- •Механізми синхронізації в OpenMp програмах
- •Синхронизация типа atomic
- •Синхронизация типа critical
- •Синхронизация типа barrier
- •Синхронизация типа master
- •Ініціалізація паралельної частини mpi програми
- •Директива #pragma omp barrier. Призначення, опції, приклади застосування
- •Спорідненість та відмінності технології OpenMp та mpi
- •Критичні секції в OpenMp програмах
- •Високопродуктивні обчислювальні системи
- •Взаємні блокування у паралельних програмах
- •Визначення загального числа паралельних процесів у групі та визначення номера процесу в групі у mpi програмах?
- •Моделі паралельних обчислень
- •Грід системи
- •Критичні секції в OpenMp програмах
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Механізми синхронізації в OpenMp програмах
- •Синхронизация типа atomic
- •Синхронизация типа critical
- •Синхронизация типа barrier
- •Синхронизация типа master
- •Спорідненість та відмінності технології OpenMp та mpi
- •Директива #pragma omp task. Призначення, опції, приклади застосування
- •Ініціалізація паралельної частини mpi програми
- •Директива #pragma omp for. Призначення, опції, приклади застосування
- •Функції mpi_Wtime(). Призначення, опції, приклади застосування
- •Функції omp_get_thread_num() та omp_get_num _thread(). Призначення, опції, приклади застосування
- •Індивідуальні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp single та #pragma omp master. Призначення, опції, приклади застосування Директива single
- •Директива master
- •Колективні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp parallel. Призначення, опції, приклади застосування Директива parallel
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Показники ефективності паралельних алгоритмів
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Паралельні області та послідовні області у OpenMp програмі
- •Відкладені операції прийому та передачі у mpi програмах? Отложенные запросы на взаимодействие
- •Системи черг на обчислювальних кластерах
- •Дисковий ввід ти вивід у mpi програмах
Індивідуальні операції з взаємодії процесів у mpi програмах
В операциях коллективного взаимодействия процессов участвуют все процессы коммуникатора. Соответствующая процедура должна быть вызвана каждым процессом, быть может, со своим набором параметров. Возврат из процедуры коллективного взаимодействия может произойти в тот момент, когда участие процесса в данной операции уже закончено. Как и для блокирующих процедур, возврат означает то, что разрешен свободный доступ к буферу приема или посылки. Асинхронных коллективных операций в MPI нет. В коллективных операциях можно использовать те же коммуникаторы, что и были использованы для операций типа точка-точка. MPI гарантирует, что сообщения, вызванные коллективными операциями, никак не повлияют на выполнение других операций и не пересекутся с сообщениями, появившимися в результате индивидуального взаимодействия процессов. Вообще говоря, нельзя рассчитывать на синхронизацию процессов с помощью коллективных операций (кроме процедуры MPI_BARRIER). Если какой-то процесс завершил свое участие в коллективной операции, то это не означает ни того, что данная операция завершена другими процессами коммуникатора, ни даже того, что она ими начата (если это возможно по смыслу операции).
Директива #pragma omp sections. Призначення, опції, приклади застосування
Напомним, что в рассмотренном ранее учебном материале для построения параллельных программ был изложен подход (см. подразделы 7.2 - 7.3), обычно именуемый распараллеливанием по данным, в рамках которого обеспечивается одновременное (параллельное) выполнение одних и тех же вычислительных действий над разными наборами обрабатываемых данных (например, как в нашем учебном примере, суммирование элементов разных строк матрицы). Другая также широко встречающаяся ситуация состоит в том, что для решения поставленной задачи необходимо выполнить разные процедуры обработки данных, при этом данные процедуры или полностью не зависят друг от друга, или же являются слабо связанными. В этом случае такие процедуры можно выполнить параллельно; такой подход обычно именуется распараллеливанием по задачам. Для поддержки такого способа организации п араллельных вычислений в OpenMP для параллельного фрагмента программы, создаваемого при помощи директивы parallel, можно выделять параллельно выполняемые программные секции(директива sections ).
Формат директивы sections имеет вид:
#pragma omp sections [<параметр> ...]
{ #pragma omp section
<блок_программы>
#pragma omp section
<блок_программы> }
При помощи директивы sections выделяется программный код, который далее будет разделен на параллельно выполняемые секции. Директивы sectionопределяют секции, которые могут быть выполнены параллельно (для первой по порядку секции директива section не является обязательной) - см.рис. 7.6. В зависимости от взаимного сочетания количества потоков и количества определяемых секций, каждый поток может выполнить одну или несколько секций (вместе с тем, при малом количестве секций некоторые потоки могут оказаться и без секций и окажутся незагруженными). Как результат, можно отметить, что использование секций достаточно сложно поддается масштабированию (настройке на число имеющихся потоков). Кроме того, важно помнить, что в соответствии со стандартом, порядок выполнения программных секций не определен, т.е. секции могут быть выполнены потоками в произвольном порядке.
В качестве параметров директивы sections могут использоваться:
|
|
|
Все перечисленные параметры уже были рассмотрены ранее. Отметим, что по умолчанию выполнение директивы sections синхронизировано, т.е. потоки, завершившие свои вычисления, ожидают окончания работы всех потоков для одновременного завершения директивы.
В заключение можно добавить, что также как и для директивы for, в случае если в блоке директивы parallel присутствует только директива sections, то данные директивы могут быть объединены.