一怒之下去看 python 的 source code, 發現他的程式碼寫得真好, 清楚易懂. 不過這不是重點 XD 重點是, python 的實作方式, 其實在 memory 上的 overhead 真的很大. 由於我的程式不是 CPU bound, 而是 memory I/O bound, 所以在 memory 方面的 overhead 影響我程式的效率就很大.
舉個例來說, Python 沒辦法開啟指定大小的 array, 你一定要一個一個元素新增! 當然, 還是有一些辦法可以新增. 例如
x= [0] * 7656不過當指定的數字很大時, 這個記憶體的用量還是很驚人, 而我的數字大小是 4G...., 這個時候 python 本身在 memory 管理方面的能力, 反而會拖垮整個程式的速度....
另外, 由於 python 的哲學偏向產生新物件, 所以他的 string 是不可更改的, 當我的 string 很大時, 就變得很麻煩. 如果我要對一個 3 G 的字串做 shuffle, 就很難在不消耗太多記憶體的狀況下做到.
到最後我還是用 C/C++ 寫了..... 或許日後再用 ctypes 包起來吧.
沒有留言:
張貼留言