这篇文章给大家介绍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) 串口、网络远程升级开发案例
案例源码、产品资料(用户手册、核心板硬件资料、产品规格书)可点site.tronlong.com/pfdownload获取。
OpenMP是一种多核开发软件框架,其主要特性如下:
(1) 可跨平台使用,代码兼容性强。
(2) 以共享内存为通信基础。
(3) 支持C/C++以及Fortran语言。
(4) 一般基于SYS/BIOS运行。
图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
以裸机的omp_matavec案例为例进行代码分析,见图中注释。
图4
关于TMS320C6678处理器是如何进行OpenMP多核通信案例就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。