嵌入式多媒體應用的多核編程框架
基于單核結構的嵌入式處理器越來(lái)越難以滿(mǎn)足日益增長(cháng)的嵌入式多媒體應用的處理需求,多核嵌入式結構已成為解決這一問(wèn)題的有效途徑,同時(shí)也為如何充分開(kāi)發(fā)利用多核結構的應用軟件帶來(lái)挑戰。目前的編譯技術(shù)和開(kāi)發(fā)工具需要更精密,才能使多核結構的應用獲得成功。大多數并行軟件都是通過(guò)手工轉換方式將順序程序轉換為并行程序來(lái)實(shí)現的,由于缺乏具有多核意識的開(kāi)發(fā)工具,使得軟件難以進(jìn)行性能評估。因此,如果沒(méi)有預先有效可靠的工程規劃,將不得不面對應用軟件效率低下以及延遲產(chǎn)品上市時(shí)間等問(wèn)題。
軟件框架為多核應用軟件的開(kāi)發(fā)提供了一個(gè)更好的起點(diǎn),可以幫助縮短開(kāi)發(fā)時(shí)間。本文將詳細說(shuō)明嵌入式多媒體應用軟件的設計框架,同時(shí),本文的數據流模型也可擴展到許多其它應用中。該框架綜合了多媒體應用軟件固有的數據并行結構,并說(shuō)明了如何通過(guò)使用底層架構來(lái)有效管理數據流。
在設計并行軟件的過(guò)程中有兩大挑戰:一是開(kāi)發(fā)有效的并行算法,二是有效地利用存儲器、DMA(直接存儲器訪(fǎng)問(wèn))通道和互連網(wǎng)絡(luò )等共享資源。在該過(guò)程中,順序運行的應用程序的性能可根據可用處理器核的數目進(jìn)行擴展。
實(shí)現應用程序的并行處理常常有多種方法。有些應用程序表現出固有的并行特性,而其它的則具有極其復雜且不規則的數據存取模式。但總的來(lái)講,科學(xué)計算類(lèi)的應用程序和多媒體應用程序的并行化通常易于實(shí)現,因為它們的數據存取模式比那些控制類(lèi)應用程序相對容易預測。本文重點(diǎn)討論針對多媒體算法的并行技術(shù),這類(lèi)算法需要很高的處理能力,并且更適合嵌入式系統應用。
多媒體應用程序中存在數據的并行級別。一組數據幀與數據幀中的一個(gè)宏塊之間的并行粒度有很大差別。通常來(lái)講,粒度越小,共享單元(如處理器核和DMA通道等)之間所需的同步級別越高。粒度越小,并行程度就越高,網(wǎng)絡(luò )通信量越??;粒度越大,同步要求就越低,但網(wǎng)絡(luò )通信量會(huì )增大。因此,基于應用的不同類(lèi)型和系統需求,軟件框架也定義了不同的并行級別。
需要說(shuō)明的是,可擴展并行軟件的開(kāi)發(fā)還依賴(lài)于對互連網(wǎng)絡(luò )、分級存儲器體系以及外設/DMA資源的有效利用。系統嚴格的低功耗和低成本要求對所有這些要素都會(huì )構成限制。在多核環(huán)境下編程時(shí),有效利用這些資源需要進(jìn)行創(chuàng )新。本文提出了一些在A(yíng)DI公司的Blackfin ADSP-BF561雙核處理器上有效管理資源的構想。
多媒體數據流分析
為了實(shí)現數據并行,需要在數據流中找到這樣一個(gè)或一組數據塊:可以獨立處理并將其“喂”給一個(gè)處理元件。獨立的數據塊可以降低同步開(kāi)銷(xiāo)并簡(jiǎn)化并行算法。要找到這種數據,必須弄清應用的數據流模型,或者說(shuō)“數據存取模式”。
對于大多數多媒體應用,可以將數據存取模式看成是2D(空間域)和3D(時(shí)間域)操作模式。在2D模式中,獨立的數據塊被限制在單個(gè)數據幀內,而在3D模式中,獨立數據塊可以橫跨多幀。在空間域中,可以將幀劃分為由N個(gè)連續行和視頻幀宏塊組成的片段,而在時(shí)間域中,可以對數據流進(jìn)一步細分到幀級或圖片組(GOP)級。
采用片段或宏塊數據存取模式的算法對同步性要求較高,但網(wǎng)絡(luò )傳輸量較少,這是因為分級存儲器體系只需存儲圖像數據的一部分。對于幀或圖片組類(lèi)型的數據存取模式,分級存儲器體系則需要存儲大量數據,但對同步性的要求則相對低得多,這是因為系統的并行粒度更大。圖1說(shuō)明了多媒體應用軟件中的并行級別,同時(shí)顯示了四個(gè)級別的相對同步要求和網(wǎng)絡(luò )通信量。
多核結構分析
圖2顯示了ADSP-BF561的結構,它包括獨立的指令和數據存儲器,分別屬于兩個(gè)處理器核專(zhuān)有,此外還包括共享的L2存儲器和外部存儲器。用戶(hù)可以利用可配置的仲裁方案將所有外圍設備和DMA資源連接到任一處理器核。該處理器有兩個(gè)DMA控制器,每個(gè)DMA控制器由兩組MDMA(存儲器DMA)通道組成。L2存儲器與每個(gè)處理器核之間通過(guò)獨立的總線(xiàn)連接,外部存儲器與兩個(gè)處理器核之間則由一條共享總線(xiàn)連接。

