En multipliant trois matrices à BLAS avec celui du milieu étant diagonale
-
30-09-2019 - |
Question
A
est une matrice MxK
, B
est un vecteur de taille K
, et C
est une matrice de KxN
. Quel ensemble des opérateurs BLAS dois-je utiliser pour calculer la matrice ci-dessous?
M = A*diag(B)*C
Une façon de mettre en œuvre ce serait à l'aide de trois pour les boucles comme ci-dessous
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);
Est-il vraiment la peine de mettre en œuvre ce BLAS afin d'obtenir une meilleure efficacité de la vitesse?
La solution
Tout d'abord calculer D = diag(B)*C
, puis utiliser la matrice de multiplication pour calculer A*D
BLAS appropriées.
Vous pouvez implémenter diag(B)*C
en utilisant une boucle sur des éléments de B
et d'appeler à la BLAS appropriée de routine scalaire multiplication.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow