新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式多媒體應(yīng)用的多核編程框架

嵌入式多媒體應(yīng)用的多核編程框架

作者: 時(shí)間:2011-12-29 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/149925.htm

基于單核結(jié)構(gòu)的處理器越來(lái)越難以滿足日益增長(zhǎng)的的處理需求,多核結(jié)構(gòu)已成為解決這一問(wèn)題的有效途徑,同時(shí)也為如何充分開(kāi)發(fā)利用多核結(jié)構(gòu)的軟件帶來(lái)挑戰(zhàn)。目前的編譯技術(shù)和開(kāi)發(fā)工具需要更精密,才能使多核結(jié)構(gòu)的獲得成功。大多數(shù)并行軟件都是通過(guò)手工轉(zhuǎn)換方式將順序程序轉(zhuǎn)換為并行程序來(lái)實(shí)現(xiàn)的,由于缺乏具有多核意識(shí)的開(kāi)發(fā)工具,使得軟件難以進(jìn)行性能評(píng)估。因此,如果沒(méi)有預(yù)先有效可靠的工程規(guī)劃,將不得不面對(duì)應(yīng)用軟件效率低下以及延遲產(chǎn)品上市時(shí)間等問(wèn)題。

軟件為多核應(yīng)用軟件的開(kāi)發(fā)提供了一個(gè)更好的起點(diǎn),可以幫助縮短開(kāi)發(fā)時(shí)間。本文將詳細(xì)說(shuō)明嵌入式應(yīng)用軟件的設(shè)計(jì),同時(shí),本文的數(shù)據(jù)流模型也可擴(kuò)展到許多其它應(yīng)用中。該綜合了應(yīng)用軟件固有的數(shù)據(jù)并行結(jié)構(gòu),并說(shuō)明了如何通過(guò)使用底層架構(gòu)來(lái)有效管理數(shù)據(jù)流。

在設(shè)計(jì)并行軟件的過(guò)程中有兩大挑戰(zhàn):一是開(kāi)發(fā)有效的并行算法,二是有效地利用存儲(chǔ)器、DMA(直接存儲(chǔ)器訪問(wèn))通道和互連網(wǎng)絡(luò)等共享資源。在該過(guò)程中,順序運(yùn)行的應(yīng)用程序的性能可根據(jù)可用處理器核的數(shù)目進(jìn)行擴(kuò)展。

實(shí)現(xiàn)應(yīng)用程序的并行處理常常有多種方法。有些應(yīng)用程序表現(xiàn)出固有的并行特性,而其它的則具有極其復(fù)雜且不規(guī)則的數(shù)據(jù)存取模式。但總的來(lái)講,科學(xué)計(jì)算類的應(yīng)用程序和多媒體應(yīng)用程序的并行化通常易于實(shí)現(xiàn),因?yàn)樗鼈兊臄?shù)據(jù)存取模式比那些控制類應(yīng)用程序相對(duì)容易預(yù)測(cè)。本文重點(diǎn)討論針對(duì)多媒體算法的并行技術(shù),這類算法需要很高的處理能力,并且更適合嵌入式系統(tǒng)應(yīng)用。

多媒體應(yīng)用程序中存在數(shù)據(jù)的并行級(jí)別。一組數(shù)據(jù)幀與數(shù)據(jù)幀中的一個(gè)宏塊之間的并行粒度有很大差別。通常來(lái)講,粒度越小,共享單元(如處理器核和DMA通道等)之間所需的同步級(jí)別越高。粒度越小,并行程度就越高,網(wǎng)絡(luò)通信量越小;粒度越大,同步要求就越低,但網(wǎng)絡(luò)通信量會(huì)增大。因此,基于應(yīng)用的不同類型和系統(tǒng)需求,軟件框架也定義了不同的并行級(jí)別。

需要說(shuō)明的是,可擴(kuò)展并行軟件的開(kāi)發(fā)還依賴于對(duì)互連網(wǎng)絡(luò)、分級(jí)存儲(chǔ)器體系以及外設(shè)/DMA資源的有效利用。系統(tǒng)嚴(yán)格的低功耗和低成本要求對(duì)所有這些要素都會(huì)構(gòu)成限制。在多核環(huán)境下時(shí),有效利用這些資源需要進(jìn)行創(chuàng)新。本文提出了一些在ADI公司的Blackfin ADSP-BF561雙核處理器上有效管理資源的構(gòu)想。

