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

8654

.pdf
Скачиваний:
0
Добавлен:
25.11.2023
Размер:
1.77 Mб
Скачать

ЛАБОРАТОРНАЯ РАБОТА № 3

Тема: Создание консольного многопоточного Windows-приложения, вычисляющего число Пи для систем с распределённой памятью.

Цель работы: Изучение коллективной операции передачи данных от всех процессов одному процессу (операции редукции) – функция MPI_Reduce ().

Лабораторная работа состоит из трёх последовательно выполняемых заданий.

1. Написать последовательную программу, вычисляющую число Пи по формуле:

.

2.Написать параллельную программу, вычисляющую число Пи, на основе технологии MPI, распараллелив выполняемые операции в цикле.

3.Построить графики зависимости времени выполнения последовательного и параллельного алгоритмов от количества интервалов разбиения (N) и числа процессов. Проанализировать эффективность параллельного алгоритма.

Пояснения к выполнению работы

1. Написание последовательной программы, вычисляющей число Пи используя формулу:

.

1.1.Создать пустой проект консольного Windows – приложения в среде Visual С++ (см. Лабораторная работа №1).

1.2.Для вычисления интеграла воспользуйтесь методом прямоугольников (рис. 14) с постоянным шагом x:

N

N

 

F xi

x x F xi

 

i 1

i 1

 

,

где F(x) – высота прямоугольника (значение подынтегральной функции), x – ширина прямоугольника, 0 ≤ x ≤ 1. Таким образом, вычисление числа Пи сводится к вычислению суммы площадей всех прямоугольников. Известно, что с уменьшением ширины прямоугольников ( x), т.е. с увеличением количества интервалов разбиения отрезка [0, 1], точность вычисления числа Пи возрастает.

Рис. 14. Разбиение площади под интегральной кривой на прямоугольники

1.3. Алгоритм вычисления числа Пи представлен на блок-схеме (рис. 15).

Начало

Введите количество интервалов N

Величина интервала x = 1 / N

Организация цикла по номеру интервала i от 1 до N с шагом 1

Координата середины прямоугольника x = x (i - 0.5)

Высота прямоугольника F(x) = 4 / (1 + x2)

Суммирование высот S = S + F(x)

Суммарная площадь прямоугольников Р = x * S

Вывод на экран P - приближённого значения числа Пи

Конец

Рис. 15. Блок-схема алгоритма вычисления числа Пи

1.4.Ввод количества интервалов организовать через функцию scanf(), а вывод вычисленного числа Пи через функцию printf() из библиотеки stdio.h.

1.5.Запустить программу.

2. Написание параллельной программы, вычисляющей число Пи, на основе технологии MPI, распараллелив операции, выполняемые в цикле.

2.1. Ввод числа интервалов разбиения выполнять на нулевом процессе.

2.2.Распараллеливание производимых в цикле операций реализовать таким образом, чтобы каждый процесс выполнил по (N/numproc) шагов суммирования, где N – число интервалов разбиения, а numpoc – количество процессов. За величину n следует принять такое целое число, чтобы результат (N/numproc), также был целым числом.

2.3.Частные суммы, вычисленные отдельными процессами собрать на нулевом процессе, используя функцию MPI_Reduce ().

3. Построение графиков зависимости времени выполнения последовательного и параллельного алгоритмов от количества интервалов разбиения (N) и числа процессов. Анализ эффективности параллельного алгоритма.

3.1.Добавьте в проект параллельный и последовательный алгоритмы.

3.2.Выполните замеры времени выполнения только непосредственно вычислений для параллельного фрагмента кода и соответсвующего фрагмента в последоветельном алгоритме.

3.3.Проведите 15 экспериментов, изменяя число процессов и количество интервалов разбиения так, чтобы для каждой конфигурации вычислительной системы (количества процессов) было выполнено по пять вычислений с разным количеством интервалов разбиения. Каждый процесс должен выполняться на одном процессоре (ядре). Количество интервалов выбирайте таким образом, чтобы время выполнения алгоритмов составляло не менее 20 секунд. Результаты экспериментов занесите в Таблицу 2.

 

 

 

 

 

Таблица 2

 

 

 

 

 

 

 

Кол-во

Кол-во

Время

Время

Ускор

Эффек

 

процессов /

интерв

выполнения

выполнения

ение

тивнос

 

вычислител

алов

последователь

параллельного

(Sp)

ть (Ep)

 

ьных узлов

разбие

ного

алгоритма

 

 

 

кластера

ния,

алгоритма

(Tp), сек

 

 

 

 

(N)

(T1), сек

 

 

 

 

2/1

 

 

 

 

 

 

2/1

 

 

 

 

 

 

2/1

 

 

 

 

 

 

2/1

 

 

 

 

 

 

2/1

 

 

 

 

 

 

4/2

 

 

 

 

 

 

4/2

 

 

 

 

 

 

4/2

4/2

4/2

6/3

6/3

6/3

6/3

6/3

3.4.Вычислите ускорение (Sp = T1 / Tp) и эффективность (Ep = Sp / p) параллельной программы. По данным таблицы 2 постройте графики зависимостей ускорения и эффективности от числа процессов, разместив их как показано в Лабораторной работе №2 на рис. 13.

3.5.На основе полученных данных сформулируйте вывод об эффективности параллельного алгоритма.

ЛАБОРАТОРНАЯ РАБОТА № 4

Тема: Создание консольного многопоточного Windows-приложения, выполняющего перемножение матрицы на вектор для систем с распределённой памятью.

Цель работы: Изучение обобщенной передачи данных от одного процесса всем процессам (функция MPI_Scatter()) и обобщенной передачи данных от всех процессов одному процессу (функция MPI_Gather()).

