考虑这样的代码:
import numpy as np
cimport numpy as np
cdef inline inc(np.ndarray[np.int32_t] arr, int i):
arr[i]+= 1
def test1(np.ndarray[np.int32_t] arr):
cdef int i
for i in xrange(len(arr)):
inc(arr, i)
def test2(np.ndarray[np.int32_t] arr):
cdef int i
for i in xrange(len(arr)):
arr[i] += 1
Run Code Online (Sandbox Code Playgroud)
我使用ipython来测量test1和test2的速度:
In [7]: timeit ttt.test1(arr)
100 loops, best of 3: 6.13 ms per loop
In [8]: timeit ttt.test2(arr)
100000 loops, best of 3: 9.79 us per loop
Run Code Online (Sandbox Code Playgroud)
有没有办法优化test1?为什么不把cython内联这个函数告诉?
更新:其实我需要的是这样的多维代码:
# cython: infer_types=True
# cython: boundscheck=False
# cython: wraparound=False …Run Code Online (Sandbox Code Playgroud) 我想使用cython加速以下代码:
class A(object):
cdef fun(self):
return 3
class B(object):
cdef fun(self):
return 2
def test():
cdef int x, y, i, s = 0
a = [ [A(), B()], [B(), A()]]
for i in xrange(1000):
for x in xrange(2):
for y in xrange(2):
s += a[x][y].fun()
return s
Run Code Online (Sandbox Code Playgroud)
想到的唯一事情是这样的:
def test():
cdef int x, y, i, s = 0
types = [ [0, 1], [1, 0]]
data = [[...], [...]]
for i in xrange(1000):
for x in xrange(2):
for y in …Run Code Online (Sandbox Code Playgroud) 我正在尝试优化我的OpenCL内核,而我现在所拥有的只是NVidia Visual Profiler,它似乎相当受限制.我想看看内核的逐行配置文件,以便更好地理解合并等问题.是否有办法获得比Visual Profiler提供的更全面的分析数据?