Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Алгоритм Фокса умножения матриц




 

Пусть А и В - квадратные матрицы порядка n, а р - общее число процессоров. Ниже рассмотрим следующие вопросы:

1. случай р = n2

2. блочная реализация (р < n2)

3. пример работы Fox's алгоритма

Случай р = n2

В данном случае получается, что каждому процессору назначается по одному элементу от каждой из матриц А, В и С. Распределим элементы матриц между процессорами следующим образом. Процессору с номером i*n+j (в дальнейшем процессору (i, j)) назначим элементы матриц А, В и С, находящиеся в i-той строке и j-том столбце. Здесь i, j изменяются от 0 до n-1. В данном частном случае Fox's алгоритм будет выполнять умножение матриц А и В за n этапов. Примем, что начальный этап имеет номер 0, а последний этап номер n-1. Тогда на начальном этапе процессор(i, j) умножает диагональный элемент матрицы А на элемент матрицы В, а результат умножения помещает в элемент матрицы С:

этап 0 для процессора (i, j): Су = *

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

Перед тем как рассматривать следующий этап, введем понятие деления по модулю n:

i mod n = i, если i < n

i mod n = i % n, если i > = n (i % n - остаток от деления i на n)

Теперь перейдем непосредственно к рассмотрению следующего этапа. На первом этапе процессор (i, j) умножает элемент матрицы А на элемент матрицы В. Результат умножения складывается со значением элемента начального этапа, и полученная сумма снова помещается в элемент матрицы С. Следует сказать, что элемент матрицы А - это элемент, стоящий непосредственно справа от диагонального элемента, если i принимает значение от 0 до n- 2, и элемент равен элементу, если i = n-1. На рисунке элементы показаны для случая, когда п = 4.

 

 

Аналогично элемент матрицы В - это элемент стоящий на одну строчку ниже в отличии от элемента этапа 0, если i принимает значение от 0 до n-2, и элемент равен элементу , если i = n-1.

 

этап 1 для процессора (i,j): = + *

В общем случае, во время k-ого этапа процессор (i, j) выполняет умножение элемента матрицы А на элемент матрицы В, и складывает результат умножения с элементом предыдущего этапа. Обозначим через к сумму (i+k) mod n, тогда этап к для процессора (i, j) будет выглядеть следующим образом:

этап k для процессора (i, j): = + *

После выполнения последнего этапа Fox's алгоритма элемент будет представляться в виде следующей суммы:

= * + * +...+ * + * +...+ *

А эта сумма есть ничто иное как сумма произведений элементов i-той строки матрицы А на элементы j-того столбца матрицы В. Таким образом, можно сделать вывод о том, что Fox's алгоритм для перемножения квадратных матриц порядка n и числа процессоров р = n2 работает правильно.

Блочная реализация (р < n2)

 

Очевидно, что при решении практических задач требование р = n2 является трудно выполнимым. Так, при умножении двух матриц порядка n = 100 уже требуется 10 000 процессоров. Естественным решением проблемы является назначение процессорам не отдельных элементов, а квадратных подматриц порядка n/(р1/2) от каждой из матриц А, В и C. В этом случае Fox's алгоритм будет выполнять умножение матриц А и В за р1/2 этапов. На каждом этапе процессор (i, j) будет получать подматрицу , формула для вычисления которой имеет вид, аналогичный формуле для вычисления элемента матрицы C, с той лишь разницей, что вместо элементов и следует использовать подматрицы и и i, j будут изменяться от 0 до р1/2 -1. В этом случае этап k для процессора (i, j) будет иметь следующий вид:

этап k для процессора (i, j): = + *

Единственной проблемой при таком подходе является отсутствие какой либо гарантии в том, что n/(р1/2) будет целым числом. Основная сложность состоит в неизвестности порядка матриц n, т.к. р1/2 можно сделать целым числом, если из общего числа процессоров взять только то число, из которого извлекается корень, а оставшиеся процессоры будут просто неработающими. Трудности, связанные с порядком матриц могут быть преодолены за счет введения недостающих строк и столбцов, заполненных нулевыми элементами. В дальнейшем будем полагать, что n/(р1/2) - целое число.




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 1447; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.