Параллельные методы матричного умножения
7.6. Краткий обзор лекции
В данной лекции рассмотрены три параллельных метода для выполнения операции матричного умножения. Первый алгоритм основан на ленточном разделении матриц между процессорами. В лекции приведены два различных варианта этого алгоритма. Первый вариант алгоритма основан на различном разделении перемножаемых матриц – первая матрица (матрица A ) разбивается на горизонтальные полосы, а вторая матрица (матрица B ) делится на вертикальные полосы. Второй вариант ленточного алгоритма использует разбиение обеих матриц на горизонтальные полосы.
Далее в лекции рассматриваются широко известные алгоритмы Фокса и Кэннона, основанные на блочном разделении матриц. При использовании одинаковой схемы разбиения матриц данные алгоритмы отличаются характером выполняемых операций передачи данных. Для алгоритма Фокса в ходе вычислений осуществляется рассылка и циклический сдвиг блоков матриц, в алгоритме Кэннона выполняется только операция циклического сдвига.
Различие в способах разбиения данных приводит к разным топологиям коммуникационной сети, при которых выполнение параллельных алгоритмов является наиболее эффективным. Так, алгоритмы, основанные на ленточном разделении данных, ориентированы на топологию сети в виде гиперкуба или полного графа. Для реализации алгоритмов, основанных на блочном разделении данных, необходимо наличие топологии решетки.
На рис. 7.12 на общем графике представлены показатели ускорения, полученные в результате выполнения вычислительных экспериментов для всех рассмотренных алгоритмов. Выполненные расчеты показывают, что при большем количестве процессоров более эффективными становятся блочные алгоритмы умножения матриц.

Рис. 7.12. Ускорение трех параллельных алгоритмов при умножении матриц с использованием четырех процессоров
7.7. Обзор литературы
Задача умножения матриц широко рассматривается в литературе. В качестве дополнительного учебного материала могут быть рекомендованы работы [ [ 2 ] , [ 51 ] , [ 63 ] ]. Широкое обсуждение вопросов параллельного выполнения матричных вычислений приводится в работе [ [ 30 ] ].
При рассмотрении вопросов программной реализации параллельных методов может быть рекомендована работа [ [ 23 ] ]. В ней рассматривается хорошо известная и широко используемая в практике параллельных вычислений программная библиотека численных методов ScaLAPACK.
7.8. Контрольные вопросы
- В чем состоит постановка задачи умножения матриц?
- Приведите примеры задач, в которых используется операция умножения матриц.
- Приведите примеры различных последовательных алгоритмов выполнения операции умножения матриц. Отличается ли их вычислительная трудоемкость?
- Какие способы разделения данных используются при разработке параллельных алгоритмов матричного умножения?
- Представьте общие схемы рассмотренных параллельных алгоритмов умножения матриц.
- Проведите анализ и получите показатели эффективности ленточного алгоритма при горизонтальном разбиении перемножаемых матриц.
- Какие информационные взаимодействия выполняются для алгоритмов при ленточной схеме разделения данных?
- Какие информационные взаимодействия выполняются для блочных алгоритмов умножения матриц?
- Какая топология коммуникационной сети является целесообразной для каждого из рассмотренных алгоритмов?
- Какой из рассмотренных алгоритмов характеризуется наименьшими и наибольшими требованиями к объему необходимой памяти?
- Какой из рассмотренных алгоритмов обладает наилучшими показателями ускорения и эффективности?
- Оцените возможность выполнения матричного умножения как последовательности операций умножения матрицы на вектор.
- Дайте общую характеристику программной реализации алгоритма Фокса. В чем могут состоять различия в программной реализации других рассмотренных алгоритмов?
- Какие функции библиотеки MPI оказались необходимыми при программной реализации алгоритмов?
7.9. Задачи и упражнения
- Выполните реализацию двух ленточных алгоритмов умножения матриц. Сравните время выполнения этих алгоритмов.
- Выполните реализацию алгоритма Кэннона. Постройте теоретические оценки времени работы этого алгоритма с учетом параметров используемой вычислительной системы. Проведите вычислительные эксперименты. Сравните результаты реальных экспериментов с ранее полученными теоретическими оценками.
- Выполните реализацию блочных алгоритмов умножения матриц, которые могли бы быть выполнены для прямоугольных процессорных решеток общего вида.
- Выполните реализацию матричного умножения с использованием ранее разработанных программ умножения матрицы на вектор.