RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 


 
主題: [求助] [已解決][問題]雙核心轉檔時其他軟體會lag嗎?   字型大小:||| 
  ☆★☆★ TWed2k 向你推薦這篇文章 ★☆★☆  
crazydark
金驢友〔初級〕
等級: 16等級: 16等級: 16等級: 16
貧窮金太郎

 . 積分: 1852
 . 精華: 2
 . 文章: 2767
 . 收花: 16315 支
 . 送花: 11203 支
 . 比例: 0.69
 . 在線: 2949 小時
 . 瀏覽: 49480 頁
 . 註冊: 7244
 . 失蹤: 1
 . Taiwan
#1 : 2007-2-28 10:47 PM     全部回覆 引言回覆


引用:
badcat寫到:
而 Linux 或 Unix 利害的地方就在將多個 CPU 在作業系統中仍當「『一個』極強的『虛擬』 CPU」(請注意,我強調的是一個!),CPU 的資源統籌分配就交給 Linux 或 Unix 作業系統去模擬及調控。(若說明不對,還請 Linux 或 Unix 高高手指正!)
Linux 或 Unix 底下的軟體只看見「一個極強的虛擬 CPU」,至於怎麼分配,是作業系統的問題,所以軟體「根本」不需考慮「多核心的最佳化程式碼」,只要 CPU 數量一多,程式自然會提升效能。(程式根本不知道有「多個 CPU」的事情!)
這樣「軟體」階層就能避開 Windows 作業系統中「軟體」對「單/雙/多核心」程式碼「最佳化」的問題,「軟體」不需特意為「多核心程式碼的最佳化會影響執行效能」去改寫程式而傷腦筋,畢竟那是 Linux 或 Unix 作業系統階層的問題。
「2顆/2=1 虛擬」跟「512顆/512=1 虛擬」,在 Linix 或 Unix 中對程式而言,都是當成一顆「虛擬」CPU,但效能在 Linix 或 Unix 中就會差很多,但 Linux 或 Unix「程式軟體」階層是不必重寫的。(是作業系統在傷腦筋嘛!)


我對本文存疑
理由如下:

多核心程式的問題是
你怎樣將你要做的工作與要處理的資料拆成多個部份
並交給不同的核心去做
麻煩就在於大部份的工作都很難拆成非常獨立的兩個部份
且一段工作的產出往往是另一段工作的待處理資料
因此在工作分配與資料的切割/共享上就會是一個很大的問題
工作loading分配不均....一核忙碌多核閒也不行
資料切割不佳....不停的在核心間傳送資料....效率不彰徒然浪廢I/O時間
這些問題是與你的程式要做的事息息相關(Job dependent)
連人腦都不容易搞好
所以我認為OS並沒有這麼神可以幫你做這些事

面對千百萬種的程式
如何拆解成多個工作....怎麼拆....拆開的工作間原來沒有的協調機制怎麼加
都是問題啊
如果你不能先把你的程式設計成可以讓多核協同工作
我想OS再強應該也很難將你的工作拆開並同時派遣給不同的核心一起處理

