對於無線系統設計工程師來說,清楚地瞭解單一處理器上的多線程(MT)和利用多處理器(MP)處理之間的差異至關重要。蜂窩電話是首個實現了雙核設計的大批量應用,然而雙核實現對於許多需要高效能、低功耗的無線應用同樣適用。
當然MP和MT的話題同樣適用於除無線電之外的許多系統。最普遍的誤解是,MP和MT處理器是具有同等軟體複雜度的相當的技術。這一點應該會引起許多設計工程師的興趣。
重新考慮速度
在過去十年中,台式電腦處理器設計的差異化因素很簡單,那就是速度。英特爾和AMD在處理器設計上都全身心地追求提高速度的方法,熱衷於領先於另一方開發出更高頻率的處理器。在搶先推出全球第一款1GHz處理器的白熱化競爭中,AMD脫穎而出成為贏家。但在這期間,業界慢慢開始認識到:處理器的時脈速度越高,硬體的複雜性也會隨之增長。
業界還意識到:速度提高的路線不可能無限制地走下去,需要採取其它辦法。除了改善處理器的效率外,通過MP或MT技術實現多處理而獲得的線程級並行可以提高總體效能。
英特爾是第一個推動稱為超執行緒(Hyper-Threading)的MT技術的公司,而AMD則將自身定位於雙核與6?位處理器。但是這個過程也變成了一場雙核競賽,兩家公司都千方百計地要成為第一個為家庭和商業計算應用提供真正的多處理器解決方案的公司。
最近,這種向多處理轉移的趨勢已推動著台式電腦的軟體技術進入嵌入式設計中。多年以來,嵌入式設計工程師一直在他們的設計中採用MP,以在有限的功率預算內提供所需要的計算效能。
在嵌入式市場現在真正的變化是:應用軟體必須把通用處理器單元視為一個多處理系統,以從可能實現的更高效能和低功耗中獲益。儘管MP和MT都給軟體開發人員帶來了這種多處理的複雜性,可是當你在這兩者之間檢查代價和複雜性的折衷因素時,將會發現並非一切都相同。
改變處理的特性
為了不斷提高效能,IC設計工程師要為他們的下一代設計研究處理器架構,以提供滿足消費者需求的靈活性和可擴充性。如果全新的架構不能沿用傳統的軟體,就會強烈阻礙在處理器架構中做出任何根本上的變化。計算技術發展曆史充斥著此類架構的案例。不論它們的計算效能多麼優越,也會因為它們對軟體社群的需求和造成的中斷而未被採用。
任何到多處理的架構轉移都要考慮到這一點,因此必須找到一種方法,針對現有軟體的需求,平衡多處理在理論上的可行性。
此外,由於在嵌入式裝置中的應用軟體和作業系統越來越多地採用並發行為,因而推動了向多處理的轉移。這種軟體的並發性有助於推進MP或MT(或兩者的結合)的應用,以實現下一代嵌入式裝置所需要的效能和效率。
多處理器處理和多線程技術
MP和MT兩種技術都努力改善處理器的總體效能,並減少任何採用並發軟體線程的應用的處理時間。然而,這兩種技術在硬體上採用不同的方法來實現這些目標,並因此對於各種特定的軟體代碼常式,提供了不同程度的成功。
一個普遍的誤解認為MP和MT是可相提並論的技術,並且需要相同層級的軟體複雜度。只要你看一下其它通用的多處理編程介面,就會發現這兩者之間的區別。這表明,程式員必須完全瞭解他們的多處理解決方案是基於MT、MP還是二者的結合。
高頻率處理器訪問較慢的儲存空間會產生一個延遲,該延遲導致執行單元中存在空閑周期,MT的目標就是利用這段空閑周期以增加處理器的總體效能。通過把線程適配到空閑周期中,核心的效率就得到提升。然而,曆史已經表明這種多處理實現方法帶來的好處還不是很明顯。MT本質上是一種單一處理器技術,其中只有最小程度的處理器邏輯被複製以支援附加的硬體執行緒。通常是因為有了程式員的寄存器設定和足夠的CPU管理程式狀態,作業系統才可能視硬體執行緒為一個虛擬處理器。
然後處理器邏輯的剩餘部分由各線程之間共用,而這會引入一個增加軟體複雜度的嚴重問題。在傳統的單一處理器上運行兩個現有的應用程式,意味著作業系統要在兩個應用之間共用處理器資源,通過關聯切換(context switch)每秒在兩個應用之間交換執行10~100次。
關聯切換
正在執行的應用使用儲存在處理器寄存器和儲存空間中的執行狀態,這個狀態需要與現有的應用交換。在一個MT系統中,當執行單元停止的時候,發生關聯切換;關聯切換每秒鐘可能會發生數十萬次。
這種切換程度的極大增加要求在作業系統和MT硬體設計之間仔細協調。必須確保有足夠的複製硬體來限制執行狀態的儲存和再次載入,並確定這不會成為處理器的主要成本。
很少為每個硬體執行緒進行快取複製。對於軟體編寫者,這意味著他們要非常清楚更高的關聯切換速率對快取以及應用程式帶來的影響。
在具有兩個獨立應用的簡單例子中,如果這兩個應用只是由作業系統做簡單的時間分區的話,MT機執行起來會比單一處理器更慢。為了從MT技術獲益,軟體編寫者必須在表達軟體線程時非常注意,以使儲存在快取中的執行狀態在兩個線程之間很好地共用。
對於採用MT處理器的應用,這產生了更多的軟體複雜度,因為程式員要處理線程對共用的處理器資源的影響。然而,還有一些其它的硬體設計上的問題需要考慮。
多線程硬體
增加硬體執行緒會導致處理器的複雜度的提高,而沒有從根本上改變處理器的微架構,還會影響到設計可以達到的整體峰值時脈速度。複雜度的增加也將增加整體功耗,甚至在執行單線程的時候也是如此。這些MT的複雜度降低了整個應用的效能,即使只有一個應用或一個線程正在運行。
當考慮到所有這些MT的代價相對於有限的效能增加,就很清楚為什麼業內越來越多的公司引入雙核和多核MP解決方案。MP將一個處理器設計中的大部分複製下來,以從多任務軟體中獲得最大的效能,而不會引入任何管理共用的處理器資源導致的軟體複雜度。
實際上,如果你再次考察在兩個獨立的處理器上同時執行兩個獨立應用的案例,會發現總體效能將超過以兩倍速度啟動並執行單一處理器的翻番的效能。所有作業系統的關聯切換和在兩個應用之間的所有快取衝突都被消除了,而且每一個應用都能分別以全速持續執行。
對於MP所做的明顯假設是:設計的成本要跟矽片面積一樣翻番,在把多處理能力添加到嵌入式系統時,MT方法要有效得多。
然而,在任何此類比較中都要考慮總體目標效能要求。採用最新的矽實現技術和快取設計,完全有可能實現MP處理器在相同的矽片面積內提供與MT處理器相同的效能點。但是MP顯然具有另外的優勢—沒有額外的MT軟體問題。
多處理要進一步考慮的問題是功耗。MT本質上是一種更為複雜的單一處理器,這樣就限制了單一處理器所有的電源管理需求技術(如時鐘門控、待機模式、電壓和頻率調整等)。
然而,在多處理器設計中,每一個處理器都可以採用這些單一處理器技術,還有關閉整個處理器以節省所有耗電的能力。這就使得MP總是給軟體提供最大效能,而功耗直接與所完成的任務相關。圖1顯示了多線程和多核心處理之間的差異。
圖1:處理一組同等要求的多媒體工作負載時MP比MT節省的功率
MT實際上是從差距中擷取效能的技術,因為處理器的頻率和儲存空間速度的提升不成比例。顯然在這些情形下MT是一種快速修複技術,隱藏了這些不斷增長的低效率問題。然而,這樣的方式具有有限的壽命和適用性。
這已經由台式機處理器設計所證明,處理器越來越高的時脈速度有一個與功耗相關的硬性極限,而不管其是否支援MT技術。
如果軟體具有並發性,更為有效解決方案可能是直接從單一處理器移植到一個可擴充的MP架構。在MP設計考慮了處理器間通訊和分布式MP快取間資料共用的影響後,幾乎沒有另外的相關軟體成本。這意味著MP系統可以利用高效的單一處理器設計和更佳功效的優勢來實現超越MT處理器的效能和功耗的設計點。
可擴充的設計和效能
MP本質上採用的是分而治之的方法,通過把多個處理資料格集成在一起,讓每一個處理單元能運行一個獨立的並發線程,利用模組化設計原理就建立了一個多處理器。
這使得整個設計沒有MT這麼複雜,風險更低,從而使系統設計工程師能在需要的時候簡單地插入另外的處理器。這種設計的簡單性使MP比MT的可擴充能力要強得多,因為在MT處理器中與逐漸升高的時脈速度相關的設計成本常常會限制其可擴充能力,特別是當考慮到,因為未命中任意層級的快取而導致重要代價的時候。圖2以L2緩衝訪問為例解釋了這種代價。
圖2:線程訪問L2緩衝的代價
另一個選擇是在單個設計中同時部署MP和MT。然而,已經證實其相關的軟體複雜度被現有的多處理器作業系統和軟體編寫社群嚴重低估。
在這樣的設計中,存在一對基本矛盾,MT需要仔細管理處理器資源的訪問和共用,而MP在運行獨立應用時具有高效率。許多系統設計工程師發現,實際上在禁用系統的MT後,他們實現了更高的效能。
考慮到許多軟體應用可能已經考慮到每種解決方案的特點而為其專門設計,所以籠統地聲稱一種方案比另一種更好是不明智的。然而,基於傳統的單一處理器的MP具有更大的可擴充性,所以在選擇開發策略的時候,軟體設計工程師現在就可以從一定程度的靈活性中獲益,他們感到可以為未來一段時間內軟體架構不需要變化而放心。
作者:John Goodacre
多處理器程式經理
ARM公司