線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:8424
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

請問比對圖片想使用多執行緒的方式,但還是單線程問題

答題得分者是:aftcast
jcjroc
高階會員


發表:21
回覆:276
積分:114
註冊:2002-09-18

發送簡訊給我
#32 引用回覆 回覆 發表時間:2011-07-27 14:37:14 IP:211.23.xxx.xxx 訂閱
舒馬克,法拉利那些都是廢話............
給你那些API如果你夠仔細,網路上一堆範例與應用說明.......
只處理一份資料0.5秒跟5秒之差是會死喔!!!但如果一次要處理一萬份那真的會死..........
也就那麼零點幾秒.......所以客戶買你的產品!!!

記憶體映射有太多的應用價值.......徹底了解它百利無弊.............

給你個文章隨便看一看吧!!雖然應該沒幫助!!!
http://www.softhouse.com.cn/news/show/63183.html

===================引 用 macchen 文 章===================
好吧,感謝你的回覆,我沒有慧根,還是不了解,但畢竟我是發問問題的人,本來就該虛心指教,並且不是每個人都願意教導別人的,謝謝大家。
===================引 用 jcjroc 文 章===================
舒馬克當然是車神...........極速90是因為給他的車是台20幾年前的裕隆速利1200
法拉利當然是超級跑車...........問題是我不知道要換檔......................

以上的共通點是......裕隆速利是我給舒馬克的................法拉利是我開的..........
結論是不管法拉利或是舒馬克都很爛............而我是最好的............

程式跑不快...........是硬體還是軟體關係?????阿災............反正這時候我是路人甲買醬油路過的.......

題外話........如果你的題目是我做的話,依需求,對我來說會趨近線性沒錯.

aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#33 引用回覆 回覆 發表時間:2011-07-27 15:05:16 IP:210.64.xxx.xxx 訂閱
To Macchen:

昨天我和一位朋友問了一下你的問題,他剛好做的工作與你接近,他是六核拆成四條thread,使用TBitmap來比對,速度比一條快不少。感覺上會不會是你的演算法上有一些問題 ? 是否詳細的看一下你拆解的部份。

此外,那位友人沒使用「指定哪個核心」,他讓os自己去分配,理論上他看到的是每條thread自然的就會在不同的core上跑。你也可試著不指定看看…

至於是否使用bitmap的檔案的結構來比較…建議是等你多核分配有達成效能提昇後,再進一步考慮改寫比對方式。以我朋友的數據來說,他一thread跑 0.7 四thread 則跑 0.25秒…這種倍數的成長應該才是比較明顯的。

關於MapViewOfFile,多數是用在記憶共享; 但特大檔案,比如幾g的檔,也要分段讀入記憶體中,而這與一般讀檔最大的不同是他並非需要一次讀到檔結束。但事實上他也是需要分段讀入 (假使一整個檔最終都需要被讀入)。整體上來說會不會比較快? 只能說以使用者的角度來說,極大檔若使用一般的讀檔方式,會產生類似死當…使用者是不能接受的,另外,若你的ram不是很大那也是會造成hd在swap,也是會慢。然而…若你的檔案只是幾mb,連個50m都不到,一次讀入後應該是速度比較快,比MapViewOfFile快! 我個人認為,不是所有的時刻都來使用這個api,而是在適當的時候該用就要用。file-mapping object 是屬於kernel object,事實上較耗資源。就好像mutex比criticalsection要慢的道理有點一樣。以上這是我的觀點!僅供參考!

===================引 用 macchen 文 章===================
好吧,感謝你的回覆,我沒有慧根,還是不了解,但畢竟我是發問問題的人,本來就該虛心指教,並且不是每個人都願意教導別人的,謝謝大家。

------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#34 引用回覆 回覆 發表時間:2011-07-27 16:03:26 IP:219.87.xxx.xxx 訂閱
嗯嗯,謝謝回覆,我會再找找資料看看,先清楚觀念再來想問題,謝謝。
===================引 用 jcjroc 文 章===================
舒馬克,法拉利那些都是廢話............
給你那些API如果你夠仔細,網路上一堆範例與應用說明.......
只處理一份資料0.5秒跟5秒之差是會死喔!!!但如果一次要處理一萬份那真的會死..........
也就那麼零點幾秒.......所以客戶買你的產品!!!

記憶體映射有太多的應用價值.......徹底了解它百利無弊.............

給你個文章隨便看一看吧!!雖然應該沒幫助!!!
http://www.softhouse.com.cn/news/show/63183.html
------
DELPHI初學者
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#35 引用回覆 回覆 發表時間:2011-07-27 16:14:53 IP:219.87.xxx.xxx 訂閱
非常感謝aftcast的回覆,我切thread的部份與比對的部份程式碼都有貼上了,我不知這樣說會不會很麻煩,因為code的部份我可能也不知能改什麼地方,只能先從各位指導小弟的部份先看看,有沒有什麼地方可以調整,目前也不確定到底切成多個thread來跑會不會比用memorystream的方式來的快了,只能說先試試,畢竟小弟對這個還真的不是很熟悉,感謝各位願意花時間幫小弟。
===================引 用 aftcast 文 章===================
To Macchen:

昨天我和一位朋友問了一下你的問題,他剛好做的工作與你接近,他是六核拆成四條thread,使用TBitmap來比對,速度比一條快不少。感覺上會不會是你的演算法上有一些問題 ? 是否詳細的看一下你拆解的部份。
我覺的問題目前看來應該先不管演算法的部份,因為理論上我用多核(指的是cpu應該是要用到100%才對)處理應該會比單核(只跑50%)來說應該會有改善,但是好像時間卻變長了,這才是我覺的有問題的地方,我的做法將是圖片切法是依據幾個thread來切成幾份,這個部份我有試過就是開thread但是都是使用單核,比直接用mainthread來跑也要加個幾秒,這個部份我也覺的很奇怪?只是將程式的部份移到new出來的thread卻變慢了?

此外,那位友人沒使用「指定哪個核心」,他讓os自己去分配,理論上他看到的是每條thread自然的就會在不同的core上跑。你也可試著不指定看看…
嗯,這個我也試過了,問過寫vc的人,他們也沒有指定,就會跑到100%(多核也都是100%)。

至於是否使用bitmap的檔案的結構來比較…建議是等你多核分配有達成效能提昇後,再進一步考慮改寫比對方式。以我朋友的數據來說,他一thread跑 0.7 四thread 則跑 0.25秒…這種倍數的成長應該才是比較明顯的。
理論上我用mainthread只有單核效率100%,所以才想切成多核(因為寫vc的同事切成多核跑圖效果有明顯改善),但是有請同事看過,他覺的演算法的部份應該沒錯,只是為什麼時間會變的比較久,他不了解delphi也說不出個所以然來。

恕刪,謝謝。
------
DELPHI初學者
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#36 引用回覆 回覆 發表時間:2011-08-01 10:39:43 IP:219.87.xxx.xxx 訂閱
感謝各位的回覆,小弟會再將一些觀念補齊,然後再來想想這個問題,各位大大給的建議都讓小弟感受很多,謝謝各位的指導。
------
DELPHI初學者
[<<] [1] [2] [>>]
系統時間:2017-10-23 17:55:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!