專利名稱:多處理器對象控制的制作方法
申請的優(yōu)先權來自臨時申請系列第60/199,753;60/199,755;60/199,917;和60/199,754號;全部在04/26/2000申報。
本發(fā)明涉及電子設備,尤其是涉及多處理器和數(shù)字信號處理器的分布對象及其方法。
因特網(wǎng)的增長聯(lián)同高速的網(wǎng)絡接入已經(jīng)推動著分布式計算成為主流。公用對象請求代理調(diào)度程序體系結(jié)構(CORBA)和分布元件對象模型(DCOM)標準已經(jīng)出現(xiàn)簡單化的面向?qū)ο缶W(wǎng)絡編程和分軟件方法。這樣一個客戶應用程序能訪問一個提供數(shù)據(jù)或功能的遠程服務器對象并因此簡化應用程序設計;圖24示例了普通的遠程程序訪問結(jié)構。實際上,面向?qū)ο蟮某绦蛟O計封裝詳細資料并因此僅給出用于詢問或允許這種分布計算的其它對象互作用的對象接口。
CORBA的核心是為對象間相互作用提供“總線”的對象請求代理(ORB),不論是本地還是遠程。一個CORBA對象是一套方法加一個接口。作為調(diào)用方法的處理,CORBA對象的客戶使用的參考對象好像對象是位于客戶的地址空間中。ORB負責發(fā)現(xiàn)一個對象的實現(xiàn)(在一個可能的遠程服務器上),對這個對象從一個客戶應用程序接收一個調(diào)用請求進行準備,從客戶輸送請求(例如,參數(shù))到對象,并從對象把一些答復返回到客戶。通過一個ORB接口或一個對象適配器,對象的實現(xiàn)對ORB有影響。圖25顯示了整個CORBA的結(jié)構。
通常在面向?qū)ο蟪绦蛟O計中,當對詳細資料(數(shù)據(jù),實現(xiàn))進行隱匿時,一個語言定義(IDL)的接口定義了一個包括由客戶調(diào)用的方法的對象接口。典型的,IDL提供數(shù)據(jù)封裝,多形性,和繼承性。如圖24所示,客戶調(diào)用一個對象的功能首先是產(chǎn)生一個到客戶存根(代理)的訪問;存根把訪問參數(shù)整理成一條信息;電線協(xié)議把信息發(fā)送到服務器存根(框架);服務器存根不對信息的訪問參數(shù)進行整理并訪問對象的功能。在圖25的頂層是基本的程序設計體系結(jié)構,中層是遠程體系結(jié)構,和底層是電線協(xié)議體系結(jié)構??蛻艟幊毯头掌鲗ο缶幊痰拈_發(fā)者同基本程序設計體系結(jié)構一起工作,在客戶和服務器的進程中參考對象和處理有意義的事情。電線協(xié)議有效的把遠程體系結(jié)構擴展到各種硬件設備中。
如Cheung等人所描述的,DCOM和CORBA并排的,步進的,和多層的,使用一個帶有允許CORBA客戶和服務器的遠程對象的一個簡單應用程序能產(chǎn)生五個文件(1)一個用于定義對象接口的IDL文件。IDL編譯器將生成客戶存根和對象骨架代碼加上一個由客戶和服務器使用的首標文件接口。(2)一個實現(xiàn)首標文件導出來自接口對象的服務器實現(xiàn)類別。實質(zhì)上,實現(xiàn)類別與由IDL編譯器產(chǎn)生的接口類別相關(通過繼承性)。(3)一個服務器類別的實現(xiàn)方法。(4)一個用于服務器的主程序;這個程序?qū)⑹纠粋€服務器類別的例子(對象)。和(5)通過訪問客戶存根調(diào)用對象方法的客戶應用程序。
對于靜態(tài)對象的調(diào)用,在編譯之后,僅在執(zhí)行之前,CORBA登記在實現(xiàn)儲存庫中的可執(zhí)行服務器的接口名和路徑名之間的關聯(lián)(看圖25)。對于動態(tài)對象的調(diào)用,IDL編譯器也產(chǎn)生在一個接口中每種方法的類型信息并通過動態(tài)調(diào)用接口調(diào)用在動態(tài)對象上的一種方法。同樣,在服務器這邊,動態(tài)框架接口允許一個客戶調(diào)用在一個對象上的操作,該對象不具有正在實現(xiàn)的對象的編譯時的類型知識。
圖26a顯示了CORBA頂層的一個對象的客戶請求活動以及調(diào)用它的方法,服務器產(chǎn)生一個對象的例子以及它對于客戶的可用性。尤其是,對象接著活動(1)客戶訪問用于對象接口的客戶的靜態(tài)功能。(2)ORB啟動包含一個支持對象接口對象的服務器。(3)服務器對一個對象示例編程并登記參考對象。(4)ORB把參考對象返回到客戶應用程序。然后為了[1],[2]的對象調(diào)用方法,客戶訪問最后調(diào)用服務器中方法的對象接口的方法。如果方法返回值,則服務器發(fā)送這些值回到客戶。
圖26b示例了CORBA與對象的中層(遠程體系結(jié)構)活動(1)依據(jù)接收的訪問,客戶存根把任務委派到ORB。(2)ORB咨詢實現(xiàn)儲存庫把調(diào)用映象到它的服務器路徑名,并激活服務器編程。(3)服務器示例對象并且還產(chǎn)生得到的參考對象的唯一參考ID。它向ORB登記參考對象。(4)用于服務器類別的構造符也產(chǎn)生一個框架類別的例子。(5)ORB把對象參考航向發(fā)送到客戶和也產(chǎn)生一個客戶存根類別的示例并把它登記在與參考對象相應的客戶存根對象表中。(6)客戶存根返回一個參考對象到客戶。隨后客戶調(diào)用對象的方法進行,通過[1]依據(jù)收到的客戶對客戶存根的訪問,產(chǎn)生一個請求偽對象,整理訪問的參數(shù)進到偽對象,請求在通道中把偽對象翻譯成一條信息送到服務器,并等待應答。[2]當信息到達服務器時,ORB發(fā)現(xiàn)目標框架,重構請求偽對象,并把它轉(zhuǎn)發(fā)到框架。[3]框架不整理來自請求偽對象的參數(shù),調(diào)用服務器對象的方法,整理返回值(如果有的話),并返回來自框架的方法。ORB建立一個應答信息并把它放在發(fā)送緩沖器中。[4]當應答到達客戶邊時,在從接收緩沖器中讀出了應答信息后,ORB訪問返回。隨后客戶存根不對返回值進行整理并把它們返回到客戶以便完成訪問。
如圖26c示例了底層的對象活動包括(1)依據(jù)收到的請求,客戶邊的ORB選擇一個支持對象的機器并經(jīng)過TCP/IP發(fā)送一個請求到服務器邊的ORB。(2)當服務器被服務器邊的ORB啟動時,一個對象被服務器所示例,ORB構造符被調(diào)用,并且生成函數(shù)被調(diào)用。在生成函數(shù)內(nèi)部生成一個插口端點,對象被分配一個對象身份,生成一個包含接口和實現(xiàn)名,參考身份,和端點地址的參考對象。參考對象向ORB登記。(3)當參考對象被返回到客戶邊,客戶存根抽取端點地址和建立一個到服務器的插口連接。然后調(diào)用方法如下進行[1]依據(jù)收到的調(diào)用,客戶存根整理公用數(shù)據(jù)表示(CDR)格式中的參數(shù)。[2]請求通過建立的插口連接被發(fā)送到目標服務器。[3]目標框架通過參考身份或借口示例識別符被識別。和[4]在對服務器對象的實際方法進行調(diào)用之后,框架整理CDR格式中的返回值。
CORBA的實時擴充典型的提供服務(QoS)方面的質(zhì)量,比如可預測的性能,安全操作,和資源配置。例如,Gill等人,為下一代分布式應用程序,應用自適應中間設備管理端到端的QoS。
已經(jīng)介紹了作為元類型的CORBA元件,并且對于描述的實現(xiàn)過程,可以得到相關的實現(xiàn)定義語言的元件。圖27示例了編程步驟。
DCOM同樣具有三層并且與CORBA的體系結(jié)構有點相似。
Notenboom USP 5,748,468和Equator Technologies PCT發(fā)表的申請WO99/12097都描述了給處理器的資源分配多任務的方法。Notenboom按照早先的系統(tǒng)考慮,用一個主處理器加上帶有分配任務的協(xié)處理器資源的協(xié)處理器。Equator Technologies按照任務時間消耗調(diào)度處理器資源,由于存在于至少一個被支持的服務級(處理器資源消耗率)上,并且如果存在足夠的資源用于一個被支持的服務級,資源管理器允許接受一個任務。
帶有兩個或更多處理器的系統(tǒng),每個處理器有它自己的造作系統(tǒng)或BIOS,包括有分開很遠的多個處理器的系統(tǒng),多個處理器經(jīng)因特網(wǎng)相連,還有兩個或多個處理器集成在相同的半導體電路小片上的系統(tǒng),比如一個RISC CPU加上一個或多個DSPs。
XDAIS標準規(guī)定了在DSPs上的接口算法;這提供了可再次使用的對象。XDAIS需要實現(xiàn)IALG接口標準的一種算法加上用于運行這種算法的一個擴充。XDAIS也需要依照某種靈活的規(guī)則,比如浮動代碼和命名約定。通過到一個函數(shù)指針表中訪問,一個客戶應用程序能夠管理一個算法的示例。有了XDAIS的標準/準則,算法開發(fā)者能夠開發(fā)或轉(zhuǎn)換算法以便把它容易地插到一個DSP應用程序框架中,比如iDSP媒體平臺DSP框架。
因為需要服務質(zhì)量,在一個網(wǎng)絡節(jié)點內(nèi)的管理程序明確地源自所有基于應用程序的流媒體的實時服務需求。流媒體應用程序必須處理多機種編譯碼器(編碼器/譯碼器)和帶有唯一翻譯最后期限的過濾器。對于在服務質(zhì)量中的故障弱化,這些應用程序也應該能夠開發(fā)和翻譯人感性的特征。他們應能夠合理地處理進程中和翻譯周期的抖動量。例如,,在視頻應用程序中,翻譯的幀率必須維持在30幀/sec(fps),即33ms翻譯一個幀周期。然而,應用程序應該能夠經(jīng)得起與服務器協(xié)商時有限的瞬時變化。而且,在30fps,人的視覺感官能經(jīng)受住大約6幀/sec的丟幀??蛻魬贸绦蜻€應能夠支撐住性能的故障弱化和在與服務器協(xié)商的特殊容許的范圍內(nèi)維持翻譯的穩(wěn)定狀態(tài)。一個QoS管理器是為實現(xiàn)這樣一種實時系統(tǒng)提供所需的功能和能力的機制。
作為寬帶通信,比如DSL和電纜調(diào)制解調(diào)器融入新的市場,并且把空前的數(shù)據(jù)容量傳送到用于數(shù)據(jù)處理和消費的消費者設備上,將需要保持更有效的數(shù)據(jù)處理,路由安排,和處理技術。
圖20顯示了通過當前多機種系統(tǒng)處理部件的數(shù)據(jù)信息流。每個數(shù)據(jù)處理被編號以顯示時間順序。每個數(shù)據(jù)處理必須經(jīng)過由中心控制處理器(CCP)控制下的系統(tǒng)總線。經(jīng)過系統(tǒng)中的控制路徑到各個處理部件,CCP通過發(fā)送信息或觸發(fā)來初始數(shù)據(jù)處理。
圖20中的處理部件顯示了分離的能夠運行一組定義的任務的處理器(例如,DSPs,ASICs,GPPs,等等)。這就是為什磨每個處理器帶有自己的存儲器。在同一處理器上的處理部件也能單獨運行任務。
在一些情況下,相同的數(shù)據(jù)必須多次經(jīng)過系統(tǒng)總線(例如,1和2,3和4,5和6)。在這樣的系統(tǒng)中,數(shù)據(jù)必須經(jīng)過系統(tǒng)總線的次數(shù)總共為2+(2×n),或者在這種情況下是6次。每次經(jīng)過系統(tǒng)總線要由CCP介紹附加數(shù)據(jù)流的介入,降低了整個系統(tǒng)的吞吐量。
附加數(shù)據(jù)流對給定的時間幀中通過系統(tǒng)的數(shù)據(jù)量起到負面影響并因此限制了系統(tǒng)所能夠處理的數(shù)據(jù)量。這樣一個系統(tǒng)很可能執(zhí)行的有用的任務比它全部的部件所顯示出的能力要少。
本發(fā)明提供一種帶有一個或多個特征的客戶-服務器系統(tǒng),包括兩個階段服務器的任務調(diào)度,一個用于客戶-服務器系統(tǒng)的對象請求代理,該客戶-服務器系統(tǒng)帶有服務器DSPs上的任務鏈接,多任務處理器的內(nèi)存通過把內(nèi)存劃分成處理器的總開銷加一個任務工作空間進行管理,該任務工作空間屬于每次一個單獨執(zhí)行的任務,多種機系統(tǒng)包括一個中心控制處理器加總線。連接的處理部件加一個用于處理部件的共享存儲器,避免了多種機系統(tǒng)中的數(shù)據(jù)流經(jīng)過中心控制處理器的總線。
為了清楚附圖是啟發(fā)式的。
圖1顯示DSPORB結(jié)構的優(yōu)選實施例。
圖2示例了IDL編譯。
圖3-13是QoS隨時間的圖。
圖14-19顯示分解存儲器的優(yōu)選實施例。
圖20顯示在一個多種機系統(tǒng)中的已知數(shù)據(jù)流。
圖21-23顯示數(shù)據(jù)流的優(yōu)選實施例。
圖24-27示例了CORBA。
描述實施例優(yōu)選實施例的系統(tǒng)典型的具有一個運行客戶應用程序的主處理器加一個或多個運行服務器算法的服務器處理器,以及包括用于算法對象的對象請求代理,用于對象請求代理的服務質(zhì)量控制,用于算法對象的內(nèi)存分頁,和用于算法對象的數(shù)據(jù)流。一個稱為iDSPOrb的優(yōu)選實施例應用到帶有一個主處理器和一個或多個DSP協(xié)處理器的系統(tǒng)上。
iDSPOrb是一個高性能的DSP對象請求代理(DSPORB),它支持在多處理器環(huán)境中從一個通用處理器(GPP)或DSP到DSP對象的創(chuàng)建和訪問。iDSPOrb具有一個普通的體系結(jié)構和類似于CORBA的操作。iDSPOrb具有下列DSPORB的特征(1)iDSPOrb支持對象匯集和調(diào)用(DSP對象調(diào)用程序)穿過處理器邊界。
(2)iDSPOrb在GPP邊提供一個由用于靜態(tài)調(diào)用的編譯期首標及存根和一個運行期動態(tài)調(diào)用接口組成的代理接口。
(3)iDSPOrb為DSP邊提供一個用于建立一個iDSP服務器的算法接口(存根和首標)。
(4)iDSPOrb提供調(diào)用的同步和異步。
(5)iDSPOrb提供保證實時的QoS。
(6)iDSPOrb提供基幀和基流的處理。
(7)iDSPOrb提供鏈接數(shù)據(jù)流對象(中間結(jié)果停留在DSP存儲器中)。
(8)iDSPOrb在一個高帶寬多通道GPP/DSP的I/O接口上實現(xiàn)。
圖1顯示了一個雙處理器配置的iDSPOrb的體系結(jié)構,其中GPP擔當“客戶”,DSP作為“服務器”。
因而,在iDSP系統(tǒng)中的服務質(zhì)量(QoS)管理器,被認為是iDSP-QoSM,是一個提供協(xié)商的服務級到客戶應用程序的機制(在一個服務器內(nèi))。它提供一個帶有預定的降級策略的有保證的服務質(zhì)量與客戶通信。iDSP-QoSM具有下列特性(1)它被定義在網(wǎng)絡上一個被限定的節(jié)點范圍內(nèi)(內(nèi)節(jié)點的)。它假定存在一個合適的QoS管理器控制內(nèi)部節(jié)點(網(wǎng)絡)的通信。(2)它被定義用于具有負荷共享能力的多處理器環(huán)境。
由優(yōu)選實施例的iDSP-QoSM執(zhí)行功能包括(1)監(jiān)視系統(tǒng)中在服務器上處理負載的穩(wěn)定狀態(tài)。(2)從過載的服務器分配負載到它同級的服務器上。(3)用客戶應用程序協(xié)商服務需求,登記一些附加的負載到服務器上。(4)基于通過服務程序正在服務的各個對象的特殊特性,預測未來服務器上的負載。(5)基于處理器循環(huán)的時間而不是處理的時間,預測算法所運行的時間這種預測算法運行時間的方法不依靠處理器的工作頻率。
在Texas Instruments中,TMS320C62XX DSPs有一個限定了數(shù)量的內(nèi)部(芯片內(nèi))數(shù)據(jù)存儲器。除TMS320C6211外(和它的變型),TMS320C62XXDSPs不具有外部存儲器(遠離芯片)進行有效存取的數(shù)據(jù)高速緩沖存儲器。內(nèi)存位于一個TMS320C62XX DSP的數(shù)據(jù)存儲器分級體系的最高級。因此所有運行在一個TMS320C62XX DSP上的算法需要使用內(nèi)存用于它們的數(shù)據(jù)工作空間,因為這是存取數(shù)據(jù)存儲器的最高級的效率。
典型的,被開發(fā)的DSPs算法假定它們擁有全部DSP處理器,因此擁有所有的DSP內(nèi)存。這樣就集成了幾種不同的算法,它們是相同的(同族的)或不同的(異類的),集成起來非常困難。對于算法開發(fā)者需要一套規(guī)則用一種公用的方法存取和使用系統(tǒng)的資源,比如像內(nèi)存。
優(yōu)選實施例提供了一種提高處理器利用率的方法,當在缺少數(shù)據(jù)高速緩沖存儲器的DSPs上運行多算法時,可以通過對DSP內(nèi)存使用一種數(shù)據(jù)內(nèi)存分頁的體系結(jié)構。用Texas Instruments XDAIS的標準,依照數(shù)據(jù)內(nèi)存分頁的體系結(jié)構能完成對DSP算法的開發(fā)或轉(zhuǎn)換。這個標準要求算法開發(fā)者規(guī)定至少一個或多個支持用于算法的所有存儲器的存儲區(qū)。在這些用戶規(guī)定區(qū)域中,一個或全部由算法開發(fā)者選擇用來在一個TMS320C62X DSP的內(nèi)存中運行。在DSP系統(tǒng)內(nèi)應用內(nèi)存的軟件部分被分成系統(tǒng)支援和一個數(shù)據(jù)工作區(qū)(頁面)。在執(zhí)行時間,DSP內(nèi)所有的算法應用共享的工作區(qū)和自己全部的工作區(qū)。對于在兩種算法間的上下文交換,DSP系統(tǒng)軟件將分別處理每個算法的工作區(qū)和影象存儲器之間的傳送。優(yōu)選實施例提供(1)在兩個或多個DSP算法之間共享缺少了數(shù)據(jù)高速緩沖存儲器的DSP中的內(nèi)部數(shù)據(jù)存儲器,提高處理器的利用率。
(2)從相同的共享內(nèi)存中運行多種算法,當存取數(shù)據(jù)存儲器以支援所需的堆棧和算法內(nèi)部的變量時,在TMS320C62X DSP環(huán)境中允許每種算法享受最大的效率。
(3)這種體系結(jié)構運行于一些帶有內(nèi)存的單一處理器和一種必須訪問處理器內(nèi)存的DMA實用程序。
(4)僅在數(shù)據(jù)輸入幀邊界執(zhí)行上下文交換,提供最有效的數(shù)據(jù)內(nèi)存分頁結(jié)構。
支持只讀算法數(shù)據(jù)的異步分頁傳輸。
一個應用程序中的數(shù)據(jù)流可以從算法到算法,并且為了每種算法的執(zhí)行,優(yōu)選實施例提供把數(shù)據(jù)保留在一個或多個DSPs中而不是轉(zhuǎn)移到一個GPP。
1.在雙處理器配置中的DSP ORB圖1顯示了雙處理器配置的一個優(yōu)選實施例的ORB體系結(jié)構,包括一個通用處理器(GPP)和一個數(shù)字信號處理器(DSP),其中GPP被當作“客戶”,DSP作為“服務器”。注意iDSPOrb包括一個服務質(zhì)量(QoS)管理器。圖1顯示了一個客戶應用程序調(diào)用了兩種DSP算法對象“A”和“B”。iDSPOrb首先提供GPP上代理對象“a”和“b”的對象匯集。例如,“A”和“B”能是DSPIDL接口的擴充,用如下的一個譯碼器(DEC)<pre listing-type="program-listing"><![CDATA[module DEC{interface IDecoder{…int process([in]BUFFER input,[out]BUFFER output);…}interface AIDecoder{}interface BIDecoder{}}]]></pre>使用由DSPIDL編譯器提供的算法接口建立一個DSP邊的應用程序(稱做iDSP服務器)DEC_A_Handle DEC_A_create(IALG_params*p);Int DEC_A_decode(BUF_Handle in,BUF_Handle out)使用也是由DSPIDL編譯器提供的代理接口建立一個GPP邊的應用程序DEC_A*DEC_A_create(DSPORB_Params*p);int DEC_A_decode(DSPORB_Buffer*in,DSPORB_Buffer*out);或者使用iDSPOrb動態(tài)調(diào)用接口。在運行時,從GPP邊的客戶應用程序到處理一個緩沖器“a”能被調(diào)用。這種數(shù)據(jù)經(jīng)過了DSP邊的實際對象“A”。使用對象鏈接數(shù)據(jù)流,輸出的“A”能被連接到輸入的“B”,以便緩沖器的中間數(shù)據(jù)不用傳送回到GPP?!癰”調(diào)用“B”導致在另一處理階段中把數(shù)據(jù)返回到GPP。iDSPOrb的動態(tài)調(diào)用接口支持調(diào)用的同步和異步。
在一個GPP和一個單一的DSP之間,iDSPOrb不必被劃分。它也能運行在帶有多個DSPs的配置中。在這種情況下,QoS管理器(服務器邊)在現(xiàn)有的DSPs中執(zhí)行DSP算法的負載均衡。其他的配置能由一個ASIC(作為固定函數(shù)的DSP)組成,或者由ASIC加RISC組成,其中算法接口被提供到客戶應用程序。2a.DSPIDL編譯器iDSPOrb支持DSPIDL,一種IDL(接口定義語言)具有如下關鍵字模塊一個接口規(guī)格的集合。
例如,H263模塊能包含譯碼器和編碼器接口。
interface一個接口規(guī)格。
in指示一個輸入變元out指示一個輸出變元BUFFER指示一個緩沖器類型STREAM指示一個流類型RESULT指示一個函數(shù)的返回類型其他的用于存儲器的利用,實時一個DSPIDL文件的一般形式是<pre listing-type="program-listing"><![CDATA[module modulename{ interface algorithm_1[alg1,alg2,…]{ algorithm_1(PARAMS)//constructor method_1 method_2 method_3 … } … }]]></pre>其中method是
RESULT function([direction]TYPE,…)和direction是in,out,或[in,out]以及TYPE是BUFFER或STREAM。例如,一個H263 IDL可以產(chǎn)生算法和代理接口,如圖2所示。
2b.幀和流的處理幀相對于流的處理有以下區(qū)別。
關鍵字BUFFER緩沖器函數(shù)作為變元類型通過幀基處理一個幀。
STREAM流函數(shù)作為變元類型處理幀的一個流,典型的通過分散一個任務。
函數(shù)調(diào)用DSPORB_Buffer_connect(DSPORB_Buffe*out,DSPORB_Buffe*in)和DSPORB_Stream_connect(DSPORB_Stream*out,DSPORB_Stream*in)提供連接對象的輸出到輸入(幀或流分別的)。對于緩沖器,連接操作符將引起DSPORB在DSP上生成一個存儲緩沖器,其中為了另一方法調(diào)用(對象鏈接)的輸入,一個方法調(diào)用的輸出被存儲。例如DSPORB_Buffe_connect(yuvframe_out,yuvframe_in);H263_TIDEC_decode(h263frame_in,yuvframe_out);YUV_TI_toRGB(yuvframe_in,rgbframe_out);對于流處理,一個代理調(diào)用像這樣H263_TIDEC_decodeStream(in_stream,out_stream);將典型的導致在DSP邊生成一個任務,處理兩個流SIO流(H263_TIDEC_decodeStream的實現(xiàn)將分散一個任務)。沒有連接的流在客戶代理和服務器之間提供I/O。2c.實時QoS管理器通過DSPORB_System_setTimeConstraint和DSPORB_System_setPriority()接口,在一設置的時間約束內(nèi),iDSPOrb能通過對一給定的操作執(zhí)行分配所需的資源而提供硬實時QoS。GPP/DSP通道的I/O驅(qū)動程序允許多線平行操作。
QoS管理器是DSP邊iDSPOrb的一部分(1)例示客戶需要的算法,(2)更新客戶應用程序的約束和管理資源以滿足約束(或者返回報告約束不能滿足),和(3)更多。
2d.iDSPOrb登記服務iDSPOrb提供一種類別登記服務以便服務器對象能登記它們的服務。例如,一個服務器能用iDSPOrb登記譯碼MP3音頻。通過所提供的期望服務的名稱,客戶對象例示服務器對象。iDSPOrb登記服務能用于任何類型的DSP對象服務,但它應是通過標準標記設置的用于音頻和視頻服務的已知的媒體范圍音頻服務視頻服務MP3 Audio Decode MPEG 1 Video DecodeMP3 Audio Decode MPEG 1 Video EecodeMPEG1 L2 Audio Decode MPEG2 Video DecodeMPEG1 L2 Aideo Eecode MPEG2 Video EecodeG.723 Decode MPEG4 Video DecodeG.723 Encode MPEG4 Video EecodeG.729 Decode H.263 DecodeG.729 Encode H.263 Encode在運行時間,iDSPOrb登記服務允許iDSPOrb動態(tài)的例示服務對象。當例示一個服務對象時,iDSPOrb動態(tài)地給微處理器和DSP之間分配低級I/O通道??蛻魧ο蠼?jīng)過iDSPOrb流接口能直接訪問這些低級通道(看DSPORB_Stream Interface)。iDSPOrb登記服務也提供信息,讓iDSPOrb指定一個DSP提供一種特別的服務,并讓QoS管理器作負載均衡和調(diào)度計劃(看實時QoS管理器)。例如,使用動態(tài)調(diào)用模塊,調(diào)用DSPORB_ALG_create(“MP3Audio Decode”,NULL)將例示一個MP3音頻譯碼的例子。iDSPOrb均衡了系統(tǒng)的負載并且客戶的DSP實際正在執(zhí)行譯碼的細節(jié)被遮蓋,且分配低級流通過數(shù)據(jù)。通過詢問iDSPOrb,一個客戶還能列舉當前已登記的服務類別的清單。函數(shù)DSPORB_Alg*DSPORB_System_getServices()能用于獲得一個當前登記的服務計數(shù)器。然后字符*DSPORB_System_next(DSPORB_Alg*enum)能被調(diào)用以得到每個已登記服務的名稱。通過調(diào)用DSPORB_System_reset(DSPORB_Handle*enum)列舉能被復位開始。
2e.媒體框架支持通過為特別的媒體框架提供元件,iDSPOrb能用于支援媒體的加速處理,比如DirectShow(窗口媒體)濾波器對象能實現(xiàn)纏繞iDSPOrb客戶對象編譯碼器并插入DirectShow框架。
RealMedia體系結(jié)構(RealSystem G2)移交插入能實現(xiàn)纏繞iDSPOrb客戶對象編譯碼器并插入RealSystem G2框架。
使用相同方法DSPOrb也能插入JMF和QuickTime。
iDSPOrb的API被封裝進DSPORB模塊中??蛻?GPP)邊DSPORB的數(shù)據(jù)類型和函數(shù)具體如下。
2f.數(shù)據(jù)類型DSPORB_Alg一個用于DSP算法對象的客戶代理。
DSPORB_Fxn一個函數(shù)對象用于動態(tài)調(diào)用。
DSPORB_Arg 一個函數(shù)變元用于動態(tài)調(diào)用。
DSPORB_Buffer and DSPORB_Stream are’subclasses’ofDSPORB_ArgDSPORB_Params為一個算法提供參數(shù)匹配在DSP邊IALG_Params的算法參數(shù)結(jié)構。
DSPORB_Buffer一個緩沖器對象。
DSPORB_Stream一個流對象。
2g.DSPORB_Buffer接口-DSPORB_Buffer*DSPORB_Buffer_create(int size,int direction);生成一個能夠參考數(shù)據(jù)長度size、direction的緩沖器對象,它是DSPBUFFER_INPUT或DSPBUFFER_OUTPUT的其中之一。緩沖器方向必須匹配函數(shù)調(diào)用標記否則將出現(xiàn)iDSPOrb運行時間誤差??纱娴?,DSPORB_Buffer*DSPORB_Buffer_create(DSP ORB_Alg*,int,int);緩沖器被一個對象利用。
-unsigned char*DSPORB_Buffer_getData();由緩沖器對象得到參考數(shù)據(jù)。如果這個緩沖器被連接到另一個緩沖器,則NULL返回。
-Void DSPORB_Buffer_setData(unsigned char*data)
設置緩沖器數(shù)據(jù)指針。如果這個緩沖器被連接到另一個緩沖器,則操作失敗,因為用于緩沖器數(shù)據(jù)的存儲空間是在DSP存儲空間中。
-void DSPORB_Buffer_setSize(int)設置實際數(shù)據(jù)的大小。
-int DSPORB_Buffer_getSize()得到實際數(shù)據(jù)的大小。
-void DSPORB_Buffer_delete(DSPORB_Buffer*buffer)-int DSPORB_Buffer_connect(DSPORB_Buffer*output,DSPORB_Buffer*input)在DSP上連接一個輸入緩沖器到一個輸出緩沖器。當這些緩沖器對象被連接時,數(shù)據(jù)保持在DSP上并且不傳回到GPP(一個緩沖器由DSP上的iDSPOrb生成以保持中間結(jié)果)。
2h.DSPORB_Stream接口流接口具有下列方法。
-DSPORB_Stream*DSPORB_Stream_create(int n,int direction);生成一個流能保持n個緩沖器。direction是DSPSTREAM_INPUT或DSPSTREAM_OUTPUT中的其中之一。
-int DSPORB_Stream_Issue(DSPORB_Buffer*buf);有一個輸入緩沖器buf發(fā)送一輸入流,或者一個放在隊列上的空緩沖器被填入一輸出流。對于被連接的流,這種操作沒有作用,因為流被直接連接在算法之間。
-DSPORB_Buffer*DSPORB_Stream_reclaim();從一輸出流得到一個輸出緩沖器;或者一個輸入緩沖器,能在一輸入流上被再發(fā)送。對于被連接的流,這種操作沒有作用。
-DSPORB_Stream_select(DSPORB_Stream array int n_stream,int*mask,long millis);阻塞直到一個流準備I/O。
-DSPORB_Stream_idle(DSPORB_Stream*str);空閑一個流。
-DSPORB_Stream_close(DSPORB_Stream*str);關閉一個流。
-DSPORB_Stream_connect(DSPORB_Stream*out,DSPORB_Stream*in);連接一輸出流到一輸入流。兩個流在DSP處理器空間平分現(xiàn)在的操作并且不訪問GPP。
2i.DSPORB動態(tài)調(diào)用接口動態(tài)調(diào)用接口具有下列方法。
-int DSPORB_System_init();必須首先調(diào)用起始DSPOrb。-DSPORB_Alg*DSPORB_Alg_create(const char*name,DSPORB_Params*params);通過符號'名稱生成參考算法的一個示例。
-void DSPORB_Alg_delete(DSPORB_Handle alg);刪除算法示例。
-DSPORB_Fxn*DSPORB_Alg_getFxn(DSPORB_Alg*alg,constchar*fxn_name);返回與符號‘fxn_name’有關的函數(shù)對象。
-DSPORB_Fxn_setTimeConstraint(DSPORB_Fxn*fxn);設置執(zhí)行fxn的時間界限。DSPOrb將分配足夠的資源以滿足這個約束,否則返回0。
-int DSPORB_Fxn_setPriority(DSPORB_Fxn*fxn);設置優(yōu)先級從1到15。
-int DSPORB_Fxn_invoke(DSPORB_Fxn*fxn,DSPORB_Arg*args);調(diào)用輸入和輸出的一個函數(shù)。直到獲得所有未連接的輸出的數(shù)據(jù)這種調(diào)用才阻塞。對于用′DSPORB_Buffer_connect′而使輸入和輸出被連接,′NULL′能通過。
-int DSPORB_Fxn_invokeAsync(DSPORB_Fxn*fxn,DSPORB_Arg*args);-調(diào)用輸入輸出的一個函數(shù)。這個調(diào)用立即返回;使用′DSPORB_getData′應用程序從輸出變元對象檢索數(shù)據(jù)。
-unsigned char*DSPORB_Arg_getData(DSPORB_Arg*utput,longtimeout);從一輸出變元對象上得到數(shù)據(jù)。直到超時出現(xiàn)納秒時才阻塞;否則如果′超時=-1′則是無限的。
-空白DSPORB_Arg_setCallback(DSPORB_Arg*output,unsigned char*(*getData)(DSPORB_Arg*));在一輸出變元上設置調(diào)回函數(shù);當數(shù)據(jù)獲得時,得到數(shù)據(jù)被調(diào)用。
-void DSPORB_System_close()關閉DSPOrb。
2j.iDSPOrb的一個例子第一個例子顯示通過使用動態(tài)調(diào)用接口,如何使用iDSPOrb連接到C6×××上的TIH.263譯碼器。第二個例子顯示帶有代理存根所寫的相同的程序。
<pre listing-type="program-listing"><![CDATA[/**testH263-dii.opp Program to test DSPOrb**Read a raw H.263 file,parse,decode frames using DSPOrb,and*write out YUV file.**UsagetestH263 in_file out_file*/#include#include#include"dsporb.h"#include"h263.h"const int MEMSIZE=4*176*144*3;*/enough for CIF*/static DSPORB_Alg*h263decoder;static DSPORB_Fxn*h263decoderFxn;static DSPORB-Buffer*h263inputArg;static DSPORB_Buffer*h263outputArg;static DSPORB_Arg h263decoderFxnArgs[2];int main(int argc,char**argv)/*frame is encoded H.263;buffer is YUV data*/unsigned char*frame=(unsigned char*)malloc(MEMSIZE);unsigned char*buffer=(unsigned char*)malloc(MEMSIZE);DSPORB_System_init();h263decoder=DSPORB_Alg_create("H263D_TIDEC",NULL);h263decoderFxn=DSPORB_Fxn_getFxn(h263decoder,"decode");h263inputArg=DSPORB_Buffer_Create();h263outputArg=DSPORB_Buffer_create();h263decoderFxnArgs
=(DSPORB_arg*)h263inputArg;h263decoderFxnArgs[1]=(DSPORB_arg*)h263outputArg;*/in is H.263 file;out is YUV file*/FILE*in=fopen(argv[1],"rb");FILE*out=fopen(argv[2],"wb");int_n_bytes_in-frame; H263_initReader(in); while((n_bytes_in_frame=H263_readFrame(frame,MEMSIZE))>0){DSPORB_Buffer_SetSize(h263inputArg,n_bytes_in_frame); DSPORB_Buffer_setData(h263inputArg,frame); DSPORB_Buffer_setSize(h263outputArg,MEMSIZE); DSPORB_Buffer_SetData(h263outputArg,buffer); DSPORB_Fxn_invoke(h263decoderFxn,h263decoderFxnArgs); ints=DSPORB_Buffer_getSize(h263outputArg)); printf("%d->%d\n',n_bytes_in_frame,s); if(s>0) fwrite((const void*)buffer,l,s,out); } fclose(in), fclose(out); DSPORB_System_close() } Now the stubs version /* *testH263-stubs.cpp Program to test DSPOrb * *Read a raw H.263 file,parse,decode frames using DSPOrb,and *write out YUV file. * *UsagetestH263 in_file out_file */ #include #include #include"dsporb.h"#include"h263.h"#include"H263-TIDEC.h"const int MEMSIZE=4*176*144*3;/*enough for CIF*/static H263 TIDEC*h263decoder;static DSPORB_Buffer*h263inputArg;static DSPORB-Buffer*h263outputArg;int main(int argc,char**argv)*/frame is encoded H.263;buffer is YUV data*/unsigned char*frame=(unsigned char*)malloc(MEMSIZE);unsigned char*buffer=(unsigned char*)malloc(MEMSIZE);DSPORB_init()h263decoder=H263_TIDEC_create(NULL);/*in is H.263 file;out is YUV file*/FILE*in=fopen(argv[1],"rb");FILE*out=fopen(argv[2],"wb");int n_bytes_in_frame;H263_initReader(in);while((n_bytes_in_frame=H263_readFrame(frame,DSPORB_Buffer_setSize(h263inputArg,n_bytes_in_frame);DSPORB_Buffer_setData(h263inputArg,frarme);DSPORB_Buffer_setSize(h263outputArg,MEMSIZE);DSPORB_Buffer_setData(h263outputArg,buffer);H263_TIDEC_decode(h263inputArg,h263outputArg);int s=DSPORB_Buffer_getSize(h263outputArg));printf("%d->%d\n",n_bytes_in-frame,s);if(s>0)fwrite((const void*)buffer,l,s,out);}fclose(in)fclose(out) DSPORB_close() }]]></pre>2.服務質(zhì)量(QoS)在優(yōu)選實施例的配置中,iDSPOrb的服務質(zhì)量管理器(iDSP-QoS)被定義由作為同級服務器的一個主處理器和一個數(shù)字信號處理器(DSPs)相組合而組成。一個傘形QoS-管理器為了維護一指定的服務質(zhì)量而執(zhí)行所有需要的功能,管理DSP服務器的組合。主處理器通常是一個通用處理器(GPP),它通過硬件接口連接到DSPs,比如像共享存儲器和總線類型的接口。QoS管理器可以是iDSPOrb的一部分,或者一般來說,是DSPs上的一個分離的管理器。系統(tǒng)被硬件和軟件中斷所驅(qū)動。優(yōu)選的實現(xiàn)方法是,基于負載共享,讓主要的用戶(客戶)應用程序在GPP上運行和特殊服務在DSPs上運行。QoS管理器同時運行,所有的處理器可以是一種框架,比如像iDSP媒體框架一樣。iDSP-QoS管理器執(zhí)行三個主要功能(1)對象的分類,(2)對象的調(diào)度,和(3)預測對象的執(zhí)行時間。
這些功能將在下面描述,在一個GPP/多DSP的環(huán)境中,使用一個媒體的具體例子。
3a.對象的分類在一媒體的具體環(huán)境中,對象翻譯到媒體的編譯碼器/濾波器(算法)。基于它們的流的類型,應用程序的類型或算法類型,媒體對象能被分類。依靠算法的類型,QoS管理器定義所說的編譯碼器-周期,濾波器-周期等等的規(guī)格。
3b.對象的調(diào)度(硬截止時間)iDSP-QoSM基于兩個階段的調(diào)度程序調(diào)度算法對象。第一階段是一種高級調(diào)度程序,確定是否一新的媒體流在DSP上是可調(diào)度的并為編譯碼器-周期設置硬實時截止時間。第二階段調(diào)度個別的媒體幀和利用第一階段的硬實時截止時間。第一階段運行于對象的協(xié)商時間上并且典型的是運行在主機上(GPP)。第二階段應運行在DSPs(服務器)上并且基于每幀運行。
第一調(diào)度階段是這樣一個時期,即QoS管理器平均確定是否對象能被已經(jīng)同時運行的對象所支持。作為第一階段部分的還需要有,依照存儲器為對象考慮足夠的支援。用于內(nèi)部使用,輸入和輸出的對象存儲緩沖器在它的示例移去了分配的不確定動態(tài)存儲的時候,必須是固定靜態(tài)的。iDSP平臺只運行符合XDAIS的算法。開發(fā)者需要為算法在不同條件下定義處理時間。用于與服務器傳輸數(shù)據(jù)所需的近似時間在初始化的時候被確定,當QoS管理器為每個對象設置截止時間時,它分解初始化。
每個DSP對象需要提供下列信息到QoS管理器n 編譯碼器-周期和幀的數(shù)(缺省幀/秒)Tacc總共目標服務器(DSP)循環(huán)的計算一個編譯碼器-周期的平均數(shù)間。
Tacd顯示總共目標服務器(DSP)循環(huán)的一個編譯碼器-周期的時間。
對于視頻編譯碼器,n通常是連續(xù)的I-幀中的幀數(shù)(例如15幀)。Tacc通常是一個I-幀所需的最大時間加上P和B幀所需的平均時間的總和。QoS管理器保持跟蹤所有媒體對象的Tccd。這個時間(依照DSP循環(huán))基于當前的幀率。例如,對于一個30fps的視頻流和n=15,讓Tccd=125M周。
QoS管理器現(xiàn)在可按下述方法確定一新的流是否是可被調(diào)度的。讓S等于所有被調(diào)度的當前流的編譯碼器-周期(Tacc)總和。如果新流的(S+Tacc)少于新流的Tccd,這個流是可調(diào)度的,否則不能。例如,假設有一個對象A,n=15,Taxc=39.5M周(158ms),和Tccd=125M周(500ms),并且在DSP上沒有任務調(diào)度(因此S=0)。被通知為對象A新的流調(diào)度所需的資源。因為S+39.5=39.5M周<125M周(500ms),我們能調(diào)度這個流。當對象A需要的第二個流到來時,它也被調(diào)度,因為S+39.5=79M周(316ms)<125M周(500ms)。第三個流也能被調(diào)度。然而,第四個流不能被調(diào)度,因為需要158M周(632ms),以致我們不能滿足500ms的硬截止時間。這時QoS管理器協(xié)商減少流的幀率,如果失敗,將拒絕所有的流。
一種修改的方法允許調(diào)度程序處理帶有不同編譯碼器-周期時間的不同種類的媒體對象。較長Tccd的對象被按比例分配到最少的Tccd。例如,假設有一對象B,n=30,Taxc=40M周(160ms),和Tccd=169M周(675ms),并且有兩個對象A(如上所定義的)在DSP上被調(diào)度(因而S=79M周/316ms)。我們能調(diào)度對象B的新流因為S+40*(125/158)=110.45M周(S+160*500/675=435ms)。這可證明是正確的,因為(79+40<125)M周/(316+160<500)ms,因此我們能實際保證所有的流在較短的500ms的編譯碼-周期之內(nèi)。當對象B需要的第二個流需要調(diào)度時會怎樣?110.45+40*125/158=139<125M周/435+160*(500/675)=554ms>500ms。因此,調(diào)度程序拒絕這個流并且開始上面提到的協(xié)商。
iDSP-QoS將與應用程序或它的代理協(xié)商,基于編譯碼器-周期為媒體對象保留足夠的處理帶寬。這種協(xié)商將與其他同時運行的DSP應用程序考慮一個對象所需的存儲器,所請求的QoS級別和獲得的DSP的MIPS。當對象的選擇變化,QoS管理器將執(zhí)行DSP處理器帶寬的重新協(xié)商。把參數(shù)輸入到QoS管理器的協(xié)商程序,應用程序為一個對象需要定義下列內(nèi)容(1)DSP需要的存儲器(輸入/輸出緩沖器的數(shù)量和大小)(2)期望的QoS級別(一般表示在幀每秒中)(3)啟動對象的最壞情況的運行時間(4)具有用于媒體幀序列的硬實時截止時間,調(diào)用編譯碼器-周期(幀數(shù)和平均執(zhí)行時間)。
在iDSP-QoS管理器中對象的第二調(diào)度階段是基于兩個方面,誰的截止時間先到來則誰有較高的優(yōu)先權。考慮下面的例子,如果對象A有截止時間時10ms和對象D有截止時間時3ms,iDSP-QoS管理器將調(diào)度對象D首先運行,盡管對象A有較高的優(yōu)先權。因為我們知道,當對象的運行時間接近時,我們能決定“不遲”的時間,對象必須被啟動以便它始終符合它的截止時間。在圖3中,預計對象D將在對象A的“不遲”開始點之前完成。在這種方案中,在較高優(yōu)先權的對象A和對象D之間沒有截止時間沖突。因此,對象A在較低優(yōu)先權的對象D后面運行。
在另一個調(diào)度的例子中,權衡在第一截止時間上的優(yōu)先權,是否較高優(yōu)先權的對象A的“不遲”時間是在預計的對象D預計完成的時間之前。在這種情況下,對象A將首先運行,因為它有較高的優(yōu)先權,且對象D應在其后運行,另外,只有在對象示例時間對象D符合它規(guī)定的丟幀參數(shù)的時候;參看圖4。
為使iDSP-QoS對截止時間做最可能有效地管理,GPP必須盡快讓數(shù)據(jù)輸入幀到達DSP子系統(tǒng)以允許在對象的到達時間和截止時間之間有最大量的時間。在到達和截止時間之間用于數(shù)據(jù)幀的時間越多的話,iDSP-QoS就可以更靈活地用其他同時運行的對象來調(diào)度各個對象。
3c.預測對象的運行時間(軟-截止時間)
iDSP-QoS的中心功能是為所有被調(diào)度對象的下一輸入幀預測所需的處理時間。這種預測是重要的且只針對一個對象。QoS管理器通過統(tǒng)計早先的運行時間來計算下一輸入幀的預期運行時間。對象的預期運行時間是早期運行時間的一個函數(shù)(唯一對應一個對象),最可能有正變化(每個對象被唯一地確定)。例如,在視頻對象的情況下,I,P和B幀的周期性是可確定的。因此,基于當前幀的類型和它在視頻幀的周期性中的位置,將來的處理時間能被預測?;陬A測的處理時間和近似的硬截止時間,這種在所有共同存在的算法上執(zhí)行的預測直接幫助了動態(tài)的優(yōu)先權再分配。
這些預測是管理軟-截止時間和處理時間抖動的關鍵。iDSP-QoS基于預測,將立即重新安排處理對象。這種重新的調(diào)度出現(xiàn)在個別對象的編譯碼器-周期截止時間(定義的平均硬截止時間)的期間內(nèi)。在上面的例子中,當我們均分工作量時,我們假設對象B中的所有幀需要相同的時間,與對象A的500ms相一致。這可以不是真實的,因為在整個實際重疊過程中對象B的幀可以要求更多的時間或者可以不給對象B平均的時間量。因此,最接近于編譯碼器-周期截止時間的幀得到較高的優(yōu)先權。
如果預測的運行時間為放了用戶定義的所需時間,QoS管理器將采取幾種可能的行動中的一種。在一個單一DSP配置中(級別1)一種簡單的二進制截止這導致自動丟幀。所述對象應還能夠表示如果丟幀將引起不幸的后果。
(級別2)一種通用的減少較低優(yōu)先權對象分配的運行時間,在被分配時間的末端搶先占有對象。這可以或不可以導致丟幀。
(級別3)對象需要具有接受QoS命令的能力,比如按比例還原輸出數(shù)據(jù)的質(zhì)量。在一個多DSP配置中(1)在每個QoS時間片的末端,裝入數(shù)據(jù)的信息從每個DSP被發(fā)送到GPP。
(2)僅在估計的截止時間錯過時,GPP求助于對象的再分配。從正在服務的DSPs上接收“裝入數(shù)據(jù)”之后,由GPP執(zhí)行任務的再分配。然而,為減少任務的轉(zhuǎn)接時間,所有DSPs工作于一個外部存儲空間的公共簇是很值得的。
所有在iDSP中執(zhí)行的對象必須是可確定執(zhí)行時間的。DSP對象能被分成三類,壓縮數(shù)據(jù)(編碼),解壓縮數(shù)據(jù)(譯碼)和數(shù)據(jù)轉(zhuǎn)換(前期或后期對象數(shù)據(jù)的處理)。對象把數(shù)據(jù)按塊處理;這些塊被調(diào)用輸入數(shù)據(jù)幀。對象處理以輸入數(shù)據(jù)幀和產(chǎn)生一輸出數(shù)據(jù)幀。如同任何計算的數(shù)據(jù),輸入和輸出數(shù)據(jù)幀被按照大小和處理量進行約束?;谌我馑o輸入幀的大小,能精確地確定DSP處理的最大量,在這方面,任何其他的計算機,必須在輸入幀上執(zhí)行。
每個對象,在它被集成iDSP系統(tǒng)以前,需要表明對象的一幀在最壞情況的運行時間。這個最壞情況的運行時間被用于計算第一輸入幀的運行時間以便能啟動對象。由于編碼器和譯碼器對象很少在最壞情況下運行,第一輸入幀將是高代價的(因為它必須預測最壞情況)。這種最壞情況的安排可能引起第一幀的運行時間要長于實際的運行時間。
入早先所述,在輸入幀中一個算法對象的處理時間將變化。在最初,iDSP-QoS開始對第一數(shù)據(jù)輸入幀用最壞情況值。在第一幀之后,基于算法的特征和測量的第一幀處理時間,QoS管理器將預測下一輸入幀的處理時間。對于每個序列幀,基于算法對象的語義和歷史記錄,它預測近似的處理時間。例如,編碼器對象使用了對象語義(例如,I,P,和B幀的類型)連同早期相同輸入幀的平均編碼時間,這可以用于預測將來編碼所需的時間。編碼器對象每次產(chǎn)生相同大小輸入幀時,它們被安排執(zhí)行。處理時間的變化來自許多因素,象幀的活動水平,在幀之間移動的程度等等。然而,這些變化是有限制。因此,在兩個幀之間處理時間的最大差別是有限的,該最大差別能被加到預測的處理時間上,以便為下一幀確定最壞情況的處理時間。參看圖5-6。
譯碼對象一般給出可變大小的輸入幀。輸入數(shù)據(jù)幀的處理時間與它的大小直接成比例。為確定下一幀的處理時間是否會增加,QoS管理器將核查當前的和下一數(shù)據(jù)輸入幀大小的區(qū)別。如同編碼器所論述的,對譯碼器也成立,即在兩個語義相同的幀之間,處理上的區(qū)別是有限的。對象的最大或最壞情況的處理時間對應了用于對象而被定義的最大可能的緩沖器。參看圖7。
轉(zhuǎn)換對象的運行與編碼器對象的相同,它們總是產(chǎn)生相同大小的輸入幀。每幀總是用掉相同數(shù)量的處理時間并且是單一通過輸入幀。因此,每輸入幀的處理時間總是保持不變。
每個對象將從用戶應用程序接收一相對時間,其中通過的幀必須被對象完成。一個例子是這樣的,應用程序規(guī)定這個幀必須在下一個7mS被處理。由于在主機GPP和DSP之間沒有公共軟件時鐘,截止時間僅能由相對時期所限定。我們假設在主機和DSP之間的數(shù)據(jù)幀的傳輸時間是可確定的。iDSP系統(tǒng)保持一個內(nèi)部時鐘,它相對于數(shù)據(jù)幀到達后接收的一個時標,因而可以計算預期的處理時間。在計算了預期的處理時間之后,QoS管理器開始調(diào)度數(shù)據(jù)幀執(zhí)行。
在一個對象能被調(diào)度之前,QoS管理器把這個對象與其他共同存在的對象相比較,確定這個對象執(zhí)行的適當?shù)闹噶?。如果沒有其它的對象處理輸入幀,這個對象的幀被立即安排執(zhí)行。如果有其它的對象運行,QoS管理器通過考慮每個請求對象的優(yōu)先權,預期的截止時間和硬或軟需要的實際時間,確定執(zhí)行的指令。參看圖8。
當多對象時,有不同的運行時間優(yōu)先級,一起連接于相同的DSP,QoS管理器將根據(jù)對象的具體的運行時間計算每個對象預計的運行時間。然后基于處于調(diào)度的對象(TBD)安排不同的任務。下列三種可能的調(diào)度情況(1)所有對象運行,完成給出的輸入數(shù)據(jù)幀并且在應用程序規(guī)定的截止時間內(nèi)完成。這種情況在圖9中表示,注意圖中所有對象是在每個對象的截止時間之前完成的。如果所有對象在它們各自的截止時間之前完成,QoS管理器的工作量是最小的。
(2)一個或多個對象(例如對象B)的處理負載增加,但沒有引起后面對象的預計截止時間錯過。一個或多個對象的負載增加時可能的,比如像對象B。取決于對象,如果相同對象的幀數(shù)據(jù)序列在它們的截止時間限制內(nèi)被處理,錯過一個截止時間是可以接受的。一個例子,在一個H263編碼器中,一個“I”幀用了很長時間計算。跟在“I”幀后面的總是一個“p”幀并且典型的具有較少的處理需求。這就允許“I”幀挪用后面“P”幀的處理周期。這樣,如果有足夠的處理空間用于下一幀,一個幀的截止時間錯過不會出現(xiàn)很大的麻煩。
由于對象B的截止時間已經(jīng)被超過,必須確定整個系統(tǒng)的效果。如果由對象B引起的截止時間的錯過沒有引起后面對象的預計截止時間出錯,則整個系統(tǒng)的危險是最小的。參看圖10-11。
(3)一個或多個對象(例如對象B)的處理負載增加,而且引起了后面對象的預計截止時間出錯。看圖12。在這種情況下,對象B的截止時間的錯過引起了引起后面對象的預計截止時間出錯。盡管出現(xiàn)這種情況,整個系統(tǒng)的危險可能或不可能是最小的。每個共同運行的對象可以挪用序列幀的周期并因此避免了截止時間錯誤的多米諾(骨牌)效應。
iDSP-QoS提出了一組用于軟截止時間管理的規(guī)則。這組規(guī)則的設計限制了由一個單一的決定性的錯誤截止時間所引起的截止時間錯誤的雪球效應。(1)每個算法對象提供給QoS管理器允許的丟幀/秒的最大數(shù)。(2)在每次處理周期之后,每個對象更新運行中‘截止時間錯過’的計數(shù)作為移動平均值。(3)當一個對象超出了出錯截止時間的限制,把這個對象的優(yōu)先級改成最高值。一旦計數(shù)下降到低于限制時,恢復原來的優(yōu)先級。(4)所有的序列幀在限制之后沒有達到它們的截止時間,則被丟棄。這導致QoS暫時下降到緊接著的下一級。QoS的這種瞬時下降(很少有)隨后被報告給客戶。(5)只有當已經(jīng)通過了截止時間DSP還沒有啟動對象時,照例,幀被丟棄。
3d.節(jié)流控制周期的媒體翻譯對于一個給出的算法對象,iDSP-QoS假設在任意瞬間僅有一個準備排隊的請求,通常,有規(guī)定服務質(zhì)量的周期性的截止時間來約束QoS管理器。媒體系統(tǒng)中的音頻和視頻翻譯元件能緩沖幀以處理到達時間的變化,允許幀稍微提前于調(diào)度到達。但是這些緩沖器是有限的,因而在幀被處理時媒體系統(tǒng)的上行流比特元件必須謹慎地壓制相對速度。
通過iDSP-QoSM提供兩種機制,用于壓制算法對象的處理速度。
(1)DSP算法對象的客戶控制它調(diào)用算法對象處理功能(服務器)的速度。這能導致QoS管理器的調(diào)度算法的次優(yōu)的性能,如果請求是在時間周期內(nèi)產(chǎn)生的,它們必須被完成。例如,上面考慮的算法對象A,其中緩沖器A1必須在時間周期T1內(nèi)被處理和緩沖器A2必須在時間周期T2內(nèi)被處理。圖。
其中T1和T2是兩個連續(xù)的周期,[x]表示到達的緩沖器x,{x}表示完成處理的緩沖器x??磮D13a。
(2)QoS管理器控制媒體流的節(jié)流。這種機制允許客戶一有可能就用一個輸入緩沖器調(diào)用一個算法對象的處理功能。QoS管理器隨后將對輸入緩沖器附加‘開始-截止時間’。直到它的當前緩沖器的處理被完成時客戶才阻塞??磮D13b.這樣,在兩種情況下,在任意瞬間,QoS管理器中準備排隊的每個算法對象最多有一個請求。
3.存儲器分頁為了在一個DSP上更好地運行多算法,或者有關這方面的任意的處理器,必須建立一套規(guī)則以便系統(tǒng)資源在算法中公平的共享。這些規(guī)則規(guī)定了對處理器外圍設備的訪問,比如DMA,內(nèi)存,和算法的調(diào)度方法。一旦接受了一套規(guī)則,一個系統(tǒng)接口能被開發(fā)用于插入算法,以便它們能訪問系統(tǒng)資源。一個公共接口提供給算法開發(fā)者明確的范圍,其中不久要開發(fā)算法,因為他們能單獨地集中于算法開發(fā)而沒有系統(tǒng)支持的問題。例如一個接口是Texas InstrumentsiDSP Medis PLatform DSP框架。在一個算法和一個TMS320C62XXDSP之間出現(xiàn)的所有訪問經(jīng)過這個框架。
Texas Instruments XDAIS標準需要建立規(guī)則,允許插入多于一個算法到iDSP媒體平臺中,通過一個或多個算法讓系統(tǒng)的積分器快速匯編產(chǎn)品質(zhì)量系統(tǒng)。XDAIS標準要求算法要符合稱為Alg接口的需要的公共接口。有幾個被XDAIS標準強加的規(guī)則,最重要是算法不能直接定義存儲器或直接訪問硬件外部設備。通過用于所有算法的單一公共接口提供系統(tǒng)服務。因此系統(tǒng)積分器僅提供一個支持所有算法的Alg接口的DSP框架,。Alg接口也提供算法開發(fā)者一個訪問系統(tǒng)服務的裝置并調(diào)用它們的算法。
一個算法必須精確地定義它所需的內(nèi)存。這需要一種內(nèi)存分頁結(jié)構來支持多算法在內(nèi)存中對相同空間的訪問。XDAIS依據(jù)算法需要規(guī)定它們所需的的內(nèi)部和外部存儲器。
內(nèi)(芯片內(nèi))存必須被分成兩個區(qū)域。第一是系統(tǒng)的內(nèi)務操作區(qū),支持一個特殊DSP系統(tǒng)配置的OS數(shù)據(jù)。第二區(qū)是為算法使用的,但必須是在它們已經(jīng)被調(diào)度而執(zhí)行的時候。兩個存儲區(qū)的大小必須是固定的。第二存儲區(qū)被稱為算法芯片內(nèi)工作區(qū);換句話說這個工作區(qū)也能描述為一種數(shù)據(jù)覆蓋或數(shù)據(jù)存儲頁面。參看圖14。
為了確定可得到多大的算法芯片內(nèi)工作區(qū),系統(tǒng)開發(fā)者用得到的內(nèi)部數(shù)據(jù)存儲器空間的總量減去支援系統(tǒng)軟件所需的量,比如OS支持和用于分頁結(jié)構的數(shù)據(jù)支持。OS的配置,比如任務量,信號量等等,應該由系統(tǒng)DSP設計者設置成最大以支持全部的算法量,設計者希望同時運行這些算法。保持最少量的OS支援內(nèi)務操作和增加算法工作區(qū)。
為使一個算法運行于這樣的環(huán)境,它需要的內(nèi)存必須少于工作區(qū)的大小。否則系統(tǒng)積分器不能積分算法;有一種限制,即每算法僅有一個分頁。這種體系結(jié)構不支持算法的多分頁。
算法工作區(qū)被分成三部分,堆棧(必須遵循的),持久存儲器和不持久存儲器。有時有一第四部分,這將在以后討論,它處理持久存儲器的只讀部分。參看圖15。
一個算法當它正在執(zhí)行時僅使用芯片內(nèi)的工作區(qū)。當一個算法被調(diào)度執(zhí)行時,DSP系統(tǒng)軟件將把算法的工作區(qū)從它的內(nèi)部存儲單元(陰影存儲)傳送到芯片內(nèi)的內(nèi)部工作區(qū)。當算法服從控制,DSP系統(tǒng)軟件將確定下面該運行哪個算法,如果它是相同的算法則不需要傳送工作區(qū)。如果下一個算法是一個不同的算法則當前的工作區(qū)被存儲在內(nèi)部存儲器的它的陰影單元中,并且下一個算法的工作區(qū)被傳送。參看圖16。
用于算法的整個工作區(qū)在前后轉(zhuǎn)換時不傳送。僅僅傳送堆棧的使用部分和持久數(shù)據(jù)存儲器。當一個算法在它的調(diào)用堆棧中是在它的最高級時,算法的堆棧是在它的最高級(最少使用)。換句話說,算法是在它的入口點。
理想的前后算法的轉(zhuǎn)換出現(xiàn)于它的堆棧位于最高級,因為那意味著芯片外有少量的數(shù)據(jù)傳送到陰影存儲。參看圖17。
優(yōu)選實施例的數(shù)據(jù)分頁體系結(jié)構要求前后轉(zhuǎn)換應是最有效率的。處理前后轉(zhuǎn)換花費的額外時間,對DSP能用于執(zhí)行算法。因為前后轉(zhuǎn)換的最好時間是在它的調(diào)用分界線上,應該絕對最小化算法的先占。當算法的堆棧大于它的最小值時,算法的先占將降低整個系統(tǒng)。這應該是一種要求,但在很有限的基礎上可以接受先占。參看圖18-19。
一種算法工作區(qū)的特殊情況是,如果算法需要只讀持久存儲器。這種類型的存儲器被算法用于查表。由于這種存儲器從未被修改過則只需要讀入且不能被寫。這種非對稱的分頁傳送減少了算法前后轉(zhuǎn)換的額外開銷。
用這種數(shù)據(jù)分頁結(jié)構,一個單一算法能被不止一次示例。由于算法已經(jīng)定義了它需要的內(nèi)存,DSP系統(tǒng)積分器能多于一個相同算法的示例。DSP系統(tǒng)軟件保持跟蹤多個實例并且同時調(diào)度算法的每個實例。為保留算法實例的陰影版本,示例的數(shù)量限制對應于在DSP系統(tǒng)中有多少內(nèi)存。
DSP系統(tǒng)軟件必須管理每個實例以便它能對調(diào)度的算法正確的匹配算法數(shù)據(jù)。由于多數(shù)DSP算法由于任務被示例,DSP系統(tǒng)軟件能使用任務環(huán)境指針作為一個裝置來管理算法實例。
4.數(shù)據(jù)流鏈接優(yōu)選實施例的數(shù)據(jù)流依靠集成處理單元,供給他們一個共享的存儲空間,并且在處理單元中直接路由選擇數(shù)據(jù),不受GPP的干涉。這樣一個系統(tǒng)顯示在圖21中。
當處理單元PEa完成了大量的數(shù)據(jù)處理,它把結(jié)果數(shù)據(jù)寫到共享存儲器中的一個預定的輸出緩沖器。PEa隨后通知下一個經(jīng)過適當?shù)目刂坡窂皆谶B接中的處理單元PEb。PEb然后從輸入緩沖器讀數(shù)據(jù)用于另外的處理。在這樣的方式中,數(shù)據(jù)經(jīng)過所有需要的處理單元直到所有數(shù)據(jù)已經(jīng)被用完。
如上面所說的,一組緩沖器用于在兩個處理單元之間的通信并且在這些單元之間構成了一個I/O通道。多個I/O通道可以存在于任意兩個處理單元之間,允許系統(tǒng)同時(例如平行的)處理多個數(shù)據(jù)流。圖22顯示了平行處理多數(shù)據(jù)流s1,s2的例子。
由I/O通道連接的一系列處理單元組成了一個通道鏈。幾個通道鏈能被定義在一個特殊的系統(tǒng)中。在這種情況下,一個處理單元的中間鏈的每個輸入通道具有一個相關的輸出通道。處理單元的兩端僅有一個輸入或輸出通道。
一個處理單元的輸入通道規(guī)定從哪個緩沖器讀數(shù)據(jù)。一個處理單元的輸出通道規(guī)定把數(shù)據(jù)寫到哪個緩沖器以及通知后面的處理單元。在數(shù)據(jù)處理單元和中心控制處理器(CCP)之間的控制信息的類型是。
(1)狀態(tài)信息數(shù)據(jù)流的處理開始,停止,異常終止,暫停,恢復,等等...
(2)服務質(zhì)量信息時間標記,系統(tǒng)負荷,資源的空閑/忙等等...
(3)數(shù)據(jù)流控制信息開始,暫停,恢復,反繞等等...
(4)系統(tǒng)負荷信息任務運行,工作信道數(shù),每個處理單元的信道等...
在一個優(yōu)選實施例中,經(jīng)過一個配置文件處理單元I/O通道的創(chuàng)建和結(jié)合被靜態(tài)的定義,該配置文件能在系統(tǒng)初始化的時候被讀入。對于每種被處理的比特流的類型,配置文件定義一個與適當?shù)奶幚韱卧噙B接的通道鏈(也就是數(shù)據(jù)路徑)。在一個通道中所有處理單元的集中處理導致數(shù)據(jù)消耗的完成。
在多數(shù)據(jù)路徑存在一個給定的比特流的情況下,能定義替換或備份通道鏈。比特流能被路由到?jīng)]有利用的任意處理單元的一個最初的通道鏈。確定運行時比特流的類型和通過被路由的數(shù)據(jù)動態(tài)OoS分析選擇通道鏈。在運行時間所有系統(tǒng)中合法的通道是固定的和不可改變的。
在另一個優(yōu)選實施例中,當一新比特流到達通信的處理器時,不同比特流的通道鏈能被動態(tài)地構造。派生的比特流信息在運行時能經(jīng)過控制信息被發(fā)送到CCP,CCP將確定所需的處理單元和在它們之間動態(tài)地分配I/O通道。這種方法將允許資源由服務提取或者在運行時間的聯(lián)機允許系統(tǒng)自適應。
在共享存儲器的非均勻系統(tǒng)中,處理單元中的數(shù)據(jù)流經(jīng)過內(nèi)部共享存儲器而不受CCP的干涉。數(shù)據(jù)不會在總線上出現(xiàn),因而數(shù)據(jù)處理的速度由共享存儲器的訪問時間所決定而不是總線的傳輸時間。由于CCP的干涉成為最小化,整個數(shù)據(jù)流時間的CCP響應和處理延時被排除。通過在處理單元中最小化數(shù)據(jù)傳輸?shù)臅r間,可以提高系統(tǒng)的吞吐量。
5a.一個例子在這里技術討論的一個典型的數(shù)據(jù)流的應用程序?qū)⒂糜诿襟w處理系統(tǒng)。這樣一個系統(tǒng)將啟動和控制用于處理像譯碼,編碼,翻譯,轉(zhuǎn)換,定標等這樣的寬帶媒體的流。通過像電纜調(diào)制解調(diào)器,DSL,或無線這樣的通信媒體,它能夠處理來自本地盤和一個遠程計算機/服務器的媒體流。圖23顯示了這樣一個系統(tǒng)的例子。
圖23中的媒體處理系統(tǒng)包含5個處理單元(1)DSL或電纜調(diào)制解調(diào)器I/O前端的DSP(2)媒體處理DSP(3)視頻/圖形覆蓋處理器(4)H.263譯碼器任務(5)彩色空間轉(zhuǎn)換器任務H.263數(shù)據(jù)流進入前端的I/O DSP,I/O DSP跟隨著一個由標號1-3定義的通道鏈。每個通道連接2處理單元并組成一組用于在單元之間通過數(shù)據(jù)的緩沖器??刂屏鹘?jīng)過陰影線顯示。
H.263數(shù)據(jù)流從前端DSP的I/O進到通道1在總的共享存儲器中被定義的緩沖器I/O。前端DSP的I/O通知目標處理單元與通道1有關,也就是在媒體處理DSP上的H.263譯碼器任務,它的輸入緩沖器是滿的并準備被讀。H.263譯碼器任務從通道1緩沖器I/O讀出數(shù)據(jù),譯碼數(shù)據(jù)并把結(jié)果YUV數(shù)據(jù)寫到局部共享存儲器中的通道2緩沖器的I/O。
應注意通道可以在處理器之間或在處理器內(nèi)。經(jīng)過總的共享存儲器(在處理器之間)或經(jīng)過指定處理器(在處理器內(nèi))的“局部”共享存儲器,數(shù)據(jù)能在處理器之間通過。在圖4中,通道1和3是在處理器之間的,通道2是在處理器內(nèi)部的。
5.修改在保留所述特征的同時優(yōu)選實施例能用各種方法進行修改。
權利要求
1.一種客戶-服務器調(diào)度的方法,包括(a)一個在一個客戶上調(diào)度的第一階段,為耦合到所述客戶的服務器的任務設置實時截止時間;和(b)一個在所述任務的子任務的服務器上調(diào)度的第二階段,所述調(diào)度的第二階段使用步驟(a)的實時截止時間。
2.權利要求1的調(diào)度方法,其中(a)所述任務包括一個媒體流譯碼;和(b)所述子任務包括一個用于所述媒體流的幀的幀譯碼。
3.用于一個客戶-服務器系統(tǒng)的一種對象請求代理的方法,包括(a)破壞一個第一客戶請求返回和一個第二客戶請求調(diào)用;和(b)鏈接一個第一服務器對象的一個輸出到一個第二服務器對象的一個輸入,其中所述第一服務器和所述第二服務器分別對應第一和第二客戶請求。
4.權利要求3的方法,其中(a)所述鏈接是通過在所述服務器中創(chuàng)建一個用于中間結(jié)果(所述第一對象的輸出和所述第二對象的輸入)的緩沖器來實現(xiàn)。
5.一種在一個客戶-服務器系統(tǒng)中服務器處理器存儲器管理的方法,包括;(a)為處理器的開銷分配一個處理器存儲器的一個第一部分;和(b)為任務工作區(qū)分配所述處理器存儲器的一個第二部分,其中所述的第二部分每次能被僅僅一個單一的任務占用。
6.權利要求5的方法,其中(a)所述存儲器的第二部分包括一個堆棧元件,一個持久存儲元件,和一個非持久存儲元件。
7.在一個非均勻系統(tǒng)中數(shù)據(jù)流動的方法,該系統(tǒng)帶有一個總線連接到一個控制處理器和連接到多個處理單元的每個處理單元,包括(a)通過使用從所述總線中分離出的一個公共存儲器,在所述的處理單元中進行傳輸數(shù)據(jù)。
全文摘要
一個客戶-服務器系統(tǒng)具有把服務器任務調(diào)度分成兩個階段,把客戶截止時間的階段信息用于服務器子任務調(diào)度的一個第二階段。還有,用于系統(tǒng)的一個對象代理,使用破壞客戶的請求調(diào)用和返回,以維護協(xié)處理器中的數(shù)據(jù),以及通過使用多個協(xié)處理器的一個共享存儲器,管理用于多任務的服務器存儲器和數(shù)據(jù)流動,以避免主處理器擁擠。
文檔編號G06F9/46GK1405679SQ0111961
公開日2003年3月26日 申請日期2001年4月26日 優(yōu)先權日2001年4月26日
發(fā)明者R·T·基利安, A·納拉揚, R·米諾瓦諾維奇, J·M·奧弗特夫, S·T·巴頓, P·R·思里弗特 申請人:德克薩斯儀器股份有限公司