- •Вычислительные процессы. Формальная модель. Свойства процесса.
- •2. Система процессов. Независимые процессы. Взаимодействие процессов.
- •Показатели параллельных вс и вычислений
- •4. Классы параллельных вс
- •5. Синхронная и асинхронная организация обмена сообщениями. Rdma.
- •Mpi: Стандарт mpi. Общие понятия. Области связи и коммуникаторы.
- •Общие процедуры mpi: Инициализация, Завершение.
- •Общие процедуры mpi: Определение общего числа параллельных процессов в группе. Определение номера процесса в группе.
- •Прием/передача сообщений между отдельными процессами (связь "точка-точка").
- •Посылка сообщения
- •Прием сообщения
- •Посылка и прием сообщения:
- •Mpi: Групповые (коллективные) взаимодействия. Рассылка целого сообщения процессам. Сборка данных от процессов. Групповые (коллективные) взаимодействия
- •Рассылка целого сообщения процессам
- •Сборка данных от процессов
- •Mpi: Групповые (коллективные) взаимодействия: Рассылка частей сообщения процессам. Сборка частей сообщения с процессов. Рассылка частей сообщения процессам
- •Выполнение глобальных операций с возвратом результатов во все процессы
- •Mpi: Синхронизация процессов. Синхронизация процессов
- •Mpi: Виртуализация топологии.
- •Декартова топология
- •Топология графа
- •Программирование мвс с общей памятью. Процессы и потоки в posix
- •OpenMp: Общие понятия. Область применения.
- •17. Директивы OpenMp: Директивы для определения параллельной области.
- •18. OpenMp: Директивы для распределения вычислений внутри параллельной области: Директива for.
- •19. OpenMp: Директивы для распределения вычислений внутри параллельной области: Директива sections. Директива single.
- •20. OpenMp: Директивы для распределения вычислений внутри параллельной области: Объединение директив parallel и for (sections).
- •Проблема тупиков в параллельных программных системах. Виды тупиков. Методы борьбы с тупиками в параллельных программных системах.
- •22.Централизованный метод обнаружения тупиков в параллельных программных системах
- •23. Децентрализованный метод обнаружения тупиков в параллельных программных системах
- •24.Предотвращение тупиков в параллельных программных системах
- •Синхронизация логического времени в параллельных программных системах
- •Синхронизация физического времени в параллельных программных системах
- •Распределение процессов по процессорам. Критерии и подходы. Распределение статической системы процессов.
- •28. Распределение процессов по процессорам. Централизованный метод “Up-Down”
- •29. Распределение процессов по процессорам. Иерархический алгоритм.
- •30. Распределение процессов по процессорам. Стохастические алгоритмы.
- •31. Формальные модели параллельных вычислений
- •Модель мультипотоковых вычислений Блумова-Лейзерсона
- •Планирование мультипотоковых вычислений. «Жадный планировщик».
- •Планирование мультипотоковых вычислений. «Занятые листья».
- •Планирование мультипотоковых вычислений. «Похитетель работ».
Декартова топология
MPI_CART_CREATE(COMM, NDIMS, DIMS, PERIODS, REORDER, COMM_CART,IERR)
INTEGER COMM, NDIMS, DIMS(*), COMM_CART, IERR
LOGICAL PERIODS(*), REORDER
Создание коммуникатора COMM_CART, обладающего декартовой топологией, из процессов коммуникатора сомм. Параметр NDIMS задает размерность получаемой декартовой решетки, DIMS (I) - число элементов в измерении I, 1<I<NDIMS. PERIODS - логический массив из NDIMS элементов, определяющий, является ли решетка периодической (значение .TRUE.) вдоль каждого измерения, REORDER - логический параметр, определяющий, что при значении .TRUE, системе разрешено менять порядок нумерации процессов для оптимизации распределения процессов по физическим процессорам используемого параллельного компьютера.
Процедура является коллективной, а значит, должна быть вызвана всеми процессами коммуникатора сомм. Если количество процессов в задаваемой топологии COMM_CART меньше числа процессов в исходном коммуникаторе сомм, то некоторым процессам может вернуться значение MPI_COMM_NULL, a значит, они не будут принимать участия в создаваемой топологии. Если количество процессов в задаваемой топологии больше числа процессов в исходном коммуникаторе, то вызов будет ошибочным.
Топология графа
MPI_GRAPH_CREATE(COMM, NNODES, INDEX, EDGES, REORDER, COMM_GRAPH, IERR)
INTEGER COMM, NNODES, INDEX(*), EDGES(*), COMM_GRAPH, IERR LOGICAL REORDER
Создание на основе коммуникатора сомм нового коммуникатора COMM_GRAPH с топологией графа. Параметр NNODES задает число вершин графа, INDEX(i) содержит суммарное количество соседей для первых I вершин. Массив EDGES содержит упорядоченный список номеров процессов-соседей всех вершин. Параметр REORDER при значении .TRUE, означает, что системе разрешено менять порядок нумерации процессов.
Процедура является коллективной, а значит, должна быть вызвана всеми процессами исходного коммуникатора. Если NNODES меньше числа процессов коммуникатора сомм, то некоторым процессам вернется значение MPI_COMM_NULL, а значит, они не будут принимать участия в создаваемой топологии. Если NNODES больше числа процессов коммуникатора сомм, то вызов процедуры является ошибочным.
Программирование мвс с общей памятью. Процессы и потоки в posix
+: не нужно перепроектировать проект, хорошая переносимость.
-: проблема масштабируемости; проблема увеличения числа процессов.
Процессы и потоки в POSIX.
Решают 2 проблемы:
Поток как «облегченный» процесс (light-weight process). Создание потока может занимать меньше 10% времени создания «полноценного» потока.
Упрощение обмена информацией между параллельными активными потоками. Потоки одного процесса разделяют адресное пространство процесса.
Процессы:
Обзор процесса:
-сегмент кодов; - сегмент данных; - динамический сегмент; - сегмент стека
Фазы работы процесса:
Прикладная (пользовательская) – имеет доступ к сегментам;
Системная – доступ к системным структурам данных.
Потоки: threads
Общие части потока |
Раздельные части |
Коды команд процесса |
Набор регистров, включая РС и указатель стека |
Сегмент данных |
Стек (хранит лок, дин. Переменные и адреса возвратов и подпрограмм) |
Открытые файлы (дескрипторы) |
Идентификатор потока |
Обработчик сигналов, настройки для обработки сигналов |
Маска сигналов |
Текущий рабочий каталог |
приоритет |
Идентификатор пользователя группы |
Errno (номер ошибки) |
Создание потоков:
- при запуске программы вызовем exeс, создается 1 поток – начальный поток (initial thread)
- добавочные потоки создаются thread_create
- задается функция, которая вызывается при запуске потока – начальная функция потока
- возвращает id порожденного потока pthread_t
Завершение потоков:
- явное завершение потока pthread_exit
- неявное – возврат из начальной функции потока
Pthread_self – возвращает id потока
Pthread_join – ожидание завершения потока
Pthread_detach – «отсоединение» потока (по завершению все ресурсы освобождаются, никакой другой процесс не может ждать его завершения)