#c #lapack #blas #intel-mkl
#c #lapack #blas #intel-mkl
Вопрос:
Я хотел бы обновить симметричную матрицу C с помощью уравнения
C = alpha*A*D*A^T beta*C
где A — общая матрица размером n на k, а D — диагональная матрица.
Какой наиболее эффективный способ вычислить это с использованием BLAS и LAPACK? Есть ли что-нибудь похожее на syrk (netlib), но допускающее диагональный множитель? Возможно, через расширение уровня BLAS 3?
Используя MKL, вы могли бы вычислить
B = A*D
а затем используйте расширение MKL gemmt (Intel) для вычисления только нижней треугольной части A * B^T
Но это вряд ли кажется наиболее эффективным возможным подходом, потому что B = A * D
вычисления требуют ненужной дополнительной работы. Мне интересно, существуют ли какие-либо специализированные ядра для этого, поскольку кажется, что это было бы обычным вычислением.