3

我一直在测试各种开源代码来求解 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 分解或其他方法)吗?谢谢!

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

4

1 回答 1

3

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

您可以直接在“include”文件夹中的可下载包(它是开源的)中查看犰狳的源代码。具体来说,查看文件“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”。

于 2013-01-31T06:31:48.967 回答