chinese腹肌校草洗澡小说_中文无码天天av天天爽_飘雪影院免费版在线观看视频_成全视频高清免费观看在线播放_大地资源中文在线观看官网第二页_军人各种做高h尿在里面_亂伦丰满人妻av怡红院_欧美中字狠狠第一页_小收影院 成人a片产无码免费视频奶头

TMS320C6678無法連接?看看多核通信方式TI-IPC和OpenMP多核編程

share

前言?嵌入式領(lǐng)域的處理器已向多核架構(gòu)迅速發(fā)展,TI公司的KeyStone架構(gòu)的TMS320C6678是目前市面上性能最高的多核DSP處理器。TMS320C6678集成8核C66xDSP處理器,每個內(nèi)核頻率高達(dá)1.25GHz,提供每秒高達(dá)40GMAC定點運算和20GFLOP浮點運算能力;1片TMS320C6678提供等效達(dá)10GHz的內(nèi)核頻率,單精度浮點并行運算能力理論上可達(dá)160GFLOP,是TS201S的50倍、C67x+的115.2倍,適合于諸如油氣勘探、雷達(dá)信號處理、圖像處理以及定位導(dǎo)航等對定浮點運算能力及實時性有較高要求的超高性能計算應(yīng)用。?然而,核間通信是多核處理器系統(tǒng)所面臨的主要難點,通信機(jī)制的優(yōu)劣直接影響多核處理器的性能,高效的通信機(jī)制是發(fā)揮多核處理器高性能的重要保障。創(chuàng)龍科技(Tronlong)專注于DSP、ARM、FPGA多核異構(gòu)技術(shù)開發(fā),本文為您介紹TMS320C6678處理器開發(fā)中比較常用的兩種多核通信方式:TI-IPC和OpenMP,以及多核編程注意事項。1硬件平臺本文基于創(chuàng)龍科技TL6678-EasyEVM評估板進(jìn)行演示。TL6678-EasyEVM是一款基于TIKeyStone架構(gòu)c6000系列TMS320C6678八核C66x定點/浮點高性能處理器設(shè)計的高端多核DSP評估板,由核心板與底板組成。核心板經(jīng)過專業(yè)的PCBLayout和高低溫測試驗證,穩(wěn)定可靠,可滿足各種工業(yè)應(yīng)用環(huán)境。評估板接口資源豐富,引出雙路千兆網(wǎng)口、SRIO、PCIe等高速通信接口,方便用戶快速進(jìn)行產(chǎn)品方案評估與技術(shù)預(yù)研。 ?TL6678-EasyEVM評估板開發(fā)案例主要包括:(1)裸機(jī)開發(fā)案例(2)RTOS(SYS/BIOS)開發(fā)案例(3)IPC、OpenMP多核開發(fā)案例(4)SRIO、PCIe、雙千兆網(wǎng)口開發(fā)案例(5)圖像處理開發(fā)案例(6)DSP算法開發(fā)案例(7)串口、網(wǎng)絡(luò)遠(yuǎn)程升級開發(fā)案例C66xDSP視頻教程、中文手冊、產(chǎn)品資料(用戶手冊、核心板硬件資料、產(chǎn)品規(guī)格書)可點:site.tronlong.com/pfdownload直接獲取。2TI-IPC2.1簡介TI-IPC(Inter-ProcessorCommunication)組件提供與處理器硬件無關(guān)的API,可用于多核處理器核間通信、同一處理器進(jìn)程間通信和設(shè)備間通信。API支持消息傳遞、流和鏈接列表,它們在單處理器和多處理器中配置均可兼容。TI-IPC被設(shè)計在運行SYS/BIOS應(yīng)用程序的處理器上使用,一般為DSP處理器(如TMS320C6678、TMS320C6657),但在某些情況下亦可能是ARM處理器。 ?IPC常見的通信模塊如下:表1 Ipc 提供Ipc_start()函數(shù),并允許配置啟動順序 MessageQ 大小可變的消息傳遞模塊 Notify 以中斷方式實現(xiàn)輕量數(shù)據(jù)傳輸?shù)哪K ListMp 用于實現(xiàn)對鏈接列表的互斥訪問 GateMp 用于實現(xiàn)對共享資源的互斥訪問 HeapBufMp 大小固定的共享內(nèi)存堆 HeapMenMp 大小可變的共享內(nèi)存堆 SharedRegion 用于維護(hù)共享內(nèi)存區(qū)域 List 用于創(chuàng)建雙向鏈接列表 MultiProc 用于管理多核處理器核心ID NameServer 用于應(yīng)用程序基于本地名稱檢索,以及存儲變量值 ?2.2常用模塊2.2.1MessageQ該模塊具有如下特點:(1)兼容性強(qiáng),可在不更改運行代碼的情況移植至另一個支持TI-IPCMessageQ的處理器或其他傳輸層(如SharedMemory、MulticoreNavigator、SRIO)。(2)支持可變長度消息的結(jié)構(gòu)化發(fā)送與接收。(3)單個MessageQ隊列支持單個reader和多個writer。(4)消息接收支持超時機(jī)制。(5)reader可根據(jù)消息頭部信息對writer進(jìn)行確認(rèn)后再回復(fù)。(6)Ipc_start()會幫助用戶完成下圖中灰色框內(nèi)的功能,用戶僅需關(guān)注紅色框中的內(nèi)容即可。 ?MessageQ通過消息隊列發(fā)送和接收消息。reader是一個從消息隊列中讀取消息的線程,writer是一個將消息寫入消息隊列的線程。每個消息隊列都有一個reader,但可有多個writer?!鰎eader:調(diào)用MessageQ_create()、MessageQ_get()、MessageQ_free()和MessageQ_delete()?!鰓riter:調(diào)用MessageQ_open()、MessageQ_alloc()、MessageQ_put()和MessageQ_close()。MessageQ常見的工作流程如下所示。 ?下面以多核IPC通信的shmIpcBenchmark案例為例,分析代碼中MessageQ的使用,見圖中注釋。 ? ?2.2.2Notify該模塊具有如下特點:(1)可獨立于MessageQ模塊進(jìn)行使用。(2)著重于多核通知功能,是更為簡單的多核通信形式。 ?(3)僅可基于SharedMemroy方式進(jìn)行使用。 ?Notify通過硬件中斷傳輸消息,Receiver注冊Notify事件中斷,Sender通過Notify發(fā)送事件中斷,從而實現(xiàn)通知并攜帶小量消息的目的?!鯮eceiver:調(diào)用Notify_registerEvent()注冊事件中斷服務(wù)函數(shù)?!鯯ender:調(diào)用Notify_sendEvent()發(fā)送事件中斷。Notify常見的工作流程如下所示。 ?2.3物理傳輸方式TI-IPC的數(shù)據(jù)傳輸需結(jié)合特定物理硬件與底層驅(qū)動,方可實現(xiàn)兩個線程在同一個設(shè)備或跨設(shè)備間進(jìn)行通信。常用三種的物理傳輸方式包括SharedMemory、MulticoreNavigator和SRIO,具體說明如下。表2 傳輸方式 優(yōu)點 缺點 SharedMemory 使用簡單,速率較高 僅可用于單個設(shè)備IPC通信,可能與其他使用SharedMemory的任務(wù)存在競爭 MulticoreNavigator 速率最高,消耗CPU周期最少 僅可用于單個設(shè)備IPC通信 SRIO 可用于跨設(shè)備IPC通信 速率最低 下圖為使用MulticoreNavigator、SRIO的API調(diào)用流程,用戶僅需關(guān)注MessageQ部分操作即可,其他模塊均由系統(tǒng)自動調(diào)用。 ? ?3OpenMP3.1簡介OpenMP是一種多核開發(fā)軟件框架,其主要特性如下:(1)可跨平臺使用,代碼兼容性強(qiáng)。(2)以共享內(nèi)存為通信基礎(chǔ)。(3)支持C++/C++以及Fortran語言。(4)一般基于SYS/BIOS運行。 ?3.2基本語法#pragmaomp指令[子句[[[,]子句]...]{...}表3 指令 說明 parallel 開始并行執(zhí)行語句 for 在多個線程中并行執(zhí)行for循環(huán) sections 包含多個可并行執(zhí)行的sectone結(jié)構(gòu)體 single 單線程執(zhí)行 master 主線程執(zhí)行 critical 任意時刻僅可被單個線程執(zhí)行 barrier 指定屏障,用于同步所有線程 taskwait 等待子線程完成 atomic 確保指定內(nèi)存位置執(zhí)行原子更新操作 flush 使線程當(dāng)前內(nèi)存數(shù)據(jù)與實際內(nèi)存數(shù)據(jù)一致 ordered 并行執(zhí)行的for循環(huán)將按循環(huán)體變量順序執(zhí)行 threadprivate 指定變量為本地存儲 表4 子句 說明 default 控制parallel或task結(jié)構(gòu)體中變量數(shù)據(jù)的共享屬性 shared parallel或task結(jié)構(gòu)中,一個或多個變量為共享變量 private 一個或多個變量為本地變量 firstprivate 一個或多個變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行前的值 lastprivate 一個或多個變量為本地變量,且變量值為并行結(jié)構(gòu)執(zhí)行后的值 reduction 一個或多個變量為本地變量,但變量值將根據(jù)不同的運算符來決定,執(zhí)行完成后變量值將被更新 copyin 使線程本地變量值與主線程變量值相同 copyprivate 使屬于parallel區(qū)域的變量值在不同線程中相同 schedule 設(shè)置for循環(huán)并行執(zhí)行方式:dynamic、guided、runtime和static num_threads 線程數(shù)目 if 并行語句執(zhí)行條件 nowait 忽略線程同步等待 以裸機(jī)的omp_matavec案例為例,使用場景的概要流程圖如下。C66xx_0核心創(chuàng)建主線程,通過OpenMP框架加載matvec算法至C66xx_0~C66xx_7核心進(jìn)行并行運算,從而減少C66xx_0核心負(fù)載,并可加快運算速度。 ?3.3代碼分析以裸機(jī)的omp_matavec案例為例進(jìn)行代碼分析,見圖中注釋。 ?4多核編程注意事項4.1多核單/多鏡像在開發(fā)過程中,需將程序可執(zhí)行文件分別加載至對應(yīng)的核心運行。此時需了解多核單/多鏡像的優(yōu)缺點,再根據(jù)實際情況進(jìn)行選擇。多核單鏡像多核單鏡像指所有核心運行完全相同的用戶程序。優(yōu)點:僅需維護(hù)一個工程,管理便捷。缺點:需兼容多個核心代碼,程序可執(zhí)行文件較大。多核多鏡像多核多鏡像指不同核心運行不同的用戶程序。優(yōu)點:無需考慮各核心功能的兼容性,單個程序可執(zhí)行文件較小。缺點:需維護(hù)多個工程,管理不便。4.2外設(shè)訪問所有核心共享外設(shè),如SRIO、PCIe、Ethernet、SPI、I2C、EMIF等。在對外設(shè)進(jìn)行初始化后,所有核心可在任意時間對外設(shè)進(jìn)行讀寫,無需再次初始化。 ?4.3數(shù)據(jù)存儲(1)注意區(qū)分全局與局部地址。L1/L2SRAM有全局與局部兩個地址,全局地址可被所有核心訪問,但局部地址僅可被指定核心訪問。以C66xx_0核心的L2SRAM為例,對應(yīng)的全局地址為0x10800000,局部地址為0x00800000。C66xx_0核心使用0x10800000或0x00800000,均可訪問C66xx_0核心的L2SRAM。而C66xx_1核心使用0x00800000僅可訪問C66xx_1核心的L2SRAM,使用0x10800000方可訪問C66xx_0核心的L2SRAM。L2SRAM全局與局部地址對應(yīng)關(guān)系如下表:表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)注意避免內(nèi)存沖突。如數(shù)據(jù)需存放至MSMCSRAM、ddr3共享內(nèi)存設(shè)備,請將對應(yīng)內(nèi)存劃分為MSMCSRAM_MASTER段(主核使用)與MSMCSRAM_SLAVE段(從核使用),從而避免運行時內(nèi)存沖突。 ?5參考鏈接-IPChttps://training.ti.com/system/files/docs/keystone-intro-ipc-slides.pdfhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#ti-sdo-ipc-packagehttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#gatemp-support-for-uio-and-misc-driverhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#ti-sdo-utils-packagehttps://processors.wiki.ti.com/index.php/IPC_Users_Guide/MessageQ_Module-OpenMPhttp://processors.wiki.ti.com/index.php/OpenMP_on_C6000https://processors.wiki.ti.com/index.php/BIOS_MCSDK_2.0_User_Guide#OpenMPhttp://community.topcoder.com/tc?module=Static&d1=features&d2=091106-MulticoreProgrammingGuidehttps://www.ti.com/lit/an/sprab27b/sprab27b.pdf

share