DSP

【DSP开发】硬件信号量在多核处理器核间通信中的应用

2019-07-13 10:31发布

硬件信号量在多核处理器核间通信中的应用

刘德保1,汪安民1,韩道文2
1.同方电子科技有限公司研究所,九江 332009;2.解放军电子工程学院
摘要: 在多核处理器的软件设计中,核间通信机制是关键所在,有效合理的核间通信可以发挥多核处理器的并行处理能力。中断和查询方式是传统的核间通信手段,但存在丢失中断和查询效率低的缺点。为解决这一问题,多核处理器提供了一种全新的硬件信号量机制,用于核间通信。本文以多核DSP芯片TMS320C6678为例,描述了硬件信号量的工作原理和方法以及模块的结构和配置,并给出两个核之间通信的实例。 关键词: 多核处理器;信号量;中断 中图分类号: TP336文献标识码: A Application of Hardware Semaphore on Inter-processor Communication of Multicore Processor
Liu Debao1,Wang Anmin1,Han Daowen2
(1.Research of Tongfang Electronic and Technology Co. Ltd., Jiujiang 332009, China; 2. Electronical Engineering Institute of PLA)
Abstract:In the software design of multicore processor,interprocessor communication is the important part.An effective interprocessor communication mechanism can fully exploit the parallel processing ability of multicore processor.The traditional ways of interprocessor communication are interrupt and query mode, which can lead to miss interrupt and query inefficiency. In order to solve this problem,the paper presents a new interprocessor communication way based on hardware semaphore. Taking multicore DSP chip TMS320C6678 as the example, the paper introduces the operating principle, method, functional block and configuration of the hardware semaphore module,and gives an example based on two cores communication at last.
Key words:multicore processor;semaphore;interrupt 引言
    多核处理器由于片内集成多个处理器,在对处理能力要求较高的应用场合得到了大规模使用;同时多核处理器的超强处理能力,也推动了产品功能的多样化。目前,多核处理器主要以片内集成多款不同类型的处理芯片为主,一般集成FPGA/DSP/ARM/CPU以及专用的协处理器等,如TI公司的AK2系列,集成多个DSP和多个ARM核。此外,也有集成单一型号的多个处理器,如多核DSP芯片TMS320C66系列,集成了2、4或8个同样的DSP核。
    多核处理器中的多个单核一般需要联合工作,联合工作时它们之间的通信、握手、数据交换非常重要。尤其是在软件复杂度较高,且对运行时序要求严格的情况下,核间通信成为整个软件的关键。核间通信一般有3种方式:共享数据空间、硬件中断和任务中断。共享数据空间,是指两个核都可以访问相同的内存空间,根据其信息来交换数据和状态。该方式一般需要逐个核去查询,但采用查询方法一般很难适用于实时性要求较高的场合。硬件中断方式,是核之间通过硬件中断方式来通知状态,这种方式实时性最高,可以实时响应中断,但引起的问题是:如果存在多个任务,核间中断会打断正在运行的较高优先级的事件;如果在高级事件中屏蔽中断,在多次中断中只会响应最后一次中断,导致前面的中断丢失。为了解决这两个问题,多核处理器一般采用任务中断方式来实现核间信息交互。在单核的软件中,任务是实时运行的进程,由信号量来触发。一个任务完成后退出,信号量会减1,直到该任务对应的信号量为0;触发一个任务,就会给该任务的信号量加1。在多核处理器中,将信号量做成硬件信号量(Hardware Semaphore)来实现核间通信,硬件信号量具有硬件中断的实时性,又具有任务的排队机制,可以较好地解决核间通信问题。
    本文以8核DSP芯片TMS320C6678为例介绍了硬件信号量的应用。文中详细介绍了硬件信号量模块的结构和寄存器组合,以及实现核间中断的原理,最后以实例介绍两个核之间利用硬件信号量交互信息的方法和流程。
1 多核DSP及其结构
    TMS320C6678(C6678)是TI公司多核处理器中的一款8核浮点型DSP,最高工作频率达到1.25 GHz,单核可以提供40 GMAC定点计算或者20 GFLOPS浮点计算能力,单个芯片可以提供320 GMAC或者160 GFLOPS计算能力。C6678的片内结构如图1所示。 图1 TMS320C6678内部结构图
    C6678的每个核具有32 KB的程序、32 KB的数据以及512 KB的二级Cache存储空间,芯片片内具有一个4 MB的共享SRAM。C6678具有DDR3控制器接口,可以外接DDR3,直接寻址范围达到8 GB。C6678的片内设有RapidIO、PCIe、EMIF以及I2C/SPI等接口,这些接口通过片内的TeraNet总线和各个处理器交互数据。    从图1中可以看出,核访问共享RAM的速度最快,它们之间不通过TeraNet,而是有专用的数据总线,也不会和其他外设产生冲突,每个核访问共享RAM的速率大概在50 Gb/s。
    每个核访问DDR3的速度仅次于访问共享RAM,因为DDR3的数据需要通过共享RAM过渡,其访问速度读写有所差别,读速率可以到10 Gb/s,写速率可以到20 Gb/s。核访问其他片内和片外设备都要经过TeraNet,可能存在总线仲裁,但这些外设一般不会长时间占据TeraNet总线。各个核通过TeraNet访问硬件信号量,也可以通过TeraNet和HyperLink接口实现两个芯片之间的硬件信号量访问。