圖2 ADSP-BF561的結構包括獨立的指令和數據存儲器,分別屬于兩個(gè)處理器核專(zhuān)有,此外還包括共享的L2存儲器和外部存儲器。
所有框架都利用DMA方式將數據流送入分級存儲器體系。另一種選擇是高速緩存,它不管理任何數據。如果清楚目標應用的數據存取模式,就可以利用DMA引擎對數據進(jìn)行有效的管理。而使用高速緩存需要忍受不確定的訪(fǎng)問(wèn)時(shí)間、高速緩存未命中的代價(jià),以及需要較高的外部存儲器帶寬。利用DMA引擎,可以在處理器核請求數據之前就將數據送入L1存儲器,系統在后臺執行傳輸操作,而不會(huì )因為數據項請求使處理器核暫停工作。
由于每個(gè)DMA控制器上都有兩組MDMA通道,因此系統可以將MDMA通道在處理器核上均勻分配,從而可以對稱(chēng)地進(jìn)行并行處理。
對于數據存取模式粒度較小的應用,可以輕松地利用對L1和L2存儲器的快速訪(fǎng)問(wèn)。也可以直接將獨立的數據塊從外設接口傳送到L1或L2存儲器,而不需要訪(fǎng)問(wèn)慢速的外部存儲器,這樣可以節省寶貴的外存儲器帶寬和MDMA資源,并縮短數據傳輸時(shí)間。
對于數據存取模式粒度較大的應用,存儲器可能成為瓶頸,因為較小的L1和L2存儲器級不足以容納大量的數據幀。然而,大量數據幀之間雖然存在數據關(guān)聯(lián)性,但這種關(guān)聯(lián)通常也僅存在于跨數據幀的較小數據塊上。如果能將所有關(guān)聯(lián)的數據幀存放在一個(gè)較大的存儲空間(外部存儲器)中,就可以將每一幀中的獨立數據塊相繼送入空閑的處理器核進(jìn)行處理。如果這些獨立的數據塊比數據幀小得多,符合L1或L2存儲器的容量,就可以減少存儲器存取延遲,高效地處理數據。
雖然L2和外部存儲器都有獨立的總線(xiàn)連接,但兩個(gè)處理器核仍共享這些存儲器接口總線(xiàn)。因此,應當盡量避免兩個(gè)處理器核同時(shí)對同一級別的存儲器進(jìn)行存取操作,以免因總線(xiàn)沖突而停止工作。為了減少總線(xiàn)沖突狀況,框架應考慮代碼和數據對象的映射,讓一個(gè)處理器核主要訪(fǎng)問(wèn)L2存儲器核,而另一處理器核則主要訪(fǎng)問(wèn)外部存儲器。在這種情況下,雖然處理器核完成多數外部存儲器訪(fǎng)問(wèn)會(huì )出現較大的訪(fǎng)問(wèn)延遲,但總的訪(fǎng)問(wèn)延遲仍然小于總線(xiàn)沖突的代價(jià)。
框架把所有輸入外設接口分配給一個(gè)處理器核,把所有輸出外設接口分配給另一處理器核??蚣芾靡曨l輸入/輸出接口,例如PPI(并行外設接口)來(lái)輸入和輸出視頻幀。BF561架構有兩個(gè)PPI接口。
如果中斷處理時(shí)間比數據流的處理時(shí)間要短,則可將所有的外設接口分配給一個(gè)處理器核以便于編程,較短的中斷處理時(shí)間不會(huì )影響兩個(gè)處理器核的負荷平衡。
軟件框架的建議模型
基于數據存取模式的粒度,可以定義四種軟件框架:行處理(空間域)、宏塊處理(空間域)、幀處理(時(shí)間域)以及GOP處理(時(shí)間域)。如果某個(gè)應用程序的數據存取模式適于這四種模型中的任何一種,就可以采用相應的框架。如果一個(gè)數據流有兩種或更多的處理算法,還可以將多種框架結合起來(lái),實(shí)現非對稱(chēng)的并行處理。
在行處理模式中,關(guān)聯(lián)性只存在于行級,也就是說(shuō),只存在于相鄰像素之間。每行數據形成一個(gè)數據塊,各處理器核都可以獨立處理。
圖3顯示了行處理框架的數據流模型。處理器核A處理視頻輸入,處理器核B處理視頻輸出。核A和B之間的數據由獨立的MDMA通道組進(jìn)行管理。L1存儲器使用多個(gè)緩神器,可以避免處理器核與外設DMA訪(fǎng)問(wèn)總線(xiàn)的沖突。兩個(gè)處理器核之間每行數據的同步通過(guò)計數信號量實(shí)現。在這種框架中,采用單處理器核方式將數據直接存入L1存儲器也具有優(yōu)勢,可以節省外部存儲器帶寬和DMA資源。這種框架的應用實(shí)例包括色彩變換、直方圖均衡化、濾波和采樣。

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

