犰狳线性系统求解器(带有openblas)

Posted

技术标签:

【中文标题】犰狳线性系统求解器(带有openblas)【英文标题】:armadillo linear system solver (with openblas) 【发布时间】:2013-01-30 18:51:21 【问题描述】:

我一直在测试各种开源代码,用于在 C++ 中求解线性方程组。到目前为止,我发现最快的是犰狳,也使用了 OPENblas 包。为了解决一个密集的线性 NxN 系统,在我的系统上 N=5000 大约需要 8.3 秒,这真的非常快(没有安装 openblas,大约需要 30 秒)。

这种增加的一个原因是犰狳+openblas 似乎可以使用多线程。它在我的两个内核上运行,而没有 openblas 的犰狳只使用 1 个。我有一个 i7 处理器,所以我想增加内核数量,并进一步测试它。我正在使用 ubuntu,所以从 openblas 文档中我可以在终端中执行:

导出 OPENBLAS_NUM_THREADS=4

但是,再次运行代码似乎不会增加正在使用的内核数量或速度。我做错了什么,还是 2 是使用犰狳的“solve(A,b)”命令的最大数量?我无法在任何地方找到犰狳的源代码来查看。

顺便说一句,有没有人知道犰狳/openblas 用于解决 Ax=b 的方法(具有并行性的标准 LU 分解或其他方法)?谢谢!

编辑:实际上,在使用突触包管理器see here 安装 openblas 时,卡在 2 处的核心数量似乎是一个错误。从源代码重新安装允许它检测我实际拥有的核心数量 (8)。现在我可以使用 export OPENBLAS_NUM_THREADS=4 等来管理它。

【问题讨论】:

您怎么知道实际使用了多少个内核? @chandresh 你可以在 linux 中使用 top 或 htop 【参考方案1】:

Armadillo 不会阻止OpenBlas 使用更多内核。当前的 OpenBlas 实现可能只是为某些操作选择了 2 个内核。

您可以直接在 downloadable 包(它是开源的)中的“include”文件夹中查看 Armadillo 的源代码。具体来说,查看文件“include/armadillo_bits/fn_solve.hpp”(其中包含用户可访问的 solve() 函数)和文件“include/armadillo_bits/auxlib_meat.hpp”(其中包含用于调用折磨人的 Blas 和 Lapack 函数的包装器和管理代码)。

如果您的机器上已经安装了 Armadillo,请查看“/usr/include/armadillo_bits”或“/usr/local/include/armadillo_bits”。

【讨论】:

感谢您提供有关源代码的信息。请参阅我对 openblas 使用的核心数量的编辑

以上是关于犰狳线性系统求解器(带有openblas)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++(带有犰狳)代码链接到 PETSc?

什么是犰狳+Atlas、犰狳+OpenBLAS、犰狳+uBLAS、犰狳+MKL?

我怎么知道,犰狳正在我的 ARM 上使用 openblas?

犰狳的求解(A,b)从 Matlab,Eigen 返回不同的答案

为犰狳设置线程数

如何在编译期间强制犰狳库链接到本地​​ OpenBLAS