Вы находитесь на странице: 1из 13

«Национальный исследовательский ядерный университет «МИФИ»

ИНСТИТУТ ИНТЕЛЛЕКТУАЛЬНЫХ КИБЕРНЕТИЧЕСКИХ СИСТЕМ

КАФЕДРА КОМПЬЮТЕРНЫХ СИСТЕМ И ТЕХНОЛОГИЙ (012)

Лабораторная работа №2
по учебной дисциплине «Методы параллельной обработки»

Эффективность параллельного решения задачи («Кольцо»).

Вариант 5

Выполнил: Герасимычев Д.М.


Группа: С19-501
Проверил: Шувалов В. Б.

Москва, 2023 г.
Цель работы: исследование хода вычислительного процесса для различных видов
архитектур многопроцессорных вычислительных систем

ВАРИАНТ ЗАДАНИЯ

( x 4 + y 4 ) (x 2+ y 2) y 4 ( xy + y 2 )
f (x , y , z)= +
xy + y
2
( x 2 + z 2) (x2 + y 2 )
План выполнения работы
1) Провести тестирование знаний с помощью соответствующей подпрограммы
лабораторного комплекса.

2) Выбрать вкладку «Алгоритм» и ввести алгоритм.

3) Выбрать вкладку «Архитектура и выполнение» и выбрать топологию


многопроцессорной вычислительной системы, количество процессоров, а также число
тактов, необходимое системе для одной пересылки данных между двумя соседними
процессорами.

4) Запустить процесс выполнения и зарегистрировать результаты в соответствии с


табл. 2 при различных значениях количества процессоров.

5) Рассчитать эффективность и ускорение параллельного алгоритма при его


выполнении на данной многопроцессорной вычислительной системе. Полученные
результаты занести в таблицу 3.

6) Провести анализ журнала выполнения алгоритма для варианта, имеющего


лучшие показатели эффективности и ускорения (образец - см. Приложение).

7) Определить причины отклонения ускорения от максимального значения и


предложить вариант их устранения.

8) Повторить п.п. 3-7 для всех вариантов топологий.

9) Выбрать из всех архитектур вычислительных систем такую, при выполнении на


которой заданный алгоритм имел бы самые лучшие показатели ускорения и
эффективности.

10) Результаты отразить в лабораторном отчете

2
Теоретическая часть
Диаметр – показатель, определяемый как максимальное расстояние между двумя
узлами системы (под расстоянием обычно понимается величина кратчайшего пути между
узлами системы). Эта величина может характеризовать максимально необходимое время
для передачи данных между узлами, поскольку время передачи обычно прямо
пропорционально длине пути;

Связность - показатель, характеризующий наличие разных маршрутов передачи


данных между процессорами сети. Конкретный вид данного показателя может быть
определен, например, как минимальное количество дуг, которое надо удалить для
разделения сети передачи данных на две несвязные области;

Ширина бинарного деления - показатель, определяемый как минимальное


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

Стоимость – показатель, который может быть определен, например, как общее


количество линий передачи данных в многопроцессорной вычислительной системе.

Степенью параллелизма численного алгоритма называется число его операций,


которые можно выполнять параллельно.

Средней степенью параллелизма численного алгоритма называется отношение


общего числа операций алгоритма к числу его этапов.

Ускорением параллельного алгоритма называется отношение времени выполнения


алгоритма на одном процессоре ко времени выполнения алгоритма в системе из P
процессоров.

Для задачи сложения векторов следовало бы ожидать, что SP = P, т. е. ускорение


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

Эффективностью параллельного алгоритма называется отношение ускорения


параллельного алгоритма к числу процессоров в системе.

Эффективностью параллельного алгоритма по отношению к наилучшему


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

3
по сравнению с наилучшим последовательным алгоритмом к числу процессоров в
системе.
Ярусно-параллельная структурированная схема — это граф, вершинам которого
соответствуют блоки вычислений, а дугам – пересылки данных. Считается, что исходные
данные для выполнения первого яруса вычислений уже загружены в процессоры.

4
Ход выполнения работы

Исходные данные

Заданная функция:
4 2 2 4 2
( x ¿ ¿ 4+ y )( x + y ) y (xy + y )
f ( x ; y ; z )= 2
+ 2 2 2 2 ¿
xy + y (x + z )(x + y )

Выполнение

Алгоритм вычисления функции представлен на рисунке 1:

Рисунок 1 – Алгоритм вычисления функции

