我目前正在Debian Jessie上运行scipy。我从apt-get安装了scipy。我还从apt
安装了blas和lapacksudo apt-get install python-scipy libblas-dev libatlas-dev
然后我在我的机器上编译openblas并将其安装在默认路径中:/ opt / OpenBLAS /
我已经更新了替代品,一切似乎都很好:
sudo update-alternatives --list libblas.so.3
/opt/OpenBLAS/lib/libopenblas.so
sudo update-alternatives --config liblapack.so.3
Il existe 2 choix pour l'alternative liblapack.so.3 (qui fournit /usr/lib/liblapack.so.3).
Sélection Chemin Priorité État
------------------------------------------------------------
0 /usr/lib/lapack/liblapack.so.3 40 mode automatique
* 1 /usr/lib/lapack/liblapack.so.3 40 mode manuel
2 /usr/lib/liblapack.so 40 mode manuel
然而,当我用scipy计算点积时,似乎不使用Openblas,而如果我直接调用dgemm函数,它似乎很好。我使用以下代码:
import numpy as np
import scipy as sp
from scipy import linalg
import time
from scipy.linalg.blas import dsyrk,dsymm,dgemm
n = 1000
# Data generation
x = sp.random.rand(n,n)
x += x.T
x /= 2
# Dot product
ts=time.time()
xn = np.dot(x,x)
print 'numpy dot product ',time.time()-ts
ts=time.time()
xs = sp.dot(x,x)
print 'scipy dot product ',time.time()-ts
ts=time.time()
xss = dgemm(1.0,x,x)
print 'openblas dot product ',time.time()-ts
# eig
ts=time.time()
[E,v]=np.linalg.eigh(xss)
print 'numpy eig ',time.time()-ts
ts=time.time()
[E,v]=linalg.eigh(xss)
print 'scipy eig ',time.time()-ts
python test_openblas.py
numpy dot product 2.31659698486
scipy dot product 2.34038615227
openblas dot product 0.0457999706268
numpy eig 2.27925086021
scipy eig 0.384080886841
我的所有程序都使用sp.dot()而不是dgemm和sp.dot()在其他机器上运行良好(ubuntu或debian)。如果有人有一些输入/解决方案,那将是非常好的!还有任何帮助!