Классика баз данных - статьи

       

Умножение матриц


В двухмерном случае результат умножения двух матриц A[I, J] и B[J, L] определяется как матрица C [I, L], где C[i, l] = ?j (A[i, j] * B [j, l]).

Тестовый набор состоит в вычислении произведения двух целочисленных матриц A и B с числом измерений, изменяющимся от 3 до 6. Для заданного набора двух общих измерений мы вычисляем произведения всех пар матриц, получаемых путем итерирования по всем значениям оставшегося набора измерений. Заметим, что эта операция является в N раз более трудоемкой, чем скалярное произведение (где N – это средний размер измерения).

Вычисления производились с использованием ASAP, а также Matlab и той же самой РСУБД. На рис. 8 в табличной форме показаны соотношения скоростей для случая малого шага, полученные на тех же аппаратных конфигурациях, что и при вычислениях скалярного произведения.

Мы видим еще более существенное преимущество ASAP над РСУБД (примерно в 800 раз), поскольку для умножения матриц отсутствует однопроходный алгоритм. С другой стороны, Matlab для этого тестового набора работает гораздо лучше, поскольку для этой системы умножение матриц является встроенной, сильно оптимизированной операцией.


Рис. 8. Соотношение скоростей ASAP для умножения матриц (случай малого шага)

Несмотря на это, ASAP превосходит Matlab во всех случаях. Однако в случаях большого шага и наборов данных большого объема производительность Matlab очень быстро деградирует из-за интенсивного свопинга.



Содержание  Назад  Вперед