基于dag節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法及裝置制造方法
【專利摘要】本發(fā)明提供一種基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法及裝置,其中的方法包括:根據(jù)各模型之間的關(guān)系創(chuàng)建基于各模型關(guān)系的DAG圖;根據(jù)基于路徑探測(cè)的最優(yōu)路徑分析算法將DAG圖拆分為調(diào)度序列集合;其中,在調(diào)度序列集合中包括多個(gè)并行調(diào)度的序列;將調(diào)度序列集合中的所有并行調(diào)度的序列存儲(chǔ)為第一鄰接矩陣;將第一鄰接矩陣映射成鄰接表;根據(jù)鄰接表并行運(yùn)行調(diào)度序列集合中的各個(gè)序列。利用本發(fā)明提供的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法及裝置,能夠解決現(xiàn)有拆分方法中復(fù)雜度高、運(yùn)行時(shí)間長的問題;還能夠充分利用系統(tǒng)資源,有效縮短多模型的調(diào)度運(yùn)行時(shí)間。
【專利說明】基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及模型調(diào)度【技術(shù)領(lǐng)域】,更為具體地,涉及一種基于DAG節(jié)點(diǎn)最優(yōu)路徑的 多模型并行調(diào)度方法及裝置。
【背景技術(shù)】
[0002] 復(fù)雜產(chǎn)品的設(shè)計(jì)和運(yùn)行過程中,往往涉及不同種類、不同復(fù)雜度、相互關(guān)聯(lián)的多種 模型,多模型的調(diào)度方法直接影響產(chǎn)品運(yùn)行的可行性和時(shí)效性。多模型調(diào)度方法主要是利 用DAG圖(Directed Acyclic Graph,有向無環(huán)圖)描述模型間的前驅(qū)后繼關(guān)系,在DAG圖 中,DAG的節(jié)點(diǎn)代表模型,DAG的邊代表模型間的依賴關(guān)系。
[0003] 圖1為模型系統(tǒng)的DAG圖,由圖1可以看出,DAG圖描述了多個(gè)模型及其相互間的 依賴關(guān)系。其中,圓形左側(cè)數(shù)據(jù)代表節(jié)點(diǎn)序號(hào),1?10代表參與調(diào)度的10個(gè)模型,圓形右側(cè) 的數(shù)據(jù)代表模型執(zhí)行時(shí)間,有向線段代表模型間的依賴關(guān)系,后繼節(jié)點(diǎn)必須在其前驅(qū)節(jié)點(diǎn) 執(zhí)打完成后才可以執(zhí)打。
[0004] 在通常的多模型調(diào)度方法中,模型是串行執(zhí)行的,調(diào)度周期長,不能充分發(fā)揮多核 處理器和分布式環(huán)境下的并行優(yōu)勢(shì),浪費(fèi)系統(tǒng)資源。
[0005] 為了實(shí)現(xiàn)多模型的并行調(diào)度,一般將DAG圖拆分為可并行調(diào)度的序列?,F(xiàn)有的被 廣泛使用的DAG圖拆分方法是In-tree方法,即根據(jù)DAG圖中各個(gè)節(jié)點(diǎn)的出度和入度,將 DAG圖轉(zhuǎn)換成In-tree結(jié)構(gòu),然后分析In-tree結(jié)構(gòu)中包含的所有路徑,找到可并行調(diào)度的 序列。但是,該In-tree方法需要對(duì)所有節(jié)點(diǎn)、In-tree所有路徑進(jìn)行分析,計(jì)算復(fù)雜度高、 運(yùn)行時(shí)間長,嚴(yán)重影響系統(tǒng)的運(yùn)行效率。
[0006] 因此,需要一種全新的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法,以充分發(fā) 揮多核處理器和分布式環(huán)境下的并行優(yōu)勢(shì),避免浪費(fèi)系統(tǒng)資源,提高系統(tǒng)的運(yùn)行效率。
【發(fā)明內(nèi)容】
[0007] 鑒于上述問題,本發(fā)明的目的是提供一種基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào) 度方法及裝置,以解決現(xiàn)有的多模型并行調(diào)度方法中,調(diào)度周期長,不能充分發(fā)揮多核處理 器和分布式環(huán)境下的并行優(yōu)勢(shì),浪費(fèi)系統(tǒng)資源的問題。
[0008] 本發(fā)明提供的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法,包括:
[0009] 根據(jù)各|吳型之間的關(guān)系創(chuàng)建基于各|吳型關(guān)系的DAG圖;
[0010] 根據(jù)基于路徑探測(cè)的最優(yōu)路徑分析算法將DAG圖拆分為調(diào)度序列集合;其中,在 調(diào)度序列集合中包括多個(gè)并行調(diào)度的序列;
[0011] 將調(diào)度序列集合中的所有并行調(diào)度的序列存儲(chǔ)為第一鄰接矩陣;
[0012] 將第一鄰接矩陣映射成鄰接表;
[0013] 根據(jù)鄰接表并行運(yùn)行調(diào)度序列集合中的各個(gè)序列。
[0014] 本發(fā)明提供的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度裝置,包括:
[0015] DAG圖創(chuàng)建單元,用于根據(jù)各模型之間的關(guān)系創(chuàng)建基于各模型關(guān)系的DAG圖;
[0016] DAG圖拆分單元,用于根據(jù)基于路徑探測(cè)的最優(yōu)路徑分析算法將DAG圖拆分為調(diào) 度序列集合;其中,在調(diào)度序列集合中包括多個(gè)并行調(diào)度的序列;
[0017] 序列存儲(chǔ)單元,用于將調(diào)度序列集合中的所有并行調(diào)度的序列存儲(chǔ)為第一鄰接矩 陣;
[0018] 矩陣映射單元,用于將第一鄰接矩陣映射成鄰接表;
[0019] 序列運(yùn)行單元,用于根據(jù)鄰接表并行運(yùn)行調(diào)度序列集合中的各個(gè)序列。
[0020] 利用上述根據(jù)本發(fā)明提供的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法及裝 置,能夠?qū)AG圖拆分可并行調(diào)度的序列,解決現(xiàn)有拆分方法中復(fù)雜度高、運(yùn)行時(shí)間長的問 題;同時(shí)針對(duì)現(xiàn)有最優(yōu)路徑分析方法的不足,提出一種基于路徑探測(cè)的最優(yōu)路徑分析算法; 另外,根據(jù)子路徑判斷的實(shí)際需求,提出了一種基于統(tǒng)一存儲(chǔ)的路徑子路徑判斷方法,結(jié)合 上述兩個(gè)方面能夠充分利用系統(tǒng)資源,并且有效縮短多模型的調(diào)度運(yùn)行時(shí)間。
[0021] 為了實(shí)現(xiàn)上述以及相關(guān)目的,本發(fā)明的一個(gè)或多個(gè)方面包括后面將詳細(xì)說明并在 權(quán)利要求中特別指出的特征。下面的說明以及附圖詳細(xì)說明了本發(fā)明的某些示例性方面。 然而,這些方面指示的僅僅是可使用本發(fā)明的原理的各種方式中的一些方式。此外,本發(fā)明 旨在包括所有這些方面以及它們的等同物。
【專利附圖】
【附圖說明】
[0022] 通過參考以下結(jié)合附圖的說明及權(quán)利要求書的內(nèi)容,并且隨著對(duì)本發(fā)明的更全面 理解,本發(fā)明的其它目的及結(jié)果將更加明白及易于理解。在附圖中:
[0023] 圖1為模型系統(tǒng)的DAG圖;
[0024] 圖2為根據(jù)本發(fā)明實(shí)施例的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法的流程 示意圖;
[0025] 圖3為根據(jù)本發(fā)明實(shí)施例的基于節(jié)點(diǎn)最優(yōu)路徑的DAG圖拆分方法的流程示意圖;
[0026] 圖4為根據(jù)本發(fā)明實(shí)施例的基于路徑探測(cè)的最優(yōu)路徑分析算法的流程示意圖;
[0027] 圖5為根據(jù)本發(fā)明實(shí)施例的子路徑判斷方法流程示意圖;
[0028] 圖6為根據(jù)本發(fā)明實(shí)施例的基于DAG節(jié)點(diǎn)最短路徑并行調(diào)度結(jié)果圖;
[0029] 圖7為根據(jù)本發(fā)明實(shí)施例的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度裝置的結(jié)構(gòu) 示意圖;
[0030] 圖8為根據(jù)本發(fā)明實(shí)施例的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度裝置的一個(gè)
【具體實(shí)施方式】的結(jié)構(gòu)示意圖。
[0031] 在所有附圖中相同的標(biāo)號(hào)指示相似或相應(yīng)的特征或功能。
【具體實(shí)施方式】
[0032] 在下面的描述中,出于說明的目的,為了提供對(duì)一個(gè)或多個(gè)實(shí)施例的全面理解,闡 述了許多具體細(xì)節(jié)。然而,很明顯,也可以在沒有這些具體細(xì)節(jié)的情況下實(shí)現(xiàn)這些實(shí)施例。 在其它例子中,為了便于描述一個(gè)或多個(gè)實(shí)施例,公知的結(jié)構(gòu)和設(shè)備以方框圖的形式示出。
[0033] 針對(duì)現(xiàn)有的多模型調(diào)度方法中DAG圖拆分方法復(fù)雜度高、運(yùn)行時(shí)間長,系統(tǒng)運(yùn)行 效率低的問題,本發(fā)明提出一種基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度解決方案,采用 基于路徑探測(cè)的最優(yōu)路徑分析算法將DAG圖拆分可并行調(diào)度的序列,再將可并行調(diào)度的序 列存儲(chǔ)為鄰接矩陣的形式,對(duì)鄰接矩陣進(jìn)行映射轉(zhuǎn)化成鄰接表,最后將可并行調(diào)度的序列 以鄰接表的形式并行運(yùn)行各個(gè)序列。
[0034] 需要說明的是,上述節(jié)點(diǎn)的最優(yōu)路徑指的是起始節(jié)點(diǎn)到該節(jié)點(diǎn)的最短路徑。
[0035] 以下將結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施例進(jìn)行詳細(xì)描述。
[0036] 圖2示出了根據(jù)本發(fā)明實(shí)施例的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法的 流程。
[0037] 如圖2所示,本發(fā)明實(shí)施例提供的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法, 包括:
[0038] 步驟S201 :根據(jù)各模型之間的關(guān)系創(chuàng)建基于各模型關(guān)系的DAG圖。
[0039] 其中,DAG圖是有向無環(huán)圖,用來描述各個(gè)模型間的前驅(qū)后繼關(guān)系,DAG圖中的第 一個(gè)節(jié)點(diǎn)為起始節(jié)點(diǎn),最后一個(gè)節(jié)點(diǎn)為終止節(jié)點(diǎn),起始節(jié)點(diǎn)和終止節(jié)點(diǎn)間的節(jié)點(diǎn)為中間節(jié) 點(diǎn),以圖1為例,如果當(dāng)前節(jié)點(diǎn)為節(jié)點(diǎn)2,則節(jié)點(diǎn)1為節(jié)點(diǎn)2的前驅(qū)節(jié)點(diǎn),節(jié)點(diǎn)3、節(jié)點(diǎn)4、節(jié)點(diǎn) 5、節(jié)點(diǎn)6為節(jié)點(diǎn)2的后繼節(jié)點(diǎn),其它節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)同理。
[0040] 步驟S202 :根據(jù)基于路徑探測(cè)的最優(yōu)路徑分析算法將DAG圖拆分為調(diào)度序列集 合;其中,在調(diào)度序列集合中包括多個(gè)并行調(diào)度的序列。
[0041] 根據(jù)基于路徑探測(cè)的最優(yōu)路徑分析算法將DAG圖拆分為調(diào)度序列集合具體的過 程為:采用最優(yōu)路徑分析算法按照從終止節(jié)點(diǎn)到起始節(jié)點(diǎn)的順序查找每個(gè)中間節(jié)點(diǎn)的最優(yōu) 路徑,并將每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入調(diào)度序列集合;每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑分別對(duì) 應(yīng)一個(gè)序列,多個(gè)并行調(diào)度的序列至少包括兩個(gè)序列。
[0042] 其中,在采用基于路徑探測(cè)的最優(yōu)路徑分析算法查找每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑的 過程中,對(duì)起始節(jié)點(diǎn)與每個(gè)中間節(jié)點(diǎn)間的路徑進(jìn)行雙向探測(cè),過濾掉起始節(jié)點(diǎn)與每個(gè)中間 節(jié)點(diǎn)之間不存在通路的節(jié)點(diǎn),并保留起始節(jié)點(diǎn)和每個(gè)中間節(jié)點(diǎn)間之間最短的路徑作為每個(gè) 中間節(jié)點(diǎn)的最優(yōu)路徑加入到調(diào)度序列集合中。
[0043] 作為一個(gè)【具體實(shí)施方式】,在將每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入調(diào)度序列集合之前, 判斷每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑是否為調(diào)度序列集合中最優(yōu)路徑的子路徑;如果是,此中間 節(jié)點(diǎn)的最優(yōu)路徑不加入所述調(diào)度序列集合;如果否,將此中間節(jié)點(diǎn)的最優(yōu)路徑加入所述調(diào) 度序列集合。
[0044] 需要說明的是,調(diào)度序列集合為一個(gè)大的空間,用來存儲(chǔ)可并行調(diào)度的序列,因 此,在拆分DAG圖的過程中,將DAG圖拆分為一個(gè)調(diào)度序列集合,下文中提到的其它集合也 為一個(gè)。
[0045] 步驟S203 :將調(diào)度序列集合中的所有并行調(diào)度的序列存儲(chǔ)為第一鄰接矩陣。
[0046] 由于多個(gè)并行調(diào)度的序列分別對(duì)應(yīng)一個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑,將多個(gè)并行調(diào)度的 序列存儲(chǔ)為第一鄰接矩陣就是將多個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑以鄰接矩陣的形式存儲(chǔ)。
[0047] 步驟S204 :將第一鄰接矩陣映射成鄰接表。
[0048] 最終以鄰接表的形式存儲(chǔ)多個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑,有利于系統(tǒng)的運(yùn)行。
[0049] 步驟S205 :根據(jù)鄰接表并行運(yùn)行調(diào)度序列集合中的各個(gè)序列。
[0050] 實(shí)際上運(yùn)行的是與各個(gè)序列相對(duì)應(yīng)的最優(yōu)路徑,也就是可并行調(diào)度的最優(yōu)路徑。
[0051] 上述步驟為實(shí)現(xiàn)本發(fā)明實(shí)施例提供的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度 方法所采取的數(shù)據(jù)處理步驟,其中,本發(fā)明實(shí)施的主要細(xì)節(jié)在于DAG圖的拆分方法和拆分 DAG圖用到的最優(yōu)路徑分析算法,以及在拆分過程中涉及到的子路徑判斷方法,下面分別對(duì) 這三個(gè)方面進(jìn)行詳細(xì)地說明。
[0052] 一、DAG圖的拆分方法
[0053] 為了解決現(xiàn)有的DAG圖拆分方法中計(jì)算復(fù)雜度高、運(yùn)行時(shí)間長,系統(tǒng)運(yùn)行效率低 的問題,本發(fā)明實(shí)施例采用最優(yōu)路徑分析算法將DAG圖拆分為調(diào)度序列集合,也就是將DAG 圖拆分為多個(gè)可并行調(diào)度的序列,每個(gè)序列為一個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑,最后執(zhí)行的就是 可并行調(diào)度的多個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑。
[0054] 圖3示出了根據(jù)本發(fā)明實(shí)施例的基于節(jié)點(diǎn)最優(yōu)路徑的DAG圖拆分方法的流程,如 圖3所示,本發(fā)明實(shí)施例提供的基于節(jié)點(diǎn)最優(yōu)路徑的DAG圖拆分方法包括:
[0055] 步驟S301 :初始化當(dāng)前節(jié)點(diǎn)集合、已完成節(jié)點(diǎn)集合與調(diào)度序列集合。
[0056] 初始化當(dāng)前節(jié)點(diǎn)集合的目的是為了在內(nèi)存中創(chuàng)建一個(gè)空間用來存儲(chǔ)將要進(jìn)行最 優(yōu)路徑計(jì)算的節(jié)點(diǎn),初始化已完成節(jié)點(diǎn)集合的目的同樣是為了在內(nèi)存中創(chuàng)建一個(gè)空間,用 來存儲(chǔ)經(jīng)過計(jì)算的最優(yōu)路徑的節(jié)點(diǎn);而初始化調(diào)度序列集合的目的則是為了在內(nèi)存中創(chuàng)建 一個(gè)存儲(chǔ)節(jié)點(diǎn)的最優(yōu)路徑的空間。
[0057] 步驟S302 :輸入DAG圖。
[0058] 在創(chuàng)建DAG圖后,將DAG圖輸入到內(nèi)存中,用于對(duì)DAG圖進(jìn)彳丁拆分DAG圖內(nèi)存中可 以用多種形式存儲(chǔ),例如列表或矩陣等等。
[0059] 步驟S303 :將終止節(jié)點(diǎn)加入當(dāng)前節(jié)點(diǎn)集合。
[0060] 在本發(fā)明的實(shí)施例中,采用從終止節(jié)點(diǎn)向起始節(jié)點(diǎn)的順序計(jì)算每個(gè)中間節(jié)點(diǎn)的最 優(yōu)路徑,由于在計(jì)算每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑的過程中,需要對(duì)每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑 進(jìn)行是否存在子路徑的判斷,也就是說一個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑是否為其后繼節(jié)點(diǎn)的最優(yōu) 路徑的子路徑,如果是,該中間節(jié)點(diǎn)的最優(yōu)路徑是不需要加入調(diào)度序列集合的,此時(shí)只需要 將該中間節(jié)點(diǎn)的后繼節(jié)點(diǎn)的最優(yōu)路徑加入調(diào)度序列集合即可,由于按照從起始節(jié)點(diǎn)到終止 節(jié)點(diǎn)的順序不能判斷出一個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑是否為其后繼節(jié)點(diǎn)的最優(yōu)路徑的子路徑, 此時(shí)需要計(jì)算所有到達(dá)該后繼節(jié)點(diǎn)的路徑,比較所有到達(dá)該后繼節(jié)點(diǎn)的路徑后才能獲得該 后繼節(jié)點(diǎn)的最優(yōu)路徑,這樣會(huì)增大計(jì)算量和復(fù)雜度,而采用從終止節(jié)點(diǎn)到起始節(jié)點(diǎn)的順序 計(jì)算每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑時(shí),在計(jì)算出一個(gè)中間節(jié)點(diǎn)的后繼節(jié)點(diǎn)的最優(yōu)路徑后自然而 然的能卻確定出該中間節(jié)點(diǎn)的最優(yōu)路徑是否為其后繼節(jié)點(diǎn)的最優(yōu)路徑的子路徑,能夠避免 不必要的計(jì)算,降低計(jì)算量和復(fù)雜度。
[0061] 步驟S304 :采用基于路徑探測(cè)的最優(yōu)路徑分析算法查找當(dāng)前節(jié)點(diǎn)集合中節(jié)點(diǎn)的 所有前驅(qū)節(jié)點(diǎn)的最優(yōu)路徑。
[0062] 最優(yōu)路徑分析算法將在下文做詳細(xì)說明,在計(jì)算節(jié)點(diǎn)的所有前驅(qū)節(jié)點(diǎn)的最優(yōu)路徑 的過程中,是依次對(duì)每個(gè)前驅(qū)節(jié)點(diǎn)計(jì)算最優(yōu)路徑,其計(jì)算的順序可以是隨機(jī)的,也可以是根 據(jù)每個(gè)模型的編號(hào)按照一定的順序進(jìn)行計(jì)算。
[0063] 從此步驟S304到步驟S307為一個(gè)while循環(huán),滿足該循環(huán)的條件為當(dāng)前節(jié)點(diǎn)集 合中節(jié)點(diǎn)有前驅(qū)節(jié)點(diǎn),如果當(dāng)前節(jié)點(diǎn)集合匯總節(jié)點(diǎn)沒有前驅(qū)節(jié)點(diǎn),則跳出該循環(huán)。
[0064] 步驟S305 :判斷從步驟S304中計(jì)算出的最優(yōu)路徑是否為調(diào)度序列集合中的某個(gè) 節(jié)點(diǎn)的最優(yōu)路徑的子路徑,如果是,執(zhí)行步驟S307 ;如果否,執(zhí)行步驟S306。
[0065] 判斷子路徑的方法將在下文做詳細(xì)說明。
[0066] 步驟S306 :將從步驟S304中計(jì)算出的最優(yōu)路徑加入調(diào)度序列集合。
[0067] 其中,每一條最優(yōu)路徑相當(dāng)于一個(gè)可并行調(diào)度的序列。
[0068] 步驟S307 :將當(dāng)前節(jié)點(diǎn)集合中的節(jié)點(diǎn)移至已完成節(jié)點(diǎn)集合,并將節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn) 加入當(dāng)前節(jié)點(diǎn)集合。
[0069] 步驟S308 :獲得調(diào)度序列集合。
[0070] 調(diào)度序列集合中包括多個(gè)可并行調(diào)度的最優(yōu)路徑。
[0071] 為了更清楚的說明上述流程,結(jié)合圖1,首先將終止節(jié)點(diǎn)10加入當(dāng)前節(jié)點(diǎn)集合,查 找終止節(jié)點(diǎn)10的所有前驅(qū)節(jié)點(diǎn)的最優(yōu)路徑(也就是節(jié)點(diǎn)7、8、9的最優(yōu)路徑),將終止節(jié)點(diǎn) 10加入已完成節(jié)點(diǎn)集合,并將終止節(jié)點(diǎn)10的前驅(qū)節(jié)點(diǎn)7、8、9加入當(dāng)前節(jié)點(diǎn)集合,再查找節(jié) 點(diǎn)7、8、9的前驅(qū)節(jié)點(diǎn)的最優(yōu)路徑(也就是節(jié)點(diǎn)3、4、5、6的最優(yōu)路徑)一直循環(huán)到起始節(jié)點(diǎn) 1位置,由于節(jié)點(diǎn)1沒有前驅(qū)節(jié)點(diǎn),跳出該循環(huán),最后得到一個(gè)調(diào)度序列集合。
[0072] 另外,由于在查找到所有中間節(jié)點(diǎn)的最優(yōu)路徑后自然而然的能確定出終止節(jié)點(diǎn)的 最優(yōu)路徑,因此本發(fā)明實(shí)施例中沒有查找終止節(jié)點(diǎn)的最優(yōu)路徑。
[0073] 二、最優(yōu)路徑分析算法
[0074] Di jkstra算法是目如已知理論上最完善的算法,也是多數(shù)系統(tǒng)解決最短路徑問題 采用的理論基礎(chǔ)。然而,在實(shí)際應(yīng)用中,使用Di jkstra算法求解最短路徑將會(huì)耗費(fèi)大量的 存儲(chǔ)空間和計(jì)算時(shí)間,因此必須根據(jù)具體的應(yīng)用對(duì)其進(jìn)行優(yōu)化。
[0075] 綜合分析種種對(duì)Dijkstra算法的優(yōu)化方法,可將其歸為兩大類:對(duì)存儲(chǔ)空間的優(yōu) 化和對(duì)計(jì)算時(shí)間的優(yōu)化。在存儲(chǔ)空間方面出現(xiàn)了鏈表數(shù)組、最大鄰接點(diǎn)數(shù)等優(yōu)化的存儲(chǔ)結(jié) 構(gòu)。在計(jì)算時(shí)間方面主要有限制搜索區(qū)域、啟發(fā)式搜索、雙向搜索、分層搜索等方法。然而 這些方法的核心思想仍然是窮舉一個(gè)問題解空間的部分或所有的可能情況,從而求出問題 的解的一種方法。
[0076] 為了解決上述問題,本發(fā)明提供一種基于路徑探測(cè)的最優(yōu)路徑分析算法,用探測(cè) 程序?qū)ζ瘘c(diǎn)和終點(diǎn)間的節(jié)點(diǎn)和路段進(jìn)行雙向探測(cè),過濾掉與起始節(jié)點(diǎn)和終止節(jié)點(diǎn)間不存在 通路的節(jié)點(diǎn),在探測(cè)的過程中實(shí)時(shí)更新最優(yōu)路徑集合,最終輸出最優(yōu)路徑,該算法通過探測(cè) 舍去了不必要的計(jì)算,提高了算法的運(yùn)行效率。
[0077] 圖4示出了根據(jù)本發(fā)明實(shí)施例的基于路徑探測(cè)的最優(yōu)路徑分析算法的流程,如圖 4所示,本發(fā)明實(shí)施例提供的基于路徑探測(cè)的最優(yōu)路徑分析算法包括 :
[0078] 步驟S401 :初始化起始節(jié)點(diǎn)集合、終止節(jié)點(diǎn)集合與最優(yōu)路徑集合。
[0079] 目的是分別建立三個(gè)空間,分別用于存儲(chǔ)起始節(jié)點(diǎn)、終止節(jié)點(diǎn)與最優(yōu)路徑。
[0080] 步驟S402 :輸入DAG圖。
[0081] 在創(chuàng)建完DAG圖后,將DAG圖輸入到內(nèi)存。
[0082] 步驟S403 :將起始節(jié)點(diǎn)加入起始節(jié)點(diǎn)集合、終止節(jié)點(diǎn)加入終止節(jié)點(diǎn)集合。
[0083] 步驟S404 :探測(cè)起始節(jié)點(diǎn)集合中節(jié)點(diǎn)的后繼節(jié)點(diǎn)與終止節(jié)點(diǎn)集合中節(jié)點(diǎn)的前驅(qū) 節(jié)點(diǎn)間的路徑是否存在通路,如果存在,執(zhí)行步驟S405 ;如果不存在,執(zhí)行步驟S406。
[0084] 其中,如果起始節(jié)點(diǎn)集合中節(jié)點(diǎn)包括多個(gè)后繼節(jié)點(diǎn),終止節(jié)點(diǎn)集合的中節(jié)點(diǎn)包括 多個(gè)前驅(qū)節(jié)點(diǎn),則將每個(gè)前驅(qū)節(jié)點(diǎn)分別作為終止節(jié)點(diǎn),依次探測(cè)與起始節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)間 是否存在通路。
[0085] 步驟S405 :保留距離最短的路徑,更新最優(yōu)路徑集合,并將該前驅(qū)節(jié)點(diǎn)加入終止 節(jié)點(diǎn)集合,后續(xù)節(jié)點(diǎn)加入起始節(jié)點(diǎn)集合。
[0086] 其中,保留距離最短的路徑為每個(gè)終止節(jié)點(diǎn)與起始節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)間最短的路 徑,將其作為每個(gè)終止節(jié)點(diǎn)的最優(yōu)路徑加入最優(yōu)路徑集合。
[0087] 步驟S406 :過濾掉與起點(diǎn)節(jié)點(diǎn)和終止節(jié)點(diǎn)間不存在通路的節(jié)點(diǎn)。
[0088] 步驟S407 :判斷起始節(jié)點(diǎn)是否為終止節(jié)點(diǎn),如果是,執(zhí)行步驟S408 ;如果否,返回 步驟S404。
[0089] 如果起始節(jié)點(diǎn)和終止節(jié)點(diǎn)為同一節(jié)點(diǎn),也就是一個(gè)節(jié)點(diǎn)既是后繼節(jié)點(diǎn)又是前驅(qū)節(jié) 點(diǎn),則認(rèn)為起始節(jié)點(diǎn)為終止節(jié)點(diǎn),結(jié)合圖1,節(jié)點(diǎn)3既是節(jié)點(diǎn)2的后繼節(jié)點(diǎn)又是節(jié)點(diǎn)8的前驅(qū) 節(jié)點(diǎn),在探測(cè)節(jié)點(diǎn)3的最優(yōu)路徑時(shí),將節(jié)點(diǎn)3作為新的起始節(jié)點(diǎn),同時(shí)節(jié)點(diǎn)3又作為新的終 止節(jié)點(diǎn),所以起始節(jié)點(diǎn)為終止節(jié)點(diǎn)。
[0090] 還有另外一種情況,如果圖1中的節(jié)點(diǎn)10不是終止節(jié)點(diǎn),節(jié)點(diǎn)10還有一個(gè)后續(xù)節(jié) 點(diǎn),這種情況下,節(jié)點(diǎn)3是節(jié)點(diǎn)8的前驅(qū)節(jié)點(diǎn),節(jié)點(diǎn)8是節(jié)點(diǎn)3的后繼節(jié)點(diǎn),由于節(jié)點(diǎn)3和節(jié) 點(diǎn)8之間沒有節(jié)點(diǎn),節(jié)點(diǎn)3和節(jié)點(diǎn)8之間的路徑距離是確定的,因此再將節(jié)點(diǎn)3作為起始節(jié) 點(diǎn)、節(jié)點(diǎn)8作為終止節(jié)點(diǎn)時(shí)可以認(rèn)為起始節(jié)點(diǎn)3為終止節(jié)點(diǎn)8。
[0091] 步驟S408 :獲得最優(yōu)路徑集合。
[0092] 獲得的最優(yōu)路徑集合包括各個(gè)中間節(jié)點(diǎn)最優(yōu)路徑。
[0093] 由步驟S401?步驟S408可以看出,在探測(cè)一個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑的過程中,會(huì) 探測(cè)到其所有前驅(qū)節(jié)點(diǎn)的最優(yōu)路徑,這些前驅(qū)節(jié)點(diǎn)的最優(yōu)路徑需要進(jìn)行子路徑的判斷,如 果前驅(qū)節(jié)點(diǎn)的最優(yōu)路徑不為調(diào)度序列集合中任一條最優(yōu)路徑的子路徑,則將這些前驅(qū)節(jié)點(diǎn) 的最優(yōu)路徑加入到調(diào)度序列集合中,從實(shí)質(zhì)上來說,最優(yōu)路徑集合相當(dāng)于調(diào)度序列集合,每 一條最優(yōu)路徑相當(dāng)于可并行調(diào)度的序列,多條最優(yōu)路徑加入到最優(yōu)路徑集合就是多個(gè)可并 行調(diào)度的序列加入到調(diào)度序列集合。
[0094] 三、子路徑判斷方法
[0095] 在將每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入到最優(yōu)路徑集合(也就是調(diào)度序列集合)之 前,需要判斷是否為最優(yōu)路徑集合中任一條最優(yōu)路徑的子路徑,在判斷某一條最優(yōu)路徑是 否為最優(yōu)路徑集合中某一條最優(yōu)路徑的子路徑的過程中,由于最優(yōu)路徑集合中可能包含多 個(gè)最優(yōu)路徑,未加入最優(yōu)路徑集合的最優(yōu)路徑需要與最優(yōu)路徑集合中所有最優(yōu)路徑進(jìn)行對(duì) 比分析,效率較低。為了解決該問題,本發(fā)明實(shí)施例提出一種統(tǒng)一存儲(chǔ)的方式,將最優(yōu)路徑 集合中的最優(yōu)路徑存入鄰接矩陣,最優(yōu)路徑中所有存在通路的兩節(jié)點(diǎn)存1,不存在通路的兩 個(gè)節(jié)點(diǎn)存0,同理,非最優(yōu)路徑集合內(nèi)的最優(yōu)路徑存入另一鄰接矩陣。如果非最優(yōu)路徑集合 內(nèi)的最優(yōu)路徑的鄰接矩陣是最優(yōu)路徑集合中的鄰接矩陣的子矩陣,那么該最優(yōu)路徑是其中 某一條最優(yōu)路徑的子路徑。
[0096] 圖5示出了根據(jù)本發(fā)明實(shí)施例的子路徑判斷方法流程,如圖5所示,本發(fā)明實(shí)施例 提供的子路徑判斷方法包括:
[0097] 步驟S501 :輸入最優(yōu)路徑集合與非最優(yōu)路徑集合內(nèi)的最優(yōu)路徑。
[0098] 在將某個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入最優(yōu)路徑集合之前,判斷此中間節(jié)點(diǎn)的最優(yōu)路 徑是否為最優(yōu)路徑集合中某個(gè)最優(yōu)路徑的子路徑,此時(shí)需要將最優(yōu)路徑集合與該中間節(jié)點(diǎn) 的最優(yōu)路徑輸入到內(nèi)存中用于判斷。
[0099] 步驟S502 :對(duì)最優(yōu)路徑集合進(jìn)行統(tǒng)一存儲(chǔ),存入第三鄰接矩陣,再將非最優(yōu)路徑 集合內(nèi)的最優(yōu)路徑存入第二鄰接矩陣。
[0100] 再將最優(yōu)路徑集合存入第三鄰接矩陣時(shí),最優(yōu)路徑中所有存在通路的兩節(jié)點(diǎn)存1, 不存在通路的兩個(gè)節(jié)點(diǎn)存0,非最優(yōu)路徑集合內(nèi)的最優(yōu)路徑同理存入第二鄰接矩陣。
[0101] 步驟S503 :判斷第二鄰接矩陣是否為第三鄰接矩陣的子矩陣;如果是,執(zhí)行步驟 S504 ;如果否,執(zhí)行步驟S505。
[0102] 步驟S504 :非最優(yōu)路徑集合內(nèi)的最優(yōu)路徑為最優(yōu)路徑集合中某個(gè)最優(yōu)路徑的子 路徑。
[0103] 步驟S505 :非最優(yōu)路徑集合內(nèi)的最優(yōu)路徑不為最優(yōu)路徑集合中某個(gè)最優(yōu)路徑的 子路徑。
[0104] 在判斷出非最優(yōu)路徑集合內(nèi)的最優(yōu)路徑不為最優(yōu)路徑集合中某個(gè)最優(yōu)路徑的子 路徑后,將非最優(yōu)路徑集合內(nèi)的最優(yōu)路徑加入最優(yōu)路徑集合也就是調(diào)度序列集合。
[0105] 上述方法和流程詳細(xì)說明了本發(fā)明實(shí)施例提供的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模 型并行調(diào)度方法,以圖1為例,執(zhí)行上述流程得到可并行執(zhí)行的序列如表1所示: 「01061 表〗可并行調(diào)庠的序列
【權(quán)利要求】
1. 一種基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法,包括: 根據(jù)各1?型之間的關(guān)系創(chuàng)建基于各1?型關(guān)系的DAG圖; 根據(jù)基于路徑探測(cè)的最優(yōu)路徑分析算法將所述DAG圖拆分為調(diào)度序列集合;其中,在 所述調(diào)度序列集合中包括多個(gè)并行調(diào)度的序列; 將所述調(diào)度序列集合中的所有并行調(diào)度的序列存儲(chǔ)為第一鄰接矩陣; 將所述第一鄰接矩陣映射成鄰接表; 根據(jù)所述鄰接表并行運(yùn)行所述調(diào)度序列集合中的各個(gè)序列。
2. 如權(quán)利要求1所述的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法,其中,所述DAG 圖包括起始節(jié)點(diǎn)、終止節(jié)點(diǎn)和至少兩個(gè)中間節(jié)點(diǎn); 在根據(jù)基于路徑探測(cè)的最優(yōu)路徑分析算法將所述DAG圖拆分為調(diào)度序列集合的過程 中,采用最優(yōu)路徑分析算法按照從所述終止節(jié)點(diǎn)到所述起始節(jié)點(diǎn)的順序查找每個(gè)中間節(jié)點(diǎn) 的最優(yōu)路徑,并將每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入所述調(diào)度序列集合;其中,每個(gè)中間節(jié)點(diǎn)的 最優(yōu)路徑分別對(duì)應(yīng)一個(gè)序列。
3. 如權(quán)利要求2所述的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法,其中,在根據(jù)基 于路徑探測(cè)的最優(yōu)路徑分析算法查找每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑的過程中, 對(duì)所述起始節(jié)點(diǎn)與每個(gè)中間節(jié)點(diǎn)間的路徑進(jìn)行雙向探測(cè),過濾掉所述起始節(jié)點(diǎn)與每個(gè) 中間節(jié)點(diǎn)之間不存在通路的節(jié)點(diǎn),并保留所述起始節(jié)點(diǎn)和每個(gè)中間節(jié)點(diǎn)間之間最短的路徑 作為每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入所述調(diào)度序列集合。
4. 如權(quán)利要求3所述的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法,其中,在將每個(gè) 中間節(jié)點(diǎn)的最優(yōu)路徑加入所述調(diào)度序列集合之前, 判斷每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑是否為所述調(diào)度序列集合中最優(yōu)路徑的子路徑;如果 是,此中間節(jié)點(diǎn)的最優(yōu)路徑不加入所述調(diào)度序列集合;如果否,將此中間節(jié)點(diǎn)的最優(yōu)路徑加 入所述調(diào)度序列集合。
5. 如權(quán)利要求4所述的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度方法,其中,在判斷每 個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑是否為所述調(diào)度序列集合中最優(yōu)路徑的子路徑的過程中, 將每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑分別存入第二鄰接矩陣,再將所述調(diào)度序列集合中的所有 最優(yōu)路徑存入第三鄰接矩陣,判斷所述第二鄰接矩陣是否為所述第三鄰接矩陣的子矩陣; 如果是,存入所述第二鄰接矩陣中的中間節(jié)點(diǎn)的最優(yōu)路徑為所述調(diào)度序列集合中最優(yōu)路徑 的子路徑;如果否,存入所述第二鄰接矩陣中的中間節(jié)點(diǎn)的最優(yōu)路徑不為所述調(diào)度序列集 合中最優(yōu)路徑的子路徑。
6. -種基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度裝置,包括: DAG圖創(chuàng)建單元,用于根據(jù)各模型之間的關(guān)系創(chuàng)建基于各模型關(guān)系的DAG圖; DAG圖拆分單元,用于根據(jù)基于路徑探測(cè)的最優(yōu)路徑分析算法將所述DAG圖拆分為調(diào) 度序列集合;其中,在所述調(diào)度序列集合中包括多個(gè)并行調(diào)度的序列; 序列存儲(chǔ)單元,用于將調(diào)度序列集合中的所有并行調(diào)度的序列存儲(chǔ)為第一鄰接矩陣; 矩陣映射單元,用于將所述第一鄰接矩陣映射成鄰接表; 序列運(yùn)行單元,用于根據(jù)所述鄰接表并行運(yùn)行所述調(diào)度序列集合中的各個(gè)序列。
7. 如權(quán)利要求6所述的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度裝置,其中, 所述DAG圖包括起始節(jié)點(diǎn)、終止節(jié)點(diǎn)和至少兩個(gè)中間節(jié)點(diǎn);以及 所述DAG圖拆分單元包括: 最優(yōu)路徑查找模塊,用于采用基于路徑探測(cè)的最優(yōu)路徑分析算法按照從所述終止節(jié)點(diǎn) 到所述起始節(jié)點(diǎn)的順序查找每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑; 最優(yōu)路徑加入模塊,用于將每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入所述調(diào)度序列集合;其中,每 個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑分別對(duì)應(yīng)一個(gè)序列。
8. 如權(quán)利要求7所述的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度裝置,其中,在根據(jù)基 于路徑探測(cè)的最優(yōu)路徑分析算法查找每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑的過程中, 所述最優(yōu)路徑查找模塊對(duì)所述起始節(jié)點(diǎn)與每個(gè)中間節(jié)點(diǎn)間的路徑進(jìn)行雙向探測(cè),過濾 掉所述起始節(jié)點(diǎn)與每個(gè)中間節(jié)點(diǎn)之間不存在通路的節(jié)點(diǎn),并保留所述起始節(jié)點(diǎn)和每個(gè)中間 節(jié)點(diǎn)間之間最短的路徑作為每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入所述調(diào)度序列集合。
9. 如權(quán)利要求8所述的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度裝置,其中, 所述裝置進(jìn)一步包括子路徑判斷單元,用于在將每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑加入所述調(diào) 度序列集合之前,判斷每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑是否為所述調(diào)度序列集合中最優(yōu)路徑的子 路徑;如果是,此中間節(jié)點(diǎn)的最優(yōu)路徑不加入所述調(diào)度序列集合;如果否,將此中間節(jié)點(diǎn)的 最優(yōu)路徑加入所述調(diào)度序列集合。
10. 如權(quán)利要求9所述的基于DAG節(jié)點(diǎn)最優(yōu)路徑的多模型并行調(diào)度裝置,其中,在所述 子路徑判斷單元包括: 第二鄰接矩陣存入模塊,用于將每個(gè)中間節(jié)點(diǎn)的最優(yōu)路徑分別存入第二鄰接矩陣; 第三鄰接矩陣存入模塊,用于將所述調(diào)度序列集合中的所有最優(yōu)路徑存入第三鄰接矩 陣; 子矩陣判斷模塊,用于判斷所述第二鄰接矩陣是否為所述第三鄰接矩陣的子矩陣;如 果是,所述子路徑判斷單元判斷存入所述第二鄰接矩陣中的中間節(jié)點(diǎn)的最優(yōu)路徑為所述調(diào) 度序列集合中最優(yōu)路徑的子路徑;如果否,所述子路徑判斷單判斷存入所述第二鄰接矩陣 中的中間節(jié)點(diǎn)的最優(yōu)路徑不為所述調(diào)度序列集合中最優(yōu)路徑的子路徑。
【文檔編號(hào)】G06F9/50GK104239137SQ201410415590
【公開日】2014年12月24日 申請(qǐng)日期:2014年8月21日 優(yōu)先權(quán)日:2014年8月21日
【發(fā)明者】徐麗麗, 張騫, 趙廣斌, 張珠華 申請(qǐng)人:東軟集團(tuán)股份有限公司