- •Цель работы.
- •Цель работы.
- •Задание для домашней подготовки.
- •Задание на лабораторную работу. Сортировка.
- •Умножение матриц.
- •Работа с графами.
- •Введение.
- •Содержание отчета.
- •Контрольные вопросы.
- •Литература.
- •2. Общая характеристика системы
- •3. Формирование модели вычислительной системы
- •3.1. Выбор топологии сети
- •Правила использования системы ПараЛаб
- •3.2. Задание количества процессоров
- •Правила использования системы ПараЛаб
- •3.3. Задание характеристик сети
- •Правила использования системы ПараЛаб
- •4. Постановка вычислительной задачи и выбор параллельного метода решения
- •Правила использования системы ПараЛаб
- •Сортировка данных
- •4.1.1. Пузырьковая сортировка
- •4.1.2. СортировкаШелла
- •4.1.3. Быстрая сортировка
- •4.2. Умножение матрицы на вектор
- •Умножение матрицы на вектор при разделении данных по строкам
- •4.2.2. Умножение матрицы на вектор при разделении данных по столбцам
- •4.2.3. Умножение матрицы на вектор при блочном разделении данных
- •4.3. Матричное умножение
- •4.3.1. Ленточный алгоритм
- •4.3.2. Блочные алгоритмы Фокса и Кэннона
- •4.4. Решение систем линейных уравнений
- •4.Алгоритм Гаусса
- •4.5. Обработка графов
- •Правила использования системы ПараЛаб
- •4.5.1. Алгоритм Прима поиска минимального охватывающего дерева
- •4.5.2. Алгоритм Дейкстры поиска кратчайших путей
- •5. Определение графических форм наблюдения за процессом параллельных вычислений
- •Область "Выполнение эксперимента"
- •Правила использования системы ПараЛаб
- •Область "Текущее состояние массива"
- •5.3. Область "Результат умножения матрицы на вектор"
- •5.4. Область "Результат умножения матриц"
- •5.5. Область "Результат решения системы уравнений"
- •5.6. Область "Результат обработки графа"
- •5.7. Выбор процессора
- •Накопление и анализ результатов экспериментов
- •6.1. Просмотр результатов
- •Правила использования системы ПараЛаб
- •7. Выполнение вычислительных экспериментов
- •7.1. Последовательное выполнение экспериментов
- •Правила использования системы ПараЛаб
- •7.2. Выполнение экспериментов по шагам
- •Правила использования системы ПараЛаб
- •7.3. Выполнение нескольких экспериментов
- •Правила использования системы ПараЛаб
- •7.4. Выполнение серии экспериментов
- •Правила использования системы ПараЛаб
- •7.5. Выполнение реальных вычислительных экспериментов
- •Правила использования системы ПараЛаб
- •8. Использование результатов экспериментов
- •8.1. Запоминание результатов
- •Правила использования системы ПараЛаб
Умножение матрицы на вектор при разделении данных по строкам
Данный алгоритм основан на представлении матрицы непрерывными наборами (горизонтальными полосами) строк. Полученные полосы распределяются по процессорам вычислительной системы. Вектор b копируется на все процессоры. Перемножение полосы матрицы на вектор (а данная операция может быть выполнена процессорами параллельно) приводит к получению блока элементов результирующего вектора с. Для объединения результатов расчета и получения полного вектора c на каждом из процессоров вычислительной системы необходимо выполнить операцию обобщенного сбора данных.
4.2.2. Умножение матрицы на вектор при разделении данных по столбцам
Другой подход к параллельному умножению матрицы на вектор основан на разделении исходной матрицы на непрерывные наборы (вертикальные полосы) столбцов. Вектор b при таком подходе разделен на блоки. Вертикальные полосы исходной матрицы и блоки вектора распределены между процессорами вычислительной системы.
Параллельный алгоритм умножения матрицы на вектор начинается с того, что каждый процессор i выполняет умножение своей вертикальной полосы матрицы А на блок элементов вектора b, в итоге на каждом процессоре получается вектор промежуточных результатов c'(i). Далее для получения элементов результирующего вектора с процессоры должны обменяться своими промежуточными данными между собой.
4.2.3. Умножение матрицы на вектор при блочном разделении данных
Рассмотрим теперь параллельный алгоритм умножения матрицы на вектор, который основан на ином способе разделения данных – на разбиении матрицы на прямоугольные фрагменты (блоки). При таком способе разделения данных исходная матрица A представляется в виде набора прямоугольных блоков. Вектор b также должен быть разделен на блоки. Блоки матрицы и блоки вектора распределены между процессорами вычислительной системы. Логическая (виртуальная) топология вычислительной системы в данном случае имеет вид прямоугольной двумерной решетки. Размеры процессорной решетки соответствуют количеству прямоугольных блоков, на которые разбита матрица A. На процессоре pi,j, находящемся на пересечении i-й строки и j-го столбца процессорной решетки, располагается блок Ai,j матрицы A и блок bj вектора b.
После перемножения блоков матрицы A и вектора b каждый процессор pi,j будет содержать вектор частичных результатов c'(i,j). Поэлементное суммирование векторов частичных результатов для каждой горизонтальной строки процессорной решетки позволяет получить результирующий вектор c.
4.3. Матричное умножение
Задача умножения матрицы на матрицу определяется соотношениями:

(для простоты изложения материала будем предполагать, что перемножаемые матрицы A и B являются квадратными и имеют порядок n×n). Как следует из приведенных соотношений, вычислительная сложность задачи является достаточно высокой (оценка количества выполняемых операций имеет порядок n3).
Основу возможности параллельных вычислений для матричного умножения составляет независимость расчетов для получения элементов сij результирующей матрицы C. Тем самым, все элементы матрицы C могут быть вычислены параллельно при наличии n2 процессоров, при этом на каждом процессоре будет располагаться по одной строке матрицы A и одному столбцу матрицы B. При меньшем количестве процессоров подобный подход приводит к ленточной схеме разбиения данных, когда на процессорах располагаются по несколько строк и столбцов (полос) исходных матриц.
Другой широко используемый подход для построения параллельных способов выполнения матричного умножения состоит в применении блочного представления матриц, при котором исходные матрицы A, B и результирующая матрица C рассматриваются в виде наборов блоков (как правило, квадратного вида некоторого размера m×m). Тогда операцию матричного умножения матриц A и B в блочном виде можно представить следующим образом:

где каждый блок Cij матрицы C определяется в соответствии с выражением:

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