Cython cdef没有速度增加
我终于得到了cython的工作感谢这里的一些人在*,但现在有一个问题。从我不使用cdef到使用cdef时,速度确实没有增加。不要误解我的错误,当我使用cython编译python代码时,速度有了非常明显的提高,但是当我使用cdef时却没有这样做。Cython cdef没有速度增加
这是已减缓程序的其余部分的代码区:
def tupdate(self,surf):
cdef int x
cdef int y
for x in xrange(self.w):
for y in xrange(self.h):
if self.map[(x,y)].y <= 600 and self.map[(x,y)].y >= -50: self.map[(x,y)].FLAG = 1
else: self.map[(x,y)].FLAG = 0
self.map[(x,y)].y += self.speed
if self.map[(x,y)].FLAG:
self.map[(x,y)].rect = ((self.map[(x,y)].x,self.map[(x,y)].y),(50,25))
self.map[(x,y)].update()
self.map[(x,y)].render(surf)
此代码应该被越来越称为60次,但由于代码的速度,我的旧硬件每秒钟只能调用30次,我认为使用cdef来处理x和y等强烈使用的变量会有所帮助。但是在cdef之前和之后fps是一样的。
我对Windows 7的64位以32位的蟒蛇2.7
您指数self.map
11倍代码,具有相同索引。索引它一次,将引用复制到本地名称,然后使用该名称。
我可能是错的,但是也值得一提的是,在这种情况下键入x和y并不是特别有用,因为除了使用它们作为索引之外,没有什么比使用它们更好的了...我是对的吗? – jdi 2012-07-31 05:27:14
更糟糕的是,当它们放入索引操作的元组时,它们需要* detyped *。 – 2012-07-31 05:28:22
谢谢!只有这一点,我的速度有了很大的提高。但是,self.map是Block对象的字典。有没有什么办法可以让对象变成cdef? – 2012-07-31 05:28:46
我现在只是自己学习cython,但我的第一印象是,你可能会使用一些未优化的调用。只需输入x和y在这里可能不够用。 – jdi 2012-07-31 05:22:54
'x'和'y'不是被激烈使用的那些...... – 2012-07-31 05:23:02
那么哪些得到intenesly使用? x和y是循环的指数? – 2012-07-31 05:23:55