Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

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

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Параллельные методы умножения матрицы на вектор

Тип Реферат
Предмет Информатика
Просмотров
874
Размер файла
805 б
Поделиться

Ознакомительный фрагмент работы:

Параллельные методы умножения матрицы на вектор

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

ГОУВПО “ПЕРМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ”

Кафедра прикладной математики и информатики

Параллельные методы умножения матрицы на вектор

(лаба №1)

Выполнили студенты 1 курса магистратуры,
группы ПМИ
механико-математического факультета
Габдуллин Артём _______________

Моисеенков Максим_____________

Нурбакова Диана _______________

Принял:
доцент кафедры прикладной
математики и информатики ПГУ,
к.ф.-м.н., доц.
Деменев А.Г.____________________________

Пермь 2010


Цель лабораторной работы.

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

Постановка задачи.

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

Тем самым получение результирующего вектора предполагает повторение однотипных операций по умножению строк матрицы и вектора . Каждая такая операция включает умножение элементов строки матрицы и вектора ( операций) и последующее суммирование полученных произведений (операций).

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

    Поcледовательный алгоритм умножения матрицы на вектор

void SerialResultCalculation(double* pMatrix, double* pVector,

double* pResult, int Size) {

int i, j; // Loop variables

for (i=0; i<Size; i++) {

pResult[i]=0;

for (j=0; j<Size; j++)

pResult[i] += pMatrix[i*Size+j]*pVector[j];

}

}

    Умножение матрицы на вектор при разделении данных по строкам.

Базовая подзадача - скалярное умножение одной строки матрицы на вектор. После завершения вычислений каждая базовая подзадача определяет один из элементов вектора результата c.

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

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

Каждый поток параллельной программы использует только «свои» данные, ему не требуются данные, которые в данный момент обрабатывает другой поток, нет обмена данными между потоками, не возникает необходимости синхронизации. Т.е. практически нет накладных расходов на организацию параллелизма (за исключением расходов на организацию и закрытие параллельной секции), и можно ожидать линейного ускорения. Однако, как будет видно из представленных результатов, ускорение далеко от линейного.

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

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

Рисунок 2. Диаграмма состояний процесса выполнения последовательного алгоритма

умножения матрицы на вектор.

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

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

, где - объем данных, которые необходимо закачать в кэш процессора, - скорость доступа (пропускная способность канала доступа) ОП.

Таким образом, .

Для оценки , измерим время выполнения последовательного алгоритма при
, т.к. матрица и вектор полностью поместятся в кэш ВЭ. (У нас размер кэш равен 2048 кбайт, поэтому ). Чтобы исключить необходимость выборки данных из ОП, перед началом вычислений заполним матрицу и вектор случайными числами – выполнение этого действия гарантирует закачку данных в кэш. Далее при решении задачи все время будет тратиться на вычисления, так как нет необходимости загружать данные из ОП.

Получим 0,00000308.

Тогда

Теперь, оценим при : 8 121 537 238,29

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

Таблица 1. Сравнение экспериментального и теоретического времени выполнения последовательного

алгоритма умножения матрицы на вектор.

