[問題] multithread 程式中存取 STL 容器效能低

看板C_and_CPP作者 (賈修)時間11年前 (2013/08/07 10:28), 編輯推噓3(308)
留言11則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) DEV C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) Pthread 問題(Question): 原本想用thread加快程式的處理速度,不過實際寫出來效能還比原本慢很多 (資料都互相獨立) 給老師看過後,老師說可能是因為標準的C++的STL中會有non Thread safe的 問題,導致每條thread在存取STL資料時,其他條的thread中的STL資料都會被 Lock住,這樣所有的thread就因為等待時間而被慢,老師建議是改用Intel 的 TBB Library改寫 想請問有經驗的大家,STL真的會讓multithread的程式變慢嗎,其原因為何? 有用到的STL為vector , map , queue , string等 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.250.43 ※ 編輯: chengtony 來自: 140.113.250.43 (08/07 10:30)

08/07 10:36, , 1F
是有可能,但我比較傾向你用的compiler/STL版本太舊了
08/07 10:36, 1F

08/07 10:50, , 2F
DEV C++ 用的是MinGW GCC 4.7.2版
08/07 10:50, 2F

08/07 12:00, , 3F
MinGW thread 效能很差 而且 STL 應該不是 thread-safe
08/07 12:00, 3F

08/07 12:41, , 4F
你有用profile 分析嗎?
08/07 12:41, 4F

08/07 12:55, , 5F
自己用time的函式分析時間~
08/07 12:55, 5F

08/07 20:50, , 6F
就是因為要 Thread-safe 才要 lock 阿....
08/07 20:50, 6F

08/07 23:25, , 7F
STL 不是thread safe 另外你能確定效能問題是thread的問題?
08/07 23:25, 7F

08/07 23:28, , 8F
要自己量過才知道
08/07 23:28, 8F

08/07 23:42, , 9F
用多條thread比單一來的慢且開越多條越明顯
08/07 23:42, 9F

08/08 14:11, , 10F
建議可以貼一下測試碼 或5f所說分析一下
08/08 14:11, 10F

08/08 14:12, , 11F
慢在哪裡
08/08 14:12, 11F
文章代碼(AID): #1I0R3U0Q (C_and_CPP)