BLAS: гем против гемв - PullRequest
       35

BLAS: гем против гемв

21 голосов
/ 15 августа 2011

Почему BLAS имеет функцию gemm для умножения матрицы на матрицу и отдельную функцию gemv для умножения матрицы на вектор?Разве умножение матрицы на вектор не является особым случаем умножения матрицы на матрицу, когда одна матрица имеет только одну строку / столбец?

Ответы [ 3 ]

11 голосов
/ 15 августа 2011

Математически , умножение матрицы на вектор является частным случаем умножения матрицы на матрицу, но это не обязательно верно для них, как это реализовано в программной библиотеке.

Они поддерживают различные варианты.Например, gemv поддерживает пошаговый доступ к векторам, на которых он работает, тогда как gemm не поддерживает макеты пошаговой матрицы.В привязках к языку C gemm требует, чтобы вы указали порядок хранения всех трех матриц, тогда как в gemv это не нужно для векторных аргументов, потому что это было бы бессмысленно.

Помимо поддержки различных опций,есть семейства оптимизаций, которые могут быть выполнены на gemm, которые не применимы к gemv.Если вы знаете, что работаете с матрично-векторным продуктом, вы не хотите, чтобы библиотека тратила время на выяснение этого, прежде чем переключаться на путь кода, оптимизированный для этого случая;вместо этого лучше позвонить прямо.

3 голосов
/ 01 декабря 2014

При оптимизации gemv и gemm применяются разные методы:

  • Для операции матрица-матрица вы используете заблокированные алгоритмы.Размеры блоков зависят от размеров кэша.
  • Для оптимизации матрично-векторного произведения вы используете так называемые слитые операции уровня 1 (например, слитые продукты с точками или слитая ось).

Позвольте мнезнать, если вы хотите больше деталей.

1 голос
/ 15 августа 2011

Я думаю, что он просто лучше соответствует иерархии BLAS с подпрограммами уровня 1 (вектор-вектор), уровня 2 (матрица-вектор) и уровня 3 (матрица-матрица). И это может быть оптимизировано немного лучше, если вы знаете, что это всего лишь вектор.

...