BLAS 函数 Dgemm,但所有矩阵都乘以标量

BLAS Functions Dgemm but all matrices are multiplied by a Scalar

本文关键字:标量 Dgemm 函数 BLAS      更新时间:2023-10-16

是否有任何类似 Dgemm 的矩阵调用来缩放 a 和 b 矩阵?(A,B,C是标量(。

IE c = C * c + (A*op(a(( * (B*op(b((;

奖励积分是否有任何原因不支持,或者它只是在线性代数中不常见,因此通常没有必要?

标准 BLAS 接口不提供独立缩放AB矩阵的直接平均值(在此行话中,它们通常将大写字母用于矩阵/向量,小写字母用于标量(。有关 cblas_?gemm,请参阅 MKL cblas 文档(在 BLAS 实现中是相同的(。

不过,您可以做的是使用中间调用生成B的缩放版本,将ab设置为零:

C = c.*C + (0.*A) * (0.*B)

但是,如果将矩阵乘法分解为单个运算(示例按行主顺序(:

for( i = 0; i < N; i++ ) {
  for( j = 0; j < M; j++ ) {
    for( ii = 0; ii < K; ii++ ) {
      C[i][j] = C[i][j] + a*A[i][ii]*B[ii][j];
    }
  }
}

您将看到缩放会影响两个矩阵的元素。由于标量积是可交换的和关联的,因此使用等于两个标量的乘积的a参数具有相同的效果。

是的,dgemm 通过使用简单的乘法属性来做到这一点。只需参考此处。

c = C*c + (A*op(a))*(B*op(b))
c = C*c + A*(op(a))*B)*op(b)
c = C*c + A*(B*op(a))*op(b)
c = C*c + (A*B)*op(a)*op(b)