Умножение трех матриц в BLAS с диагональю средней - PullRequest
4 голосов
/ 23 августа 2010

A - это матрица MxK, B - это вектор размером K, а C - это матрица KxN.Какой набор операторов BLAS следует использовать для вычисления приведенной ниже матрицы?

M = A*diag(B)*C

Один из способов реализовать это - использовать три цикла for, как показано ниже

for (int i=0; i<M; ++i)
    for (int j=0; j<N; ++j)
        for (int k=0; k<K; ++k)
            M(i,j) = A(i,k)*B(k)*C(k,j);

Действительно ли это стоит реализоватьэто в BLAS, чтобы получить лучшую эффективность скорости?

1 Ответ

3 голосов
/ 18 февраля 2011

Сначала вычислите D = diag(B)*C, затем используйте соответствующее матричное умножение BLAS для вычисления A*D.

. Вы можете реализовать diag(B)*C, используя цикл над элементами B и вызывая соответствующий BLASпроцедура скалярного умножения.

...