|
本文主要介绍TMS320C6678处理器开发中比较常用的多核通信方式:OpenMP,主要基于创龙科技TL6678-EasyEVM评估板进行演示。​6 y% X9 ^' K5 b( t& i0 B5 ]- X- v
( d/ X5 V; f. o2 J# h% u图1 TL6678-EasyEVM评估板
/ _8 _( T) ?$ A+ Y6 K g A% L8 D$ Y8 W
TL6678-EasyEVM是一款基于ti KeyStone架构c6000系列TMS320C6678八核C66x定点/浮点高性能处理器设计的高端多核DSP评估板,由核心板与底板组成。核心板经过专业的PCB layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。3 w& ?( h) b0 p ^+ S( w5 R' A
评估板接口资源丰富,引出双路千兆网口、SRIO、PCIe等高速通信接口,方便用户快速进行产品方案评估与技术预研。/ t$ C" g1 D) ?7 @
5 `" b2 c/ g6 P+ ^# }0 N
开发案例主要包括:+ i- f1 W# e# n6 g* w
' b( b* @4 D% l2 ^7 d/ L(1) 裸机开发案例1 F4 u& b$ y- G% s3 u3 ]" n& }
(2) RTOS(SYS/BIOS)开发案例
) D) u2 [6 j' J3 J$ ^(3) IPC、OpenMP多核开发案例; x$ }( F3 }8 z
(4) SRIO、PCIe、双千兆网口开发案例
4 T2 V2 Z( P- p5 m4 f/ C(5) 图像处理开发案例
0 K1 g. H$ b3 {( u( B, ~(6) DSP算法开发案例/ y! b6 P) T8 `3 t) ] |6 \. ], R
(7) 串口、网络远程升级开发案例
! G8 y1 X! B% I( P3 p( z& }案例源码、产品资料(用户手册、核心板硬件资料、产品规格书)可点site.tronlong.com/pfdownload获取。1 ?5 g% d2 D6 e% Z
- A7 P2 ~6 T( ~8 E; K
4 k7 g, \$ ~0 E2 K2.1 OpenMP简介
$ C! w+ k# H/ i8 {
t0 X. E: ], L1 TOpenMP是一种多核开发软件框架,其主要特性如下:
( p1 c- s, U* ]# \; U+ Q4 b+ `# H/ s0 ]
(1) 可跨平台使用,代码兼容性强。
6 Q2 W# U" ]/ j( l2 M ?* ](2) 以共享内存为通信基础。% i. M! L4 h7 ^4 Q) u
(3) 支持C/C++以及Fortran语言。8 x1 S6 H% h" p
(4) 一般基于SYS/BIOS运行。* _4 v( ]1 F" b
5 [' I; t* e6 ^
, Z! W: x' p1 T3 s) U4 f6 X​
) X9 W9 C. D9 ^图2& T/ h4 S7 g2 \# M
/ K+ x' e. l4 ^5 P% a; L5 p' ^3 F( Y! r4 B5 u W+ K+ U" ^: j8 p
2.2 基本语法
/ u. l2 f0 I, i( K) J6 F#pragma omp 指令 [子句 [ [ [,]子句 ] ... ]' M4 b0 I$ i9 l
{" Z; m& C" K" K* G2 b# E2 |
...
6 g5 g3 a7 I7 L8 g8 J0 b! |) ?}- ^& v9 Q4 e% r- o
0 J; w( s3 I8 p0 S表15 E1 P* x' s( \' m
指令
1 Z3 y1 [. ^1 A' P1 B/ Q* E | 说明: L4 p. K, v/ G8 C9 y" `& e
| parallel* U; m7 @. g7 L Y) n
| 开始并行执行语句
1 o" X- G+ d2 h3 ~2 d | for
" h6 ^# [2 G9 Y! f" d1 T9 d% ]9 _ | 在多个线程中并行执行for循环1 a+ Z% p- y- J1 @
| sections# ^$ }! q, R) X! L
| 包含多个可并行执行的sectone结构体- z2 } }* V* l7 d' d O6 c* `! `
| single% q8 m) Y& l# o" l8 C' x# t$ ^, R+ b/ G
| 单线程执行! F, L5 R7 P! Z. k2 q/ Q# H' p" a
| master7 T s3 T' J4 Y: g$ y
| 主线程执行- E0 l ~5 I& I
| critical% O3 o6 S$ E* ?* m$ M. ^2 C$ q. V6 ~
| 任意时刻仅可被单个线程执行
- Q9 o0 ^8 j* J1 h. P1 S0 c* h# b | barrier
% s* f, K8 g# M4 H6 g) u | 指定屏障,用于同步所有线程, `+ A6 k/ H, x" K
| taskwait
; x& Z" T" W+ b: {2 A2 K | 等待子线程完成
' I9 m: V, e; W# Y( H+ S) Z( s | atomic L8 C5 C! _; n {& Y9 J6 Y8 P8 w
| 确保指定内存位置执行原子更新操作/ s* c2 S. `* ]
| flush
& Z% L2 {! j8 s | 使线程当前内存数据与实际内存数据一致& R) L& {" a' D' Q; K
| ordered
% ?( n, x) g" X, @5 x | 并行执行的for循环将按循环体变量顺序执行
% L6 Q5 P0 q' N7 v# I$ d6 Q | threadprivate
% q. ^* o5 i: H/ E | 指定变量为本地存储0 v5 A+ b2 l. n8 q
|
. B r4 g& f3 [% E% @. b' ~表2
9 L9 z8 ~" Z" }2 n子句
- E0 b! W* V5 |4 y4 t | 说明, h' {1 o, Z6 _7 j
| default
$ q* D4 x3 B6 B% R4 q% `! n | 控制parallel或task结构体中变量数据的共享属性: `# Z6 ?- [, O" ]
| shared
H q; ] r* a% u$ M | parallel或task结构中,一个或多个变量为共享变量* B' K8 y& G6 r/ F
| private& h6 n0 c6 ^; s$ i% K, T
| 一个或多个变量为本地变量) n- H" B( ]- u* [% C' O% |
| firstprivate$ C3 C0 @" m! u N) S
| 一个或多个变量为本地变量,且变量值为并行结构执行前的值; S, n C/ k* J+ u5 I' Z
| lastprivate- m1 U+ ~9 l: w- B- A
| 一个或多个变量为本地变量,且变量值为并行结构执行后的值( |2 n# d8 |! r* c, s
| reduction
" z! G$ @ @) O) M | 一个或多个变量为本地变量,但变量值将根据不同的运算符来决定,执行完成后变量值将被更新
: u% K$ u" J% z8 o3 e! X- q | copyin
" r; r+ i+ c$ O | 使线程本地变量值与主线程变量值相同
+ Y, w( ^: m0 X5 O0 |1 J* G | copyprivate
* U) J6 [# c6 _* g: I | 使属于parallel区域的变量值在不同线程中相同
7 s3 ~" Q6 p' t- }, h# L2 |2 D8 F | schedule8 d3 Y9 a( J8 ^ _
| 设置for循环并行执行方式:dynamic、guided、runtime和static
% ?4 w+ v3 F& `: V | num_threads Y4 U/ I- g7 j' e$ i3 B
| 线程数目: ?5 k8 [3 d1 r
| if
& }9 b) T( M/ H3 Y | 并行语句执行条件
: F* S9 m3 B& l8 K | nowait
2 q- L) h* e, t9 R" C2 p | 忽略线程同步等待2 F6 G1 l2 b5 Z @( K# y' N. e
|
3 K9 o& F' ]$ R以裸机的omp_matavec案例为例,使用场景的概要流程图如下。
: ^( |8 D/ u2 H* Z2 q6 I
) Q1 o' A# ]& f; ~- sC66xx_0核心创建主线程,通过OpenMP框架加载matvec算法至C66xx_0~C66xx_7核心进行并行运算,从而减少C66xx_0核心负载,并可加快运算速度。" N1 H% k, N; |8 e( P/ d
现可向厂家免费申请TL6678-EasyEVM评估板进行快速评估,免费哦!技术研讨会:79635273、332643352
- d8 D/ W+ V7 H( S2 H! Q1 Q
! F% u- E; K7 r- ?" e1 |: ]7 \​
7 T7 g& ?$ g4 [" x图3/ J& @. C5 ]& ]$ }; c
5 s& ?, _" p: d$ z+ J
# D J: W6 U# S2.3 代码分析' f1 `" n( \/ R. E
以裸机的omp_matavec案例为例进行代码分析,见图中注释。
) O7 O I( a& J2 z. G
2 `' u# G6 i3 p5 U( O" w6 Z/ ?
2 [' I! C; B9 \: q8 `9 o/ O
% c; C% F3 ~: H​
, c" S) q+ w' n: x- y5 |# o
- m/ i: e! C1 @: _% U( g. {# {图4
( _7 x$ m! s! C/ d( K7 X0 M& U, `8 b2 o$ r$ I0 a
! F0 m0 P4 h$ _5 S# ^ s
更多推荐
8 w o! F1 @0 ~4 R$ T: jC6678+K7视频采集处理方案# c: m) s; z7 m) X" `
8 p! X+ l+ }6 c1 X. f
​
, ]; Z, ^! c& T. z8 ^图5( [% Q! |% ?4 i( F
V% r. g/ b& j3 M7 ~( E6 x( Q. d
FPGA+DSP的高速AD采集处理开发详解3 X5 z4 \3 V* F' ^/ f
$ @5 d& \- M# m2 I' Z% W​4 W2 C& j5 f& i7 v
图64 C' n+ L! Z9 L
|
|