【发布时间】:2020-05-29 08:21:07
【问题描述】:
我已经达到了以下问题的极限:
作为我的 FEA 代码的一部分(在 MATLAB 中),我需要找到 x,x=A\b。 A 和 b 分别是稀疏、复杂、双精度矩阵和向量。 A 的大小为 (n,n),b 的大小为 (n,1),其中 n 为 850000,可以增加到 2000000。此外,A 是对称的,主要是对角线。
我有两个 HPC 集群可供我使用,一个具有 5.7TB 的 RAM,另一个具有 1.5TB(但内核速度更快)。从技术上讲,我可以按原样解决系统,只需等待大约 15 天。但是,我需要对方程组进行求解,每次模拟最多 10 倍。因此,15 天是不可接受的时间量。
我尝试了迭代方法,但这些方法并没有产生与反斜杠运算符相同的结果。在某些情况下也没有获得收敛。
我已将 x=A\b 部分转换为 mexa64 格式,以减少时间。但是,我担心这仍然需要几天时间。
关于如何解决这个问题的任何建议?是否有任何商业代码可以更快/更有效地做到这一点?当模型的节点数超过 1m 时,商业 FEA 包如何解决这个问题?
非常感谢任何帮助! 提前致谢。
【问题讨论】:
-
一旦达到这个级别,您需要特定问题的代码来加速。通常,大规模问题不会将矩阵
A存储在内存中,这可以带来巨大的速度提升。可以这样做是因为操作A*x和 `A^t*b¬ 可以即时计算。例如我制作了一个断层扫描工具箱,可以动态计算这些操作,这意味着不需要内存,并且从矩阵存储解决方案中加速超过 1000。但它仅适用于特定类型的断层扫描。你需要找到适合你的情况 -
顺便说一句,matlabs
A\b在后台使用高度加速的代码,我怀疑你可以比使用相同方法提供的 MATLAB 更快 -
你需要解几个方程组。
A矩阵对他们中的一些人来说是通用的吗?任何可以使用的结构或限制?否则,我同意 Ander 的观点:在求解线性系统方面似乎很难超越 Matlab 的速度 -
是的,矩阵 A 是对称的,并且大部分是对角线。我也相应地更新了这个问题。我知道 A\b 是在 MATLAB 中解决问题的一种极其有效的方式。但是,商业 FEA 包在处理此类问题时如何解决它。
-
如果您需要更快的速度,您可能不得不使用迭代求解器。如果您尝试过的任何迭代求解器收敛太慢或根本不收敛(即使它适合您拥有的矩阵类型),那么您需要找到更好的预处理器。这取决于问题的结构、矩阵的类型以及您可以承担的任何领域知识。
标签: matlab large-data inverse finite-element-analysis