 
        
        - •Теории параллельных вычислений
- •Часть 1
- •Теории параллельных вычислений. Часть 1. Методические указания / Сост. К.В.Кротов - Севастополь: Изд-во СевНту, 2009.- 87 с.
- •Содержание
- •1 Параллельные вычисления. Вводные понятия
- •1.1 Параллелизм уровня заданий
- •Отличие мультипрограммирования от распараллеливания
- •Параллельность в режиме мультипрограммирования
- •1.2 Параллелизм уровня программ
- •Особенности параллелизма уровня программ
- •1.3 Параллелизм уровня команд
- •2 Эффективность функционирования параллельных вычислительных систем
- •Закон Амдала
- •2.2 Закон Густафсона
- •3 Классификация параллельных вычислительных систем
- •1). По количеству потоков команд и данных в системе:
- •3.1 Система окод (sisd)
- •3.2 Система мкод (misd)
- •3.3 Системы класса окмд (simd)
- •3.4 Системы мкмд (mimd)
- •2). Признак классификации в соответствии со степенью связанности элементов вс.
- •3.5 Матричные системы (окмд)
- •3.6 Системы с ансамблем процессоров (окмд)
- •3). Признак классификации вс на основе межпроцессорного обмена
- •Классификация систем типа мкмд (mimd)
- •Симметричные мультипроцессоры (smp)
- •3.7 Структурная организация smp-систем
- •3.9 Гибридные системы (numa-системы)
- •4 Вычислительные кластеры
- •Организация кластера
- •Магистральные системы (конвейерные)
- •5 Организация конвейерных вычислений. Конвейер команд
- •Организация конвейера команд
- •Временная диаграмма конвейера
- •5.1 Арифметический конвейер
- •Временные диаграммы
- •5.2 Понятие векторных вычислений (операций)
- •Упрощенная схема векторного процессора
- •Организация векторного процессора
- •Временные диаграммы обработки векторов
- •Структура реализации векторного процессора
- •6 Примеры систем, реализующих конвейерные вычисления
- •6.1 Вс с вычислительной магистралью и с реализацией модели «Память-память»
- •Особенности функционирования системы
- •6.2 Вс с арифметико-командной магистралью и с реализацией модели «Регистр – регистр»
- •Функциональная схема вычислительной системы
- •Секция (группа) функциональных устройств
- •Группа буферных регистров
- •Секция управления
- •7 Системы класса simd. Матричные системы
- •Упрощенная структурная организация вс
- •Организация и функционирование блоков матричной вс
- •7.1 Организация процессорного элемента (пэ)
- •7.2 Упрощенная организация системы (MasPar)
- •7.3 Контроллер массива
- •Особенности, связанные с управлением пэ
- •Функциональная схема
- •8 Системы класса mimd
- •Архитектуры mimd систем
- •9 Smp системы
- •Архитектура smp
- •10 Организация простых коммутаторов
- •Функциональная организация процессора (xmp)
- •11Составные перекрестные коммутаторы
- •11.1 Коммутатор Клоза
- •Функциональная организация связей
- •Принцип формирования коммутатора
- •11.2 Коммуникационная сеть omega
- •12 Примеры реализации smp систем (систем с общедоступной памятью)
- •21.3 Сервер hp 9000
- •13 Системы pvm. Общие понятия
- •13.1 Особенности реализации распределенных вычислений в pvm
- •13.2 Архитектура pvm
- •13.3 Понятие идентификатора задачи (Tid)
- •13.4 Модели передачи сообщений в pvm
- •13.5 Технология создания pvm-программ
- •13.6 Определение (задание) конфигурации вычислительного кластера (параллельной виртуальной машины)
- •13.7 Организация распределённого выполнения параллельных программ на пк вычислительного кластера с обменом сообщениями между ними
- •13.8 Управление конфигурацией вычислительного кластера средствами pvm
- •13.9 Взаимодействие распределено выполняемых процессов с помощью сообщений. Образование каналов передачи данных
- •14 Основные понятия распределенных вычислений
- •14.1 Основные понятия передачи сообщений по каналам
- •14.2 Схемы «Взаимодействующие равные» при обмене между процессами
- •Централизованное решение
- •Распределенное («симметричное ») решение
- •Кольцевое решение
- •14.3 Взаимодействие процессов по схеме «Клиент-сервер»
- •Общая схема взаимодействия между клиентом и сервером
- •Упрощенная схема взаимодействия клиента с ресурсами
- •Информационные структуры сервера
- •14.4 Модели взаимодействия распределенных процессов Модель «зонд-эхо»
- •Построение топологии вычислительного кластера
- •Шаги процесса формирования топологий (1 вариант)
- •Алгоритм формирования топологии кластера (вариант 2)
- •Особенности построения топологии кластера с циклами
- •Построение остовного дерева кластера
- •15 Алгоритм распределенной синхронизации доступа к обзщим ресурсам
- •15.1 Распределенные семафоры
- •Понятие логических часов в распределенных семафорах
- •15.2 Алгоритм передачи маркера
- •16 Изучение алгоритмов работы с распределенными базами данных
13.8 Управление конфигурацией вычислительного кластера средствами pvm
Управление вычислительным кластером складывается из двух частей:
- сбора информации о состоянии кластера в целом и отдельных его хостов; 
- изменение конфигурации или режима работы кластера. 
Контроль за состоянием виртуальной машины (ВМ) позволяет повысить устойчивость выполнения параллельной программы (за счет контроля аварийных ситуаций на хостах и переключения выполнения программы на других хостах), а также увеличить эффективность использования вычислительных ресурсов. Если в процессе работы программе потребуются дополнительные вычислительные ресурсы (дополнительные хосты), она может самостоятельно изменить конфигурацию ВМ в соответствии со своими потребностями, добавив в нее новые хосты. Если потребность в ресурсах снизилась, ненужные хосты могут быть исключены из конфигурации ВМ, тем самым вычислительные ресурсы освобождаются для использования другими процессами.
Если какой-то из хостов не удается включить в ВМ или работающий хост перешел в состояние аварийного прекращения выполнения задачи, программа самостоятельно подключает другой хост из числа доступных.
Библиотека PVM позволяет раздельно контролировать состояние выполняющихся задач и состояние работающих в составе вычислительного кластера хостов. Для получения информации о процессе с идентификатором tid используется подпрограмма pvm_pstat:
Int status = pvm_pstat (tid);
Результатом выполнения данной подпрограммы является значение переменной status может принимать одно из трех значений:
1). Pvm Ok – задача выполняется;
2). Pvm No Task – задача не выполняется;
3). Pvm Bad Param – неправильно задан идентификатор tid.
Если задача на хосте не выполняется, то либо она аварийно прервана, либо закончила свое выполнение (если задача аварийно прервана, то произошел сбой хоста), то хост, на котором она выполнялась может быть выведен из состава ВМ.
Аналогично, может быть проконтролировано состояние хоста, входящего в состав ВМ. Для этого используется подпрограмма библиотеки PVM pvm_mstat:
Int mstat = pvm_mstat (host);
где параметр ''host'' определяет символьное имя хоста, состояние которого контролируется. Результатом выполнения этой подпрограммы является значение переменной mstat:
- Pvm Ok – работает нормально; 
- Pvm No Host – хост не входит в состав виртуальной машины; 
- Pvm Host Fail – хост недостижим по причине аппаратного сбоя. 
Другим вариантом контроля работоспособности хостов вычислительного кластер и выполнения на них программ является использование подпрограммы pvm_notify. Данная подпрограмма активизирует режим оповещения вызвавшей ее задачи о событиях, происходящих на хосте, входящем в состав ВМ.
В случае реализации некоторого события на указанном хосте вызвавшая подпрограмму pvm_notify задача получает об этом уведомление и обрабатывает его самостоятельно.
Формат вызова подпрограммы pvm_notify:
Int ierr = pvm_notify (what, msq tag, cwt, tids);
Параметр what задает тип события, которое контролируется на хосте, входящем в состав ВМ, и о котором оповещается задача, вызвавшая подпрограмму pvm_notify:
- Pvm Task Exit – оповещать о завершении работы задачи на хосте; 
- Pvm Host Delete – оповещать, если хост удаляется из ВМ или произошел аппаратный сбой; 
- Pvm Host Add – оповещать о добавлении в виртуальную машину нового хоста. 
Параметр msq tag (тип целый ), значение которого задается разработчиком, позволяет контролировать количество сформулированных сообщений о событиях. Параметр (массив) tids (тип целый) определяет идентификатор процесса (хост), контроль событий для которого осуществляется (к которому относится действие ключей TaskExit и HostDelete. При использовании ключа HostAdd данный массив должен быть пустым). Параметр cwt (тип целый) определяет количество сообщений, которое может быть передано одновременно. Результатом выполнения подпрограммы pvm_notify является возвращаемое значение переменной ierr, которое, будучи положительным, говорит о реализации заданного в подпрограмме события.
Сбор информации о вычислительном кластере осуществляется подпрограммой pvm_config, вызов которой имеет следующий формат:
Int ierr = pvm_config (nhost, narch, hostp);
Параметр nhost (тип целый) возвращает количество хостов в ВМ, параметр narch (тип целый) определяет количество различных форматов хранения данных на хостах ВМ.
Параметр hostp является указателем на массив структур pvm hostinfo. Структура pvm hostinfo состоит из следующих параметров:
- hi_tid (тип целый) – определяет идентификатор задачи на соответствующем хосте; 
- hi_name (тип символьный) – определяет имя хоста, входящего в состав ВМ; 
- hi_arch (тип символьный) – определяет наименование архитектуры хоста, входящего в состав ВМ; 
- hi_speed (тип целый) – определяет относительное быстродействие центрального процессора на соответствующем хосте. 
Изменение конфигурации кластера осуществляется путем вызова подпрограммы pvm_allhosts (добавление новых хостов в ВМ) и pvm_delhost (удаление хостов из ВМ), вызов которых осуществляется в следующем формате:
int ierr = pvm_addhosts (hosts, nhost, ierrs);
int ierr = pvm_delhosts (hosts, nhosts, ierrs);
Указываемые при вызове подпрограмм параметры предназначены для:
- hosts – указатель на массив из строк символов, содержащих имена добавляемых (удаляемых хостов (при добавлении/удалении одного хоста – указатель на строку символов с именем хоста); 
- nhost – целочисленное количество добавляемых/удаляемых хостов; 
- ierrs nhost – целочисленный массив из nhost элементов, содержащий коды завершения операций для каждого хоста. Отрицательные значения элементов массива соответствуют ошибкам при выполнении вызываемой подпрограммы. 
Результатом выполнения программ (в частности pvm_addhosts) является значение переменной ierr, которое характеризует количество добавленных в вычислительный кластер узлов.
Пример программы, контролирующий аппаратные сбои на хостах вычислительного кластера и переключающий выполнение программы на другие хосты, приведен ниже.
# include ''pvm3.h''
main
{
//локальные объявления переменных
mytid1=pvm_mytid();
ierr1=pvm_spawn (“PROG1”, 1char**)0, 0, “host1”, tid1);
ierr=pvm_config (nhost, narch, hostp);
printf (''Текущая кофигурация ВМ'', nhost, hostp);
//контроль за реализацией задачи на хосте “host1”
ierr3=pvm_notify (PvmHostDelete, 1, 1, tid1);
(if ierr>3) {host=”host2”;
ierr4=pvm_addhosts (& host, 1, ierrs);
(if ierr4= = 1) {ierr1=pvm_spawn (“PROG1”, (char**)0, 0, “host2”, tid1);
ierr2=pvm_config (nhost, narch, hostp);
printf (''новая конфигурация ВМ'', nhost, hostp);
}}
… … … … …
Pvm_exit();
}
