《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于多核DSP的超聲成像處理算法的并行實現(xiàn)
基于多核DSP的超聲成像處理算法的并行實現(xiàn)
來源:電子技術(shù)應(yīng)用2013年第6期
肖 亮,張學(xué)健
北京化工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,北京100029
摘要: 基于TI公司的多核DSP-TMS320C6678對黑白超聲成像的中端(Mid-End)處理算法進行并行設(shè)計與實現(xiàn)。介紹了多核DSP編程實現(xiàn)算法所用到的關(guān)鍵技術(shù):程序并行設(shè)計與第三代增強型直接內(nèi)存存?。‥DMA3),并重點分析了核間通信技術(shù)。根據(jù)算法的特點選用數(shù)據(jù)流模式對其進行了任務(wù)規(guī)劃并分配到3個DSP核上執(zhí)行,核間通信采用消息隊列方案。實驗結(jié)果證明了采用消息隊列方案進行核間通信、實現(xiàn)多核并行的有效性。
中圖分類號: TP751.1
文獻標(biāo)識碼: A
文章編號: 0258-7998(2013)06-0027-04
Parallel implementation of processing algorithm of ultrasound imaging based on multi-core DSP
Xiao Liang,Zhang Xuejian
College of Information Science and Technology,Beijing University of Chemical Technology,Beijing 100029,China
Abstract: The parallel design and programming of Mid-End processing algorithm of B-mode ultrasound imaging based on TI’s multi-core DSP-TMS320C6678 is discussed in this article. The paper introduces key technologies used in the multi-core DSP programming for the algorithm, including task parallelism and the 3rd generation EDMA3(Enhanced Direct Memory Access). Particularly, the IPC(Inter-Processor-Communication) technique is analyzed in detail. The algorithm, according to its characteristics, is divided into several components using task planning, and is assigned to 3 cores to be executed separately in view of Data-Flow model. The IPC is accomplished by utilizing MessageQ scheme. The effectiveness of MessageQ scheme to accomplish IPC and task parallelism is validated through experiments.
Key words : ultrasound imaging;multi-core DSP;IPC;MessageQ;EDMA3

    當(dāng)前,超聲成像技術(shù)在臨床診斷中得到了廣泛的應(yīng)用,隨著技術(shù)的發(fā)展,對圖像分辨率與成像實時性的要求越來越高[1],現(xiàn)有的單核DSP已經(jīng)不能滿足其信號處理需求。2010年,TI公司推出了采用KeyStone架構(gòu)的TMS320C66x系列多核DSP。每個C66x核主頻最高可達1.25 GHz,可實現(xiàn)每秒40 GMAC的定點運算或20 GFLOP的浮點運算;片內(nèi)有4 MB的共享內(nèi)存(MSMCSRAM),具有多種高速互聯(lián)接口。并且,TI公司提供了具有任務(wù)調(diào)度、資源管理等功能的SYS/BIOS實時操作系統(tǒng),可大大縮短開發(fā)周期。

    本研究基于多核DSP-TMS320C6678對TI公司提供的黑白超聲成像的中端(Mid-End)處理算法進行了并行設(shè)計與實現(xiàn)(前端的波束合成與數(shù)字解調(diào)一般在FPGA中完成[2]),以充分利用多核DSP的處理性能與C語言編程的靈活性。
    文中介紹了多核DSP編程實現(xiàn)算法用到的3項關(guān)鍵技術(shù):程序并行設(shè)計、核間通信和第三代增強型直接內(nèi)存存取技術(shù)(EDMA3),著重對核間通信技術(shù)進行了分析,包括通知方案與消息隊列方案。為高效地實現(xiàn)超聲成像算法,首先對算法在單個DSP核上運行的性能進行了評估,然后根據(jù)算法各模塊的時間消耗和數(shù)據(jù)依賴關(guān)系選擇了數(shù)據(jù)流模式進行任務(wù)規(guī)劃,分配到3個DSP核上執(zhí)行。采用消息隊列方案來實現(xiàn)各DSP核間的通知和同步,使用EDMA3實現(xiàn)外部存儲器(DDR3)與共享內(nèi)存之間的數(shù)據(jù)交換。
    實驗結(jié)果表明,超聲成像處理算法在3個DSP核上運行的時間消耗為在單個DSP核上時間消耗的42%,DSP每秒鐘可處理約40幀尺寸為512×1 024的圖像,這表明多核DSP的并行處理能夠滿足超聲成像的數(shù)據(jù)處理需求。實驗結(jié)果證明了采用消息隊列方案進行核間通信、實現(xiàn)多核并行的有效性。
  
2 多核DSP處理技術(shù)
    為了實現(xiàn)TMS320C6678的多核處理,需要將算法分解為多個任務(wù),分配到多個DSP核上并行執(zhí)行。以下是實現(xiàn)過程中用到的幾項關(guān)鍵技術(shù)。
