專利名稱:中間件架構的制作方法
中間件架構
背景技術:
為實時流媒體應用構建穩(wěn)健的(robust)系統(tǒng)是困難的,這是因為 這種應用需要在維持性能和響應性的同時而處理多個數(shù)據(jù)流。從而, 應用開發(fā)者必須克服至少四類挑戰(zhàn)1 )隔離并管理系統(tǒng)的復雜度;2) 支持對用于多媒體應用的多種數(shù)據(jù)格式的并發(fā)執(zhí)行;3)對用于數(shù)據(jù)流 操作的數(shù)據(jù)序列進行操作;和4 )根據(jù)實時應用的變化負載在可變強度 的平臺上提供(deliver)響應性能。
在下面的附圖中以舉例而并非限制的形式圖示了實施例,其中相 同的附圖標記表示相似的元素,其中
圖1A依照本發(fā)明 一 個實施例圖示了用于軟件開發(fā)的方法。
圖1B依照本發(fā)明 一個實施例圖示了全局調度器(global scheduler )
的操作。
圖2依照本發(fā)明一個實施例圖示了用于對應用進行數(shù)據(jù)流分析的 處理流程。
圖3A-3C依照本發(fā)明 一個實施例圖示了在中間件架構(middleware framework)中對應用的分角罕(decomposition)、 組合(composition)
以及運行期管理。
圖4依照本發(fā)明一個實施例圖示了使用數(shù)據(jù)流中間件架構來構建 期望的應用的例子。
圖5依照本發(fā)明一個實施例圖示了數(shù)據(jù)流中間件架構的實現(xiàn)體系 (hierarchy )。
圖6依照本發(fā)明一個實施例圖示了用于實現(xiàn)數(shù)據(jù)流中間件架構的 計算機化系統(tǒng)600的框圖。
具體實施例方式
為了簡單和說明性目的,主要參照實施例的例子來描述實施例的 原理。在下面的描述中,闡明了許多具體細節(jié)以便提供對實施例的徹底了解。然而,對本領域普通技術人員來說顯而易見的是,可以在并 不限于這些具體細節(jié)的情況下實施這些實施例。在其它實例中,沒有 詳細描述公知的方法和結構以免不必要地模糊所述實施例。
通過利用中間件架構可以極大地加速開發(fā)實時多媒體或其它復雜 的應用,所述中間件架構抽取了操作系統(tǒng)相關性并且提供了對頻繁使 用的組件的優(yōu)化實現(xiàn)。因此,這里描述了用于這種中間件架構的方法
和系統(tǒng)。在本發(fā)明的 一 個實施例中,提供了 一種數(shù)據(jù)流中間件(dataflow middleware, DM)架構,其是可操作以通過簡化軟件設計和構建并減 少軟件開發(fā)時間來改進復雜應用(諸如多媒體應用)的軟件設計的多 平臺軟件架構。此外,中間件架構可操作用以實時地或離線地在運行 期期間有效地支持復雜操作。
使用DM架構的大部分在先解決方案是單線程的或按模塊分配線 程(thread-per-module )的,并且不4吏用任何全局調度器來用于々某體流 水線的多線程執(zhí)行。在單線程的解決方案中,常規(guī)的架構呈現(xiàn)出模塊 化的好處,但是性能較為低下,這是因為無法并行地執(zhí)行模塊。在按 模塊分配線程的解決方案中,應用使用并行執(zhí)行;然而應用模塊必須 分別對溢出和饑餓(starvation)情況作出反應,并且本地地決定何時 丟棄媒體或者調整它們的操作速度。因此,本發(fā)明的至少一個實施例 設法在不犧牲應用性能的情況下提供應用軟件的簡化的模塊化、數(shù)據(jù) 流型設計。在數(shù)據(jù)流設計中,應用是借助有向弧鏈接在一起的功能模 塊的連接網絡。數(shù)據(jù)流設計非常適于表示諸如流媒體應用之類的復雜 應用,這是因為模塊性降低了復雜度,弧表示數(shù)據(jù)流并且所述弧可以 發(fā)送多種數(shù)據(jù)格式。在本發(fā)明的另一實施例中,提供了一種包括全局 調度器的中間件架構,所述全局調度器用于通過(across)具有多個處 理器的多處理環(huán)境在多核處理器內或通過多個多核處理器來自動化或 協(xié)調(orchestrate)應用任務的并行執(zhí)行。如這里所纟是及的,處理單元 是單處理器或多核處理器的核心。從而,具有多個處理器、多核處理 器或多個多核處理器的環(huán)境可能會具有多個處理單元。
盡管可以克服應用開發(fā)者通常所面臨的上述挑戰(zhàn)中的前三個(尤 其是借助于現(xiàn)代面向對象的程序設計語言時更是如此),但是實時處 理的第四個挑戰(zhàn)要難得多。從而,當任何應用始終在過功率 (over-powered)機器上響應時(例如,使用服務器類機器的網絡攝像頭視頻捕獲),本發(fā)明的一個或多個實施例設法利用(leverage)機器 的多處理能力以便即使當所述機器資源是有限時也能提供應用性能。
依照本發(fā)明的另一實施例,使用DM架構通過把算法(例如,視 頻處理或分析)與運行期系統(tǒng)(例如,多線程,同步)相隔離來設計 并編碼應用軟件。這使應用開發(fā)者能夠集中于手邊的特定于應用的算 法處理,同時利用該架構以便克服應用開發(fā)者通常所面臨的上述挑戰(zhàn)。 另外,這種DM架構提供了其它的軟件工程的好處,比如改進的可寫 性和可讀性(其簡化了維護),利用其他人的工作的代碼再使用,簡 化調試并且確保軟件魯棒性的更好的須'J試方法,以及對其它平臺的提 高了的移植性。
方法
對于基于數(shù)據(jù)流范例的本發(fā)明那些實施例來說,來自應用的數(shù)據(jù) 流經由DM架構中計算模塊的有向圖。從而,為了在該范例中創(chuàng)建、 構建或開發(fā)應用,采用一種用于軟件開發(fā)的方法,包括以下階段(1) 對應用的數(shù)據(jù)流進行分析以便確定信號以及對所述信號的處理階段, (2)把所述應用分解為媒體表示和處理模塊,(3)把所述模塊組合 為有向圖網絡,以及(4)對所述應用的圖網絡進行運行期管理。圖1A 圖示了上述的方法100,下面將關于DM架構怎樣可操作用以輔助該方 法來進一步詳細描述其。
在110,執(zhí)行對待構建或開發(fā)的目標應用的數(shù)據(jù)流分析,所述目標 應用諸如流媒體應用。目標應用可以處于其原型設計或測試階段,其 中應用開發(fā)者想要進一步分析所述應用以作進一步修改或增強,以便 完成所述目標應用。圖2圖示了階段110的細節(jié),其可以由應用開發(fā) 者來執(zhí)行。任何應用中的基本信息內容都是隨時間而進展(evolve)的 數(shù)據(jù)信號(例如,音頻或視頻)。從而在210,為了執(zhí)行對應用的數(shù)據(jù) 流分析,應用開發(fā)者首先識別用于對應用進行饋給的 一個或多個信號 源(例如,麥克風,照相機或文件)。接下來在220,當每個信號從信 號源處的起點經由應用而行進(progress)時,應用開發(fā)者遵循期望的 該信號的變換路徑。沿著此變換路徑在可識別的各信號格式之間,所 述信號經歷了不同的處理階段。例如,音頻信號可以在麥克風源以PCM 才各式開始它的存在,然后經歷到ADPCM的變換,繼而經歷到UDP包的變換。在此例子中,壓縮階段位于PCM格式和ADPCM格式之間, 并且網絡分包階段位于ADPCM格式和UDP格式之間。在不改變信號 格式的處理階段期間也可能發(fā)生信號變換。例如,色彩校正階段可以 生成與其圖像輸入具有相同格式但圖像內部的數(shù)據(jù)被修改了的圖像輸 出。從而在230,通過依照這種方式分析每個信號,應用開發(fā)者能夠識 別應用的不同處理階段和信號格式。
返回參照圖1A,方法100中的下一階段是120處的應用逐項詳列 (itemization),其中應用開發(fā)者根據(jù)數(shù)據(jù)流分析把將構建的應用分成 其組成部分(constituent)或組件。較早識別的信號格式是媒體類型, 并且較早識別的處理階段對這些媒體類型進行操作。在 一 個實施例中, DM架構提供了三個抽象概念(abstraction)來支持此逐項詳列階段 媒體對象、任務對象和作業(yè)。如這里所提及的,媒體對象是數(shù)據(jù)的基 本單元,每個單元具有特定的媒體類型。每個媒體對象可以是任何類 型的數(shù)據(jù)信號,諸如多媒體應用中基于流的信號。基于流的信號的例 子包括但不限于音頻流、視頻流以及一連串圖像中的每個圖像的面 部的二維(2D)坐標流。與此相對照,如這里所提及的,任務對象是 處理的基本單元。每個任務對象具有用于接收一個或多個媒體對象的 零或更多個輸入,用于向一個或多個其它任務對象發(fā)出一個或多個媒 體對象的零或更多個輸出,或者用于接收并發(fā)送一個或多個媒體對象 的至少一個輸入或一個輸出。具有至少一個輸出但是沒有輸入的任務 對象是源任務對象,用于充當諸如稍后描述的產生任務模塊(production task module )之類的媒體對象源。具有至少 一個輸入但是沒有輸出的任 務對象是匯點任務對象(sink task object),用于充當用于任何輸入媒 體對象的終點。例如,匯點任務對象不具有任何輸出,這是因為它不 向架構中的其它任務對象發(fā)出媒體對象,作為替代,諸如文件匯點任 務對象之類的匯點任務對象可以把所產生的媒體對象寫入到存儲介 質,或者諸如網絡任務對象之類的匯點任務對象可以通過網絡來發(fā)送 所產生的媒體對象。任務對象可以是任何類型的媒體計算,諸如視頻 壓縮、 一見頻解壓縮或面部識別。任務對象還可以包括借助1/0處理而進 行的媒體的產生或消耗,諸如通過照相機的圖像捕獲或借助計算機聲 卡和揚聲器的音頻播放。還如這里所提及的,作業(yè)是借助與該作業(yè)相 關聯(lián)的任務對象而對一個或多個必要的媒體對象進行的處理。從而,一個或多個作業(yè)可以與特定的任務和特定的媒體對象(一個或多個) 相關聯(lián)。此外,多個作業(yè)可以由單個任務對象根據(jù)所述任務對象的類 型來隨時間過去而順序處理或同時處理。
針對每種獨特的信號格式,應用開發(fā)者可以為媒體對象定義單獨
的媒體類型,其從用于面向對象的程序設計的媒體基類(base class) 繼承諸如時間雀義記錄、存儲器管理和自動串4亍化(serialization)這樣 的行為(behavior)。同樣,對于每個處理階段來說,開發(fā)者可以使用 在DM架構中已經可用的預定任務模塊,或者他可以定義新的任務模 塊,所述新的任務模塊繼承DM架構中用于面向對象的程序設計的預 定任務基類的行為。從而,每個任務模塊具有零或更多輸入引腳(pin)、 零或更多輸出引腳或者至少一個輸入引腳或一個輸出引腳以便對應于 相應任務對象的輸入(一個或多個)和輸出(一個或多個)。任務模 塊的可繼承行為包括輸入/輸出(I/O)緩沖器管理以及多線程執(zhí)行和同 步。每個任務模塊內的代碼是從輸入到輸出的算法映射并且與通常的 線程問題或同步問題相隔離,簡單地使用DM架構使之成為可能。
返回參照圖1A,現(xiàn)在媒體對象和任務對象以及相關聯(lián)的作業(yè)是應 用的構件塊(building block )。從而在130,應用開發(fā)者可以通過組合 其組成部分或組件來形成要構建的應用,其中所述應用開發(fā)者把許多 任務模塊(每個任務模塊用于表示一個任務)連接在一起以便形成處 理圖網絡,并且向DM架構請求一個或多個架構線程(以下也被稱為 "執(zhí)行線程,,)來執(zhí)行或運行應用或處理圖網絡中的一個或多個作業(yè)。 每個連接是特定媒體類型的單向傳送,并且表示媒體流。如果所有的 任務引腳都被連接,那么應用可以通過觸發(fā)創(chuàng)建媒體對象的產生任務 來開始處理圖網絡。在每次產生媒體對象之后,產生任務可以觸發(fā)自 身來創(chuàng)建下一媒體對象。每個媒體對象從媒體產生任務模塊流到其余 的處理網絡或圖,并且基于執(zhí)行線程進一步觸發(fā)應用中其余任務的消 耗(consumption)、產生或處理行為。
依照一個實施例,DM架構還包括內部存儲器管理器,所述內部存 儲器管理器優(yōu)化媒體對象內的媒體緩沖器的再使用。在之后的某個時 間,作為如下所述的DM架構的一部分的圖形顯示程序可以發(fā)出停止 命令,從而使架構線程暫停(halt)執(zhí)行與圖相關聯(lián)的作業(yè)。在一些實 施例中,停止命令使所有目前調度的作業(yè)在對作業(yè)執(zhí)行的暫停生效之前被執(zhí)行。停止圖保持了任務模塊的內部數(shù)據(jù)狀態(tài)。在動態(tài)應用中, 可以通過首先停止圖,然后添加或移除任務模塊,繼而發(fā)出以新的圖 和以未移除的任何任務模塊的內部數(shù)據(jù)狀態(tài)來繼續(xù)所述應用的開始命 令,來將任務添加到所述圖或從圖移除任務。作為選擇,圖形顯示程
序可以發(fā)出遞歸地破壞圖中的所有任務的破壞(destroy)命令。盡管 參考可經由圖形顯示程序來獲得的架構命令描述了 DM架構的上述命 令,不過應當理解的是,可以經由圖形顯示程序以外可用的機制或命 令來向DM架構發(fā)出架構命令,并且在DM架構內自動地或由用戶手 動地輸入到所述DM架構。
與許多其它體系結構不同,DM架構支持任意的圖拓樸,包括循環(huán)。 在具有反饋回路的任何應用中循環(huán)是重要的。例如,來自顯示任務模 塊的鼠標運動可以確定另 一任務模塊中新的視圖合成(view synthesis ) 的視點,所述另 一 任務模塊繼而可以向顯示任務模塊發(fā)送新的圖像。 為了對媒體流類型達成 一 致意見,兩個連接的任務模塊可能必須協(xié)商
所述媒體類型。例如,廣義的UDP任務可以接受任何媒體類型,但是 對其進行饋給的視頻源可能只提供MPEG-4視頻。由于UDP任務是靈 活的,所以兩個任務模塊只是同意發(fā)送/接收MPEG-4視頻媒體類型。 最后,所完成的圖結構直接表示應用的任務相關性(task dependency )。 再次參照圖1A,在140,向諸如應用開發(fā)者之類的用戶提供對應 用的圖網絡的運行期管理。在一個實施例中,DM架構例如經由圖形用 戶界面(GUI)軟件程序提供處理圖網絡的實時圖形顯示。這種顯示向 用戶提供了任務的處理圖拓樸和實時性能統(tǒng)計(包括應用中的等待時 間以及每個任務和每個應用整體的吞吐量統(tǒng)計)的動態(tài)顯像。圖形顯 示使用戶能夠通過對表示應用的處理圖網絡的圖管理來管理并操縱應 用構建或開發(fā)。例如,用戶可以在修改或不修改所修改任務模塊其中 的內部狀態(tài)的情況下修改去往和來自處理圖網絡中的一個或多個任務 模塊的連接。對于圖管理來說,在應用運行期, 一旦任務模塊被連接 并且為每個連接確定了媒體類型,所述應用就準備由DM架構來執(zhí)行。 接下來,其中的圖形顯示程序發(fā)出用于應用的圖的開始命令,其觸發(fā) DM架構內的全局調度器的操作。作為響應,DM架構的內部線程遍歷 處理圖網絡以便依照全局調度器所設置的預定策略來引導媒體流經任 務連接(即任務模塊之間的連接),并且通過使用一個或多個任務模塊處理一個或多個媒體對象來執(zhí)行全局調度器中所列出的可用作業(yè)。
在一個實施例中,全局調度器自動使用預定策略來管理所定義的 執(zhí)行線程,所述執(zhí)行線程根據(jù)任務模塊之間的所選擇的連接來遍歷處 理圖網絡中用于執(zhí)行作業(yè)的任務模塊。全局調度器還保持對計算統(tǒng)計
(諸如單個任務和整體任務圖的平均等待時間(mean latency )和吞吐 量)的跟蹤,以便識別應用性能中的瓶頸。全局調度器包括供執(zhí)行線 程執(zhí)行的作業(yè)列表。從而,當在執(zhí)行作業(yè)之后執(zhí)行線程退出任務模塊 時,它返回參照全局調度器以便識別作業(yè)列表中待執(zhí)行的下 一 作業(yè)并 且進入相關聯(lián)的任務模塊以便對 一組相關聯(lián)的媒體對象執(zhí)行這樣的作 業(yè)。
圖1B依照本發(fā)明一個實施例圖示了全局調度器的操作。 在141,全局調度器動態(tài)地創(chuàng)建每個作業(yè)并把它存儲在其作業(yè)列表 中。例如,當任務模塊期望或需要的那些數(shù)據(jù)對象變得可用于所述任 務模塊時,創(chuàng)建并列出作業(yè)以供這樣的任務模塊執(zhí)行。在另一例子中, 當在源任務模塊(沒有輸入引腳)處想要作業(yè)例如用以產生媒體對象 或其它數(shù)據(jù)對象以便由DM架構中的其它任務模塊處理時,可以動態(tài) 地創(chuàng)建并列出作業(yè)。
在142,全局調度器根據(jù)一個或多個預定策略自動地調度其作業(yè)列 表中的每個作業(yè)的執(zhí)行。自動調度包括向特定的執(zhí)行線程分配每個列 出的作業(yè)。
在143, —旦每個作業(yè)被分配給執(zhí)行線程,全局調度器就從作業(yè)列 表中自動地去除該作業(yè),以免作業(yè)被分配給不同的執(zhí)行線程。因此, 全局調度器根據(jù)其自身預定策略的操作是自動的并且對應用開發(fā)者來 說是透明的。下面進一步描述全局調度器的預定策略。
圖3A-C依照本發(fā)明一個實施例提供了應用及其組成部分經歷方 法100的最后三個步驟(分解,組合和圖管理)時的圖解說明。在圖 3A中,在數(shù)據(jù)流分析之后,應用被分解為其組成任務和信號,如五個 處理任務310和四個信號才各式320所示。在圖3B中,如箭頭330所示, 則在把任務組合成任務結構期間任務相關性變得明確。最后,在圖3C 中,通過管理經過任務連接330的信號流由管理所完成的任務圖來執(zhí) 行應用。
圖4圖示了使用DM架構來構建或開發(fā)期望的應用的例子。首先,識別諸如同步照相機之類的信號源410。接下來,為期望的應用例示各
個任務模塊420-450。然后連接信號源410和任務模塊420-450以形成 單個的應用圖或處理圖網絡。然后,通過諸如開始、停止和破壞之類 的簡單的圖命令來管理所述圖。
架構
依照本發(fā)明一個實施例,按照設計,DM架構是設計的計算服務, 并且被建模在諸如計算機之類的單個計算機器中的執(zhí)行環(huán)境上。利用 這種模型,假定DM架構能控制機器上的計算資源。換句話說,DM架 構不會通過機器的操作系統(tǒng)(OS)調度器的異常行為(vagary)來爭 奪CPU資源。當然,在典型的非實時操作系統(tǒng)中,由于正常的OS操 作的先占權(preemption)而不滿足此假設。然而,通過使用DM架構 來在特定機器上實現(xiàn)所有計算密集型應用,已經確定這種假設是合理 的近似。
因為外部過程不會影響架構性能,所以預期所述架構也不會影響 外部過程也是合理的。可以通過把(應用的處理階段中的)過程劃分 為兩個類別計算和I/0,來進行該清晰的分離。計算過程花費顯著的 時間并且是對吞吐量敏感的。例如,視頻編解碼器可能具有顯著的等 待時間,但是如果它可以維持30 Hz的幀速率那么性能是很好的。另 一方面,I/O過程要求較少的時間來進行處理,但是對等待時間敏感。 例如,在新的位置繪制窗口相對迅速地纟皮完成,^旦是如果在^U于此任 務時存在延遲,那么用戶可能會注意到。類似觀點適用于在輸出設備 上播放音頻或者捕獲鍵盤上的擊鍵。因此,1/0操作(例如,偵聽照相 機設備或處理窗口事件)被小心地留給機器上的本地平臺或OS,并且 DM架構中的任務模塊變?yōu)闆]有任何I/O處理能力的計算模塊。把處理 劃分為計算任務和1/0任務的該分離轉化為兩個其它假設DM架構不 與其它計算密集型應用相竟爭,以及本地平臺不為1/0響應而與DM架 構相竟爭。
在一個實施例中,實現(xiàn)DM架構的上述計算模型包括人為降低架 構執(zhí)行線程的優(yōu)先級(priority )。這確保機器上的本地OS具有I/O響 應。因為I/CM艮迅速,所以機器中不必用于I/O的剩余CPU時間被給 予架構,所述架構是僅僅計算密集型應用。換句話說,在OS及其它標準優(yōu)先級的線程處理I/O過程時(并且只是在此之后),所述架構可操 作用以處理計算。
在機器的單處理器(例如,所述機器具有單核心的單處理器)情 況下,CPU作用于來自信號源的初始數(shù)據(jù)信號并且通過處理圖網絡來
傳播數(shù)據(jù)信號及其派生(descendent)信號(依照數(shù)據(jù)相關性所引導的 任何有效次序),直到信號的波被完全消耗為止。對下一初始信號類 似地重復此過程,等等。如果新的初始數(shù)據(jù)信號的平均到達率大于每 個數(shù)據(jù)波的平均完成率,那么 一 些初始數(shù)據(jù)信號可能被丟棄以便應用 保持流暢(即,避免隨著不斷增加的等待時間而不斷地落后)。
在多處理器或多核(例如,所述機器具有多個處理器或者一個或 多個多核處理器)情況下,諸如任務并行性和數(shù)據(jù)并行性之類的潛在 并行性顯著地改變了應用的動態(tài)行為。對于任務并行性來說,每個任 務模塊是順序的計算模塊,其內部狀態(tài)根據(jù)歷史先前計算來設置。這 種歷史的例子是手的跟蹤坐標,其中先前幀中的位置刪除了 (prune) 對當前幀中的位置的搜索。從而,為了允許預定歷史狀態(tài),順序地執(zhí) 行每個模塊中的代碼。這意味著在任何給定實例中只可以有 一 個執(zhí)行 線程駐留于特定的模塊中,這意味著"存活的"執(zhí)行線程的最大數(shù)目 是圖中的模塊數(shù)目。換句話說,順序模塊的處理圖網絡中可獲得的最 好并行性是任務并行性。即,具有等于模塊數(shù)目的處理器的機器達到 可用任務并行性的極限。因此,在任何給定實例中每個順序模塊基本 上消耗相當于 一 個處理器以只運行其中的 一 個執(zhí)行線程來執(zhí)行 一 個作 業(yè),并且因為沒有其它執(zhí)行線程可運行,所以另外的處理器也不再改 進性能。實際上,整個應用的吞吐量現(xiàn)在受最慢模塊的等待時間的限 制。應當注意的是,即便在此情況下,本發(fā)明的實施例仍然可以隨時 間推移把與給定任務模塊相關聯(lián)的作業(yè)處理移到不同的處理單元。
另一方面,數(shù)據(jù)并行性可以隨著處理器數(shù)目的增加而享受到線性 性能改進。為了在DM架構中使用數(shù)據(jù)并行性,至少一個任務模塊是 其中重新加入算法代碼的組合計算模塊,這是因為可以多個線程執(zhí)行 所述代碼以通過多個處理單元同時執(zhí)行或運行多個作業(yè)。線程常常在 執(zhí)行時間上不同,因此它們的輸出可能不是依次的。如果下游模塊是 組合的,那么所述線程繼續(xù)自由地運行,利用更多的數(shù)據(jù)并行性。然 而,如果下游模塊是順序的,那么產生線程一定被阻塞,直到在下游模塊的輸入緩沖器上獲得正確的序列。
如上所述,DM架構中的任務模塊按照它們的時間相關性被分類或 指定為組合的或順序的。組合模塊產生只是當前輸入的函數(shù)的輸出。 換句話說,這些模塊沒有先前執(zhí)行的任何內部歷史。從而,組合模塊 可以具有并非是先前計算的函數(shù)的內部狀態(tài)。另一方面,順序模塊具 有先前執(zhí)行的內部存儲器,因此輸出可以依賴于當前輸入和先前輸入 二者。在此情況下,數(shù)據(jù)必須依照正確的次序到達輸入??梢酝ㄟ^把 當前狀態(tài)傳送到下一執(zhí)行來把順序模塊轉換為組合模塊,其通過把附 加輸出鏈接到附加輸入來實現(xiàn)。此轉換對于表現(xiàn)更多的并行性是有用 的。從而在可以的情況下,大的順序模塊被分解為小的順序模塊和大
的組合模塊的組合。然而依照本發(fā)明一個實施例,在DM架構中指定
并使用組合模塊和順序模塊兩者來對應用進行建模,這是因為某些順 序模塊永遠不可能是組合的,并且它們固有的順序行為始終限制并行 量。這種模塊一般是源(例如,由諸如照相機之類的固有順序的輸入 設備觸發(fā)的模塊)或匯點(例如,用于把語音數(shù)據(jù)寫入到輸出緩沖器 中的音頻模塊)。
應當理解的是,每個順序或組合任務模塊可以由多處理環(huán)境中的
專用處理單元來運行或執(zhí)行。例如,處理單元1運行任務才莫塊A,處 理單元2運行任務模塊B,處理單元3運行任務模塊C,等等。作為選 擇, 一個或多個順序任務模塊可以由多處理環(huán)境中的一個處理單元來 運行或執(zhí)行。例如,處理單元1運行任務模塊A和B,處理單元2運 行任務模塊C,處理單元3運行任務模塊D、 E和F,等等。此外,每 個執(zhí)行線程根據(jù)被分配給它的作業(yè)可以使用多處理環(huán)境中的不同處理 單元來隨時間推移在 一 個或多個任務模塊中執(zhí)行分配給它的作業(yè)。例 如,單個執(zhí)行線程可以跳躍(hop)處理器,可以實現(xiàn)不同的任務,或 者可以隨時間推移同時做這兩點。
即便在由于使用順序模塊而導致的任務并行性限制內,在選擇哪 個任務來接下來執(zhí)行時還是存在很多選擇。在一個實施例中,全局調 度器可以實現(xiàn)用于作業(yè)的預定策略,所述策略有利于最小的端到端等 待時間。例如,可以實現(xiàn)策略以便有利于最老的初始信號的派生(該 派生在DM架構中仍然有效(active)),而不考慮在DM架構中所述 最老的初始信號是否仍然有效或者已經被使用或者被破壞。從而,使用那些派生信號的作業(yè)被給予執(zhí)行線程的優(yōu)先級以便由處理圖網絡中 的任務模塊處理。因此,可以向媒體對象提供時間戳,所述時間戳表 明它們被產生(或源)任務模塊創(chuàng)建的時間,從而使得DM架構可以
按優(yōu)先級排列(prioritize)包括這種對象及其派生的作業(yè)。作為選擇, 可以向媒體對象或任務對象提供優(yōu)先級標簽或其它指示符,其使DM
架構中的全局調度器能夠根據(jù)如較早所提及的預定策略來按優(yōu)先級排 列相關作業(yè)。例如,與視頻媒體對象相比可以給予音頻媒體對象優(yōu)先 級,并且利用優(yōu)先級標簽或指示符來表明它們的優(yōu)先級。 一旦根據(jù)相 關聯(lián)的媒體對象中的優(yōu)先級標簽或指示符確定了作業(yè)的執(zhí)行優(yōu)先級, 這種標簽或指示符就不再用于作業(yè)優(yōu)先化(prioritization)。
依照另 一實施例,全局調度器可以實現(xiàn)預定策略以根據(jù)底層 (underlying)任務使得某些作業(yè)比其它作業(yè)更受到優(yōu)待(favor)。例 如,根據(jù)多少其它任務依賴于特定作業(yè)的底層任務的輸出,向該特定 作業(yè)給予較高(或較低)的執(zhí)行線程的執(zhí)行優(yōu)先級。同樣,當作業(yè)還 不能提供用于其底層任務的所有必要輸入時,例如因為 一些輸入對于 其它任務模塊的輸出來說還不可用,所以向該作業(yè)給予較低的執(zhí)行優(yōu)
于執(zhí)行起過去了多久來i予某些(、或某個)作業(yè)更高(:戈更低r的優(yōu)
先級,以便由此使得已經等待了最長時間的任務和作業(yè)(一個或多個) 受到(或更不受到)優(yōu)待。
依照又一實施例,全局調度器可以實現(xiàn)預定策略,以便根據(jù)被給 予由相同處理單元或某些(或某個)選定處理單元來執(zhí)行的執(zhí)行線程 的優(yōu)先(preference),來使某些作業(yè)比其它作業(yè)更受到優(yōu)待。例如, 當全局調度器具有一個用于DM架構中的所有執(zhí)行線程的作業(yè)列表時, 每個執(zhí)行線程為這種作業(yè)列表在所述全局調度器中維持單獨的作業(yè)優(yōu) 先級列表。單獨的作業(yè)優(yōu)先級列表例如可以是每個執(zhí)行線程對作業(yè)列 表中的作業(yè)所放置的一定優(yōu)先級權重。這樣,與相同作業(yè)列表中的每
調度器可以通過為特定的執(zhí)^線程設置作業(yè)優(yōu)先級歹^表以按優(yōu)先級^ 列作業(yè)列表中接下來的作業(yè)的執(zhí)行從而減少執(zhí)行線程跳轉到不同處理 器的頻率,來改進高速緩存器的使用并且減少高速緩存器未命中的次 數(shù),其中所述接下來的作業(yè)被設置為在與該特定執(zhí)行線程相同的處理器上執(zhí)行。從而,通過去除如上所述的一些順序約束,全局調度器也 可以利用數(shù)據(jù)并行性。這對作為性能瓶頸的模塊來說是尤為重要的。 從而,全局調度器可以實現(xiàn)利用數(shù)據(jù)并行性來增強應用的性能的策略。
數(shù)據(jù)并行性的優(yōu)點之一在于"存活的(live)"線程的數(shù)目不必等于任
務模塊的數(shù)目或諸如處理器之類的處理單元的數(shù)目或多核處理器中的 核的數(shù)目。
因此,通過使用其對所有待決的處理請求的全局認知,全局調度 器可以進行即時(即,實時)、最佳效果的任務優(yōu)先化決定,例如決 定接下來要處理哪個媒體對象,以便減少端到端等待時間并且避免對 丟棄的媒體對象的浪費處理。例如,全局調度器可以提供任務調度,
所述任務調度對具有最老派生源(oldest ancestor)(即,最老的初始 信號)的媒體對象的執(zhí)行給予優(yōu)待,以便使端到端的等待時間最小化。 實時監(jiān)視工具使得開發(fā)者能夠查看模塊性能統(tǒng)計,以便查看應用中的 等待時間并且識別應用性能的瓶頸。
實現(xiàn)方式
圖5示出了 DM架構的實現(xiàn)體系500,其由抽象層540和架構內核 530形成,所述架構內核530位于運行所述應用的機器的本地OS 550 和應用510之間。4由象層540"fc架構內核530與由本地OS 550所表示 的主機平臺相隔離,以便保持架構內核是獨立于平臺的。組件庫520 包含許多 一般可重復使用的模塊。應用開發(fā)者可以訪問所有層次。
最低的層次位于如由本地OS 550所表示的主機平臺,其包括三個 元素(element):多線程支持、計時才幾制(timing mechanism )和編禾呈 編譯器(例如,ANSIC十+編譯器)。多線程支持包括用于控制計算的 線程抽象以及控制線程所必須的同步對象。盡管DM架構可以在單處 理器機器上運行,不過在一個實施例中底層硬件是對稱式多處理器 (SMP)機器,以便從并行執(zhí)行或處理中受益。在這種情況下,抽象 層540變?yōu)镾MP抽象層。計時機制被期望用于性能分析,諸如等待時 間測量。編程編譯器被期望來產生可執(zhí)行程序,并且這種編譯器應當 具有標準的模板庫(例如,〔++標準模板庫),以便能夠貫穿DM架構 使用其中所提供的抽象(例如,字符串,向量,映射,集合,雙隊列)。
SMP抽象層540是第一中間件層次。它簡化了 DM架構到其它平臺和操作系統(tǒng)的移植。線程抽象向DM架構提供了用于命名、產生并 調試OS線程的能力。利用本地平臺調用來執(zhí)行實際的線程創(chuàng)建,并且 每個線程可以具有與其唯一的名稱相關聯(lián)的日志文件,從而允許創(chuàng)建
每個線程的執(zhí)行追蹤(trace)?;コ?Mutex)和信號量(Semaphore) 抽象使得能夠同步線程?;コ馐怯糜诜乐?一個以上線程同時進行代碼 執(zhí)行的標準互斥對象,信號量是用于在線程之間發(fā)送信號的標準的高 效機制。秒表(StopWatch )或計時器(Timer )抽象使得使用平臺計時 功能來測量時間的能力被封裝。測量時間對于性能分析來說是必須的。 第二中間件層次,即架構內核530,實現(xiàn)了所有架構應用所使用的 核心數(shù)據(jù)流功能。它提供用于構建應用的可擴展任務和媒體抽象。架 構內核還在內部具有用于管理其自身復雜度的幾個抽象。首先,輸入 引腳(InputPin)和輸出引腳(OutputPin)對象表示用于傳送々某體對象 的任務對象之間的連接。其次,圖對象對相互連接的任務對象進行管 理,并且充當全圖范圍的(graph-wide )命令(諸如start()和stop())的 接口。圖形命令具有單個任務參數(shù)(argument),但是使用連接性來遍 歷整個應用圖,并且向圖中的每個模塊應用所述命令。再次,存儲管 理器對象提供用于存儲媒體對象的存儲緩沖器。它跟蹤緩沖器的使用, 具有重新使用先前分配的緩沖器的設施,并且可以報告存儲器統(tǒng)計。 如前所述,全局調度器位于架構內核530中,用于對遍歷處理圖網絡 的執(zhí)行線程進行管理,從而保持跟蹤諸如平均等待時間和吞吐量之類 的計算統(tǒng)計。
組件庫520是位于應用和內核之間的可重復使用組件的不斷發(fā)展 的集合。與其重新實現(xiàn)通用的功能性(例如,音頻記錄或圖像的色彩-空間轉換),應用開發(fā)者可能不如從可重復使用組件庫520中找到有 用的預構建任務對象。預構建的任務對象的例子包括但不限于照相 機接口、圖形功能性、音頻和視頻編解碼器、聯(lián)網模塊等。利用其它 人的工作是迅速開發(fā)的一個重要方面。
最終的實現(xiàn)層是諸如流媒體應用之類的應用510,其可以訪問所有 先前的層。為了促進進一步的平臺獨立性,所述應用可以訪問為DM 架構所創(chuàng)建的任何低層次的庫中的所有內部對象,使得所述DM網絡 不必擔心在不同平臺上實現(xiàn)的較低庫層次中的那些類。然而在架構內 核530中,只有任務抽象和媒體抽象是可訪問的,以便使DM架構接口的復雜度最小化。通過任務對象和媒體對象或通過靜態(tài)架構過程來 間接地訪問內部對象。
依照本發(fā)明一個實施例,DM架構具有多個區(qū)別性的實現(xiàn)特征。首
先,存在用于將輸入或輸出引腳進行分組的便利機制,如果事先得知
在那些引腳上的數(shù)據(jù)應當始終被關聯(lián)在一起的話。例如,圖4的組合 模塊440將始終對一對圖像進行操作。通過把輸入引腳置于相同的輸 入組中,只有當兩個圖像都已經到達時所述模塊才開始操作,從而避 免了開發(fā)者需要管理并關聯(lián)輸入圖像。因為事先得知此關聯(lián),所以它 被稱作靜態(tài)同步。第二,來自任務模塊的輸出引腳的"fanout(扇出)" 是可用的,其中任務模塊的輸出引腳可以被輸入到多個任務。從而, 從一個任務模塊所輸出的媒體對象可以隨后被多個其它任務來使用。 此外,輸出媒體可以是只讀的,使得如果多個其它任務不必修改媒體 對象而僅使用它來執(zhí)行其它作業(yè),那么不必在架構存儲器中進行所述 媒體對象的復制拷貝。從而,包含所述媒體對象的相同存儲緩沖器可 以被發(fā)送到所有的接收任務模塊。
第三關鍵的實現(xiàn)特征是自動串行化(serialization)。媒體基類具 有不管媒體對象的復雜度如何都可以弄平(flatten)任何媒體對象的強 大的串行化過程。媒體對象可以既有固定長度字段(例如,圖像尺寸, 格式規(guī)范)又有可變長度字段(例如,圖像字節(jié),音頻數(shù)據(jù))。串行 化過程能夠遍歷任何深層(deep )媒體結構并且把它轉換到單個平坦緩 沖器(flat buffer)中,以便由DM網絡輸出為串行表示,諸如文件或 網絡流。同樣,自動的去串行化過程可以讀取弄平的表示并且把它轉 換回存儲器中的深層媒體結構以便由DM網絡來處理。從而,應用開 發(fā)者不必關注把媒體對象轉換為適當?shù)母袷揭员阌蒁M網絡處理,或 者在由所述DM網絡處理之后轉換回媒體對象,以便有效地存儲這種 輸出媒體對象。
在一個實施例中,組件庫520、架構內核530和SMP抽象層540 可以通過一個或多個具有計算機可執(zhí)行程序的模塊、軟件程序或應用 來實現(xiàn),所述計算機可沖丸行程序包括來自任何適當?shù)挠嬎銠C編程語言 (諸如C, C++, C#, Java等)的代碼,所述計算機可執(zhí)行程序可由計 算機化系統(tǒng)來執(zhí)行,所述計算機化系統(tǒng)包括計算機或計算機網絡。計 算機化系統(tǒng)的例子包括但不限于 一個或多個臺式計算機、 一個或多個膝上型計算機、 一個或多個大型計算機、 一個或多個聯(lián)網計算機、 一個或多個基于處理器的設備或任何類似類型的系統(tǒng)和設備。圖6圖
示了計算機化系統(tǒng)600的框圖,所述計算機化系統(tǒng)600可操作以被用 作用于實現(xiàn)圖5中的體系500的平臺。應當理解的是,可操作使用更 復雜的計算機化系統(tǒng)。此外,可以向/從計算機化系統(tǒng)600添加/去除組 件以便提供期望的功能。
計算機系統(tǒng)600包括一個或多個處理器,諸如處理器602,從而提 供用于執(zhí)行軟件的執(zhí)行平臺。因此,計算機化系統(tǒng)600包括任何數(shù)目 的計算機處理器中的一個或多個單核或多核處理器,諸如來自Intel、 Motorola、 AMD和Cyrix的處理器。如這里所提及的,計算機處理器 可以是通用處理器,諸如中央處理器(CPU)或任何其它多功能處理 器或微處理器。計算機處理器還可以是專用處理器,諸如圖形處理單 元(GPU)、音頻處理器、數(shù)字信號處理器或專用于一個或多個處理 目的的其它處理器。通過通信總線604來傳送來自處理器602的命令 和數(shù)據(jù)。計算機系統(tǒng)600還包括主存儲器606和輔助存儲器608,其中 軟件在運行期期間位于所述主存儲器606中。輔助存儲器608還可以 是可以用來存儲軟件程序、應用或模塊的CRM,所述軟件程序、應用 或模塊實現(xiàn)了體系500的一個或多個組件。主存儲器606和輔助存儲 器608均包括例如其中存儲有軟件拷貝的硬盤驅動器和/或可拆卸存儲 驅動器或非易失存儲器,所述可拆卸存儲驅動器代表軟盤驅動器、磁 帶驅動器、光盤驅動器等。在一個例子中,輔助存儲器608還包括ROM (只讀存儲器)、EPROM (可4察除的可編程ROM) 、 EEPROM (電 可擦除的可編程ROM)或任何其它電子、光、磁或其它存儲或傳輸設 備,其能夠向處理器或處理單元提供計算機可讀指令。計算機系統(tǒng)600 包括顯示器614和用戶接口,所述用戶接口包括一個或多個輸入設備 612,諸如鍵盤、鼠標、觸針等。然而,輸入設備612和顯示器614是 可選的。提供網絡接口 610以用于與其它計算機系統(tǒng)進行通信。
可以預期可替換的實施例,其中組件520、 530和540中的每一個 都可以在單獨的計算機化系統(tǒng)中實現(xiàn),或者其中這些組件中的一些由 一個計算機化系統(tǒng)執(zhí)行而其它組件由另 一計算機化系統(tǒng)執(zhí)行,或者架 構內核530中的至少一些任務模塊由不同的計算機化系統(tǒng)執(zhí)行。因此, 中間件架構可以運行在多處理環(huán)境中??傊瑧瞄_發(fā)者能夠指定DM架構中執(zhí)行線程的數(shù)目以便達到 最大或最想要的并行性。在一個實施例中,線程數(shù)目被設置為等于處 理器數(shù)目。在另一實施例中,線程數(shù)目大于處理器數(shù)目,特別是在所
述線程可以被分塊(block)到計算模塊內部時尤其如此。然而在應用
的調試期間,使用單個執(zhí)行線程是極為有用的,從而使得它可以被容 易地跟蹤。
這里所描述并圖示的是實施例及其一些變形例。這里所使用的術 語、描述和圖形僅以舉例形式進行闡明而并不意味著進行限制。本領 域技術人員會認識到,意在由所附權利要求及其等效方式所定義的主 題精神和范圍內可以進行許多變化,其中除非另有陳述否則所有術語 意思是最寬泛的合理意義。
權利要求
1. 一種用于在具有多個處理單元的多處理環(huán)境中提供中間件架構以便開發(fā)期望的應用的方法,包括接收對用于開發(fā)期望的應用(130)的多個任務模塊的選擇;接收在所選擇的任務模塊之間的連接以便形成期望的應用(130);接收多個執(zhí)行線程的輸入以便經由所形成的應用(130)來進行處理;以及至少通過以下手段來在整個中間件架構上提供對所述多個執(zhí)行線程(140)的自動的全局調度提供至少一個作業(yè)的作業(yè)列表以供所述多個執(zhí)行線程中的至少一個執(zhí)行,所述至少一個作業(yè)中的每個作業(yè)都是通過所選擇的任務模塊(141)中相關聯(lián)的那個任務模塊而進行的對一個或多個數(shù)據(jù)對象的處理;以及根據(jù)至少一個預定策略(142)來自動調度所述多個執(zhí)行線程中的一個對所述作業(yè)列表中的每個作業(yè)的執(zhí)行。
2. 如權利要求1所述的方法,進一步包括顯示所形成應用的圖網絡表示,以便示出所選擇的任務模塊、所 接收的在所述任務模塊之間的連接以及所形成的應用(140)的吞吐量 統(tǒng)計和等待時間之一。
3. 如權利要求1所述的方法,其中被調度以由多個執(zhí)行線程之一執(zhí) 行的至少一個作業(yè)包括多個作業(yè)(142),并且所述方法進一步包括根據(jù)所述調度,所述一個執(zhí)行線程在所選擇的任務模塊的至少兩 個任務才莫塊中并且通過多個處理單元中的至少兩個處理單元來自動地執(zhí)行所述多個作業(yè)。
4. 如權利要求1所述的方法,其中所述至少一個預定策略是基于在 與每個作業(yè)相關聯(lián)的一個或多個數(shù)據(jù)對象中的每個中所發(fā)現(xiàn)的優(yōu)先級指示符的。
5. 如權利要求4所述的方法,其中每個數(shù)據(jù)對象的優(yōu)先級指示符包 括以下之一a) 每個數(shù)據(jù)對象的時間戳;以及b) 最早的數(shù)據(jù)對象的時間戳,所述每個數(shù)據(jù)對象是該最早的數(shù)據(jù) 對象的派生。
6. 如權利要求1所述的方法,其中至少一個預定策略是基于以下之a) 與作業(yè)列表中被調度以用于執(zhí)行的作業(yè)相關聯(lián)的所選擇任務模 塊之一的任務類型;b) 執(zhí)行所述多個執(zhí)行線程之一的多個處理單元之一的標識;c) 上一次執(zhí)行作業(yè)列表中的作業(yè)的所選擇任務模塊之一 的標識;以及d) 確定作業(yè)列表中的作業(yè)具有可用的一個或多個數(shù)據(jù)對象,所述 一個或多個數(shù)據(jù)對象是待執(zhí)行的該作業(yè)所期望的。
7. 如權利要求1所述的方法,其中至少一個預定策略是基于所選擇 任務模塊中有多少其它任務模塊是依賴于與每個作業(yè)相關聯(lián)的所選任 務模塊的輸出的。
8. 如權利要求1所述的方法,其中提供作業(yè)列表包括 響應于以下之一動態(tài)地產生作業(yè)列表中的每個作業(yè)a)所選擇的任務模塊之一接收到用于處理的至少 一個數(shù)據(jù)對象;以及b )所選擇的任務模塊之 一 是期望產生至少 一 個數(shù)據(jù)對象的源模塊。
9. 一種被編碼為計算機可讀介質中的程序代碼的中間件架構,用于 在具有多個處理單元的多處理平臺上開發(fā)期望的應用,所述中間件架構包括被編碼為計算機可讀介質中的程序代碼的架構內核(530 ),用以 產生任務模塊和媒體對象以便構建并運行期望的應用,所述架構內核 包括被編碼為所述架構內核的程序代碼的一部分的全局調度器, 用以在整個中間件架構上為多個執(zhí)行線程提供自動的全局調度,以便 根據(jù)由所述全局調度器所維持的作業(yè)列表和至少一個預定策略通過所 產生的任務模塊來處理所產生的媒體對象,每個作業(yè)是通過所產生的 任務模塊中相關聯(lián)的那個任務模塊而進行的對一 個或多個數(shù)據(jù)對象的 處理;以及被編碼為計算機可讀介質中的程序代碼的抽象層(540 ),用以把 所述架構內核與多處理平臺相隔離,以保持所述架構內核是獨立于平臺的。
10. —種計算機可讀介質,其上有經編碼的程序代碼,用于在具有 多個處理單元的多處理環(huán)境中提供中間件架構以用于構建期望的應用,所述計算機可讀介質包括用于接收對多個任務模塊的選擇以便構建期望的應用(130)的程 序代碼;用于接收在所選擇的任務模塊之間的連接以便形成期望的應用 (130)的程序代碼;用于接收多個執(zhí)行線程的輸入以便通過所形成的應用(130)來處 理的程序代碼;以及用于通過具有至少以下程序代碼來在整個中間件架構上提供對所 述多個執(zhí)行線程(140)的自動的全局調度的程序代碼用于提供至少 一 個作業(yè)的作業(yè)列表以供所述多個執(zhí)行線程中 的至少一個執(zhí)行的程序代碼,至少一個作業(yè)中的每個作業(yè)是通過所選 擇的任務模塊(141)中相關聯(lián)的那個任務模塊而進行的對一個或多個 數(shù)據(jù)對象的處理;以及用于根據(jù)至少一個預定策略(142)來自動調度所述多個執(zhí)行 線程之一對所述作業(yè)列表中的每個作業(yè)的執(zhí)行的程序代碼。
全文摘要
這里描述了一種用于在具有多個處理單元的多處理環(huán)境中提供中間件架構以便開發(fā)期望的應用的方法。所述方法包括接收對用于開發(fā)期望的應用(130)的多個任務模塊的選擇;接收在所選擇的任務模塊之間的連接以便形成期望的應用(130);接收多個執(zhí)行線程的輸入以便經由所形成的應用(130)來進行處理;以及至少通過以下手段來在整個中間件架構上提供對所述多個執(zhí)行線程(140)的自動的全局調度a)提供至少一個作業(yè)的作業(yè)列表以供所述多個執(zhí)行線程中的至少一個執(zhí)行,所述至少一個作業(yè)中的每個作業(yè)都是通過所選擇的任務模塊(141)中相關聯(lián)的那個任務模塊而進行的對一個或多個數(shù)據(jù)對象的處理;以及b)根據(jù)至少一個預定策略(142)來自動調度所述多個執(zhí)行線程中的一個對所述作業(yè)列表中的每個作業(yè)的執(zhí)行。
文檔編號G06F9/44GK101535953SQ200780040783
公開日2009年9月16日 申請日期2007年10月30日 優(yōu)先權日2006年10月31日
發(fā)明者D·坦圭, D·格爾布, M·哈維爾 申請人:惠普開發(fā)有限公司