看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) windows 10, visual studio 2013 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) google v8 問題(Question): 一樣的邏輯搬到thread去, 計時後發現反而更慢, 難道open thread的cost比我的邏輯 還重嗎? 有沒有人知道其中的原理. 程式碼(Code):(請善用置底文網頁, 記得排版) 主要功能是 (readfile→compile→run)*4, 然後計時此round花了多久時間. 但NonThread跑1000個round平均≒0.000812/s 使用Thread跑1000個round平均≒0.004850/s 我並非計時thread裡面的時間, 而是計時open thread的時間, 這樣還差了6倍 很怪~ http://imgur.com/l7jNKWJ http://imgur.com/9jnAS1o -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.174.211.173 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1458665443.A.396.html
Caesar08: 1.計時的部分,有個東西叫做chrono 03/23 09:13
Caesar08: 2.你的key能保證在EnterCriticalSection時,每個都不同 03/23 09:13
Caesar08: 嗎?如果不行,你沒辦法最大化效能 03/23 09:14
Caesar08: 3.你的thread沒做join,程式居然沒崩潰 03/23 09:14
Caesar08: 4.在你這情況,你用async會比你用thread好 03/23 09:15
Caesar08: 5.construct一個thread的成本的確很高,如果你要最大化 03/23 09:15
Caesar08: 效能,考慮使用threadpool 03/23 09:15
Caesar08: 6.我的拙作 https://github.com/Fdhvdu/ThreadPool 03/23 09:16
TeaEEE: 我猜是readfile這卡住你的thread效益 03/23 10:04
LiloHuang: VC++ 的 std::async() 底層已經有用 thread pool 03/23 12:10
LiloHuang: 如果沒記錯,也僅只於 VC++ 的實作有如此完善 :) 03/23 12:11
LiloHuang: 如果是我會直接用 Intel TBB library 發 tbb::task 03/23 12:11
LiloHuang: 或用微軟的 PPL 發 task 來做 task-based parallelism 03/23 12:12
LiloHuang: 稍微看了一下你的程式碼,還有 lock contention 的問題 03/23 12:16
LiloHuang: 除了 Caesar08 提到的得 join 之外,你得想辦法移掉 03/23 12:17
LiloHuang: 那個 critical secton,例如使用 thread local storage 03/23 12:18
LiloHuang: 如果上面都做了還是慢,裝一下 Intel VTune 分析一下 03/23 12:21
LiloHuang: fix typo : section 03/23 12:23
a2975313: critical section和mutex是實作lock的方式 03/23 13:58
a2975313: 如果使用join那就必須等到thread裡面執行完才能接下去跑 03/23 14:00
a2975313: 只是沒想到open thread比thread裡面做的事情還花時間 03/23 14:03