寵物集市-寵物集市華東、華南、華北排行榜一覽表
1825
2025-03-31
前言
嵌入式領域的處理器已向多核架構迅速發展,TI公司的KeyStone架構的TMS320C6678是目前市面上性能最高的多核DSP處理器。TMS320C6678集成8核C66x DSP處理器,每個內核頻率高達1.25 GHz,提供每秒高達40?GMAC定點運算和20?GFLOP浮點運算能力;1片TMS320C6678提供等效達10 GHz的內核頻率,單精度浮點并行運算能力理論上可達160 GFLOP,是TS201S的50倍、C67x+的115.2倍,適合于諸如油氣勘探、雷達信號處理、圖像處理以及定位導航等對定浮點運算能力及實時性有較高要求的超高性能計算應用。
然而,核間通信是多核處理器系統所面臨的主要難點,通信機制的優劣直接影響多核處理器的性能,高效的通信機制是發揮多核處理器高性能的重要保障。
創龍科技(Tronlong)專注于DSP、ARM、FPGA多核異構技術開發,本文為您介紹TMS320C6678處理器開發中比較常用的兩種多核通信方式:TI-IPC和OpenMP,以及多核編程注意事項。
1?硬件平臺
本文基于創龍科技TL6678-EasyEVM評估板進行演示。
TL6678-EasyEVM是一款基于TI KeyStone架構C6000系列TMS320C6678八核C66x定點/浮點高性能處理器設計的高端多核DSP評估板,由核心板與底板組成。核心板經過專業的PCB Layout和高低溫測試驗證,穩定可靠,可滿足各種工業應用環境。
評估板接口資源豐富,引出雙路千兆網口、SRIO、PCIe等高速通信接口,方便用戶快速進行產品方案評估與技術預研。
TL6678-EasyEVM評估板
開發案例主要包括:
(1)?裸機開發案例
(2)?RTOS(SYS/BIOS)開發案例
(3)?IPC、OpenMP多核開發案例
(4)?SRIO、PCIe、雙千兆網口開發案例
(5)?圖像處理開發案例
(6)?DSP算法開發案例
(7)?串口、網絡遠程升級開發案例
C66x DSP視頻教程、中文手冊、產品資料(用戶手冊、核心板硬件資料、產品規格書)可點:site.tronlong.com/pfdownload?直接獲取。
2?TI-IPC
2.1?簡介
TI-IPC(Inter-Processor Communication)組件提供與處理器硬件無關的API,可用于多核處理器核間通信、同一處理器進程間通信和設備間通信。API支持消息傳遞、流和鏈接列表,它們在單處理器和多處理器中配置均可兼容。
TI-IPC被設計在運行SYS/BIOS應用程序的處理器上使用,一般為DSP處理器(如TMS320C6678、TMS320C6657),但在某些情況下亦可能是ARM處理器。
IPC常見的通信模塊如下:
表1
Ipc
提供Ipc_start()函數,并允許配置啟動順序
MessageQ
大小可變的消息傳遞模塊
Notify
以中斷方式實現輕量數據傳輸的模塊
ListMp
用于實現對鏈接列表的互斥訪問
GateMp
用于實現對共享資源的互斥訪問
HeapBufMp
大小固定的共享內存堆
HeapMenMp
大小可變的共享內存堆
SharedRegion
用于維護共享內存區域
List
用于創建雙向鏈接列表
MultiProc
用于管理多核處理器核心ID
NameServer
用于應用程序基于本地名稱檢索,以及存儲變量值
2.2?常用模塊
2.2.1?MessageQ
該模塊具有如下特點:
(1)?兼容性強,可在不更改運行代碼的情況移植至另一個支持TI-IPC MessageQ的處理器或其他傳輸層(如Shared Memory、Multicore Navigator、SRIO)。
(2)?支持可變長度消息的結構化發送與接收。
(3)?單個MessageQ隊列支持單個reader和多個writer。
(4)?消息接收支持超時機制。
(5)?reader可根據消息頭部信息對writer進行確認后再回復。
(6)?Ipc_start()會幫助用戶完成下圖中灰色框內的功能,用戶僅需關注紅色框中的內容即可。
MessageQ通過消息隊列發送和接收消息。reader是一個從消息隊列中讀取消息的線程,writer是一個將消息寫入消息隊列的線程。每個消息隊列都有一個reader,但可有多個writer。
■?reader:調用MessageQ_create()、MessageQ_get()、MessageQ_free()和MessageQ_delete()。
■?writer:調用MessageQ_open()、MessageQ_alloc()、MessageQ_put()和MessageQ_close()。
MessageQ常見的工作流程如下所示。
下面以多核IPC通信的shmIpcBenchmark案例為例,分析代碼中MessageQ的使用,見圖中注釋。
2.2.2?Notify
該模塊具有如下特點:
(1)?可獨立于MessageQ模塊進行使用。
(2)?著重于多核通知功能,是更為簡單的多核通信形式。
(3)?僅可基于Shared Memroy方式進行使用。
Notify通過硬件中斷傳輸消息,Receiver注冊Notify事件中斷,Sender通過Notify發送事件中斷,從而實現通知并攜帶小量消息的目的。
■?Receiver:調用Notify_registerEvent()注冊事件中斷服務函數。
■?Sender:調用Notify_sendEvent()發送事件中斷。
Notify常見的工作流程如下所示。
2.3?物理傳輸方式
TI-IPC的數據傳輸需結合特定物理硬件與底層驅動,方可實現兩個線程在同一個設備或跨設備間進行通信。常用三種的物理傳輸方式包括Shared Memory、Multicore Navigator和SRIO,具體說明如下。
表2
傳輸方式
優點
缺點
Shared Memory
使用簡單,速率較高
僅可用于單個設備IPC通信,可能與其他使用Shared Memory的任務存在競爭
Multicore Navigator
速率最高,消耗CPU周期最少
僅可用于單個設備IPC通信
SRIO
可用于跨設備IPC通信
速率最低
下圖為使用Multicore?Navigator、SRIO的API調用流程,用戶僅需關注MessageQ部分操作即可,其他模塊均由系統自動調用。
3?OpenMP
3.1?簡介
OpenMP是一種多核開發軟件框架,其主要特性如下:
(1)?可跨平臺使用,代碼兼容性強。
(2)?以共享內存為通信基礎。
(3)?支持C/C++以及Fortran語言。
(4)?一般基于SYS/BIOS運行。
3.2?基本語法
#pragma omp?指令?[子句?[ [ [,]子句?] ... ]
{
...
}
表3
指令
說明
parallel
開始并行執行語句
for
在多個線程中并行執行for循環
sections
包含多個可并行執行的sectone結構體
single
單線程執行
master
主線程執行
critical
任意時刻僅可被單個線程執行
barrier
指定屏障,用于同步所有線程
taskwait
等待子線程完成
atomic
確保指定內存位置執行原子更新操作
flush
使線程當前內存數據與實際內存數據一致
ordered
并行執行的for循環將按循環體變量順序執行
threadprivate
指定變量為本地存儲
表4
子句
說明
default
控制parallel或task結構體中變量數據的共享屬性
shared
parallel或task結構中,一個或多個變量為共享變量
private
一個或多個變量為本地變量
firstprivate
一個或多個變量為本地變量,且變量值為并行結構執行前的值
lastprivate
一個或多個變量為本地變量,且變量值為并行結構執行后的值
reduction
一個或多個變量為本地變量,但變量值將根據不同的運算符來決定,執行完成后變量值將被更新
copyin
使線程本地變量值與主線程變量值相同
copyprivate
使屬于parallel區域的變量值在不同線程中相同
schedule
設置for循環并行執行方式:dynamic、guided、runtime和static
num_threads
線程數目
if
并行語句執行條件
nowait
忽略線程同步等待
以裸機的omp_matavec案例為例,使用場景的概要流程圖如下。
C66xx_0核心創建主線程,通過OpenMP框架加載matvec算法至C66xx_0~C66xx_7核心進行并行運算,從而減少C66xx_0核心負載,并可加快運算速度。
3.3?代碼分析
以裸機的omp_matavec案例為例進行代碼分析,見圖中注釋。
4?多核編程注意事項
4.1?多核單/多鏡像
在開發過程中,需將程序可執行文件分別加載至對應的核心運行。此時需了解多核單/多鏡像的優缺點,再根據實際情況進行選擇。
多核單鏡像
多核單鏡像指所有核心運行完全相同的用戶程序。
優點:僅需維護一個工程,管理便捷。
缺點:需兼容多個核心代碼,程序可執行文件較大。
多核多鏡像
多核多鏡像指不同核心運行不同的用戶程序。
優點:無需考慮各核心功能的兼容性,單個程序可執行文件較小。
缺點:需維護多個工程,管理不便。
4.2?外設訪問
所有核心共享外設,如SRIO、PCIe、Ethernet、SPI、I2C、EMIF等。在對外設進行初始化后,所有核心可在任意時間對外設進行讀寫,無需再次初始化。
4.3?數據存儲
(1)?注意區分全局與局部地址。
L1/L2SRAM有全局與局部兩個地址,全局地址可被所有核心訪問,但局部地址僅可被指定核心訪問。
以C66xx_0核心的L2SRAM為例,對應的全局地址為0x10800000,局部地址為0x00800000。C66xx_0核心使用0x10800000或0x00800000,均可訪問C66xx_0核心的L2SRAM。而C66xx_1核心使用0x00800000僅可訪問C66xx_1核心的L2SRAM,使用0x10800000方可訪問C66xx_0核心的L2SRAM。
L2SRAM全局與局部地址對應關系如下表:
表5
核心
全局地址
局部地址
C66xx_0
0x10800000
0x00800000
C66xx_1
0x11800000
0x00800000
C66xx_2
0x12800000
0x00800000
C66xx_3
0x13800000
0x00800000
C66xx_4
0x14800000
0x00800000
C66xx_5
0x15800000
0x00800000
C66xx_6
0x16800000
0x00800000
C66xx_7
0x17800000
0x00800000
(2)注意避免內存沖突。
如數據需存放至MSMCSRAM、DDR3共享內存設備,請將對應內存劃分為MSMCSRAM_MASTER段(主核使用)與MSMCSRAM_SLAVE段(從核使用),從而避免運行時內存沖突。
5?參考鏈接
-IPC
https://training.ti.com/system/files/docs/keystone-intro-ipc-slides.pdf
http://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#ti-sdo-ipc-package
http://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#gatemp-support-for-uio-and-misc-driver
http://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#ti-sdo-utils-package
https://processors.wiki.ti.com/index.php/IPC_Users_Guide/MessageQ_Module
-OpenMP
http://processors.wiki.ti.com/index.php/OpenMP_on_C6000
https://processors.wiki.ti.com/index.php/BIOS_MCSDK_2.0_User_Guide#OpenMP
http://community.topcoder.com/tc?module=Static&d1=features&d2=091106
-Multicore Programming Guide
https://www.ti.com/lit/an/sprab27b/sprab27b.pdf
6?免費試用
可以直接到廠家官網免費申請TL6678-EasyEVM評估板進行快速評估。
7 TMS320C6678 DSP:79635273、332643352
8?更多推薦
基于IPC、OpenMP的C66x多核開發視頻教程
多線程 數據通信
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。