|
本文主要介紹TMS320C6678處理器開發(fā)中比較常用的多核通信方式:OpenMP,主要基于創(chuàng)龍科技TL6678-EasyEVM評估板進(jìn)行演示。​
$ M; w+ T2 _( Z5 Z p! ^+ t4 z- s6 |4 K# g# R# H
圖1 TL6678-EasyEVM評估板
+ b5 d3 q* o, D# G# y r; k m! p! P C
TL6678-EasyEVM是一款基于ti KeyStone架構(gòu)c6000系列TMS320C6678八核C66x定點(diǎn)/浮點(diǎn)高性能處理器設(shè)計(jì)的高端多核DSP評估板,由核心板與底板組成。核心板經(jīng)過專業(yè)的PCB layout和高低溫測試驗(yàn)證,穩(wěn)定可靠,可滿足各種工業(yè)應(yīng)用環(huán)境。
) c( P+ O' H1 h) \$ N) `8 I9 a評估板接口資源豐富,引出雙路千兆網(wǎng)口、SRIO、PCIe等高速通信接口,方便用戶快速進(jìn)行產(chǎn)品方案評估與技術(shù)預(yù)研。* m6 n$ ]" v" F- V7 {7 |
) x' u7 H, E' K
開發(fā)案例主要包括:
* ]- u& y# i5 u0 k
8 L( Q5 _0 E4 u1 M+ F* E p(1) 裸機(jī)開發(fā)案例
% N- U! W. e& j* e: p8 ~(2) RTOS(SYS/BIOS)開發(fā)案例4 Q( X. X, X8 G, i v
(3) IPC、OpenMP多核開發(fā)案例
5 T1 g z X' e# U+ ^! e2 P o, i(4) SRIO、PCIe、雙千兆網(wǎng)口開發(fā)案例( X0 M$ E5 S, E, c8 j, Z$ t8 B b
(5) 圖像處理開發(fā)案例7 C# V4 W2 }: u A! s) M9 `
(6) DSP算法開發(fā)案例# f( T/ |. R# c" p& V8 D8 T8 Q
(7) 串口、網(wǎng)絡(luò)遠(yuǎn)程升級開發(fā)案例
; E i' z/ ~( g案例源碼、產(chǎn)品資料(用戶手冊、核心板硬件資料、產(chǎn)品規(guī)格書)可點(diǎn)site.tronlong.com/pfdownload獲取。
5 s6 T/ V% H6 D$ O: x$ }- Z
$ v" ? N+ |4 ^! P9 E M; ]1 W4 {8 \% `- C, o8 \4 q
2.1 OpenMP簡介
! }; l. Z$ y! Q3 m
* L' z1 X' U- W9 D, ]OpenMP是一種多核開發(fā)軟件框架,其主要特性如下:7 n2 _6 J; z; I5 \' D
5 t8 v1 O- y4 T- V(1) 可跨平臺使用,代碼兼容性強(qiáng)。( z1 O7 K8 j$ R w# ~
(2) 以共享內(nèi)存為通信基礎(chǔ)。
) z! w0 Q4 {$ k/ E% P(3) 支持C/C++以及Fortran語言。/ D% J5 a: p3 _$ X @/ y- s: X
(4) 一般基于SYS/BIOS運(yùn)行。& k5 T% Z5 R- ~( I9 ]+ r
3 F. G( ?- F* |+ x( {" K& Y g+ \: F( f$ ^7 N9 N
​
* P7 P3 j4 ^ m+ n7 f# i圖2
9 T7 k; W& Z- ~) K+ `- R
1 V1 }. B4 L! j, ~1 s F* o5 N8 O4 v; {- C2 r! H" n
2.2 基本語法' G# Y& Q/ w+ q; Z/ a9 q
#pragma omp 指令 [子句 [ [ [,]子句 ] ... ]
, [$ z. J' D& N" m{
8 t! ?2 Q6 @' ` q- q7 ?; ~* H...
# l! ]$ }0 V+ _; T}
0 @. m! Y5 h( p) p7 y3 }$ K( U! t" N/ t# W8 v9 ^ k0 a* D/ `( o& X
表1
& \8 C. M. t; {指令* S! m" O C. ~
| 說明. I/ c$ a2 a8 @! c8 o
| parallel
3 s# \) x% ]7 ~) x | 開始并行執(zhí)行語句
+ b e7 Z# M H% o0 O4 `$ P: u | for& h. w L" t# V+ I7 e
| 在多個(gè)線程中并行執(zhí)行for循環(huán)* N, W0 l6 C3 b# v
| sections+ r) ]" u) @ v( Z- }7 y/ g
| 包含多個(gè)可并行執(zhí)行的sectone結(jié)構(gòu)體1 V$ |4 D+ {$ ^8 d6 w4 q/ }
| single
5 L' l6 Q; F- O3 B) l6 w }$ \5 _/ W | 單線程執(zhí)行( I4 ^. T) a3 n* m- [2 c6 U1 d
| master8 `& Y. r0 |; N$ \3 U- v
| 主線程執(zhí)行$ a. x9 C1 V* v! ~) |
| critical
8 M' \4 f# v2 _4 T( H5 a | 任意時(shí)刻僅可被單個(gè)線程執(zhí)行
# m! K l5 O6 Z$ A' ]( E | barrier
& @& I/ O" j+ |) B/ O# W | 指定屏障,用于同步所有線程: [& |7 A, C8 M* Z* e
| taskwait E/ q$ R3 d: |/ h. }" }
| 等待子線程完成0 U: ~0 f- B( L0 y6 I9 V
| atomic6 N- C7 z# N% j0 G" }4 Y
| 確保指定內(nèi)存位置執(zhí)行原子更新操作* {9 Y4 q L" l" b
| flush
; D. R/ q$ l+ C6 r1 y | 使線程當(dāng)前內(nèi)存數(shù)據(jù)與實(shí)際內(nèi)存數(shù)據(jù)一致
1 y. M, v' O0 g | ordered( @; T0 _5 W1 K5 R9 C) [7 x( B
| 并行執(zhí)行的for循環(huán)將按循環(huán)體變量順序執(zhí)行
: z% b. y" L6 L7 F& R5 z | threadprivate
+ u- x: M. v* q$ R8 `2 k5 @ @ | 指定變量為本地存儲5 S2 ^( k' N+ c0 ?5 B. R4 P
|
% A7 b& Q" p7 c: |表2
* e& d+ I+ S7 M7 F1 ?, p- d子句
: E4 w% M" m* I# x0 v | 說明, Y" l; F+ \% ?
| default
0 m0 E- m$ M% O! P) T; X0 x7 A+ Y7 S | 控制parallel或task結(jié)構(gòu)體中變量數(shù)據(jù)的共享屬性
/ C$ } A& I: g5 S | shared
4 w, w2 I" J/ A' D5 U | parallel或task結(jié)構(gòu)中,一個(gè)或多個(gè)變量為共享變量# Q. G1 z9 U, z
| private
7 d5 w, f& W/ U6 T1 d | 一個(gè)或多個(gè)變量為本地變量8 v$ J2 \, ?$ [$ {& j9 R
| firstprivate4 j" s& u2 w6 g! K9 T( `* f
| 一個(gè)或多個(gè)變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行前的值
$ R1 y$ o+ O' y) j | lastprivate/ C4 Q& Q* K& _9 V1 C9 a: s' R% C
| 一個(gè)或多個(gè)變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行后的值. k- w8 Z3 G% U( k. \, @" R% u
| reduction5 @+ A" ^9 |- h+ [
| 一個(gè)或多個(gè)變量為本地變量,但變量值將根據(jù)不同的運(yùn)算符來決定,執(zhí)行完成后變量值將被更新
8 _& L- L1 H9 o% B% V6 f; w9 [ | copyin a) C1 H8 D' J7 Q+ N
| 使線程本地變量值與主線程變量值相同
+ j6 F: r9 Z6 W* e | copyprivate: S7 U k8 @3 n* s
| 使屬于parallel區(qū)域的變量值在不同線程中相同* ~: r: i) L) H! v
| schedule9 f; `8 l6 B9 w M
| 設(shè)置for循環(huán)并行執(zhí)行方式:dynamic、guided、runtime和static( g8 f6 t6 C+ q
| num_threads
3 C* }1 T( }$ m- o | 線程數(shù)目
S0 u7 |: G4 L5 ^! U | if
7 m2 m* C3 ^" R1 n- C+ V; W% g | 并行語句執(zhí)行條件8 s8 y+ L q5 w) i
| nowait7 Z/ m( Y I! f% Z2 E, @9 g
| 忽略線程同步等待/ m ^5 D" K# Z' D
| ' L% M- G2 U' \* z0 t' S
以裸機(jī)的omp_matavec案例為例,使用場景的概要流程圖如下。$ g# [, I C3 x3 s5 o% t) a! I( x
( g& Y' c0 X$ ?4 u! WC66xx_0核心創(chuàng)建主線程,通過OpenMP框架加載matvec算法至C66xx_0~C66xx_7核心進(jìn)行并行運(yùn)算,從而減少C66xx_0核心負(fù)載,并可加快運(yùn)算速度。
. D+ t$ c4 Z2 S+ C* N現(xiàn)可向廠家免費(fèi)申請TL6678-EasyEVM評估板進(jìn)行快速評估,免費(fèi)哦!技術(shù)研討會:79635273、332643352: P5 f( ^3 V& H7 I# g5 e, w/ c2 S
: Z* c4 M. T/ e6 S; M2 H3 D/ S% s6 b​
& [( H; Y; I" @) k' K6 X圖3
: E4 ^% B1 q2 C* H$ G( _% G2 U- D8 ^% \; D. b q( Q
4 h a& [0 v, s8 r/ N" T2.3 代碼分析7 _. _2 B& {! R& b
以裸機(jī)的omp_matavec案例為例進(jìn)行代碼分析,見圖中注釋。7 s) s+ }8 g! T$ u
1 [! `; W! ~7 N0 E" N* [. G4 s! Y- j+ f* Q# g" k+ F x, ]
, b' K' J, u% u4 J​
: q4 H; ^0 S( [/ j7 I/ V3 @5 c% K1 t: \! x3 P+ f7 p
圖4- b' [* D! a) K9 r6 i& K! P6 ^2 s
. j# a$ D6 @; U5 L* V2 E* q
5 B' m9 c1 e; m" q
更多推薦4 X% q2 o# {& W: o4 x
C6678+K7視頻采集處理方案* ]. b, s. E9 ?
! J5 y; X/ `- i​1 J1 R: v: W5 F+ Y2 |
圖5
8 [6 y8 i& ~' ?& ^% h+ l w( R/ O4 {) r. V& U7 ?6 Z* c
FPGA+DSP的高速AD采集處理開發(fā)詳解* G6 H* f" m/ n; y& }3 G0 n! o/ K
9 z( s2 N' N; s​
) N' t* k4 Z! l% D圖6# f" T4 Y9 K; ]/ i
|
|