多媒體數(shù)據(jù)流分析

為了實(shí)現(xiàn)數(shù)據(jù)并行,需要在數(shù)據(jù)流中找到這樣一個(gè)或一組數(shù)據(jù)塊:可以獨(dú)立處理并將其“喂”給一個(gè)處理元件。獨(dú)立的數(shù)據(jù)塊可以降低同步開(kāi)銷并簡(jiǎn)化并行算法。要找到這種數(shù)據(jù),必須弄清應(yīng)用的數(shù)據(jù)流模型,或者說(shuō)“數(shù)據(jù)存取模式”。

對(duì)于大多數(shù)多媒體應(yīng)用,可以將數(shù)據(jù)存取模式看成是2D(空間域)和3D(時(shí)間域)操作模式。在2D模式中,獨(dú)立的數(shù)據(jù)塊被限制在單個(gè)數(shù)據(jù)幀內(nèi),而在3D模式中,獨(dú)立數(shù)據(jù)塊可以橫跨多幀。在空間域中,可以將幀劃分為由N個(gè)連續(xù)行和視頻幀宏塊組成的片段,而在時(shí)間域中,可以對(duì)數(shù)據(jù)流進(jìn)一步細(xì)分到幀級(jí)或圖片組(GOP)級(jí)。

采用片段或宏塊數(shù)據(jù)存取模式的算法對(duì)同步性要求較高,但網(wǎng)絡(luò)傳輸量較少,這是因?yàn)榉旨?jí)存儲(chǔ)器體系只需存儲(chǔ)圖像數(shù)據(jù)的一部分。對(duì)于幀或圖片組類型的數(shù)據(jù)存取模式,分級(jí)存儲(chǔ)器體系則需要存儲(chǔ)大量數(shù)據(jù),但對(duì)同步性的要求則相對(duì)低得多,這是因?yàn)橄到y(tǒng)的并行粒度更大。圖1說(shuō)明了多媒體應(yīng)用軟件中的并行級(jí)別,同時(shí)顯示了四個(gè)級(jí)別的相對(duì)同步要求和網(wǎng)絡(luò)通信量。

圖1 多媒體應(yīng)用展示了不同的數(shù)據(jù)并行級(jí)別,這些級(jí)別對(duì)應(yīng)不同的同步要求和網(wǎng)絡(luò)通信量。

多核結(jié)構(gòu)分析

圖2顯示了ADSP-BF561的結(jié)構(gòu),它包括獨(dú)立的指令和數(shù)據(jù)存儲(chǔ)器,分別屬于兩個(gè)處理器核專有,此外還包括共享的L2存儲(chǔ)器和外部存儲(chǔ)器。用戶可以利用可配置的仲裁方案將所有外圍設(shè)備和DMA資源連接到任一處理器核。該處理器有兩個(gè)DMA控制器,每個(gè)DMA控制器由兩組MDMA(存儲(chǔ)器DMA)通道組成。L2存儲(chǔ)器與每個(gè)處理器核之間通過(guò)獨(dú)立的總線連接,外部存儲(chǔ)器與兩個(gè)處理器核之間則由一條共享總線連接。

圖2 ADSP-BF561的結(jié)構(gòu)包括獨(dú)立的指令和數(shù)據(jù)存儲(chǔ)器,分別屬于兩個(gè)處理器核專有,此外還包括共享的L2存儲(chǔ)器和外部存儲(chǔ)器。

所有框架都利用DMA方式將數(shù)據(jù)流送入分級(jí)存儲(chǔ)器體系。另一種選擇是高速緩存,它不管理任何數(shù)據(jù)。如果清楚目標(biāo)應(yīng)用的數(shù)據(jù)存取模式,就可以利用DMA引擎對(duì)數(shù)據(jù)進(jìn)行有效的管理。而使用高速緩存需要忍受不確定的訪問(wèn)時(shí)間、高速緩存未命中的代價(jià),以及需要較高的外部存儲(chǔ)器帶寬。利用DMA引擎,可以在處理器核請(qǐng)求數(shù)據(jù)之前就將數(shù)據(jù)送入L1存儲(chǔ)器,系統(tǒng)在后臺(tái)執(zhí)行傳輸操作,而不會(huì)因?yàn)閿?shù)據(jù)項(xiàng)請(qǐng)求使處理器核暫停工作。

