我曾经有过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,展示了如何做到这一点.