
- •Гомогенні та гетерогенні обчислювальні системи
- •В яких спосіб реалізовано взаємодію процесів у 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_GROUP_EMPTY -пустая группа, не содержащая ни одного процесса. MPI_GROUP_NULL - значение, используемое для ошибочной группы.
Новые группы можно создавать как на основе уже существующих групп, так и на основе коммуникаторов, но в операциях обмена могут использоваться только коммуникаторы. Базовая группа, из которой создаются все остальные группы процессов, связана с коммуникатором MPI_COMM_WORLD, В нее входят все процессы приложения. Операции над группами процессов являются локальными, в них вовлекается только вызвавший процедуру процесс, а выполнение не требует межпроцессного обмена данными. Любой процесс может производить операции над любыми группами, в том числе над такими, которые не содержат данный процесс. При операциях над группами может получиться пустая группаMPI_GROUP_EMPTY.
MPI_COMM_GROUP(COMM, GROUP, IERR) INTEGER COMM, GROUP, IERR
Получение группы GROUP, соответствующей коммуникатору сомм. В языке Си параметр GROUP имеет предопределенный тип MPi_Group. Поскольку изначально существует единственный нетривиальный коммуникатор MPI_COMM_WORLD, сначала нужно получить соответствующую ему группу процессов. Это можно сделать при помощи следующего вызова:
call MPI_COMM_GROUP(MPI_COMM_WORLD, group, ierr)
MPI_GROUP_INCL(GROUP, N, RANKS, NEWGROUP, IERR) INTEGER GROUP,
N, RANKS(*), NEWGROUP, IERR
Создание группы NEWGROUP из N процессов прежней группы GROUP с рангами RANKS (l),...,RANKS (N) , причем рангу RANKS (I) в старой группе соответствуетранг i-l в новой группе. При N=0 создается пустая группа MPI_GROUP_EMPTY. Возможно использование этой процедуры для задания нового порядка процессов в группе.
MPI_GROUP_EXCL(GROUP, N, RANKS, NEWGROUP, IERR) INTEGER GROUP,
N, RANKS(*), NEWGROUP, IERR
Создание группы NEWGROUP ИЗ процессов группы GROUP, исключая процессы с рангами RANKS (1),...,RANKS (N) , причем порядок оставшихся процессов в новой группе соответствует порядку процессов в старой группе. При N=0 создается группа, идентичная старой группе.
Моделі паралельних обчислень
В модели передачи сообщений параллельная программа представляет собой множество процессов, каждый из которых имеет собственное локальное адресное пространство. Взаимодействие процессов - обмен данными и синхронизация - осуществляется посредством передачи сообщений. Обобщение и стандартизация различных библиотек передачи сообщений привели в 1993 году к разработке стандарта MPI (Message Passing Interface). Его широкое внедрение в последующие годы обеспечило коренной перелом в решении проблемы переносимости параллельных программ, разрабатываемых в рамках разных подходов, использующих модель передачи сообщений в качестве модели выполнения.
В числе основных достоинств MPI по сравнению с интерфейсами других коммуникационных библиотек обычно называют следующие его возможности:
Возможность использования в языках Фортран, Си, Си++;
Предоставление возможностей для совмещения обменов сообщениями и вычислений;
Предоставление режимов передачи сообщений, позволяющих избежать излишнего копирования информации для буферизации;
Широкий набор коллективных операций (например, широковещательная рассылка информации, сбор информации с разных процессоров), допускающих гораздо более эффективную реализацию, чем использование соответствующей последовательности пересылок точка-точка;
Широкий набор редукционных операций (например, суммирование расположенных на разных процессорах данных, или нахождение их максимальных или минимальных значений), не только упрощающих работу программиста, но и допускающих гораздо более эффективную реализацию, чем это может сделать прикладной программист, не имеющий информации о характеристиках коммуникационной системы;
Удобные средства именования адресатов сообщений, упрощающие разработку стандартных программ или разделение программы на функциональные блоки;
Возможность задания типа передаваемой информации, что позволяет обеспечить ее автоматическое преобразование в случае различий в представлении данных на разных узлах системы.
Модель параллелизма по управлению. OpenMP.
OpenMP – это интерфейс прикладной программы, расширяющий последовательный язык программирования набором директив компилятора, вызовов функций библиотеки поддержки выполнения и переменных среды.
Программа начинает свое выполнение как один процесс, называемый главной нитью. Главная нить выполняется последовательно, пока не встретится первая параллельная область программы. Параллельная область определяется парой директив PARALLEL и END PARALLEL. При входе в параллельную область главная нить порождает некоторое число подчиненных ей нитей, которые вместе с ней образуют текущую группу нитей. Все операторы программы, находящиеся в параллельной конструкции, включая и вызываемые изнутри нее процедуры, выполняются всеми нитями текущей группы параллельно, пока не произойдет выход из параллельной области или встретится одна из конструкций распределения работы - DO, SECTIONS или SINGLE.
Конструкция DO служит для распределения витков цикла между нитями, конструкция SECTIONS – для распределения между нитями указанных секций программы, а конструкция SINGLE указывает секцию, которая должна быть выполнена только одной нитью.
При выходе из параллельной конструкции все порожденные на входе в нее нити сливаются с главной нитью, которая и продолжает дальнейшее выполнение.
В программе может быть произвольное число параллельных областей, причем допускается их вложенность.
При параллельной области можно указать классы используемых в ней переменных (общие или приватные). Имеются директивы высокоуровневой синхронизации (критические секции, барьер, и пр.).
Набор функций системы поддержки и переменных окружения служит для управления количеством создаваемых нитей, способами распределения между ними витков циклов, для низкоуровневой синхронизации нитей с помощью замков.
Все операторы, входящие лексически в параллельную конструкцию, определяют ее статическое содержимое (экстент). В динамическое содержимое параллельной конструкции входят и все вызываемые из нее процедуры.
Программист может использовать директивы в процедурах, вызываемых из параллельной конструкции. Такие директивы, которые не входят в статическое содержимое параллельной конструкции, но принадлежат ее динамическому содержимому, называются нелокализованными директивами. Программист может, внеся небольшие изменения в последовательную программу (охватив параллельной конструкцией только верхние уровни дерева вызовов процедур), обеспечить параллельное выполнение почти всей программы и управлять этим выполнением, вставляя директивы в вызываемые процедуры.