由于每個(gè)DMA控制器上都有兩組MDMA通道,因此系統(tǒng)可以將MDMA通道在處理器核上均勻分配,從而可以對(duì)稱地進(jìn)行并行處理。

對(duì)于數(shù)據(jù)存取模式粒度較小的應(yīng)用,可以輕松地利用對(duì)L1和L2存儲(chǔ)器的快速訪問(wèn)。也可以直接將獨(dú)立的數(shù)據(jù)塊從外設(shè)接口傳送到L1或L2存儲(chǔ)器,而不需要訪問(wèn)慢速的外部存儲(chǔ)器,這樣可以節(jié)省寶貴的外存儲(chǔ)器帶寬和MDMA資源,并縮短數(shù)據(jù)傳輸時(shí)間。

對(duì)于數(shù)據(jù)存取模式粒度較大的應(yīng)用,存儲(chǔ)器可能成為瓶頸,因?yàn)檩^小的L1和L2存儲(chǔ)器級(jí)不足以容納大量的數(shù)據(jù)幀。然而,大量數(shù)據(jù)幀之間雖然存在數(shù)據(jù)關(guān)聯(lián)性,但這種關(guān)聯(lián)通常也僅存在于跨數(shù)據(jù)幀的較小數(shù)據(jù)塊上。如果能將所有關(guān)聯(lián)的數(shù)據(jù)幀存放在一個(gè)較大的存儲(chǔ)空間(外部存儲(chǔ)器)中,就可以將每一幀中的獨(dú)立數(shù)據(jù)塊相繼送入空閑的處理器核進(jìn)行處理。如果這些獨(dú)立的數(shù)據(jù)塊比數(shù)據(jù)幀小得多,符合L1或L2存儲(chǔ)器的容量,就可以減少存儲(chǔ)器存取延遲,高效地處理數(shù)據(jù)。

雖然L2和外部存儲(chǔ)器都有獨(dú)立的總線連接,但兩個(gè)處理器核仍共享這些存儲(chǔ)器接口總線。因此,應(yīng)當(dāng)盡量避免兩個(gè)處理器核同時(shí)對(duì)同一級(jí)別的存儲(chǔ)器進(jìn)行存取操作,以免因總線沖突而停止工作。為了減少總線沖突狀況,框架應(yīng)考慮代碼和數(shù)據(jù)對(duì)象的映射,讓一個(gè)處理器核主要訪問(wèn)L2存儲(chǔ)器核,而另一處理器核則主要訪問(wèn)外部存儲(chǔ)器。在這種情況下,雖然處理器核完成多數(shù)外部存儲(chǔ)器訪問(wèn)會(huì)出現(xiàn)較大的訪問(wèn)延遲,但總的訪問(wèn)延遲仍然小于總線沖突的代價(jià)。

框架把所有輸入外設(shè)接口分配給一個(gè)處理器核,把所有輸出外設(shè)接口分配給另一處理器核??蚣芾靡曨l輸入/輸出接口,例如PPI(并行外設(shè)接口)來(lái)輸入和輸出視頻幀。BF561架構(gòu)有兩個(gè)PPI接口。

如果中斷處理時(shí)間比數(shù)據(jù)流的處理時(shí)間要短,則可將所有的外設(shè)接口分配給一個(gè)處理器核以便于,較短的中斷處理時(shí)間不會(huì)影響兩個(gè)處理器核的負(fù)荷平衡。

軟件框架的建議模型

基于數(shù)據(jù)存取模式的粒度,可以定義四種軟件框架:行處理(空間域)、宏塊處理(空間域)、幀處理(時(shí)間域)以及GOP處理(時(shí)間域)。如果某個(gè)應(yīng)用程序的數(shù)據(jù)存取模式適于這四種模型中的任何一種,就可以采用相應(yīng)的框架。如果一個(gè)數(shù)據(jù)流有兩種或更多的處理算法,還可以將多種框架結(jié)合起來(lái),實(shí)現(xiàn)非對(duì)稱的并行處理。

在行處理模式中,關(guān)聯(lián)性只存在于行級(jí),也就是說(shuō),只存在于相鄰像素之間。每行數(shù)據(jù)形成一個(gè)數(shù)據(jù)塊,各處理器核都可以獨(dú)立處理。

