[英]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.