
- •Билет №1
- •1.Составные части и свойства распределенной системы
- •2. Удаленный сервер
- •Билет №2
- •1. Параллелизм в распределенной системе
- •2. Реализация локального сервера
- •Билет №3
- •1. Закон Амдала
- •2. Заместитель/заглушка. Компилятор midl
- •Билет №4
- •1. Ускорение решения задачи в распределенной параллельной системе
- •2. Язык idl
- •Билет №5
- •1. Последовательные операции. Параллельные операции. Число процессоров.
- •2. Назначение данных на узлы распределенной системы. Модель назначения объектов на узлы. Сокращение трафика в каналах передачи данных.
- •Билет №6
- •1. Планирование параллельной распределенной обработки данных.
- •2. Модель назначения объектов на узлы. Частоты запросов к объектам. Длины объектов. Производительность узлов. Производительность каналов передачи данных.
- •Билет №7
- •1. Параллелизм в пространстве и во времени (конвейерный параллелизм)
- •2. Среднее время обработки одного запроса. Минимизация времени
- •Многошаговое планирование на базе asap
- •Билет №8
- •1. Синхронное и асинхронное планирование.
- •2. Время обработки всех запросов к объектам. Загрузка узлов. Загрузка каналов передачи данных.
- •Билет №9
- •1. Планирование при ограничениях на ресурсы, время, достижимость
- •2. Локальный вызов процедуры. Маршалинг Локальный вызов процедуры
- •Маршалинг
- •Б илет №10
- •Стратегия планирования asap Алгоритм планирования asap (как можно раньше)
- •2. Серверы в exe.
- •Билет №11
- •1. Стратегия планирования alap
- •2. Включение и агрегирование компонентов
- •Стратегия планирования «Группировка доминирующей последовательности» (Dominant Sequence Clustering - dsc)
- •Билет №12
- •1. Стратегия спискового планирования
- •Регистрация компонента в реестре
- •Билет №13
- •1. Многошаговое планирование
- •2. Функции CoGetClassObject и DllGetClassObject и их использование
- •Билет №14
- •1. Цепочечное планирование
- •2. Интерфейс iClassFactory
- •Билет №15
- •1. Граф предшествования и граф распараллеленности операций
- •2. Фабрика класса
- •Билет №16
- •1. Свертывание графа распараллеленности операций
- •2. Использование динамической библиотеки. Экспорт функций из библиотеки. Загрузка и выгрузка dll
- •Билет №17
- •1. Синтез последовательно параллельного плана
- •2. Динамическая компоновка. Библиотеки dll. Создание динамической библиотеки
- •Билет №18
- •1. Модель разнородной распределенной системы
- •2. Управление временем жизни компонента. Подсчет ссылок
- •Билет №19
- •1. Сведение планирования к задаче целочисленного линейного программирования
- •2. Запрос интерфейса. Интерфейс iUnknown. Реализация интерфейса
- •Билет №20
- •1. Задача минимизации ресурсов при заданном времени реализации плана
- •2. Таблица виртуальных функций
- •Билет №21
- •1. Целочисленное линейное программирование. Пример. Целевая функция. Система ограничений
- •Многошаговое планирование на базе asap
- •Билет №22
- •1. Планирование выполнения графа задач на узлах распределенной системы с учетом обмена данными
- •2. Теория интерфейсов
- •Неизменность интерфейсов
- •Билет №23
- •1. Граф задач. Назначение задач на процессоры. Обмен данными. План решения задач на каждом процессоре. Планирование выполнения графа задач на узлах распределенной системы с учетом обмена данными
- •Планирование графа задач
- •2. Языки и инструменты программирования распределенной обработки данных.
- •Билет №24
- •1. Стратегии планирования на графе задач. Планирование графа задач
- •2. Процессы и потоки. Многопоточные приложения. Модель многопоточных приложений
- •Билет №25
- •1. Стратегия планирования «Наиболее ранняя задача первая» (Earliest Task First - etf). Стратегия планирования «Наиболее ранняя задача первая» (Earliest Task First - etf)
- •2. Инкапсуляция. Полиморфизм. Виртуальные функции. Чисто абстрактные базовые классы. Множественное наследование. Инкапсуляция.
- •Полиморфизм и виртуальные функции
- •Чисто абстрактные базовые классы
- •Множественное наследование классов. Компоненты
- •Типы операций:
- •Билет №26
- •1. Стратегия планирования «Зануление дуг» (Edge Zeroing - ez). Стратегия планирования «Зануление дуг» (Edge Zeroing - ez)
- •2. Преимущество использования компонентов. Требования к компонентам. Преимущества использования компонентов
- •Требования к компонентам
- •Билет №27
- •2. Модель компонентных объектов com.
- •Билет №28
- •1. Стратегия планирования «Управление мобильностью» (Mobility Directed - md). Стратегия планирования «Управление мобильностью» (Mobility Directed - md)
- •2. Интерфейс передачи сообщений (Message Passing Interface - mpi). Интерфейс передачи сообщений mpi
- •Билет №29
- •1. Граф взаимодействия задач. Граф разнородной сети. Планирование решения задач в разнородной распределенной системе
- •Постановка проблемы
- •2 . Интерфейс OpenMp. Интерфейс OpenMp
- •Билет №30
- •Постановка проблемы
- •Алгоритм а* оптимального назначения задач на процессоры
- •2. Технологический стандарт написания распределённых приложений corba. Технологический стандарт corba
Билет №3
1. Закон Амдала
Закон Амдала. Одной из главных характеристик параллельных систем является ускорение R параллельной системы, определяемое выражением:
(1)
где T1 . время решения задачи на однопроцессорной системе,
Tn - время решения той же задачи на n-процессорной системе.
Пусть W = Wпосл + Wпар, где W ‑ общее число операций в задаче; Wпар - число операций, которые можно выполнять параллельно; Wпосл ‑ число последовательно выполняемых операций. Обозначим через t время выполнения одной операции. Тогда достигаемое на параллельной системе ускорение:
(2)
где a = Wпосл/W − доля последовательных операций в общем числе операций.
Закон Амдала определяет принципиально важные для параллельных вычислений положения:
1. Ускорение зависит от потенциального параллелизма задачи (величина 1-а) и параметров аппаратуры (числа процессоров n).
2. Предельное ускорение определяется свойствами задачи.
Сетевой закон Амдала. Основной вариант закона Амдала не отражает потерь времени на межпроцессорный обмен данными. Эти потери могут не только снизить ускорение вычислений, но и замедлить вычисления по сравнению с однопроцессорным вариантом. Поэтому необходима корректировка выражения (2). Пусть Wc − количество передач данных между процессорами, tc − время одной передачи. Тогда закон Амдала переписывается в следующем виде:
. (3)
где c - коэффициент сетевой деградации вычислений, определяемый выражением
(4)
Коэффициент c определяет соотношение времени одной передачи данных и времени вычислений на процессорах в промежутке между двумя обменами. Величина сА определяет алгоритмическую составляющую коэффициента деградации, обусловленную свойствами алгоритма, величина сТ определяет техническую составляющую, которая зависит от соотношения технического быстродействия процессора и аппаратуры сети.
Закон Амдала полезен тем, что он дает быструю и простую оценку возможного ускорения при переходе от последовательного алгоритма к его параллельной реализации. Недостатком является невысокая точность оценки и невозможность учета конкретных параметрических и структурных особенностей алгоритма.
2. Заместитель/заглушка. Компилятор midl
При вызове функции EXE необходимо передать параметры функции из адресного пространства клиента в адресное пространство компонента. Этот процесс называется маршалингом (marshaling).
Для реализации LPC(локальный вызов процедур) в модели СОМ клиент взаимодействует с DLL, которая изображает собой компонент. Эта DLL выполняет за клиента маршалинг и вызовы LPC. В COM такой компонент называется заместителем (proxy). В терминах СОМ, заместитель — это компонент, который действует как другой компонент. Заместители должны находиться в DLL, так как им необходим доступ к адресному пространству клиента для маршалинга данных, передаваемых ему функциями интерфейса. Но маршалинг — это лишь половина дела; компоненту еще требуется DLL, называемая заглушкой (stub), для демаршалинга данных, переданных клиентом. Заглушка выполняет также маршалинг данных, возвращаемых компонентом обратно клиенту (рис. 4).
Теперь, когда у нас есть файл IDL, его можно пропустить через компилятор MIDL, который сгенерирует несколько файлов. Если описания наших интерфейсов находятся в файле FOO.IDL, то скомпилировать этот файл можно следующей командой: midl foo.idl. Заглушкой и будет наши получившиеся файлы.
FOO.H Заголовочный файл (для С и С++), содержащий объявления всех интерфейсов, описанных в файле IDL. Имя заголовочного файла можно изменить с помощью параметра командной строки /header или /h.
FOO_I.C Файл С, в котором определены все GUID, использованные в файле IDL. Имя файла можно изменить с помощью параметра командной строки /iid.
FOO_P.C Файл С, реализующий код заместителей и заглушек для всех описанных в файле IDL интерфейсов. Имя файла можно изменять с помощью параметра командной строки /proxy.
Задача - Привести пример программы на MPI и дать соответствующие пояснения
MPI - интерфейс для многопроцессорных систем с индивидуальной памятью.
MPI является библиотекой функций межпроцессного обмена сообщениями и содержит около 130 функций, которые делятся на следующие классы: операции точка-точка, операции коллективного обмена, топологические операции, системные и вспомогательные операции.
В принципе, любая параллельная программа может быть написана с использованием всего 6 MPI-функций, а достаточно полную и удобную среду программирования составляет набор из 24 функций. Определение всех именованных констант, прототипов функций и определение типов выполняется подключением файла mpi.h.
Любая прикладная MPI-программа (приложение) должна начинаться с вызова функции инициализации MPI – функции MPI_Init. В результате выполнения этой функции создаются все процессы приложения, и создается область связи, описываемая предопределенным коммуникатором MPI_COMM_WORLD. Процессы в группе упорядочены и пронумерованы от 0 до groupsize-1. Кроме этого создается предопределенный коммуникатор MPI_COMM_SELF, описывающий свою область связи для каждого отдельного процесса.
Прототип функции инициализации:
int MPI_Init(int *argc, char ***argv);
В программах на C каждому процессу при инициализации передаются аргументы функции main, полученные из командной строки. В программах на языке FORTRAN параметр IERROR является выходным и возвращает код ошибки.
Функция завершения MPI-программ MPI_Finalize:
int MPI_Finalize(void);
Она закрывает все MPI-процессы и ликвидирует все области связи.
Функция определения числа процессов в области связи MPI_Comm_size:
int MPI_Comm_size(MPI_Comm comm, int *size);
comm – коммуникатор;
size – число процессов в области связи коммуникатора comm.
Функция возвращает количество процессов в области связи коммуникатора comm.
До создания явным образом групп и связанных с ними коммуникаторов единственно возможными значениями параметра COMM являются MPI_COMM_WORLD и MPI_COMM_SELF, которые создаются автоматически при инициализации MPI.
Функция определения номера процесса MPI_Comm_rank:
int MPI_Comm_rank(MPI_Comm comm, int *rank)
comm – коммуникатор;
rank – номер процесса, вызвавшего функцию.
Функция возвращает номер процесса, вызвавшего эту функцию. Номера процессов лежат в диапазоне 0..size-1 (значение size может быть определено с помощью предыдущей функции). Подпрограмма является локальной.
В минимальный набор входят две функции передачи и приема сообщений.
Функция передачи сообщения MPI_Send:
int MPI_Send(void* buf, int count, MPI_Datatype datatype,
int dest, int tag, MPI_Comm comm);
buf – адрес начала расположения пересылаемых данных;
count – число пересылаемых элементов;
datatype – тип посылаемых элементов;
dest – номер процесса-получателя в группе, связанной с коммуникатором comm;
tag – идентификатор сообщения (аналог типа сообщения функций nread и nwrite PSE nCUBE2);
comm – коммуникатор области связи.
Функция выполняет посылку count элементов типа datatype сообщения с идентификатором tag процессу dest в области связи коммуникатора comm. Переменная buf – это, как правило, массив или скалярная переменная. В последнем случае значение count = 1.
Функция приема сообщения MPI_Recv:
int MPI_Recv(void* buf, int count, MPI_Datatype datatype,
int source, int tag, MPI_Comm comm, MPI_Status *status)
buf – адрес начала расположения принимаемого сообщения;
count – максимальное число принимаемых элементов;
datatype – тип элементов принимаемого сообщения;
source – номер процесса-отправителя;
tag – идентификатор сообщения;
comm – коммуникатор области связи;
status – атрибуты принятого сообщения.
Функция выполняет прием count элементов типа datatype сообщения с идентификатором tag от процесса source в области связи коммуникатора comm.
Приведем с использованием MPI пример программы вычисления числа π. Вычисление числа π сводится к вычислению интеграла по следующей формуле:
где
.
#include "mpi.h"
#include <math.h>
int main ( int argc, char *argv[] ) {
int n, myid, numprocs, i; /* число ординат, имя и число процессов*/
double PI25DT = 3.141592653589793238462643; /* для оценки точности вычислений */
double mypi, pi, h, sum, x;
/* mypi – частное значение отдельного процесса, pi – полное значение . */
MPI_Init(&argc, &argv); /* задаются системой*/
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
while (1) {
if (myid == 0) {
printf ("Enter the number of intervals: (0 quits) "); /*ввод числа ординат*/
scanf ("%d", &n);
}
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (n == 0) /* задание условия выхода из программы */
break;
else {
h = 1.0/ (double) n; /* вычисление частного значения . некоторого процесса */
sum = 0.0;
for (i = myid +1; i <= n; i+= numprocs) {
x = h * ( (double)i - 0.5);
sum += (4.0 / (1.0 + x*x));
}
mypi = h * sum; /* вычисление частного значения . некоторого процесса */
MPI_Reduce(&mypi,&pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
/* сборка полного значения . */
if (myid == 0) /* оценка погрешности вычислений */
printf ("pi is approximately %.16f. Error is %.16f\n", pi, fabs(pi - PI25DT));
}
}
MPI_Finalize(); /* выход из MPI */
return 0;
}