|
前言
9 _6 F) U; s" a; N
- s' B, ~( D1 p$ z1 w​! E4 \& s& F. o1 A/ F% `) k
嵌入式領(lǐng)域的處理器已向多核架構(gòu)迅速發(fā)展,ti公司的KeyStone架構(gòu)的TMS320C6678是目前市面上性能最高的多核DSP處理器。TMS320C6678集成8核C66x DSP處理器,每個(gè)內(nèi)核頻率高達(dá)1.25 GHz,提供每秒高達(dá)40 GMAC定點(diǎn)運(yùn)算和20 GFLOP浮點(diǎn)運(yùn)算能力;1片TMS320C6678提供等效達(dá)10 GHz的內(nèi)核頻率,單精度浮點(diǎn)并行運(yùn)算能力理論上可達(dá)160 GFLOP,是TS201S的50倍、C67x+的115.2倍,適合于諸如油氣勘探、雷達(dá)信號處理、圖像處理以及定位導(dǎo)航等對定浮點(diǎn)運(yùn)算能力及實(shí)時(shí)性有較高要求的超高性能計(jì)算應(yīng)用。3 R W+ _9 p' [( N6 g U+ B
: W+ m9 g4 ?/ r! z' d
​
0 e$ c6 t. |9 x7 }
8 U" q. J4 x/ U; b3 W 然而,核間通信是多核處理器系統(tǒng)所面臨的主要難點(diǎn),通信機(jī)制的優(yōu)劣直接影響多核處理器的性能,高效的通信機(jī)制是發(fā)揮多核處理器高性能的重要保障。
4 u t& I& H6 _: p; a 創(chuàng)龍科技(Tronlong)專注于DSP、ARM、FPGA多核異構(gòu)技術(shù)開發(fā),本文為您介紹TMS320C6678處理器開發(fā)中比較常用的兩種多核通信方式:TI-IPC和OpenMP,以及多核編程注意事項(xiàng)。, h, Y" i- v o B. p
' \/ M4 B1 ?. c, w' d% T. e
1 硬件平臺(tái)3 M) ^1 C; H- H; V" C c: H
本文基于創(chuàng)龍科技TL6678-EasyEVM評估板進(jìn)行演示。# y+ ^7 ~! d+ L" F
" X' L. t" w$ J
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)境。& K6 m% Y3 D& m; I) w. {6 x
評估板接口資源豐富,引出雙路千兆網(wǎng)口、SRIO、PCIe等高速通信接口,方便用戶快速進(jìn)行產(chǎn)品方案評估與技術(shù)預(yù)研。
; i: a! Y1 e: i6 u+ p& B0 e; ?3 t8 K9 d
​
: R8 }: N: ~% _8 k
0 {4 Q0 @; i: q) ?! b/ \TL6678-EasyEVM評估板
9 }7 _" C9 N6 u& ]% V! R, S4 V
]" y5 \7 P4 F' n開發(fā)案例主要包括:
4 e# n, X3 ^: F/ H- m(1) 裸機(jī)開發(fā)案例
% c2 P6 w# j) ?(2) RTOS(SYS/BIOS)開發(fā)案例
1 N) q4 u: V9 s3 ]/ Y9 i(3) IPC、OpenMP多核開發(fā)案例, \/ J+ q* {0 I% J. ?
(4) SRIO、PCIe、雙千兆網(wǎng)口開發(fā)案例
" M" D; M1 `! {( Y(5) 圖像處理開發(fā)案例
% a3 U; s3 G* E4 C* N(6) DSP算法開發(fā)案例
/ a8 f( @6 Z8 T! ~; `(7) 串口、網(wǎng)絡(luò)遠(yuǎn)程升級開發(fā)案例3 t7 q0 n( R7 e, n/ R. c2 M
/ e M [; a: O2 ?3 W! R9 n# wC66x DSP視頻教程、中文手冊、產(chǎn)品資料(用戶手冊、核心板硬件資料、產(chǎn)品規(guī)格書)可點(diǎn):site.tronlong.com/pfdownload 直接獲取。
) ?# j1 u) a2 M9 S9 V6 x8 E
7 D4 x; a% {! _$ T+ W4 C2 TI-IPC' ~5 K2 C9 Z: O) I1 s) M& `4 ^
2.1 簡介
; T2 E' p1 Q2 S D, | ? TI-IPC(Inter-Processor Communication)組件提供與處理器硬件無關(guān)的API,可用于多核處理器核間通信、同一處理器進(jìn)程間通信和設(shè)備間通信。API支持消息傳遞、流和鏈接列表,它們在單處理器和多處理器中配置均可兼容。- ?; ?/ F4 K) u
TI-IPC被設(shè)計(jì)在運(yùn)行SYS/BIOS應(yīng)用程序的處理器上使用,一般為DSP處理器(如TMS320C6678、TMS320C6657),但在某些情況下亦可能是ARM處理器。5 i- {4 y; S; j9 L8 g; O; m! n7 M
/ O2 Y/ K* G3 r \2 u8 p* z​
& M' r/ Z4 Q7 T5 l$ z r+ B- I
/ ?3 h5 V( u- r4 NIPC常見的通信模塊如下:
O V0 v9 q" b* a! `) T9 F表1
& }9 a n- J& a; |# S! ?5 fIpc8 R. a, k e9 w$ H/ K& n4 T0 u5 ^
| 提供Ipc_start()函數(shù),并允許配置啟動(dòng)順序
2 r! {; Y! X& X; x! D | MessageQ% B0 g0 k: t2 M4 k$ R+ M* N; ~
| 大小可變的消息傳遞模塊, J4 z. D/ V% o$ E2 O# K1 A! d R
| Notify* A: K0 q: d% z d" t+ Q4 a; P
| 以中斷方式實(shí)現(xiàn)輕量數(shù)據(jù)傳輸的模塊
3 {4 G! z r" L$ a/ s5 W0 ? | ListMp+ A0 P4 E; ]$ `' F8 y8 k. V" h' R
| 用于實(shí)現(xiàn)對鏈接列表的互斥訪問
# [4 J/ J" F! O; S0 @2 O" o% _ | GateMp6 Z# @. D0 x7 Q8 s0 w# ~
| 用于實(shí)現(xiàn)對共享資源的互斥訪問
, c- _- |8 X6 l/ { | HeapBufMp
5 w( u" r+ n" }; u7 X* W: N | 大小固定的共享內(nèi)存堆
& J4 f9 {4 {9 ?. z$ g$ E | HeapMenMp
1 `; w6 x; i, e" U4 s | 大小可變的共享內(nèi)存堆
# i( l) ^# N9 t1 E* \- E; X1 k% \$ G | SharedRegion) m8 r2 k* Y* B
| 用于維護(hù)共享內(nèi)存區(qū)域
/ x' I3 N' y( s. [ | List
3 m# c9 k3 q2 ~. R | 用于創(chuàng)建雙向鏈接列表& C! D( d" P- w/ E
| MultiProc e) E; I) b: R% U6 i0 ]( g2 \' |
| 用于管理多核處理器核心ID
3 y( `" [, ]% ]. ` | NameServer
( I0 F- F0 [9 L6 c | 用于應(yīng)用程序基于本地名稱檢索,以及存儲(chǔ)變量值# N( h* A: X( k
|
6 k x) e6 ~. | j' u4 x0 P
* u' _& e, b% g0 l6 J% K​
1 L+ s q [/ }. Y. P& v7 I
+ w/ K3 N( v2 r2 P a1 F8 W6 J9 P6 o) {% B3 I% C' ?. f
5 a N: l7 b; P- t, _" v" C( \
2.2 常用模塊5 ]% w6 n7 g3 C/ S- o6 Y4 T
2.2.1 MessageQ1 Q! M. ~6 d2 \/ s( C
該模塊具有如下特點(diǎn):
) W; U0 b% L: z% P+ U2 Y(1) 兼容性強(qiáng),可在不更改運(yùn)行代碼的情況移植至另一個(gè)支持TI-IPC MessageQ的處理器或其他傳輸層(如Shared Memory、Multicore Navigator、SRIO)。
& D& w7 w; J# E# N(2) 支持可變長度消息的結(jié)構(gòu)化發(fā)送與接收。
2 m, t1 q9 O8 k( b(3) 單個(gè)MessageQ隊(duì)列支持單個(gè)reader和多個(gè)writer。) }+ K3 ]' X# ^7 J
(4) 消息接收支持超時(shí)機(jī)制。
# z# R. N `1 N* |2 C* d! g4 k(5) reader可根據(jù)消息頭部信息對writer進(jìn)行確認(rèn)后再回復(fù)。
; T; o/ X% b% S- M+ j(6) Ipc_start()會(huì)幫助用戶完成下圖中灰色框內(nèi)的功能,用戶僅需關(guān)注紅色框中的內(nèi)容即可。# T K- w$ D" U5 B0 G/ F
7 b* L- E$ {7 Q ]' x1 C U; A# t​ q/ Q6 x9 e$ i5 B; b3 B
) E; E; `5 D3 t$ D( e( z
MessageQ通過消息隊(duì)列發(fā)送和接收消息。reader是一個(gè)從消息隊(duì)列中讀取消息的線程,writer是一個(gè)將消息寫入消息隊(duì)列的線程。每個(gè)消息隊(duì)列都有一個(gè)reader,但可有多個(gè)writer。 u+ L7 g1 W0 r. r- L
■ reader:調(diào)用MessageQ_create()、MessageQ_get()、MessageQ_free()和MessageQ_delete()。: v. a% _& E& ?0 @& W9 a9 ~) [) V- q
■ writer:調(diào)用MessageQ_open()、MessageQ_alloc()、MessageQ_put()和MessageQ_close()。
% H) n+ e- U/ M MessageQ常見的工作流程如下所示。: s6 U1 z; r6 G/ [, }% x
: v) N! C* @' {" x- ?# e​
! g# x! B' e! G& {2 \/ j6 y2 u$ F& E+ D
( q7 f; \& |3 N& f% ^0 g: s 下面以多核IPC通信的shmIpcBenchmark案例為例,分析代碼中MessageQ的使用,見圖中注釋。8 {* I. T( }% u' s
8 M. q% a0 ?0 @2 B4 F
7 ~! ^ H/ d) T$ p) I
​; Q) f/ t, d$ G
6 J# O- Z* B; x" M7 |: V9 Q
]) p& m' b/ h9 A6 ` ]& ]" _
​
3 \6 S" x. W# Q
& i) R# E6 i5 Z; M) D- s- X5 `& {) n- l6 S7 U' l! K! V9 D
2.2.2 Notify# o2 g2 |8 n& Z& X+ ^7 r
該模塊具有如下特點(diǎn):
. ]5 h1 t3 n" F7 Y( ^
6 {: P( }4 I: \* _; M! X(1) 可獨(dú)立于MessageQ模塊進(jìn)行使用。! X# Z' w. o) E& F
(2) 著重于多核通知功能,是更為簡單的多核通信形式。. t. k/ b: f" L
& m9 z1 y7 W% L0 w$ N* B! I, C
​+ `& z$ t: k3 j, T# C6 E1 v0 C* p
E0 N0 W: t/ x% c5 t- j
(3) 僅可基于Shared Memroy方式進(jìn)行使用。8 i' d. G3 l+ g/ V" d1 L
/ x3 m9 F* P2 A9 D​" q; F* ^" @* |; c
7 Y3 V G- b$ u
Notify通過硬件中斷傳輸消息,Receiver注冊Notify事件中斷,Sender通過Notify發(fā)送事件中斷,從而實(shí)現(xiàn)通知并攜帶小量消息的目的。 Q& j/ F$ H, P o+ K1 k
. E; b$ |9 R+ D+ V, e6 L
■ Receiver:調(diào)用Notify_registerEvent()注冊事件中斷服務(wù)函數(shù)。
g- ]4 r+ _) K! X/ g7 ]■ Sender:調(diào)用Notify_sendEvent()發(fā)送事件中斷。9 w8 S; n$ F; W5 [5 d4 S8 P% ^
. ?3 d2 ~8 Y2 m0 U) ?- j
Notify常見的工作流程如下所示。+ S1 u% r7 c; _: u' [& ]
4 l$ I0 b9 p- Q​2 ~8 _6 Y+ ^; A
. J' _) `8 x7 T( }! B5 e8 V& P% C5 T% Z8 u3 _3 B
2.3 物理傳輸方式7 ^9 P: P* _9 D! V
TI-IPC的數(shù)據(jù)傳輸需結(jié)合特定物理硬件與底層驅(qū)動(dòng),方可實(shí)現(xiàn)兩個(gè)線程在同一個(gè)設(shè)備或跨設(shè)備間進(jìn)行通信。常用三種的物理傳輸方式包括Shared Memory、Multicore Navigator和SRIO,具體說明如下。: q0 T& H3 s- E3 e3 c
0 K5 e% a, K4 }: }9 T表2& m6 H* S8 y, x1 j
傳輸方式
7 e' }( }- V1 d& o | 優(yōu)點(diǎn)) ^6 L, j Y; y: M" P& h
| 缺點(diǎn)
% N4 `8 z* l u% u) z% G1 C | Shared Memory% B+ Q; r( z r0 |& u' o$ }
| 使用簡單,速率較高
$ i- \9 M4 R! f, s0 @ | 僅可用于單個(gè)設(shè)備IPC通信,可能與其他使用Shared Memory的任務(wù)存在競爭
* o( s; Z i7 r | Multicore Navigator
; {+ {) f( [8 h) f" N | 速率最高,消耗CPU周期最少
/ R% V8 H& J$ K# W& ~ | 僅可用于單個(gè)設(shè)備IPC通信
; H1 I6 y% w- ~/ Q, P( U | SRIO
Z; N0 T1 M7 M' [6 G0 } | 可用于跨設(shè)備IPC通信, e, P( W5 W$ d: A
| 速率最低* A/ ]& d; I: b* i" w
|
, i1 H. a. K5 k& @5 P 下圖為使用Multicore Navigator、SRIO的API調(diào)用流程,用戶僅需關(guān)注MessageQ部分操作即可,其他模塊均由系統(tǒng)自動(dòng)調(diào)用。
+ t, i( p9 j4 i/ x% t
V4 r$ P2 I, Q4 v/ n- i8 p) t: M
​; ?* F6 {$ z" Y5 D" ~" d
/ t# @7 b% e. M5 G$ z, Y
8 [$ b% ~2 G$ i; H) ]​
, `! Q3 g0 {& Q: Q7 q# ^* J! H1 d' w* t" M1 S! B. B
0 i0 J4 t5 d: A6 q0 X0 }$ ^
3 OpenMP
; m' \5 D4 T# Z( ^3 L3.1 簡介OpenMP是一種多核開發(fā)軟件框架,其主要特性如下:2 N. t. u/ z: a0 a
(1) 可跨平臺(tái)使用,代碼兼容性強(qiáng)。
- Z4 l* R# u* Z! H4 P(2) 以共享內(nèi)存為通信基礎(chǔ)。
$ P# ]$ C5 ]; W& u- S(3) 支持C/C++以及Fortran語言。
( P* y2 A z7 G: o4 U(4) 一般基于SYS/BIOS運(yùn)行。 |; c) i3 E. P2 E
& X2 O( Z4 u6 v! a p) P, v& g​7 O5 Z+ T& O2 e' s; t$ `8 j8 r
/ _6 P4 l5 ]/ S O8 T5 ]+ _
3.2 基本語法3 r8 a+ e% ^7 s) I2 }" J# E
#pragma omp 指令 [子句 [ [ [,]子句 ] ... ]
2 W8 ?% ]) G/ Y' B0 g3 c/ V8 r{5 W( U( Y4 }8 s" ^' H
...
& E/ m2 @. R/ z. g7 G}
- ? S4 Z: ?$ W
# T' o4 T) I3 O+ W, c 表3
8 k2 b7 ^4 X, L( R/ p; T$ r6 c指令
1 v1 k! o, Z2 G. i' C | 說明
/ r5 _- b8 e% J | parallel3 K, V9 X4 ?% \$ j( r9 k
| 開始并行執(zhí)行語句! w& e; `- V W
| for
. L# d5 ]" n, ` h/ l, T2 d4 I: l | 在多個(gè)線程中并行執(zhí)行for循環(huán)
6 C0 I# W7 V! V* G8 N | sections9 n1 P X7 x) X: Y
| 包含多個(gè)可并行執(zhí)行的sectone結(jié)構(gòu)體
; S! `: U: w% m, L* N w# H5 c | single
1 {8 n3 \4 c) B | 單線程執(zhí)行
+ ?2 m1 o, P3 e# P | master0 |0 F/ M7 |* Q: z
| 主線程執(zhí)行! V& V H/ ]- o# j8 s) y5 @
| critical% H# h- z2 d5 _8 ^1 E
| 任意時(shí)刻僅可被單個(gè)線程執(zhí)行
* x, c/ n6 O( h. M; o8 o: K4 U | barrier
5 D& `, e+ _+ g" { | 指定屏障,用于同步所有線程
3 I0 `+ K0 I/ { | taskwait
8 W1 V. I) |: R* D | 等待子線程完成
6 P# K5 K; b' L$ `$ e9 l) q4 o( Y | atomic: L" W2 d- t; q2 T
| 確保指定內(nèi)存位置執(zhí)行原子更新操作9 g6 H' G- n: N& k
| flush4 s- v8 `& P+ l3 R s$ m
| 使線程當(dāng)前內(nèi)存數(shù)據(jù)與實(shí)際內(nèi)存數(shù)據(jù)一致
) [/ I% q5 n* A5 J, [4 ] | ordered3 ^4 _0 ^2 w8 t' E2 J# N
| 并行執(zhí)行的for循環(huán)將按循環(huán)體變量順序執(zhí)行
/ ]3 }/ T q' ]8 J! n) c- O | threadprivate( T8 O" u& `1 u
| 指定變量為本地存儲(chǔ)7 j# f& ]" e# m- ~* [3 H
| ) r9 P6 d, |8 i+ w3 C% d' W
表4
( ~# {; V7 X, N) t子句
" a3 G" } n u | 說明
2 E8 Y1 x' X6 E, V0 k; K | default
5 n5 Q! _& ^/ ~% m: P+ l% U | 控制parallel或task結(jié)構(gòu)體中變量數(shù)據(jù)的共享屬性
0 w2 p& k% g8 @/ d+ |7 {% l | shared; m" r6 Q! H4 _& D1 Z
| parallel或task結(jié)構(gòu)中,一個(gè)或多個(gè)變量為共享變量5 H. f4 E }2 k9 n7 s
| private1 v7 e7 m: ~2 K' k- A" g+ s L$ ?
| 一個(gè)或多個(gè)變量為本地變量2 R& X% T% u6 w
| firstprivate0 B2 p6 i2 ]) c7 b2 G. D) k
| 一個(gè)或多個(gè)變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行前的值, z8 a$ L, V ^/ z
| lastprivate
. u2 L/ t5 c. x# b/ i | 一個(gè)或多個(gè)變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行后的值. {% f, K* S7 {! d; j3 C
| reduction3 r- p9 F9 i& ^! U
| 一個(gè)或多個(gè)變量為本地變量,但變量值將根據(jù)不同的運(yùn)算符來決定,執(zhí)行完成后變量值將被更新
1 l6 o9 U8 A5 a | copyin
# T, Q9 L! R" \) S( A | 使線程本地變量值與主線程變量值相同3 o7 L1 i# t* o' Q! V. y9 u
| copyprivate
- h ]7 k& l4 J | 使屬于parallel區(qū)域的變量值在不同線程中相同
: y8 M W' W D' V4 L | schedule
W2 e( b1 U; ?" T" V" ~! x1 X | 設(shè)置for循環(huán)并行執(zhí)行方式:dynamic、guided、runtime和static
6 i2 K& g1 x( ?' e3 R P$ z | num_threads! N; m* c; e- H8 L
| 線程數(shù)目; U" d3 b* M& z# d& ^
| if9 X8 s! n" H# }
| 并行語句執(zhí)行條件9 `; H3 L) T7 A* Z! v# v
| nowait; J. G# Q" z( m. V; j7 f2 P! m C
| 忽略線程同步等待
% C X& ^3 G* H8 M! F$ w" l | + n* ^) P9 q3 X e
以裸機(jī)的omp_matavec案例為例,使用場景的概要流程圖如下。
( x# r, Z5 {/ [! A C66xx_0核心創(chuàng)建主線程,通過OpenMP框架加載matvec算法至C66xx_0~C66xx_7核心進(jìn)行并行運(yùn)算,從而減少C66xx_0核心負(fù)載,并可加快運(yùn)算速度。
. m% M- u& n8 [" x( z/ Z7 U8 D' r* A2 p- u$ l* S$ o$ c
2 t i( l# ~4 i: z! m
​5 L! h2 t9 p1 [% Z3 m- J$ f
8 i. B' g- p+ G" ]' T8 {( t1 ~ g
6 \& m5 u- r% k: M( M3.3 代碼分析, l! n9 T3 ~: d* @* D
以裸機(jī)的omp_matavec案例為例進(jìn)行代碼分析,見圖中注釋。% W% c, a( l/ |5 r. R7 x; C6 |
5 g- `" B0 E3 [6 @2 ^( a) @# e
# _0 Q% ]* r2 q​
9 c/ w' E" g* T7 W& `8 T6 M& b2 { m- C( @( M g0 k/ X0 T1 a$ g
W( g$ T3 J4 g! ?& j3 O4 多核編程注意事項(xiàng); A2 E3 b& u1 M# W
4.1 多核單/多鏡像
0 b! G* O, u4 Y! w: s 在開發(fā)過程中,需將程序可執(zhí)行文件分別加載至對應(yīng)的核心運(yùn)行。此時(shí)需了解多核單/多鏡像的優(yōu)缺點(diǎn),再根據(jù)實(shí)際情況進(jìn)行選擇。9 f0 H5 w- J7 k3 k% M" e
多核單鏡像' [' K" Y, x4 e/ Z+ x# k
多核單鏡像指所有核心運(yùn)行完全相同的用戶程序。/ L- v5 |+ c$ J
優(yōu)點(diǎn):僅需維護(hù)一個(gè)工程,管理便捷。
3 z" ]( _9 O% S6 a" @缺點(diǎn):需兼容多個(gè)核心代碼,程序可執(zhí)行文件較大。
% z, D& D f7 h) g0 W Y6 \1 v- @8 g$ k
多核多鏡像
4 O! h) L n' U多核多鏡像指不同核心運(yùn)行不同的用戶程序。# u0 b/ Z4 s' z
優(yōu)點(diǎn):無需考慮各核心功能的兼容性,單個(gè)程序可執(zhí)行文件較小。% I1 K) t% U* U: H
缺點(diǎn):需維護(hù)多個(gè)工程,管理不便。
( h o) c* ]: i* G6 l6 Q' L" ~6 e2 r3 U4 x* `& |! ~
, ~$ h- ~# m3 K, r3 F8 R7 a
4.2 外設(shè)訪問
! J2 g; n& u; z4 n6 K( w m 所有核心共享外設(shè),如SRIO、PCIe、Ethernet、SPI、I2C、EMIF等。在對外設(shè)進(jìn)行初始化后,所有核心可在任意時(shí)間對外設(shè)進(jìn)行讀寫,無需再次初始化。' n% ], v5 z) a# r
1 P! s% u) ]* n) v​
' c) s0 S" |# \: o
2 G+ c5 P4 u/ ^7 G6 Z! ]
+ q4 T+ p8 Z2 I% l9 L) B5 W% A4 ?4.3 數(shù)據(jù)存儲(chǔ)
# b; G; C, r( ?+ ?(1) 注意區(qū)分全局與局部地址。
2 @- l F2 L7 s6 C; E L1/L2SRAM有全局與局部兩個(gè)地址,全局地址可被所有核心訪問,但局部地址僅可被指定核心訪問。& Q* Y$ V! Q8 d2 [+ v6 _+ K! m1 `& Q' h
以C66xx_0核心的L2SRAM為例,對應(yīng)的全局地址為0x10800000,局部地址為0x00800000。C66xx_0核心使用0x10800000或0x00800000,均可訪問C66xx_0核心的L2SRAM。而C66xx_1核心使用0x00800000僅可訪問C66xx_1核心的L2SRAM,使用0x10800000方可訪問C66xx_0核心的L2SRAM。
+ W- S9 ^( _$ Y+ z' }# J3 m0 A3 j3 s) E$ }& X1 S; p3 r, U! X9 H
L2SRAM全局與局部地址對應(yīng)關(guān)系如下表:
- Q& L* R4 {* G9 J1 x. l) A6 C 表5$ r: X1 ~! y) y5 B8 ?! K- d
核心
z) H& J; S: K4 Z | 全局地址
) o3 P9 q7 ]4 z( H: c$ L | 局部地址
. N6 T, I' @, g! s t6 o | C66xx_0- B+ s+ f* I9 ]# g
| 0x10800000
# M3 g& U) N/ ?8 s% X | 0x00800000
# e0 ^9 R% N" x0 _$ I3 P | C66xx_1# R1 i% B* ^8 D5 P" L2 l
| 0x11800000
: Q: v. Z# z$ P+ F: C0 i | 0x00800000
& o+ h: `; M1 Q7 Y) Q' a- X | C66xx_2' N! J6 q# Q- F5 K$ w
| 0x12800000
4 U! [5 `& I3 Q | 0x00800000* W# W' u# z h( y
| C66xx_3, l2 M# h1 j m! q1 m R
| 0x13800000
/ e" D# }) b" b0 i9 y i* z8 o | 0x00800000: _9 X% O) s8 v0 ]* f5 N# K) A
| C66xx_4. \% Z+ ?+ C- q# V. @% [
| 0x14800000 O6 Z" l9 v/ r5 S- B5 h6 F9 ?" N
| 0x00800000" r" ^: h3 M, ~8 E. [6 a% {! K1 E
| C66xx_5
3 ^ Q h+ l7 e* X2 y3 D | 0x158000001 v1 c6 N6 m2 H& g
| 0x00800000
3 ?+ u! ~7 |7 r3 e7 g5 l | C66xx_6
. U/ P4 W' Z( L9 ~2 ?* T, l* j | 0x16800000' Q" l! p6 a0 S
| 0x008000005 H b4 H; X1 q8 M' ]
| C66xx_7
8 s% f* k0 r9 n9 X- ?1 o6 l | 0x17800000
. i: c% K$ \% \ J0 N7 n$ g | 0x00800000
. D1 Q3 H! v1 K- e% k8 z9 I" j |
+ V9 Q4 `% g3 _! i3 e% M3 H% ^(2)注意避免內(nèi)存沖突。
1 A$ {, S; w7 {* E如數(shù)據(jù)需存放至MSMCSRAM、ddr3共享內(nèi)存設(shè)備,請將對應(yīng)內(nèi)存劃分為MSMCSRAM_MASTER段(主核使用)與MSMCSRAM_SLAVE段(從核使用),從而避免運(yùn)行時(shí)內(nèi)存沖突。$ t. @/ T( M$ \# A v/ ^( Q* R8 ~
5 g3 N5 ]1 Z `( ?. s( ?, e, `$ u
0 v0 ]. L+ g( S* q6 G; p k
​7 k( J3 ` `+ Q4 W( R- a6 }% a
6 o- {& U$ I+ n, w5 參考鏈接
6 [: S6 v" C1 G/ A-IPC
# c# I; J! I4 L: q/ Hhttps://training.ti.com/system/files/docs/keystone-intro-ipc-slides.pdf* P; ^1 G4 A4 Z- ]
http://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#ti-sdo-ipc-package
7 i& R- A% g0 d; S1 A' `: e- [: _http://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#gatemp-support-for-uio-and-misc-driver# @5 e) y5 A) ?5 a1 T+ v ]& r
http://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#ti-sdo-utils-package, ]$ H5 Y3 r# w0 T1 l
https://processors.wiki.ti.com/index.php/IPC_Users_Guide/MessageQ_Module4 F/ W* e, f& i$ J* X7 |
# h6 i) S8 J/ j' b! ` [
-OpenMP+ `& o; e$ v) `+ Y5 c" p/ E
http://processors.wiki.ti.com/index.php/OpenMP_on_C60001 D5 _5 T2 q& U& d* l
https://processors.wiki.ti.com/index.php/BIOS_MCSDK_2.0_User_Guide#OpenMP
: _- }( G3 |! c6 ?9 E/ h; I$ n, Zhttp://community.topcoder.com/tc?module=Static&d1=features&d2=091106" e% ~3 O3 f! w0 F3 G- _
4 L9 R- U A, r" f
-Multicore Programming Guide
7 k- ?0 s. G3 ^- q% j" t9 k4 zhttps://www.ti.com/lit/an/sprab27b/sprab27b.pdf/ |: o2 x) G/ b" Q
: L5 M. x( ]) A
6 免費(fèi)試用
, k9 K# H$ n, z& M V q可以直接到廠家官網(wǎng)免費(fèi)申請TL6678-EasyEVM評估板進(jìn)行快速評估。
- I- w3 G* N) s* i* q) v4 ~+ Q1 t+ ]# ?" W: A! v: r
7 T; `5 \6 ]1 Y
% H# P2 a k5 K8 更多推薦
. Q, d+ e: @; a' F基于IPC、OpenMP的C66x多核開發(fā)視頻教程
- h$ c) v L6 K% g5 _0 \( j5 _. B2 j, C/ T
8 k# w# r' O9 s- o
3 `$ w: i [) \8 e |
|