Новости
О Центре
Кластер
Обучение
Основной курс по параллельному программированию
Учебные курсы
Магистратура
Дополнительное образование
Работы студентов
Библиотека
Исследования
Конференции
Полезные ссылки
NVIDIA
Контакты
О сайте
Имя:
Пароль:
запомнить:
Забыли пароль? Регистрация

Параллельный алгоритм Кэннона

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

Одной из основных операций над матрицами является их перемножение. Эта операция используется практически везде: от компьютерной графики до расчета поверхностей самолетов.

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

Требуется реализовать последовательный и параллельный (Кэннона) алгоритмы. Реализацию параллельного алгоритма провести средствами MPI. Кроме того, необходимо провести сравнения времени работы последовательного и параллельного алгоритмов.

Описание алгоритма и метод решения

Наиболее простым методом решения поставленной задачи является последовательная схема перемножения матриц. Он представляется тремя вложенными циклами. Трудоемкость такого алгоритма О(n^3).

Double* A,B,C;

Int Size;

A= new * double [Size];

B= new * double [Size];

C= new * double [Size];

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

{

A[i]= new double [Size];

B[i]= new double [Size];

C[i]= new double [Size];

}

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

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

{

A[i][j]= rand();

B[i][j]= rand();

C[i][j]= rand();

}

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

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

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

C[i][j] = A[i][k] * B[k][j];

Алгоритм Кэннона

В первую очередь создается некоторое число Р исполняющих процессов. Это число должно быть полным квадратом. Процессы организуются в виртуальную декартову топологию. Исходные матрицы должны иметь размерность, кратную qp. Матрицы разбиваются на равное количество квадратных блоков. Блоки исходных матриц распределяются по исполняющим процессам. Затем для каждой строки i решетки подзадач блоки матрицы A сдвигаются на (i-1) позиций влево, для каждого столбца j решетки подзадач блоки матрицы B сдвигаются на (j-1) позиций вверх. Далее проводится qp итераций, во время которых сначала происходит перемножение блоков по методу трех вложенных циклов, и произведение складывается с текущим значением результирующего блока. Затем выполняется циклический сдвиг блоков матрицы А вдоль строк решетки и циклический сдвиг блоков матрицы В вверх по столбцам виртуальной решетки. После выполнения всех итераций результирующая матрица собирается из полученных на каждом процессе результирующих блоков.

Анализ эффективности

Алгоритм Кэнона требует q итераций. В ходе них, каждый процессор перемножает свои текущие блоки исходных матриц и формирует текущие значения своего блока в результирующей матрице (прибавляет свое полученное значение к исходному). Общее количество выполненных операций при этом будет иметь порядок n3p . В результате получаем значение эффективности параллельной схемы перед последовательной:nxn. Показатель эффективности будет иметь вид: nxn. В соответствии алгоритмом на этапе инициализации проводится перераспределение блоков матриц A и B при помощи циклического сдвига матричных блоков по строкам и столбцам процессорной решетки. Трудоемкость передачи данных зависит от топологии сети. При топологии полного графа операции могут выполняться параллельно. Затраты на передачу блоков матриц A и B между процессорами во время выполнения итераций алгоритма тоже могут выполняться параллельно. Таким образом, время распределения матриц между процессами и время сдвига блоков матриц составляет: nxn , где a - латентность, b - пропускная способность, w - размер элемента матрицы. Cложность выполнения скалярного умножения строки блока матрицы A на столбец блока матрицы B можно оценить как 2*(n/q)-1, количество строк и столбцов в блоках равно n/q. Трудоемкость операции блочного умножения равна nxn. Для сложения блоков требуется nxn операций. С учетом всех перечисленных выражений время выполнения вычислительных операций может быть оценено следующим образом: nxn.Просуммировав все полученные соотношения, получим общее время выполнения алгоритма Кэннона: nxn, где t - время выполнения скалярной операции.

Демонстрация

Алгоритм Кэннона

Алгоритм Кэннона

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

CPU: AMD Athlon XP 6000+, 3.02 Ghz, RAM: 2 Гб RAM 800 MHz, Операционная система Microsoft Windows 7 Professional.

Латентность a – 37 мкс, пропускная способность b – 47,63 Мбайт/с, время выполнения скалярной операции t = 3 нс и величина w равна 8 байт.

Умножение матрицы на матрицу алгоритмом Кэннона

Размерность матрицы

Последовательный алгоритм, секунды

Алгоритм Кэннона

Теоретические данные

Практические данные (тест проводился на 4х процессах)

Tp, секунды

Sp

Tp, секунды

Sp

500

2,682453

0,712354

3,765618

0,609559

4,400648

1000

24,109888

7,165489

3,364723

7,889110

3,056097

1500

84,156007

23,954621

3,513143

24,504893

3,434253

2000

236,019478

56,534654

4,174775

57,258855

4,121973

Об автораx

Лабораторную работу выполнили студенты группы 8409 факультета ВМК: Макаров Дмитрий и Шилов Николай

Новости

22.10.2012
04.09.2012
05.04.2012
06.03.2012
02.03.2012