python - 不确定我的 Python/numpy 版本是否使用优化的 BLAS/LAPACK 库?
问题描述
我在这里读到“确保 numpy 在您的系统上使用优化版本的 BLAS/LAPACK 库”很重要。
当我输入:
import numpy as np
np.__config__.show()
我得到以下结果:
blas_mkl_info:
NOT AVAILABLE
blis_info:
NOT AVAILABLE
openblas_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/home/anaconda3/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/home/anaconda3/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
NOT AVAILABLE
openblas_lapack_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/home/anaconda3/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/home/anaconda3/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
这是否意味着我的 numpy 版本正在使用优化的 BLAS/LAPACK 库,如果没有,我该如何设置 numpy 以便它使用优化的版本?
解决方案
有点儿。OpenBLAS 还不错。我刚刚获取了第一个链接,我可以在谷歌上找到“OpenBLAS、ATLAS、MKL 比较”。
http://markus-beuckelmann.de/blog/boosting-numpy-blas.html
现在,这还不是全部。根据您需要的算法,差异可能不会/略有/有很大不同。除了运行与不同实现链接的您自己的代码之外,真的没有什么可以做的了。
我最喜欢的各种线性代数问题、SVD、Eigs、实数和伪反演、因式分解……不同操作系统上的单核/多核:
MacOS:加速框架(随操作系统提供) Linux/Windows:
- MKL
- 距离很远但仍然很安静:ATLAS 和 OpenBLAS 不相上下
- 即使在 AMD 处理器上,ACML 也一直让我失望
TLDR:您的设置很好。但是如果你想从你的 CPU / RAM / 主板组合中挤出最后一滴血,你需要 MKL。当然,它的价格相当高,但是如果您能以一半的价格获得硬件作为回报,也许值得。如果你写了一个开源包,你可以免费使用 MKL 进行开发。
推荐阅读
- java - 如何从 Java 的内部循环返回 float[] 数组,然后从其他方法/类中调用它?
- go - 如何在不实际构建 Go 插件的情况下比较包指纹?
- php - 如何在 MYSQL php 中动态使用 Orderby?
- c# - 如何从 C# 方法添加 Razor 标记?
- asp.net-web-api - 使用 Web API 时出现 CORS 错误。请建议我们是否需要启用任何东西
- xml - 根据映射条件合并 XML
- c# - 如何使用 Oracle 数据库的连接字符串启用 SSL?
- java - 我想用 round 得到值但没有得到正确的结果
- e - 我可以在一列中对值进行分组并在 emeditor 中汇总它们的总数吗?
- javascript - 当我按下制表键时如何使可竞争的 div 做制表符间距