我一直在测试各种开源代码来求解 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 等来管理它。