在我正在编写的游戏中,我使用了我编写的2D矢量类来处理对象的速度。由于屏幕上有很多物体,因此每帧都会调用很多次,因此我可以在速度上增加任何效果。
这很简单,主要由相关数学函数的包装器组成。在C中重写是非常简单的,但我不确定这样做是否会产生任何显着的差异,因为它实际上只是调用基础数学函数,加法,乘法或除法。
所以,我的问题是在什么情况下在C中重写是有意义的?你会在哪里看到显着的速度提升,你在哪里可以看到合理的速度提升而无需重写大量的程序?
答案 0 :(得分:14)
如果您正在进行矢量调整,请首先尝试numpy。如果你明智地使用numpy的矢量操作函数,你可能会在距离C不远的地方获得速度。
除此之外,你的问题非常具有启发性。如果你的代码太慢了:
psyco
cython
答案 1 :(得分:9)
首先测量然后优化
答案 2 :(得分:1)
在优化之后,如果没有在和之前计算代码,则不应使用C或任何其他语言优化任何内容:
常见的方法是:
如果找不到热点,可能意味着您的应用已经过优化,或者您没有针对您的问题使用好的算法。在这两种情况下,分析有助于理解代码的作用。
为了在Linux下分析python代码,你可以使用pyprof2calltree与kcachegrind一起使用,并且非常棒。
答案 3 :(得分:0)
我在Linux上使用的一个不错的Profiler是pycallgraph - 然而,随着程序变大,它开始创建更大的图像,这些图像更难以追踪。我很确定你可以排除模块。
答案 4 :(得分:0)
常识是“概况”,“衡量”等等。好吧 - 也许吧。只需进入调试器并获取10 stackshots。如果它们的包装代码中有多个终止,那么它的成本大致超过10%,因此您应该考虑在C中重新执行它,以节省时间。你可能会发现其他的东西也花费不止于此。