В таблице 1 представлена структурная таблица для алгоритма вычисления


функции:

5
Таблица 1- Структурная таблица алгоритма вычисления функции
Зависимость
Количество блоков Номер блока Количество
№ яруса от других
вычислений вычислений передач данных
блоков

1 4 0-3 - -

4 2 0, 1

5 1 1

2 5 6 2 1, 2

7 1 2

8 2 2, 3

9 2 4, 6

10 2 5, 7
3 4
11 2 7, 8

12 2 6, 8

13 2 9, 11
4 2
14 2 10, 12

5 1 15 2 13, 14

Запустим процесс выполнения при одном такте на пересылку и


зафиксируем время работы, ускорение и эффективность алгоритма согласно
условиям, представленным в таблице 2:

Таблица 2 – Время работы, ускорение и эффективность алгоритма при одном


такте на пересылку
Количество Время Ускорени
Эффективность
процессоров работы е

2 17 1.82 0.91

3 13 2.38 0.79

4 15 2.06 0.52

5 17 1.82 0.36

6 20 1.55 0.29

6
Время выполнения алгоритма на одном процессоре: 31

Запустим процесс выполнения при двух тактах на пересылку и


зафиксируем время работы, ускорение и эффективность алгоритма согласно
условиям, представленным в таблице 3:

Таблица 3 – Время работы, ускорение и эффективность алгоритма при двух


тактах на пересылку
Количество Время Ускорени
Эффективность
процессоров работы е

2 18 1.72 0.86

3 16 1.94 0.65

4 21 1.48 0.37

5 20 1.55 0.31

6 26 1.19 0.20

Проведем анализ журнала выполнения алгоритма для 3х процессоров


при одном такте на пересылку.

В листинге 1 представлен журнал выполнения алгоритма.

Листинг 1.
Распределение блоков по процессорам:
0->0
1->1
2->2
3->0
4->1
5->2
6->0
7->1
8->2
9->0
10->1
11->2
12->0
13->1
14->2
15->0

Алгоритм:
Блок 0 (получает , передает 4 ) Блок 1 (получает , передает 6 5 4 ) Блок 2 (получает , передает 8 7 6 ) Блок 3 (получает , передает
8)
Блок 4 (получает 1 0 , передает 9 ) Блок 5 (получает 1 , передает 10 ) Блок 6 (получает 2 1 , передает 9 12 ) Блок 7 (получает 2 ,
передает 10 11 ) Блок 8 (получает 2 3 , передает 12 11 )
Блок 9 (получает 6 4 , передает 13 ) Блок 10 (получает 5 7 , передает 14 ) Блок 11 (получает 7 8 , передает 13 ) Блок 12 (получает
6 8 , передает 14 )
Блок 13 (получает 9 11 , передает 15 ) Блок 14 (получает 10 12 , передает 15 )
Блок 15 (получает 13 14 , передает )

7
Такт системы 1:
Процессор 0: Очередь блоков ([ Блок True, вход выход 1 , Блок False, вход выход 2 , Блок False, вход 2 1 выход , Блок False,
вход 1 выход 1 , Блок False, вход 2 выход 2 , Блок False, вход 1 2 выход , ]), Входной буфер сообщений ([ ]), Выходная
очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок True, вход выход 0 2 , Блок False, вход 0 выход 0 , Блок False, вход 2 выход 2 , Блок
False, вход 2 выход 2 , Блок False, вход 0 2 выход 0 , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Процессор 2: Очередь блоков ([ Блок True, вход выход 1 0 , Блок False, вход 1 выход 1 , Блок False, вход 0 выход 0 , Блок
False, вход 1 выход 1 , Блок False, вход 1 0 выход 0 , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 2:
Процессор 0: Очередь блоков ([ Блок False, вход выход 2 , Блок False, вход 2 1 выход , Блок False, вход 1 выход 1 , Блок
False, вход 2 выход 2 , Блок False, вход 1 2 выход , ]), Входной буфер сообщений ([ Сообщение 1->0 путь -1-0 время 1, ]),
Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок False, вход 0 выход 0 , Блок False, вход 2 выход 2 , Блок False, вход 2 выход 2 , Блок
False, вход 0 2 выход 0 , ]), Входной буфер сообщений ([ Сообщение 0->1 путь -0-1 время 1, Сообщение 2->1 путь -2-1 время
1, ]), Выходная очередь сообщений ([ Сообщение 1->2 время 0, ])
Процессор 2: Очередь блоков ([ Блок False, вход 1 выход 1 , Блок False, вход 0 выход 0 , Блок False, вход 1 выход 1 , Блок
False, вход 1 0 выход 0 , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ Сообщение 2->0 время 0, ])
Очередь сообщений:

