我在Julia编写的程序没有产生预期的计算性能。基本上,程序首先使用cholfact!
计算大矩阵 A 的Cholesky分解,因此 A = L ' →即可。然后使用反斜杠运算符为不同的 b 解决 Lx = b 。
这导致直接调用Lapack。函数cholfact!
由pstrf!
实现,反斜杠运算符使用trtrs!
。这些是正确的Lapack函数。虽然函数pstrf!
是并行执行的,但函数trtrs!
却不是。分析器告诉我,大部分运行时都花费在trtrs!
上。我程序中的代码行是
F = cholfact!(A, :L, pivot = true) # precomputation, executed once
和
x = F[:L]\b[F.piv] # inside a loop, b is computed from x every step
为什么两个Lapack函数之间存在差异?如何并行执行pstrf!
?