<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式的多媒體應(yīng)用的多處理器核軟件設(shè)計(jì)框架

          基于嵌入式的多媒體應(yīng)用的多處理器核軟件設(shè)計(jì)框架

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

          深入理解某個(gè)應(yīng)用的數(shù)據(jù)訪問(wèn)方式,可以充分利用處理器潛在架構(gòu)中的存儲(chǔ)器和系統(tǒng)資源,從而開(kāi)發(fā)可擴(kuò)展的并行應(yīng)用。

          本文引用地址:http://www.ex-cimer.com/article/257530.htm

          基于單核結(jié)構(gòu)的處理器越來(lái)越不能滿足日益增長(zhǎng)的多媒體處理應(yīng)用方面的要求,多核結(jié)構(gòu)已成為解決這一問(wèn)題的有效途徑,同時(shí)也為如何開(kāi)發(fā)充分利用多核結(jié)構(gòu)的應(yīng)用軟件帶來(lái)挑戰(zhàn)。目前,需要將編譯技術(shù)和開(kāi)發(fā)工具更多的結(jié)合起來(lái),才能使多核結(jié)構(gòu)的應(yīng)用獲得成功。而大多數(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ō)明嵌入式軟件的設(shè)計(jì)框架,同時(shí),本文的數(shù)據(jù)流模型也可擴(kuò)展到許多其它應(yīng)用中。該框架綜合了軟件固有的數(shù)據(jù)并行結(jié)構(gòu),還說(shuō)明了如何通過(guò)有效使用潛在架構(gòu)來(lái)有效管理數(shù)據(jù)流。

          在設(shè)計(jì)并行軟件的過(guò)程中有兩大挑戰(zhàn):一是開(kāi)發(fā)一個(gè)有效的并行算法,二是有效利用存儲(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)為固有的并行,而有的則具有相當(dāng)復(fù)雜且不規(guī)則的數(shù)據(jù)存取模式。但總的來(lái)講,科學(xué)應(yīng)用程序和程序的并行通常易于實(shí)現(xiàn),因?yàn)樗鼈兊臄?shù)據(jù)存取模式比那些控制類(lèi)應(yīng)用程序相對(duì)容易預(yù)測(cè)。本文重點(diǎn)討論針對(duì)多媒體算法的并行技術(shù),這類(lèi)算法需要很高的處理開(kāi)銷(xiāo),且常用于嵌入式系統(tǒng)應(yīng)用中。

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

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

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

          為了實(shí)現(xiàn)數(shù)據(jù)并行,需要在數(shù)據(jù)流中找到這樣一個(gè)或一組數(shù)據(jù)塊:能夠獨(dú)立處理并將結(jié)果饋送給另外的處理部件。獨(dú)立的數(shù)據(jù)塊可以降低同步開(kāi)銷(xiāo)并簡(jiǎn)化并行算法。要找到這種數(shù)據(jù)塊,重要的是要清楚數(shù)據(jù)流模式,或者一個(gè)應(yīng)用的數(shù)據(jù)存取模式。

          對(duì)于大多數(shù)多媒體應(yīng)用,可以將數(shù)據(jù)存取模式看成是2-D(空間域)和3-D(時(shí)間域)操作模式。在2-D模式中,獨(dú)立的數(shù)據(jù)塊被限制在單個(gè)數(shù)據(jù)幀內(nèi),而在3-D模式中,獨(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ì)于幀或圖片組類(lèi)型的數(shù)據(jù)訪問(wèn)模式,分級(jí)的存儲(chǔ)器體系則需要存儲(chǔ)大量數(shù)據(jù),但對(duì)同步性的要求則相對(duì)低得多。這是因?yàn)橄到y(tǒng)的并行粒度增大了的緣故。圖1說(shuō)明了多媒體應(yīng)用軟件中的并行級(jí)別,同時(shí)對(duì)四個(gè)級(jí)別中相關(guān)的同步性和網(wǎng)絡(luò)通信量做了對(duì)比。


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

          所有架構(gòu)都利用DMA方式將數(shù)據(jù)流送入分級(jí)的存儲(chǔ)器體系。作為另外一種選擇的高速緩存并不處理任何數(shù)據(jù)。只要清楚所設(shè)計(jì)的目標(biāo)應(yīng)用的數(shù)據(jù)訪問(wèn)模式,則可以利用DMA引擎對(duì)數(shù)據(jù)進(jìn)行有效的管理。而使用高速緩存需要忍受不確定的訪問(wèn)時(shí)間,高速緩存失配的代價(jià),以及需要較高的外部存儲(chǔ)器帶寬。利用DMA引擎,可以在處理器核需要數(shù)據(jù)之前就將數(shù)據(jù)送入L1存儲(chǔ)器,系統(tǒng)在后臺(tái)執(zhí)行傳輸操作,而不會(huì)因?yàn)闆](méi)有操作數(shù)據(jù)使處理器核暫停工作。

          由于每個(gè)DMA控制器上都有兩組MDMA通路,系統(tǒng)設(shè)計(jì)時(shí),可以將MDMA通路在處理器核上平均分配,從而可以對(duì)稱地進(jìn)行并行操作。
           
          對(duì)于具有較小粒度數(shù)據(jù)訪問(wèn)模式的應(yīng)用,可以輕松的利用對(duì)L1和L2存儲(chǔ)器的快速訪問(wèn),也可以直接將獨(dú)立的數(shù)據(jù)塊從外圍設(shè)備傳送到L1和L2存儲(chǔ)器,而不需要通過(guò)慢速的外部存儲(chǔ)器訪問(wèn),這樣可節(jié)省寶貴的外存儲(chǔ)器帶寬和MDMA資源,還可以縮短數(shù)據(jù)傳輸時(shí)間。

          對(duì)于某些采用較高層級(jí)粒度的數(shù)據(jù)訪問(wèn)模式的應(yīng)用,存儲(chǔ)器就可能成為訪問(wèn)瓶頸,因?yàn)檩^小的L1和L2存儲(chǔ)器層級(jí)不能容納大量的數(shù)據(jù)幀。然而,大量數(shù)據(jù)幀之間雖然會(huì)出現(xiàn)數(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ù)?! ?/p>

          雖然L2和外存儲(chǔ)器都有獨(dú)立的總線連接,兩個(gè)處理器核仍共享這些存儲(chǔ)器接口總線。因此,應(yīng)當(dāng)盡量避免利用兩個(gè)處理器核同時(shí)對(duì)同一級(jí)別的存儲(chǔ)器進(jìn)行存取操作,以免造成因線路爭(zhēng)用引起延遲。為了減少線路爭(zhēng)用狀態(tài),程序架構(gòu)應(yīng)考慮目標(biāo)程序代碼和數(shù)據(jù)的映射,要讓一個(gè)處理器核主要訪問(wèn)L2存儲(chǔ)器核,而另一處理器核則主要訪問(wèn)外部存儲(chǔ)器。在這種情況下,雖然處理器核完成多數(shù)外部存儲(chǔ)器訪問(wèn)會(huì)出現(xiàn)較大的訪問(wèn)延遲,但總的訪問(wèn)延遲仍然要比存在線路爭(zhēng)用狀態(tài)下的情況小。

          該結(jié)構(gòu)能將所有的輸入外設(shè)接口配置在一個(gè)處理器核上,所有的輸出外設(shè)接口分配到另一處理器核上。BF561體系結(jié)構(gòu)中有兩個(gè)PPI(并行外設(shè)接口),通過(guò)PPI視頻輸入/輸出接口,可以實(shí)現(xiàn)輸入或輸出視頻幀的獨(dú)立操作。

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

          建議的軟件框架模型

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

          在行處理模式中,只在行級(jí)有相關(guān)性——也就是說(shuō),只在兩個(gè)相鄰像素之間存在相關(guān)性。每行數(shù)據(jù)形成一個(gè)數(shù)據(jù)塊,這樣兩個(gè)處理器核都獨(dú)立處理,圖3說(shuō)明了行處理軟件架構(gòu)的數(shù)據(jù)流模型。圖中,處理器核A控制視頻輸入,處理器核B控制視頻輸出。處理器核A和B之間的數(shù)據(jù)有獨(dú)立的MDMA通道進(jìn)行管理。L1存儲(chǔ)器使用多個(gè)緩沖器,可以避免處理器核與外設(shè)DMA數(shù)據(jù)訪問(wèn)之間出現(xiàn)的線路爭(zhēng)用狀態(tài)。兩個(gè)處理器核之間每行數(shù)據(jù)的同步,則通過(guò)一個(gè)計(jì)數(shù)信號(hào)量實(shí)現(xiàn)。在行處理模式中,采用單處理器核方式將數(shù)據(jù)直接存入L1存儲(chǔ)器也具有優(yōu)勢(shì),可以節(jié)省外部存儲(chǔ)器帶寬和DMA資源。行處理軟件架構(gòu)的應(yīng)用實(shí)例包括色彩變換,直方圖均衡化,濾波,以及采樣。

          圖4說(shuō)明了宏塊數(shù)據(jù)訪問(wèn)模式的數(shù)據(jù)流模型,可以將交替的宏塊在兩個(gè)處理器核之間傳送。L2存儲(chǔ)器保持多個(gè)數(shù)據(jù)緩沖區(qū),宏塊從L2存儲(chǔ)器傳輸?shù)矫總€(gè)處理器核的L1存儲(chǔ)器都有獨(dú)立的MDMA通道。L1存儲(chǔ)器也保持多個(gè)數(shù)據(jù)緩沖區(qū),以避免在DMA和處理器核數(shù)據(jù)訪問(wèn)過(guò)程中產(chǎn)生線路爭(zhēng)用。與行處理結(jié)構(gòu)類(lèi)似,該結(jié)構(gòu)中處理器核A仍控制輸入視頻接口,處理器核B控制輸出接口,計(jì)數(shù)信號(hào)量實(shí)現(xiàn)兩個(gè)處理器核之間的同步。這種軟件架構(gòu)的應(yīng)用實(shí)例包括邊緣檢測(cè),JPEG/MPEG的編/解碼算法,以及卷積編碼。


            
          在幀級(jí)處理模式中,外部存儲(chǔ)器存儲(chǔ)相關(guān)的數(shù)據(jù)幀。根據(jù)數(shù)據(jù)幀(宏塊或行)之間相關(guān)性的粒度,系統(tǒng)將數(shù)據(jù)幀的子塊傳送到L1或L2存儲(chǔ)器。圖5說(shuō)明了幀級(jí)處理軟件架構(gòu)數(shù)據(jù)流模型。在這種情況下,假定某個(gè)宏塊在不同幀間存在相關(guān)性,系統(tǒng)則將數(shù)據(jù)幀的宏塊傳送至L1存儲(chǔ)器。與其他軟件架構(gòu)類(lèi)似,處理器核A仍控制輸入視頻接口,處理器核B則控制輸出接口,計(jì)數(shù)信號(hào)量實(shí)現(xiàn)兩個(gè)處理器核之間的同步。該軟件架構(gòu)已應(yīng)用于運(yùn)動(dòng)檢測(cè)算法。


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

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

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

          軟件框架分析

          為了對(duì)雙核處理的軟件框架進(jìn)行評(píng)估,AD公司利用數(shù)據(jù)流模型率先開(kāi)發(fā)了一款單核應(yīng)用軟件,并與雙核實(shí)現(xiàn)進(jìn)行了對(duì)比。參考文獻(xiàn)【1】討論了單核模型的更多細(xì)節(jié)。Blackfin獨(dú)有的系統(tǒng)優(yōu)化技術(shù)完全可以有效的使用可用帶寬(參考文獻(xiàn)【2】)。 為了分析簡(jiǎn)單,公司只對(duì)基本軟件架構(gòu)的處理速度做了對(duì)比,而沒(méi)有考慮幾種組合的軟件架構(gòu)。

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

          如表1所示,雙核處理結(jié)構(gòu)將所有軟件結(jié)構(gòu)的處理速度都有效提高了兩倍。表中還說(shuō)明了L1存儲(chǔ)器對(duì)于每個(gè)處理器核的可用容量,以及每種軟件架構(gòu)所需的共享存儲(chǔ)空間。這些軟件架構(gòu)應(yīng)用ADi公司的DD/SSL(設(shè)備驅(qū)動(dòng)程序/系統(tǒng)服務(wù)庫(kù))實(shí)現(xiàn)對(duì)外設(shè)和數(shù)據(jù)的管理(參考文獻(xiàn)【3】)。

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


          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();