- •Лабораторные работы по курсу «Параллельное программирование»
- •Кластер Beowulf
- •Структура кластера кафедры 304
- •Организация взаимодействия между процессами при параллельных вычислениях
- •Основные функции mpi
- •Вычисление числа π методом численного интегрирования
- •Вычисление числа π методом Монте-Карло
- •Содержание отчета
- •Лабораторная работа №2
- •Введение
- •Коммуникации точка-точка в mpi
- •Коллективные коммуникации в mpi
- •Алгоритмы параллельного поиска и сортировки
- •Задание
- •Содержание отчета
- •Лабораторная работа №3
- •Введение
- •Умножение матриц ленточным методом
- •Алгоритм Фокса умножения матриц
- •Пример работы Fox's алгоритма
- •Этап 0 (шаг 1 ( слева ), шаг 2 ( по центру ), шаг 3 ( справа ) ):
- •Этап 1 ( слева ) и этап 2 (справа ):
- •Содержание отчета
- •Список литературы
Пример работы Fox's алгоритма
Рассмотрим работу Fox's алгоритма на примере умножения матриц 6-го порядка на 9-ти процессорах, то есть n=6, а р=9. В этом случае каждому процессору назначается подматрица порядка n/(р1/2) = 2 от каждой из матриц А, В и С и Fox's алгоритм выполняет умножение матриц за р1/2 = 3 этапа:
Этап 0 (шаг 1 ( слева ), шаг 2 ( по центру ), шаг 3 ( справа ) ):
Н
а
начальном этапе происходит рассылка
подматриц , стоящих на главной диагонали,
процессорам, работающим с подматрицами
в той же строке. Далее на каждом процессоре
происходит умножение полученной
диагональной подматрицы на подматрицу
,
хранящуюся на данном процессоре.
Результат умножения помещается в
подматрицу
процессора (i,
j).
Здесь i,
j
изменяются от 0 до 2. Перед переходом к
следующему этапу происходит перемещение
подматрицы
от процессора (i,
j)
к процессору (i-1
j),
то есть к непосредственно "верхнему"
процессору. Процессоры нулевой строки
посылают подматрицы
процессорам последней (в данном случае
второй) строки.
Этап 1 ( слева ) и этап 2 (справа ):
На первом этапе также происходит рассылка, но только уже подматриц , где q = р1/2 = 3, а i изменяется от 0 до 2. То есть процессоры нулевой, первой и второй строк получат подматрицы , и А2,0 соответственно. Далее на каждом процессоре происходит умножение полученной подматрицы на подматрицу полученную на предыдущем этапе от процессора непосредственно нижней строки. Результат умножения складывается с подматрицей и снова в нее записывается. Перед переходом к следующему этапу снова происходит восходящее перемещение подматриц , аналогичное их перемещению на этапе 0.
Второй(ив данном случае последний ) этап работы Fox's алгоритма полностью аналогичен предыдущим этапам и может быть описан следующей последовательностью шагов:
рассылка подматрицы процессорам i-той строки (на рисунке эти подматрицы выделены)
умножение на процессоре (i, j) подматриц и (Понятно, что в общем случае, подматрицы на данном этапе и предыдущем не совпадают)
= +*
Заметим также, что перемещение подматриц на последнем этапе является излишним. После заключительного этапа мы получим 9 подматриц , которые будут составлять матрицу С, являющуюся решением данной задачи.
Варианты заданий
№ Варианта |
Алгоритм умножения |
Размер матрицы |
Число процессоров |
1 |
Ленточный |
10х10 |
10 |
2 |
Фокс |
16х16 |
4 |
3 |
Ленточный |
20х20 |
5 |
4 |
Фокс |
16х16 |
4 |
5 |
Ленточный |
10х10 |
5 |
6 |
Фокс |
16х16 |
8 |
7 |
Ленточный |
20х20 |
5 |
8 |
Фокс |
16х16 |
8 |
9 |
Ленточный |
10х10 |
10 |
10 |
Фокс |
16х16 |
4 |
11 |
Ленточный |
20х20 |
10 |
12 |
Фокс |
10х10 |
5 |
13 |
Ленточный |
16х16 |
16 |
14 |
Фокс |
20х20 |
4 |
