基实正定对称矩阵的有效变化

计算科学 线性代数 布拉斯
2021-12-03 02:15:17

我需要优化一个代码,其中最关键的性能部分是“改变基础”,换句话说,它是一个大实数正定对称矩阵实数矩阵上的酉相似变换。这包括以下操作:,具有实正定对称矩阵和实酉。UTAUAU

目前,我两次使用 BLAS DGEMM 实现了这一目标。但我不是很满意,因为忽略了 A 的左手右手的转它也忽略了所有不错属性。AAA

查看所有进行单一相似性转换的 LAPACK 例程,似乎没有一个实际上使用 DGEMM,我是否错过了一个简单的优化机会?

1个回答

在大多数情况下,LAPACK 将像这样的酉矩阵表示为家庭反射器的乘积,并提供专门的例程来处理该表示(例如,使用 [dormqr] 乘以,或 [dorgqr] 明确制表成一个密集矩阵)。UUU

如果您已经拥有,使用 [dormqr] 来更新 A 会更惯用,而不是 [dgemm]。特别是,对 [dormqr] 的两次调用可以更新 (用覆盖),而 [dgemm] 将需要一个临时矩阵。不过,这一点可能有点学术性,因为 [dormqr] 需要额外的工作空间,而 [dgemm] 不需要。尽管有一个无工作空间的例程 [dorm2r] 执行与 [dormqr] 类似的功能,但不推荐使用,因为它是 BLAS2 算法并且不会那么快。UB=UTAUAB

我想如果我已经被明确列出了,我可能会坚持使用 [dgemm]。但是,如果您可以控制的生成/计算方式(例如,一些手动的 gram-schmidt 过程应用于其他一些基组),我强烈考虑重构所有内容以使用 LAPACK 工具(即使用 [dgeqrf] 将你的基础正交化为然后使用 [dormqr] 来应用它,可能不需要明确地形成它)。UUU

出于好奇,,你会如何处理它?如果您可以分享更多关于更大流程的信息,可能会有更多重构/优化机会。B