《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于MCAPI的多核軟件開發(fā)方法
基于MCAPI的多核軟件開發(fā)方法
2016年電子技術(shù)應(yīng)用第1期
祝昇翔,賀志毅
北京遙感設(shè)備研究所,北京100854
摘要: 提出了一種基于多核通信應(yīng)用程序接口(MCAPI)標(biāo)準(zhǔn)的多核軟件開發(fā)方法,該標(biāo)準(zhǔn)提供了基于消息傳遞的API,適用于核間通信,大大提高了應(yīng)用程序在多核處理器上的可移植性。采用poly-platform軟件工具進(jìn)行多核軟件開發(fā),首先建立拓?fù)浣Y(jié)構(gòu),然后定義節(jié)點(diǎn)工程,完成存儲(chǔ)分配等工作,再利用MCAPI模板完成節(jié)點(diǎn)間通信,最后編制各個(gè)節(jié)點(diǎn)的應(yīng)用程序。該軟件開發(fā)流程獨(dú)立于廠商、器件和操作系統(tǒng),可將應(yīng)用程序快速靈活地映射到不同的同構(gòu)和異構(gòu)多核架構(gòu)上,大大提高了多核軟件的開發(fā)效率。
中圖分類號(hào): TP311.52
文獻(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.
A multicore software development method based on MCAPI
Zhu Shengxiang,He Zhiyi
Beijing Institute of Remote Sensing Equipment,Beijing 100854,China
Abstract: This paper presents a multicore software development method based on multicore communications application program interface(MCAPI)standard. This standard which provides APIs based on message is used for inter processor communication(IPC). It improves the portability of application programs on multicore processors. A software tool named poly-platform is used for multicore software development. At first,the topology is set up. Then a node project is defined and memories are allocated. The template of MCAPI is used for generating codes for communications among nodes.Finally,application programs of every nodes should be finished.This procedure of software development is independent of companies,devices and operating systems.It could map the application programs to different homogeneous and heterogeneous multicore architectures quickly and flexibly,improve the efficiency greatly.
Key words : multicore communications application program interface;inter processor communication

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)的程序開銷很小。

qrs1-t1.gif

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所示。

qrs1-t2.gif

    (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)。

qrs1-t3.gif

    (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)。

qrs1-t4.gif

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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。