圖4 在雙核宏塊數據訪(fǎng)問(wèn)模式中,L2存儲器具有多個(gè)片段緩沖器,獨立的MDMA通道將宏塊從每個(gè)處理器核的L2存儲器傳輸到L1存儲器。
在幀級處理模式中,外部存儲器存儲關(guān)聯(lián)幀。根據數據幀(宏塊或行)之間的關(guān)聯(lián)性粒度,系統將數據幀的子塊傳送到L1或L2存儲器。圖5顯示了幀級處理框架的數據流模型。在這種情況下,假定某個(gè)宏塊在多個(gè)幀之間存在關(guān)聯(lián),則系統將數據幀的宏塊傳送至L1存儲器。與其它框架類(lèi)似,該框架中處理器核A控制輸入視頻接口,處理器核B控制輸出接口,通過(guò)計數信號量實(shí)現兩個(gè)處理器核之間的同步。這種框架的應用實(shí)例包括運動(dòng)檢測算法。
圖5 在幀級處理流程中,外部的存儲器存儲獨立幀
在GOP級處理模式中,每個(gè)處理器核處理多個(gè)相繼的數據幀。幀級處理框架與GOP級處理框架之間的區別在于,前者是在幀內完成空間劃分,后者則通過(guò)時(shí)間劃分(幀序列)實(shí)現并行處理。對于GOP數據訪(fǎng)問(wèn)模式,關(guān)聯(lián)性存在于一組數據幀內部,兩組幀之間數據不存在關(guān)聯(lián)性。因此,處理器核可以獨立處理每一組幀。圖6顯示了這種框架的數據流。與幀級處理框架類(lèi)似,系統可以將幀數據塊傳送至處理器核的L1存儲器。為了有效利用外部存儲器的交錯存儲庫結構,系統在處理器核間均衡地分配存儲庫。ADSP-BF561的每一個(gè)外部存儲庫都支持多達四個(gè)內部SDRAM存儲庫。這種框架的應用實(shí)例包括MPEG-2/4等編碼/解碼算法。

圖6 在GOP級數據訪(fǎng)問(wèn)模式中,關(guān)聯(lián)性存在于一組數據幀內部,兩組幀之間數據不存在關(guān)聯(lián)性。
在實(shí)際應用中,系統可能使用多種算法處理數據流,而每種算法都可能用到不同的數據存取模式。這種情況下,可以針對特殊應用將幾種框架結合起來(lái)使用。為利用多核結構,可以采用流水線(xiàn)處理來(lái)實(shí)現并行操作,但這種并行操作是不對稱(chēng)的,因為不同處理器核上可能執行不同的計算。然而,系統可以分配一些其它的任務(wù)到處理器核的空閑指令上,在保持靈活性的同時(shí)達到處理器核的工作量平衡。圖7顯示了行級處理和宏塊處理相結合的框架的數據流模型。

圖7 行級處理和宏塊處理相結合的框架的數據流模型
軟件框架分析
為了對雙核處理的軟件框架進(jìn)行評估,ADI公司利用數據流模型率先開(kāi)發(fā)了一款單核應用軟件,然后與雙核方案進(jìn)行對比。Blackfin獨有的系統優(yōu)化技術(shù)也能有效地利用可用帶寬。為了簡(jiǎn)化分析,ADI公司只比較了基本框架的處理速度,而沒(méi)有考慮幾種架構的組合。
所謂周期,是指為了滿(mǎn)足NTSC(美國國家電視系統委員會(huì ))視頻輸入的實(shí)時(shí)約束條件而用于處理數據流的處理器核計算周期。對于一個(gè)以600MHz速度運行的處理器核,為了滿(mǎn)足實(shí)時(shí)約束條件,處理每一像素可用的總周期數為44周期/像素。任何對數據流的處理器核訪(fǎng)問(wèn)都只需要一個(gè)單核周期,因為所有數據訪(fǎng)問(wèn)都是對L1存儲器的訪(fǎng)問(wèn)。所示的周期數不包括中斷延遲。
如表1所示,雙核框架將所有框架的處理速度有效提高了兩倍。表中還說(shuō)明了每個(gè)處理器核的L1存儲器使用量,以及各種框架需要的共享存儲器空間。這些框架使用ADI公司的DD/SSL(器件驅動(dòng)/系統服務(wù)庫)實(shí)現對外設和數據的管理。
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論