轉變硬件成軟件:多核心環(huán)境的高效程序寫作
——
軟件的功能性建立之后,關鍵的軟件工作可分擔給已針對該應用進行過最佳化的協(xié)同處理器來執(zhí)行。每個協(xié)同處理器都已針對效能、即時、以及空間等方面的要求進行最佳化設計,并且完全可程序化,因此在上市后還能進行擴充與優(yōu)化功能的動作。協(xié)同處理器的簡化與速度可以提供更大的機板設計空間,相同的軟件也可重新設定不同的目標以因應不同的產(chǎn)品價位與效能需求。
業(yè)者必須運用多核心架構來因應嵌入式電子系統(tǒng)對于高效能與低功耗的需求。根據(jù)International Business Strategies(IBS)的研究顯示,嵌入式軟件在90納米領域已成為一項主流設計模式。嵌入式軟件如今主導SoC設計。
IBS的這項研究也發(fā)現(xiàn),架構設計的工作投入現(xiàn)在出現(xiàn)大幅增加的趨勢。而大多數(shù)的投入是為了提升處理與通訊的效率,以確保能達成嵌入式軟件的效能目標。即使針對開發(fā)架構的投入越來越多,硬件設計的昂貴成本仍然限制業(yè)者進行擴大架構開發(fā)的意愿。
隨著處理器同步技術的進步,開發(fā)特定應用處理組件的時間與成本已被大幅降低,并創(chuàng)造出以軟件為中心的開發(fā)模式。業(yè)者現(xiàn)在可以直接掌控更高比率的軟件研發(fā)工作,也可針對實際軟件的處理負荷進行架構最佳化的調整。特定應用處理器可進行同步以滿足各種功能系統(tǒng)的效能需求,并讓系統(tǒng)擁有最高的可程序化彈性。如此一來,更多硬件組件將可轉化成軟件,而不是背道而馳。
分布式協(xié)同處理
大多數(shù)嵌入式系統(tǒng)工程師都熟悉單處理器的編程模式。但多個獨立運作的核心讓這種編程模式變得更加復雜。為維持較簡單的編程模式,可把一個或多個處理組件指派為全域的主控制器,而其它核心則視為協(xié)同處理組件,如圖一所示。
在一個異質化架構中,系統(tǒng)功能被分散至各個協(xié)同處理組件以降低這些組件的耦合性。松散的耦合模式增加了平行處理的機率,但各組件的運算負荷卻各有所異。每一個處理組件皆可進行最佳化來配合其處理需求。
圖一:分布式協(xié)同處理架構。
替代的協(xié)同處理組件包括從數(shù)碼訊號處理器(DSP),ㄧ直到固定功能的硬件加速器等各種可程序化的核心。
應用協(xié)同處理器是一種為特定應用設計微架構以快速執(zhí)行關鍵算法的可程序化處理器。這些客制化處理器具備最大化的編程效能,同時讓處理作業(yè)在內部就能完成以維持較簡單的編程模式。但客制化處理器昂貴的設計與驗證成本,讓這種模式的推廣面臨極大的阻力。不過如今業(yè)界出現(xiàn)各種自動化協(xié)同處理器合成工具,讓這種模式的吸引力持續(xù)攀升。
應用協(xié)同處理器同步
處理器同步工具必須針對應用作業(yè)的需求,來開發(fā)出處理器的實作方案。如圖二所示,串疊式的協(xié)同處理器同步流程采用一種修改后的VLIW模式。如同客制化的硬件設計,暫存器分布在各執(zhí)行單元并以客制化的連結管道來連結關鍵應用所需的資料流。而資料與指令快取是用來降低對外部存儲器的需求,圖二的范例顯示了兩個資料快取。由于協(xié)同處理器是針對特定應用所設計,因此合理的作法是運用多個資料快取,并依據(jù)算法的資料需求來策略性配置每個快取的容量。選擇合適的指令編碼模式,可以增進平行處理的效率并降低微碼(microcode)的長度。
圖二:協(xié)同處理器架構。
一個或多個協(xié)同處理器可從應用程序進行同步,圖三顯示單一協(xié)同處理器的同步流程。
同步的進入點是編譯過的二進工藝序碼,軟件開發(fā)人員運用其正常的主處理器工具鏈來編譯其程序碼。我們可用對應(profiling)與其它的效能分析工具來找出功能效能的關鍵點。在發(fā)現(xiàn)之后,這些功能將可轉移給特定應用處理器來執(zhí)行。
圖三:協(xié)同處理器合成流程。
從可執(zhí)行的二進工藝序開始,任何編譯語言以及其編譯的程序都可進行加速。包括C語言以及經(jīng)過最佳化的組譯語言,而此階段不需要原始碼。
二進工藝序碼讀入系統(tǒng)后,便可選擇要分擔至協(xié)同處理器的功能。此時要建立二進工藝序碼的模型并進行模擬,詳細追蹤存儲器的使用模式以及關鍵的執(zhí)行線路。追蹤信息是用來分析不同的資料快取、執(zhí)行單元以及聯(lián)結的組合。產(chǎn)生各種不同效能、空間與耗電量組態(tài)的協(xié)同處理器實作方案。隨著實際的作業(yè)量的不同,規(guī)劃模型的工作會耗費數(shù)分鐘到數(shù)小時。
在選擇協(xié)同處理器的組態(tài)后,會產(chǎn)生RTL層級的硬件描述以及在協(xié)同處理器上執(zhí)行的微碼指令。原始的二進工藝序碼和微碼與通訊的驅動程序將一起加入系統(tǒng)。
架構分析
協(xié)同處理器同步可用來快速分析不同的系統(tǒng)架構。應用軟件可編譯至主處理器并連結各種功能,以將其處理工作分擔給多個協(xié)同處理器。圖四顯示一個當影片、影像及音效功能都分擔到各個處理器的系統(tǒng)范例。
圖四:加密協(xié)同處理器架構分析。
經(jīng)儲存后轉送的安全應用提供一個協(xié)同處理器同步的實例。應用透過網(wǎng)絡聯(lián)機會收到經(jīng)過加密的文件。經(jīng)過解密后加以檢查并加入特定的信息,最后把修改過的文件進行加密再轉傳至下一個目的地。
本設計鎖定一個Actel M7 ProASIC3/E FPGA,此款組件內含一個軟型ARM7TDMI核心,其內有快閃組件的組態(tài)并嵌入額外的防護機制,以具有反制逆向工程的能力。模塊圖表如圖五所示:
圖五:儲存后轉送的安全架構,以AES加密標準作初始加密算法。
一個開放原始碼的程序被編譯到ARM7核心處理器,此程序碼經(jīng)過對應并選擇了想要分擔的加密功能。經(jīng)過同步后,協(xié)同處理器產(chǎn)生的協(xié)同候選方案如圖六所示。
圖六:AES加密協(xié)同處理器選項組合。
AES算法的執(zhí)行速度比原始的ARM7功能加快了3.6倍。協(xié)同處理器需要45k個邏輯閘以及21k的存儲器作為資料與指令的快取存儲器。經(jīng)常等候加密單元的處理器模塊可分擔協(xié)同處理器的加密運算作業(yè),讓ARM的整體處理負荷降低36%。
在設計AES協(xié)同處理器后,另一個需求就是加入支持額外加密的算法。Blowfish算法被直接編譯至AES協(xié)同處理器以提升ARM7 4.5倍的運算速度。相較之下,針對Blowfish算法進行同步的協(xié)同處理器,則提供加快4.7倍的加速效果。
圖七:AES與Blowfish算法比較。
客制化發(fā)展
基本的協(xié)同處理器同步作業(yè)不需要處理器設計的專業(yè)能力。但是若想進一步加快速度則必須在協(xié)同處理器的架構中加入客制化的執(zhí)行單元,而軟件功能可直接對映至這些單元。在分擔這些功能的運算負荷時,僅須定義單元界面以及基本的流量與延遲時序。同步的協(xié)同處理器將納入這些客制化單元并和它們進行聯(lián)結。業(yè)者可分析效能方面的利益,而若有需要也可完成這些客制化單元的硬件設計。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論