用 c++ 对角化方阵的最快方法

计算科学 C++ 本征系统 显卡
2021-12-20 18:48:50

我目前正在用 C++ 编写软件,它解决了稀疏厄米矩阵的特征值问题。矩阵的大小取决于用户输入,但作为估计,它将大致为 1000x1000。对于不同的初始条件,我将不得不解决其中的大约 300 个(再次依赖于用户输入)。最快的方法是什么?更具体地说,我想知道在 GPU 上进行计算是否有意义,或者在 CPU 上进行计算并在 300 个初始条件下使用 openMP 是否会更快?你会建议使用什么 c++ 库以及为什么(可能有一些简单的 GPU 内置支持)?目前我正在将 eigen3 用于密集矩阵。

1个回答

最快的方法是什么?

这在很大程度上取决于矩阵的形式。您可以利用对称性来减少您的问题:矩阵是对称的还是 Hermitian?它是带状的还是三对角的?也许它甚至是块对角线,然后你可以对角化块彼此独立。

此外,如果您只需要几个特征值,那么您可能想要使用迭代求解器而不是进行完全对角化。

您可能想看看这个在线资源:

这是一个巨大的表格,列出了许多线性代数代码、它们的并行度、支持的矩阵和数据类型等等。