嵌入式裝置有許多層面都能夠建置平行處理機制,進而帶來多方面的效益,尤其是在改進系統效能方面。目前某些技術已可成功應用於桌上型與嵌入式平台的架構中,但有些解決方案卻侷限於研發業者僅能開發固定功能的解決方案。本文將介紹多重處理的關鍵詞彙,並推薦一套更具彈性且通用的平行技術應用模式,同時更適合支援各種嵌入式應用,以達到更高的處理效率,也就是低耗電率與可擴充的效能。
平行處理技術的架構及解決方案
長久以來,設計業界對於平行運算技術一直懷抱著願景與迷思。直到最近,平行運算仍侷限於學術研究與專業超級電腦等領域,期望這類技術能提供效能等級的躍升或為運算能力帶來重大的突破。儘管目標相當明確,但由於平行電腦的程式編程工作相當複雜,通常須運用專利型程式語言,這意味著必須花費許多成本在大量矽元件空間及電力需求上。
含有多處理功能的平行處理機制已逐漸擴展至桌上型運算平台,並成為目前桌上型平台晶片架構所期望的技術。然而對大多數消費者而言,平行處理技術僅僅代表著能夠使目前的單一處理器架構在處理現有桌上型應用時提升10%至20%的效能,而非所謂“突破性的躍升”。這種遞增式效益使大眾對嵌入式平台的平行處理或多重處理能抱持較為客觀的認知。就某種角度而言,平行處理已成為協助業者在耗電量及效能間取得最佳平衡的另一個架構特色。
持續成長的產品需求
嵌入式產品對於多處理器解決方案的需求不斷上升。裝置中愈來愈多應用需求必須管理持續變化的工作負載,且不能因此而提高耗電量或成本。然而,可攜式產品的尖峰效能需求不能僅提高系統時脈,因為更高的時脈速度意謂著運作電壓隨之提高,這表示耗電量也會隨之大幅上揚。
3G手機的例子正可以說明平行處理機制如何建置在許多層面。在無線應用方面,其處理負荷能夠彈性地從趨近於零的待機模式增加到撥接影像電話並同時以背景模式執行其它應用時的最高負荷量。
平行處理機制的多重層級
在探討如何將平行處理機制導入嵌入式系統並滿足持續成長的產品需求之前,必須先瞭解平行處理機制如何為實際系統帶來利益。
系統如欲建置平行處理機制所面臨的複雜因素,需為此種機制散佈於從擁有多組應用程式同時執行的最高應用層,到不同資料同時在處理單元中傳遞的最低位元層等多種抽象層。
以3G手機為例,在最高抽象層中,裝置必須執行多組使用者應用及整套網路軟體架構。以現今的技術而言,同時執行多組應用的發展潛力相當可觀。而在下一個層級中就可運用多重同步演算法,例如在3G手機上撥接影像電話時,必須執行影音編碼或解碼演算,光是這項功能就需要同時執行四組演算。若將每個演算法加以隔離,就可以讓特定資料集的處理作業達到平行處理模式,例如影片編碼流程中的8×8 DCT離散餘弦轉換。在這個流程中,可以同步模式運算多組8×8資料。
在處理每組8×8資料集時,可同步執行演算或邏輯處理,例如當同時發出兩組add指令於8×8 DCT計算的頂層與底部執行加法運算。這方面需要在指令層級達到同步化的效果。為方便討論,因此設定最低層級的抽象層,也就是位元層級的運算支援平行模式。例如,構成ALU邏輯處理流程以便能同時進行位元移位運算,以達到一個週期完成加法運算的目標。
《圖一 智慧型手機或3G行動終端裝置必須支援多元化的功能並同時執行多項作業,因此有相當高的處理需求。》 |
|
透過軟/硬體執行平行處理
在界定了平行處理機制的五個層級後,接下來將進一步介紹如何運用目前的各種技術達到平行處理的效果。
多核心裝置
滿足多重應用的處理需求最直接的方式就是運用多處理器。當非對稱多處理器(AMP)同時運用二顆以上的處理器運作時,其中一顆指定為主處理器,負責執行作業系統及整體控制作業。這類系統包括異質性與同質性環境,異質化系統結合不同種類的處理器,例如控制處理器以及訊號處理器;而同質型系統則包含多顆相同類型的處理器。非對稱異質化組態系統,可於網路裝置中執行像是同步封包處理等作業。
多重執行緒應用
為了滿足同時執行音效與影像解碼作業等同時執行多組演算的應用需求,最常使用的方法是以多組執行緒進行處理,也就是兩組解碼演算作業間以時間切割的方式處理。時間切割技術已應用於現今的單一處理器環境,能夠使在同一顆處理器上執行的兩組執行緒間迅速地切換,而形成同時處理的錯覺。這對於考慮運用多處理器系統以提高其應用效能的業者而言是一項好消息。現今許多使用多重執行緒的程式可以立即移植到多核心的環境上執行。
有兩種方法能夠在多處理器系統中將執行緒分派給處理器。第一種方法是在AMP環境中,可由主處理器或指揮處理器以靜態模式將執行緒分派給特定的核心。另一種方法則是由有這方面能力的作業系統以動態模式透過排程或自動化地將執行緒指派給處理器。
對稱式多重處理器(SMP)環境包含多顆同質性的核心,每顆處理器都有能力執行相同的作業。這些系統屬於對稱式環境,所有核心都能存取相同的記憶體、I/O以及其它資源。因此不同的執行緒能在SMP系統中的任何核心上運作。雖然AMP同質型系統亦含有相同的核心,但並非所有核心都能存取相同的系統資源。例如,不同的核心可看到不同區段的記憶體或是受限制僅能存取其它系統資源。根據SMP與AMP存在的這些差異,顯示出SMP較適合進行動態工作分派,而AMP則較適合進行靜態的工作指派。
如(圖二)所示,SMP中的執行緒是應用處理器容納其多組編碼及資料的所在之處。每組執行內容由CPU聯合組成的程式員(program counter)所定義。在SMP中,這些多重執行內容能夠同時運作,並且即便在比單一內容的處理器更快的運作速度或電力不足時也能完成工作。
大多數嵌入型多重處理器系統都屬於靜態指派的AMP系統。ARM DCP就是一個典型的例子。由於SMP能自動分派處理工作,故將AMP組態的執行緒程式模型轉移至SMP架構是沒有意義的作法。
多重執行緒作業
在應用層級方面,亦有許多模式可達到資料平行處理的目標。目前最常見的模式是由程式開發人員找出平行資料處理的機會,其中包括由開發人員自行將資料切分成適合平行處理的區塊及分派不同的資源。
在更高的層級方面,可運用程式語言中的相關指令來研判這些工作是否能同時進行。這種模式對於程式開發人員而言遠比低階手動作業更有效率,同時也能控制平行結構的處理流程,像透過Handel-C及OpenMP此類語言使用延伸格式的操控指令或pragmas,找出程式結構中潛在的平行處理能力。例如傳統編程語言中的“for loop”通常被解譯成一連串的敘述,再加入一組pragmas即能命令一組預先處理器(pre-processor)同時處理for loop中的所有指令。這種模式使設計人員能充份掌握平行處理的流程。
預測處理技術則將所有工作交由編譯器或作業系統,由它們負責決定資料最佳的平行處理模式為何。以for loop指令為例,由預測系統研判某行程式與下一行程式之間有沒有資料相關性,再運用多處理系統以高效率的模式進行指令執行。預測型預先處理器需要的編程工作量最少,因此最具吸引力。然而,這種方法卻最難掌控,其產生的結果也難以預測,甚至可能產生許多複雜的演算流程。
隨著平行處理技術逐漸從機板轉移至晶片層級,運用演算流程中平行處理的機會亦大幅改變。機板層級建置平行處理機制中最常見的例子就是伺服器技術。多處理器技術被廣泛應用於主從架構型系統中,其典型的架構包含多顆晶片,彼此間由背板所區隔,耗用大量的通訊資源。因此,長時間平行處理作業的運算才值得採用這類平行處理系統。
將多組核心整合在單一晶片中,成功地改變了以往的平行作業模式。運用晶片多處理器(CMP)技術,可使晶片中各核心間的傳輸延遲縮短。這意謂即使是很小的工作亦適合傳遞給另一個處理器進行平行處理。CMP在進行單執行緒應用時發揮的平行處理機制雖然程度較低,但仍足以在晶片中多組核心上執行多組執行緒。
多重指令
平行發出多組指令稱之為指令層級平行技術(ILP),單一處理器架構能同步執行兩組或更多的純量運算,超純量或極長指令字元(VLIW)處理器是許多解決方案中常見的技術。運用單一處理器架構建置的ILP搭配平行前端管線結構,能向包含執行核心在內的各種功能單元管線同步發出指令。然而,超純量核心的效率受到單一執行緒中平行處理的機會所限制,若處理器有四組指令發送槽,但排程器僅能在特定的週期內找到兩組指令發出,則其餘兩個發送槽就等於被浪費掉。
如(圖三)所示,ARM MPCore為針對支援多層執行緒平行機制所設計的處理器核心之最佳範例。它能夠扮演在每一個CPU上的安裝多重獨立應用的多核心裝置以及能夠支援執行緒應用的SMP。處理器內部的MPCore也能夠支援單一指令多重資料(SIMD)以及其他形式的平行層級指令。TLP及ILP在MPCore裡的結合使其成為新一代熱門消費性電子及網路裝置的理想技術。
儘管希望能運用較深的管線及多管線以便由一次處理器得到多重指令,但超純量處理器的效能基本上仍舊受限於單次發出指令的數量。此外,若指令必須因等待記憶體中的資料而暫停傳送,則整個執行緒都必須一起等候。同步多重執行緒(SMT)亦稱為超執行緒,為針對超純量架構推出執行緒的平行機制。在實際運作上,這意謂發送平行指令不再受同一執行緒中指令集的限制。這種設計創造出效率大幅提升的前端處理機制,可將發送槽的浪費機率降至最低。業界轉移至SMT的趨勢亦反映出ILP的發展限制及體認到TLP的效能潛力。
多重資料
嵌入式架構能處理多筆資料的優勢已被廣泛討論,同時充份體現於ARM架構中。單一指令多重資料針對各種高效能媒體創造出更具效率的軟體建置,包括音效與影片編碼器。ARMv6指令集中加入超過60項指令,且一但加入SIMD指令就能將效能提高2至4倍(實際效果則視多媒體應用的種類而定)。SIMD使研發業者能建置各種高階功能,例如影片編解碼器、獨立於擴音器之外的語音辨識系統與3D繪圖等,尤其是各種新一代無線應用。SIMD指令支援8位元與16位元SIMD演算技術,包括四組8位元與二組16位元運算、平行加法與減法、選擇、封裝與解封裝等。而先進的乘數器方案包括了針對加密型應用的16位元加乘以及新型長浮點數乘法指令。
ARM DSP“E”延伸方案是另一個運用多重資料處理技術的例子,DSP強化指令包括一組單一週期的16×16與32×16 MAC建置及支援現有演算指令的飽和延伸集(saturation extension)。這些延伸指令是應用於設計穩定控制器迴路以及bitexact精準演算法。CLZ指令能提高數學演算與浮點運算的正規度(normalization),並提升除法運作的效能。此外,ARM多層級AMBA晶片匯流排規格支援平行式晶片內部互連策略,提供一套理想的解決方案,能降低延遲並提高系統的匯流排傳輸頻寬。
<註:ARM提供許多開發系統及測試版以協助多處理器設計建置及發展。APC MPCore正是建置在該種系統上,以針對未來先進設計進行SMP軟體的研究及發展。>
TLP與ILP—實際建置
在考量為嵌入式系統發展更多可行的平行處理機制解決方案時,指令層級平行技術(ILP)與執行緒層級平行技術(TLP)分別是業者心中最優先的選擇。雖然兩種技術都能提高效能,但對於整體系統設計而言則有不同的影響。
即使程式開發人員並沒有參考資料可研判哪些指令能以平行模式執行,ILP都必須在充裕的硬體資源下才能以平行模式發送指令。同時,編譯流程在執行指令排程所提供的協助也相當有限,但基本上硬體必須能應用於同步執行指令。就成本與耗電量而言,複雜的ILP解決方案並不適合支援嵌入式設計。
相反地,TLP則是運用軟體發揮潛在的平行處理能力,由於平行處理能力在執行程式時就能被辨識出,因此能簡化硬體的設計與建置流程。Hammond L.在1997年發表的研究報告中,針對同時發送多組指令的SMT與運用多組單一執行緒處理器的CMP兩種不同架構在建置執行緒層級平行機制進行比較性研究,證實了CMP在架構擴充性與效能上相對較為優異的假設。將微架構分割成較少的區域性處理元素,可協助業者更容易設計及調校出最佳的速度。此種作法能讓單一處理器模式在相同的晶粒空間內擴增兩倍的效能。
另一篇由M. Nikitovic及M. Brorsson在2002年發表的研究論文再度驗證ILP與TLP模式在耗電量與效能方面的表現。而該篇論文的結論再次傾向於運用TLP晶片多處理器的模式,尤其在建立一套可適應式系統層級耗電策略後。論文的兩位作者亦指出CMP架構的彈性能滿足兩項關鍵的系統需求,特別是行動終端裝置方面。透過一套可適應性架構與開啟或關閉處理器的能力,能滿足各種效能的需求,尤其是典型無線應用中常見的「忙碌」作業負載。相同模式亦提供可降低耗電率的有效策略。此篇論文指出CMP模式僅須使用單一處理器架構的一半電源,即能達到相同的效能水準。
未來的挑戰
從同步執行完整應用到邏輯層級的位元處理,嵌入式系統中有許多發揮平行處理效益的機會。在搜尋最佳解決方案時所面臨的一項關鍵挑戰,就是從每種機會中尋找出最佳的處理效率。運用指令層級平行能力的技術,尤其是各種桌上型架構,在過去數年來被廣泛採用並日趨成熟。然而,業者必須了解運用重複硬體資源亦代表這種模式的擴充性無法在嵌入型應用中真正發揮其應有水準。
執行緒層級平行機制運用一組晶片多處理平台非常可靠,且能提供充裕的彈性、擴充性及優於單一處理器的效能。此種組態內潛的彈性,使業者能夠開發出理想的系統,並提供一套適合支援各種應用的硬體平台,進而創造出高效率的整體產品研發流程。然而,上述理論中的效能與省電性至今尚未於實際的嵌入型應用中顯現。
若這些技術能夠成功地推廣至設計業界,則代表包括作業系統、工具、軟體除錯方案與SoC硬體設計方案皆已問市,並發展成一套完整的研發環境。ARM將AMP結合至RealView工具,針對PrimeXsys雙核心平台內的多核心提供交叉觸發(cross-trigger)追蹤功能。
對於程式設計師而言,在開發TLP架構程式上仍然面臨著挑戰。不過目前市面上已出現更多支援TLP的程式語言、函式庫及作業系統,例如Linux就已納入SMP的功能,一旦該項技術受到更廣泛的採納時,就能逐漸發揮出超越其它平台作業系統的優勢。
結論
儘管仍然面臨基礎挑戰,但嵌入式應用中發揮更高平行效能所得到的潛在利益,使得業者對於開發多處理器仍抱持極大興趣。此外,應用研發業者也應考慮本身系統中平行處理的潛力。在許多例子中,現有的應用已納入多重執行緒的設計,可確保在轉移至新型平行架構時能以遞增的模式提升處理的效率。(作者為ARM多處理器產品經理)