在将ubuntu从12.04升级到14.04之后,为什么使用python的numpy的矩阵乘法变得如此缓慢?

我曾经有过Ubuntu 12.04,最近刚刚安装了Ubuntu 14.04.我正在研究的东西涉及大矩阵的乘法(~2000 X 2000),我正在使用numpy.我遇到的问题是,现在计算的时间要长10到15倍.

从Ubuntu 12.04到14.04意味着从Python 2.7.3到2.7.6以及从numpy 1.6.1到1.8.1.但是,我认为这个问题可能与numpy所链接的线性代数库有关.我只能找到libblas.so.3和liblapack.so.3,而不是libblas.so.3gf和liblapack.so.3gf.

我还安装了libopenblas和libatlas:

$sudo apt-get install libopenblas-base libatlas3-base

并尝试过它们,但减速并没有改变.所以,我的问题是:

>有没有“gf”的套餐有什么区别?
>这是否可能导致矩阵乘法减速?
>如果是这样,我怎样才能回到libblas.so.3gf和liblapack.so.3gf?它们似乎在Ubuntu 14.04中停止使用.

非常感谢!

解决方法

wim是正确的,因为问题可能是由于numpy链接到较慢的BLAS库(例如参考CBLAS库而不是ATLAS)引起的.

您可以通过在numpy的一个已编译的共享库上调用ldd实用程序来检查在运行时链接的BLAS库.

例如,如果您使用apt-get在标准位置安装numpy:

~$ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so
        ...
        libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f01f0188000)
        ...

这个输出告诉我numpy链接到/usr/lib/libblas.so.3.这通常是参考CBLAS库的符号链接,这很慢.

你可以像wim建议的那样删除通过apt-get安装的numpy版本并自己构建,使用pip或直接下载源代码.但是,我强烈建议您不要使用sudo pip install …在系统范围内安装python模块.这是一个不好习惯,因为你冒着在系统范围的Python环境中破坏依赖关系的风险.

使用pip install –user …安装到〜/ .local /目录中更安全,甚至更好,安装到完全独立的virtualenv中.

一个选择是使用update-alternatives强制您的系统范围numpy链接到不同的BLAS库.我写了一个previous answer here,展示了如何做到这一点.

相关文章

ubuntu退出redis的示例:指定配置文件方式启动源码redis:roo...
ubuntu中mysql改密码忘了的解决方法:1.在终端中切换到root权...
ubuntu安装mysql失败的解决方法原因:可能是原有的MySQL还有...
使用centos和ubuntu建站的区别有以下几点1.CentOS是Linux发行...
ubuntu图形界面和字符界面切换的方法:可以通过快捷键CTRL+A...
ubuntu中重启mysql失败的解决方法1.首先,在ubuntu命令行中,...