基于嵌入式的多媒體應用的多處理器核軟件設計框架
深入理解某個應用的數(shù)據(jù)訪問方式,可以充分利用處理器潛在架構(gòu)中的存儲器和系統(tǒng)資源,從而開發(fā)可擴展的并行應用。
基于單核結(jié)構(gòu)的嵌入式處理器越來越不能滿足日益增長的嵌入式多媒體處理應用方面的要求,多核嵌入式結(jié)構(gòu)已成為解決這一問題的有效途徑,同時也為如何開發(fā)充分利用多核結(jié)構(gòu)的應用軟件帶來挑戰(zhàn)。目前,需要將編譯技術和開發(fā)工具更多的結(jié)合起來,才能使多核結(jié)構(gòu)的應用獲得成功。而大多數(shù)并行軟件都是通過手工轉(zhuǎn)換方式將順序程序轉(zhuǎn)換為并行程序來實現(xiàn)的。由于缺乏具有多核意識的開發(fā)工具,使得軟件難以進行性能評估。因此,如果沒有預先有效可靠的工程規(guī)劃,將不得不面對應用軟件的效率低下,以及延遲產(chǎn)品上市時間等問題。
軟件框架為多核應用軟件的開發(fā)提供了一個很好的起點,可以幫助縮短開發(fā)時間。本文將詳細說明嵌入式多媒體應用軟件的設計框架,同時,本文的數(shù)據(jù)流模型也可擴展到許多其它應用中。該框架綜合了多媒體應用軟件固有的數(shù)據(jù)并行結(jié)構(gòu),還說明了如何通過有效使用潛在架構(gòu)來有效管理數(shù)據(jù)流。
在設計并行軟件的過程中有兩大挑戰(zhàn):一是開發(fā)一個有效的并行算法,二是有效利用存儲器,如DMA(直接存儲訪問)通道和互連網(wǎng)絡等共享資源。在這過程中,順序運行的應用程序的性能可根據(jù)可用處理器核的數(shù)目進行擴展。
通常實現(xiàn)應用程序的并行處理有多種方法。有些應用程序表現(xiàn)為固有的并行,而有的則具有相當復雜且不規(guī)則的數(shù)據(jù)存取模式。但總的來講,科學應用程序和多媒體應用程序的并行通常易于實現(xiàn),因為它們的數(shù)據(jù)存取模式比那些控制類應用程序相對容易預測。本文重點討論針對多媒體算法的并行技術,這類算法需要很高的處理開銷,且常用于嵌入式系統(tǒng)應用中。
多媒體應用程序中存在數(shù)據(jù)的并行級別。一組數(shù)據(jù)幀和數(shù)據(jù)幀中的一個宏塊之間的并行粒度有很大差別。通常來講,粒度越小,在共享單元——例如處理器核和DMA通道——之間所需的同步級別越高。粒度越小,并行程度也就越高,而網(wǎng)絡通信量也越小。相反,大的粒度則要求較低的同步性,但也使網(wǎng)絡通信量增大。因此,基于應用的不同類型和系統(tǒng)需求,軟件框架也定義了不同的并行級別。
需要說明的是,對可擴展并行軟件的開發(fā)還依賴于對互連網(wǎng)絡、分級存儲器體系,以及外設/DMA資源的有效利用。系統(tǒng)嚴格的低功耗和低成本的需求對所有這些要素都會構(gòu)成約束。多核環(huán)境下的設計要求改革資源的有效利用方式。本文介紹了幾種在ADI公司的Blackfin ADSP-BF561雙核處理器上對資源進行有效管理的方法。
多媒體數(shù)據(jù)流分析
為了實現(xiàn)數(shù)據(jù)并行,需要在數(shù)據(jù)流中找到這樣一個或一組數(shù)據(jù)塊:能夠獨立處理并將結(jié)果饋送給另外的處理部件。獨立的數(shù)據(jù)塊可以降低同步開銷并簡化并行算法。要找到這種數(shù)據(jù)塊,重要的是要清楚數(shù)據(jù)流模式,或者一個應用的數(shù)據(jù)存取模式。
對于大多數(shù)多媒體應用,可以將數(shù)據(jù)存取模式看成是2-D(空間域)和3-D(時間域)操作模式。在2-D模式中,獨立的數(shù)據(jù)塊被限制在單個數(shù)據(jù)幀內(nèi),而在3-D模式中,獨立數(shù)據(jù)塊可以跨越多幀。在空間域中,可以將幀劃分用N個連續(xù)行和視頻幀宏塊組成的片段,而在時間域中,可以對數(shù)據(jù)流進一步細分到幀級或圖片組(GOP)級。
采用片段或宏塊的數(shù)據(jù)存取模式的算法對同步性要求很高,但需要較少的網(wǎng)絡傳輸量,這是因為分級的存儲器體系只需存儲圖像數(shù)據(jù)的一部分。對于幀或圖片組類型的數(shù)據(jù)訪問模式,分級的存儲器體系則需要存儲大量數(shù)據(jù),但對同步性的要求則相對低得多。這是因為系統(tǒng)的并行粒度增大了的緣故。圖1說明了多媒體應用軟件中的并行級別,同時對四個級別中相關的同步性和網(wǎng)絡通信量做了對比。
圖2說明了ADSP-BF561的結(jié)構(gòu),該結(jié)構(gòu)的組成中包括獨立的指令和數(shù)據(jù)存儲器,分別屬于兩個處理器核專有。該結(jié)構(gòu)還包括共享的L2存儲器和外部存儲器,用戶利用可配置的仲裁方案將所有的外圍設備和DMA資源連接到任一處理器核上。ADSP-BF561 有兩個DMA處理器,每個都由兩組MDMA(存儲器-DMA)通路組成。L2存儲器和每個處理器核之間都通過獨立的總線連接,而外部存儲器和兩個處理器核之間則由一條共享總線連接。
所有架構(gòu)都利用DMA方式將數(shù)據(jù)流送入分級的存儲器體系。作為另外一種選擇的高速緩存并不處理任何數(shù)據(jù)。只要清楚所設計的目標應用的數(shù)據(jù)訪問模式,則可以利用DMA引擎對數(shù)據(jù)進行有效的管理。而使用高速緩存需要忍受不確定的訪問時間,高速緩存失配的代價,以及需要較高的外部存儲器帶寬。利用DMA引擎,可以在處理器核需要數(shù)據(jù)之前就將數(shù)據(jù)送入L1存儲器,系統(tǒng)在后臺執(zhí)行傳輸操作,而不會因為沒有操作數(shù)據(jù)使處理器核暫停工作。
由于每個DMA控制器上都有兩組MDMA通路,系統(tǒng)設計時,可以將MDMA通路在處理器核上平均分配,從而可以對稱地進行并行操作。
對于具有較小粒度數(shù)據(jù)訪問模式的應用,可以輕松的利用對L1和L2存儲器的快速訪問,也可以直接將獨立的數(shù)據(jù)塊從外圍設備傳送到L1和L2存儲器,而不需要通過慢速的外部存儲器訪問,這樣可節(jié)省寶貴的外存儲器帶寬和MDMA資源,還可以縮短數(shù)據(jù)傳輸時間。
對于某些采用較高層級粒度的數(shù)據(jù)訪問模式的應用,存儲器就可能成為訪問瓶頸,因為較小的L1和L2存儲器層級不能容納大量的數(shù)據(jù)幀。然而,大量數(shù)據(jù)幀之間雖然會出現(xiàn)數(shù)據(jù)關聯(lián)性,但這種關聯(lián)通常也僅存在于跨數(shù)據(jù)幀的較小數(shù)據(jù)塊。如果能將所有關聯(lián)的數(shù)據(jù)幀存放在一個較大的存儲空間(外存儲器)中,就可以將每一幀中的獨立數(shù)據(jù)塊相繼送入空閑的處理器核進行處理。如果這些獨立的數(shù)據(jù)塊比數(shù)據(jù)幀小得多,以至于符合L1和L2存儲器的容量,就可減少存儲器存取延遲從而高效地處理數(shù)據(jù)。
雖然L2和外存儲器都有獨立的總線連接,兩個處理器核仍共享這些存儲器接口總線。因此,應當盡量避免利用兩個處理器核同時對同一級別的存儲器進行存取操作,以免造成因線路爭用引起延遲。為了減少線路爭用狀態(tài),程序架構(gòu)應考慮目標程序代碼和數(shù)據(jù)的映射,要讓一個處理器核主要訪問L2存儲器核,而另一處理器核則主要訪問外部存儲器。在這種情況下,雖然處理器核完成多數(shù)外部存儲器訪問會出現(xiàn)較大的訪問延遲,但總的訪問延遲仍然要比存在線路爭用狀態(tài)下的情況小。
該結(jié)構(gòu)能將所有的輸入外設接口配置在一個處理器核上,所有的輸出外設接口分配到另一處理器核上。BF561體系結(jié)構(gòu)中有兩個PPI(并行外設接口),通過PPI視頻輸入/輸出接口,可以實現(xiàn)輸入或輸出視頻幀的獨立操作。
如果中斷處理時間比數(shù)據(jù)流的處理時間要短,還可將所有的外設接口分配到一個處理器核上以便于編程,較短的中斷處理時間不會影響兩個處理器核的負載平衡。
建議的軟件框架模型
基于數(shù)據(jù)訪問模式的粒度,您可以定義四種軟件框架:行處理(空域),宏塊處理(空域),幀處理(時域)以及GOP處理(時域)。如果某個應用程序的數(shù)據(jù)訪問模式適于這四種模型中的任何一種,就可以采用相應的軟件結(jié)構(gòu),如果對同一數(shù)據(jù)流有兩種或多種處理算法,還可以將這幾種軟件結(jié)構(gòu)結(jié)合起來,實現(xiàn)非對稱的并行處理。
在行處理模式中,只在行級有相關性——也就是說,只在兩個相鄰像素之間存在相關性。每行數(shù)據(jù)形成一個數(shù)據(jù)塊,這樣兩個處理器核都獨立處理,圖3說明了行處理軟件架構(gòu)的數(shù)據(jù)流模型。圖中,處理器核A控制視頻輸入,處理器核B控制視頻輸出。處理器核A和B之間的數(shù)據(jù)有獨立的MDMA通道進行管理。L1存儲器使用多個緩沖器,可以避免處理器核與外設DMA數(shù)據(jù)訪問之間出現(xiàn)的線路爭用狀態(tài)。兩個處理器核之間每行數(shù)據(jù)的同步,則通過一個計數(shù)信號量實現(xiàn)。在行處理模式中,采用單處理器核方式將數(shù)據(jù)直接存入L1存儲器也具有優(yōu)勢,可以節(jié)省外部存儲器帶寬和DMA資源。行處理軟件架構(gòu)的應用實例包括色彩變換,直方圖均衡化,濾波,以及采樣。
圖4說明了宏塊數(shù)據(jù)訪問模式的數(shù)據(jù)流模型,可以將交替的宏塊在兩個處理器核之間傳送。L2存儲器保持多個數(shù)據(jù)緩沖區(qū),宏塊從L2存儲器傳輸?shù)矫總€處理器核的L1存儲器都有獨立的MDMA通道。L1存儲器也保持多個數(shù)據(jù)緩沖區(qū),以避免在DMA和處理器核數(shù)據(jù)訪問過程中產(chǎn)生線路爭用。與行處理結(jié)構(gòu)類似,該結(jié)構(gòu)中處理器核A仍控制輸入視頻接口,處理器核B控制輸出接口,計數(shù)信號量實現(xiàn)兩個處理器核之間的同步。這種軟件架構(gòu)的應用實例包括邊緣檢測,JPEG/MPEG的編/解碼算法,以及卷積編碼。
在幀級處理模式中,外部存儲器存儲相關的數(shù)據(jù)幀。根據(jù)數(shù)據(jù)幀(宏塊或行)之間相關性的粒度,系統(tǒng)將數(shù)據(jù)幀的子塊傳送到L1或L2存儲器。圖5說明了幀級處理軟件架構(gòu)數(shù)據(jù)流模型。在這種情況下,假定某個宏塊在不同幀間存在相關性,系統(tǒng)則將數(shù)據(jù)幀的宏塊傳送至L1存儲器。與其他軟件架構(gòu)類似,處理器核A仍控制輸入視頻接口,處理器核B則控制輸出接口,計數(shù)信號量實現(xiàn)兩個處理器核之間的同步。該軟件架構(gòu)已應用于運動檢測算法。
在GOP級處理架構(gòu)中,每個處理器核都處理多個順序的數(shù)據(jù)幀。幀級處理結(jié)構(gòu)和GOP處理結(jié)構(gòu)之間的區(qū)別在于幀級處理結(jié)構(gòu)是在幀間完成空域劃分,而GOP級結(jié)構(gòu)則通過時域(幀序列)劃分實現(xiàn)并行處理。對于GOP數(shù)據(jù)訪問模式,相關性存在于一組數(shù)據(jù)幀內(nèi)部。在兩組數(shù)據(jù)幀之間不存在數(shù)據(jù)相關性,因此處理器核可以相互獨立地對每組數(shù)據(jù)幀進行處理。圖6說明了該結(jié)構(gòu)的數(shù)據(jù)流模型,與幀級處理結(jié)構(gòu)類似,系統(tǒng)可將多幀數(shù)據(jù)塊傳送至處理器核的L1處理器。為了有效利用外部存儲器的交叉存儲組結(jié)構(gòu),系統(tǒng)在處理器核間均衡的劃分存儲區(qū)。ADSP-BF561的每一個外部存儲區(qū)都支持多至四個的內(nèi)部SDRAM存儲器組。這一結(jié)構(gòu)的應用實例有編/解碼算法,如MPEG-2/4。
在實際的應用中,系統(tǒng)可能運用多種算法來處理數(shù)據(jù)流,而每種算法都可能用到不同的數(shù)據(jù)訪問模式。這種情況下,則可以將這幾種軟件結(jié)構(gòu)結(jié)合起來完成一個特殊的應用。為利用多核結(jié)構(gòu),可采用流水處理來實現(xiàn)算法的并行操作,但這種并行操作是不對稱的,因為不同處理器核上可能執(zhí)行的計算是不同的。然而,系統(tǒng)可以分配一些其它的任務到處理器核的空閑指令上,在保持靈活性的同時也達到了處理器核的工作量平衡。圖7說明了行級處理和宏塊處理相結(jié)合的處理結(jié)構(gòu)中的數(shù)據(jù)流模型。
在某些其他應用中,多個數(shù)據(jù)塊之間也會存在數(shù)據(jù)相關性,數(shù)據(jù)訪問模式仍然是可預測的,但它擴展到了一個宏塊或一個行的粒度之外。例如,運動窗口搜尋就可能使用幾個相鄰的宏塊。雖然數(shù)據(jù)訪問模式仍然是可預測的,但系統(tǒng)在算法迭代過程中要訪問多個數(shù)據(jù)塊。在這種情況下,您可以對軟件框架進行修正,以實現(xiàn)有效的并行操作。例如,如果多行間存在相關性,可以通過調(diào)整行處理結(jié)構(gòu)將N個連續(xù)行的幀單元傳送到每個處理器核的L1存儲器中。利用類似的方法,還可以對宏塊處理結(jié)構(gòu)進行擴展,從L2存儲器中將不止一個宏塊送入內(nèi)部L1存儲器。
軟件框架分析
為了對雙核處理的軟件框架進行評估,AD公司利用數(shù)據(jù)流模型率先開發(fā)了一款單核應用軟件,并與雙核實現(xiàn)進行了對比。參考文獻【1】討論了單核模型的更多細節(jié)。Blackfin獨有的系統(tǒng)優(yōu)化技術完全可以有效的使用可用帶寬(參考文獻【2】)。 為了分析簡單,公司只對基本軟件架構(gòu)的處理速度做了對比,而沒有考慮幾種組合的軟件架構(gòu)。
所謂周期是指為了滿足NTSC(國家電視系統(tǒng)委員會)視頻輸入的實時需要,用于處理數(shù)據(jù)流的處理器核計算周期。對于一個以600MHz運行的處理器核,為了滿足實時約束條件,處理每一像素可用的周期數(shù)為44核周期/像素。任何處理器核訪問流數(shù)據(jù)都只需一個單內(nèi)核周期,因為所有的數(shù)據(jù)訪問都是對L1存儲器的訪問。該周期數(shù)沒有包括中斷引起的延遲。
如表1所示,雙核處理結(jié)構(gòu)將所有軟件結(jié)構(gòu)的處理速度都有效提高了兩倍。表中還說明了L1存儲器對于每個處理器核的可用容量,以及每種軟件架構(gòu)所需的共享存儲空間。這些軟件架構(gòu)應用ADi公司的DD/SSL(設備驅(qū)動程序/系統(tǒng)服務庫)實現(xiàn)對外設和數(shù)據(jù)的管理(參考文獻【3】)。