鐵之狂傲

 取回密碼
 註冊
搜尋

切換到指定樓層
1#
  毫無疑問的,「多核」、「多緒」此二詞已快成為當今處理器架構設計中的兩大顯學,如同歷史戰國時代以「儒」、「墨」兩大派的顯學,只不過當年兩大治世思想學派是爭得你死我亡,而多核、多緒則是相互兼容並蓄,今日幾乎任何處理器都朝同時具有多核多緒的路線發展邁進。

  雖然兩詞到處可見,但可有人知此二者的實際差異?在執行設計時又是以何者為重?到底是該多核優先還是多緒提前?

行程早於執行緒

  若依據資訊技術的發展歷程,在軟體程式執行時的再細分、再切割的小型化單位上,先是有行程(Process),之後才有執行緒(Thread),執行緒(也稱為:線程、線緒)的單位比行程更小,一個行程內可以有多個執行緒,在一個行程下的各執行緒,都是共享同一個行程所建立的記憶體定址資源及記憶體管理機制,包括執行權階、記憶體空間、堆疊位置等,除此之外各個執行緒自身僅擁有少許因為執行之需的變數自屬性,其餘都依據與遵行行程所設立的規定。

  相對的,程序與程序之間所用的就是不同的記憶體設定,包括分頁、分段等起始位址的不同,執行權階的不同,堆疊深度的不同等,一顆處理器若執行了A行程後要改去執行B行程,對此必須進行記憶體管理組態的搬遷、變更,而這個搬遷若是在處理器內還好,若是在快取記憶體甚至是系統主記憶體時,此種切換、轉移程序對執行效能的損傷就非常大,因為完成搬遷、切換程序的相同時間,處理器早就可以執行數十到上千個指令。

兩種路線的加速思維

  所以,想避免此種切換的效率損耗,可以從兩種角度去思考,第一種思考就是擴大到整體運算系統的層面來解決,在一部電腦內設計、配置更多顆的處理器,然後由同一個作業系統同時掌控及管理多顆處理器,並將要執行的程式的各個程序,一個程序餵(也稱:發派)給一顆處理器去執行,如此多顆同時執行,每顆處理器執行一個程序,如此就可以加快整體的執行效率。

  當然!這種加速方式必須有一個先決條件,即是作業系統在編譯時就必須能管控、發揮及運用多行程技術,倘若以單行程的系統組態來編譯,那麼作業系統就無法管控伺服器內一顆以上的處理器,如此就不用去談論由作業系統負責讓應用程式的程序進行同時的多顆同時性的執行派送。

  即便作業系統支援多程序,而應用程式若依舊只支援單程序,那情形一樣是白搭,作業系統無法對單行程程式再行拆分,依然是只餵入單一顆處理器上去執行,無從加速。

  同時用多顆處理器來執行,且每顆處理器執行一個行程,這是一種加速法,另一種加速法則是:儘量不進行記憶體管理組態的切換,避免切換的效能折損,執行緒正是在此概念下所出現的產物。

  不過,執行緒也要程式的搭配才能發揮,執行緒的概念出現與落實已是「C++看消、Java看長」的階段,所以C++只能透過API呼用的方式來支援與使用多執行緒,如此必須改寫過往的程式才行,改寫成有呼用到支援多執行緒的API才行。相對的,較C++晚問世的Java則是原生支援多執行緒,不用改寫也能發揮及運用多執行緒的特性及其加速效益。

  有了執行緒後,執行的分割、切割更加細膩,執行緒機制不僅在多顆處理器的系統內可以加速,在單顆處理器內也一樣能獲得好處,在多顆處理器的系統上每顆處理器不僅可以單獨執行一個程序,當然也可以單獨執行一個緒,而在單處理器系統上因為省去記憶體管理組態的搬遷,所以一樣可以加速,很明顯的,緒使執行的發派、分配更加細膩與靈活化。

