文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.01.007
中文引用格式: 祝昇翔,賀志毅. 基于MCAPI的多核軟件開發方法[J].電子技術應用,2016,42(1):31-33.
英文引用格式: Zhu Shengxiang,He Zhiyi. A multicore software development method based on MCAPI[J].Application of Electronic Technique,2016,42(1):31-33.
0 引言
隨著技術的進步,電子產品更新換代的速度越來越快。單純提高主頻來提升系統性能的方式已經接近瓶頸,而使用多片處理器搭建系統又不符合產品的小型化要求。傳統的單核處理器已經不能滿足日益增長的性能需求,能夠完成并行任務處理的多核處理器應運而生。現代多核處理器主要依靠增加核數而不是頻率來提升性能,同時芯片的高集成度也帶來了資源調度和功耗等問題。隨著多核處理器并行度的增加,各類同構、異構多核處理器的出現使得軟件開發面臨著巨大的挑戰。如何在多核上高效地實現算法,如何合理地分配資源都是需要解決的問題。
1 多核DSP器件簡介
TMS320C6678是德州儀器公司(Texas Instruments,TI)在2010年推出的一款經典的同構多核數字信號處理器(Digital Signal Processor,DSP)[1],包含8個DSP內核,每個核在1.4 GHz的最高工作頻率下性能可達到22.4 G每秒浮點運算次數(FLoating-point Operations Per Second,FLOPS),支持Hyperlink等多種高速接口,可廣泛用于移動通信、醫療電子、高性能計算等領域。
核間通信(Inter Processor Communication,IPC)以及核與外設的通信是多核軟件開發的關鍵所在。針對這一需求,德州儀器公司在其新一代Keystone架構的處理器上提供了多核導航器,包括硬件隊列管理器和基于包的直接存儲訪問(Direct Memory Address,DMA),以實現核間高速數據傳輸。使用多核導航器進行核間通信,可以通過軟件對相應的控制寄存器進行讀寫和查詢實現,也可通過內部硬件進行事件觸發實現,這種方式可大大簡化核間通信處理,但是仍存在缺點。一旦軟件拓撲結構發生改變,或者需要調整核的運算負載來提升系統性能時,這部分工作量很大,而且應用受限于廠商。
2 多核通信應用程序接口概述
多核通信應用程序接口MCAPI(Multicore Communications Application Program Interface)是由多核聯盟提出的基于消息傳遞的輕量級應用程序接口標準[2],特別適用于嵌入式系統處理器核間通信和同步。MCAPI的應用不受處理器核的數目、處理器架構以及操作系統的限制,并且提供了源碼級的兼容性支持,可擴展性很強。
相對于普通的多片處理器間通信來說,多核處理器的核間通信普遍要求低延遲、高帶寬。大部分多核處理器都包含片上存儲器或高速緩存(cache)。為了避免出現計算瓶頸,核間通信需要減少不必要的存儲器訪問。
MCAPI中定義了域(domain)、節點(node)、端點(endpoint)、通道(channel)等關鍵概念。域是依賴于具體實現的,既可以是具有多個處理器核的單個芯片,也可以是板上的多個處理器。節點可以是線程、處理器或硬件加速器等,通常可用處理器核作為節點。端點是類似于套接字的通信點,一個節點通常包括多個端點。通道提供了一對端點之間的點到點的先入先出(First In First Out,FIFO)存儲器用于通信,方向為單向的。
此外,MCAPI定義了3種通信基本類型:消息、包通道和標量通道。消息是最常用的通信類型,提供了端點之間收發數據的機制,支持優先級動態調整,可用于同步、初始化和負載平衡,如圖1所示。包通道和標量通道提供了輕量級的流通信機制,相應的程序開銷很小。
3 基于Poly-Platform工具的多核軟件開發流程
3.1 Poly-Platform工具簡介
Poly-Platform是PolyCore公司提供的針對多核軟件開發的集成開發工具套件[3],包含Poly-Mapper、Poly-Generator、Poly-Messenger/MCAPI、Poly-Templates等功能模塊。采用該工具進行開發可以基于MCAPI標準建立應用程序節點,利用用戶圖形界面(Graphical User Interfaces,GUI)向導自動生成代碼,在幾乎不修改源代碼的基礎上,實現應用程序在同構多核、異構多核、多處理器等不同平臺上的靈活配置和擴展,不受限于廠商,應用前景廣闊。
3.2 多核軟件開發流程
將Poly-Platform軟件使用插件方式集成到Eclipse軟件環境中后會在TI的Code Composer Studio開發環境下出現相應的菜單和選項,即可進行基于Poly-Platform的多核軟件開發。這里選擇TMS320C6678多核DSP器件進行開發,并且以8個DSP核之間依次相連并傳遞數據的環形拓撲結構為例描述開發流程。
(1)建立拓撲結構。首先建立一個拓撲(Topology)工程,拓撲主要描述了應用程序在(多核)平臺上的映射關系。借助Poly-Mapper工具在建立工程后生成的拓撲映射文件中進行屬性設置,選擇處理器類型,設置節點個數為8(對應8個DSP核),名稱分別為N0—N7,操作系統為TI的DSP專用操作系統。然后在拓撲圖中繪制8個節點,并在每個節點中間繪制一條鏈路(link),得到環形結構的8節點拓撲結構圖,如圖2所示。
(2)建立內存映射文件并分配資源。建立內存映射文件并分配若干個段(section),設置其起始地址、大小、方向等參數。這些段分別用于內存訪問區域(Memory Access Regions,MARs)和鏈路(link)。其中內存訪問區域包括一些常用的資源池(pool),如消息池、消息隊列池、數據池、等待池等,不同節點之間通過MARs共享資源可以提高資源利用效率,提升系統性能。鏈路即對應拓撲結構圖(見如圖2)中各節點之間的通信鏈路,
(3)在拓撲結構圖中進行內存映射。針對每一個節點(N0—N7),設置其可訪問的內存訪問區域。然后,還需要對內存訪問區域包含的每一個資源池進行參數設置,如起始地址等。同樣地,對鏈路也需要進行參數設置。
(4)建立節點工程。這里與常規的DSP開發流程基本一致,針對8個節點(對應處理器核)分別建立節點工程,然后需要將這8個節點工程與第一步建立的拓撲工程建立映射關系。
(5)編寫初始化代碼和配置文件。首先利用Poly-Generator工具將拓撲結構圖轉化為基于拓撲定義的C語言和相應的頭文件,并存放到每個節點工程的工作目錄下。然后利用Poly-Template工具,按照軟件自帶的MCAPI模板,自動為每個節點工程生成節點初始化文件和硬件初始化文件。最后編寫TI專用的實時軟件組件(Real Time Software Component,RTSC)配置文件和用于存儲器分配的連接器命令文件。
(6)編寫每個節點工程的主函數。主函數主要內容包括調用節點初始化函數,硬件初始化函數,以及節點之間消息收發的函數(基于MCAPI)等。這些都可以利用Poly-Template工具提供的模板快速完成。圖3為用模板生成的代碼示例,其功能為N1節點接收消息,然后將其加1后再發送給N2節點。
(7)編寫每個節點工程的應用程序。將用戶的算法進行代碼實現并加入節點工程,這一步與常規的DSP開發流程完全一致。
(8)建立目標配置文件和RTSC平臺。首先建立用于仿真調試的目標配置文件,然后建立RTSC平臺用于硬件配置,并將其加入節點工程。這些都是TI專用的文件。
(9)編譯、調試、運行。對每個節點工程進行編譯、調試、運行,觀察程序運行結果。注意不要編譯拓撲工程。
(10)程序性能分析和優化。借助Poly-inspector工具提供的交互式報告環境,可以對多核軟件實現進行性能分析,方便用戶進行程序優化和調整。
4 某雷達信號處理軟件設計方案示例
某雷達信號處理機采用TI的TMS320C6678多核DSP為主處理芯片,功能為雷達導引頭主動探測處理[4]。其拓撲結構為主從方式,核0為主控核,負責DSP內部資源配置和初始化、自檢、波形參數控制、波門控制、對外接口控制等,核1、核2、核3分別負責和通道、方位差通道、俯仰差通道的脈壓數據相干積累、恒虛警檢測、測距等,其他核未使用,目前已完成軟件設計和實現。但是,現根據項目需要增加被動信號處理功能和由此新增的部分對外接口,軟件架構發生較大改變。此時如果仍舊采用傳統的DSP軟件開發方法,則軟件移植的工作量較大,特別是需要重新設計核間通信的代碼。而采用基于MCAPI的多核軟件開發方法[5]并借助Poly-Platform軟件進行開發,就可以保留原有的應用程序不變,快速、靈活地生成新的拓撲結構,并按照軟件模板快速生成符合標準的核間通信程序,代碼改動量很小。采用方案為新增一個核4負責被動信號處理,同時新增1個核5,負責新增的對外接口,以及核0負責原有的一部分工作,以實現運算負載平衡,如圖4所示。在實際中根據需要還可快速地改為其他拓撲結構并進行性能優化,比如將主從拓撲結構改為數據流結構。
5 結論
當前計算環境變得越來越多元化,DSP、可編程邏輯器件(Field Programmable Gate Array,FPGA)、圖形處理器(Graphics Processing Unit,GPU)都具有較強的運算能力,并適用于不同的應用場合。多核處理器是當前的研究熱點,而高集成度的異構多核處理器是未來的發展趨勢。基于多核的軟件開發始終是一個難點,給軟件開發人員帶來了巨大的挑戰。本文提出的基于MCAPI的多核軟件開發方法可應用于同構多核、異構多核以及多處理器平臺,通用性較強,不受廠商、處理器、操作系統的限制,可幫助用戶簡化軟件設計和優化過程中的拓撲設計、運算負載平衡以及核間通信和資源分配等工作,顯著地提升開發效率。
參考文獻
[1] Texas Instruments,Inc.TMS320C6678 multicore fixed and floating-point digital signal processor[Z].2014.
[2] The Multicore Association.Multicore Communications API (MCAPI) Specification V2.015[Z].2011.
[3] PolyCore Software,Inc.Poly-Platform user guide[Z].2012.
[4] 楊康.基于多核DSP的彈載毫米波雙模制導雷達關鍵技術研究[D].南京:南京航空航天大學,2013.
[5] ERIC G.Using MCAPI/MDMA for ADSP-SC58x Dual-SHARC Audio Talkthrough[Z].2015.