圖3顯示了行處理框架的數(shù)據(jù)流模型。處理器核A處理視頻輸入,處理器核B處理視頻輸出。核A和B之間的數(shù)據(jù)由獨(dú)立的MDMA通道組進(jìn)行管理。L1存儲(chǔ)器使用多個(gè)緩神器,可以避免處理器核與外設(shè)DMA訪問(wèn)總線的沖突。兩個(gè)處理器核之間每行數(shù)據(jù)的同步通過(guò)計(jì)數(shù)信號(hào)量實(shí)現(xiàn)。在這種框架中,采用單處理器核方式將數(shù)據(jù)直接存入L1存儲(chǔ)器也具有優(yōu)勢(shì),可以節(jié)省外部存儲(chǔ)器帶寬和DMA資源。這種框架的應(yīng)用實(shí)例包括色彩變換、直方圖均衡化、濾波和采樣。

圖3 行處理框架的數(shù)據(jù)流模型。處理器核A處理視頻輸入,處理器核B處理視頻輸出。

圖4顯示了宏塊數(shù)據(jù)訪問(wèn)模式的數(shù)據(jù)流模型,可以在兩個(gè)處理器核之間交替?zhèn)魉秃陦K。L2存儲(chǔ)器具有多個(gè)片段緩沖器,獨(dú)立的MDMA通道將宏塊從每個(gè)處理器核的L2存儲(chǔ)器傳輸?shù)絃1存儲(chǔ)器。L1存儲(chǔ)器也有多個(gè)緩神器,用以避免DMA與處理器核訪問(wèn)總線的沖突。與行處理框架類似,該框架中處理器核A控制輸入視頻接口,處理器核B控制輸出接口,計(jì)數(shù)信號(hào)量實(shí)現(xiàn)兩個(gè)處理器核之間的同步。這種框架的應(yīng)用實(shí)例包括邊緣檢測(cè)、JPEG/MPEG編碼/解碼算法和卷積編碼。

圖4 在雙核宏塊數(shù)據(jù)訪問(wèn)模式中,L2存儲(chǔ)器具有多個(gè)片段緩沖器,獨(dú)立的MDMA通道將宏塊從每個(gè)處理器核的L2存儲(chǔ)器傳輸?shù)絃1存儲(chǔ)器。

在幀級(jí)處理模式中,外部存儲(chǔ)器存儲(chǔ)關(guān)聯(lián)幀。根據(jù)數(shù)據(jù)幀(宏塊或行)之間的關(guān)聯(lián)性粒度,系統(tǒng)將數(shù)據(jù)幀的子塊傳送到L1或L2存儲(chǔ)器。圖5顯示了幀級(jí)處理框架的數(shù)據(jù)流模型。在這種情況下,假定某個(gè)宏塊在多個(gè)幀之間存在關(guān)聯(lián),則系統(tǒng)將數(shù)據(jù)幀的宏塊傳送至L1存儲(chǔ)器。與其它框架類似,該框架中處理器核A控制輸入視頻接口,處理器核B控制輸出接口,通過(guò)計(jì)數(shù)信號(hào)量實(shí)現(xiàn)兩個(gè)處理器核之間的同步。這種框架的應(yīng)用實(shí)例包括運(yùn)動(dòng)檢測(cè)算法。

圖5 在幀級(jí)處理流程中,外部的存儲(chǔ)器存儲(chǔ)獨(dú)立幀

在GOP級(jí)處理模式中,每個(gè)處理器核處理多個(gè)相繼的數(shù)據(jù)幀。幀級(jí)處理框架與GOP級(jí)處理框架之間的區(qū)別在于,前者是在幀內(nèi)完成空間劃分,后者則通過(guò)時(shí)間劃分(幀序列)實(shí)現(xiàn)并行處理。對(duì)于GOP數(shù)據(jù)訪問(wèn)模式,關(guān)聯(lián)性存在于一組數(shù)據(jù)幀內(nèi)部,兩組幀之間數(shù)據(jù)不存在關(guān)聯(lián)性。因此,處理器核可以獨(dú)立處理每一組幀。圖6顯示了這種框架的數(shù)據(jù)流。與幀級(jí)處理框架類似,系統(tǒng)可以將幀數(shù)據(jù)塊傳送至處理器核的L1存儲(chǔ)器。為了有效利用外部存儲(chǔ)器的交錯(cuò)存儲(chǔ)庫(kù)結(jié)構(gòu),系統(tǒng)在處理器核間均衡地分配存儲(chǔ)庫(kù)。ADSP-BF561的每一個(gè)外部存儲(chǔ)庫(kù)都支持多達(dá)四個(gè)內(nèi)部SDRAM存儲(chǔ)庫(kù)。這種框架的應(yīng)用實(shí)例包括MPEG-2/4等編碼/解碼算法。

