專利名稱:指令調(diào)度方法、指令調(diào)度設(shè)備和指令調(diào)度程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種指令調(diào)度方法和一種指令調(diào)度設(shè)備。本發(fā)明尤其涉及考慮到用于處理指令的硬件資源的約束條件時(shí)調(diào)度指令的技術(shù)。
背景技術(shù):
通常,指令調(diào)度設(shè)備被裝備在用于并行處理器的編譯器設(shè)備中。指令調(diào)度設(shè)備決定已編譯程序中包含的多個(gè)指令的每個(gè)指令的適當(dāng)執(zhí)行定時(shí),以及按照所決定的執(zhí)行定時(shí)對(duì)這些指令排序,由此生成對(duì)于并行處理最佳化的目標(biāo)程序。
一種傳統(tǒng)類型的指令調(diào)度設(shè)備通過使用被稱為列表調(diào)度的方法順序地決定各個(gè)指令的適當(dāng)?shù)膱?zhí)行定時(shí)。列表調(diào)度如下地進(jìn)行。對(duì)于輸入程序中的每個(gè)指令,僅僅基于指令之間的相關(guān)性來計(jì)算其優(yōu)先級(jí),該優(yōu)先級(jí)表示按照指令的執(zhí)行定時(shí)被決定的次序的、該指令的位置。此后,從執(zhí)行定時(shí)還沒有被決定的指令中選擇具有最高優(yōu)先級(jí)的指令,并決定所選指令的執(zhí)行定時(shí)。所述選擇和決定被重復(fù)進(jìn)行,直到所有指令的執(zhí)行定時(shí)被決定為止。
在本說明書中,所述傳統(tǒng)技術(shù)中使用的優(yōu)先級(jí),即僅僅基于指令之間的相關(guān)性的優(yōu)先級(jí),被稱為“優(yōu)先約束等級(jí)(precedence constraintrank)”,以便區(qū)分于本發(fā)明特定的優(yōu)先級(jí)。
相關(guān)性是要被同一個(gè)硬件資源處理的指令之間的關(guān)系。傳統(tǒng)上,相關(guān)性被分類為以下三種類型數(shù)據(jù)相關(guān)性,其中由輸入程序中先前的指令(前趨部分(predecessor))規(guī)定的資源被該輸入程序隨后的指令(后繼部分(successor))引用;反相關(guān)性,其中前趨部分所引用的資源由后繼部分規(guī)定;以及輸出相關(guān)性,其中前趨部分所規(guī)定的資源由后繼部分進(jìn)一步規(guī)定。
如果具有這樣的相關(guān)性的指令的執(zhí)行次序被打亂,則程序的執(zhí)行結(jié)果可能以錯(cuò)誤告終。所以,指令調(diào)度設(shè)備決定指令的執(zhí)行定時(shí),以便保持具有相關(guān)性的指令的執(zhí)行次序。
圖14是顯示由以上傳統(tǒng)的指令調(diào)度設(shè)備執(zhí)行的示例性指令調(diào)度過程的流程圖。這個(gè)過程具有三個(gè)主要步驟相關(guān)圖建立步驟S910;優(yōu)先級(jí)計(jì)算步驟S920;以及執(zhí)行定時(shí)決定步驟S930。
(相關(guān)圖建立步驟S910)首先,傳統(tǒng)的指令調(diào)度設(shè)備建立相關(guān)圖,該圖顯示輸入程序中所包括的指令之間的相關(guān)性。相關(guān)圖是一個(gè)定向非循環(huán)圖。該圖具有相應(yīng)于輸入程序中的各個(gè)指令的節(jié)點(diǎn);它還具有弧線,每條弧線連接具有相關(guān)性的、相應(yīng)于前趨部分和后面部分的兩個(gè)節(jié)點(diǎn)。
圖15顯示輸入到傳統(tǒng)的指令調(diào)度設(shè)備的示例性程序。
圖16顯示由傳統(tǒng)的指令調(diào)度設(shè)備對(duì)圖15所示的輸入程序建立的相關(guān)圖。
(優(yōu)先級(jí)計(jì)算步驟S920)然后傳統(tǒng)的指令調(diào)度設(shè)備計(jì)算每個(gè)指令的優(yōu)先約束等級(jí)。例如,如果所述指令沒有后繼部分與其有相關(guān)性,則該指令的優(yōu)先約束等級(jí)等于1。如果該指令有一個(gè)或多個(gè)后繼部分與其有反相關(guān)性或輸出相關(guān)性、但沒有數(shù)據(jù)相關(guān)性,則該指令的優(yōu)先約束等級(jí)等于這些后繼部分的優(yōu)先約束等級(jí)中的最高優(yōu)先約束等級(jí)。如果該指令有一個(gè)或多個(gè)后繼部分與其有數(shù)據(jù)相關(guān)性,則該指令的優(yōu)先約束等級(jí)等于這些后繼部分的優(yōu)先約束等級(jí)中的最高優(yōu)先約束等級(jí)與1的和值。
更詳細(xì)地,每個(gè)指令的優(yōu)先約束等級(jí)按以下的方式進(jìn)行計(jì)算。首先,把權(quán)重1、0、和0分別賦給相關(guān)圖上代表數(shù)據(jù)相關(guān)性、反相關(guān)性和輸出相關(guān)性的弧線。隨后,通過找出賦給沿著從該節(jié)點(diǎn)到終端節(jié)點(diǎn)的路徑上的弧線的權(quán)重的和,并將該和加上1來計(jì)算每個(gè)節(jié)點(diǎn)的優(yōu)先約束等級(jí)。如果從該節(jié)點(diǎn)到終端節(jié)點(diǎn)有多條路徑,則把對(duì)于多條路徑計(jì)算的多個(gè)數(shù)值中的最大的數(shù)值設(shè)置為該節(jié)點(diǎn)的優(yōu)先約束等級(jí)。
在圖16顯示的相關(guān)圖上,賦給弧線的權(quán)重以及為這些節(jié)點(diǎn)計(jì)算出的優(yōu)先約束等級(jí)緊鄰著相應(yīng)的弧線和節(jié)點(diǎn)被顯示。
一個(gè)節(jié)點(diǎn)的優(yōu)先約束等級(jí)表示執(zhí)行相應(yīng)于該節(jié)點(diǎn)的指令以及隨后的指令所需要的時(shí)間周期的下限,在具有數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性的指令之間的等待時(shí)間分別被設(shè)置為1、0、和0。從具有最高優(yōu)先約束等級(jí)的節(jié)點(diǎn)開始的路徑被稱為關(guān)鍵路徑。期望通過盡可能早地執(zhí)行該關(guān)鍵路徑的開始指令,而可以縮短全部指令的執(zhí)行時(shí)間周期。
(執(zhí)行定時(shí)決定步驟S930)為了保持具有相關(guān)性的指令的執(zhí)行次序,傳統(tǒng)的指令調(diào)度設(shè)備對(duì)于滿足以下條件(a)和(b)之一的指令作出執(zhí)行定時(shí)決定。
(a)該指令沒有與其有相關(guān)性的前趨部分。
(b)該指令具有一個(gè)或多個(gè)與其有相關(guān)性的前趨部分,但所有這些前趨部分的執(zhí)行定時(shí)已被決定。
傳統(tǒng)的指令調(diào)度設(shè)備對(duì)于每個(gè)指令作出判定該指令是否滿足條件(a)和(b)之一。然后傳統(tǒng)的指令調(diào)度設(shè)備在滿足條件(a)和(b)之一的指令中間選擇具有最高優(yōu)先約束等級(jí)的指令(它最初是關(guān)鍵路徑的開始指令),并決定所選指令的執(zhí)行定時(shí)。這個(gè)過程被重復(fù)進(jìn)行,直至所有指令的執(zhí)行定時(shí)被決定為止。
這里,指令的執(zhí)行定時(shí)被決定為一個(gè)時(shí)鐘周期,在該時(shí)鐘周期內(nèi)該指令應(yīng)當(dāng)被執(zhí)行。所以在本說明書中,決定指令的執(zhí)行定時(shí)也被稱為把指令放置在時(shí)鐘周期中。另外,滿足以上的條件(a)和(b)之一的指令被稱為“可放置指令”。
傳統(tǒng)的指令調(diào)度設(shè)備把所選指令放置在滿足以下的條件(1)和(2)的時(shí)鐘周期中。
(1)該時(shí)鐘周期等同于或者遲于與該指令有反相關(guān)性或輸出相關(guān)性的前趨部分所位于的時(shí)鐘周期,以及遲于與該指令有數(shù)據(jù)相關(guān)性的前趨部分所位于的時(shí)鐘周期。
(2)該時(shí)鐘周期是其中硬件資源可處理指令的、最早的時(shí)鐘周期。
因此,當(dāng)尚有許多可以放置指令的時(shí)鐘周期時(shí),傳統(tǒng)的指令調(diào)度設(shè)備可能在放置其他指令之前把關(guān)鍵路徑的開始指令放置在最早的時(shí)鐘周期。這樣,傳統(tǒng)的指令調(diào)度設(shè)備把所有的指令放置在盡可能少的時(shí)鐘周期中,而不影響程序的執(zhí)行結(jié)果。
圖17顯示當(dāng)目標(biāo)處理器具有能夠在一個(gè)時(shí)鐘周期中并行處理兩個(gè)指令的指令譯碼器、能夠在一個(gè)時(shí)鐘周期中并行處理兩個(gè)指令的算術(shù)單元、和能夠在一個(gè)時(shí)鐘周期中處理一個(gè)指令的存儲(chǔ)器接入單元時(shí),圖15所示的程序的指令如何被放置在時(shí)鐘周期中。在圖上,時(shí)鐘周期域901用相關(guān)的數(shù)字顯示時(shí)鐘周期。指令1域902和指令2域903各自顯示被放置在該時(shí)鐘周期中的指令、以及按照時(shí)鐘周期內(nèi)放置指令的次序(即,按照指令的執(zhí)行定時(shí)被決定的次序)的、該指令的位置。
這里,指令F和G將要由在一個(gè)時(shí)鐘周期中只能處理一個(gè)指令的存儲(chǔ)器接入單元進(jìn)行處理,所以,它們不能在同一個(gè)時(shí)鐘周期中被處理。因此,指令F和G被放置在分開的時(shí)鐘周期4和5中。這就是說,只有指令F被放置在時(shí)鐘周期4中。
傳統(tǒng)的編譯器設(shè)備按時(shí)鐘周期次序?qū)@樣放置的指令排序,并把顯示時(shí)鐘周期邊界的邊界信息附加到每個(gè)時(shí)鐘周期的最后的指令。因此,得到對(duì)于并行處理最佳化的目標(biāo)程序。這里,所述邊界信息被表示為例如1比特的標(biāo)記信息。所述目標(biāo)處理器在分開的時(shí)鐘周期中執(zhí)行具有邊界信息的指令和下一個(gè)指令。
在圖17所示的例子中,指令A(yù)到G以圖15所示的次序被輸出,邊界信息被附加到指令A(yù)、C、E、F和G。
期望由目標(biāo)處理器執(zhí)行這樣一個(gè)對(duì)于并行處理最佳化的目標(biāo)程序,該目標(biāo)程序相比于沒有對(duì)于并行處理進(jìn)行最佳化的程序來說,需要更少的時(shí)鐘周期。
然而,按照以上的傳統(tǒng)技術(shù),存在這樣的情況指令沒有被放入盡可能少的時(shí)鐘周期內(nèi)。換句話說,傳統(tǒng)的技術(shù)無法對(duì)于并行處理的程序充分地最佳化。
取圖15所示的程序作為一個(gè)例子。假設(shè)在第二決定中指令E被選擇并放入時(shí)鐘周期2中。這允許指令F和G被分別放置在時(shí)鐘周期3和4中,以及指令B、C和D被分別放置在時(shí)鐘周期2、3和4中。結(jié)果,指令A(yù)到G可被放置在四個(gè)時(shí)鐘周期中(見圖5)。
然而,按照傳統(tǒng)的技術(shù),指令被選擇的次序是僅僅基于指令之間的相關(guān)性被計(jì)算的優(yōu)先約束等級(jí)。因此,沒有可能在第二決定中選擇指令E。所以,不可能按以上的方式使得程序充分最佳化。
發(fā)明內(nèi)容
鑒于以上的問題,本發(fā)明的目的是提供一種指令調(diào)度方法和指令調(diào)度設(shè)備,它們使得指令能夠被放置在比傳統(tǒng)技術(shù)更少的時(shí)鐘周期中。
所述目的可以通過一種包括以下步驟的指令調(diào)度方法達(dá)到優(yōu)先級(jí)計(jì)算步驟,該步驟根據(jù)經(jīng)受調(diào)度的多個(gè)指令之間的相關(guān)性與用于處理該多個(gè)指令的硬件資源的約束條件,來計(jì)算該多個(gè)指令中每個(gè)指令的優(yōu)先級(jí),所述相關(guān)性是數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性;以及執(zhí)行定時(shí)決定步驟,該步驟用于決定具有最高優(yōu)先級(jí)的指令的執(zhí)行定時(shí)。
按照這個(gè)方法,指令是按照基于硬件資源的約束條件而計(jì)算的優(yōu)先級(jí)被選擇并放置在時(shí)鐘周期中的。這允許具有嚴(yán)格的資源約束條件的指令被放置在較早的時(shí)鐘周期中。所以,包括這樣一個(gè)指令在內(nèi)的多個(gè)指令可被放置在比傳統(tǒng)技術(shù)更少的時(shí)鐘周期中。
這里,上述優(yōu)先級(jí)計(jì)算步驟可包括優(yōu)先約束等級(jí)計(jì)算子步驟,該步驟用于計(jì)算所述多個(gè)指令中每個(gè)指令的優(yōu)先約束等級(jí),其中(a)如果所述指令具有一個(gè)后繼指令,它是反相關(guān)于或是輸出相關(guān)于該指令,則該指令的優(yōu)先約束等級(jí)等于該后繼指令的優(yōu)先約束等級(jí),以及(b)如果所述指令具有一個(gè)后繼指令,它是數(shù)據(jù)相關(guān)于該指令,則該指令的優(yōu)先約束等級(jí)高于該后繼指令的優(yōu)先約束等級(jí);以及資源約束條件評(píng)估子步驟,該步驟用于判斷(i)所述指令是否具有相關(guān)于該指令的后繼指令,(ii)該指令和該后繼指令是否具有相等的優(yōu)先約束等級(jí),以及(iii)用于處理該指令的硬件資源是否不能并行處理該指令和該后繼指令;以及優(yōu)先級(jí)計(jì)算步驟,該步驟用于當(dāng)所有的判斷(i)、(ii)和(iii)都為肯定時(shí),提升所述指令的優(yōu)先約束等級(jí)并把該提升后的優(yōu)先約束等級(jí)設(shè)置為該指令的優(yōu)先級(jí),而當(dāng)任一個(gè)判斷(i)、(ii)和(iii)是否定時(shí),則把該指令的優(yōu)先約束等級(jí)設(shè)置為該指令的優(yōu)先級(jí)。
按照這個(gè)方法,當(dāng)具有相關(guān)性和相等的優(yōu)先約束等級(jí)的前趨部分和后繼部分不能由目標(biāo)處理器中的硬件資源并行處理時(shí),前趨部分的優(yōu)先級(jí)被設(shè)置為高于前趨部分的優(yōu)先約束等級(jí)。這使得有可能找出由資源約束條件生成的新的關(guān)鍵路徑,這是傳統(tǒng)的技術(shù)還未注意到的。這個(gè)關(guān)鍵路徑的開始指令被放置在可能的、最早的時(shí)鐘周期中。因此,包括由于資源限制條件而不能被并行處理的指令在內(nèi)的多個(gè)指令可被放置在比傳統(tǒng)技術(shù)更少的時(shí)鐘周期中。
這里,所述優(yōu)先級(jí)計(jì)算步驟可包括優(yōu)先約束等級(jí)計(jì)算子步驟,該步驟用于計(jì)算所述多個(gè)指令中每個(gè)指令的優(yōu)先約束等級(jí),其中(a)如果所述指令不具有相關(guān)于該指令的后繼指令,則該指令的優(yōu)先約束等級(jí)為1,(b)如果所述指令具有一個(gè)或多個(gè)后繼指令,它們反相關(guān)于或輸出相關(guān)于該指令,則該指令的優(yōu)先約束等級(jí)為這些后繼指令的優(yōu)先約束等級(jí)中的最高優(yōu)先約束等級(jí),以及(c)如果所述指令具有一個(gè)或多個(gè)后繼指令,它們數(shù)據(jù)相關(guān)于該指令,則該指令的優(yōu)先約束等級(jí)為這些后繼指令的優(yōu)先約束等級(jí)中的最高優(yōu)先約束等級(jí)與1的和;以及資源約束條件評(píng)估子步驟,該步驟通過把用于處理指令的硬件資源將要處理且其執(zhí)行定時(shí)還沒有被決定的指令的總數(shù),除以可被該硬件資源并行處理的指令的最大數(shù)目,從而計(jì)算該指令的資源約束數(shù)值;以及當(dāng)上述資源約束數(shù)值大于所述優(yōu)先約束等級(jí)時(shí),該優(yōu)先級(jí)計(jì)算步驟把該資源約束數(shù)值設(shè)置為該指令的優(yōu)先級(jí),而當(dāng)資源約束數(shù)值不大于優(yōu)先約束等級(jí)時(shí),該步驟則把該優(yōu)先約束等級(jí)設(shè)置為該指令的優(yōu)先級(jí)。
按照這個(gè)方法,資源約束數(shù)值和優(yōu)先約束等級(jí)中較高的一個(gè)被設(shè)置為每個(gè)指令的優(yōu)先級(jí)。這允許具有嚴(yán)格的資源約束條件的指令被放置在比傳統(tǒng)技術(shù)更早的時(shí)鐘周期中。所以,包括這樣一個(gè)指令在內(nèi)的多個(gè)指令可被放置在比傳統(tǒng)技術(shù)更少的時(shí)鐘周期中。
特別是當(dāng)有許多未放置的指令要由只能并行處理小量指令的硬件資源處理,并且在這些指令之間不存在相關(guān)性時(shí),對(duì)于這樣的指令計(jì)算高的資源約束數(shù)值。這產(chǎn)生了將這樣的指令適當(dāng)?shù)胤胖迷谳^早的時(shí)鐘周期的特殊效果。
所述目的也可通過一種順序地決定要經(jīng)受調(diào)度的指令的執(zhí)行定時(shí)的指令調(diào)度方法被達(dá)到,該方法包括決定判斷步驟,該步驟用于在第一指令的執(zhí)行定時(shí)被決定后,根據(jù)用于處理第二指令的硬件資源的約束條件來判斷該第二指令的執(zhí)行定時(shí)是否可被決定,以便使其處在預(yù)定的時(shí)間周期內(nèi);以及重新決定步驟,當(dāng)上述判斷為否定時(shí),該步驟撤回該第一指令的執(zhí)行定時(shí)的決定,并且決定一個(gè)不同于該第一指令的指令的執(zhí)行定時(shí)。
這里,預(yù)定的時(shí)間周期可以由多個(gè)時(shí)鐘周期表示,其中所述決定判斷步驟包括資源約束條件評(píng)估子步驟,該步驟通過把所述硬件資源將要處理且其執(zhí)行定時(shí)還沒有被決定的指令的總數(shù),除以可被該硬件資源并行處理的指令的最大數(shù)目,從而計(jì)算所述第二指令的資源約束數(shù)值;以及決定判斷步驟,當(dāng)該資源約束數(shù)值大于時(shí)鐘周期數(shù)目時(shí),該步驟判斷為否定。
按照這些方法,在考慮資源約束條件時(shí)判斷所有指令是否都能夠放置在預(yù)定數(shù)目的時(shí)鐘周期內(nèi)。如果該判斷為否定的,則撤回緊接在前面的放置,并把另一個(gè)指令放置在時(shí)鐘周期中。當(dāng)與只考慮指令之間的相關(guān)性而作出相同判斷的情況相比較時(shí),這有助于以更大的機(jī)會(huì)將包括嚴(yán)格的資源約束的指令在內(nèi)的指令放入期望數(shù)目的時(shí)鐘周期中。
所述目的也可以通過一種程序轉(zhuǎn)換方法達(dá)到,其特征在于輸入程序被轉(zhuǎn)換成包括多個(gè)指令的目標(biāo)程序,而該目標(biāo)程序內(nèi)所述多個(gè)指令中每個(gè)指令的執(zhí)行定時(shí)使用權(quán)利要求1到5的任一項(xiàng)的指令調(diào)度方法決定。
按照這個(gè)方法,一種具有上述效果的指令調(diào)度方法被應(yīng)用到一中間程序,通過它便有可能產(chǎn)生一個(gè)對(duì)于并行處理更高地最佳化的目標(biāo)程序。
所述目的也可以通過一種指令調(diào)度設(shè)備被達(dá)到,該設(shè)備包括優(yōu)先級(jí)計(jì)算單元,它能用來根據(jù)經(jīng)受調(diào)度的多個(gè)指令之間的相關(guān)性與用于處理該多個(gè)指令的硬件資源的約束條件,計(jì)算該多個(gè)指令中每個(gè)指令的優(yōu)先級(jí),所述相關(guān)性是數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性;以及執(zhí)行定時(shí)決定單元,它能用來決定具有最高優(yōu)先級(jí)的指令的執(zhí)行定時(shí)。
所述目的也可通過一種用于順序地決定要經(jīng)受調(diào)度的指令的執(zhí)行定時(shí)的指令調(diào)度設(shè)備被達(dá)到,該設(shè)備包括決定判斷單元,它能用來在第一指令的執(zhí)行定時(shí)被決定后,根據(jù)用于處理第二指令的硬件資源的約束條件,判斷該第二指令的執(zhí)行定時(shí)是否可被決定,以便使其處在預(yù)定的時(shí)間周期內(nèi);以及重新決定單元,當(dāng)上述判斷為否定時(shí),該單元用來撤回該第一指令的執(zhí)行定時(shí)的決定,并決定一個(gè)不同于該第一指令的指令的執(zhí)行定時(shí)。
按照這些構(gòu)建,可以實(shí)現(xiàn)一種具有上述效果的指令調(diào)度設(shè)備。
所述目的也可以通過用于指令調(diào)度的計(jì)算機(jī)可執(zhí)行程序被達(dá)到,該程序使得計(jì)算機(jī)執(zhí)行優(yōu)先級(jí)計(jì)算步驟,該步驟根據(jù)經(jīng)受調(diào)度的多個(gè)指令之間的相關(guān)性與用于處理該多個(gè)指令的硬件資源的約束條件,計(jì)算多個(gè)指令的每個(gè)指令的優(yōu)先級(jí),所述相關(guān)性是數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性;以及執(zhí)行定時(shí)決定步驟,該步驟決定具有最高優(yōu)先級(jí)的指令的執(zhí)行定時(shí)。
所述目的也可通過用于順序地決定要經(jīng)受調(diào)度的指令的執(zhí)行定時(shí)的計(jì)算機(jī)可執(zhí)行程序被達(dá)到,該程序使得計(jì)算機(jī)執(zhí)行決定判斷步驟,該步驟用來在第一指令的執(zhí)行定時(shí)被決定后,根據(jù)用于處理第二指令的硬件資源的約束條件,判斷該第二指令的執(zhí)行定時(shí)是否可被決定,以便使其處在預(yù)定的時(shí)間周期內(nèi);以及重新決定步驟,當(dāng)上述判斷為否定時(shí),該步驟用來撤回該第一指令的執(zhí)行定時(shí)的決定,并決定一個(gè)不同于該第一指令的指令的執(zhí)行定時(shí)。
按照這些程序,可以在計(jì)算機(jī)上達(dá)到具有上述效果的指令調(diào)度處理。
所述目的也可以通過存儲(chǔ)有權(quán)利要求9和10的任一程序的計(jì)算機(jī)可讀的貯存媒體被達(dá)到。
按照這種貯存媒體,具有上述效果的程序可被分布到想要的計(jì)算機(jī),然后它們就可以執(zhí)行該程序。
當(dāng)結(jié)合附圖(其上說明了本發(fā)明的具體實(shí)施例)閱讀以下的描述時(shí),本發(fā)明的這些和其他目的、優(yōu)點(diǎn)和特性將更加明顯。
在圖上圖1是顯示本發(fā)明第一實(shí)施例涉及到的編譯器設(shè)備的總體結(jié)構(gòu)的功能方框圖;圖2顯示由圖1所示的編譯器設(shè)備作為目標(biāo)的處理器的示例性結(jié)構(gòu);圖3是顯示第一實(shí)施例中的指令調(diào)度程序過程的流程圖;圖4顯示由圖1所示的相關(guān)性分析單元建立的示例性相關(guān)圖;圖5顯示把指令放置在時(shí)鐘周期中的例子;圖6是顯示本發(fā)明第二實(shí)施例中的指令調(diào)度過程的流程圖;圖7和8顯示示例性指令放置處理;圖9是顯示本發(fā)明第三實(shí)施例涉及到的編譯器設(shè)備的總體結(jié)構(gòu)的功能方框圖;圖10是顯示第三實(shí)施例中的指令調(diào)度程序過程的流程圖;圖11和12顯示示例性指令放置處理;圖13顯示把指令放置在時(shí)鐘周期中的例子;圖14是顯示由傳統(tǒng)的設(shè)備執(zhí)行的指令調(diào)度程序過程的流程圖;圖15顯示輸入到傳統(tǒng)的設(shè)備的示例性程序;圖16顯示由圖15所示的傳統(tǒng)的設(shè)備對(duì)于輸入程序建立的相關(guān)圖;以及圖17顯示由傳統(tǒng)的設(shè)備把指令放置在時(shí)鐘周期中的例子。
具體實(shí)施例方式
第一實(shí)施例本發(fā)明第一實(shí)施例的指令調(diào)度設(shè)備接收經(jīng)受調(diào)度的多個(gè)指令的輸入,根據(jù)指令之間的相關(guān)性以及硬件資源的約束條件來計(jì)算每個(gè)指令的優(yōu)先級(jí),并按照計(jì)算的優(yōu)先級(jí)來選擇和放置指令。
更詳細(xì)地,對(duì)于具有后繼部分而該后繼部分有相同優(yōu)先約束等級(jí)的每個(gè)指令,所述指令調(diào)度設(shè)備判斷該指令和該后繼部分是否可被目標(biāo)處理器的硬件資源并行處理。如果該判斷是否定的,則該指令調(diào)度設(shè)備提升該指令的優(yōu)先約束等級(jí),并把提升后的優(yōu)先約束等級(jí)設(shè)為該指令的優(yōu)先級(jí)。對(duì)于其他的每個(gè)指令,該指令調(diào)度設(shè)備把該指令的優(yōu)先約束等級(jí)設(shè)為該指令的優(yōu)先級(jí)。在這樣地計(jì)算每個(gè)指令的優(yōu)先級(jí)后,該指令調(diào)度設(shè)備選擇一個(gè)未放置的、具有最高的優(yōu)先級(jí)的指令,并把所選指令放置在一個(gè)時(shí)鐘周期中。這個(gè)選擇和放置被重復(fù)進(jìn)行,直到所有的指令被放置在時(shí)鐘周期中為止。
這種指令調(diào)度設(shè)備具有以下的特性。當(dāng)前趨部分和后繼部分具有相同的優(yōu)先約束等級(jí),但由于硬件資源的約束條件而不能被并行處理時(shí),該指令調(diào)度設(shè)備將前趨部分的優(yōu)先級(jí)設(shè)置為高于僅僅是基于指令之間的相關(guān)性的優(yōu)先約束等級(jí)。這使得有可能找出由資源約束條件生成的新的關(guān)鍵路徑,這是傳統(tǒng)技術(shù)所沒有注意到的。
所述指令調(diào)度設(shè)備把這樣的關(guān)鍵路徑的開始指令放置在可能的、最早的時(shí)鐘周期中。這樣,包括由于資源約束條件而不能被并行處理的指令在內(nèi)的多個(gè)指令可被放置在比傳統(tǒng)技術(shù)更少的時(shí)鐘周期中。
(總體結(jié)構(gòu))圖1是顯示第一實(shí)施例所涉及到的編譯器設(shè)備100的總體結(jié)構(gòu)的功能性方框圖。編譯器設(shè)備100包括第一實(shí)施例的指令調(diào)度設(shè)備作為指令調(diào)度單元130。
編譯器設(shè)備100從源文件101獲取源程序,并編譯該源程序。然后編譯器設(shè)備100從該被編譯的程序生成對(duì)于并行處理最佳化的目標(biāo)程序,并把該目標(biāo)程序輸出到目標(biāo)文件102。
編譯器設(shè)備100包括上部編譯器單元110、匯編程序代碼生成單元120、指令調(diào)度單元130和輸出單元170。指令調(diào)度單元130包括相關(guān)性分析單元140、優(yōu)先級(jí)計(jì)算單元150和執(zhí)行定時(shí)決定單元160。優(yōu)先級(jí)計(jì)算單元150包括優(yōu)先約束等級(jí)計(jì)算單元151和資源約束評(píng)估單元152。執(zhí)行定時(shí)決定單元160包括指令選擇單元161。
實(shí)際上編譯器設(shè)備100通過軟件和硬件實(shí)現(xiàn),其中硬件包括處理器、存儲(chǔ)程序的ROM(只讀存儲(chǔ)器)、工作的RAM(隨機(jī)存取存儲(chǔ)器)和盤裝置。編譯器設(shè)備100的各個(gè)部件的功能是通過處理器執(zhí)行存儲(chǔ)在ROM中的程序而達(dá)到的。在各個(gè)部件之間的數(shù)據(jù)傳遞是通過諸如RAM和盤裝置的硬件而實(shí)行的。
上部編譯器單元110從源文件101讀取源程序,并執(zhí)行詞法分析和語義分析,生成中間代碼串。
匯編程序代碼生成單元120從由上部編譯器單元110生成的中間代碼串生成匯編程序代碼串。
指令調(diào)度單元130根據(jù)匯編程序代碼串中包括的每個(gè)指令與另一個(gè)指令的相關(guān)性以及處理所述指令的硬件資源的約束條件來計(jì)算每個(gè)指令的優(yōu)先級(jí)。此后,指令調(diào)度單元130在未放置的指令中選擇具有最高優(yōu)先級(jí)的指令,并把所選指令放置在一個(gè)時(shí)鐘周期中。所述選擇和放置被重復(fù)進(jìn)行,直到所有的指令被放置在時(shí)鐘周期中為止。指令調(diào)度單元130將在后面更詳細(xì)地進(jìn)行解釋。
輸出單元170以時(shí)鐘周期的次序輸出指令和在背景技術(shù)的描述中提到的邊界信息。
下面解釋由編譯器設(shè)備100作為目標(biāo)的處理器的結(jié)構(gòu)以及指令調(diào)度單元130的詳細(xì)結(jié)構(gòu)。
(目標(biāo)處理器)圖2是顯示由編譯器設(shè)備100作為目標(biāo)的處理器800的示例性結(jié)構(gòu)的功能性方框圖。這個(gè)圖打算提供與本發(fā)明有關(guān)的、硬件資源的約束條件的具體例子,所以僅僅以簡(jiǎn)化的形式說明有關(guān)的部分。
處理器800大致上由指令供給單元810、譯碼單元820和執(zhí)行單元830組成。
指令供給單元810包括指令獲取單元811、第一指令寄存器812和第二指令寄存器813。指令獲取單元811通過IA(指令地址)總線和ID(指令數(shù)據(jù))總線從外部存儲(chǔ)器(圖上未示出)獲取指令。第一指令寄存器812和第二指令寄存器813保存獲取的指令。在一個(gè)時(shí)鐘周期中,從第一指令寄存器812和第二指令寄存器813并行地提供兩個(gè)指令到譯碼單元820。
譯碼單元820包括第一指令譯碼器821和第二指令譯碼器822。第一指令譯碼器821和第二指令譯碼器822在一個(gè)時(shí)鐘周期中并行地譯碼兩個(gè)指令,并把顯示譯碼結(jié)果的控制信號(hào)提供到執(zhí)行單元830。
執(zhí)行單元830按照從譯碼單元820提供的控制信號(hào)運(yùn)行。執(zhí)行單元830包括第一算術(shù)單元831、第二算術(shù)單元832、寄存器文件833、條件標(biāo)記寄存器834和存儲(chǔ)器存取單元835。第一算術(shù)單元831和第二算術(shù)單元832各自通過專用總線被連接到寄存器文件833,并被連接到條件標(biāo)記寄存器834。第一算術(shù)單元831和第二算術(shù)單元832在一個(gè)時(shí)鐘周期中并行地執(zhí)行涉及到兩個(gè)指令的兩個(gè)運(yùn)算。存儲(chǔ)器存取單元835通過OA(操作數(shù)地址)總線和0D(操作數(shù)數(shù)據(jù))總線在一個(gè)時(shí)鐘周期中執(zhí)行一個(gè)涉及到一個(gè)指令的存儲(chǔ)器存取。
借助以上結(jié)構(gòu),當(dāng)這些指令要被算術(shù)單元處理時(shí),處理器800能夠在一個(gè)時(shí)鐘周期中最多處理兩個(gè)指令,而當(dāng)這些指令要被存儲(chǔ)器存取單元處理時(shí),則處理器800在一個(gè)時(shí)鐘周期中最多處理一個(gè)指令。這些是處理器800中的硬件資源的約束條件。
(指令調(diào)度單元130)下面參照流程圖詳細(xì)地說明第一實(shí)施例中的指令調(diào)度單元130。
圖3是顯示第一實(shí)施例中的指令調(diào)度程序過程的流程圖。
(步驟S101)相關(guān)性分析單元140以與傳統(tǒng)的技術(shù)相同的方式建立相關(guān)圖,它給出了由匯編程序代碼生成單元120生成的匯編程序代碼串中所包含的指令之間的相關(guān)性。
(步驟S102)優(yōu)先約束等級(jí)計(jì)算單元151以與傳統(tǒng)的技術(shù)相同的方式分別把權(quán)重1、0、和0賦給相關(guān)性分析單元140所建立的相關(guān)圖中代表數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性的弧線。
(步驟S103)步驟S104到S106對(duì)于具有權(quán)重0的每個(gè)弧線重復(fù)進(jìn)行(循環(huán)1)。
(步驟S104)資源約束評(píng)估單元152判斷硬件資源是否能并行處理相應(yīng)于由弧線連接的兩個(gè)節(jié)點(diǎn)的兩個(gè)指令,即具有相同的優(yōu)先約束等級(jí)的兩個(gè)指令。如果該判斷為否定,則所述程序過程進(jìn)到步驟S105。
(步驟S105)資源約束評(píng)估單元152把所述弧線的權(quán)重改變?yōu)?。
(步驟S106)所述程序過程返回到步驟S103。
(步驟S107)在循環(huán)1結(jié)束后,優(yōu)先級(jí)計(jì)算單元150對(duì)于相關(guān)圖上的每個(gè)節(jié)點(diǎn)計(jì)算沿著從該節(jié)點(diǎn)到終端節(jié)點(diǎn)路徑上的那些弧線的權(quán)重的和。然后優(yōu)先級(jí)計(jì)算單元150將該和加上1,由此計(jì)算出相應(yīng)于該節(jié)點(diǎn)的指令的優(yōu)先級(jí)。這里,連接兩個(gè)具有相同的優(yōu)先約束等級(jí)、但由于資源約束條件而不能被并行處理的指令的每個(gè)弧線的權(quán)重已在步驟S105被改變。因此,如果所述路徑包括這樣的弧線,則計(jì)算出的該指令的優(yōu)先級(jí)高于該指令的優(yōu)先約束等級(jí)。
(步驟S108)只要有未放置的指令,步驟S109到S111就重復(fù)進(jìn)行。
(步驟S109)指令選擇單元161在未放置的指令中選擇具有最高優(yōu)先級(jí)的指令。
(步驟S110)執(zhí)行定時(shí)決定單元160把所選指令放置在滿足以下的兩個(gè)條件(1)和(2)的時(shí)鐘周期中。
(1)該時(shí)鐘周期等同于或遲于與該所選指令有反相關(guān)性或輸出相關(guān)性的前趨部分所位于的時(shí)鐘周期,并且遲于與該所選指令有數(shù)據(jù)相關(guān)性的前趨部分所位于的時(shí)鐘周期。
(2)該時(shí)鐘周期是其中硬件資源可處理指令的、最早的時(shí)鐘周期。
(步驟S111)所述程序過程返回到步驟S108。
(具體的例子)圖4顯示由相關(guān)性分析單元140建立的、用于圖15所示程序的相關(guān)圖。在該相關(guān)圖上,括號(hào)中的每個(gè)數(shù)值表示由優(yōu)先約束等級(jí)計(jì)算單元151賦給弧線的權(quán)重。
具有權(quán)重0的每條弧線所連接的一對(duì)指令,諸如指令E和F以及指令F和G,是要被所述存儲(chǔ)器存取單元處理的指令。因此,資源約束評(píng)估單元152判斷該對(duì)指令不能在一個(gè)時(shí)鐘周期中并行處理,并且把弧線的權(quán)重改變?yōu)?。這個(gè)改變?cè)趫D4上被表示為“(0→1)”。
此后,優(yōu)先級(jí)計(jì)算單元150把權(quán)重相加,以計(jì)算優(yōu)先級(jí)。在圖4上,在每個(gè)節(jié)點(diǎn)旁邊顯示的數(shù)值就是這樣計(jì)算出的優(yōu)先級(jí)。例如,指令A(yù)的優(yōu)先級(jí)是4,它是通過把1加到沿著路徑A-E-F-G的弧線的權(quán)重的和值而被計(jì)算出的。
圖5顯示按照在圖4所示的相關(guān)圖上計(jì)算出的優(yōu)先級(jí)而被放置在時(shí)鐘周期中的指令A(yù)到G。其中符號(hào)是與圖17的符號(hào)相同的。由于指令E的優(yōu)先級(jí)是3,在第二決定中,指令E被放置在時(shí)鐘周期2中。結(jié)果,指令A(yù)到G被放置在四個(gè)時(shí)鐘周期中,它們比圖17的情形少一個(gè)時(shí)鐘。
(結(jié)論)如上所述,當(dāng)前趨部分和后繼部分具有相同優(yōu)先約束等級(jí)的相關(guān)性、但不能由目標(biāo)處理器中的硬件資源并行處理時(shí),第一實(shí)施例的指令調(diào)度設(shè)備把前趨部分的優(yōu)先級(jí)設(shè)置為高于前趨部分的優(yōu)先約束等級(jí)。
這使得有可能找出由資源約束條件生成的新的關(guān)鍵路徑,這是傳統(tǒng)的技術(shù)沒有注意到的。所述指令調(diào)度設(shè)備把該關(guān)鍵路徑的開始的指令放置在可能的、最早的時(shí)鐘周期中。這樣,包括由于資源限制條件而不能被并行處理的指令在內(nèi)的多個(gè)指令可被放置在比傳統(tǒng)技術(shù)更少的時(shí)鐘周期中。
第二實(shí)施例本發(fā)明第二實(shí)施例的指令調(diào)度設(shè)備接收經(jīng)受調(diào)度的多個(gè)指令的輸入,并計(jì)算每個(gè)指令的優(yōu)先約束等級(jí)。此后,該指令調(diào)度設(shè)備對(duì)于每個(gè)可放置指令來計(jì)算資源約束數(shù)值。該資源約束數(shù)值是通過把用于處理所述指令的硬件資源將要處理的、未放置的指令的總數(shù),除以可被該硬件資源并行處理的指令的最大數(shù)目而被獲得的。該指令調(diào)度設(shè)備把優(yōu)先約束等級(jí)和資源約束數(shù)值中較高的值設(shè)置為該指令的優(yōu)先級(jí)。然后該指令調(diào)度設(shè)備選擇具有最高優(yōu)先級(jí)的指令,并把所選指令放置在時(shí)鐘周期中。這個(gè)過程被重復(fù)進(jìn)行,直到所有的指令被放置在時(shí)鐘周期中為止。
這里,資源約束數(shù)值表示執(zhí)行所有要被該硬件資源處理的、未放置的指令所需要的時(shí)間周期的下限。
第二實(shí)施例的指令調(diào)度設(shè)備與第一實(shí)施例的指令調(diào)度設(shè)備的不同點(diǎn)在于計(jì)算資源約束數(shù)值,并且每次將一個(gè)指令放置在時(shí)鐘周期中時(shí)都計(jì)算優(yōu)先級(jí)。
以下的說明主要集中在與第一實(shí)施例的這個(gè)差別上,而省略與第一
(總體結(jié)構(gòu))第二實(shí)施例涉及到的編譯器設(shè)備具有與第一實(shí)施例中的編譯器設(shè)備100(見圖1)相同的總體結(jié)構(gòu),不同點(diǎn)僅僅在于,其中作為指令調(diào)度單元130被包括的是第二實(shí)施例的指令調(diào)度設(shè)備,而不是第一實(shí)施例的指令調(diào)度設(shè)備。因此,由第二實(shí)施例中的指令調(diào)度單元130執(zhí)行的指令調(diào)度程序過程是與第一實(shí)施例不同的。
(指令調(diào)度單元130)下面參照流程圖詳細(xì)地描述第二實(shí)施例中的指令調(diào)度單元130。
圖6是顯示第二實(shí)施例中的指令調(diào)度程序過程的流程圖。
(步驟S201)相關(guān)性分析單元140建立相關(guān)圖,它表示由匯編程序代碼生成單元120所生成的匯編程序代碼串中的指令之間的相關(guān)性。
(步驟S202)優(yōu)先約束等級(jí)計(jì)算單元151分別把權(quán)重1、0和0賦給相關(guān)性分析單元140所建立的相關(guān)圖中代表數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性的弧線。然后,優(yōu)先約束等級(jí)計(jì)算單元151把權(quán)重相加以計(jì)算優(yōu)先約束等級(jí)。
(步驟S203)只要有未放置的指令,就重復(fù)進(jìn)行步驟S204到S213(循環(huán)3)。
(步驟S204)指令調(diào)度單元130生成可放置指令的列表??煞胖弥噶钍菨M足以下條件(a)和(b)之一的指令。
(a)該指令沒有與其有相關(guān)性的前趨部分。
(b)該指令具有與其有相關(guān)性的一個(gè)或多個(gè)前趨部分,但所有這些前趨部分已被放置在時(shí)鐘周期中。
(步驟S205)對(duì)于所述列表中的每個(gè)指令重復(fù)進(jìn)行步驟S206到S210(循環(huán)4)。
(步驟S206)資源約束評(píng)估單元152計(jì)算對(duì)于該指令的資源約束數(shù)值。該資源約束數(shù)值是通過把用于處理指令的硬件資源將要處理的、未放置的指令的總數(shù)除以可被該硬件資源并行處理的指令的最大數(shù)目而獲得的。
(步驟S207)如果指令的資源約束數(shù)值大于指令的優(yōu)先約束等級(jí),則所述程序過程進(jìn)到步驟S208。否則,所述程序過程進(jìn)到步驟S209。
(步驟S208)資源約束評(píng)估單元152將所述資源約束數(shù)值設(shè)置為該指令的優(yōu)先級(jí)。
(步驟S209)資源約束評(píng)估單元152將所述優(yōu)先約束等級(jí)設(shè)置為該指令的優(yōu)先級(jí)。
(步驟S210)所述程序過程返回到步驟S205。
(步驟S211)指令選擇單元161在未放置的指令中選擇具有最高優(yōu)先級(jí)的指令。
(步驟S212)執(zhí)行定時(shí)決定單元160把所選指令放置在滿足以下的兩個(gè)條件(1)和(2)的時(shí)鐘周期中。
(1)該時(shí)鐘周期等同于或遲于與該所選指令有反相關(guān)性或輸出相關(guān)性的前趨部分所位于的時(shí)鐘周期,并且遲于與該所選指令有數(shù)據(jù)相關(guān)性的前趨部分所位于的時(shí)鐘周期。
(2)該時(shí)鐘周期是其中硬件資源可處理指令的、最早的時(shí)鐘周期。
(步驟S213)所述程序過程返回到步驟S203。
(具體的例子)再次取圖15所示的程序作為例子。相關(guān)性分析單元140建立與圖16所示的傳統(tǒng)的相關(guān)圖等同的相關(guān)圖。優(yōu)先約束等級(jí)計(jì)算單元151以與傳統(tǒng)的技術(shù)相同的方式從相關(guān)圖計(jì)算優(yōu)先約束等級(jí)。
圖7和8顯示由指令調(diào)度單元130放置指令A(yù)到G的每個(gè)指令的處理。
在圖上,指令域301用字母符號(hào)顯示指令。資源域302在所述指令將要被存儲(chǔ)器存取單元處理時(shí)顯示M,以及在所述指令要被算術(shù)單元處理時(shí)顯示A。優(yōu)先約束等級(jí)域303顯示所述指令的優(yōu)先約束等級(jí)。
以指令A(yù)到G的執(zhí)行定時(shí)被決定的次序,第一到第七決定域310到370中每個(gè)決定域都顯示放置狀態(tài)、資源約束數(shù)值、和該指令的優(yōu)先級(jí)。當(dāng)所述指令是尚未放置的并且是不可放置時(shí),放置狀態(tài)區(qū)顯示“未放置的”。當(dāng)所述指令是尚未放置的并且是可放置時(shí),放置狀態(tài)區(qū)顯示“可放置的”。當(dāng)所述指令已被放置時(shí),放置狀態(tài)區(qū)顯示其中放置有該指令的時(shí)鐘周期的周期號(hào)。
放置結(jié)果域380顯示其中指令A(yù)到G最終被放置的時(shí)鐘周期的周期號(hào)。
以下詳細(xì)地解釋每個(gè)決定。
(第一決定)由于沒有與其有相關(guān)性的前趨部分的指令A(yù)是在這個(gè)階段唯一的可放置指令,故指令調(diào)度單元130生成可放置指令列表{A}。
資源約束評(píng)估單元152計(jì)算指令A(yù)的資源約束數(shù)值。指令A(yù)是將要被存儲(chǔ)器存取單元處理的指令。在這個(gè)階段,有四個(gè)將要被存儲(chǔ)器存取單元處理的未放置的指令,即指令A(yù)、E、F、和G。資源約束評(píng)估單元152把這個(gè)數(shù)4除以1(它是存儲(chǔ)器存取單元可并行處理的指令的最大數(shù)目)。資源約束評(píng)估單元152把結(jié)果4設(shè)置為指令A(yù)的資源約束數(shù)值。
指令A(yù)的這個(gè)資源約束數(shù)值大于指令A(yù)的優(yōu)先約束等級(jí)。因此,指令A(yù)的優(yōu)先級(jí)被設(shè)置為4。
指令選擇單元161選擇指令A(yù)。執(zhí)行定時(shí)決定單元160把指令A(yù)放置在時(shí)鐘周期1中。
(第二決定)一旦指令A(yù)已被放置,指令B,C和E就成為可放置的。因此,指令調(diào)度單元130生成可放置指令列表{B,C,E}。
資源約束評(píng)估單元152計(jì)算指令B的資源約束數(shù)值。指令B是將要被算術(shù)單元處理的指令。在這個(gè)階段,有三個(gè)將要被算術(shù)單元處理的未放置的指令,即指令B、C、和D。資源約束評(píng)估單元152把這個(gè)數(shù)3除以2(它是算術(shù)單元可并行處理的指令的最大數(shù)目)。資源約束評(píng)估單元152把該結(jié)果1.5設(shè)置為指令B的資源約束數(shù)值。
由于指令B的這個(gè)資源約束數(shù)值并不大于指令B的優(yōu)先約束等級(jí),故指令B的優(yōu)先級(jí)被設(shè)置為2。
資源約束評(píng)估單元152以與指令B相同的方式計(jì)算出指令C的優(yōu)先級(jí)為2。
資源約束評(píng)估單元152還計(jì)算指令E的資源約束數(shù)值。指令E是將要被存儲(chǔ)器存取單元處理的指令。在這個(gè)階段,有三個(gè)將要被存儲(chǔ)器存取單元處理的未放置的指令,即指令E、F、和G。資源約束評(píng)估單元152把這個(gè)數(shù)3除以1(它是存儲(chǔ)器存取單元可并行處理的指令的最大數(shù)目)。資源約束評(píng)估單元152把該結(jié)果3設(shè)置為指令E的資源約束數(shù)值。
由于指令E的這個(gè)資源約束數(shù)值大于指令E的優(yōu)先約束等級(jí),因此,指令E的優(yōu)先級(jí)被設(shè)置為3。
指令選擇單元161選擇具有最高優(yōu)先級(jí)的指令E。執(zhí)行定時(shí)決定單元160把指令E放置在時(shí)鐘周期2中,時(shí)鐘周期2是其中放置有指令A(yù)的時(shí)鐘周期1之后的最早的時(shí)鐘周期。
(第三決定)一旦指令A(yù)和E已被放置,具有指令A(yù)和E作為其前趨部分的指令B,C和F就成為可放置的。因此,指令調(diào)度單元130生成可放置指令列表{B,C,F(xiàn)}。
資源約束評(píng)估單元152以與第二決定中相同的方式計(jì)算出指令B和C各自的優(yōu)先級(jí)為2。
資源約束評(píng)估單元152還計(jì)算出指令F的資源約束數(shù)值為2。由于指令F的這個(gè)資源約束數(shù)值并不大于指令F的優(yōu)先約束等級(jí),因此指令F的優(yōu)先級(jí)被設(shè)置為2。
由于指令B,C和F具有相同的優(yōu)先級(jí),所以指令選擇單元161按照在該原始程序中指令A(yù)到G被描述的次序選擇指令B。執(zhí)行定時(shí)決定單元160把指令B放置在其中放置指令A(yù)的時(shí)鐘周期1之后的、最早的時(shí)鐘周期中。指令B可以在目標(biāo)處理器中與被放置在時(shí)鐘周期2中的指令E并行地被執(zhí)行,而并沒有超過在目標(biāo)處理器中每個(gè)部件可并行處理的指令的最大數(shù)目。所以,執(zhí)行定時(shí)決定單元160把指令B放置在時(shí)鐘周期2中。
(第四決定)其余的決定將更概略地進(jìn)行解釋。指令調(diào)度單元130生成可放置指令列表{C,F(xiàn)}。資源約束評(píng)估單元152分別計(jì)算出指令C和F的資源約束數(shù)值為1和2。優(yōu)先級(jí)計(jì)算單元150把指令C和F的優(yōu)先級(jí)都設(shè)置為2。
指令選擇單元161按照該原始程序的描述次序選擇指令C。執(zhí)行定時(shí)決定單元160把指令C放置在時(shí)鐘周期3中。
(第五決定)指令調(diào)度單元130生成可放置指令列表{D,F(xiàn)}。資源約束評(píng)估單元152分別計(jì)算出指令D和F的資源約束數(shù)值為0.5和2。優(yōu)先級(jí)計(jì)算單元150把指令D和F的優(yōu)先級(jí)分別設(shè)置為1和2。
指令選擇單元161選擇指令F。執(zhí)行定時(shí)決定單元160把指令F放置在時(shí)鐘周期3中。
(第六決定)指令調(diào)度單元130生成可放置指令列表{D,G}。資源約束評(píng)估單元152分別計(jì)算出指令D和G的資源約束數(shù)值為0.5和1。優(yōu)先級(jí)計(jì)算單元150把指令D和G的優(yōu)先級(jí)都設(shè)置為1。
指令選擇單元161按照該原始程序的描述次序選擇指令D。執(zhí)行定時(shí)決定單元160把指令D放置在時(shí)鐘周期4中。
(第七決定)指令調(diào)度單元130生成可放置指令列表{G}。優(yōu)先級(jí)計(jì)算單元150把指令G的優(yōu)先級(jí)設(shè)置為1。
指令選擇單元161選擇指令G。執(zhí)行定時(shí)決定單元160把指令G放置在時(shí)鐘周期4中。
結(jié)果,指令A(yù)到G以與第一實(shí)施例中相同的方式被放置在時(shí)鐘周期中(見圖5)。
(結(jié)論)如上所述,對(duì)于每個(gè)可放置指令,第二實(shí)施例的指令調(diào)度單元都把資源約束數(shù)值和優(yōu)先約束等級(jí)中較大的一個(gè)值設(shè)置為優(yōu)先級(jí)。然后該指令調(diào)度單元選擇具有最高優(yōu)先級(jí)的指令,并把所選指令放置在時(shí)鐘周期中。這個(gè)程序過程重復(fù)進(jìn)行,直到所有的指令被放置在時(shí)鐘周期中為止。
因此,一個(gè)具有嚴(yán)格的資源約束條件的指令被放置在比傳統(tǒng)技術(shù)更早的時(shí)鐘周期中。這使得有可能把包括這樣的嚴(yán)格資源約束的指令在內(nèi)的多個(gè)指令放置在比傳統(tǒng)技術(shù)更少的時(shí)鐘周期中。
具體地,第二實(shí)施例的指令調(diào)度設(shè)備具有以下的效果。假設(shè)有許多未放置的指令將要被只能并行處理小量指令的硬件資源處理,在這些指令之間沒有相關(guān)性。既然如此,對(duì)于這些指令便計(jì)算出高資源約束數(shù)值。這產(chǎn)生了將這樣的指令適當(dāng)?shù)胤湃胼^早的時(shí)鐘周期的特殊效果。而第一實(shí)施例的指令調(diào)度設(shè)備只在所述指令具有與另一個(gè)指令的相關(guān)性時(shí)才按照資源約束條件提升該指令的優(yōu)先級(jí),因此沒有這樣的特殊效果。
第三實(shí)施例本發(fā)明第三實(shí)施例的指令調(diào)度設(shè)備接收經(jīng)受調(diào)度的多個(gè)指令的輸入,并計(jì)算每個(gè)指令的優(yōu)先約束等級(jí)。此后,該指令調(diào)度設(shè)備重復(fù)進(jìn)行以下的程序過程,以致于把這些指令放入期望數(shù)目的時(shí)鐘周期中。
該指令調(diào)度設(shè)備從可放置指令中選擇具有最高優(yōu)先約束等級(jí)的指令,并把所選指令放置在時(shí)鐘周期中。然后該指令調(diào)度設(shè)備對(duì)于每個(gè)可放置指令計(jì)算其中可放置指令的、剩余時(shí)鐘周期的數(shù)目和該指令的資源約束數(shù)值。該指令調(diào)度設(shè)備比較該剩余時(shí)鐘周期的數(shù)目和該資源約束數(shù)值,從而判斷所有指令是否可被放入期望數(shù)目的時(shí)鐘周期中。
如果上述判斷為否定的,則該指令調(diào)度設(shè)備撤回緊接在前面的指令的放置,并從該可放置指令中去除該指令。然后該指令調(diào)度設(shè)備把可放置指令中的一個(gè)指令放置在時(shí)鐘周期中。
因此,第三實(shí)施例的指令調(diào)度設(shè)備與第二實(shí)施例的指令調(diào)度設(shè)備的不同點(diǎn)在于資源約束數(shù)值被用來判斷所有指令是否可被放置在期望數(shù)目的時(shí)鐘周期中,以及如果該判斷為否定的,則撤回緊接在前面的放置,以及放置另一個(gè)指令。
以下的說明主要集中在與第二實(shí)施例的這個(gè)差別上,而省略與第二
(總體結(jié)構(gòu))圖9是顯示第三實(shí)施例涉及到的編譯器設(shè)備400的總體結(jié)構(gòu)的功能方框圖。編譯器設(shè)備400包括第三實(shí)施例的指令調(diào)度設(shè)備作為指令調(diào)度單元430。
像編譯器設(shè)備100那樣,編譯器設(shè)備400從被保存在源文件101中的源程序生成對(duì)于并行處理最佳化的目標(biāo)程序,并把該目標(biāo)程序輸出到目標(biāo)文件102。
在圖9所示的編譯器設(shè)備400中,與圖1所示的第一實(shí)施例中的編譯器設(shè)備100的部件相同的那些部件被給予相同的參考數(shù)字。
編譯器設(shè)備400包括上部編譯器單元110、匯編程序代碼生成單元120、指令調(diào)度單元430和輸出單元170。指令調(diào)度單元130包括相關(guān)性分析單元140、優(yōu)先約束等級(jí)計(jì)算單元151和執(zhí)行定時(shí)決定單元460。執(zhí)行定時(shí)決定單元460包括指令選擇單元161、決定判斷單元462和重新決定控制單元464。決定判斷單元462包括資源約束評(píng)估單元152。
實(shí)際上編譯器設(shè)備400通過軟件和硬件實(shí)現(xiàn),其中硬件包括處理器、存儲(chǔ)程序的ROM(只讀存儲(chǔ)器)、工作的RAM(隨機(jī)存取存儲(chǔ)器)和盤裝置。編譯器設(shè)備400的各個(gè)部件的功能是通過處理器執(zhí)行存儲(chǔ)在ROM中的程序而達(dá)到的。在各個(gè)部件之間的數(shù)據(jù)傳遞是通過硬件,諸如RAM和盤裝置而實(shí)行的。
上部編譯器單元110、匯編程序代碼生成單元120和輸出單元170是與第一實(shí)施例的那些單元相同的,所以這里省略對(duì)它們的說明。下面說明指令調(diào)度單元430。
(指令調(diào)度單元430)下面參照流程圖詳細(xì)地描述第三實(shí)施例中的指令調(diào)度單元430。
圖10是顯示第三實(shí)施例中的指令調(diào)度程序過程的流程圖。
(步驟S401)相關(guān)性分析單元140建立相關(guān)圖,它表示由匯編程序代碼生成單元120生成的匯編程序代碼串中所包含的指令之間的相關(guān)性。
(步驟S402)優(yōu)先約束等級(jí)計(jì)算單元151分別把權(quán)重1、0和0賦給相關(guān)性分析單元140所建立的相關(guān)圖中代表數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性的弧線。然后優(yōu)先約束等級(jí)計(jì)算單元151把權(quán)重相加以計(jì)算優(yōu)先約束等級(jí)。
(步驟S403)只要有未放置的指令,就重復(fù)進(jìn)行步驟S404到S414(循環(huán)5)。
(步驟S404)指令調(diào)度單元430生成可放置指令的列表??煞胖弥噶钍菨M足以下條件(a)和(b)之一的指令。
(a)該指令沒有與其有相關(guān)性的前趨部分。
(b)該指令具有與其有相關(guān)性的一個(gè)或多個(gè)前趨部分,但所有這些前趨部分已被放置在時(shí)鐘周期中。
(步驟S405)指令選擇單元161從所述列表中選擇具有最高優(yōu)先約束等級(jí)的指令。執(zhí)行定時(shí)決定單元460把所選指令放置在滿足以下的兩個(gè)條件(1)和(2)的時(shí)鐘周期中。
(1)該時(shí)鐘周期等同于或遲于與該所選指令有反相關(guān)性或輸出相關(guān)性的前趨部分所位于的時(shí)鐘周期,并且遲于與該所選指令有數(shù)據(jù)相關(guān)性的前趨部分所位于的時(shí)鐘周期。
(2)該時(shí)鐘周期是其中硬件資源可處理指令的、最早的時(shí)鐘周期。
(步驟S406)指令調(diào)度單元430從所述列表中去除該指令。
(步驟S407)對(duì)于每個(gè)可放置的指令,包括由于步驟S405的結(jié)果而成為可放置的指令,重復(fù)進(jìn)行步驟S408到S413(循環(huán)6)。
(步驟S408)資源約束評(píng)估單元152計(jì)算所述指令的資源約束數(shù)值。該資源約束數(shù)值是通過把處理指令的硬件資源將要處理的、未放置的指令的數(shù)目除以可被該硬件資源并行處理的指令的最大數(shù)目而獲得的。
決定判斷單元462計(jì)算其中可放置指令的、剩余時(shí)鐘周期的數(shù)目。這個(gè)計(jì)算是通過使用目標(biāo)處理器內(nèi)處理任何指令都共同需要的資源(例如,指令譯碼器)在一個(gè)時(shí)鐘周期中能夠并行處理的指令的最大數(shù)目(此后稱為“公共最大數(shù)目”)而被完成的。在圖2所示的處理器800的情況下,公共最大數(shù)目是2。
剩余時(shí)鐘周期的數(shù)目是通過在期望數(shù)目的時(shí)鐘周期中統(tǒng)計(jì)每個(gè)滿足以下兩個(gè)條件(i)和(ii)的時(shí)鐘周期而獲得的。
(i)該時(shí)鐘周期等同于或遲于與該所選指令有反相關(guān)性或輸出相關(guān)性的前趨部分所位于的時(shí)鐘周期,并且遲于與該所選指令有數(shù)據(jù)相關(guān)性的前趨部分所位于的時(shí)鐘周期。
(11)該時(shí)鐘周期已放置的指令的數(shù)目小于公共最大數(shù)目。
(步驟S409)如果資源約束數(shù)值大于剩余時(shí)鐘周期的數(shù)目,則所述程序過程進(jìn)到步驟S410。否則,所述程序過程進(jìn)到步驟S413。
(步驟S410)如果所述列表是空的,則所述程序過程進(jìn)到步驟S412。否則,所述程序過程進(jìn)到步驟S411。
(步驟S411)重新決定控制單元464撤回在步驟S405作出的放置。此后,所述程序過程返回到步驟S405來放置另一個(gè)指令。
(步驟S412)指令調(diào)度單元430判斷不可能把所有的指令放置在期望數(shù)目的時(shí)鐘周期中,并終結(jié)所述程序過程。
(步驟S413)所述程序過程返回到步驟S407。
(步驟S414)所述程序過程返回到步驟S403。
(具體的例子)再次取圖15所示的程序作為例子,期望數(shù)目的時(shí)鐘周期被設(shè)置為4。相關(guān)性分析單元140建立與圖16所示的傳統(tǒng)的相關(guān)圖相同的相關(guān)圖。優(yōu)先約束等級(jí)計(jì)算單元151從該相關(guān)圖計(jì)算優(yōu)先約束等級(jí)。
圖11和12顯示由指令調(diào)度單元430放置A到G的每個(gè)指令的程序過程。
在圖上,指令域501用字母符號(hào)顯示指令。資源域502在所述指令將要被存儲(chǔ)器存取單元處理時(shí)顯示M,以及在所述指令將要被算術(shù)單元處理時(shí)顯示A。優(yōu)先約束等級(jí)域503顯示所述指令的優(yōu)先約束等級(jí)。
第一到第七決定域510到580,每個(gè)決定域以指令A(yù)到G的執(zhí)行定時(shí)所決定的次序來顯示放置狀態(tài)、剩余時(shí)鐘周期的數(shù)目、和該指令的資源約束數(shù)值。放置狀態(tài)區(qū)具有三個(gè)狀態(tài)。當(dāng)所述指令是尚未放置的并且是不可放置時(shí),放置狀態(tài)區(qū)顯示“未放置的”。當(dāng)所述指令是尚未放置的并且是可放置時(shí),放置狀態(tài)區(qū)顯示“可放置的”。當(dāng)所述指令已被放置時(shí),放置狀態(tài)區(qū)顯示其中放置有該指令的時(shí)鐘周期的周期號(hào)。此外,放置狀態(tài)區(qū)在括號(hào)中顯示其中新放置了一個(gè)可放置指令的時(shí)鐘周期的周期號(hào)。
放置結(jié)果域590顯示其中指令A(yù)到G最終被放置的時(shí)鐘周期的周期號(hào)。
以下詳細(xì)解釋每個(gè)決定。
(第一決定)由于沒有與其有相關(guān)性的前趨部分的指令A(yù)是在這個(gè)階段的唯一可放置指令,故指令調(diào)度單元430生成可放置指令列表{A}。指令選擇單元161選擇指令A(yù)。執(zhí)行定時(shí)決定單元460把指令A(yù)放置在時(shí)鐘周期1中。指令調(diào)度單元430從所述列表中去除指令A(yù)。
一旦指令A(yù)已被放置,三個(gè)指令B、C和E就成為可放置的。指令B和C將要被算術(shù)單元處理,而指令E將要被存儲(chǔ)器存取單元處理。在這個(gè)階段,有三個(gè)將要被算術(shù)單元處理的未放置的指令,即指令B、C、和D。同時(shí),有三個(gè)將要被存儲(chǔ)器存取單元處理的未放置的指令,即指令E、F、和G。
資源約束評(píng)估單元152通過把3(它是要被算術(shù)單元處理的未放置的指令的數(shù)目)除以2(它是算術(shù)單元可并行處理的指令的最大數(shù)目)從而計(jì)算指令B的資源約束數(shù)值為1.5。
另外,決定判斷單元462計(jì)算出對(duì)于指令B的剩余時(shí)鐘周期的數(shù)目為3,這是因?yàn)橛腥齻€(gè)時(shí)鐘周期2、3、和4是遲于其中放置有與指令B有數(shù)據(jù)相關(guān)性的指令A(yù)的時(shí)鐘周期1的,并且該每個(gè)時(shí)鐘周期中具有的已放置指令的數(shù)目小于公共最大數(shù)目。
同樣地,資源約束評(píng)估單元152計(jì)算出指令C的資源約束數(shù)值為1.5,而決定判斷單元462計(jì)算出指令C的剩余時(shí)鐘周期的數(shù)目為3。
另外,資源約束評(píng)估單元152通過把3(它是要被存儲(chǔ)器存取單元處理的未放置的指令的數(shù)目)除以1(它是存儲(chǔ)器存取單元可并行處理的指令的最大數(shù)目)從而計(jì)算指令E的資源約束數(shù)值為3。
決定判斷單元462計(jì)算出對(duì)于指令E的剩余時(shí)鐘周期的數(shù)目為3,這是因?yàn)橛腥齻€(gè)時(shí)鐘周期2、3、和4是遲于其中放置有與指令E有數(shù)據(jù)相關(guān)性的指令A(yù)的時(shí)鐘周期1的,并且該每個(gè)時(shí)鐘周期中具有的已放置指令的數(shù)目小于公共最大數(shù)目。
由于對(duì)于指令B、C和E來說,每個(gè)指令的資源約束數(shù)值并不大于其剩余時(shí)鐘周期的數(shù)目,所以處理過程進(jìn)到第二決定。
(第二決定)在第二決定中,指令B被放置在時(shí)鐘周期2中。此后,再次對(duì)于可放置指令C和E來計(jì)算每個(gè)指令的資源約束數(shù)值和剩余時(shí)鐘周期的數(shù)目。由于對(duì)于指令C和E來說,每個(gè)指令的資源約束數(shù)值并不大于其剩余時(shí)鐘周期的數(shù)目,所以處理過程進(jìn)到第三決定。
(第三決定)由于其前趨部分都已被放置的指令C和E都是可放置指令,故指令調(diào)度單元130生成可放置指令列表{C,E}。指令選擇單元161選擇指令C。執(zhí)行定時(shí)決定單元460把指令C放置在時(shí)鐘周期2中。指令調(diào)度單元430從所述列表中去除指令C。
一旦指令C已被放置,就有兩個(gè)可放置指令D和E。指令D將要被算術(shù)單元處理,而指令E將要被存儲(chǔ)器存取單元處理。在這個(gè)階段,只有一個(gè)將要被算術(shù)單元處理的未放置的指令,即指令D。同時(shí),有三個(gè)將要被存儲(chǔ)器存取單元處理的未放置的指令,即指令E、F、和G。
資源約束評(píng)估單元152通過把1(它是要被算術(shù)單元處理的未放置的指令的數(shù)目)除以2(它是算術(shù)單元可并行處理的指令的最大數(shù)目)從而計(jì)算出指令D的資源約束數(shù)值為0.5。
決定判斷單元462計(jì)算出指令D的剩余時(shí)鐘周期的數(shù)目為2,這是因?yàn)橛袃蓚€(gè)時(shí)鐘周期3和4是遲于其中放置有與指令D有數(shù)據(jù)相關(guān)性的指令C的時(shí)鐘周期2的,并且每個(gè)時(shí)鐘周期中已放置指令的數(shù)目小于公共最大數(shù)目。
另外,資源約束評(píng)估單元152通過把3(它是要被存儲(chǔ)器存取單元處理的未放置的指令的數(shù)目)除以1(它是存儲(chǔ)器存取單元可并行處理的指令的最大數(shù)目)從而計(jì)算出指令E的資源約束數(shù)值為3。
決定判斷單元462計(jì)算出指令E的剩余時(shí)鐘周期的數(shù)目為2,這是因?yàn)橛袃蓚€(gè)時(shí)鐘周期3和4是遲于其中放置有與指令E有數(shù)據(jù)相關(guān)性的指令A(yù)的時(shí)鐘周期1的,并且每個(gè)時(shí)鐘周期中已放置指令的數(shù)目小于公共最大數(shù)目。
由于指令E的資源約束數(shù)值大于指令E的剩余時(shí)鐘周期的數(shù)目,所以重新決定控制單元464撤回指令C的放置,以及放置另一個(gè)指令。
(第三決定-重試)在第三決定的重試中,可放置的指令列表是{E}。因此,指令E被選擇并且被放置在時(shí)鐘周期2中。
一旦指令E已被放置,就有兩個(gè)可放置指令,即指令F和被撤回放置的指令C。指令C將要被算術(shù)單元處理,而指令F將要被存儲(chǔ)器存取單元處理。在這個(gè)階段,有兩個(gè)將要被算術(shù)單元處理的未放置的指令,即指令C和D。同時(shí),有兩個(gè)將要被存儲(chǔ)器存取單元處理的未放置的指令,即指令F和G。
資源約束評(píng)估單元152計(jì)算出指令C的資源約束數(shù)值為1。決定判斷單元462計(jì)算出指令C的剩余時(shí)鐘周期的數(shù)目為2。
另外,資源約束評(píng)估單元152計(jì)算出指令F的資源約束數(shù)值為2。決定判斷單元462計(jì)算出指令F的剩余時(shí)鐘周期的數(shù)目為2。
由于對(duì)于每個(gè)指令C和F來說,每個(gè)指令的資源約束數(shù)值并不大于其剩余時(shí)鐘周期的數(shù)目,所以處理過程進(jìn)到第四決定。
(第四到第七決定)如圖12所示,在第四到第七決定中沒有出現(xiàn)重試。
圖13顯示作為以上處理的結(jié)果而被放置的指令A(yù)到G。如所說明的,所有的指令A(yù)到G被成功地放置在4個(gè)時(shí)鐘周期內(nèi)。
在第三實(shí)施例中,這些指令以與第一和第二實(shí)施例中相同的方式被放置在時(shí)鐘周期中,雖然決定的次序是部分不同的(見圖5)。
(結(jié)論)如上所述,第三實(shí)施例的指令調(diào)度設(shè)備嘗試把指令放置在期望數(shù)目的時(shí)鐘周期內(nèi)。該指令調(diào)度設(shè)備按照優(yōu)先約束等級(jí)放置指令。每次在放置一個(gè)指令時(shí),該指令調(diào)度設(shè)備考慮到資源約束條件,判斷所有指令是否都能被放入期望數(shù)目的時(shí)鐘周期中。如果上述判斷是否定的,則該指令調(diào)度設(shè)備撤回緊接在前面的放置,以及放置另一個(gè)指令。
因此,該指令調(diào)度設(shè)備考慮到資源約束條件,判斷所有指令是否都能放入期望數(shù)目的時(shí)鐘周期中。按照這個(gè)判斷的結(jié)果,該指令調(diào)度設(shè)備控制放置的重試。當(dāng)與只考慮指令之間的相關(guān)性而作出相同判斷的情況相比較時(shí),這有助于存在更大的機(jī)會(huì)將包括嚴(yán)格的資源約束的指令在內(nèi)的指令放入期望數(shù)目的時(shí)鐘周期中。
修正本發(fā)明是通過以上的實(shí)施例被描述的,然而應(yīng)當(dāng)明白本發(fā)明并不局限于以上的內(nèi)容。下面給出示例的修正方案。
(1)包括以上實(shí)施例中所描述步驟在內(nèi)的本發(fā)明的方法可以通過由計(jì)算機(jī)系統(tǒng)執(zhí)行的計(jì)算機(jī)程序來實(shí)現(xiàn)。這樣的計(jì)算機(jī)程序可以作為數(shù)字信號(hào)被分布。
本發(fā)明也可以用其上記錄有上述計(jì)算機(jī)程序或數(shù)字信號(hào)的計(jì)算機(jī)可讀的貯存媒體來實(shí)現(xiàn),諸如軟盤、硬盤、CD-ROM、MO(磁-光)盤、DVD(數(shù)字多用途盤)、DVD-ROM、DVD-RAM、或半導(dǎo)體存儲(chǔ)器。
實(shí)現(xiàn)本發(fā)明的計(jì)算機(jī)程序或數(shù)字信號(hào)也可通過網(wǎng)絡(luò)被傳輸,諸如電子通信網(wǎng)、有線或無線通信網(wǎng)、或互聯(lián)網(wǎng)。
本發(fā)明也可通過包括微處理器和存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)被實(shí)現(xiàn)。在這種情形下,所述計(jì)算機(jī)程序可被存儲(chǔ)在該存儲(chǔ)器中,而該微處理器則按照這個(gè)計(jì)算機(jī)程序運(yùn)行以便實(shí)現(xiàn)本發(fā)明。
所述計(jì)算機(jī)程序或數(shù)字信號(hào)可以通過分布其上記錄有該計(jì)算機(jī)程序或數(shù)字信號(hào)的貯存媒體、或通過在網(wǎng)絡(luò)上發(fā)送該計(jì)算機(jī)程序或數(shù)字信號(hào)而被提供給獨(dú)立的計(jì)算機(jī)系統(tǒng)。然后該獨(dú)立的計(jì)算機(jī)系統(tǒng)可執(zhí)行該計(jì)算機(jī)程序或數(shù)字信號(hào)以便起到本發(fā)明的作用。
(2)在以上實(shí)施例中使用的示例性程序(圖15)可以是在對(duì)于并行處理最佳化之前從源程序編譯的整個(gè)程序,或是這樣的程序的基本塊。
(3)第三實(shí)施例描述了這種情況當(dāng)可放置指令列表中一個(gè)指令的放置在步驟S411被撤回時(shí),所述程序過程返回到步驟S405,把另一個(gè)指令放置在可放置指令列表。如果在可放置指令列表中每個(gè)指令的放置都失敗,則在步驟S412判斷這些指令不能被放入期望數(shù)目的時(shí)鐘周期內(nèi)。
這可被修正為如下。過去在步驟S404生成的可放置指令列表被保留。如果當(dāng)前可放置指令列表中每個(gè)指令的放置都失敗,不是立即判斷這些指令不能被放入期望數(shù)目的時(shí)鐘周期內(nèi),而是撤回過去的可放置指令列表中一個(gè)指令的放置,以及放入該過去的可放置指令列表中的另一個(gè)指令。
這可以按照傳統(tǒng)上所使用的后向跟蹤算法容易地實(shí)行。
雖然上面參照附圖通過例子充分地描述了本發(fā)明,但應(yīng)當(dāng)指出,各種改變和修正對(duì)于本領(lǐng)域技術(shù)人員將是很明顯的。
所以,除非這樣的改變和修正脫離本發(fā)明的范圍,否則它們應(yīng)當(dāng)被視為包括在本發(fā)明的范圍內(nèi)。
權(quán)利要求
1.一種指令調(diào)度方法,包括優(yōu)先級(jí)計(jì)算步驟,該步驟根據(jù)經(jīng)受調(diào)度的多個(gè)指令之間的相關(guān)性與用于處理該多個(gè)指令的硬件資源的約束條件,計(jì)算該多個(gè)指令中每個(gè)指令的優(yōu)先級(jí),所述相關(guān)性是數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性;以及執(zhí)行定時(shí)決定步驟,該步驟決定具有最高優(yōu)先級(jí)的指令的執(zhí)行定時(shí)。
2.權(quán)利要求1的指令調(diào)度方法,其中該優(yōu)先級(jí)計(jì)算步驟包括優(yōu)先約束等級(jí)計(jì)算子步驟,該步驟計(jì)算所述多個(gè)指令中每個(gè)指令的優(yōu)先約束等級(jí),其中(a)如果所述指令具有一個(gè)后繼指令是反相關(guān)于或輸出相關(guān)于該指令,則該指令的優(yōu)先約束等級(jí)等于該后繼指令的優(yōu)先約束等級(jí),以及(b)如果所述指令具有一個(gè)后繼指令是數(shù)據(jù)相關(guān)于該指令,則該指令的優(yōu)先約束等級(jí)高于該后繼指令的優(yōu)先約束等級(jí);以及資源約束條件評(píng)估子步驟,該步驟判斷(i)所述指令是否具有相關(guān)于該指令的后繼指令,(ii)該指令和該后繼指令是否具有相等的優(yōu)先約束等級(jí),以及(iii)用于處理該指令的硬件資源是否不能并行處理該指令和該后繼指令,以及優(yōu)先級(jí)計(jì)算步驟,該步驟用于如果所有的判斷(i)、(ii)和(iii)都為肯定,則提升所述指令的優(yōu)先約束等級(jí)并把該提升后的優(yōu)先約束等級(jí)設(shè)置為該指令的優(yōu)先級(jí),而如果任一個(gè)判斷(i)、(ii)和(iii)為否定,則把該指令的優(yōu)先約束等級(jí)設(shè)置為該指令的優(yōu)先級(jí)。
3.權(quán)利要求1的指令調(diào)度方法,其中該優(yōu)先級(jí)計(jì)算步驟包括優(yōu)先約束等級(jí)計(jì)算子步驟,該步驟計(jì)算所述多個(gè)指令中每個(gè)指令的優(yōu)先約束等級(jí),其中(a)如果所述指令不具有相關(guān)于該指令的后繼指令,則該指令的優(yōu)先約束等級(jí)為1,(b)如果所述指令具有一個(gè)或多個(gè)后繼指令是反相關(guān)于或輸出相關(guān)于該指令,則該指令的優(yōu)先約束等級(jí)為這些后繼指令的優(yōu)先約束等級(jí)中的最高優(yōu)先約束等級(jí),以及(c)如果所述指令具有一個(gè)或多個(gè)后繼指令是數(shù)據(jù)相關(guān)于該指令,則該指令的優(yōu)先約束等級(jí)為這些后繼指令的優(yōu)先約束等級(jí)中的最高優(yōu)先約束等級(jí)與1的和;以及資源約束條件評(píng)估子步驟,該步驟通過把用于處理指令的硬件資源將要處理且其執(zhí)行定時(shí)還沒有被決定的指令的總數(shù),除以可被該硬件資源并行處理的指令的最大數(shù)目,從而計(jì)算該指令的資源約束數(shù)值,以及如果上述資源約束數(shù)值大于所述優(yōu)先約束等級(jí),則該優(yōu)先級(jí)計(jì)算步驟把該資源約束數(shù)值設(shè)置為該指令的優(yōu)先級(jí),而如果該資源約束數(shù)值不大于該優(yōu)先約束等級(jí),則該步驟把該優(yōu)先約束等級(jí)設(shè)置為該指令的優(yōu)先級(jí)。
4.一種用于順序地決定經(jīng)受調(diào)度的指令的執(zhí)行定時(shí)的指令調(diào)度方法,包括決定判斷步驟,該步驟在第一指令的執(zhí)行定時(shí)被決定后,根據(jù)用于處理第二指令的硬件資源的約束條件,來判斷該第二指令的執(zhí)行定時(shí)是否可被決定,以便使其處在預(yù)定的時(shí)間周期內(nèi);以及重新決定步驟,當(dāng)上述判斷為否定時(shí),該步驟撤回該第一指令的執(zhí)行定時(shí)的決定,以及決定一個(gè)不同于該第一指令的指令的執(zhí)行定時(shí)。
5.權(quán)利要求4的指令調(diào)度方法,其中所述預(yù)定的時(shí)間周期由多個(gè)時(shí)鐘周期表示,所述決定判斷步驟包括資源約束條件評(píng)估子步驟,該步驟通過把所述硬件資源將要處理且其執(zhí)行定時(shí)還沒有被決定的指令的總數(shù),除以可被該硬件資源并行處理的指令的最大數(shù)目,從而計(jì)算該第二指令的資源約束數(shù)值,以及決定判斷步驟,如果所述資源約束數(shù)值大于時(shí)鐘周期數(shù)目,則該步驟判斷為否定。
6.一種程序轉(zhuǎn)換方法,其特征在于輸入程序被轉(zhuǎn)換成包括多個(gè)指令的目標(biāo)程序,而該目標(biāo)程序內(nèi)所述多個(gè)指令中的每個(gè)指令的執(zhí)行定時(shí)使用權(quán)利要求1到5的任一項(xiàng)的指令調(diào)度方法被決定。
7.一種指令調(diào)度設(shè)備,包括優(yōu)先級(jí)計(jì)算單元,該單元能用來根據(jù)經(jīng)受調(diào)度的多個(gè)指令之間的相關(guān)性與用于處理該多個(gè)指令的硬件資源的約束條件,來計(jì)算該多個(gè)指令中每個(gè)指令的優(yōu)先級(jí),所述相關(guān)性是數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性;以及執(zhí)行定時(shí)決定單元,該單元能用來決定具有最高優(yōu)先級(jí)的指令的執(zhí)行定時(shí)。
8.一種用于順序地決定經(jīng)受調(diào)度的指令的執(zhí)行定時(shí)的指令調(diào)度設(shè)備,包括決定判斷單元,該單元用來在第一指令的執(zhí)行定時(shí)被決定后,根據(jù)用于處理第二指令的硬件資源的約束條件,判斷該第二指令的執(zhí)行定時(shí)是否可被決定,以便使其處在預(yù)定的時(shí)間周期內(nèi);以及重新決定單元,當(dāng)上述判斷為否定時(shí),該單元能用來撤回該第一指令的執(zhí)行定時(shí)的決定,以及決定一個(gè)不同于該第一指令的指令的執(zhí)行定時(shí)。
9.一種用于指令調(diào)度的計(jì)算機(jī)可執(zhí)行程序,該程序使得計(jì)算機(jī)執(zhí)行優(yōu)先級(jí)計(jì)算步驟,該步驟根據(jù)經(jīng)受調(diào)度的多個(gè)指令之間的相關(guān)性與用于處理該多個(gè)指令的硬件資源的約束條件,而計(jì)算該多個(gè)指令中每個(gè)指令的優(yōu)先級(jí),所述相關(guān)性是數(shù)據(jù)相關(guān)性、反相關(guān)性、和輸出相關(guān)性;以及執(zhí)行定時(shí)決定步驟,該步驟決定具有最高優(yōu)先級(jí)的指令的執(zhí)行定時(shí)。
10.一種用于順序地決定經(jīng)受調(diào)度的指令的執(zhí)行定時(shí)的計(jì)算機(jī)可執(zhí)行程序,該程序使得計(jì)算機(jī)執(zhí)行決定判斷步驟,該步驟用來在第一指令的執(zhí)行定時(shí)被決定后,根據(jù)用于處理第二指令的硬件資源的約束條件,來判斷該第二指令的執(zhí)行定時(shí)是否可被決定,以便使其處在預(yù)定的時(shí)間周期內(nèi);以及重新決定步驟,當(dāng)上述判斷為否定時(shí),該步驟撤回該第一指令的執(zhí)行定時(shí)的決定,以及決定一個(gè)不同于該第一指令的指令的執(zhí)行定時(shí)。
11.一種存儲(chǔ)權(quán)利要求9和10之一的程序的計(jì)算機(jī)可讀的貯存媒體。
全文摘要
相關(guān)性分析單元建立相關(guān)圖,表示從匯編程序代碼生成單元處得到的指令之間的相關(guān)性。優(yōu)先約束等級(jí)計(jì)算單元把預(yù)定的權(quán)重賦給該圖上的弧線,然后把權(quán)重相加以計(jì)算每個(gè)指令的優(yōu)先約束等級(jí)。當(dāng)具有相關(guān)性和相等的優(yōu)先約束等級(jí)的前趨部分和后繼部分由于資源約束條件而不能并行處理時(shí),資源約束評(píng)估單元提升該前趨部分的優(yōu)先約束等級(jí)。優(yōu)先級(jí)計(jì)算單元把提升后的優(yōu)先約束等級(jí)設(shè)置為該前趨部分的優(yōu)先級(jí)。指令選擇單元選擇具有最高優(yōu)先級(jí)的指令。執(zhí)行定時(shí)決定單元把所選指令放置在時(shí)鐘周期中。由指令選擇單元進(jìn)行的選擇和由執(zhí)行定時(shí)決定單元進(jìn)行的放置被重復(fù)進(jìn)行,直到所有指令被放置在時(shí)鐘周期中為止。
文檔編號(hào)G06F9/45GK1485735SQ0315465
公開日2004年3月31日 申請(qǐng)日期2003年8月22日 優(yōu)先權(quán)日2002年8月22日
發(fā)明者小川一, 瓶子岳人, 高山秀一, 坂田俊幸, 道本昌平, 一, 人, 平, 幸 申請(qǐng)人:松下電器產(chǎn)業(yè)株式會(huì)社