[問題] C++ 函式速度受到影響

看板C_and_CPP作者 (米提)時間13年前 (2012/06/27 15:40), 編輯推噓5(5012)
留言17則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) g++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) STL 問題(Question): 目前在實做一個剖析電路檔(Verilog), 之後利用演算法進行分割的程式。 整個程式已經完成了大部分,目前再進行優化的動作。 # 針對這個函式 因為讀的檔案,大的檔案約有27mb,約200w個token要處理。 然後建成我需要的資料結構,大都使用vector動態增加。 我實做好這部分的功能,姑且稱為readline函式。 獨立執行時,約30s可以parse完整個檔案並建好資料結構~ 但是當我將readline函式併入我整個project的其中一個流程時, 在readline之前有parse兩個檔案,也建了其他的資料結構,約1s完成。 跑到readline這部分的程式變得非常的慢,可能超過3000s還無法順利完成。 餵入的資料(Input): gate-level verilog,一個Circuit, 簡單的說,就是一個文字檔,類似C的另一種程式語言。 預期的正確結果(Expected Output): 結果正確,但是想知道為何合併後速度變得這麼慢。QQ 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 主程式 ---------------- 程式A 程式B 程式C 程式D 程式E 程式F ------------------------ 主程式------------------- readline程式 30s ------------------------- 單獨直接執行剖析電路檔30s。 加入主程式 主程式 ---------------- 程式A 0.5s 程式B 0.5s readline程式 3000s →同樣的程式碼,速度慢非常多。 程式C 程式D 程式E 程式F ------------------------ 補充說明(Supplement): 想知道問題出在哪裡? 目前想到的是可能大程式預先把記憶體都用完了, 另外問,該怎麼順利將之前AB執行後,用不到的記憶體從vector釋出。 我的vector要建成兩個表,表裡面儲存是一個類別。 一個表約40w個欄位,另一個約200w個欄位。 這個兩個表是我之後要做為演算法查表用的資料。 非常感謝~~~ 雖然有嘗試把類別改成類別指標存取,但是速度似乎提升的不夠顯著。 所以想了解個別執行與合併執行程式,主要會拖慢的原因是甚麼。 -- 生命是一場最美好的旅行。 http://ramihaha.pixnet.net/blog -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.16.167

06/27 15:49, , 1F
釋出記憶體一般是用swap 例如vector<T>(v).swap(v)
06/27 15:49, 1F

06/27 15:50, , 2F
至於變慢...確認一下前面的流程有沒有resource leak吧
06/27 15:50, 2F

06/27 15:51, , 3F
例如記憶體或file descriptor沒釋放之類的
06/27 15:51, 3F

06/27 16:45, , 4F

06/27 17:52, , 5F
奇怪,你是想剖析verilog 語法後,自己分析該語法layout出
06/27 17:52, 5F

06/27 17:52, , 6F
的 gate-level 嗎?
06/27 17:52, 6F

06/27 18:13, , 7F
我看懂你的問題了,略過上個問句.釋出記憶體另一個方式是
06/27 18:13, 7F

06/27 18:14, , 8F
用 new/delete 管理 vector<T>,但一般swap確實較常用。
06/27 18:14, 8F

06/27 18:15, , 9F
然後可以的話,Very Sleepy 摸一下怎用。
06/27 18:15, 9F

06/28 22:03, , 10F
是不是mem用完可以用top之類的查一下吧 這不要去猜
06/28 22:03, 10F

06/28 22:24, , 11F
疑!樓上 Arton~ 大說的 top 指的是套軟體嗎 ?
06/28 22:24, 11F

06/28 22:26, , 12F
linux 的工作管理員
06/28 22:26, 12F

06/28 22:27, , 13F
原來如此,感謝 p 大補刀。
06/28 22:27, 13F

06/29 17:58, , 14F
請問s大一下 為什麼用scope的方式跟vector<T>(v).swap(v)
06/29 17:58, 14F

06/29 17:59, , 15F
作用一樣呢?? 不太懂耶??
06/29 17:59, 15F

06/29 18:00, , 16F
http://ppt.cc/6KUl 從這看到的~
06/29 18:00, 16F

07/01 15:58, , 17F
非常感謝大家的回覆!^^
07/01 15:58, 17F
文章代碼(AID): #1FwhZihn (C_and_CPP)