網路城邦
上一篇 回創作列表 下一篇  字體:
多核心再度救了我!
2015/01/22 07:03:35瀏覽1497|回應2|推薦14

之前我寫過一篇多核心?你用得到嗎?大略介紹了我使用24核心伺服器電腦的經驗。最近又碰到一個問題,我想做即時的影像目標監控,但是需要的運算時間很長,一張完整影像的辨識時間鐵定會超過一秒鐘,如果有目標物快速通過監視器影像,我就會無法鎖定目標。我必須在0.10.2秒的時間內完成全套辨識,才能確定任何人或物體都無法「快閃」過我的監視。

如之前的文章讓你錄不到的隱形科技?我發明了一個很聰明的演算法可以計算出很乾淨的背景影像,只要將目前影像減去背景,目標物就可以浮現了!但是這個背景運算很耗時,算一次就要用掉快一秒了!雖然我可以每三五秒才算一次背景影像,因為它不會變化太快的!但是一開始做這種計算時,抓影像監看的動作就會暫停,此時目標就有機會閃過我的監視了!

經過幾天掙扎,忽然想到我的電腦雖然不是24核心,但也有八核心(所謂的I7)啊?如果將監看與計算分成多個執行緒,分別由不同CPU處理不就好了?即時影像都是連續的,處理程序雖然多,但是可以分散到多個CPU去跑,譬如:一號CPU負責擷取影像,二號CPU負責算背景,三號CPU負責算差異影像,四號CPU負責描輪廓…,我有八個CPU可以分擔冗長的辨識運算程序,應該就可以順利的在短時間內完成辨識,而不會漏掉目標了吧?

即知即行,下面是目前用四個執行緒(含主執行緒)的程式表現,真的好快!每秒抓十張影像,立即辨識輪廓幾乎可以做到同步!多核心電腦再度救了我!可以得到的反面教訓是:如果沒有軟體技術的配合,多核心電腦其實用處不大!程式師們,你們有常常思考這個問題嗎?或許一念之間你的遲緩程式們就可以像我的一樣飆速,嗆到抓不住了!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=20369551

 回應文章

matt22
等級:7
留言加入好友
Bravo!
2015/01/23 00:33
我沒注意,鄉下老師一年前就已經開始談進階(Advanced)程式了。平行處理或
Multithread程式的挑戰在於如何分享共用的資源,那位回應的李牧師想必是個中高手,連辨識癌細胞這種例子都舉出來了(不開玩笑,真有其事)。您的學生若真能學得您一身本事,在美國拿美金六位數的年薪是輕而易舉!
鄉下老師(yccsonar) 於 2015-01-23 03:44 回覆:

我因為要上一門線上遊戲設計的課,必須教TCP通訊,那時開始認真使用多執行緒程式。去年因為要做大流量的車牌辨識,非用不可!但是屬於橫向分工,這次算是辨識流程的縱向分工。

我現在確實每天下午都在給團隊(公司)成員上課,盡量教他們所有我會的東西。


陽明山
等級:8
留言加入好友
2015/01/22 07:58

你可以指定CPU 執行某程式嗎? 有這樣的軟體支援程式嗎? 

我想遊戲軟體就像你這樣需要用很多cpu.

鄉下老師(yccsonar) 於 2015-01-22 09:34 回覆:

我無法指定CPU,這是作業系統的權限,

應該也沒有這種軟體,有的話就是系統的安全漏洞了!

但可以指定部分程式為獨立執行緒,系統就會視為與主程式分開的獨立程序,

自動地將這些工作丟給閒置的CPU去處理。