2.1 程序并行設(shè)計
    程序并行設(shè)計首先對應(yīng)用進行任務(wù)規(guī)劃,將一個應(yīng)用分解為多個任務(wù),然后根據(jù)一定的任務(wù)分配模式分配到相應(yīng)的DSP核上執(zhí)行[3]。多核程序開發(fā)中兩種常用的任務(wù)分配模式如下。
    (1)主從模式
    主核作為控制核進行任務(wù)分配、調(diào)度和觸發(fā)[4]。該模式適用于含有多個獨立任務(wù)的應(yīng)用。主核與從核間需要進行頻繁地消息通信,從核之間不需要進行同步和數(shù)據(jù)傳遞。
    (2)數(shù)據(jù)流模式
    各DSP核以流水線的方式按照數(shù)據(jù)處理的流程執(zhí)行各任務(wù)。該模式適用于分布式控制和數(shù)據(jù)處理的應(yīng)用,這類應(yīng)用中通常包含多個復(fù)雜的算法模塊,單個DSP核不能滿足需求,且各算法模塊間有很強的數(shù)據(jù)依賴關(guān)系。
2.2 核間通信
    TI公司提供了用于多核以及多核與外設(shè)之間通信的IPC庫[5],其支持下列兩種常用的通信方案。
    (1)通知方案
    通知方案(Notify)采用對目標(biāo)核產(chǎn)生中斷的方式實現(xiàn)DSP核間通信。其一次傳遞的數(shù)據(jù)為固定的32 bit,適合在多核間執(zhí)行簡單的同步操作。其配置方式如圖2所示[5]。

    通知模塊(Notify Module)用于對通知方案中用到的資源進行靜態(tài)配置。多核處理器模塊(MultiProc Module)用于配置需要啟用的DSP核個數(shù)及其名稱。需要在SYS/BIOS操作系統(tǒng)的靜態(tài)配置文件(*.cfg)中進行如下配置:
    var Notify = xdc.useModule ('ti.sdo.ipc.Notify');
    var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
    var nameList =["CORE0", "CORE1","CORE2",……];
    MultiProc.setConfig (null, nameList);
    在程序中,Ipc_start()函數(shù)用于在各個DSP核之間建立連接;Notify_registerEvent()函數(shù)將每個DSP核使用的事件號與相應(yīng)的回調(diào)函數(shù)對應(yīng)起來;在DSP核執(zhí)行過程中需要通知其他核執(zhí)行相應(yīng)操作時調(diào)用函數(shù)Notify_sendEvent(),該函數(shù)使用中斷通知目標(biāo)核執(zhí)行與事件號對應(yīng)的回調(diào)函數(shù)。
    (2)消息隊列方案
    消息隊列方案(MessageQ)通過在共享內(nèi)存中開辟消息隊列的方法實現(xiàn)DSP核間的通信,各DSP核通過輪詢專屬消息隊列的方式來完成消息的獲取,可以滿足DSP核同步、核間數(shù)據(jù)傳輸?shù)榷喾N需求。該方案支持可變長數(shù)據(jù)的發(fā)送和接收;每個DSP核可擁有多個寫消息端,即可同時向多個DSP核發(fā)送消息。其配置方式如圖3所示。

    消息隊列模塊(MessageQ Module)用于對消息隊列方案中用到的資源進行靜態(tài)配置。共享區(qū)模塊(SharedRegion Module)用于開辟用來存放消息隊列的共享區(qū)域。需要在SYS/BIOS操作系統(tǒng)的靜態(tài)配置文件(*.cfg)中進行如下配置:
    var MessageQ = xdc.useModule ('ti.sdo.ipc.MessageQ');
    var Ipc = xdc.useModule ('ti.sdo.ipc.Ipc');
    var MultiProc = xdc.useModule ('ti.sdo.utils.MultiProc');
    var nameList = ["CORE0", "CORE1","CORE2",……];
    MultiProc.setConfig (null, nameList);
    var SharedRegion=xdc.useModule('ti.sdo.ipc.SharedRegion');
    var SHAREDMEM = 0x0C000000;
    var SHAREDMEMSIZE = 0x00200000;
    SharedRegion.setEntryMeta(0,
        { base: SHAREDMEM,
          len:  SHAREDMEMSIZE,
          ownerProcId: 0,
          isValid: true,
          name: "INTERNAL_SHARED_MEM",});
    在主程序中,對MessageQ模塊進行如下動態(tài)配置:
    ①使用Ipc_start()函數(shù)在各個DSP核間建立連接;
    ②使用MessageQ_create()創(chuàng)建本地消息隊列;
    ③使用函數(shù)MessageQ_registerHeap()在消息隊列與由SharedRegion模塊開辟的共享區(qū)之間建立連接;
    ④使用函數(shù)MessageQ_open()打開由接收核創(chuàng)建的消息隊列。
    在程序執(zhí)行過程中,對MessageQ模塊中函數(shù)的調(diào)用流程如圖4所示[5]。

    DSP核發(fā)送消息時,使用函數(shù)MessageQ_alloc()在共享區(qū)分配消息空間,然后使用函數(shù)MessageQ_put()將消息發(fā)送到接收核的消息隊列。當(dāng)DSP核接收消息時,使用函數(shù)MessageQ_get()獲取本地消息隊列中的消息,然后調(diào)用函數(shù)MessageQ_free()或MessageQ_delete()刪除該消息。通信完成后,調(diào)用MessageQ_close()關(guān)閉消息隊列。
2.3 EDMA3
    EDMA3是第三代增強型直接內(nèi)存存取技術(shù),支持一維(數(shù)組)傳輸、二維(數(shù)據(jù)幀)傳輸和三維(數(shù)據(jù)塊)傳輸,這3種傳輸都可通過一次CPU觸發(fā)(寫入相應(yīng)寄存器)或事件觸發(fā)完成。
    這里介紹實際使用的二維傳輸。數(shù)據(jù)幀中的每個元素為一個一維數(shù)組,可用于從大的數(shù)據(jù)塊中等間隔地提取子幀。例如,可以將圖像數(shù)據(jù)從逐行排列的外部存儲器傳輸?shù)絻?nèi)部緩沖區(qū)以實現(xiàn)隔行排列。為了實現(xiàn)二維傳輸,需要正確地配置參數(shù)RAM,其結(jié)構(gòu)如圖5所示。

 

 

    由表2可知,消息隊列方案的通信速度稍快于通知方案,且本設(shè)計中程序計算的中間結(jié)果存儲在內(nèi)部共享存儲中,需要使用核間通信傳輸中間結(jié)果的指針,通知方案的32 bit固定負載不能滿足需求。因此,本設(shè)計選擇消息隊列方案實現(xiàn)核間通信。
3.3 超聲成像算法的多核實現(xiàn)
    為了平衡各DSP核任務(wù)的時間消耗,根據(jù)表1的評估結(jié)果,將包絡(luò)檢測算法放在CORE0核執(zhí)行,將動態(tài)壓縮算法放在CORE1核執(zhí)行,將頻率復(fù)合和行濾波算法合并到一起放在CORE2核上執(zhí)行。因此,本設(shè)計需要使用TMS320C6678的3個DSP核以流水方式進行數(shù)據(jù)處理。3個DSP核間的數(shù)據(jù)流水和消息傳遞如圖6所示。

    以Core1為例,其程序基本流程為:
    ①初始化消息隊列方案用到的資源;
    ②使用MessageQ_get()函數(shù)等待CORE0傳遞來的消息;
    ③用動態(tài)壓縮算法處理從CORE0導(dǎo)入的數(shù)據(jù);
    ④使用MessageQ_put()函數(shù)向CORE2發(fā)送消息;
    ⑤使用MessageQ_get()函數(shù)等待下一個由CORE0傳遞來的消息。
    經(jīng)驗證,在一次處理8條掃描線的情況下,3個DSP核各自運行的時間如表3所示。

    在對數(shù)據(jù)進行流水處理時,任務(wù)完成所需時間等于耗時最多的CORE0所用時間。因此,在3個DSP核上運行的時間消耗為在單個DSP核上時間消耗的42%。在這種并行設(shè)計下,DSP每秒鐘可以處理約40幀尺寸為512×1 024的圖像。
    本設(shè)計基于TI公司的多核DSP-TMS320C6678對黑白超聲成像的中端處理算法進行了并行設(shè)計與實現(xiàn)。根據(jù)數(shù)據(jù)流模式對超聲成像算法進行了任務(wù)規(guī)劃,將各模塊分配到3個DSP核上執(zhí)行。使用高效的消息隊列方案實現(xiàn)核間通信,并使用EDMA3實現(xiàn)DSP與外部存儲器之間的快速數(shù)據(jù)交換。實驗證明了采用消息隊列方案進行核間通信、實現(xiàn)多核并行的有效性。測試結(jié)果表明,基于多核DSP的并行架構(gòu)具有強大的數(shù)據(jù)處理能力,可以為超聲成像的實現(xiàn)提供有力的支持。
參考文獻
[1] 王艷丹,高上凱.超聲成像新技術(shù)及其臨床應(yīng)用[J].北京生物醫(yī)學(xué)工程,2006(9):553-555.
[2] Texas Instruments Inc.Signal processing overview of ultra sound systems for medical imaging[Z].2008.
[3] 吳灝,肖吉陽,范紅旗,等.TMS320C6678多核DSP的核間通信方法[J].電子技術(shù)應(yīng)用,2012,38(9):12-14.
[4] Texas Instruments Inc.Multicore programming guide[Z].2012.
[5] Texas Instruments Inc.SYS/BIOS inter-processor communication(IPC) user guide[Z].2012.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。