我想在 Matlab 或 Java 中使用它。如果效率是一个重要因素,与 C、C++ 相比,这两种语言的算法计算速度会慢得多吗?
我知道有一个 PROPACK 和 SVDPACK 等。似乎很旧。有哪些受欢迎的选择?是否存在任何并行版本?如果没有并行版本,我计划制作一个适当的顺序版本来并行化(多线程)。并行化对我的项目很重要,因为它针对的是大型数据集。所以我想我需要直接修改选择的代码(向量计算级别的多线程并行化)。
我想在 Matlab 或 Java 中使用它。如果效率是一个重要因素,与 C、C++ 相比,这两种语言的算法计算速度会慢得多吗?
我知道有一个 PROPACK 和 SVDPACK 等。似乎很旧。有哪些受欢迎的选择?是否存在任何并行版本?如果没有并行版本,我计划制作一个适当的顺序版本来并行化(多线程)。并行化对我的项目很重要,因为它针对的是大型数据集。所以我想我需要直接修改选择的代码(向量计算级别的多线程并行化)。
因此,理论上,您可以使用SLEPc的 MATLAB 接口。这样做意味着您不能使用任何基于 MPI 的并行性,如果它类似于 PETSc 的 MATLAB 接口的话。有相当多的安装量(PETSc,您想使用 PETSc 配置的任何软件包,以及您想与 SLEPc 捆绑的任何特征求解器),但它确实为您提供了一个单一界面,您可以从中使用各种方法(例如,厚通过 TRLAN 重启 Lanczos,通过 ARPACK、Krylov-Schur 隐式重启 Arnoldi),以及大量的预处理器。
有一个 Java 线性代数基准,可以让您深入了解 Java 比本机代码慢多少。
比较 Java 和本机代码(从 Java 调用的本机代码)的较早结果。
这个基准测试表明,从 Java 调用本机代码而不是直接在 Java 中实现可以快 10 倍以上,但这是使用更大的矩阵和更复杂的算法。Java 在更简单的操作中表现良好,而对于小型矩阵,调用本机代码时的开销太大。