Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Сообщите мне, если вы хотите получить более подробную информацию.

Ответ 3

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