本文主要介绍TMS320C6678处理器开发中比较常用的多核通信方式:OpenMP,主要基于创龙科技TL6678-EasyEVM评估板进行演示。
图1 TL6678-EasyEVM评估板
TL6678-EasyEVM是一款基于
ti KeyStone架构C6000系列TMS320C6678八核C66x定点/浮点高性能处理器设计的高端多核DSP评估板,由核心板与底板组成。核心板经过专业的
PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
评估板接口资源丰富,引出双路千兆网口、SRIO、PCIe等高速通信接口,方便用户快速进行产品方案评估与技术预研。
开发案例主要包括:
(1) 裸机开发案例
(2) RTOS(SYS/BIOS)开发案例
(3) IPC、OpenMP多核开发案例
(4) SRIO、PCIe、双千兆网口开发案例
(5) 图像处理开发案例
(6) DSP算法开发案例
(7) 串口、网络远程升级开发案例
案例源码、产品资料(用户手册、核心板硬件资料、产品规格书)可点site.tronlong.com/pfdownload获取。
2.1 OpenMP简介
OpenMP是一种多核开发软件框架,其主要特性如下:
(1) 可跨平台使用,代码兼容性强。
(2) 以共享内存为通信基础。
(3) 支持C/C++以及Fortran语言。
(4) 一般基于SYS/BIOS运行。
图2
2.2 基本语法
#pragma omp 指令 [子句 [ [ [,]子句 ] ... ]
{
...
}
表1
指令
| 说明
|
parallel
| 开始并行执行语句
|
for
| 在多个线程中并行执行for循环
|
sections
| 包含多个可并行执行的sectone结构体
|
single
| 单线程执行
|
master
| 主线程执行
|
critical
| 任意时刻仅可被单个线程执行
|
barrier
| 指定屏障,用于同步所有线程
|
taskwait
| 等待子线程完成
|
atomic
| 确保指定内存位置执行原子更新操作
|
flush
| 使线程当前内存数据与实际内存数据一致
|
ordered
| 并行执行的for循环将按循环体变量顺序执行
|
threadprivate
| 指定变量为本地存储
|
表2
子句
| 说明
|
default
| 控制parallel或task结构体中变量数据的共享属性
|
shared
| parallel或task结构中,一个或多个变量为共享变量
|
private
| 一个或多个变量为本地变量
|
firstprivate
| 一个或多个变量为本地变量,且变量值为并行结构执行前的值
|
lastprivate
| 一个或多个变量为本地变量,且变量值为并行结构执行后的值
|
reduction
| 一个或多个变量为本地变量,但变量值将根据不同的运算符来决定,执行完成后变量值将被更新
|
copyin
| 使线程本地变量值与主线程变量值相同
|
copyprivate
| 使属于parallel区域的变量值在不同线程中相同
|
schedule
| 设置for循环并行执行方式:dynamic、guided、runtime和static
|
num_threads
| 线程数目
|
if
| 并行语句执行条件
|
nowait
| 忽略线程同步等待
|
以裸机的omp_matavec案例为例,使用场景的概要流程图如下。
C66xx_0核心创建主线程,通过OpenMP框架加载matvec算法至C66xx_0~C66xx_7核心进行并行运算,从而减少C66xx_0核心负载,并可加快运算速度。
现可向厂家免费申请TL6678-EasyEVM评估板进行快速评估,免费哦!技术研讨会:79635273、332643352
图3
2.3 代码分析
以裸机的omp_matavec案例为例进行代码分析,见图中注释。
图4
更多推荐
C6678+K7视频采集处理方案
图5
FPGA+DSP的高速AD采集处理开发详解
图6
更多案例详情或建议,欢迎留言与我沟通了解。