執行緒的副作用

  緒雖有好用的優點,不過它也有副作用的缺點,且此一優缺是一體兩面無從分割,缺點是各個執行緒共享同一組記憶體管理組態及機制,倘若有一個緒的執行發生錯誤、瑕疵、或遭入侵等,其餘在同一個行程內的每個執行緒也都會遭受影響、波及,最嚴重是同一個行程內的一切都錯亂、毀壞,由此可知:執行緒其實是帶有若干安全性犧牲的加速法。

  此外有人會誤會,就字面上而言,多核表示同時間有多顆處理器在執行,每顆處理器可以執行一個行程或一個緒,但是一顆具有多緒能力的處理器並不表示它可以同時執行多個緒,事實上在同一時間內一顆具多緒功效的處理器也依然是執行一個緒而已,只是多緒處理器的內部可以將原有執行緒的相關資訊及變數暫時擱擺,然後去執行其他的緒,執行完後在切換回原來執行到一半的緒,甚至沒執行完也可以切換回來,且整個切換過程都在處理器內進行,不用與快取與記憶體進行搬遷置換,如此以快速換緒執行的方式來加速。

  相對於此的,一顆不具多緒能力的處理器,執行一個緒到一半若想改執行另一個緒,就必須將原緒、現緒的相關內容與資訊搬遷到快取或記憶體,然後自快取及記憶體引入另一個緒,由於此一搬轉頗耗時,所以多半選擇將原有的緒執行完再引入下一個緒,如此在時間上可能還比較經濟。然而無論一緒完整執行後再執行下一個緒,還是進行緒的進出搬遷轉移,都不會比具備多緒能力的處理器來的快速有效。

至此我們可以歸納整理:

  1.多核、多處理器系統中的每顆處理器(每個核),同時間內可以執行各自不同的行程(或緒)。

  2.一顆多緒能力的處理器,無論是支援二緒、四緒、八緒,這些緒都必須是在同一個行程內,所以一顆處理器(一個核)還是只能執行一個行程,雙核處理器就能夠同時執行兩個不同的行程(或緒),四核就可以同時不同的四個行程(或緒)。

  3.倘若是執行不支援多緒的程式,其執行上的分拆最多隻到行程而未到緒,那麼每顆處理器內的多緒功效就無從發揮,而這類的程式歷史較長久,相對的原生支援多緒的程式歷史較短,不過資訊技術的腳步向來進展快速,兩種不同層次的支援僅差距數年時間。

產業實際發展可為證明

  真的是多核優於、先於多緒嗎?關於此可透過產業實際發展做為應證,Sun的UltraSPARC T1處理器(研發代號:Niagara)是八核四緒的設計,但接續的UltraSPARC T2處理器(研發代號:Niagara 2)則是八核八緒的設計,所以是核多、核優先,然後再來拉跋、提升緒的執行。

  同樣的,IBM為Microsoft Xbox 360所設計的Xenon處理器,是個三核二緒的設計,核數依然是高於緒數,又如IBM、Sony、Toshiba三家業者合研的Cell處理器,現有第一代的Cell(研發代號:DD1)是九核,組態上是八核媒體(SPE)、一核泛用(PPE),新一代的Cell(研發代號:DD2)也針對PPE的部分進行雙緒發展,如此再次表示核比緒重要,當Cell僅進行增一緒的擴展改進時,而非再增一核,即可知這僅是一次小幅的改進。

「多核」、「多緒」之外 還有「多令」、「多機」

  最後,且讓我們談談與多核、多緒不同加速走向的「多令」,「多令」是筆者發明的詞,指的是比執行行程(Process)、執行緒(Thread)更基底層次的執行指令(Instruction),多核的作法是儘可能在同時間內執行多個行程,多令則是儘可能在同時間內執行多個指令,學術上的VLIW與產業上的EPIC皆是多令理念下的架構。

  到目前為止多令並非不可行,但僅行於數位信號、圖像等處理,繪圖晶片、媒體處理器等多採行VLIW架構,然多令在泛用運算上卻未見效益,至於科學研究之類的高效運算也傾向使用更高層次的平行:多機(叢集、網格,執行範疇與分配類同於執行緒、行程),看來多令、多程/緒、多機各有所用,端看運用場合的適切性。

 
唉 櫻樹

花瓣飛舞

唉 各自踏上                                                           「No music,no Life」

夢想之路

               
轉播0 分享0 收藏0

回覆 使用道具 檢舉

肖像被遮蔽

禁止訪問

提示: 作者被封鎖或刪除 內容自動遮蔽
 
簽名被遮蔽

回覆 使用道具 檢舉

你需要登入後才可以回覆 登入 | 註冊

存檔|手機版|聯絡我們|新聞提供|鐵之狂傲

GMT+8, 24-6-9 18:24 , Processed in 0.026387 second(s), 19 queries , Gzip On.

回頂部