文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)06-0027-04
當(dāng)前,超聲成像技術(shù)在臨床診斷中得到了廣泛的應(yīng)用,隨著技術(shù)的發(fā)展,對(duì)圖像分辨率與成像實(shí)時(shí)性的要求越來(lái)越高[1],現(xiàn)有的單核DSP已經(jīng)不能滿(mǎn)足其信號(hào)處理需求。2010年,TI公司推出了采用KeyStone架構(gòu)的TMS320C66x系列多核DSP。每個(gè)C66x核主頻最高可達(dá)1.25 GHz,可實(shí)現(xiàn)每秒40 GMAC的定點(diǎn)運(yùn)算或20 GFLOP的浮點(diǎn)運(yùn)算;片內(nèi)有4 MB的共享內(nèi)存(MSMCSRAM),具有多種高速互聯(lián)接口。并且,TI公司提供了具有任務(wù)調(diào)度、資源管理等功能的SYS/BIOS實(shí)時(shí)操作系統(tǒng),可大大縮短開(kāi)發(fā)周期。
本研究基于多核DSP-TMS320C6678對(duì)TI公司提供的黑白超聲成像的中端(Mid-End)處理算法進(jìn)行了并行設(shè)計(jì)與實(shí)現(xiàn)(前端的波束合成與數(shù)字解調(diào)一般在FPGA中完成[2]),以充分利用多核DSP的處理性能與C語(yǔ)言編程的靈活性。
文中介紹了多核DSP編程實(shí)現(xiàn)算法用到的3項(xiàng)關(guān)鍵技術(shù):程序并行設(shè)計(jì)、核間通信和第三代增強(qiáng)型直接內(nèi)存存取技術(shù)(EDMA3),著重對(duì)核間通信技術(shù)進(jìn)行了分析,包括通知方案與消息隊(duì)列方案。為高效地實(shí)現(xiàn)超聲成像算法,首先對(duì)算法在單個(gè)DSP核上運(yùn)行的性能進(jìn)行了評(píng)估,然后根據(jù)算法各模塊的時(shí)間消耗和數(shù)據(jù)依賴(lài)關(guān)系選擇了數(shù)據(jù)流模式進(jìn)行任務(wù)規(guī)劃,分配到3個(gè)DSP核上執(zhí)行。采用消息隊(duì)列方案來(lái)實(shí)現(xiàn)各DSP核間的通知和同步,使用EDMA3實(shí)現(xiàn)外部存儲(chǔ)器(DDR3)與共享內(nèi)存之間的數(shù)據(jù)交換。
實(shí)驗(yàn)結(jié)果表明,超聲成像處理算法在3個(gè)DSP核上運(yùn)行的時(shí)間消耗為在單個(gè)DSP核上時(shí)間消耗的42%,DSP每秒鐘可處理約40幀尺寸為512×1 024的圖像,這表明多核DSP的并行處理能夠滿(mǎn)足超聲成像的數(shù)據(jù)處理需求。實(shí)驗(yàn)結(jié)果證明了采用消息隊(duì)列方案進(jìn)行核間通信、實(shí)現(xiàn)多核并行的有效性。
2 多核DSP處理技術(shù)
為了實(shí)現(xiàn)TMS320C6678的多核處理,需要將算法分解為多個(gè)任務(wù),分配到多個(gè)DSP核上并行執(zhí)行。以下是實(shí)現(xiàn)過(guò)程中用到的幾項(xiàng)關(guān)鍵技術(shù)。
2.1 程序并行設(shè)計(jì)
程序并行設(shè)計(jì)首先對(duì)應(yīng)用進(jìn)行任務(wù)規(guī)劃,將一個(gè)應(yīng)用分解為多個(gè)任務(wù),然后根據(jù)一定的任務(wù)分配模式分配到相應(yīng)的DSP核上執(zhí)行[3]。多核程序開(kāi)發(fā)中兩種常用的任務(wù)分配模式如下。
(1)主從模式
主核作為控制核進(jìn)行任務(wù)分配、調(diào)度和觸發(fā)[4]。該模式適用于含有多個(gè)獨(dú)立任務(wù)的應(yīng)用。主核與從核間需要進(jìn)行頻繁地消息通信,從核之間不需要進(jìn)行同步和數(shù)據(jù)傳遞。
(2)數(shù)據(jù)流模式
各DSP核以流水線(xiàn)的方式按照數(shù)據(jù)處理的流程執(zhí)行各任務(wù)。該模式適用于分布式控制和數(shù)據(jù)處理的應(yīng)用,這類(lèi)應(yīng)用中通常包含多個(gè)復(fù)雜的算法模塊,單個(gè)DSP核不能滿(mǎn)足需求,且各算法模塊間有很強(qiáng)的數(shù)據(jù)依賴(lài)關(guān)系。
2.2 核間通信
TI公司提供了用于多核以及多核與外設(shè)之間通信的IPC庫(kù)[5],其支持下列兩種常用的通信方案。
(1)通知方案
通知方案(Notify)采用對(duì)目標(biāo)核產(chǎn)生中斷的方式實(shí)現(xiàn)DSP核間通信。其一次傳遞的數(shù)據(jù)為固定的32 bit,適合在多核間執(zhí)行簡(jiǎn)單的同步操作。其配置方式如圖2所示[5]。
通知模塊(Notify Module)用于對(duì)通知方案中用到的資源進(jìn)行靜態(tài)配置。多核處理器模塊(MultiProc Module)用于配置需要啟用的DSP核個(gè)數(shù)及其名稱(chēng)。需要在SYS/BIOS操作系統(tǒng)的靜態(tài)配置文件(*.cfg)中進(jìn)行如下配置:
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ù)用于在各個(gè)DSP核之間建立連接;Notify_registerEvent()函數(shù)將每個(gè)DSP核使用的事件號(hào)與相應(yīng)的回調(diào)函數(shù)對(duì)應(yīng)起來(lái);在DSP核執(zhí)行過(guò)程中需要通知其他核執(zhí)行相應(yīng)操作時(shí)調(diào)用函數(shù)Notify_sendEvent(),該函數(shù)使用中斷通知目標(biāo)核執(zhí)行與事件號(hào)對(duì)應(yīng)的回調(diào)函數(shù)。
(2)消息隊(duì)列方案
消息隊(duì)列方案(MessageQ)通過(guò)在共享內(nèi)存中開(kāi)辟消息隊(duì)列的方法實(shí)現(xiàn)DSP核間的通信,各DSP核通過(guò)輪詢(xún)專(zhuān)屬消息隊(duì)列的方式來(lái)完成消息的獲取,可以滿(mǎn)足DSP核同步、核間數(shù)據(jù)傳輸?shù)榷喾N需求。該方案支持可變長(zhǎng)數(shù)據(jù)的發(fā)送和接收;每個(gè)DSP核可擁有多個(gè)寫(xiě)消息端,即可同時(shí)向多個(gè)DSP核發(fā)送消息。其配置方式如圖3所示。
消息隊(duì)列模塊(MessageQ Module)用于對(duì)消息隊(duì)列方案中用到的資源進(jìn)行靜態(tài)配置。共享區(qū)模塊(SharedRegion Module)用于開(kāi)辟用來(lái)存放消息隊(duì)列的共享區(qū)域。需要在SYS/BIOS操作系統(tǒng)的靜態(tài)配置文件(*.cfg)中進(jìn)行如下配置:
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",});
在主程序中,對(duì)MessageQ模塊進(jìn)行如下動(dòng)態(tài)配置:
①使用Ipc_start()函數(shù)在各個(gè)DSP核間建立連接;
②使用MessageQ_create()創(chuàng)建本地消息隊(duì)列;
③使用函數(shù)MessageQ_registerHeap()在消息隊(duì)列與由SharedRegion模塊開(kāi)辟的共享區(qū)之間建立連接;
④使用函數(shù)MessageQ_open()打開(kāi)由接收核創(chuàng)建的消息隊(duì)列。
在程序執(zhí)行過(guò)程中,對(duì)MessageQ模塊中函數(shù)的調(diào)用流程如圖4所示[5]。
DSP核發(fā)送消息時(shí),使用函數(shù)MessageQ_alloc()在共享區(qū)分配消息空間,然后使用函數(shù)MessageQ_put()將消息發(fā)送到接收核的消息隊(duì)列。當(dāng)DSP核接收消息時(shí),使用函數(shù)MessageQ_get()獲取本地消息隊(duì)列中的消息,然后調(diào)用函數(shù)MessageQ_free()或MessageQ_delete()刪除該消息。通信完成后,調(diào)用MessageQ_close()關(guān)閉消息隊(duì)列。
2.3 EDMA3
EDMA3是第三代增強(qiáng)型直接內(nèi)存存取技術(shù),支持一維(數(shù)組)傳輸、二維(數(shù)據(jù)幀)傳輸和三維(數(shù)據(jù)塊)傳輸,這3種傳輸都可通過(guò)一次CPU觸發(fā)(寫(xiě)入相應(yīng)寄存器)或事件觸發(fā)完成。
這里介紹實(shí)際使用的二維傳輸。數(shù)據(jù)幀中的每個(gè)元素為一個(gè)一維數(shù)組,可用于從大的數(shù)據(jù)塊中等間隔地提取子幀。例如,可以將圖像數(shù)據(jù)從逐行排列的外部存儲(chǔ)器傳輸?shù)絻?nèi)部緩沖區(qū)以實(shí)現(xiàn)隔行排列。為了實(shí)現(xiàn)二維傳輸,需要正確地配置參數(shù)RAM,其結(jié)構(gòu)如圖5所示。
由表2可知,消息隊(duì)列方案的通信速度稍快于通知方案,且本設(shè)計(jì)中程序計(jì)算的中間結(jié)果存儲(chǔ)在內(nèi)部共享存儲(chǔ)中,需要使用核間通信傳輸中間結(jié)果的指針,通知方案的32 bit固定負(fù)載不能滿(mǎn)足需求。因此,本設(shè)計(jì)選擇消息隊(duì)列方案實(shí)現(xiàn)核間通信。
3.3 超聲成像算法的多核實(shí)現(xiàn)
為了平衡各DSP核任務(wù)的時(shí)間消耗,根據(jù)表1的評(píng)估結(jié)果,將包絡(luò)檢測(cè)算法放在CORE0核執(zhí)行,將動(dòng)態(tài)壓縮算法放在CORE1核執(zhí)行,將頻率復(fù)合和行濾波算法合并到一起放在CORE2核上執(zhí)行。因此,本設(shè)計(jì)需要使用TMS320C6678的3個(gè)DSP核以流水方式進(jìn)行數(shù)據(jù)處理。3個(gè)DSP核間的數(shù)據(jù)流水和消息傳遞如圖6所示。
以Core1為例,其程序基本流程為:
①初始化消息隊(duì)列方案用到的資源;
②使用MessageQ_get()函數(shù)等待CORE0傳遞來(lái)的消息;
③用動(dòng)態(tài)壓縮算法處理從CORE0導(dǎo)入的數(shù)據(jù);
④使用MessageQ_put()函數(shù)向CORE2發(fā)送消息;
⑤使用MessageQ_get()函數(shù)等待下一個(gè)由CORE0傳遞來(lái)的消息。
經(jīng)驗(yàn)證,在一次處理8條掃描線(xiàn)的情況下,3個(gè)DSP核各自運(yùn)行的時(shí)間如表3所示。
在對(duì)數(shù)據(jù)進(jìn)行流水處理時(shí),任務(wù)完成所需時(shí)間等于耗時(shí)最多的CORE0所用時(shí)間。因此,在3個(gè)DSP核上運(yùn)行的時(shí)間消耗為在單個(gè)DSP核上時(shí)間消耗的42%。在這種并行設(shè)計(jì)下,DSP每秒鐘可以處理約40幀尺寸為512×1 024的圖像。
本設(shè)計(jì)基于TI公司的多核DSP-TMS320C6678對(duì)黑白超聲成像的中端處理算法進(jìn)行了并行設(shè)計(jì)與實(shí)現(xiàn)。根據(jù)數(shù)據(jù)流模式對(duì)超聲成像算法進(jìn)行了任務(wù)規(guī)劃,將各模塊分配到3個(gè)DSP核上執(zhí)行。使用高效的消息隊(duì)列方案實(shí)現(xiàn)核間通信,并使用EDMA3實(shí)現(xiàn)DSP與外部存儲(chǔ)器之間的快速數(shù)據(jù)交換。實(shí)驗(yàn)證明了采用消息隊(duì)列方案進(jìn)行核間通信、實(shí)現(xiàn)多核并行的有效性。測(cè)試結(jié)果表明,基于多核DSP的并行架構(gòu)具有強(qiáng)大的數(shù)據(jù)處理能力,可以為超聲成像的實(shí)現(xiàn)提供有力的支持。
參考文獻(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] 吳灝,肖吉陽(yáng),范紅旗,等.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.