具有多个右手边的线性系统

计算科学 并行计算 线性求解器
2021-12-09 18:02:13

我有兴趣解决以下形式的一系列线性系统:

Axi=bi
也就是说,所有系统都使用相同的矩阵A但他们有不同的右手边。矩阵A稀疏对称正定的。我目前正在使用 CHOLMOD 来解决每个系统。显然,我分解A一次(Cholesky 分解),然后我按顺序执行前向/后向求解。

我现在正在尝试并行化这些操作。我想找到xi是并行的。在我第一次尝试使用pthreads时,我无法在四核 i7 机器上获得超过 2 倍的加速。我猜我不能超过 2X,因为我试图并行化的操作非常快,以至于它们的运行时间与从内存中读取 Cholseky 分解矩阵并将它们发送到每个核心所需的时间相当。我不确定,因为我在并行编程方面不是很有经验。

我的问题是:有没有更好的方法来做到这一点?如果我使用其他编程范例,我会期望更高的速度吗?此外,您是否知道已经执行此并行化的任何求解器。(我对并行化一个系统解决方案的包不感兴趣)。

这个问题似乎是令人尴尬的并行,我预计四核机器上的加速非常接近 4 倍,因为任务之间没有依赖关系。

谢谢

1个回答

您的性能可能会受到系统内存带宽的限制。有两个或三个内核可以使用所有可用内存带宽并且无法实现更高的并行加速的情况并不少见,因为没有足够的带宽来允许所有内核充分工作速度。

一个相对简单的测试是使用 1、2、3 和 4 核运行 John McCalpin 的 STREAM 基准测试,以查看性能如何扩展。如果它在两个核心之后陷入困境,请不要感到惊讶。如果您的系统以这种方式受到带宽限制,并且您的代码是内存密集型的(对于稀疏直接求解器而言是典型的),那么这可以解释您的结果。

您可以在 McCalpin 的网站上看到一些 STREAM 基准测试结果。通用 core-i7-2600 系统的一项结果显示,从 1 个核心变为 4 个核心几乎没有改进。

STREAM 基准可以在以下位置找到:

https://www.cs.virginia.edu/stream/