[英]Performance of scipy.weave.inline
我是一位Python新手,正在尝试学习一些有关这种出色的编程语言的知识。 我尝试使用scipy.weave.inline来加快一些计算。 只是为了学习一点,我尝试使用scipy.weave.inline实现矩阵乘法。 我没有包括任何错误处理-只是尝试以更好地理解它。 代码如下:
import scipy.weave
def cmatmul(A,B):
R = numpy.zeros((A.shape[0],B.shape[1]))
M = R.shape[0]
N = R.shape[1]
K = A.shape[1]
code = \
"""
for (int i=0; i<M; i++)
for (int j=0; j<N; j++)
for (int k=0; k<K; k++)
R(i,j) += A(i,k) * B(k,j);
"""
scipy.weave.inline(code, ['R','A','B','M','N','K'], \
type_converters=scipy.weave.converters.blitz, \
compiler='gcc')
return R
当我与numpy.dot进行比较时,我发现weave.inline版本花费的时间大约是numpy.dot的50倍。 我知道numpy可以应用时非常快。 对于大型矩阵(例如1000 x 1000),甚至可以看到这种差异。
我已经检查了numpy.dot和scipy.weave.inline,在计算时似乎都使用了一个核心100%。 Numpy.dot提供了10.0 GFlop,而我的笔记本电脑的理论值为11.6 GFlop(双精度)。 我以单精度测量了预期的双重性能。 但是scipy.weave.inline落后了。 scipy.weave.inline的性能的1/50倍。
这种差异是可以预期的吗? 或者我做错了什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.