[crazydark 在  2007-2-28 10:52 PM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
crazydark
金驢友〔初級〕
等級: 16等級: 16等級: 16等級: 16
貧窮金太郎

 . 積分: 1852
 . 精華: 2
 . 文章: 2767
 . 收花: 16315 支
 . 送花: 11203 支
 . 比例: 0.69
 . 在線: 2949 小時
 . 瀏覽: 49480 頁
 . 註冊: 7244
 . 失蹤: 1
 . Taiwan
#2 : 2007-2-28 11:42 PM     全部回覆 引言回覆

版主 mocaca0918 : 於本帖中與其他會員有良好互動,且技術交流層面高,故予以加分鼓勵

評分:+5   
回到樓主的問題上
"winavi下去轉mpeg成xvid格式,不過每次轉檔時有時都還會做其
他動作。例如:燒dvd,玩模擬器(Kawaks,mame32,pSX emulator..等),
看網頁,聽音樂,看xvid格式的動畫,玩玩H-GAME之類的"
我看起來樓主的作業上除了燒DVD外
大部份都是吃CPU或是一般工作的工作居多

轉檔是很吃運算效能的....
特別是使用越新的codec

而樓主如果是轉電視卡錄下的內容的話
轉檔的瓶頸絕對不會在硬碟的IO上
舉個例子好了
Deep blue這個HD的影片
沒記錯的話流量約在20Mbps上下
這在現今的視訊裡已是非常高水準的數字
然而20Mbits/sec = 2.5Mbytes/sec
現在的硬碟傳輸量早已遠大於這個數字
即使讓你20Mbps進20Mbps出好了
進出硬碟的資料吞吐量也不過5Mbytes/sec
更別提一般電視卡抓下來的低流量影片
除非是用raw picture去做壓縮
不然硬碟速度決不是問題

那加RAM有沒有效
如果你現在的記憶體使用率不到高水平甚至超過實體記憶體
那麼加RAM對你的效能幫助可能幾近於零
其實視訊壓縮對記憶體的依賴度也不高
以MPEG-1, MPEG-2, MPEG-4 part 2來說
在壓縮時大概會需要三張的空間
以2048x1024....YCbCr取樣為4:2:0來說
所需的frame buffer大概為2048x1024x1.5x3 = 9 Mbytes
對現今以512MB起跳的記憶體來說簡直是九牛一毛啊
就算再加一堆運算時需暫存的變數
我想離被稱為吃RAM的怪物應該還有一段距離才是

我認為樓主的問題是在運算上不夠力
所以如果樓主希望能在轉檔時也能讓其它工作的反應時間很短的話
換成更快的或是雙核的CPU對你一定會有幫助的
不管是轉檔時間或是其它程式的反應時間....
一定都會有所增進



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
crazydark
金驢友〔初級〕
等級: 16等級: 16等級: 16等級: 16
貧窮金太郎

 . 積分: 1852
 . 精華: 2
 . 文章: 2767
 . 收花: 16315 支
 . 送花: 11203 支
 . 比例: 0.69
 . 在線: 2949 小時
 . 瀏覽: 49480 頁
 . 註冊: 7244
 . 失蹤: 1
 . Taiwan
#3 : 2007-3-1 02:08 AM     全部回覆 引言回覆


引用:
badcat寫到:
嗯!存疑是好事!不知道的事,小弟也不敢講死!

的確,Linux 或 Unix 如何協調多核 CPU 及多工之間的關係,不是小弟「小小的腦袋」可以理解的,就我所知的說明也不敢保證一定準確,說不定也有如 crazydark 兄所說的問題存在。
一個是為了解決跨平台及多核心資源分配而犧牲了部份效能!
一個是為了效能而犧牲了跨平台。

小弟所說的是為了能解決:每增加新的 CPU 架構,就要考慮重寫一次新的程式的困擾! (程式設計師的因擾。)

個人認為多核 CPU 這個相關硬體的部份,應該交由「作業系統」階層來應付,而不要由「程式軟體」階層的程式設計師來處理。
第一. 太直接處理硬體 (缺乏彈性,硬體一變就要改程式)
第二. 不是每個程式設計師都能遵循多核心的最佳化標準來設計,很可能各自為政!
最後就是一堆 CPU 最佳化程式把多核心的 CPU 資源搞的一團糟!

所以小弟認為此問題最好能在硬體就解決,譬如內建多核心的晶片,到外部匯流排時,作業系統看到的就認為是一個 CPU 核心而已。(不過易缺乏彈性,比如說有很多個「多核晶片」串連 * n個時怎麼辦?)

所以從「作業系統」層面來解決,至少減少「軟體程式」層面要解決 CPU 硬體的問題,那程式在面對單/雙/多核時,都不用改寫程式,才不會每新增新的 CPU 硬體變動,「每套」軟體的最佳化都要改寫,才會有明顯效能改進的窘境。(這是理想啦!請別罵我啦!嗚!嗚!...)

P.S. 好像離題了?對不起!對不起!...



OK....我們把事情分成兩部份講
1.現有程式在面對單/雙/多核時,要不要改寫程式
2.已支援多核程式面對不同的硬體架構的最佳化

1."現有程式在面對單/雙/多核時,要不要改寫程式"
現有的程式多為對應單核所撰寫的程式
先不說在多核這種跨不同執行實體間的溝通機制付之闕如
甚至連程式可不可以將工作拆解成二或多個部份都不知道
雙核或多核之所以難寫
是因為事前的分析規畫一但沒搞好
不要說1+1等於2或是1+1等於1.x
慘烈一點的還會把1+1搞到小於1呢
如果說用工具對程式碼分析改寫我還不敢講
不過如果交給OS來做並主動為這些單核程式新增這些機制
第一是OS面對的是已編譯完的程式....而非原始程式碼....分析難度高
第二是要在runtime時分析....不能花太多時間....
在這樣的條件下
我認為要叫OS來讓現有對應單核的程式在雙/多核CPU上使用到雙/多核
是幾近不可能任務

2."已支援多核程式面對不同的硬體架構的最佳化"
新的CPU硬體變動....程式不用改寫
只要不要整個指令集換掉....這個OK....
那新的CPU硬體變動....程式要不要為了最佳化而改寫

我以Intel的core 2 duo跟AMD的Athlon64x2來做個很粗淺的例子好了
因為Athlon64x2每次一傳資料
  a.Core2跟Core1要資料
  b.Core1從Core1的cache取值
  c.Core1傳給Core2
  d.Core2寫一份到Core2的cache中並工作
而在core 2 duo中
因為L2共用的關係
只要資料在L2中
Core2就可以直接取用
而Core1也不必多花時間把資料傳到Core2

也因此兩者在資料分派交換的規畫上就會不相同
一樣是雙核心
但我在做最佳化分析時
我可能會讓資料在Athlon64x2的核心間交換次數少於core 2 duo
而這就會影響多核程式的寫法
如果應要不管放任大量的資料交換在Athlon64x2雙核間發生的話
程式一定還是可以跑
但是跑起來可能會比把設計成簡少資料交換的程式來得慢

那麼老問題來了
面對不同規劃所設計出來的程式
如何分析並重組成針對另一架構最佳化的設計
用人腦面對高階程式語言都要花上一些時日了
如何奢望這件事能從OS端解決?

3.
如果我對badcat的說法認知沒錯的話
badcat的理想固然是所有程式設計師夢寐以求的境界(啊....寫OS的人除外....^_^....)
然而可惜的是實行上
個人淺見認為困難重重..幾近不可能....



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
crazydark
金驢友〔初級〕
等級: 16等級: 16等級: 16等級: 16
貧窮金太郎

 . 積分: 1852
 . 精華: 2
 . 文章: 2767
 . 收花: 16315 支
 . 送花: 11203 支
 . 比例: 0.69
 . 在線: 2949 小時
 . 瀏覽: 49480 頁
 . 註冊: 7244
 . 失蹤: 1
 . Taiwan
#4 : 2007-3-12 08:16 PM     全部回覆 引言回覆


引用:
killer00寫到:
crazydark、badcat 兩位講的其實都沒問題,只不過是站在不同角度看這件事情罷了。

Linux、Unix系統被設計成能善用多CPU架構,所以該煩惱的就是OS設計師,但一般程式要在這些OS上工作除了符合規範外,的確不需要考慮CPU使用的問題,因為這一切交給OS幫忙管理,這原本就是OS的工作,這也就是badcat的論點。


將多個工作排到多個CPU上的確是OS份內的事,不過要他將一個工作同時排上兩個以上的核心工作的話,我想是一定要改寫你的程式以支援雙/多核工作的。


引用:
badcat寫到:
所以從「作業系統」層面來解決,至少減少「軟體程式」層面要解決 CPU 硬體的問題,那程式在面對單/雙/多核時,都不用改寫程式,才不會每新增新的 CPU 硬體變動,「每套」軟體的最佳化都要改寫,才會有明顯效能改進的窘境。


其實前文主要還是針對batcat兄所提的上面這段話提出我的看法,如果只是要能動,那當然不用改寫,但如果在雙/多核上要說最佳化,我認為勢必得善用雙/多核心;而如果要善用雙/多核心,就一定要改寫程式。

我在37樓的文章就是
1.
我認為要善用雙/多核心,一定要改寫程式,不大可能透過OS的支援就讓你的程式可以善用雙核心。

2.
要最佳化,無可避免一定要面對不同硬體架構做不同軟體架構改變的問題,而且也不是OS可以幫你處理的。x86上麻煩的地方是core 2 duo跟Athlon64x2雙核需要的最佳化方式有點不一樣,一般寫x86的,通常要嘛取折衷,要嘛就西瓜餵大邊。

真要不用改寫
就看看傳聞中那個"Reverse Hyper-Threading"有沒有辦法真的實作並滿足大家的想像囉


引用:
killer00寫到:
雙核心的問題在於工作的分派問題無法解決,但前面的人有的以為資料就像是水,CPU是尺寸固定的水管,核心越多,代表資料流過的越多,即使單個程序也可以用這樣的推論去跑,但其實完全不對。

單一程序無法被兩個核心同時運作(頂多是輪流分派),這點是絕對無庸置疑。

要知道CPU運作的方式是將程序從記憶體載入至CPU中開始運算,但如果把這個程序的資料分成兩邊做運算會有什麼下場?比如:t=2x*3y,ans=t/2,這樣一組運算式要被雙核心運算,可能拆成兩個部分算嗎?(t=2x*3給core A,ans=t/2給core B),不可能,對OS而言他是無法分辨這是數學運算式還是其它資料,他只會依照它的演算法去判斷這筆資料是否有關聯,沒有關聯性的才讓他被兩顆核心同時運作,但有關聯性的仍是單科核心運作,至於為何轉檔時可以看到兩顆核心都在運作,要知道CPU本身能存放的資料原本就不多,當然依照OS的演算法去推測,他可以先找出沒有相關聯性的部分分派出來,使得兩個CPU都可以處於工作狀態,但影像畢竟是一連串的資料,能分開處理的部分畢竟不再多數,所以能發會的空間自然不多。


上面的說法比較像是CPU內的指令分派器做的事。CPU在進入多管線架構後,希望單一程式能善用多管線就是使用這種做法。

這事不適合OS去做的原因,主要是要OS去看執行檔一個個的binary code,分析再分派工作,是比較沒有效率的事情。第二是現在x86的CPU在內部多半會將x86指令做轉譯再丟進管線,轉譯過程可能會有指令打散或融合的動作,所以OS只針對x86指令做的分析,是不夠的;但如果還要先將x86指令轉成現在CPU內部的RISC再分析,工作只會更重且效率再降低。



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
crazydark
金驢友〔初級〕
等級: 16等級: 16等級: 16等級: 16
貧窮金太郎

 . 積分: 1852
 . 精華: 2
 . 文章: 2767
 . 收花: 16315 支
 . 送花: 11203 支
 . 比例: 0.69
 . 在線: 2949 小時
 . 瀏覽: 49480 頁
 . 註冊: 7244
 . 失蹤: 1
 . Taiwan
#5 : 2007-3-23 12:34 AM     全部回覆 引言回覆


引用:
BOBO寫到:

引用:
leonis0811寫到:
就算用雙核心也不會比較順,就版大您的使用方式而言,造成LAG的情形不不是出在於CPU,而是在於HD的部分,因為影像轉檔所消耗的硬碟效能真的是非常大,除非您有2~3顆硬碟,在同時多工處理時,又是分別用在不同的硬碟上(如:轉檔HD2、遊戲HD3、系統HD1),這樣才不容易有所謂LAG的現象,但是如果您已經有多顆硬碟了,卻還是會LAG,那就必須改善CPU和記憶體的部分。
但是,就算配備在頂級,一次執行多種消耗大量資源的程式,仍是會LAG的。

您這段回覆會讓這篇文章更熱絡......


"影像轉檔所消耗的硬碟效能真的是非常大"我想這句話是錯誤的
就算你是40Mbps的bitrate讀出, 轉檔後再40Mbps的寫入
一秒的資料流量也不過就10Mbyte ((40+40)/8)
現階段的7200rpm HDD每一台都可輕鬆達陣
但是在這種流量下
目前PC用的CPU應該都還無法達到轉檔時間與播放時間達到1:1
(以目前常用的格式為例, 如:MPEG-2, MPEG-4, H.264, WMV等等)
換句話說
受限於CPU
實際進出HDD的資料還會小於10Mbyte/sec
所以硬碟絕對不會是轉檔的瓶頸



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-4-29 02:26 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.030673 second(s), 8 queries , Qzip disabled