Участник:Kisel dv/DNS алгоритм умножения матриц: различия между версиями
Kisel dv (обсуждение | вклад) Нет описания правки |
Kisel dv (обсуждение | вклад) Нет описания правки |
||
| Строка 14: | Строка 14: | ||
Используемые формулы: | Используемые формулы: | ||
<math>\sum_{k=0}^{ | <math>\sum_{k=0}^{m-1} A_{ik} B_{kj} \quad i \in [0, m-1], \quad j \in [0, m-1] </math> , | ||
где <math> m \times m </math> - количество блоков матрицы. | |||
== Вычислительное ядро алгоритма == | == Вычислительное ядро алгоритма == | ||
Вычислительное ядро перемножения матриц методом DNS | Вычислительное ядро перемножения матриц методом DNS состоит из вычислений всех элементов блоков матрицы-результата: процедур вычислений умножения блоков матрицы <math> A </math> на блоки матрицы <math> B </math> | ||
<math>\sum_{k= | <math>\sum_{k=0}^{m-1} A_{ik} B_{kj} \quad i \in [0, m-1], \quad i \in [0, m-1] </math> | ||
| Строка 27: | Строка 28: | ||
В алгоритме используется: | В алгоритме используется: | ||
<math> \cdot </math> | <math> \cdot </math> произведение блоков матриц <math> A </math> и <math> B </math> | ||
<math>\sum_{k=1}^{n} a_{ik} b_{kj}</math> | |||
== Схема реализации последовательного алгоритма == | == Схема реализации последовательного алгоритма == | ||
Обнулим матрицу <math>C</math> , предназначенную для записи полученного результата произведения <math>C = AB</math> . Далее в цикле выполняется последовательное умножение | Обнулим матрицу <math>C</math> , предназначенную для записи полученного результата произведения <math>C = AB</math> . Далее в цикле выполняется последовательное умножение блоков матриц операндов и суммирование результатов. | ||
<math> | <math>C_{ij} = \sum_{m=0}^{n-1} A_{ik} B_{kj} \quad i \in [0, m-1], \quad j \in [0, m-1] </math> | ||
В результате получаем матрицу <math>C</math> , равную произведению матриц <math>A</math> и <math>B</math> . | В результате получаем матрицу <math>C</math> , равную произведению матриц <math>A</math> и <math>B</math> . | ||
Версия от 13:15, 24 октября 2017
Автор: Д.В.Кисель
Свойства и структура алгоритма
Общее описание алгоритма
Алгоритм DNS(Dekel, Nassimi, Sahni - назван по фамилиям создателей) является одним из блочных алгоритмов решения задачи [math]\displaystyle{ C = AB }[/math] перемножения двух матриц. Для данного алгоритма мы не используем какие-либо свойства матриц [math]\displaystyle{ A }[/math] и [math]\displaystyle{ B }[/math] . DNS основан на разделении промежуточных данных, его преимуществом является временная сложность [math]\displaystyle{ O(log(n)) }[/math] при вычислительной сложности [math]\displaystyle{ O(\frac{n^3}{log(n)}) }[/math] . Достигается это за счет 3d-секционирования(англ. partitioning), в отличие от альтернатив, использующих 2d-секционирование(например, алгоритм Кэннона). Тем самым, алгоритм DNS представим в виде куба, где матрицы [math]\displaystyle{ A }[/math] , [math]\displaystyle{ B }[/math] и матрица [math]\displaystyle{ C }[/math] ортогональны друг другу[1]. Далее данное описание будет рассмотрено подробнее.
Математическое описание алгоритма
Исходные данные: матрицы [math]\displaystyle{ A }[/math] и [math]\displaystyle{ B }[/math] с элементами [math]\displaystyle{ a_{ij} }[/math] и [math]\displaystyle{ b_{ij} }[/math] , соответственно.
Вычисляемые данные: матрица [math]\displaystyle{ C }[/math] с блоками [math]\displaystyle{ C_{ij} }[/math]
Используемые формулы:
[math]\displaystyle{ \sum_{k=0}^{m-1} A_{ik} B_{kj} \quad i \in [0, m-1], \quad j \in [0, m-1] }[/math] , где [math]\displaystyle{ m \times m }[/math] - количество блоков матрицы.
Вычислительное ядро алгоритма
Вычислительное ядро перемножения матриц методом DNS состоит из вычислений всех элементов блоков матрицы-результата: процедур вычислений умножения блоков матрицы [math]\displaystyle{ A }[/math] на блоки матрицы [math]\displaystyle{ B }[/math]
[math]\displaystyle{ \sum_{k=0}^{m-1} A_{ik} B_{kj} \quad i \in [0, m-1], \quad i \in [0, m-1] }[/math]
Макроструктура алгоритма
В алгоритме используется:
[math]\displaystyle{ \cdot }[/math] произведение блоков матриц [math]\displaystyle{ A }[/math] и [math]\displaystyle{ B }[/math]
[math]\displaystyle{ \sum_{k=1}^{n} a_{ik} b_{kj} }[/math]
Схема реализации последовательного алгоритма
Обнулим матрицу [math]\displaystyle{ C }[/math] , предназначенную для записи полученного результата произведения [math]\displaystyle{ C = AB }[/math] . Далее в цикле выполняется последовательное умножение блоков матриц операндов и суммирование результатов.
[math]\displaystyle{ C_{ij} = \sum_{m=0}^{n-1} A_{ik} B_{kj} \quad i \in [0, m-1], \quad j \in [0, m-1] }[/math]
В результате получаем матрицу [math]\displaystyle{ C }[/math] , равную произведению матриц [math]\displaystyle{ A }[/math] и [math]\displaystyle{ B }[/math] .
Последовательная сложность алгоритма
Информационный граф
Ресурс параллелизма алгоритма
[math]\displaystyle{ \cdot }[/math] Рассмотрим [math]\displaystyle{ n^3 }[/math] процессов, доступных для умножения двух матриц размером [math]\displaystyle{ n \times n }[/math] . Представим их в виде трехмерного массива [math]\displaystyle{ n \times n \times n }[/math] .
[math]\displaystyle{ \cdot }[/math] Процессы именованы согласно их расположению в массиве, соответственно, вычисление произведения [math]\displaystyle{ a_{ik}b_{kj} }[/math] присвоено процессу с координатами [math]\displaystyle{ [i, j, k] (0 \leq i,j,k \lt n) }[/math] .
[math]\displaystyle{ \cdot }[/math] После того, как каждый процесс завершил умножение, результаты процессов [math]\displaystyle{ [i, j, 0], [i, j, 1], ..., [i, j, n-1] }[/math] суммируются в [math]\displaystyle{ c_{ij} }[/math] . Суммирование всех [math]\displaystyle{ c_{ij} }[/math] может выполняться одновременно за [math]\displaystyle{ log(n) }[/math] шагов. [2]
Входные и выходные данные алгоритма
Свойства алгоритма
Программная реализация алгоритма
Особенности реализации последовательного алгоритма
Локальность данных и вычислений
Возможные способы и особенности параллельной реализации алгоритма
Масштабируемость алгоритма и его реализации
Динамические характеристики и эффективность реализации алгоритма
Выводы для классов архитектур
Существующие реализации алгоритма
Литература
- ↑ E. Dekel, D. Nassimi, and S. Sahni, “Parallel Matrix and Graph Algorithms,” SIAM, Journal on Computing, vol. 10, no. 4, Nov. 1981, pp. 657-675.
- ↑ http://parallelcomp.uw.hu/ch08lev1sec2.html