Такт системы 3:
Процессор 0: Очередь блоков ([ Блок True, вход выход 2 , Блок False, вход 2 1 выход , Блок False, вход 1 выход 1 , Блок
False, вход 2 выход 2 , Блок False, вход 1 2 выход , ]), Входной буфер сообщений ([ Сообщение 1->0 путь -1-0 время 1,
Сообщение 2->0 путь -2-0 время 1, ]), Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок True, вход 0 выход 0 , Блок False, вход 2 выход 2 , Блок False, вход 2 выход 2 , Блок
False, вход 0 2 выход 0 , ]), Входной буфер сообщений ([ Сообщение 2->1 путь -2-1 время 1, ]), Выходная очередь сообщений
([ Сообщение 1->2 время 0, ])
Процессор 2: Очередь блоков ([ Блок False, вход 1 выход 1 , Блок False, вход 0 выход 0 , Блок False, вход 1 выход 1 , Блок
False, вход 1 0 выход 0 , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 4:
Процессор 0: Очередь блоков ([ Блок False, вход 2 1 выход , Блок False, вход 1 выход 1 , Блок False, вход 2 выход 2 , Блок
False, вход 1 2 выход , ]), Входной буфер сообщений ([ Сообщение 1->0 путь -1-0 время 1, Сообщение 2->0 путь -2-0 время
1, ]), Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок False, вход 2 выход 2 , Блок False, вход 2 выход 2 , Блок False, вход 0 2 выход 0 , ]),
Входной буфер сообщений ([ Сообщение 2->1 путь -2-1 время 1, ]), Выходная очередь сообщений ([ Сообщение 1->0 время 0, ])
Процессор 2: Очередь блоков ([ Блок False, вход 1 выход 1 , Блок False, вход 0 выход 0 , Блок False, вход 1 выход 1 , Блок
False, вход 1 0 выход 0 , ]), Входной буфер сообщений ([ Сообщение 0->2 путь -0-2 время 1, Сообщение 1->2 путь -1-2 время
1, ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 5:
Процессор 0: Очередь блоков ([ Блок True, вход 2 1 выход , Блок False, вход 1 выход 1 , Блок False, вход 2 выход 2 , Блок
False, вход 1 2 выход , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок True, вход 2 выход 2 , Блок False, вход 2 выход 2 , Блок False, вход 0 2 выход 0 , ]),
Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ Сообщение 1->0 время 0, ])
Процессор 2: Очередь блоков ([ Блок True, вход 1 выход 1 , Блок False, вход 0 выход 0 , Блок False, вход 1 выход 1 , Блок
False, вход 1 0 выход 0 , ]), Входной буфер сообщений ([ Сообщение 0->2 путь -0-2 время 1, ]), Выходная очередь сообщений
([ ])
Очередь сообщений:

Такт системы 6:
Процессор 0: Очередь блоков ([ Блок False, вход 1 выход 1 , Блок False, вход 2 выход 2 , Блок False, вход 1 2 выход , ]),
Входной буфер сообщений ([ Сообщение 1->0 путь -1-0 время 1, ]), Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок False, вход 2 выход 2 , Блок False, вход 0 2 выход 0 , ]), Входной буфер сообщений
([ Сообщение 2->1 путь -2-1 время 1, ]), Выходная очередь сообщений ([ Сообщение 1->2 время 0, ])
Процессор 2: Очередь блоков ([ Блок False, вход 0 выход 0 , Блок False, вход 1 выход 1 , Блок False, вход 1 0 выход 0 , ]),
Входной буфер сообщений ([ Сообщение 0->2 путь -0-2 время 1, ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 7:
Процессор 0: Очередь блоков ([ Блок True, вход 1 выход 1 , Блок False, вход 2 выход 2 , Блок False, вход 1 2 выход , ]),
Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок True, вход 2 выход 2 , Блок False, вход 0 2 выход 0 , ]), Входной буфер сообщений
([ ]), Выходная очередь сообщений ([ Сообщение 1->2 время 0, ])
Процессор 2: Очередь блоков ([ Блок True, вход 0 выход 0 , Блок False, вход 1 выход 1 , Блок False, вход 1 0 выход 0 , ]),
Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 8:

8
Процессор 0: Очередь блоков ([ Блок False, вход 2 выход 2 , Блок False, вход 1 2 выход , ]), Входной буфер сообщений
([ Сообщение 2->0 путь -2-0 время 1, ]), Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок False, вход 0 2 выход 0 , ]), Входной буфер сообщений ([ Сообщение 0->1 путь -0-1
время 1, ]), Выходная очередь сообщений ([ Сообщение 1->2 время 0, ])
Процессор 2: Очередь блоков ([ Блок False, вход 1 выход 1 , Блок False, вход 1 0 выход 0 , ]), Входной буфер сообщений
([ Сообщение 1->2 путь -1-2 время 1, ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 9:
Процессор 0: Очередь блоков ([ Блок True, вход 2 выход 2 , Блок False, вход 1 2 выход , ]), Входной буфер сообщений ([ ]),
Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ Блок False, вход 0 2 выход 0 , ]), Входной буфер сообщений ([ Сообщение 0->1 путь -0-1
время 1, ]), Выходная очередь сообщений ([ ])
Процессор 2: Очередь блоков ([ Блок True, вход 1 выход 1 , Блок False, вход 1 0 выход 0 , ]), Входной буфер сообщений
([ Сообщение 1->2 путь -1-2 время 1, ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 10:


Процессор 0: Очередь блоков ([ Блок False, вход 1 2 выход , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений
([ ])
Процессор 1: Очередь блоков ([ Блок False, вход 0 2 выход 0 , ]), Входной буфер сообщений ([ Сообщение 0->1 путь -0-1
время 1, Сообщение 2->1 путь -2-1 время 1, ]), Выходная очередь сообщений ([ ])
Процессор 2: Очередь блоков ([ Блок False, вход 1 0 выход 0 , ]), Входной буфер сообщений ([ Сообщение 1->2 путь -1-2
время 1, Сообщение 0->2 путь -0-2 время 1, ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 11:


Процессор 0: Очередь блоков ([ Блок False, вход 1 2 выход , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений
([ ])
Процессор 1: Очередь блоков ([ Блок True, вход 0 2 выход 0 , ]), Входной буфер сообщений ([ ]), Выходная очередь
сообщений ([ ])
Процессор 2: Очередь блоков ([ Блок True, вход 1 0 выход 0 , ]), Входной буфер сообщений ([ ]), Выходная очередь
сообщений ([ ])
Очередь сообщений:

Такт системы 12:


Процессор 0: Очередь блоков ([ Блок False, вход 1 2 выход , ]), Входной буфер сообщений ([ Сообщение 1->0 путь -1-0 время
1, Сообщение 2->0 путь -2-0 время 1, ]), Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Процессор 2: Очередь блоков ([ ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 13:


Процессор 0: Очередь блоков ([ Блок True, вход 1 2 выход , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений
([ ])
Процессор 1: Очередь блоков ([ ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Процессор 2: Очередь блоков ([ ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Очередь сообщений:

Такт системы 14:


Процессор 0: Очередь блоков ([ ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Процессор 1: Очередь блоков ([ ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Процессор 2: Очередь блоков ([ ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений ([ ])
Очередь сообщений:
Время выполнения: 13

1. Распределение блоков по процессорам.

В данном случае, имеем следующее распределение блоков по процессорам


(таблица 4):
Таблица 4

Процессор 0 1 2
9
Блоки 0 3 6 9 12 15 1 4 7 10 13 2 5 8 11 14

Номер в 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 5
очереди

2. Алгоритм

Приведенное в листинге 1 описание блоков алгоритма каждого яруса также


содержится в понятном виде в таблице 1

3. Такты

После описания структуры алгоритма идёт последовательность записей,


описывающих действия процессоров на каждом такте выполнения
алгоритма. Рассмотрим Такт 1 (листинг 2):

Листинг 2.

Такт системы 1:

Процессор 0: Очередь блоков ([ Блок True, вход выход 1 , Блок False, вход выход 2 , Блок False, вход 2 1 выход ,
Блок False, вход 1 выход 1 , Блок False, вход 2 выход 2 , Блок False, вход 1 2 выход , ]), Входной буфер сообщений ([ ]),
Выходная очередь сообщений ([ ])

Процессор 1: Очередь блоков ([ Блок True, вход выход 0 2 , Блок False, вход 0 выход 0 , Блок False, вход 2 выход 2
, Блок False, вход 2 выход 2 , Блок False, вход 0 2 выход 0 , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений
([ ])

Процессор 2: Очередь блоков ([ Блок True, вход выход 1 0 , Блок False, вход 1 выход 1 , Блок False, вход 0 выход 0
, Блок False, вход 1 выход 1 , Блок False, вход 1 0 выход 0 , ]), Входной буфер сообщений ([ ]), Выходная очередь сообщений
([ ])

Очередь сообщений:

Первая строка указывает на номер такта, в нашем случае это Такт 1.


Далее идёт описание состояний процессоров. Вторая строка описывает
состояние Процессора 0:

• В очереди на обработку Процессором 0 стоят шесть блоков


(таблица 3) – Блок 0, Блок 3, Блок 6, Блок 9, Блок 12,Блок 15. Блоки в очереди
указываются в соответствии с разделом журнала «Распределение блоков по
процессорам», очередь действует по принципу FIFO. Таким образом,
Процессор 0 первым обработает Блок 0, после него остальные.

10
• Флаг блока определяет выполняется ли обработка блока
процессором в текущем такте. Флаг принимает одно из двух значений – True
или False. В данном случае, Процессор 0 выполняет обработку Блока 0 на
Такте 1, поскольку у Блока 0 установлен флаг True. У Блоков 3,6,9,12,15
установлен флаг False, поэтому они остаются в очереди на обработку.

• Параметры процессора Вход и Выход определяют связи текущего


процессора с прочими процессорами для приёма или отправки сообщений
на следующем такте, после обработки текущего блока. В данном случае, при
обработке Блока 0 Процессор 0 не будет ни принимать, ни отправлять
сообщений.

• Входной буфер сообщений содержит очередь сообщений,


полученных процессором в текущем такте. В данном случае, входной буфер
сообщений Процессора 0 пуст.

• Выходная очередь используется для пересылки транзитных


сообщений, не предназначенных для обработки на текущем процессоре.

Аналогичным образом описываются состояния прочих процессоров на


всех тактах системы.

Очередь сообщений содержит сообщения, которые должны быть


переданы на следующем такте. Содержимое данной записи зависит от числа
тактов, которые требуются для пересылки сообщений между процессорами.

4. Время выполнения

Число тактов, затраченных на выполнение алгоритма, равно 13.

По третьему закону Амдала ускорение системы не может превзойти


обратной величины доли последовательных вычислений. Доля
последовательных вычислений определяется, как отношение количества
последовательных вычислений к общему количеству операций, значит,
максимальное ускорение не может превзойти величины: 16/5 = 3,2.

На практике ускорение составляет 2,38. Причиной отклонения


ускорения от максимального значения может служить то, что на некоторых
тактах некоторые процессоры простаивали, ожидая входные сообщения.
Возможным вариантом устранения этой проблемы могло бы стать

11
изменение распределения блоков по процессорам в целях устранения
времени простоя процессоров.

Например, поменяем если поменять блоки 2 и 3 местами, то есть блок


2 был в процессоре 2 станет в процессоре 0, а блок 3 был в процессоре 0
станет в процессоре 2. Это позволит уменьшить пересылки, так как блоку 3
не нужно будет передавать информацию в 8 блок(она уже будет в
процессоре 2), а блоку 2 не нужно будет передавать информацию 6(он будет
в процессоре 1).

12
Выводы
В результате проведения данной работы была исследован
вычислительный процесс определенной функции при помощи топологии
«Кольцо» многопроцессорных вычислительных систем. Был разработан
алгоритм для вычисления функции по вариантам. Были рассмотрены его
характеристики для топологии «Кольцо» для различного числа процессоров,
тактов на пересылку. Был проанализирован журнал выполнения алгоритма
для варианта с лучшим ускорением при одном такте на пересылку и 3х
процессорах. Были рассчитаны эффективность и ускорение параллельного
алгоритма, приведен пример улучшения исходного алгоритма. При
исследовании хода вычислительного процесса были обнаружены простои
некоторых процессоров при выполнении алгоритма, следовательно,
построенная схема не является оптимальной. Было рассчитано теоретическое
максимальное значение ускорения алгоритма, которое превышает значение,
полученное экспериментально. Большего ускорения можно добиться,
доработав схему так, чтобы не образовывалась выходная очередь сообщений
у процессоров. Также можно изменить распределение блоков по
процессорам.

13

Вам также может понравиться