darktasi wrote:
看起來《星際爭霸2》並不能發揮多個處理核心的優勢。
雖然雙核心現在已經成了絕對主流選擇,但在用戶中單核心仍然大量存在而且不要忘了《星際爭霸2》從2003年就投入開發了,而雙核心處理器直到2005年才出現而且剛開始的時候價格奇高,很少有人用得起,直到最近兩年才走入尋常百姓家。很顯然,《星際爭霸2》最初是面向單核心系統開發的
...(恕刪)
Windwaker wrote:
2. 大部分的程式都是Single Threading,雖然可以在Multi-threading的作業系統上跑,程式設計師要寫Multi-thread ready的 Single thread很簡單,但是要把自己的程式寫成兩個thread以上很有挑戰性,因為要把Task分成兩個以上很難,看SC的例子就知道了,問題根本不是技術上能不能分成四個Thread,而是你怎麼把程式的Load分給4個Computing unit.
...(恕刪)
從以前其他主題的討論,我知道Windwaker兄是有軟體經驗的(不過應該不是純軟體公司/ISV,而是硬體公司內的軟體部門),darktasi兄雖然不是搞軟體的,不過兩位的提出的"迷思"還是可以一次回答。
Windwaker兄應該不是寫多媒體程式或是遊戲程式的吧!以實作一個簡單的影音播放或錄影程式為例,基本上你的Video模組跟Audio模組,很自然而然的就會分成(至少)兩個執行緒,在大部分情況下這兩個執行緒進行的運算是不平衡的(Video計算複雜度一般較高),但是一般實作,不但會將Audio模組切成單獨一個執行緒(而非依附在Video執行緒下順便進行Audio編碼/解碼),甚至還會賦予給它較高的執行緒優先度,為什麼呢?(因為已經不是追求分工平均的問題了,而是人腦對於斷音的容忍度,比起video頓呆低很多很多)
上面為何說"至少"?即使是光從Video編碼/解碼執行緒去分析,都還有進一步評估再拆執行緒的空間,真正實務課題上如I/P frame跟B frame能不能拆執行緒分別處理?甚至評估B frame內部能不能切成幾塊分成不同執行緒去處理Motion Prediction/Motion Compensation?如果是Blu-ray 3D用到的H.264 MVC(沒有打錯,這邊本來就不是要講AVC)Video編碼格式,那就更有意思了,軟體實作時如果沒有切成至少兩個執行緒,那實驗室內驗證驗證就算了,基本上真的是上不了檯面拿來賣錢。還有例如未來的4K超高解析度Video應用呢?微軟正在嘗試幫其在企業視訊通訊/會議市場找應用的H.264 SVC格式呢?
這也回答了darktasi兄的問題,以星海爭霸2這類的"即時"戰略遊戲,為何要稱作為"即時"?以一場本機端三人對戰為例(一玩家、二電腦),程式該怎麼寫?你會把玩家跟電腦共三種部隊裡的各幾十個單位的處理,都寫在同一個執行緒中用一個迴圈大鍋炒嗎?那本機八方對戰怎麼辦?如果每一方都可以有上百個單位怎麼辦?如果是透過網際網路的多人對戰呢?程式該怎麼寫?網際網路的頻寬變數很多,要如何"盡可能"確保"即時"?
您說"《星際爭霸2》最初是面向單核心系統開發的",此一時彼一時,要說最終上市的星海爭霸二都沒有針對多核心趨勢進行多執行緒化最佳化,我真不知道該怎麼說.....如果您認為多執行緒程式最佳化的目的,只是為了把多核處理器的每一核都吃到滿滿滿的100%負荷.......
.....小弟只能說您測試程式/燒機程式跑太多,變吃重鹹了.....回到專案分工的例子,一件專案的所有專案成員,分到的事情絕對很難做到完全公平,有些成員例如收發或助理在專案中,甚至可能只是"當你收到關於這個專案的文件時,絕對要優先處理、第一時間送上來"這種event-driven的角色,既然專案分工,不可能作到絕對平衡/公平,有些成員甚至工作loading輕/重相差懸殊,那為何還是要分工?
兩位不要掉入多執行緒化只是為了讓所有應用程式寫成多個執行緒後在每個核心的負荷必須都完全相同、或是每個核心都必須是被操到100%負載的迷思了,那是鑽牛角尖。
Windwaker wrote:
整個討論串錯誤很多
1. Bulldozer雖然號稱8C,但是只有四個浮點運算,所以嚴格來說相當於Intel版本的4C/8T,這也就是為什麼Intel說AMD算核心的方法不對, Bulldozer的效能應該接近i7系列,現有的PII X6/X4應該會留下來和i5對戰
...(恕刪)
錯了啦!Bulldozer(以Zambezi為例)有八個浮點運算單元,只有在處理256-bit AVX SIMD浮點指令時,才有單一模組內的兩個128-bit浮點單元會合併運算的狀況。
也不要用幾C幾T這種說法去硬套用到Bulldozer唷!那又是鑽牛角尖了,AMD的官方說法,就是Bulldozer是一個八執行緒的處理器(以Zambezi為例)。
),舉個例子:例如使用也相當普遍的可平行下載的下載加速器,天生就蠻適合寫成多執行緒執行。


























































