圖6 在GOP級(jí)數(shù)據(jù)訪問(wèn)模式中,關(guān)聯(lián)性存在于一組數(shù)據(jù)幀內(nèi)部,兩組幀之間數(shù)據(jù)不存在關(guān)聯(lián)性。

在實(shí)際應(yīng)用中,系統(tǒng)可能使用多種算法處理數(shù)據(jù)流,而每種算法都可能用到不同的數(shù)據(jù)存取模式。這種情況下,可以針對(duì)特殊應(yīng)用將幾種框架結(jié)合起來(lái)使用。為利用多核結(jié)構(gòu),可以采用流水線處理來(lái)實(shí)現(xiàn)并行操作,但這種并行操作是不對(duì)稱的,因?yàn)椴煌幚砥骱松峡赡軋?zhí)行不同的計(jì)算。然而,系統(tǒng)可以分配一些其它的任務(wù)到處理器核的空閑指令上,在保持靈活性的同時(shí)達(dá)到處理器核的工作量平衡。圖7顯示了行級(jí)處理和宏塊處理相結(jié)合的框架的數(shù)據(jù)流模型。

圖7 行級(jí)處理和宏塊處理相結(jié)合的框架的數(shù)據(jù)流模型

在某些其他應(yīng)用中,多個(gè)數(shù)據(jù)塊之間也會(huì)存在數(shù)據(jù)關(guān)聯(lián)性,數(shù)據(jù)存取模式仍然是可預(yù)測(cè)的,但它擴(kuò)展到了一個(gè)宏塊或一行的粒度之外。例如,運(yùn)動(dòng)窗口搜索就可能使用幾個(gè)相鄰的宏塊。數(shù)據(jù)存取模式仍然是可預(yù)測(cè)的,但系統(tǒng)在算法的多次迭代之間要訪問(wèn)多個(gè)數(shù)據(jù)塊。這種情況下,可以對(duì)軟件框架進(jìn)行修正,以實(shí)現(xiàn)有效的并行操作。例如,如果多行間存在關(guān)聯(lián),可以通過(guò)調(diào)整行處理框架,將N個(gè)連續(xù)行的幀片段傳送到每個(gè)處理器核的L1存儲(chǔ)器。利用類似的方法,還可以對(duì)宏塊處理框架進(jìn)行擴(kuò)展,以便將多個(gè)宏塊從L2存儲(chǔ)器送入內(nèi)部L1存儲(chǔ)器。

軟件框架分析

為了對(duì)雙核處理的軟件框架進(jìn)行評(píng)估,ADI公司利用數(shù)據(jù)流模型率先開(kāi)發(fā)了一款單核應(yīng)用軟件,然后與雙核方案進(jìn)行對(duì)比。Blackfin獨(dú)有的系統(tǒng)優(yōu)化技術(shù)也能有效地利用可用帶寬。為了簡(jiǎn)化分析,ADI公司只比較了基本框架的處理速度,而沒(méi)有考慮幾種架構(gòu)的組合。

所謂周期,是指為了滿足NTSC(美國(guó)國(guó)家電視系統(tǒng)委員會(huì))視頻輸入的實(shí)時(shí)約束條件而用于處理數(shù)據(jù)流的處理器核計(jì)算周期。對(duì)于一個(gè)以600MHz速度運(yùn)行的處理器核,為了滿足實(shí)時(shí)約束條件,處理每一像素可用的總周期數(shù)為44周期/像素。任何對(duì)數(shù)據(jù)流的處理器核訪問(wèn)都只需要一個(gè)單核周期,因?yàn)樗袛?shù)據(jù)訪問(wèn)都是對(duì)L1存儲(chǔ)器的訪問(wèn)。所示的周期數(shù)不包括中斷延遲。

如表1所示,雙核框架將所有框架的處理速度有效提高了兩倍。表中還說(shuō)明了每個(gè)處理器核的L1存儲(chǔ)器使用量,以及各種框架需要的共享存儲(chǔ)器空間。這些框架使用ADI公司的DD/SSL(器件驅(qū)動(dòng)/系統(tǒng)服務(wù)庫(kù))實(shí)現(xiàn)對(duì)外設(shè)和數(shù)據(jù)的管理。

表1:框架說(shuō)明

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