Re: [問題] Thread效能的疑惑

看板C_and_CPP (C/C++)作者 (執著)時間16年前 (2010/02/04 11:22), 編輯推噓1(1016)
留言17則, 4人參與, 最新討論串3/3 (看更多)
: → lungswu:這是不是3個thrad? main, t1, t2 02/04 10:44 : → zxvc:樓上是的,但我的main只作等待t1、t2,不作計算。 02/04 10:46 : → tomnelson:其實你用pthread win32也沒用, 因為它是base on win32的 02/04 11:07 : → tomnelson:POSIX thread 模擬, 底層一樣是Win32系統的thread, 所以 02/04 11:08 : → tomnelson:你的問題在於如何將程式工作平均地分配給n個thread, 或 02/04 11:09 : → tomnelson:許n根本不用大於1, 這麼說你懂嗎? 02/04 11:11 : → tomnelson:另外, thread本身是會有額外開銷的(CPU & memory), 所以 02/04 11:12 : → tomnelson:不會有分成n個thread後, 執行效率達原來n倍這種數據出現 02/04 11:14 其實我有注意工作分配的問題,我盡量去model 2 processes的情況。 又因為我模擬資料應該沒有相依性(但有用rand()), 照理來講應該可以很完美的一刀兩段。 目前還不知道確切的問題在哪。但我有用Win32 Sleep去model我主要運算的時間: 2 threads:1.38333 (min.) 1 thread:2.78333 (min.) 看來問題出在主要運算。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.4.129

02/04 11:38, , 1F
你 main 怎麼等待 t1/t2 completion?
02/04 11:38, 1F

02/04 11:39, , 2F
用 wait for single/multiple object(s)?
02/04 11:39, 2F

02/04 11:40, , 3F
main用join等待t1, t2。
02/04 11:40, 3F

02/04 11:43, , 4F
我現在自己profiling的結果,主要瓶頸不是rand()。
02/04 11:43, 4F

02/04 11:43, , 5F
主要瓶頸是一個depth first search的函式。
02/04 11:43, 5F

02/04 11:45, , 6F
如果我把它註解掉,不管1 or 2 threads,都秒殺結束。
02/04 11:45, 6F

02/04 11:46, , 7F
該depth first search是用遞迴寫的。
02/04 11:46, 7F

02/04 11:59, , 8F
有人想看看我的程式碼,部分程式碼在這:
02/04 11:59, 8F

02/04 12:00, , 9F

02/04 12:01, , 10F
抱歉,我無法公佈所有的程式碼。
02/04 12:01, 10F

02/04 12:02, , 11F
瓶頸出在這一行: Dfsd.DepthFirstSearch(M);
02/04 12:02, 11F

02/04 17:49, , 12F
找不到傳給他的 M 在哪邊產生?
02/04 17:49, 12F

02/04 21:36, , 13F
對不起,我沒提供所有程式碼。那個M是個常數,例如4。
02/04 21:36, 13F

02/05 21:24, , 14F
個人在跑DSP也是碰到multi thread會反而變慢的問題
02/05 21:24, 14F

02/05 21:25, , 15F
因為是純軟體複雜運算 其實時間兩倍 也是預期中 @@
02/05 21:25, 15F

02/06 14:48, , 16F
但我的狀況是2 processes執行就很快,令我困惑2 threads慢在
02/06 14:48, 16F

02/06 14:48, , 17F
哪?
02/06 14:48, 17F
文章代碼(AID): #1BQZsCJC (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
文章代碼(AID): #1BQZsCJC (C_and_CPP)