• 13

CPU 發展為何停滯不前?

jeeyi345 wrote:
那可以請教一下為什麼在做耗費cpu工作(遊戲、轉檔、解壓縮)時
我的雙核心只有一邊高呢
...(恕刪)

一件工作,一個人作需要一小時,由兩個人來作,您確定"任何工作"都能變成半小時完成?由四個人來作,也並非一定就能十五分鐘完成。有些工作本身沒有全程的平行度,天生就無法將勞役全程平均分配給兩個CPU執行。也有些工作本身的屬性,分給兩人執行,花在傳遞資料跟溝通時間反而更高,不如一個人全程執行到完,您想想看身邊職場的工作,有沒有這樣的例子?並非任何工作都能完美平行化或簡簡單單就達到最佳Load Balancing,例如影像解壓縮/轉檔過程中的Entropy coding/decoding部分,就是一項sequential屬性、很難完美平行化的工作。

寫平行程式的Load Balancing,某種程度也可套用80/20法則,花20%的時間,或許就可達到80%的平行度,但要追求那剩下20%的平行度求完美,可能要多花那80%的時間,許多公司、設計師,或限於公司產品上市時程、或限於專案時程、或限於個人資質,很可能就把這20%平行度放棄掉了。

也可用工廠排程的例子來看,一條生產線idle,排程的負責人理論上當然應該排上另一件工作去生產,但如果工廠沒有另一張訂單呢?以轉檔來說,如果您不想換平行性最佳化程度較高的轉檔程式,那您何不同時轉兩個檔?同時解壓縮兩個檔案?同時玩兩個遊戲?但同時正好有兩個檔要解壓縮的機率可能不大,同時玩兩個遊戲,您也知道,意義也不大。那乾脆玩遊戲時在背景轉檔呢?要考慮的事也不少,會不會太操當機、轉完了要不要先中斷遊戲轉另一個、轉檔會不會在生死關頭當下干擾到遊戲這端....等。

所以,您真有那麼多的工作需要讓兩顆核心隨時滿載、或如此介意隨時負載平衡嗎?若您真的很希望看到兩顆CPU核心隨時負載平衡/滿載,那您也得要主動負起排程的責任,不能期待光靠應用程式、作業系統、處理器就能自然達成。

只有在process level的平行度、thread level的平行度、instruction level的平行度都達到完美平行化時,您才有機會看到雙CPU兩邊隨時使用率同樣高的理想世界。CPU的Dynamic Execution跟編譯器有一定的彈性來幫助提高某個CPU核心內instruction level的平行性,但畢竟CPU不是人腦,編譯器分析也有一定的極限;SIMD指令集所能幫忙的資料平行度,必須看工作本身是否有資料平行度、適合去運用SIMD指令集改寫,以及程式設計師本身的分析跟努力程度;作業系統所能處理的平行性在於將系統內所有process/thread輪流分配給多核心處理器內的不同核心執行的排程,也就是process level跟thread level的平行性,但排程邏輯也是作業系統程式寫死的,而且對於系統內的某一應用程式來說,還是得看程式設計師寫程式時分析該應用工作的平行性、適當切割計算量差不多的tasks、再各自寫成thread的功力。整個過程,完全操之在您的在於要平行執行哪些應用、選擇那一家的平行最佳化程度較高的程式(如轉檔程式),是可由您自己決定的。

畢竟這是您的個人電腦,並不是國家級、造價昂貴、最好隨時滿載、將空閒的CPU time都租出去才划算、作業系統/編譯器還可以不時客製修改針對平行處理/Load Balancing最佳化、有些還有專人負責程式上線排程的超級電腦唷!別太鑽牛角尖了。
http://www.moldex3d.com/jla/ch/index.php?option=com_content&task=view&id=203&Itemid=214

如果嫌電腦還不夠快, 試著用多台PC組合成迷你超電腦來進行平行運算, 上面就是一個實例, 原本四小時(單核心1CPU核)的運算縮短為一小時(8核心4CPU), 以我所知校園中若干實驗室其實也有這樣的超級電腦, 不用非要等Intel開發出更高性能的高時脈或多核心CPU. 重點是你有什麼作業是可以超電腦的?

多CPU電腦或PC群組上進行高速計算,便成為成本-效益比最佳的選擇。PC群組由於具有價格低廉、效能卓越的特點,因此有「窮人的超級電腦」之稱。世界五百大最快的電腦就有許多是由PC群組所構成 (www.top500.org)。

http://en.wikipedia.org/wiki/Symmetric_multiprocessing#Entry-level_systems可以找到適合進行平行運算的CPU及OS.
millerliu wrote:
如果嫌電腦還不夠快, 試著用多台PC組合成迷你超電腦來進行平行運算, 上面就是一個實例, 原本四小時(單核心1CPU核)的運算縮短為一小時(8核心4CPU),

如 ycweng 兄提到的,不會因為用的多核心的處理器就可以馬上得到效率的提昇,程式有沒有
針對多核心做最佳化也是關鍵之一。



millerliu wrote:
以我所知校園中若干實驗室其實也有這樣的超級電腦, 不用非要等Intel開發出更高性能的高時脈或多核心CPU. 重點是你有什麼作業是可以超電腦的?

不只是校園,這裡幾個主要的超級電腦中心這幾年都是以 PC cluster 為主力。最近這半年上線
的的一部 cluster 其總浮點數運算能力甚至達到了 petaflop 的等級。就像剛剛提到的,面對這麼
龐大的機器,不是把程式丟上去就好,寫程式的時候要特別針對 multicore、multihread 的運算
環境最考量:每一顆處理器的運作效率、快取記憶體的使用效率。萬一一個十萬個 cpu 的程式
要做 checkpointing 的時候,要如何利用超大型硬碟陣列等等。Production run 之前的 tunung
很費時間,不過也很值得就是。
You don't take a photograph, you make it. - Ansel Adams
光和影的世界 wrote:
其實只要把"電"傳輸改成"光"傳輸,效能會大躍進,只不過現在不知道有沒人在做耶!?


有的,這正是目前固態光電中很熱門的一個研究主題
Intel還有一個部門是專門在研發silicon photonics
目的就是希望把"電"傳輸改成"光"傳輸
QQ90315 wrote:
提高時脈 不一定等於提高效能


但是一樣架構來比較, 提高時脈 一定 等於提高效能
我個人認為 時脈不等於CPU整體能力的指標

雖然時脈高可以增加他運算的速度

不過如果沒有好的運算法 就算你把頻率在拉高 所需時間也只是減少一些些

所以為何要增加指令集 用意就在這

先不論程式是否支援新的指令集(比如SSE4.1很多都只有轉檔程式支援)

如果一個運算 能夠用精簡且效率很高的演算法來處理他

他所能運算出來的所需時間當然就會比較快了



這只是我個人的看法

如有錯誤之處 還請各位能小力點@.@
  • 13
內文搜尋
X
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 13)
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?