【问题标题】:matlab parallel eigenvalue decompositionmatlab并行特征值分解
【发布时间】:2013-10-10 00:35:54
【问题描述】:

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

【问题讨论】:

    标签: matlab parallel-processing eigenvector eigenvalue decomposition


    【解决方案1】:

    MATLAB 将 LAPACK 用于其更高级别的线性代数。根据MATLAB的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's claims,它们是最快的开放式 BLAS,它具有优于参考 netlib LAPACK 的 API(IMO,一旦您查看 Fortran 版本,API 声明就很明显了!)

    【讨论】:

    • 非常感谢,但是有什么让算法并行的吗?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 1970-01-01
      • 2011-06-26
      • 2011-03-18
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多