我正在尝试为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 –