2

我目前正在 Debian Jessie 上运行 scipy。我已经从 apt-get 安装了 scipy。我还从 apt 安装了 blas 和 lapack

sudo 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 机器)上运行良好。如果有人有一些输入/解决方案,那就太好了!也有任何帮助!

4

0 回答 0