[英]When Does It Make Sense To Rewrite A Python Module in C?
在我正在編寫的游戲中,我使用了我編寫的2D矢量類來處理對象的速度。 由於屏幕上有很多物體,因此每幀都會調用很多次,因此我可以在速度上增加任何增量。
它非常簡單,主要由相關數學函數的包裝器組成。 在C中重寫是非常簡單的,但是我不確定這樣做是否會產生任何顯着的差異,因為它實際上只是調用基礎數學函數,加法,乘法或除法。
所以,我的問題是在什么情況下在C中重寫是有意義的? 你會在哪里看到顯着的速度提升,在哪里可以看到合理的速度提升而無需重寫大量的程序?
如果你是矢量調整,首先嘗試numpy 。 如果你明智地使用numpy的矢量操作函數,你可能會在離C不遠的地方獲得速度。
除此之外,你的問題非常具有啟發性。 如果您的代碼太慢:
psyco
cython
重寫部分 先測量然后優化
在優化之前和之后,如果沒有對代碼進行計時,則不應使用C語言或任何其他語言優化任何內容:
常見的方法是:
如果您找不到熱點,則可能意味着您的應用已經過優化,或者您沒有針對您的問題使用好的算法。 在這兩種情況下,分析有助於理解代碼的作用。
對於Linux下的剖析Python代碼,你可以使用pyprof2calltree其連同工作kcachegrind ,並且是完全真棒。
我在Linux上使用的一個很好的Profiler是pycallgraph - 但是,隨着程序變大,它開始創建更大的圖像,這些圖像更難以追蹤。 不過,我很確定你可以排除模塊。
常識是“概況”,“衡量”等。嗯 - 也許。 只需進入調試器並拍攝10張照片 。 如果它們的包裝代碼中有多個終止,那么它的成本大致超過10%,因此您應該考慮在C中重新執行它,以節省時間。 你可能會發現其他東西也花費不止於此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.