您好,登錄后才能下訂單哦!
這篇文章給大家介紹TMS320C6678處理器是如何進行OpenMP多核通信案例,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
下面主要介紹TMS320C6678處理器開發中比較常用的多核通信方式:OpenMP,主要基于創龍科技TL6678-EasyEVM評估板進行演示。
圖1 TL6678-EasyEVM評估板
TL6678-EasyEVM是一款基于TI KeyStone架構C6000系列TMS320C6678八核C66x定點/浮點高性能處理器設計的高端多核DSP評估板,由核心板與底板組成。核心板經過專業的PCB Layout和高低溫測試驗證,穩定可靠,可滿足各種工業應用環境。
評估板接口資源豐富,引出雙路千兆網口、SRIO、PCIe等高速通信接口,方便用戶快速進行產品方案評估與技術預研。
開發案例主要包括:?
(1) 裸機開發案例
(2) RTOS(SYS/BIOS)開發案例
(3) IPC、OpenMP多核開發案例
(4) SRIO、PCIe、雙千兆網口開發案例
(5) 圖像處理開發案例
(6) DSP算法開發案例
(7) 串口、網絡遠程升級開發案例
案例源碼、產品資料(用戶手冊、核心板硬件資料、產品規格書)可點site.tronlong.com/pfdownload獲取。
OpenMP是一種多核開發軟件框架,其主要特性如下:
(1) 可跨平臺使用,代碼兼容性強。
(2) 以共享內存為通信基礎。
(3) 支持C/C++以及Fortran語言。
(4) 一般基于SYS/BIOS運行。
圖2
#pragma omp 指令 [子句 [ [ [,]子句 ] ... ]
{
...
}
表1
指令 | 說明 |
parallel | 開始并行執行語句 |
for | 在多個線程中并行執行for循環 |
sections | 包含多個可并行執行的sectone結構體 |
single | 單線程執行 |
master | 主線程執行 |
critical | 任意時刻僅可被單個線程執行 |
barrier | 指定屏障,用于同步所有線程 |
taskwait | 等待子線程完成 |
atomic | 確保指定內存位置執行原子更新操作 |
flush | 使線程當前內存數據與實際內存數據一致 |
ordered | 并行執行的for循環將按循環體變量順序執行 |
threadprivate | 指定變量為本地存儲 |
表2
子句 | 說明 |
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核心負載,并可加快運算速度。
現可向廠家免費申請TL6678-EasyEVM評估板進行快速評估,免費哦!技術研討會:79635273、332643352
圖3
以裸機的omp_matavec案例為例進行代碼分析,見圖中注釋。
圖4
關于TMS320C6678處理器是如何進行OpenMP多核通信案例就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。