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

时间:2013-01-30 18:51:22

标签: multicore blas armadillo

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

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

导出OPENBLAS_NUM_THREADS = 4

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

顺便提一下,有人知道armadillo / openblas用于解决Ax = b(带并行性或其他东西的标准LU分解)的方法吗?谢谢!

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

1 个答案:

答案 0 :(得分:3)

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”。