联系我们
Contact Us公司总机:020-8998-6280
技术热线:020-3893-9734
技术邮箱:support@tronlong.com
销售邮箱:sales@tronlong.com
如何用TMS320C6678处理器进行OpenMP多核通信案例
2021/01/28
如何用TMS320C6678处理器进行OpenMP多核通信案例
本文主要介绍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) 串口、网络远程升级开发案例
案例源码、产品资料(用户手册、核心板硬件资料、产品规格书)可点http://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核心负载,并可加快运算速度。
图3
2.3 代码分析
以裸机的omp_matavec案例为例进行代码分析,见图中注释。
图4
免费试用
现可向厂家免费申请TL6678-EasyEVM评估板进行快速评估,免费哦!
技术研讨会:79635273、332643352
更多推荐
图5
图6
更多案例详情或建议,欢迎留言与我沟通了解。