2 硬件信号量模块
    硬件信号量模块的组成如图2所示,主要由信号量模块、寄存器组和中断模块3部分组成。 图2 硬件信号量模块
    硬件信号量模块由64个独立的信号量组成,这64个信号量和硬件资源以及核之间没有必然联系,由软件根据每个核处理任务的多少分配,任务多的核获得更多的信号量。对信号量的访问有3种方式:直接访问(图中的SEM_Dir)、间接访问(SEM_inDir)和查询方式(SEM_Query)。这3种方式软件上访问的方法都一样,就是对相应的寄存器进行读写操作,但不同访问方式的硬件响应机制不同。
    直接访问方式下,如果该信号量空闲,访问的核将马上捕获该信号量;如果该信号量被其他核占用,将返回,整个访问工作结束。
    间接访问方式和直接访问的唯一差别就是当该信号量被占用时,访问的事件被发布到队列中排队,一旦信号量被其他核释放,队列采用先进先出的方式给相应的核发出中断,相应的核占用该信号量。
    查询方式是利用寄存器查询信号量的状态。这3种访问方式的状态如表1所列。
表1 三种硬件信号量访问的状态       硬件信号量有两个中断,其中一个为正常的捕获中断,该中断由读写寄存器启动,由信号量被释放触发,反映到EOI(End Of Interrupt)寄存器,该寄存器发送中断到相应的CPU,CPU根据中断标志寄存器中(高32个信号量反映到FLAGH_0,低32个信号量反映到FLAGL_0)的标志位识别是来自哪个信号量的中断。CPU完成中断服务程序,退出中断时要通过FLAG_C寄存器来清除标志位,为下一次中断作准备;CPU也可以通过FLAG_S寄存器人为设置一个中断标志,产生一个中断。
    硬件信号量的另外一个中断为错误中断,当出现错误访问时会产生该中断,中断响应及操作方法与捕获中断类似。产生错误的情况有:去释放某个空闲信号量;去释放其他核占用的信号量;捕获一个自身占用的信号量;多次去捕获一个被占用的信号量。
3 软件设计
    硬件信号量的软件设计主要包括初始化、中断响应和中断服务程序。由于硬件信号量是用于核间通信,使得调试工作需要在多个核之间切换,查阅各自寄存器。
    因为是核间通信,采用单核常用的断点和单步这些调试方法将非常困难,需要软件设计者非常清晰地了解多个核的程序运行情况。
    下面是核0和核1之间通过硬件信号量10来实现通信的例子。软件流程如图3所示。 图3 软件流程
    首先各个核进行各自寄存器的初始化,主要包括硬件信号量寄存器和中断寄存器的初始化。需要注意的是,由于每个核都进行初始化,而且每个核都可以访问这些寄存器,所以不能出现配置的紊乱,也不能出现多个核同时对某个寄存器配置的情况,这样可能会写入错误数据(即使在写入同样数据情况下)。
    为了避免核1首先抢占信号量10,程序中核0先锁定核1,然后确保自己可以捕获到信号量10,捕获后释放核1,此时核1可以请求硬件信号量10。
    但此时,信号量10被核0占用,核1无法得到请求,核1的请求被放到请求队列中,核1的请求任务结束,可以进行其他任务。一旦核0释放了信号量10,核1会收到一个硬件中断,因为中断优先级高于任务,核1将响应该中断,进入中断服务程序,完成中断服务程序后会继续执行被打断的任务。
    硬件信号量的中断服务程序一般用于共享RAM的读写,因为共享RAM只有一组数据总线,无法实现多个核同时读写。如果多个核同时读写该空间,会出现等待现象,使得处理器的使用效率降低。
    如果时序处理不好,会出现总线互锁现象,使得程序无法进行。采用硬件信号量后,可以按照优先排队方法进行队列管理,而且由于一个核不可能多次申请一个硬件信号量,所以在软件上很容易管理。如果软件功能较多、设计复杂,可以通过增加硬件信号量来区分,最多可以增加64个硬件信号量,基本能够满足当前处理器的要求。
结语
    硬件信号量是多核处理器中一种新模块,它将单核的信号量硬件化,实现快速实时的操作,并和硬件中断联系在一起,实现了多核之间的握手协议。硬件信号量具有相应的队列排队机制,既不会出现中断丢失问题,也不会出现多次访问问题。硬件信号量解决了常规硬件中断中多次中断不响应会丢失的问题,实现了软件和硬件的相结合,在多核软件编程中,是比较好的一种核间通信机制。 参考文献 [1] 李岩,谷萍萍.硬件实时操作系统信号量管理的设计与实现[J].电子技术应用, 2010(11). [2] Texas Instruments Inc. TMS320C6678 Multicore Fixed and FloatingPoint Digital Signal Processor Data Manual[EB/OL].(201304)[201407].http://www.ti.com/. [3] Texas Instruments Inc. KeyStone Architecture Semaphore2 Hardware Module User Guide[EB/OL].(201204) [201407].http://www.ti.com/. [4] 丁有源,汪安民.基于多核任务并行处理的DSP软硬件设计[J].单片机与嵌入式系统应用, 2012(5).