我正在嘗試爲cython和numpy獲取FLOPS基準。爲此我寫了一個cython程序。這裏是:Cython性能基準
cimport numpy as np
import numpy as np
import time
cimport cython
@cython.boundscheck(False)
@cython.wraparound(False)
def numpybenchmark():
cdef np.ndarray[np.float64_t, ndim=2] m1 = np.random.rand(3,3)
cdef np.ndarray[np.float64_t, ndim=1] m2 = np.random.rand(3)
cdef np.ndarray[np.float64_t, ndim=1] res
cdef int niters = 10000000
cdef int x
t1 = time.time()
for x in range(niters):
res = np.dot(m1, m2)
t2 = time.time()
cdef double numopsperloop = 9. + 6.
cdef double totalops = numopsperloop * float(niters)
cdef double mflops = totalops/(t2-t1)/1024./1024.
print 'Computed MFLops is: ' + str(mflops)
在我的機器上我測量「計算MFLops是:7.42390102416」。我的機器具有Intel Core i7-6700HQ CPU @ 2.6 GHz並運行Windows 10.
如果要在機器上運行它,請將代碼保存在名爲「benchmark.pyx」的文件中。然後創建一個名爲「setup.py」與文件,內容如下:
from distutils.core import setup
from Cython.Build import cythonize
import numpy
setup(
ext_modules = cythonize("benchmark.pyx"),
include_dirs=[numpy.get_include()]
)
那麼你應該能夠「蟒蛇setup.py build_ext --inplace」進行編譯。在Windows中,遇到可怕的「無法找到vcvarsall.bat」錯誤並且不得不花費大量精力來解決這個問題時,它可能會更加困難。
這個表現對我來說似乎很差。我想知道是否有人可以在他們的平臺上運行它並告訴我你得到了什麼?或者指出我的代碼中對性能有不利影響的任何明顯錯誤?
謝謝!
這似乎是它會更適合codereview.stackexchange.com –