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

6225

.pdf
Скачиваний:
0
Добавлен:
21.11.2023
Размер:
745.82 Кб
Скачать

Лабораторная работа № 5 «Перемножение матрицы на вектор»

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

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

Задание 2. Написать параллельную программу на основе технологии MPI. Задание 3. Построить графики зависимости времени выполнения

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

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

 

 

 

 

 

Таблица 4

 

 

 

 

 

 

 

Кол-во

Кол-во

Время

Время

Ускор

Эффек

 

процессов /

элемен

выполнения

выполнения

ение

тивнос

 

вычислител

тов

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

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

(Sp)

ть (Ep)

 

ьных узлов

вектор

ного

алгоритма

 

 

 

кластера

ов (n)

алгоритма

(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

Контрольные вопросы

1.Какой алгоритм распараллеливания Вы использовали (перемножение строки на столбец или столбец на столбец с получением частичных сумм)?

2.Как Вы распределяли исходные матрицу А и вектор В по процессам?

3.Использовали ли Вы в алгоритме функцию MPI_Scatter()? Если использовали, то для чего?

4.Использовали ли Вы в алгоритме функцию MPI_Gather()? Если использовали, то для чего?

5.На сколько масштабируемым является Ваш алгоритм?

Лабораторная работа № 6 «Изучение распределённой информационной системы «Менеджер конструкторских расчётов»»

Цель работы: Изучение распределённой информационной системы, реализующей метод разделения на проектные единицы.

Задание 1. Изучить метод разделения конструкции на проектные единицы. Задание 2. Изучить архитектуру, интерфейс и работу с аппартно-

программным комплексом «Менеджер конструкторских расчётов», представляющим собой распределённую информационную систему.

Задание 3. Используя программный комплекс «Лира», сформировать 10 конечно-элементных пространственных моделей (проектных единиц) размером около 1 млн. неизвестных, последовательно соединённых друг с другом «паровозиком» и стыкующихся друг с другом стержнями в 20 – 30 точках с каждой стороны. В основании каждой модели задать жесткую заделку. Жесткостные характеристики элементов задать произвольно. Полученные модели загрузить нагрузкой от собственного веса.

Задание 4. Объединить сформированные проектные единицы в единую модель и выполнить статический расчёт в программном комплексе «Лира».

Задание 5. Используя «Менеджер конструкторских расчётов» выполнить расчёт сформированных в задании 3 проектных единиц.

Задание 6. Проанализировать результаты расчёта, выполненного в «Лира» и в «Менеджер конструкторских расчётов». Сравнить полученные решения по перемещениям и усилиям в элементах, а также по времени расчёта.

Контрольные вопросы

1.В чём состоит основная идея метода разделения конструкции на проектные еденицы?

2.Какая архитектура положена в основу «Менеджер конструкторских расчётов»?

3.Сравните затраты человеческого и машинного времени на расчёт конструкции с использованием «Менеджер конструкторских расчётов» и без него.

ПРИЛОЖЕНИЕ 1. Установка среды MPICH2 на вычислительные узлы кластера (распределённой сети)

1. Запустите пакет установки mpich2-1.2.1-win-ia32.msi от Аргонской национальной лаборатории (для установки требуются права группы Администраторов). Изучите системные требования (рис. П1.1) и лицензионное соглашение (рис. П1.2).

Рис. П1.1. Информация об MPICH2

Рис. П1.2. Лицензионное соглашение

2. В окне запроса парольной фразы (Passphrase) задайте кодовое слово, например, «mpi» (рис. П1.3). Внимание: парольная фраза должна быть одинаковая для всех вычислительных узлов кластера (распределённой сети).

Рис. П1.3. Ввод парольной фразы

3. В соответствующем окне (рис. П1.4) укажите путь для установки MPICH2, а также пользователей, для которых выполняется установка (выберите

«Everyone»).

Рис. П1.4. Выбор инсталляционной папки

4.По окончании установки появится окно, показанное на рис. П1.5.

5.Установка MPICH2 должна быть выполнена на всех вычислительных узлах.

Рис. П1.5. Завершение установки

ПРИЛОЖЕНИЕ 2. Подключение библиотеки MPI в С-проект MS VS2010

1. В свойствах проекта Проект – Свойства (Project – Properties) выбрать пункт C/C++ - Общие – Дополнительные каталоги включаемых файлов (C/C++ - General – Additional Include Directories) и указать путь к папке \MPICH2\include

(рис. П2.1).

Рис. П2.1. Подключение mpi-библиотеки

2.В свойствах проекта Проект – Свойства (Project – Properties) выбрать пункт Компоновщик – Общие – Дополнительные каталоги библиотек (Linker - General – Additional Library Directories) и указать путь к папке \MPICH2\lib (рис.

П2.2).

3.В свойствах проекта Проект – Свойства (Project – Properties) выбрать пункт Компоновщик – Ввод – Дополнительные зависимости (Linker - Input – Additional Dependencies) и указать библиотеку mpi.lib (рис. П2.3).

Рис. П2.2. Подключение mpi-библиотеки

Рис. П2.3. Подключение mpi-библиотеки

ПРИЛОЖЕНИЕ 3. Порядок определения доступных вычислительных узлов

спомощью утилиты WMPICONFIG

1.Запустите утилиту WMPICONFIG, входящую в пакет MPICH2 (Пуск – Все программы – MPICH2 – wmpiconfig.exe). В открывшейся форме в поле Domain введите имя рабочей группы / компьютерного класса (например, 2-111), компьютеры которого планируется проверить на доступность и нажмите кнопку Get Hosts. В нижнем окне отобразится список компьютеров указанной рабочей группы / компьютерного класса.

2.Для определения доступных для использования вычислительных узлов необходимо нажать кнопку Scan Hosts. После чего имена доступных компьютеров окрасятся в зелёный цвет, а недоступных – в серый цвет (рис. П3.1).

Рис. П3.1. Список доступных вычислительных узлов

ПРИЛОЖЕНИЕ 4. Сводный перечень некоторых MPI-функций

MPI-функция

Пояснение

 

int MPI_Init ( int *agrc, char ***argv )

Инициализация

MPI

 

 

 

программ

 

 

int MPI_Finalize (void)

 

Завершение

 

MPI

 

 

 

программ

 

 

int MPI_Comm_size (MPI_Comm comm, int *size

Определение

 

 

),

 

 

количества процессов в

где

 

 

выполняемой

 

- comm - коммуникатор, в рамках которого

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

 

выполняется передача данных,

программе

 

 

- size – переменная, в которую возвращается

 

 

 

значение функции

 

 

 

 

 

int MPI_Comm_rank (MPI_Comm comm, int *rank

Определение

ранга

),

 

 

процесса

 

 

где

 

 

 

 

 

- rank – переменная, в которую возвращается

 

 

 

значение функции

 

 

 

 

 

double MPI_Wtime(void)

 

Получение

времени

 

 

 

текущего

момента

 

 

 

выполнения программы

int MPI_Send(void *buf, int count, MPI_Datatype

Парная

операция

type, int dest, int tag, MPI_Comm comm),

передачи сообщения от

где

 

 

одного

процесса

- buf – адрес буфера памяти, в котором

другому

 

 

располагаются

данные

отправляемого

 

 

 

сообщения,

 

 

 

 

 

- count – количество элементов данных в

 

 

 

сообщении,

 

 

 

 

 

- type - тип элементов данных пересылаемого

 

 

 

сообщения,

 

 

 

 

 

- dest - ранг процесса, которому отправляется

 

 

 

сообщение,

 

 

 

 

 

- tag - значение-тег, используемое для

 

 

 

идентификации сообщений,

 

 

 

 

- comm - коммуникатор, в рамках которого

 

 

 

выполняется передача данных.

 

 

 

int MPI_Recv(void *buf, int count, MPI_Datatype

Парная

операция

type, int source, int tag,

MPI_Comm comm,

приёма

сообщения

MPI_Status *status),

 

 

одним процессом

от

где

 

 

другого

 

 

- buf, count, type – буфер памяти для приема

 

 

 

сообщения, назначение соответствует описанию

 

 

 

в MPI_Send (),

 

 

 

 

 

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