Как работает параметр ведущего измерения для подматриц в cblas_dgemm ()?

У меня есть три матрицы A, B и C:
введите описание изображения здесь

И матрично-матричное произведение для общих матриц:

void cblas_dgemm(const enum CBLAS_ORDER __Order, const enum CBLAS_TRANSPOSE __TransA, const enum CBLAS_TRANSPOSE __TransB, const int __M, const int __N, const int __K, const double __alpha, const double *__A, const int __lda, const double *__B, const int __ldb, const double __beta, double *__C, const int __ldc);

Для использования cblas_dgemm-команда мне нужно знать ведущее измерение. Для меня ясно, что в случае полной матрицы A (или ее транспонированной формы) имеем: M=5, N=4, lda=4,

В случае подматрицы C я думаю, что я должен прощать &A[5] и установить M=3, N=2, ldc=4

Но я понятия не имею, как это может работать в случае красной подматрицы B с M=4, N=2, Может кто-то объяснить это мне. Большое спасибо.

0

Решение

Эта статья в значительной степени описывает это:
https://petewarden.com/2015/10/25/an-engineers-guide-to-gemm/

Причина очевидной сложности процедур BLAS заключается в том, что они обеспечивают большую гибкость и оптимизированы для обеспечения исключительно хороших результатов. Обе цели достигаются, если подпрограммы могут применяться к матрицам, состоящим из подматриц, представляющих интерес, и т. Д. Зачастую они могут делать больше, чем нужно. xGEMM класс является выдающимся примером. Вы можете выполнить A * B но также A * B + c*C

В вышеперечисленных случаях:

A: M=5, N=5, LDA = 5
B: M=4, N=1, LDB = 10
C: M=3, N=2, LDB = 5

И вы правы в том, что ваша первая запись в C &C[6]

Другими словами, ведущим измерением обычно будет длина столбца внешней матрицы, если вы главный столбец, и длина строки, если вы вычисляете мажор строки.

В случае B это немного сложнее, так как вам нужно перепрыгнуть через два столбца по 5, то есть 10, при переходе от одного столбца подматрицы к следующему.

Все, что BLAS хочет сейчас, это (столбец / ряд основных):

  1. Когда начать (&A[0], &B[0], &C[6]/&A[0], &B[0], &C[5])
  2. Как долго это первое измерение, M (5, 4, 3 / 4, 2, 2)
  3. Сколько из этих столбцов / строк, N (4, 2, 2 / 5, 4, 3)
  4. Как далеко прыгать через внешнюю матрицу, чтобы перейти к следующему столбцу / строке ldx (5, 10, 5)
1

Другие решения

Других решений пока нет …