在 BLAS 中将三个矩阵相乘,中间一个是对角矩阵
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 中实现这一点?
A
is an MxK
matrix, B
is a vector of size K
, and C
is a KxN
matrix. What set of BLAS operators should I use to compute the matrix below?
M = A*diag(B)*C
One way to implement this would be using three for loops like below
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);
Is it actually worth implementing this in BLAS in order to gain better speed efficiency?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先计算
D = diag(B)*C
,然后使用适当的 BLAS 矩阵乘法来计算A*D
。您可以使用对
B
元素进行循环并调用适当的 BLAS 标量乘法例程来实现diag(B)*C
。First compute
D = diag(B)*C
, then use the appropriate BLAS matrix-multiply to computeA*D
.You can implement
diag(B)*C
using a loop over elements ofB
and calling to the appropriate BLAS scalar-multiplication routine.