Рисунок 3. График зависимости экспериментального и теоретического времени выполнения последовательного алгоритма от объема исходных данных (ленточное разбиение матрицы по строкам

В многоядерных процессорах Intel архитектуры Core 2 Duo ядра процессоров разделяют общий канал доступа к памяти. Т.е., несмотря на то, что вычисления могут выполняться ядрами параллельно, доступ к памяти осуществляется строго последовательно. Следовательно, время выполнения параллельного алгоритма в системе с вычислительными элементами, с использованием потоков и при описанной выше схеме доступа к памяти может быть оценено при помощи следующего соотношения: .

void ParallelResultCalculation_rows (double* pMatrix, double* pVector,

double* pResult, int Size) {

int i, j; // Loop variables

#pragma omp parallel private (i,j)

#pragma omp for

for (i=0; i<Size; i++) {

for (j=0; j<Size; j++)

pResult[i] += pMatrix[i*Size+j]*pVector[j];

}

}

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

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

Таблица 2. Результаты вычислительных экспериментов для параллельного алгоритма умножения

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

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

Рисунок 5. График зависимости экспериментального и теоретического времени выполнения параллельного алгоритма от объема исходных данных при использовании двух потоков (ленточное разбиение матрицы по строкам)

ВЫВОД:

Замедление работы программы при использовании параллельного алгоритма (библиотека OpenMP) можно объяснить следующим отчётом профилировщика (см. Рисунок 6).

Рисунок 6. Сравнение данных профилировщика последовательной и параллельной программ

Как видно, значительное время при выполнении программы затрачивается в библиотеке libiomp5md.dll.

2. Умножение матрицы на вектор при разделении данных по столбцам.

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

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

Рисунок 7. Организация вычислений при выполнении параллельного алгоритма умножения матрицы на вектор с использованием разбиения матрицы по столбцам.

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

На выполнение подкачек данных в кэш тоже тратится некоторое время. Пусть - накладные расходы на организацию параллельности на каждой итерации. Тогда суммарные накладные расходы составляют: .

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

.

void ParallelResultCalculation_columns(double* pMatrix, double* pVector, double* pResult, int Size) {

int i, j; // Loop variables

double IterGlobalSum = 0;

for (i=0; i<Size; i++) {

IterGlobalSum = 0;

#pragma omp parallel for reduction(+:IterGlobalSum)

for (j=0; j<Size; j++)

IterGlobalSum += pMatrix[i*Size+j]*pVector[j];

pResult[i] = IterGlobalSum;

}

}

Результаты вычислительных экспериментов приведены в таблице.

Таблица 3. Результаты вычислительных экспериментов для параллельного алгоритма умножения

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

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

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

Будем минимизировать величину

Таким образом, получаем = 5,27565E-06 с=5,3 мкс

Рисунок 9. График зависимости экспериментального и теоретического времени выполнения параллельного алгоритма от объёма исходных данных при использовании двух потоков (ленточное разбиение матрицы по столбцам)

    Умножение матрицы на вектор при блочном разделении данных.

При блочном разделении матрица делится на прямоугольные наборы элементов – при этом, как правило, используется разделение на непрерывной основе. Пусть количество процессоров (ядер) составляет , количество строк матрицы является кратным s, а количество столбцов – кратным q, то есть и .

После перемножения блоков матрицы A и вектора b каждая подзадача (i,j) будет содержать вектор частичных результатов c'(i,j), определяемый в соответствии с выражениями:

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

Будем предполагать, что число блоков матрицы А совпадает по горизонтали и вертикали, т.е. s=q.

Для обозначения числа потоков будем использовать переменную π=q2. Для эффективного выполнения алгоритма число базовых подзадач должно совпадать с числом выделенных потоков.

Возьмём число потоков π=4.

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

Для задания количества потоков будет использоваться переменная NestedThreadsNum.

void ParallelResultCalculation_blocks(double* pMatrix, double* pVector, double* pResult,

int Size) {

int NestedThreadsNum = 2;

omp_set_num_threads(NestedThreadsNum);

omp_set_nested(true);

#pragma omp parallel for

for (int i=0; i<Size; i++) {

double ThreadResult = 0;

#pragma omp parallel for reduction(+:ThreadResult)

for (int j=0; j<Size; j++)

ThreadResult += pMatrix[i*Size+j]*pVector[j];

pResult[i] = ThreadResult;

}

}

При анализе эффективности данного алгоритма воспользуемся следующими формулами.

Время выполнения вычислений ограничено сверху величиной: (количество вычислительных элементов совпадает с числом потоков, т.е. p=π)

При выполнении вычислений, «внутренние» параллельные секции создаются и закрываются много раз, кроме того, дополнительное время тратится на синхронизацию и выполнение операции редукции. Каждый поток создаёт параллельные секции раз. Время выполнения алгоритма может быть вычислено по формуле:

Результаты вычислительных экспериментов при блочном разделении данных приведены в таблице 5.

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

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

Рисунок 12. График зависимости экспериментального и теоретического времени выполнения параллельного алгоритма от объема исходных данных при использовании четырёх потоков при блочном разбиении матрицы

Вывод

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


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

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

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Тгу им. Г. Р. Державина
Реферат сделан досрочно, преподавателю понравилось, я тоже в восторге. Спасибо Татьяне за ...
star star star star star
РЭУ им.Плеханово
Альберт хороший исполнитель, сделал реферат очень быстро, вечером заказала, утром уже все ...
star star star star star
ФЭК
Маринаааа, спасибо вам огромное! Вы профессионал своего дела! Рекомендую всем ✌🏽😎
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Подогнать готовую курсовую под СТО

Курсовая, не знаю

Срок сдачи к 7 дек.

только что
только что

Выполнить задания

Другое, Товароведение

Срок сдачи к 6 дек.

1 минуту назад

Архитектура и организация конфигурации памяти вычислительной системы

Лабораторная, Архитектура средств вычислительной техники

Срок сдачи к 12 дек.

1 минуту назад

Организации профилактики травматизма в спортивных секциях в общеобразовательной школе

Курсовая, профилактики травматизма, медицина

Срок сдачи к 5 дек.

2 минуты назад

краткая характеристика сбербанка анализ тарифов РКО

Отчет по практике, дистанционное банковское обслуживание

Срок сдачи к 5 дек.

2 минуты назад

Исследование методов получения случайных чисел с заданным законом распределения

Лабораторная, Моделирование, математика

Срок сдачи к 10 дек.

4 минуты назад

Проектирование заготовок, получаемых литьем в песчано-глинистые формы

Лабораторная, основы технологии машиностроения

Срок сдачи к 14 дек.

4 минуты назад

2504

Презентация, ММУ одна

Срок сдачи к 7 дек.

6 минут назад

выполнить 3 задачи

Контрольная, Сопротивление материалов

Срок сдачи к 11 дек.

6 минут назад

Вам необходимо выбрать модель медиастратегии

Другое, Медиапланирование, реклама, маркетинг

Срок сдачи к 7 дек.

7 минут назад

Ответить на задания

Решение задач, Цифровизация процессов управления, информатика, программирование

Срок сдачи к 20 дек.

7 минут назад
8 минут назад

Все на фото

Курсовая, Землеустройство

Срок сдачи к 12 дек.

9 минут назад

Разработка веб-информационной системы для автоматизации складских операций компании Hoff

Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления

Срок сдачи к 1 мар.

10 минут назад
11 минут назад

перевод текста, выполнение упражнений

Перевод с ин. языка, Немецкий язык

Срок сдачи к 7 дек.

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно