在我編寫的遊戲中,我使用了我編寫的2D矢量類來處理對象的速度。由於屏幕上有很多物體,所以每幀都會被稱爲大量的時間,所以我可以通過增加速度來增加它。什麼時候在C中重寫Python模塊?
這很簡單,主要由相關數學函數的包裝組成。在C中重寫會非常微不足道,但我不確定這樣做是否會產生顯着差異,因爲它實際上只是調用底層的數學函數,添加,乘法或除法。
所以,我的問題是在什麼情況下重寫C?你會在哪裏看到明顯的速度提升,以及如何在不重寫大量程序的情況下看到合理的速度提升?
在我編寫的遊戲中,我使用了我編寫的2D矢量類來處理對象的速度。由於屏幕上有很多物體,所以每幀都會被稱爲大量的時間,所以我可以通過增加速度來增加它。什麼時候在C中重寫Python模塊?
這很簡單,主要由相關數學函數的包裝組成。在C中重寫會非常微不足道,但我不確定這樣做是否會產生顯着差異,因爲它實際上只是調用底層的數學函數,添加,乘法或除法。
所以,我的問題是在什麼情況下重寫C?你會在哪裏看到明顯的速度提升,以及如何在不重寫大量程序的情況下看到合理的速度提升?
如果你是矢量改寫(munging),給numpy一試第一。如果明智地利用numpy的矢量操作函數,你可能會得到距離C不遠的速度。
除此之外,你的問題是非常啓發式的。如果你的代碼是太慢:
psyco
cython
第一小節然後優化
阿門。沒有基準的優化只是巫術。使用voodoo進行設計會導致軟件損壞。也就是說,發展一些關於在哪裏進行基準測試的直覺很重要,這就是這個問題所要求的。 –
是的 - 我認爲其他擁有更多個人經驗的人會用numpy,boost:python,cython等。我只是認爲我會將點擊回家 –
-1'如果你使用的機會是你距離C不遠numpy的矢量操作功能明智。 「不遠」實際上意味着:「不夠近,但有些令人滿意」。 –
一個很好的探查我在Linux上使用的是pycallgraph - 但是,你的程序變得更大,它開始創造更大的圖像這是很難追查。不過,我敢肯定你可以排除模塊。
常見的智慧是「簡介」,「措施」等等 - 也許。只需進入調試器並採取10 stackshots。如果它們中的不止一個在你的封裝代碼中終止,那麼它的成本大概是10%以上,所以你應該考慮在C中重新做它,以節省時間。有機會,你會發現其他的東西也更多的成本。
你不應該優化什麼,無論是在C或任何其他語言,沒有你們的優化後的時刻你的代碼和前:
常見的做法是:
如果你找不到熱點,這可能意味着你的應用已經被優化,或者你沒有使用好的算法來解決你的問題。在這兩種情況下,分析都有助於理解您的代碼的功能。
對於在Linux下分析python代碼,你可以使用pyprof2calltree,它與kcachegrind一起使用,而且非常棒。
這是...什麼? –
@多米尼克,編輯出來。謝謝 –