编辑推荐: |
本文主要介绍TMS320C6678处理器开发中比较常用的两种多核通信方式:TI-IPC和OpenMP,以及多核编程注意事项。希望能够帮助大家。
本文来自于CSDN ,由火龙果软件Linda编辑、推荐。 |
|
前 言
嵌入式领域的处理器已向多核架构迅速发展,TI公司的KeyStone架构的TMS320C6678是目前市面上性能最高的多核DSP处理器。
TMS320C6678集成8核C66x DSP处理器,每个内核频率高达1.25 GHz,提供每秒高达40
GMAC定点运算和20 GFLOP浮点运算能力;1片TMS320C6678提供等效达10 GHz的内核频率,单精度浮点并行运算能力理论上可达160
GFLOP,是TS201S的50倍、C67x+的115.2倍,适合于诸如油气勘探、雷达信号处理、图像处理以及定位导航等对定浮点运算能力及实时性有较高要求的超高性能计算应用。
然而,核间通信是多核处理器系统所面临的主要难点,通信机制的优劣直接影响多核处理器的性能,高效的通信机制是发挥多核处理器高性能的重要保障。
创龙科技(Tronlong)专注于DSP、ARM、FPGA多核异构技术开发,本文为您介绍TMS320C6678处理器开发中比较常用的两种多核通信方式:TI-IPC和OpenMP,以及多核编程注意事项。
1 硬件平台
本文基于创龙科技TL6678-EasyEVM评估板进行演示。
TL6678-EasyEVM是一款基于TI KeyStone架构C6000系列TMS320C6678八核C66x定点/浮点高性能处理器设计的高端多核DSP评估板,由核心板与底板组成。核心板经过专业的PCB
Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
评估板接口资源丰富,引出双路千兆网口、SRIO、PCIe等高速通信接口,方便用户快速进行产品方案评估与技术预研。
TL6678-EasyEVM评估板视频简介
开发案例主要包括:
(1) 裸机开发案例
(2) RTOS(SYS/BIOS)开发案例
(3) IPC、OpenMP 多核开发案例
(4) SRIO、PCIe、双千兆网口开发案例
(5) 图像处理开发案例
(6) DSP算法开发案例
2 TI-IPC
2.1简介
TI-IPC(Inter-Processor Communication)组件提供与处理器硬件无关的API,可用于多核处理器核间通信、同一处理器进程间通信和设备间通信。API支持消息传递、流和链接列表,它们在单处理器和多处理器中配置均可兼容。
TI-IPC被设计在运行SYS/BIOS应用程序的处理器上使用,一般为DSP处理器(如TMS320C6678、TMS320C6657),但在某些情况下亦可能是ARM处理器。
IPC常见的通信模块如下:
2.2常用模块
2.2.1 MessageQ
该模块具有如下特点:
(1) 兼容性强,可在不更改运行代码的情况移植至另一个支持TI-IPC MessageQ的处理器或其他传输层(如Shared
Memory、Multicore Navigator、SRIO)。
(2) 支持可变长度消息的结构化发送与接收。
(3) 单个MessageQ队列支持单个reader和多个writer。
(4) 消息接收支持超时机制。
(5) reader可根据消息头部信息对writer进行确认后再回复。
(6) Ipc_start()会帮助用户完成下图中灰色框内的功能,用户仅需关注红色框中的内容即可,
MessageQ通过消息队列发送和接收消息。reader是一个从消息队列中读取消息的线程,writer是一个将消息写入消息队列的线程。每个消息队列都有一个reader,但可有多个writer。
■ reader:调用MessageQ_create()、MessageQ_get()、MessageQ_free()和MessageQ_delete()。
■ writer:调用MessageQ_open()、MessageQ_alloc()、MessageQ_put()和MessageQ_close()。
MessageQ常见的工作流程如下所示。
下面以多核IPC通信的shmIpcBenchmark案例为例,分析代码中MessageQ的使用,见图中注释。
2.2.2 Notify
该模块具有如下特点:
(1) 可独立于MessageQ模块进行使用。
(2) 着重于多核通知功能,是更为简单的多核通信形式。
(3) 仅可基于Shared Memroy方式进行使用。
Notify通过硬件中断传输消息,Receiver注册Notify事件中断,Sender通过Notify发送事件中断,从而实现通知并携带小量消息的目的。
■ Receiver:调用Notify_registerEvent()注册事件中断服务函数。
■ Sender:调用Notify_sendEvent()发送事件中断。
Notify常见的工作流程如下所示。
2.3物理传输方式
TI-IPC的数据传输需结合特定物理硬件与底层驱动,方可实现两个线程在同一个设备或跨设备间进行通信。常用三种的物理传输方式包括Shared
Memory、Multicore Navigator和SRIO,具体说明如下。
3 OpenMP
3.1简介
OpenMP是一种多核开发软件框架,其主要特性如下:
(1) 可跨平台使用,代码兼容性强。
(2) 以共享内存为通信基础。
(3) 支持C/C++以及Fortran语言。
(4) 一般基于SYS/BIOS运行。
3.2基本语法
#pragma omp 指令 [ 子句 [ [ [,] 子句 ] ... ]
{
...
}
以裸机的omp_matavec案例为例,使用场景的概要流程图如下。
C66xx_0核心创建主线程,通过OpenMP框架加载matvec算法至C66xx_0~C66xx_7核心进行并行运算,从而减少C66xx_0核心负载,并可加快运算速度。
3.3代码分析
以裸机的omp_matavec案例为例进行代码分析,见图中注释。
4 多核编程注意事项
4.1多核单/多镜像
在开发过程中,需将程序可执行文件分别加载至对应的核心运行。此时需了解多核单/多镜像的优缺点,再根据实际情况进行选择。
多核单镜像
多核单镜像指所有核心运行完全相同的用户程序。
优点:仅需维护一个工程,管理便捷。
缺点:需兼容多个核心代码,程序可执行文件较大。
多核多镜像
多核多镜像指不同核心运行不同的用户程序。
优点:无需考虑各核心功能的兼容性,单个程序可执行文件较小。
缺点:需维护多个工程,管理不便。
4.2外设访问
所有核心共享外设,如SRIO、PCIe、Ethernet、SPI、I2C、EMIF等。在对外设进行初始化后,所有核心可在任意时间对外设进行读写,无需再次初始化。
4.3数据存储
(1) 注意区分全局与局部地址。
L1/L2SRAM有全局与局部两个地址,全局地址可被所有核心访问,但局部地址仅可被指定核心访问。
以C66xx_0核心的L2SRAM为例,对应的全局地址为0x10800000,局部地址为0x00800000。C66xx_0核心使用0x10800000或0x00800000,均可访问C66xx_0核心的L2SRAM。而C66xx_1核心使用0x00800000仅可访问C66xx_1核心的L2SRAM,使用0x10800000方可访问C66xx_0核心的L2SRAM。
L2SRAM全局与局部地址对应关系如下表:
(2) 注意避免内存冲突。
如数据需存放至MSMCSRAM、DDR3共享内存设备,请将对应内存划分为MSMCSRAM_MASTER段(主核使用)与MSMCSRAM_SLAVE段(从核使用),从而避免运行时内存冲突。
|