Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpora_ROD_1.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

Билет №6

1. Планирование параллельной распределенной обработки данных.

2. Модель назначения объектов на узлы. Частоты запросов к объектам. Длины объектов. Производительность узлов. Производительность каналов передачи данных.

Модель, которую мы рассмотрим, позволит, с одной стороны, с достаточной степенью точности и, с другой стороны, с достаточной степенью абстрактности сформулировать задачу оптимизации назначения объектов на узлы.

Пусть N={1,…,n} — множество узлов, M={1,…,m} — множество объектов. Длины объектов опишем множеством L={l1,…,lm}. Эти длины определяют размеры памяти, необходимые для размещения объектов на узлах.

Пусть Q={qij|iN, jM} — множество запросов к объектам, принимаемых или генерируемых на узлах. Частоты появления запросов опишем множеством F={fij|iN, jM}, где fij — число запросов qij к объекту j с узла i в течение времени наблюдения Time_Period. Общее число запросов, поступивших за Time_Period, обозначим через (F). В ответ на запрос пересылается либо весь объект длиной lj, либо его часть длиной send(lj).

Узлы распределенной системы характеризуются параметрами. Пусть S={s1,…sn} — множество объемов памяти на узлах. Для того чтобы все объекты могли быть размещены, суммарный объем памяти (S) должен превышать суммарную длину объектов (L). Собственные времена обработки запросов на узлах опишем множеством R={rij|iN, jM}. Величина 1/rij есть число запросов к объекту j, обрабатываемых узлом i за единицу времени. Узлы различной производительности обрабатывают запросы к одному объекту за различное время.

Если запрос к объекту j принят или сгенерирован на узле k, но обрабатывается узлом i, данные об объекте длиной send(lj) составляют часть потока в канале (i,k) передачи данных. От того, на каких узлах размещаются объекты, зависят размеры потоков в каналах передачи данных. Временную задержку передачи единицы данных в канале (i,k) обозначим через cik. Множество C={cik | i,kN} описывает задержки во всех каналах передачи данных. Если узлы i, k не связаны каналом передачи данных, cik=. Производительность канала (i,k) определяется величиной 1/cik.

Распределенная информационно-вычислительная система характеризуется двумя основными временными параметрами: средним временем Trequest обработки одного запроса к объекту и временем Ttotal обработки всех запросов. Каждый из этих параметров складывается из двух составляющих Tprocessing+Twaiting, где Tprocessing — время непосредственной обработки (пересылки) на узле (канале связи); Twaiting — общее время ожидания, обусловленное случайным характером процесса поступления и обработки запросов. Внимание сфокусируем на первой составляющей.

Обозначим через X={xij|xij{0,1}, iN, jM} матрицу назначения объектов на узлы. Если xij=1, объект j размещается на узле i, в противном случае не размещается. Число объектов, размещенных на узле i, определяется выражением

na = , (1)

а емкость памяти, занимаемая объектами на узле i, определяется выражением

Sai= . (2)

Время обработки запроса к объекту j, поступившего с узла i и обрабатываемого узлом k, можно описать с достаточной степенью точности выражением fij * (rkj+cik*lj)*xkj. Поскольку при размещении объектов без репликаций все запросы к объекту j обрабатываются на одном узле, среднее время обработки запроса по всем узлам, всем объектам и всем запросам зависит от матрицы назначения X и оценивается выражением:

Trequest(X)= . (3)

Время Ttotal обработки всех запросов оценим через максимальную временную загрузку всех узлов и каналов. Загрузка узла kN определяется выражением

LoadNodek(X)= , (4)

в то время как максимальная загрузка узла выражением

LoadNodemax(X)= . (5)

Загрузка канала (i,k) оценивается в виде

LoadChannelik(X)= , (6)

в то время как максимальная загрузка канала в виде

LoadChannelmax(X)= . (7)

Тогда время обработки всех запросов определяется выражением

Ttotal(X)= . (8)

Рис. 1. Иллюстративный пример модели назначения объектов на узлы; число узлов n=3, число объектов m=10; время в R и C измерено в миллисекундах; время в векторе загрузки узлов Lnd и матрице загрузки каналов Lch выражено в секундах; значением функции send(lj) является lj; среднее время обработки запроса Trequest=7,3 мс; время обработки всех запросов Ttotal=2,19 с; средняя загрузка узла 74,3%; средняя загрузка канала 51,2%

Назначение объектов на узлы является корректным, если время обработки всех запросов не превышает ширину диапазона времени, на котором измерены частоты появления запросов, другими словами, если выполняется отношение

Ttotal(X) ≤ Time_Period. (9)

Относительная загрузка узлов оценивается как

LoadNdRelk =(LoadNodek(X) / Ttotal(X))*100%, для kN (10)

а относительная загрузка каналов оценивается как

LoadNdRelik=(LoadChannelik (X)/Ttotal(X))*100%, для i,kN (11)

Иллюстративный пример модели назначения объектов на узлы распределенной системы дан на рис. 1. Все компоненты модели представлены векторами и матрицами. Матрица X описывает одно из возможных назначений объектов на узлы и позволяет оценить объем используемой памяти на каждом узле, загрузку всех узлов и каналов, среднее время обработки одного запроса и время обработки всех запросов.

Задача - Дать пример виртуальной функции на языке С++.

Виртуальные функции отделяют интерфейс от реализации в зависимости от типов. Виртуальные функции предоставляют возможность объявлять в базовом классе методы, которые можно определять по-своему в каждом производном классе. Объявление виртуальной функции работает в качестве интерфейса к функциям, определенным в производных классах.

Типы аргументов функции в производном классе не должны отличаться от типов аргументов, объявленных в базовом классе. Небольшие изменения допускаются для типа возвращаемого значения

Спецификация функции в базовом классе как virtual вызываем позднее связывание (так называемое связывание во время выполнения). Если функция виртуальная в базовом классе, она виртуальная также во всех производных классах. Позднее связывание имеет место только при использовании адреса объекта базового класса, в котором функция объявляется.

class Animal

{

public:

char *Title; //кличка животного

Animal(char *t) {Title=t;} //простой конструктор

virtual void speak(void); //чистая виртуальная функция

};

//класс лягушка

class Frog: public Animal

{

public:

Frog(char *Title): Animal(Title) { };

virtual void speak(void) { cout<<Title<<" говорит "<<"'ква-ква'"<<endl; };

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]