文献标识码: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.