Kar*_*Man 3 macos numpy blas accelerate-framework
我尝试在MATLAB和NumPy上分析EIG功能,以比较我的Macbook Pro(2 GHz,运行OS X 10.6的Quad core i7)的性能.与MATLAB相比,NumPy EIG似乎相当慢.
这是我在NumPy上描述的代码:
s = '''\
x = numpy.random.random((2000,2000));
numpy.linalg.eig(x);
'''
t = timeit.Timer(stmt=s,setup="import numpy")
result = t.repeat(repeat=5,number=10)
result
Out[22]:
[197.1737039089203,
197.34872913360596,
196.8160741329193,
197.94081807136536,
194.5740351676941]
Run Code Online (Sandbox Code Playgroud)
在NumPy中大约是19.5秒/执行.
这是MATLAB中的相同代码:
clear all
tic;
for i = 1:50
x = rand(2000,2000);
eig(x);
end
toc;
Elapsed time is 267.976645 seconds.
Run Code Online (Sandbox Code Playgroud)
在MATLAB 上大约是5.36秒/执行.
我想这个简单的东西不应该在很大程度上取决于JIT的性能,所以它可能归结为BLAS和访问BLAS库的例程.我知道MATLAB在Mac上使用Accelerate Framework.
NumPy似乎也在我的Macbook Pro上使用Accelerate Framework BLAS; 这是输出numpy.show_config()
numpy.show_config()
lapack_opt_info:
extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
extra_compile_args = ['-msse3']
define_macros = [('NO_ATLAS_INFO', 3)]
blas_opt_info:
extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
extra_compile_args = ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers']
define_macros = [('NO_ATLAS_INFO', 3)]
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.7.2和NumPy 1.6(都是从MacPorts安装的)
所以这是我对NumPy人的问题:为什么NumPy在这种情况下会变慢?安装NumPy时是否遗漏了一些优化?
小智 5
据我所知,MATLAB使用MKL库作为BLAS,而不是Accelerate Framework.我的经验告诉我,Accelerate明显慢于MKL.要检查它,您可以尝试获取Enthought Python Distribution(EPD)的学术版本,其中Numpy是针对MKL编译的,并比较这些时间.此外,默认情况下,MATLAB使用所有线程(尝试在单线程模式下运行),但Numpy不是.在EPD中,它可以通过运行来完成
import mkl
mkl.set_num_threads(4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |