给定两个矩阵A和B,其中B是对称的(和半正定的),计算A` * B * A的最佳(最快)方法是什么?
目前,使用BLAS,我首先使用dsymm(引入临时矩阵C)计算C = B * A,然后使用dgemm计算A` * C.
使用BLAS和mkl是否有更好(更快,没有临时)的方式?
感谢。
答案 0 :(得分:1)
我将提供一些答案:与一般情况A * B * C相比,您知道最终结果是对称矩阵。在用BLAS子程序dsymm计算C = B * A之后,你想要计算A'C,但你只需要计算矩阵的上对角线部分并将严格的上对角线部分复制到下对角线部分。
不幸的是,似乎没有一个BLAS例程可以预先声明给定两个通用矩阵,输出矩阵将是对称的。我不确定为此编写自己的函数是否有益。这可能取决于矩阵的大小和实现。
编辑: 这个想法似乎最近在这里得到解决:A Matrix Multiplication Routine that Updates Only the Upper or Lower Triangular Part of the Result Matrix