Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лр1

.docx
Скачиваний:
0
Добавлен:
07.04.2025
Размер:
398.82 Кб
Скачать

Министерство науки и образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Уфимский университет науки и технологий»

Кафедра вычислительной математики и кибернетики

ОТЧЁТ

По лабораторной работе №1

«ПАРАЛЛЕЛЬНОЕ ВЫЧИСЛЕНИЕ СУММЫ РЯДА СРЕДСТВАМИ АВТОМАТИЧЕСКОГО РАСПАРАЛЛЕЛИВАНИЯ И OPENMP»

по дисциплине параллельные вычисления

Выполнили:

студенты группы ПРО-432

Ихсанова Э. А., Мустафин А. А., Видманов А. А.

Проверила:

проф. каф. ВМИК,

канд. физ.-мат. наук Шерыхалина Н.М.

Уфа — 2024 г.

Цель работы

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

Ход работы

Была выполнена программная реализация на языке С++ последовательного алгоритма суммирования функционального ряда согласно 9 варианту. Предусмотрели вывод на экран времени работы программы.

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

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

Последовательная работа программы:

Параллельная работа программы:

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

Число потоков = 1:

Число потоков = 2:

Число потоков = 3:

Число потоков = 4:

Для последовательной программы подобрали три значения N так, чтобы время ее работы на многоядерной системе составляло 10 (N = N1 = 29 000 000), 20 (N = N2 = 61 000 000) и 40 (N = N3 = 125 000 000) секунд. Запустили многопоточную программу (OpenMP) при аналогичных значениях N. Количество потоков должно равняться числу ядер вычислительной системы. Время работы каждой программы занесли в таблицу.

Программа

Tp, c

N1

N2

N3

Послед.

10.09

20.06

40.04

OpenMP

2.67

5.78

11.09

Авторасп.

-

--

-

Для параллельных программ вычислили ускорение и эффективность по формулам . Полученные занесли в таблицу ниже:

Программа

S*p

E*p

N1

N2

N3

N1

N2

N3

OpenMP

3,78

3,47

3,61

0,94

0,87

0,90

Авторасп.

-

-

-

-

-

-

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

Провели запуски параллельной программы (N = N1 = 29 000 000), предварительно модифицируя исходный код для установки различных видов (kind) балансировки итераций параллельного цикла между потоками: static, dynamic, guided. Для каждого вида взяли три значения параметра chunk (C): C =1, C2 = 100, С; = 10000. Времена работы программ внесли в таблицу ниже.

kind

T, с

С1

С2

С3

static

4.48

3.11

4.31

dynamic

5.86

2.68

4.66

guided

3.29

2.89

3.63

schedule (static,C): разделяет итерации цикла на равные части размером С, которые статически распределяются между доступными потоками, как правило, с чередованием. При С=1 каждому потоку доставалось ровно четверть итераций цикла, при С=100, каждому потоку по 25 итераций, при С=10000 – по 2500 итераций.

schedule (dynamic, С) - также разделяет итерации цикла на равные части размером С, но при этом распределение частей между потоками происходит

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

schedule (guided, C) - предусматривает также динамическую распределение частей между потоками, но объем работы (не более, чем С) устанавливает операционная система.

Сравнивая значения параметров static, dynamic и guided между собой, можно сделать вывод о том, что guided справляется с разделением итераций лучше остальных.

Вывод

В ходе выполнения лабораторной работы мы научились использовать основные директивы, функции переменные окружения интерфейса OpenMP на примере написания простейшей параллельной программы для многоядерных вычислительных систем (а именно для 4-х ядерной).

Соседние файлы в предмете Параллельные вычисления