文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.01.007
中文引用格式: 祝昇翔,賀志毅. 基于MCAPI的多核軟件開發(fā)方法[J].電子技術(shù)應(yīng)用,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 引言
隨著技術(shù)的進(jìn)步,電子產(chǎn)品更新?lián)Q代的速度越來越快。單純提高主頻來提升系統(tǒng)性能的方式已經(jīng)接近瓶頸,而使用多片處理器搭建系統(tǒng)又不符合產(chǎn)品的小型化要求。傳統(tǒng)的單核處理器已經(jīng)不能滿足日益增長的性能需求,能夠完成并行任務(wù)處理的多核處理器應(yīng)運(yùn)而生。現(xiàn)代多核處理器主要依靠增加核數(shù)而不是頻率來提升性能,同時(shí)芯片的高集成度也帶來了資源調(diào)度和功耗等問題。隨著多核處理器并行度的增加,各類同構(gòu)、異構(gòu)多核處理器的出現(xiàn)使得軟件開發(fā)面臨著巨大的挑戰(zhàn)。如何在多核上高效地實(shí)現(xiàn)算法,如何合理地分配資源都是需要解決的問題。
1 多核DSP器件簡介
TMS320C6678是德州儀器公司(Texas Instruments,TI)在2010年推出的一款經(jīng)典的同構(gòu)多核數(shù)字信號(hào)處理器(Digital Signal Processor,DSP)[1],包含8個(gè)DSP內(nèi)核,每個(gè)核在1.4 GHz的最高工作頻率下性能可達(dá)到22.4 G每秒浮點(diǎn)運(yùn)算次數(shù)(FLoating-point Operations Per Second,F(xiàn)LOPS),支持Hyperlink等多種高速接口,可廣泛用于移動(dòng)通信、醫(yī)療電子、高性能計(jì)算等領(lǐng)域。
核間通信(Inter Processor Communication,IPC)以及核與外設(shè)的通信是多核軟件開發(fā)的關(guān)鍵所在。針對(duì)這一需求,德州儀器公司在其新一代Keystone架構(gòu)的處理器上提供了多核導(dǎo)航器,包括硬件隊(duì)列管理器和基于包的直接存儲(chǔ)訪問(Direct Memory Address,DMA),以實(shí)現(xiàn)核間高速數(shù)據(jù)傳輸。使用多核導(dǎo)航器進(jìn)行核間通信,可以通過軟件對(duì)相應(yīng)的控制寄存器進(jìn)行讀寫和查詢實(shí)現(xiàn),也可通過內(nèi)部硬件進(jìn)行事件觸發(fā)實(shí)現(xiàn),這種方式可大大簡化核間通信處理,但是仍存在缺點(diǎn)。一旦軟件拓?fù)浣Y(jié)構(gòu)發(fā)生改變,或者需要調(diào)整核的運(yùn)算負(fù)載來提升系統(tǒng)性能時(shí),這部分工作量很大,而且應(yīng)用受限于廠商。
2 多核通信應(yīng)用程序接口概述
多核通信應(yīng)用程序接口MCAPI(Multicore Communications Application Program Interface)是由多核聯(lián)盟提出的基于消息傳遞的輕量級(jí)應(yīng)用程序接口標(biāo)準(zhǔn)[2],特別適用于嵌入式系統(tǒng)處理器核間通信和同步。MCAPI的應(yīng)用不受處理器核的數(shù)目、處理器架構(gòu)以及操作系統(tǒng)的限制,并且提供了源碼級(jí)的兼容性支持,可擴(kuò)展性很強(qiáng)。
相對(duì)于普通的多片處理器間通信來說,多核處理器的核間通信普遍要求低延遲、高帶寬。大部分多核處理器都包含片上存儲(chǔ)器或高速緩存(cache)。為了避免出現(xiàn)計(jì)算瓶頸,核間通信需要減少不必要的存儲(chǔ)器訪問。
MCAPI中定義了域(domain)、節(jié)點(diǎn)(node)、端點(diǎn)(endpoint)、通道(channel)等關(guān)鍵概念。域是依賴于具體實(shí)現(xiàn)的,既可以是具有多個(gè)處理器核的單個(gè)芯片,也可以是板上的多個(gè)處理器。節(jié)點(diǎn)可以是線程、處理器或硬件加速器等,通??捎锰幚砥骱俗鳛楣?jié)點(diǎn)。端點(diǎn)是類似于套接字的通信點(diǎn),一個(gè)節(jié)點(diǎn)通常包括多個(gè)端點(diǎn)。通道提供了一對(duì)端點(diǎn)之間的點(diǎn)到點(diǎn)的先入先出(First In First Out,F(xiàn)IFO)存儲(chǔ)器用于通信,方向?yàn)閱蜗虻摹?/p>
此外,MCAPI定義了3種通信基本類型:消息、包通道和標(biāo)量通道。消息是最常用的通信類型,提供了端點(diǎn)之間收發(fā)數(shù)據(jù)的機(jī)制,支持優(yōu)先級(jí)動(dòng)態(tài)調(diào)整,可用于同步、初始化和負(fù)載平衡,如圖1所示。包通道和標(biāo)量通道提供了輕量級(jí)的流通信機(jī)制,相應(yīng)的程序開銷很小。
3 基于Poly-Platform工具的多核軟件開發(fā)流程
3.1 Poly-Platform工具簡介
Poly-Platform是PolyCore公司提供的針對(duì)多核軟件開發(fā)的集成開發(fā)工具套件[3],包含Poly-Mapper、Poly-Generator、Poly-Messenger/MCAPI、Poly-Templates等功能模塊。采用該工具進(jìn)行開發(fā)可以基于MCAPI標(biāo)準(zhǔn)建立應(yīng)用程序節(jié)點(diǎn),利用用戶圖形界面(Graphical User Interfaces,GUI)向?qū)ё詣?dòng)生成代碼,在幾乎不修改源代碼的基礎(chǔ)上,實(shí)現(xiàn)應(yīng)用程序在同構(gòu)多核、異構(gòu)多核、多處理器等不同平臺(tái)上的靈活配置和擴(kuò)展,不受限于廠商,應(yīng)用前景廣闊。
3.2 多核軟件開發(fā)流程
將Poly-Platform軟件使用插件方式集成到Eclipse軟件環(huán)境中后會(huì)在TI的Code Composer Studio開發(fā)環(huán)境下出現(xiàn)相應(yīng)的菜單和選項(xiàng),即可進(jìn)行基于Poly-Platform的多核軟件開發(fā)。這里選擇TMS320C6678多核DSP器件進(jìn)行開發(fā),并且以8個(gè)DSP核之間依次相連并傳遞數(shù)據(jù)的環(huán)形拓?fù)浣Y(jié)構(gòu)為例描述開發(fā)流程。
(1)建立拓?fù)浣Y(jié)構(gòu)。首先建立一個(gè)拓?fù)洌═opology)工程,拓?fù)渲饕枋隽藨?yīng)用程序在(多核)平臺(tái)上的映射關(guān)系。借助Poly-Mapper工具在建立工程后生成的拓?fù)溆成湮募羞M(jìn)行屬性設(shè)置,選擇處理器類型,設(shè)置節(jié)點(diǎn)個(gè)數(shù)為8(對(duì)應(yīng)8個(gè)DSP核),名稱分別為N0—N7,操作系統(tǒng)為TI的DSP專用操作系統(tǒng)。然后在拓?fù)鋱D中繪制8個(gè)節(jié)點(diǎn),并在每個(gè)節(jié)點(diǎn)中間繪制一條鏈路(link),得到環(huán)形結(jié)構(gòu)的8節(jié)點(diǎn)拓?fù)浣Y(jié)構(gòu)圖,如圖2所示。
(2)建立內(nèi)存映射文件并分配資源。建立內(nèi)存映射文件并分配若干個(gè)段(section),設(shè)置其起始地址、大小、方向等參數(shù)。這些段分別用于內(nèi)存訪問區(qū)域(Memory Access Regions,MARs)和鏈路(link)。其中內(nèi)存訪問區(qū)域包括一些常用的資源池(pool),如消息池、消息隊(duì)列池、數(shù)據(jù)池、等待池等,不同節(jié)點(diǎn)之間通過MARs共享資源可以提高資源利用效率,提升系統(tǒng)性能。鏈路即對(duì)應(yīng)拓?fù)浣Y(jié)構(gòu)圖(見如圖2)中各節(jié)點(diǎn)之間的通信鏈路,
(3)在拓?fù)浣Y(jié)構(gòu)圖中進(jìn)行內(nèi)存映射。針對(duì)每一個(gè)節(jié)點(diǎn)(N0—N7),設(shè)置其可訪問的內(nèi)存訪問區(qū)域。然后,還需要對(duì)內(nèi)存訪問區(qū)域包含的每一個(gè)資源池進(jìn)行參數(shù)設(shè)置,如起始地址等。同樣地,對(duì)鏈路也需要進(jìn)行參數(shù)設(shè)置。
(4)建立節(jié)點(diǎn)工程。這里與常規(guī)的DSP開發(fā)流程基本一致,針對(duì)8個(gè)節(jié)點(diǎn)(對(duì)應(yīng)處理器核)分別建立節(jié)點(diǎn)工程,然后需要將這8個(gè)節(jié)點(diǎn)工程與第一步建立的拓?fù)涔こ探⒂成潢P(guān)系。
(5)編寫初始化代碼和配置文件。首先利用Poly-Generator工具將拓?fù)浣Y(jié)構(gòu)圖轉(zhuǎn)化為基于拓?fù)涠x的C語言和相應(yīng)的頭文件,并存放到每個(gè)節(jié)點(diǎn)工程的工作目錄下。然后利用Poly-Template工具,按照軟件自帶的MCAPI模板,自動(dòng)為每個(gè)節(jié)點(diǎn)工程生成節(jié)點(diǎn)初始化文件和硬件初始化文件。最后編寫TI專用的實(shí)時(shí)軟件組件(Real Time Software Component,RTSC)配置文件和用于存儲(chǔ)器分配的連接器命令文件。
(6)編寫每個(gè)節(jié)點(diǎn)工程的主函數(shù)。主函數(shù)主要內(nèi)容包括調(diào)用節(jié)點(diǎn)初始化函數(shù),硬件初始化函數(shù),以及節(jié)點(diǎn)之間消息收發(fā)的函數(shù)(基于MCAPI)等。這些都可以利用Poly-Template工具提供的模板快速完成。圖3為用模板生成的代碼示例,其功能為N1節(jié)點(diǎn)接收消息,然后將其加1后再發(fā)送給N2節(jié)點(diǎn)。
(7)編寫每個(gè)節(jié)點(diǎn)工程的應(yīng)用程序。將用戶的算法進(jìn)行代碼實(shí)現(xiàn)并加入節(jié)點(diǎn)工程,這一步與常規(guī)的DSP開發(fā)流程完全一致。
(8)建立目標(biāo)配置文件和RTSC平臺(tái)。首先建立用于仿真調(diào)試的目標(biāo)配置文件,然后建立RTSC平臺(tái)用于硬件配置,并將其加入節(jié)點(diǎn)工程。這些都是TI專用的文件。
(9)編譯、調(diào)試、運(yùn)行。對(duì)每個(gè)節(jié)點(diǎn)工程進(jìn)行編譯、調(diào)試、運(yùn)行,觀察程序運(yùn)行結(jié)果。注意不要編譯拓?fù)涔こ獭?/p>
(10)程序性能分析和優(yōu)化。借助Poly-inspector工具提供的交互式報(bào)告環(huán)境,可以對(duì)多核軟件實(shí)現(xiàn)進(jìn)行性能分析,方便用戶進(jìn)行程序優(yōu)化和調(diào)整。
4 某雷達(dá)信號(hào)處理軟件設(shè)計(jì)方案示例
某雷達(dá)信號(hào)處理機(jī)采用TI的TMS320C6678多核DSP為主處理芯片,功能為雷達(dá)導(dǎo)引頭主動(dòng)探測處理[4]。其拓?fù)浣Y(jié)構(gòu)為主從方式,核0為主控核,負(fù)責(zé)DSP內(nèi)部資源配置和初始化、自檢、波形參數(shù)控制、波門控制、對(duì)外接口控制等,核1、核2、核3分別負(fù)責(zé)和通道、方位差通道、俯仰差通道的脈壓數(shù)據(jù)相干積累、恒虛警檢測、測距等,其他核未使用,目前已完成軟件設(shè)計(jì)和實(shí)現(xiàn)。但是,現(xiàn)根據(jù)項(xiàng)目需要增加被動(dòng)信號(hào)處理功能和由此新增的部分對(duì)外接口,軟件架構(gòu)發(fā)生較大改變。此時(shí)如果仍舊采用傳統(tǒng)的DSP軟件開發(fā)方法,則軟件移植的工作量較大,特別是需要重新設(shè)計(jì)核間通信的代碼。而采用基于MCAPI的多核軟件開發(fā)方法[5]并借助Poly-Platform軟件進(jìn)行開發(fā),就可以保留原有的應(yīng)用程序不變,快速、靈活地生成新的拓?fù)浣Y(jié)構(gòu),并按照軟件模板快速生成符合標(biāo)準(zhǔn)的核間通信程序,代碼改動(dòng)量很小。采用方案為新增一個(gè)核4負(fù)責(zé)被動(dòng)信號(hào)處理,同時(shí)新增1個(gè)核5,負(fù)責(zé)新增的對(duì)外接口,以及核0負(fù)責(zé)原有的一部分工作,以實(shí)現(xiàn)運(yùn)算負(fù)載平衡,如圖4所示。在實(shí)際中根據(jù)需要還可快速地改為其他拓?fù)浣Y(jié)構(gòu)并進(jìn)行性能優(yōu)化,比如將主從拓?fù)浣Y(jié)構(gòu)改為數(shù)據(jù)流結(jié)構(gòu)。
5 結(jié)論
當(dāng)前計(jì)算環(huán)境變得越來越多元化,DSP、可編程邏輯器件(Field Programmable Gate Array,F(xiàn)PGA)、圖形處理器(Graphics Processing Unit,GPU)都具有較強(qiáng)的運(yùn)算能力,并適用于不同的應(yīng)用場合。多核處理器是當(dāng)前的研究熱點(diǎn),而高集成度的異構(gòu)多核處理器是未來的發(fā)展趨勢(shì)?;诙嗪说能浖_發(fā)始終是一個(gè)難點(diǎn),給軟件開發(fā)人員帶來了巨大的挑戰(zhàn)。本文提出的基于MCAPI的多核軟件開發(fā)方法可應(yīng)用于同構(gòu)多核、異構(gòu)多核以及多處理器平臺(tái),通用性較強(qiáng),不受廠商、處理器、操作系統(tǒng)的限制,可幫助用戶簡化軟件設(shè)計(jì)和優(yōu)化過程中的拓?fù)湓O(shè)計(jì)、運(yùn)算負(fù)載平衡以及核間通信和資源分配等工作,顯著地提升開發(fā)效率。
參考文獻(xiàn)
[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ǎo)雷達(dá)關(guān)鍵技術(shù)研究[D].南京:南京航空航天大學(xué),2013.
[5] ERIC G.Using MCAPI/MDMA for ADSP-SC58x Dual-SHARC Audio Talkthrough[Z].2015.