|
本文主要介紹TMS320C6678處理器開發(fā)中比較常用的多核通信方式:OpenMP,主要基于創(chuàng)龍科技TL6678-EasyEVM評估板進行演示。​
3 A$ m- a0 ?1 M4 w, I+ h6 b2 c i# d* f) N | L1 `
圖1 TL6678-EasyEVM評估板
" B8 H& J+ c7 P' h. Y J5 _- s2 e V
TL6678-EasyEVM是一款基于ti KeyStone架構(gòu)c6000系列TMS320C6678八核C66x定點/浮點高性能處理器設(shè)計的高端多核DSP評估板,由核心板與底板組成。核心板經(jīng)過專業(yè)的PCB layout和高低溫測試驗證,穩(wěn)定可靠,可滿足各種工業(yè)應(yīng)用環(huán)境。8 m' _( y5 F: w" e, d5 A, A
評估板接口資源豐富,引出雙路千兆網(wǎng)口、SRIO、PCIe等高速通信接口,方便用戶快速進行產(chǎn)品方案評估與技術(shù)預(yù)研。3 E$ E7 g3 k# |
6 [( M0 `' m. h M' x) W開發(fā)案例主要包括:
8 K$ z' ? T- ?8 A$ v7 c# F, ]0 P& Q; E& \, M# M# N
(1) 裸機開發(fā)案例
5 X. a6 b& N2 |) y(2) RTOS(SYS/BIOS)開發(fā)案例
, m) h) `( z2 |(3) IPC、OpenMP多核開發(fā)案例, I; D2 V2 V6 w: @! C% v. Y+ e
(4) SRIO、PCIe、雙千兆網(wǎng)口開發(fā)案例4 P7 Y4 _% e( Q) W& ^( _
(5) 圖像處理開發(fā)案例2 ~2 D! b* @- N( c1 X
(6) DSP算法開發(fā)案例
0 m: X. H! a" {(7) 串口、網(wǎng)絡(luò)遠程升級開發(fā)案例8 z6 W# b0 e3 c. l" A) l$ w% R
案例源碼、產(chǎn)品資料(用戶手冊、核心板硬件資料、產(chǎn)品規(guī)格書)可點site.tronlong.com/pfdownload獲取。
- E8 M1 _# p0 n L, A* [; V
+ f9 D' q8 S, a/ e1 J! H
+ R5 \! `% `/ ` |' S, o! E$ ^2.1 OpenMP簡介
/ F. B- g+ M8 |7 @. \& ` [0 n6 H, a5 M- K
OpenMP是一種多核開發(fā)軟件框架,其主要特性如下:
; h2 g& E* q6 J5 S$ H6 I/ F& A1 U7 n+ h0 V1 T
(1) 可跨平臺使用,代碼兼容性強。
7 D. b: p+ X- T( f* L(2) 以共享內(nèi)存為通信基礎(chǔ)。' m& {; X. M' k# c# e1 F8 x* Q
(3) 支持C/C++以及Fortran語言。
0 U$ u: \ [) R- w8 w- h1 c(4) 一般基于SYS/BIOS運行。
/ ?# h% L1 Y0 n/ |/ J; d5 e
- U$ b" K- U0 f+ Q6 F* W7 Q4 z, p! f7 E9 M# ~
​' s3 R L: |& j: ~& o2 w) m
圖2# v1 y7 n' x7 i' j8 h
% X% \6 R1 P" d4 M
. b D) p ^- t+ i3 }! o/ g2.2 基本語法, w7 D Q) ~6 o; |* [" X
#pragma omp 指令 [子句 [ [ [,]子句 ] ... ]
' R2 h% k: G& R{ E5 C1 }9 A3 |( i, @% _) e
.../ y! L- Y8 `! h9 ?, N4 S# M
}
0 E5 _+ i" B/ ?! F# N8 _+ r( ]4 I" ~ V
表13 a5 s3 [7 f" N \. p2 j# G
指令9 C1 b1 [' S2 V; E1 |
| 說明
W; U! N( O2 R: o: |1 U( [ | parallel
& R6 }) A- @5 `5 [( |, E! N( ~( Q | 開始并行執(zhí)行語句
: g$ D% @; A4 }0 j( s: @ | for T6 H/ J( n6 B* o( X
| 在多個線程中并行執(zhí)行for循環(huán)8 r/ M8 y9 w1 M9 f* n; }
| sections
8 g0 _* O0 J% d" k2 V6 G! k* L | 包含多個可并行執(zhí)行的sectone結(jié)構(gòu)體
. W- m0 ]1 C: V# T8 \ | single8 _+ M9 e; Q) [' U- I7 A
| 單線程執(zhí)行
3 m0 K u, |3 X B) N$ p | master9 ?6 E1 v. Z0 c& B, k
| 主線程執(zhí)行
9 L5 I" a' i$ U' M | critical1 N" c* l, `& M: Z; m
| 任意時刻僅可被單個線程執(zhí)行
1 s7 }7 I- ~# U, Y4 a | barrier
2 W/ h) L! u3 \$ {' G | 指定屏障,用于同步所有線程. k+ H( W+ b7 I$ d. W
| taskwait
0 V5 H& e2 m% y( f | 等待子線程完成' \7 y, n1 ?7 A I9 k! ^4 ]! i# ]
| atomic9 c$ @: F7 B5 {6 T
| 確保指定內(nèi)存位置執(zhí)行原子更新操作8 h$ t2 r2 x3 M0 ~0 A
| flush; a7 ^+ b5 p# V2 ~
| 使線程當(dāng)前內(nèi)存數(shù)據(jù)與實際內(nèi)存數(shù)據(jù)一致( Z9 C. V, H- D0 k% i' l
| ordered
! _( ]5 S6 Q+ O8 ?3 \( n | 并行執(zhí)行的for循環(huán)將按循環(huán)體變量順序執(zhí)行
6 R1 [$ {- ]/ g Q | threadprivate
F0 K: J) O- P( x: M" I | 指定變量為本地存儲
# `% N: v9 A) \3 v- L A |
3 r) e% ~- f8 l, |# ?% r表2
) L9 Z$ g4 x7 W' G/ X子句
0 q9 @9 N) b( D$ s0 N6 S | 說明
4 G1 P! V/ [: W0 h9 u3 }0 }, S | default, A# M) e* k- u. z9 e) x% Z
| 控制parallel或task結(jié)構(gòu)體中變量數(shù)據(jù)的共享屬性
# c$ N9 b/ p' k. D; c+ l | shared1 O2 n- ?! P2 S% u& H+ K* _: I
| parallel或task結(jié)構(gòu)中,一個或多個變量為共享變量
! e2 j; @, Q g3 e& S4 {+ E | private
" g( ]5 R! H) G; _ | 一個或多個變量為本地變量
5 ~4 Q, ~( @ W1 m. I, q p) @( H | firstprivate* @% L% @% T/ @' U7 q& T
| 一個或多個變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行前的值( y6 Z, _* v7 w/ ]6 U
| lastprivate
7 r6 v0 f- u [ | 一個或多個變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行后的值( A1 Q( m8 h! q
| reduction5 e* r: X8 m$ ~
| 一個或多個變量為本地變量,但變量值將根據(jù)不同的運算符來決定,執(zhí)行完成后變量值將被更新
4 F; X& o6 f- H4 D. J- I/ Z: m1 ~) I | copyin
* h) i8 l2 X3 l/ C | 使線程本地變量值與主線程變量值相同
D8 x$ s7 ~) N$ _4 C' y: F | copyprivate
- \: I( A0 y- w$ O | 使屬于parallel區(qū)域的變量值在不同線程中相同0 M3 X- Y. w0 l1 F, |
| schedule, S& u( `. s. u7 Z
| 設(shè)置for循環(huán)并行執(zhí)行方式:dynamic、guided、runtime和static# O- [9 Z+ y/ q
| num_threads! [2 `# [2 m4 G. x1 t! `
| 線程數(shù)目
% ~8 S9 p o% w* [ | if {) \3 g# o# V8 x, p" L
| 并行語句執(zhí)行條件
+ T! k1 W7 q4 J0 h# C" L | nowait
% h3 p- a* e& X8 ]7 j | 忽略線程同步等待8 P' D8 K7 a# i$ ], n C
| ! ]3 R3 d0 ~4 K% k9 Y) U* I/ ]: m- ~
以裸機的omp_matavec案例為例,使用場景的概要流程圖如下。
5 F9 p d/ k( Q0 G# o$ r6 g0 @4 [, v
C66xx_0核心創(chuàng)建主線程,通過OpenMP框架加載matvec算法至C66xx_0~C66xx_7核心進行并行運算,從而減少C66xx_0核心負(fù)載,并可加快運算速度。
% r" f( Z$ T3 C8 O6 [! J現(xiàn)可向廠家免費申請TL6678-EasyEVM評估板進行快速評估,免費哦!技術(shù)研討會:79635273、332643352
1 k, S8 t U. E( z0 N" M
; ^+ ]$ a" ]0 }% q​ O* c7 ]* c9 j) D1 t
圖3
4 V: z2 O1 |# v; A; E* \
8 M* z, k( {3 l( d6 M; n: O7 T2 C) y4 ^4 d
2.3 代碼分析
3 n- a' R) Y7 E$ X6 Y以裸機的omp_matavec案例為例進行代碼分析,見圖中注釋。( l+ C; H. i1 k [8 M
- o" _" D4 y! O4 A0 c5 i1 Q
$ u7 u4 E* H" w; ~3 c8 K/ z! w3 X+ D8 \. T# U
​
4 d! G$ V: {* ^# x" z+ B
# ~ V, o7 w' h6 y* U" u( t圖4+ ] c* ]/ a) S' Z" M$ F0 t
( a6 d, n8 g( E
9 L \( v z1 ]2 G更多推薦2 l2 V6 c' N1 A2 P9 b
C6678+K7視頻采集處理方案& H$ v! s0 z! v
2 n6 O( K8 X2 @% p4 @, F0 E' _, L
​# b, @' k e P; V& k# r7 Y: ]
圖5
' `. o3 o9 B' J5 y5 r" C% E# }
; w5 B; d9 P; \ UFPGA+DSP的高速AD采集處理開發(fā)詳解
- {. ]( A0 `- H5 G, N/ I. S. z
L. M- c" Y) j: }* B, N7 x# \​
( ^- D& K$ i2 Z: ~- ~9 l圖6
% Q; m& |7 X ?1 q5 \! V6 Q |
|