資料介紹
毫無疑問的,“多核”、“多線程”此二詞已快成為當今處理器架構設計中的兩大顯學,如同歷史戰國時代以“儒”、“墨”兩大派的顯學,只不過當年兩大治世思想學派是爭得你死我亡,而多核、多線程則是相互兼容并蓄,今日幾乎任何處理器都朝同時具有多核多線程的路線發展邁進。
雖然兩詞到處可見,但可有人知此二者的實際差異?在執行設計時又是以何者為重?到底是該多核優先還是多線程提前?關于此似乎大家都想進一步了解,本文以下試圖對此進行個中差異的解說,并盡可能在不涉及實際復雜細節的情形下,讓各位對兩者的機制觀念與差別性有所理解。
行程早于線程
若依據信息技術的發展歷程,在軟件程序執行時的再細分、再切割的小型化單位上,先是有行程(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架構,然多令在泛用運算上卻未見效益,至于科學研究之類的高效運算也傾向使用更高層次的平行:多機(叢集、網格,執行范疇與分配類同于線程、行程),看來多令、多程/線程、多機各有所用,端看運用場合的適切性。
?
雖然兩詞到處可見,但可有人知此二者的實際差異?在執行設計時又是以何者為重?到底是該多核優先還是多線程提前?關于此似乎大家都想進一步了解,本文以下試圖對此進行個中差異的解說,并盡可能在不涉及實際復雜細節的情形下,讓各位對兩者的機制觀念與差別性有所理解。
行程早于線程
若依據信息技術的發展歷程,在軟件程序執行時的再細分、再切割的小型化單位上,先是有行程(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架構,然多令在泛用運算上卻未見效益,至于科學研究之類的高效運算也傾向使用更高層次的平行:多機(叢集、網格,執行范疇與分配類同于線程、行程),看來多令、多程/線程、多機各有所用,端看運用場合的適切性。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 多線程idm下載軟件 0次下載
- 如何利用基于字節碼插樁實現的多線程調試工具 13次下載
- C#多線程技術 14次下載
- linux多線程編程技術 5次下載
- 多核架構及多線程編程 10次下載
- 設計多線程和多核系統 9次下載
- LabWindows_CVI多線程技術的應用研究 68次下載
- 多核架構及編程技術 36次下載
- 數控測井軟件中的多線程編程技術
- 基于多核多線程處理器的網絡設備設計 0次下載
- NI LabVIEW的多核編程技術指南
- 多線程技術在電能質量實時監控系統中的應用
- 多線程技術在串口通信中的應用
- QNX環境下多線程編程
- C++面向對象多線程編程 (pdf電子版) 0次下載
- 什么是多核多線程?多核多線程如何提高程序的運行效率? 1035次閱讀
- 關于Python多進程和多線程詳解 678次閱讀
- Java多線程的用法 831次閱讀
- PyQT5+OpenCV多線程協作演示 1158次閱讀
- Java多線程永動任務 多線程異步任務項目解讀 981次閱讀
- 基于多線程技術VisualC++實現工控系統的設計 3729次閱讀
- 定時器與線程的區別 7969次閱讀
- 如何避免僵尸進程,多線程的實現原理 8221次閱讀
- 關于Linux下多線程編程技術學習總結 2135次閱讀
- 多線程面試經典問答 2953次閱讀
- 多線程服務器編程模型:如何正確使用mutex 和condition variable 7111次閱讀
- 什么是多線程編程?多線程編程基礎知識 1.2w次閱讀
- mfc多線程編程實例及代碼,mfc多線程間通信介紹 1.7w次閱讀
- 多線程好還是單線程好?單線程和多線程的區別 優缺點分析 8w次閱讀
- 多線程細節問題學習筆記 1074次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多