一種基于Navigator的多核嵌入式DSP并行編程模型實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及多核嵌入式系統(tǒng)的并行編程領(lǐng)域,具體是一種基于Navigator的多核嵌入式DSP并行編程模型實現(xiàn)方法。
【背景技術(shù)】
[0002]隨著嵌入式技術(shù)的飛速發(fā)展,嵌入式處理需求也在快速增長,在集成電路技術(shù)飛速發(fā)展的今天,多核技術(shù)在嵌入式系統(tǒng)中的應(yīng)用已經(jīng)越來越廣泛。在嵌入式系統(tǒng)中使用多處理器共同協(xié)作完成任務(wù),能夠?qū)崿F(xiàn)系統(tǒng)的多任務(wù)調(diào)度和實時性等,具有重要的意義。而多核嵌入式系統(tǒng)也已經(jīng)成為當(dāng)前主要的計算平臺,無論桌面應(yīng)用、移動應(yīng)用、服務(wù)器還是專用嵌入式平臺都采用多核結(jié)構(gòu)。
[0003]當(dāng)前隨著多核技術(shù)的主流化,對并行計算體系結(jié)構(gòu)、并行算法、并行編程模型以及并行應(yīng)用都產(chǎn)生了重要的影響。在多核嵌入式系統(tǒng)中,傳統(tǒng)的基于單線程的程序設(shè)計方法顯然無法充分利用多核CPU的計算能力,必須以并行計算的思維方式來設(shè)計算法,將多核嵌入式平臺的硬件優(yōu)勢和并行程序設(shè)計方法結(jié)合起來,獲得更高的程序性能。因此,如何有效的將并行編程模型和嵌入式多核處理器結(jié)合在一起,是如今發(fā)展和研宄的重點和熱點問題之一。也就是說,找到一種能夠結(jié)合并行編程模型和嵌入式多核處理器的實現(xiàn)方法是十分必要的。
[0004]申請?zhí)枮镃N201010124991.6的發(fā)明專利公開了一種面向眾核環(huán)境的分治映射/歸約并行編程模型。該發(fā)明通過分治映射/歸約并行編程模型、主存復(fù)用以及流水線執(zhí)行技術(shù)等,完成對海量數(shù)據(jù)的分塊處理,優(yōu)化眾核環(huán)境的資源使用。但是該發(fā)明主要是針對多處理器的應(yīng)用,并沒有詳細(xì)說明在單處理上如何對多核進(jìn)行調(diào)度,同時沒有說明多處理間所使用的通信機(jī)制。
[0005]申請?zhí)枮镃N201010166248.7的發(fā)明專利公開了以一種針對嵌入式多核系統(tǒng)的視頻編碼流水化并行方法。該發(fā)明根據(jù)節(jié)點運算量和節(jié)點間的依賴關(guān)系,選擇處理器負(fù)載均衡、核間通信量少的流水并行劃分方案,根據(jù)該方案,對任務(wù)節(jié)點進(jìn)行對象化封裝,映射到相應(yīng)的處理器核上,實現(xiàn)流水化并行執(zhí)行。但是該發(fā)明只是針對基于多核系統(tǒng)的流水線并行,并沒有采用并行編程模型,僅僅使用了多核作為任務(wù)節(jié)點,并沒有充分利用嵌入式多核處理器中的多種硬件資源。
[0006]因此,本發(fā)明提出了一種充分利用多核嵌入式DSP中硬件資源實現(xiàn)并行編程模型的方法。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的在于提供一種基于Navigator的多核嵌入式DSP并行編程模型實現(xiàn)方法,通過使用嵌入式處理器上的軟件組件Navigator,充分利用其各種硬件資源,實現(xiàn)并行編程模型。
[0008]為實現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
基于Navigator的多核嵌入式DSP并行方法,包括以下內(nèi)容:
DTI推出的KeyStone架構(gòu)中包含軟件組件Multicore Navigator,通過該組件實現(xiàn)設(shè)備構(gòu)件間的數(shù)據(jù)管理以及同步通信。
[0009]Multicore Navigator (簡稱Navigator)是一種硬件機(jī)制,幫助實現(xiàn)數(shù)據(jù)的移動和多核間的協(xié)同工作。主要提供核間、網(wǎng)絡(luò)間以及外設(shè)間的通信,包括數(shù)據(jù)和消息交換,發(fā)送消息后,不再處理與該消息相關(guān)的操作,也就是說在發(fā)送消息后,發(fā)送方不管消息是否已經(jīng)被接收。簡單的說,就是只需要載入數(shù)據(jù),其余操作都由系統(tǒng)負(fù)責(zé)完成,無需CPU的干預(yù)。Navigator 主要由 Queue Manager Subsystem (QMSS)和多個 Packet DMA (PKTDMA)組成。
[0010]Queue Manager是一個負(fù)責(zé)對隊列進(jìn)行加速管理的一個硬件模塊。其中包括8192個隊列、20個內(nèi)存區(qū)域和2個Linking RAM,不同的隊列號用途不一樣。通過向模塊中一個特定的被映射的位置寫入32位的描述符(Descriptor)地址,可以將一個包(一個描述符和負(fù)載的邏輯組合)加入隊列中。相反地,從此隊列的相同位置讀值,則可以完成包出隊。
[0011]描述符(Descriptor)是在核間移動的帶有信息和數(shù)據(jù)的消息。描述符有兩種類型,宿主(Host)描述符和整體(Monolithic)描述符。宿主描述符更加靈活,描述符的長度即為所有負(fù)載的和,帶有一個指針指向負(fù)載,可以多個宿主描述符鏈接使用。而整體描述符沒有宿主描述符靈活,本身不能鏈接其他描述符,所有的負(fù)載緩沖大小相同,這樣在具體的使用過程中易于造成內(nèi)存空間的浪費。
[0012]所有的描述符存儲在內(nèi)存區(qū)域中,Navigator提供20個內(nèi)存區(qū)域供描述符存儲,單個描述符的大小最大支持512KB。每一個內(nèi)存區(qū)域的大小相同,而且每個區(qū)域中的描述符大小也相同,但是兩個內(nèi)存區(qū)域中的描述符大小可以不同。內(nèi)存區(qū)域按照16字節(jié)對齊,且其中描述符的大小也必須是16字節(jié)的倍數(shù)。而描述符在隊列中的索引由Linking RAM實現(xiàn)。入隊時,只需要將描述符的地址壓入隊列中,Linking RAM會將地址轉(zhuǎn)換為索引。而出隊時,也是通過已知的索引值重新獲取描述符的地址。
[0013]PKTDMA即是一種DMA,它的數(shù)據(jù)目的地是由一個目的隊列和空隊列的隊列索引決定的,而不是一個絕對的內(nèi)存地址。在接收模式下,PKTDMA取出一個空描述符,遍歷描述符找到緩存,PKTDMA將負(fù)載數(shù)據(jù)放入緩存中,然后將描述符放入目的隊列中。在傳輸模式下,PKTDMA從隊列中彈出描述符,遍歷描述符,從緩存中讀取負(fù)載數(shù)據(jù),然后將負(fù)載數(shù)據(jù)傳送到發(fā)送端口。
[0014]PKTDMA主要負(fù)責(zé)數(shù)據(jù)的移動。PKTDMA包括多條Rx DMA通道,多條Tx DMA通道和多條Rx flow通道。
[0015]128位的Tx輸出和128位的Rx輸入形成兩條對稱流,且相互獨立。因為傳送是基于包(一個描述符和負(fù)載的邏輯組合)的,所以無需關(guān)心負(fù)載的格式。Tx通過查看描述符中的信息判斷如何處理這個包,而Rx使用flow。flow就是一個指令集,告訴Rx DMA如何處理接收到的包。Rx channel和Rx flow之間沒有關(guān)系,有對應(yīng)關(guān)系的是Rx packet和Rxflow。Rx flow主要定義接收端的行為。
[0016]通過一個DSP的任務(wù)或者其他硬件操作,將一個描述符放進(jìn)Tx隊列中,完成描述符的入隊操作后,觸發(fā)Tx DMA進(jìn)行包的傳輸;而對應(yīng)于Rx DMA,由數(shù)據(jù)流觸發(fā)操作,接收數(shù)據(jù)包后如何處理需要根據(jù)配置的Rx flow。其中,需要注意的是,放入Tx隊列的描述符,是從Tx free隊列中取出的空描述符,在該空描述符中加入數(shù)據(jù)后,放入Tx隊列中,最后當(dāng)發(fā)送完畢后,在Tx完成隊列中會有相應(yīng)的描述符,需要將這個描述符進(jìn)行回收;此外,針對Rx隊列也是相同的操作。
[0017]2)將KeyStone架構(gòu)下多核嵌入式處理器的DSP核劃分為主核和從核,所述的主核完成整個應(yīng)用的初始化以及必須執(zhí)行且只能執(zhí)行一次的操作;所述的從核執(zhí)行必要的初始化操作。
[0018]多核嵌入式處理器一般多采用KeyStone架構(gòu)的同構(gòu)或異構(gòu)處理器,且處理器上DSP核的數(shù)量至少為8個,其中,將核O作為主核,除核O外的其他核作為從核。
[0019]作為主核的核O完成整個應(yīng)用的初始化以及必須執(zhí)行且只能執(zhí)行一次的操作。該初始化流程中主要包括對Navigator的初始化操作,以及對并行編程模型中環(huán)境變量的初始化操作。首先需要對QMSS和PKTDMA進(jìn)行初始化和啟動;其次,配置QMSS中使用的內(nèi)存區(qū)域,包括內(nèi)存區(qū)域的基地址、大小以及描述符數(shù)量等;然后,對描述符進(jìn)行初始化,設(shè)置描述符的類型、數(shù)量、所屬內(nèi)存區(qū)域以及存儲該描述符的隊列;最后打開QMSS中的發(fā)送和接收隊列。作為從核,也需要完成部分初始化操作,主要是QMSS的啟動操作以及隊列的打開。在初始化流程中,QMSS的初始化、PK