|
本文主要介紹TMS320C6678處理器開發(fā)中比較常用的多核通信方式:OpenMP,主要基于創(chuàng)龍科技TL6678-EasyEVM評(píng)估板進(jìn)行演示。​* ?3 H& N q8 w: R" }
9 b' E2 n3 }* c u; w, r圖1 TL6678-EasyEVM評(píng)估板
) S" X [. a% q0 C
, f. X x; B) w0 I' d. }TL6678-EasyEVM是一款基于ti KeyStone架構(gòu)c6000系列TMS320C6678八核C66x定點(diǎn)/浮點(diǎn)高性能處理器設(shè)計(jì)的高端多核DSP評(píng)估板,由核心板與底板組成。核心板經(jīng)過專業(yè)的PCB layout和高低溫測(cè)試驗(yàn)證,穩(wěn)定可靠,可滿足各種工業(yè)應(yīng)用環(huán)境。
* B5 k# q) `5 [. E0 a) a評(píng)估板接口資源豐富,引出雙路千兆網(wǎng)口、SRIO、PCIe等高速通信接口,方便用戶快速進(jìn)行產(chǎn)品方案評(píng)估與技術(shù)預(yù)研。. i- @% E4 V2 ~; c" y( V
4 D h1 A" S! \/ o
開發(fā)案例主要包括:& c) m4 i! `3 H# e
" T8 z: N6 Y. z; E/ F0 I. v
(1) 裸機(jī)開發(fā)案例% |' R# b7 u1 \) L5 @) `! I! d
(2) RTOS(SYS/BIOS)開發(fā)案例
! U5 S: L W4 y( e& V(3) IPC、OpenMP多核開發(fā)案例
8 o8 D2 m4 Q- u2 c- |(4) SRIO、PCIe、雙千兆網(wǎng)口開發(fā)案例
, t( o0 P- `2 A, H' Z(5) 圖像處理開發(fā)案例
+ s* r$ n5 I) d$ S3 a" y(6) DSP算法開發(fā)案例 H. b3 G7 P4 L' O g
(7) 串口、網(wǎng)絡(luò)遠(yuǎn)程升級(jí)開發(fā)案例
0 F3 D' X) E% T- E" ]8 b案例源碼、產(chǎn)品資料(用戶手冊(cè)、核心板硬件資料、產(chǎn)品規(guī)格書)可點(diǎn)site.tronlong.com/pfdownload獲取。, ~: Q0 R$ N0 y- R# j
7 H9 N, d/ H: ?* l
. R" i. |$ Z- n: e+ f2.1 OpenMP簡(jiǎn)介
6 t; t3 O i* I' {* D
, J# ]/ R( j9 r' ?! K9 POpenMP是一種多核開發(fā)軟件框架,其主要特性如下:
2 z) f+ N* w# S" U N) Z
: M! z+ \& |+ B1 g! `' q) t! r(1) 可跨平臺(tái)使用,代碼兼容性強(qiáng)。
: g9 o9 r4 ^: ^8 p E& F3 h1 |9 A, w(2) 以共享內(nèi)存為通信基礎(chǔ)。& J9 L# c" o Q: Q
(3) 支持C/C++以及Fortran語言。4 g2 _# k& J8 c' l$ Y% E2 g
(4) 一般基于SYS/BIOS運(yùn)行。. i8 G) U6 n/ i4 }4 N! O
1 w2 p2 C( [" c6 n
9 m R% c6 w$ g
​) G2 u$ a1 ^9 |
圖2
5 ^7 y, Q1 R, Q
! T. S/ S4 k* i! J! v- G% v* K, F
, `$ C r7 W! C4 i1 V/ Q2.2 基本語法
% q8 H: f8 Q3 Y#pragma omp 指令 [子句 [ [ [,]子句 ] ... ] j% t Y8 H1 D5 p" Z
{
) K( o9 V5 F/ H: m* O$ M...1 O A( ^ e1 c3 Z' x
}! v S: W( V, l# T4 Z
2 ]0 F2 n6 \/ A5 X% l- A0 a& v' n表1
( T: I3 o( ~; |* {' F指令
$ ~7 _( l% a( G2 c7 V: K | 說明+ L0 c) c2 T$ g7 g, n
| parallel7 T* M. ~- ~; C) ?( u# H
| 開始并行執(zhí)行語句. Y7 `6 x k( ~: D" P5 c# G. P: H
| for$ F6 m% M, ~6 d
| 在多個(gè)線程中并行執(zhí)行for循環(huán)' q4 B' h! j" j; U. b3 X
| sections
! j2 x! W( }* D | 包含多個(gè)可并行執(zhí)行的sectone結(jié)構(gòu)體" A8 `& w: N7 Q- Y0 t' R) ~
| single
/ S1 ~$ t2 ?- h) \4 g | 單線程執(zhí)行
4 P% S: Y6 @: ~% ]5 ~$ J | master
; u* v* J/ W; H+ h' w | 主線程執(zhí)行 Q# Q, R( }' S. O+ ~$ p
| critical
- ]1 s' C: Y- v# d | 任意時(shí)刻僅可被單個(gè)線程執(zhí)行, n! N% y6 q7 m @5 _
| barrier) e1 X- Y; a, _7 W
| 指定屏障,用于同步所有線程* |9 N6 [$ l; [3 U
| taskwait& F0 a a& n4 {2 e
| 等待子線程完成
# J+ T! c" C; \4 C, x, E | atomic6 N) `4 \* M; I0 u2 P1 Y" F
| 確保指定內(nèi)存位置執(zhí)行原子更新操作
$ n, O4 d6 [' n: ]+ P | flush
# [" O( n; R4 h- r$ M n2 A7 o | 使線程當(dāng)前內(nèi)存數(shù)據(jù)與實(shí)際內(nèi)存數(shù)據(jù)一致: D" ^0 \ T2 n0 W8 {1 Z
| ordered
' P$ o! o( ?8 r0 Z; J | 并行執(zhí)行的for循環(huán)將按循環(huán)體變量順序執(zhí)行( N, W) o# J6 H k
| threadprivate
0 F& G* Y7 w2 Q0 k, {' P& J | | 指定變量為本地存儲(chǔ)" f9 n8 [5 P# ~( S! w4 T5 b
| 7 f8 B1 E7 { y& N' e& i
表2% O$ t1 [2 v' X3 c& ]8 I
子句
: j [! G) P% _- n9 \# I4 G0 @- [ | 說明
" }6 q, U9 [4 x7 E) S | default
4 ]6 l$ f) Q6 M |6 ]/ ~$ _1 c1 C | 控制parallel或task結(jié)構(gòu)體中變量數(shù)據(jù)的共享屬性8 T: s0 n/ d5 \- t
| shared
/ C( d2 W& a% w7 S) H$ j/ r | parallel或task結(jié)構(gòu)中,一個(gè)或多個(gè)變量為共享變量
4 ~6 v$ F( y0 J! p. [ | private3 r% K1 v; D6 ~6 p7 Y: \* ~, X( M
| 一個(gè)或多個(gè)變量為本地變量( n4 {/ F7 i( _8 V; ]
| firstprivate
7 f/ r; H& G+ R | 一個(gè)或多個(gè)變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行前的值0 A$ E5 E4 z q1 x9 H
| lastprivate4 X8 Y8 D: v2 f/ ~5 [( y
| 一個(gè)或多個(gè)變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行后的值1 B4 c- t3 [! h C
| reduction* o% U" y! Y& ?5 V
| 一個(gè)或多個(gè)變量為本地變量,但變量值將根據(jù)不同的運(yùn)算符來決定,執(zhí)行完成后變量值將被更新
8 b6 @' o q) H | copyin
0 ]& |, A, u3 i* i9 ~$ g | 使線程本地變量值與主線程變量值相同
( y8 [( j- }4 x: }/ Z | copyprivate9 c' f6 ?# K9 g/ J; C& Y7 q
| 使屬于parallel區(qū)域的變量值在不同線程中相同
+ s" q9 }+ W/ A5 r* V | schedule
. T; Z! l5 [ ~9 ^ | 設(shè)置for循環(huán)并行執(zhí)行方式:dynamic、guided、runtime和static5 h% }. w2 v/ |0 C8 |
| num_threads
8 ^) S7 b* h! _7 B | 線程數(shù)目
& y9 T- X- a% f | if
( M' t5 K q% X6 q | 并行語句執(zhí)行條件
* ~% e" @) y6 i. g- E. | ` | nowait+ z; o& \0 h* y4 m. h {: u
| 忽略線程同步等待! N% p0 g, L6 W) d2 K
| 8 o$ F+ j4 R( l! X
以裸機(jī)的omp_matavec案例為例,使用場(chǎng)景的概要流程圖如下。1 `0 ?# F# a1 r6 T. k7 G9 g
6 R0 {* D7 m* o$ @; w. f
C66xx_0核心創(chuàng)建主線程,通過OpenMP框架加載matvec算法至C66xx_0~C66xx_7核心進(jìn)行并行運(yùn)算,從而減少C66xx_0核心負(fù)載,并可加快運(yùn)算速度。- a8 `0 {$ b: w% g, b# r2 X
現(xiàn)可向廠家免費(fèi)申請(qǐng)TL6678-EasyEVM評(píng)估板進(jìn)行快速評(píng)估,免費(fèi)哦!技術(shù)研討會(huì):79635273、3326433520 g4 i, V3 ?) M B& }
* a7 K$ i% {$ I2 O. w3 G) U# @: T​
% p' j9 N& O0 j. F圖3
. l7 N9 E0 j, s+ R' F0 m3 Q/ t# X# e1 N" c* N8 N( q" Y" Y
8 ]" A. O$ m# d8 e2 ?4 r# p9 \
2.3 代碼分析
1 i; n/ \+ h- @& G- ~* K4 R% S以裸機(jī)的omp_matavec案例為例進(jìn)行代碼分析,見圖中注釋。
& g+ Q4 v1 R7 } a6 h
G* A/ t3 W* i" x/ B' _% d1 a) \9 e! M" i* x
1 G$ t* O# d" L+ B4 C​
8 E o: {6 U9 {8 ?( b
3 |* }1 z5 D5 C4 G圖4' j# @( n0 }0 e5 s1 C
( h2 A( X2 e8 L* ~
. v' N% M% l8 l+ ^% j更多推薦
) |/ [9 z2 C: H* o5 ~! G4 nC6678+K7視頻采集處理方案4 e6 Z. ^4 q! g" J- r
: [ W4 R8 u0 W/ j" S F+ g6 ?" L​
' l2 I/ E: S! K" s圖5
2 k- o R6 c, j; @
: k" s- I) M) T1 g6 ^/ [FPGA+DSP的高速AD采集處理開發(fā)詳解
' G% \9 n5 d# r2 u+ X. n$ ?# X# s$ I" Y: D4 o
​
, a i! @' H! [. z- I0 `0 N, E圖6
/ {, u0 U/ B# u: H- T: {2 L4 Y |
|