1

我一直在尝试提出一种并行特征值分解的算法,但是我尝试的算法中没有一个可以击败 matlab 的 eig 算法,那么有谁知道 matlab 使用哪种算法来处理 eig 函数?或者有人可以建议我一个很好的特征值分解并行算法吗?

4

2 回答 2

4

MATLAB 将 LAPACK 用于其更高级别的线性代数。根据 MA​​TLAB 的 version 命令,它是 Intel 的 Math Kernel Library (MKL):

>> version('-lapack')
ans =
Intel(R) Math Kernel Library Version 11.0.2 Product Build 20130124 for Intel(R) 64 architecture applications
Linear Algebra PACKage Version 3.4.1

英特尔 MKL 包括非常快速的 BLAS 和 LAPACK 实施,但它不是免费的。对于开源选项,请尝试EigenArmadillo。他们的 API 非常直观,而且速度非常快。如果您相信Eigen 的声明,它们是最快的开放式 BLAS,具有优于参考 netlib LAPACK 的 API(IMO,一旦您查看 Fortran 版本,API 声明就非常明显了!)

于 2013-10-10T00:44:22.723 回答
3

您可以将ArmadilloOpenBLAS一起使用。两者都是开源的。OpenBLAS 的最新版本也提供了 LAPACK 功能。OpenBLAS 使用多个内核(即并行运行)。

使用 Armadillo 的eig_sym()函数时,指定要使用分而治之的方法。这对大型矩阵有很大的影响。例如:

eig_sym(eigval, eigvec, X, "dc")

顺便说一句,您还可以将基于 Armadillo 的代码与英特尔 MKL 链接,而不是 OpenBLAS。MKL 还提供高度优化的 LAPACK 功能。

于 2013-10-10T04:43:44.307 回答