我一直在测试各种开源代码来求解 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 分解或其他方法)吗?谢谢!
编辑:实际上,使用 synaptic 包管理器安装 openblas 时,核心数量停留在 2 似乎是一个错误see here。从源代码重新安装可以让它检测我实际有多少个核心 (8)。现在我可以使用 export OPENBLAS_NUM_THREADS=4 等来管理它。
犰狳并不能阻止OpenBlas使用更多核心。 OpenBlas 的当前实现可能只是为某些操作选择 2 个内核。
你可以直接在中看到Armadillo的源代码可下载包(它是开源的),位于文件夹“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”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)