我目前正在从 BLAS 或 LAPACK 中搜索实现以下操作的子程序
A = alpha*A + beta * B
其中 A 和 B 具有不同的前导维度,即 A 存储为
REAL*8 A(N,N)
和 B 存储为
REAL*B B(LDB,N)
LDB > N。
有没有办法使用现有的 BLAS 或 LAPACK 操作来计算这个,或者我必须为这类问题创建一个自己的子程序?
我目前正在从 BLAS 或 LAPACK 中搜索实现以下操作的子程序
A = alpha*A + beta * B
其中 A 和 B 具有不同的前导维度,即 A 存储为
REAL*8 A(N,N)
和 B 存储为
REAL*B B(LDB,N)
LDB > N。
有没有办法使用现有的 BLAS 或 LAPACK 操作来计算这个,或者我必须为这类问题创建一个自己的子程序?
只需编写循环代码,然后在这里忘记 BLAS。添加两个矩阵受到带宽限制,在这种情况下,编译器可能会像 BLAS 实现一样出色。
您能做的最好的事情是AXPY在每一列上使用 BLAS,但这并不能让您应用beta. 您真的不妨自己编写,因为这基本上是 1 级或 2 级 BLAS 操作,对于大型矩阵来说,内存带宽是有限的。