Участник:Руфина Третьякова/Хранение ненулевых элементов разреженных матриц. Умножение разреженной матрицы на вектор: различия между версиями
Trrufina (обсуждение | вклад) |
Trrufina (обсуждение | вклад) |
||
Строка 73: | Строка 73: | ||
# привести матрицу <math>M</math> к формату CSR | # привести матрицу <math>M</math> к формату CSR | ||
# для <math>i</math> от <math>0</math> до <math>n-1</math> | # для <math>i</math> от <math>0</math> до <math>n-1</math> | ||
− | + | вычислить <math>y_i</math> произведение по формуле <math>y_i = \sum_{k = IA_i}^{IA_{i+1}} A_k x_{JA_k}</math> | |
=== Последовательная сложность алгоритма === | === Последовательная сложность алгоритма === |
Версия 00:54, 13 октября 2016
Умножение разреженной матрицы на вектор | |
Последовательный алгоритм | |
Последовательная сложность | [math]nnz[/math] |
Объём входных данных | [math]2nnz+n+1[/math] |
Объём выходных данных | [math]n[/math] |
Параллельный алгоритм | |
Высота ярусно-параллельной формы | [math][/math] |
Ширина ярусно-параллельной формы | [math][/math] |
Авторы статьи: Третьякова Р. М. (группа 603), Буторина Е. В. (группа 603)
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Разрежённая матрица — это матрица с преимущественно нулевыми элементами. В противном случае, если бо́льшая часть элементов матрицы ненулевые, матрица считается плотной. Среди специалистов нет единства в определении того, какое именно количество ненулевых элементов делает матрицу разрежённой. Разные авторы предлагают различные варианты. Огромные разрежённые матрицы часто возникают при решении таких задач, как дифференциальное уравнение в частных производных. При хранении и преобразовании разрежённых матриц в компьютере бывает полезно, а часто и необходимо, использовать специальные алгоритмы и структуры данных, которые учитывают разрежённую структуру матрицы. Операции и алгоритмы, применяемые для работы с обычными, плотными матрицами, применительно к большим разрежённым матрицам работают относительно медленно и требуют значительных объёмов памяти. Однако разрежённые матрицы могут быть легко сжаты путём записи только своих ненулевых элементов, что снижает требования к компьютерной памяти.
1.2 Математическое описание алгоритма
Исходные данные: разреженная матрица [math]M^{n*n}[/math], вектор [math]x^{n*1}[/math]
Наиболее удобным форматом для вычисления произведения матрицы на вектор является "Compressed Sparse Row" или сокращенно CSR-формат.
Рассмотрим CSR-представление разреженной матрицы: пусть число ненулевых элементов матрицы равно [math]nnz[/math] CSR-формат представляет матрицу [math]M[/math] в виде 3-х одномерных массивов:
массив [math]A[/math] размера [math]nnz[/math] содержит ненулевые значения матрицы, [math]JA[/math] размера [math]nnz[/math] - номера столбцов ненулевых элементов., [math]IA[/math] размера [math]n[/math]- содержит номер с которого начинается описание элементов строки в массивах [math]A[/math] и [math]JA[/math]. Этот формат позволяет производить перемножение матрицы [math]M[/math] на вектор [math]x[/math] за [math]O(nnz)[/math] умножений и сложений.
Например, это разреженная матрица с 4-мя ненулевыми элементами
- [math]\begin{pmatrix} 0 & 0 & 0 & 1 \\ 2 & 0 & 0 & 0 \\ 0 & 0 & 3 & 0 \\ 0 & 4 & 0 & 0 \\ \end{pmatrix}[/math],
представляемая в формате CSR A = [ 1 2 3 4 ] IA = [ 0 1 2 3 4 ] JA = [ 3 0 2 1 ]
Вычисляемые данные: вектор [math]M*x=y[/math]
1.3 Вычислительное ядро алгоритма
- [math]y_i = \sum_{k = IA_i}^{IA_{i+1}} A_k x_{JA_k}[/math]
1.4 Макроструктура алгоритма
Псевдокод алгоритма:
Входные данные: число строк матрицы n; разреженная матрица в формате CSR: строчные указатели IA, столбцовые указателиJA, ненулевые элементы A; вектор x. Выходные данные: произведение матрицы на вектор y. read CSR n, IA, JA, A; read x for i = 1,n: for k = IA(i), IA(i+1)-1: y(i) += A(k)*x(JA(k)); write y;
1.5 Схема реализации последовательного алгоритма
Метод можно описать следующим образом:
- привести матрицу [math]M[/math] к формату CSR
- для [math]i[/math] от [math]0[/math] до [math]n-1[/math]
вычислить [math]y_i[/math] произведение по формуле [math]y_i = \sum_{k = IA_i}^{IA_{i+1}} A_k x_{JA_k}[/math]
1.6 Последовательная сложность алгоритма
Для вычисления матрично-векторного произведения матрицы размера [math]n*n[/math] и вектора размера n в последовательном варианте требуется:
- [math][/math] сложений,
- [math]nnz[/math] умножений.
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
1.9 Входные и выходные данные алгоритма
1.10 Свойства алгоритма
2 Программная реализация алгоритма
2.1 Масштабируемость алгоритма и его реализации
2.2 Существующие реализации алгоритма
Последовательная реализация реализована в пакете SPARSKIT
3 Литература
[1] С. Писсанецки. Технология разреженных матриц. Изд. Мир, 1988.