Лабораторная работа состоит из трёх последовательно выполняемых заданий.

1.Написать последовательную программу перемножения квадратной матрицы A(N,N) на вектор B(N).

2.Написать параллельную программу на основе технологии MPI.

3.Построить графики зависимости времени выполнения последовательного и параллельного алгоритмов от количества элементов N массивов А и В и числа процессов. Проанализировать эффективность параллельного алгоритма.

Пояснения к выполнению работы

1. Написание последовательной программы перемножения квадратной матрицы A(N,N) на вектор B(N).

1.1.Создать пустой проект консольного Windows – приложения в среде Visual С++ (см. Лабораторная работа №1).

1.2.Написать код, включающий в себя:

-инициализацию элементов матрицы А и вектора В произвольными значениями, например, A aij , aij i j, B bi ,bi i .

-вывод на экран значений элементов массивов А и В.

-вычисление результирующего вектора С.

-вывод на экран результатов вычислений в виде таблицы.

Алгоритм перемножения матрицы A(N,N) на вектор B(N) представлен на блок-схеме (рис. 16). В связи с тем, что нумерация элементов массива на языке Си начинается с нуля, циклы для массива размером N в приведённой блок-схеме организованы от нуля до N-1.

1.3. Запустить программу.

2. Написание параллельной программы перемножения квадратной матрицы A(N,N) на вектор B(N) на основе технологии MPI.

Распараллеливание программы можно выполнить по алгоритму, основанному на разделении матрицы на строки (рис. 17). При этом каждый процесс получает вектор В и по (N/numprocs) строк матрицы А, где numprocs – число процессов.

Начало

Ввод размера N массивов. Coздание массивов A и B

Организация двойного цикла по номеру строки i и по номеру столбца j от 0

Инициализация матрицы A(aij=i*j) и вектора B(bi=i)

Вывод элементов массивов A и

B на экран

Организация двойного цикла по номеру строки i и по номеру столбца j от 0

Вычисление результирующего вектора С

C[i]=C[i]+A[i][j]*B[j] – суммирование по индексу j

Организация цикла по номеру строки i от 0 до N-1

Вывод элементов вектора С на экран

Конец

Рис. 16. Блок-схема алгоритма перемножения матрицы A на вектор B.

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

матрицы по строкам

Программа должна предусматривать следующую последовательность операций.

2.1.На нулевом процессе вводится размер N для матрицы A и вектора B.

2.2.Рассылается величина N с нулевого процесса всем процессам, используя функцию MPI_Bcast().

2.3.На всех процессах создаются массивы B(N), C(N). Матрицу A (N, N) следует представить в виде одномерного массива A(N*N).

2.4.На нулевом процессе инициализируются массивы A и B значениями (аналогично последовательному алгоритму) с выводом результатов на экран.

2.5.Вектор B рассылается всем процессам.

2.6.Элементы матрицы А рассылаются блоками по (N/numprocs*N) элементов всем процессам, где numprocs – число процессов, используя функцию MPI_Scatter(). Так чтобы каждый процесс получил «свою» подматрицу АА с размерностью (N/numprocs*N).

2.7.На всех процессах выполняется перемножение подматрицы АА на вектор В получая тем самым подвектор СС(N/numprocs).

2.8.Собираются результаты со всех процессов из подвекторов СС на нулевом процессе в вектор С, используя функцию MPI_Gather() (рис. 17).

2.9.Выводятся на нулевом процессе элементы вектора С на экран.

3. Построение графиков зависимости времени выполнения последовательного и параллельного алгоритмов от количества элементов N массивов А и В и числа процессов. Анализ эффективности параллельного алгоритма.

3.1.Добавьте в проект параллельного и последовательный алгоритмы.

3.2.Выполните замеры времени выполнения всех алгоритмов только для параллельного фрагмента кода, где выполняется непосредсвенно перемножение, а также соответсвующего фрагмента кода в последоветельном алгоритме.

3.3.Проведите 15 экспериментов изменяя число процессов и размер (N) массивов А и В так, чтобы для каждой конфигурации вычислительной системы (количества процессов) было выполнено по пять вычислений с разным размером масссивов. Каждый процесс должен выполняться на одном процессоре (ядре). Размер массивов выбирайте таким образом, чтобы время выполнения алгоритмов составляло не менее 20 секунд. Результаты экспериментов занесите в Таблицу 3.

 

 

 

 

 

Таблица 3

 

 

 

 

 

 

 

Кол-во

Размер

Время

Время

Ускор

Эффек

 

процессов /

массив

выполнения

выполнения

ение

тивнос

 

вычислител

ов (N)

последователь

параллельного

(Sp)

ть (Ep)

 

ьных узлов

 

ного

алгоритма

 

 

 

кластера

 

алгоритма

(Tp), сек

 

 

 

 

 

(T1), сек

 

 

 

 

2/1

 

 

 

 

 

 

2/1

 

 

 

 

 

 

2/1

 

 

 

 

 

 

2/1

 

 

 

 

 

 

2/1

 

 

 

 

 

 

4/2

 

 

 

 

 

 

4/2

 

 

 

 

 

 

4/2

 

 

 

 

 

 

4/2

 

 

 

 

 

 

4/2

 

 

 

 

 

 

6/3

 

 

 

 

 

 

6/3

 

 

 

 

 

 

6/3

6/3

6/3

3.4.Вычислите ускорение (Sp = T1 / Tp) и эффективность (Ep = Sp / p) параллельной программы. По данным таблицы 3 постройте графики зависимостей ускорения и эффективности от числа процессов, разместив их как показано в Лабораторной работе №2 на рис. 13.

3.5.На основе полученных данных сформулируйте заключение об эффективности параллельного алгоритма.

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