国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用跳轉(zhuǎn)目標基本塊的執(zhí)行包填充空閑節(jié)拍的指令調(diào)度方法

      文檔序號:10654283閱讀:569來源:國知局
      用跳轉(zhuǎn)目標基本塊的執(zhí)行包填充空閑節(jié)拍的指令調(diào)度方法
      【專利摘要】用跳轉(zhuǎn)目標基本塊的執(zhí)行包填充空閑節(jié)拍的指令調(diào)度方法,包括如下步驟:步驟一,在代碼流圖中找出與進行跨基本塊選擇執(zhí)行包填充空閑節(jié)拍操作有關(guān)的目標基本塊對;步驟二,對跳轉(zhuǎn)目標基本塊內(nèi)的指令執(zhí)行包進行前驅(qū)執(zhí)行包判定,即判定該執(zhí)行包內(nèi)各指令所依賴的其他指令,即被依賴指令所在的執(zhí)行包及其位置,并根據(jù)指令之間的依賴關(guān)系確定該執(zhí)行包的可執(zhí)行最早時間對應的節(jié)拍;步驟三,根據(jù)各個指令執(zhí)行包可執(zhí)行最早時間對應的節(jié)拍與基本塊內(nèi)空閑節(jié)拍的位置關(guān)系,計算出各指令執(zhí)行包各自對應的可填充最早時間,移動這些執(zhí)行包到對應的空閑節(jié)拍處,完成填充。
      【專利說明】
      用跳轉(zhuǎn)目標基本塊的執(zhí)行包填充空閑節(jié)拍的指令調(diào)度方法
      技術(shù)領(lǐng)域
      [0001] 本發(fā)明設(shè)及代碼的編譯優(yōu)化方法,面向化IW處理器硬件底層的無條件跳轉(zhuǎn)指令延 遲槽W及基本塊內(nèi)空閑節(jié)拍的填充技術(shù)領(lǐng)域,特別設(shè)及一種用跳轉(zhuǎn)目標基本塊的執(zhí)行包填 充空閑節(jié)拍的指令調(diào)度方法。
      【背景技術(shù)】
      [0002] 在編譯過程中,在完成了基本塊調(diào)度之后,基本塊內(nèi)仍然可能存在一些空閑節(jié)拍, 運些空閑節(jié)拍包括兩部分:1)指令與指令之間的數(shù)據(jù)依賴關(guān)系和指令執(zhí)行延時所造成的空 閑節(jié)拍;2)分支指令后未被有效指令填充的延遲槽。
      [0003] 分支調(diào)度指的是兩件事:1)用有用的指令填充分支指令之后的延遲槽;2)隱藏處 于比較指令和根據(jù)比較結(jié)果進行分支的指令之間的延遲。由于本發(fā)明針對的是無條件跳轉(zhuǎn) 指令延遲槽W及在基本塊調(diào)度之后的空閑節(jié)拍的填充問題,所W不設(shè)及比較指令和依賴比 較結(jié)果的條件分支指令之間的延遲W及條件分支指令本身的調(diào)度優(yōu)化問題。
      [0004] 對于不同的體系結(jié)構(gòu),分支的實現(xiàn)有很大的區(qū)別,但大多帶有多個延遲槽。如何有 效地填充運些延遲槽是提高代碼的并行度要考慮的重要問題之一。延遲槽可用有用的指令 或nop指令來填充,但后者實際是空轉(zhuǎn)。填充分支延遲槽時可W使用W該分支指令結(jié)束的基 本塊內(nèi)部的指令。首先檢查該基本塊的依賴DAG中是否有任何葉子結(jié)點能夠放到它最后一 條分支指令的延遲槽中。運種指令必須滿足如下條件:1)它必須是與分支指令可置換的,即 它不能是決定分支條件的指令,也不能是改變分支地址計算使用的寄存器之值或分支所使 用的任何其他資源(如條件代碼域)的指令;2)它本身不是分支指令。如果在W該分支指令 結(jié)束的基本塊內(nèi)部存在若干指令能夠填充該分支指令的延遲槽,選擇那種延遲時間為一拍 的指令;但是如果沒有只需一拍的指令,選擇延遲最小的指令。
      [0005] 在處理一條分支指令時,可W同時關(guān)注該分支的目標基本塊和緊接著它的后繼基 本塊。如果當前基本塊沒有可W放置在分支延遲槽中的指令,下一步是構(gòu)造分支目標基本 塊和它下面運個基本塊的MG,并嘗試找出那種同時作為DAG的根而出現(xiàn)的指令;如果找不 到運種指令,接下來就在目標基本塊中尋找滿足條件的指令。
      [0006] 上述的延遲槽填充方法只適用于具有單個分支延遲槽的超標量體系結(jié)構(gòu)。對于具 有多個分支延遲槽的化IW處理器來說,不能較好地填充分支指令的每一個延遲槽W及其他 的空閑節(jié)拍。因此,運種方法不能較好地對運類處理器提高W無條件分支指令結(jié)束的基本 塊內(nèi)指令的執(zhí)行效率,難W充分發(fā)揮硬件的性能。

      【發(fā)明內(nèi)容】

      [0007] 為解決上述現(xiàn)有技術(shù)存在的問題,本發(fā)明的目的在于提供用跳轉(zhuǎn)目標基本塊的執(zhí) 行包填充空閑節(jié)拍的指令調(diào)度方法,針對基本塊調(diào)度得到的執(zhí)行包序列,進一步使用無條 件跳轉(zhuǎn)目標基本塊內(nèi)的執(zhí)行包來填充該序列內(nèi)的空閑節(jié)拍。本發(fā)明的方法通過合理地從目 標基本塊內(nèi)選擇具有有效指令的執(zhí)行包來填充當前基本塊的無條件跳轉(zhuǎn)指令延遲槽W及 基本塊內(nèi)的空閑節(jié)拍,使得執(zhí)行基本塊指令過程中的空轉(zhuǎn)時間減少,同時減少分支目標基 本塊的執(zhí)行時間,達到提高代碼執(zhí)行效率的目的。
      [000引為達到上述目的,本發(fā)明的技術(shù)方案為:
      [0009] 用跳轉(zhuǎn)目標基本塊的執(zhí)行包填充空閑節(jié)拍的指令調(diào)度方法,包括如下步驟:
      [0010] 步驟一,在代碼流圖中找出與進行跨基本塊選擇執(zhí)行包填充空閑節(jié)拍操作有關(guān)的 目標基本塊對;
      [0011] 步驟二,對跳轉(zhuǎn)目標基本塊內(nèi)的指令執(zhí)行包進行前驅(qū)執(zhí)行包判定,即判定該執(zhí)行 包內(nèi)各指令所依賴的其他指令,即被依賴指令所在的執(zhí)行包及其位置,并根據(jù)指令之間的 依賴關(guān)系確定該執(zhí)行包的可執(zhí)行最早時間對應的節(jié)拍;
      [0012] 步驟=,根據(jù)各個指令執(zhí)行包可執(zhí)行最早時間對應的節(jié)拍與基本塊內(nèi)空閑節(jié)拍的 位置關(guān)系,計算出各指令執(zhí)行包各自對應的可填充最早時間,移動運些執(zhí)行包到對應的空 閑節(jié)拍處,完成填充。
      [0013] 進一步的,所述步驟一中,本方法對應的處理是在已經(jīng)完成了基本塊調(diào)度并形成 了各基本塊的執(zhí)行包序列的基礎(chǔ)上進行的;因此,在初始時刻,基本塊內(nèi)的指令已經(jīng)被分派 到執(zhí)行包序列中的各個執(zhí)行包內(nèi);
      [0014] 進一步的,確定步驟一中基本塊對的處理包括W下基本流程:
      [0015] 1)找到含有無條件跳轉(zhuǎn)指令的基本塊BI,且Bl中有空閑節(jié)拍;
      [0016] 2)找到Bl中的跳轉(zhuǎn)指令的跳轉(zhuǎn)目標基本塊B2,并要求B2內(nèi)第一個執(zhí)行包中不包含 跳轉(zhuǎn)指令;
      [0017] 3)判斷Bl是否是B2的唯一前驅(qū)基本塊,B2是否是Bl的唯一后繼基本塊;若條件滿 足,則表示發(fā)現(xiàn)了可進行跨基本塊填充空閑節(jié)拍的一對基本塊;
      [0018] 進一步的,步驟二中目標基本塊內(nèi)執(zhí)行包的前驅(qū)執(zhí)行包判定具體為:
      [0019] 如果指令12必須在指令I(lǐng)l執(zhí)行完之后才能執(zhí)行,則稱Il為12的前驅(qū)指令。如果12 在執(zhí)行包E2內(nèi),Il在執(zhí)行包El內(nèi),則稱El為E2的前驅(qū)執(zhí)行包,即E2必須在El之后執(zhí)行。運種 判定處理的主要方法是:
      [0020] 1)判斷目標基本塊內(nèi)的各指令執(zhí)行包是否有前驅(qū)執(zhí)行包;
      [0021] 2)若存在前驅(qū)執(zhí)行包,則通過該執(zhí)行包與前驅(qū)執(zhí)行包中各指令之間的數(shù)據(jù)依賴關(guān) 系,計算該執(zhí)行包的可執(zhí)行最早時間,然后根據(jù)執(zhí)行包的可執(zhí)行最早時間對應的節(jié)拍與Bl 內(nèi)空閑節(jié)拍的位置關(guān)系確定當前執(zhí)行包的可填充最早時間;
      [0022] 3)若不存在前驅(qū)執(zhí)行包,則該執(zhí)行包可插入到Bl內(nèi)的第一個空閑節(jié)拍。
      [0023] 進一步的,所述步驟=中,執(zhí)行包的可填充最早時間確定方法包括W下內(nèi)容:
      [0024] 1)確定Bl中所有空閑節(jié)拍在基本塊中的位置;
      [0025] 2)對于跳轉(zhuǎn)目標基本塊中的某個執(zhí)行包,在完成其前驅(qū)執(zhí)行包判定、得到其可執(zhí) 行最早時間W后,判斷其可填充最早時間對應的節(jié)拍時分=種情況處理:若其可執(zhí)行最早 時間在基本塊內(nèi)第一個空閑節(jié)拍之前,則可填充最早時間為第一個空閑節(jié)拍;若其可執(zhí)行 最早時間在基本塊內(nèi)第一個空閑節(jié)拍和最后一個空閑節(jié)拍之間,則可填充最早時間為該執(zhí) 行包可執(zhí)行最早時間之后的第一個空閑節(jié)拍;若其可執(zhí)行最早時間在基本塊內(nèi)最后一個空 閑節(jié)拍之后,則當前執(zhí)行包不可W用來填充。
      [0026] 相對于現(xiàn)有技術(shù),本發(fā)明的有益效果為:
      [0027] 本發(fā)明的使用無條件跳轉(zhuǎn)目標基本塊的執(zhí)行包填充基本塊內(nèi)空閑節(jié)拍的方法考 慮了代碼在進行了基本塊調(diào)度之后仍然可能存在部分可填充空閑節(jié)拍的問題。通過本方法 可W使用無條件跳轉(zhuǎn)目標基本塊內(nèi)的執(zhí)行包同時對無條件跳轉(zhuǎn)指令延遲槽和基本塊內(nèi)的 其它空閑節(jié)拍進行填充。跨基本塊進行執(zhí)行包調(diào)度實際是增加了指令的調(diào)度域,給調(diào)度提 供了更多改善代碼的機會。
      【附圖說明】
      [0028] 圖1為計算目標基本塊內(nèi)某個執(zhí)行包的可執(zhí)行最早時間的過程圖。
      [0029] 圖中T為指令I(lǐng)與前驅(qū)指令inst之間必須的延遲時間;P為包含前驅(qū)指令inst的執(zhí) 行包所在的節(jié)拍編號,基本塊內(nèi)第一個執(zhí)行包的P值為1。由于執(zhí)行包中一條指令可能有多 條前驅(qū)指令,所W可能有多個T+P的值,可執(zhí)行最早時間為該指令對應的那些T+P值中最大 的那個值。對目標基本塊中某個執(zhí)行包中的每條指令計算可執(zhí)行最早時間,即找出該執(zhí)行 包中每條指令的最大T+P值;其中最大的那個可執(zhí)行最早時間T+P的值就是該執(zhí)行包的可執(zhí) 行最早時間。
      [0030] 圖2為選擇執(zhí)行包填充空閑節(jié)拍的狀態(tài)轉(zhuǎn)換圖,計算目標基本塊內(nèi)執(zhí)行包的最早 可填充時間的狀態(tài)轉(zhuǎn)換。
      [0031] 根據(jù)該圖的各個狀態(tài)W及相互之間的轉(zhuǎn)換可實現(xiàn)一個確定有限狀態(tài)自動機來判 定目標基本塊內(nèi)各執(zhí)行包的最早可填充時間。其中Bl是B2的唯一前驅(qū),B2是Bl的唯一后繼。 化指令表示無條件跳轉(zhuǎn)指令。其他說明如下:
      [0032] 1化Time表示一個執(zhí)行包的可執(zhí)行最早時間所在的節(jié)拍號;
      [0033] 2)FTime是一個執(zhí)行包的可填充最早時間所在的節(jié)拍號;
      [0034] 3)P[n]為基本塊內(nèi)所有空閑節(jié)拍的序列;
      [0035] 4)P[ 1 ]為基本塊內(nèi)的第一個空閑節(jié)拍的節(jié)拍號;
      [0036] 5)P[i]為基本塊內(nèi)第i個空閑節(jié)拍;
      [0037] 6化P為執(zhí)行包可執(zhí)行最早時間ETime所在的節(jié)拍;
      [0038] 7)FP為執(zhí)行包可填充最早時間FTime所在的節(jié)拍;
      【具體實施方式】
      [0039] 下面結(jié)合附圖和【具體實施方式】對本發(fā)明技術(shù)方案做進一步詳細描述:
      [0040] 如圖1、2所示,本發(fā)明方法的實施具體依次包括與執(zhí)行包的選擇和填充過程相關(guān) 的數(shù)據(jù)結(jié)構(gòu)的構(gòu)造、頂層流程控制、查找可W跨基本塊填充空閑節(jié)拍的基本塊對、執(zhí)行包的 前驅(qū)判定、計算執(zhí)行包的可執(zhí)行最早時間、計算執(zhí)行包的可填充最早時間、填充空閑節(jié)拍、 刪除目標基本塊內(nèi)的可填充執(zhí)行包等部分。本方法可W用任何程序設(shè)計語言進行具體實 施。下面W面向?qū)ο笳Z言為例來說明【具體實施方式】。
      [0041] 在面向?qū)ο笳Z言程序中,數(shù)據(jù)和相關(guān)的功能模塊都封裝在類中。本發(fā)明的方法設(shè) 及的實施內(nèi)容可W用一個執(zhí)行包調(diào)度類封裝,將對跨基本塊進行執(zhí)行包調(diào)度所需的全局數(shù) 據(jù)作為此類的數(shù)據(jù)成員。由于本發(fā)明只設(shè)及基本塊內(nèi)空閑節(jié)拍的填充問題,所W,對于已完 成基本塊調(diào)度的基本塊和運些基本塊中的指令的基本信息,假定它們已經(jīng)保存在基本塊類 對象和指令類對象之中(其中包含了基本塊的前驅(qū)和后繼信息,基本塊內(nèi)的執(zhí)行包序列,各 指令的依賴指令和被依賴指令信息);對于指令模板信息,假定它們保存在指令模板類的對 象中;對于體系結(jié)構(gòu)的基本信息,假定它們已經(jīng)保存在體系結(jié)構(gòu)類對象中。它們都可W通過 指針或者全局變量名來訪問。所W,在下面的具體實施中,只設(shè)及與本無條件跳轉(zhuǎn)情況指令 延遲槽填充指令選擇方法直接相關(guān)的內(nèi)容。
      [0042] 1數(shù)據(jù)結(jié)構(gòu)構(gòu)造
      [0043] 為了實現(xiàn)本發(fā)明的使用無條件跳轉(zhuǎn)目標基本塊內(nèi)執(zhí)行包對基本塊內(nèi)的空閑節(jié)拍 進行填充的方法,需要相關(guān)數(shù)據(jù)結(jié)構(gòu)的支持。除硬件結(jié)構(gòu)信息和指令集信息外,其他主要數(shù) 據(jù)結(jié)構(gòu)及其說明如下:
      [0044] 1)空閑節(jié)拍列表。空閑節(jié)拍列表用于描述基本塊內(nèi)所有的空閑節(jié)拍的一些狀態(tài)信 息。它是一個下標從1開始的一維數(shù)組,數(shù)組元素的個數(shù)為基本塊內(nèi)空閑節(jié)拍的個數(shù);其中 的元素值是各空閑節(jié)拍在基本塊的執(zhí)行包序列中對應的執(zhí)行包編號。例如:一個基本塊中 的第3拍、第5拍和第8拍是空閑節(jié)拍,則a[l]=3、a[2]=5、a[3]=8;
      [0045] 2)被依賴執(zhí)行包集合。一個執(zhí)行包可能包含多條指令,運些指令所依賴的其他指 令所在的執(zhí)行包稱作該執(zhí)行包的被依賴執(zhí)行包。一個執(zhí)行包的被依賴執(zhí)行包可能有多個, 其中屬于無條件跳轉(zhuǎn)指令所在基本塊的那些執(zhí)行包構(gòu)成被依賴執(zhí)行包集合;
      [0046] 3)被依賴指令集合。目標基本塊內(nèi)執(zhí)行包中的每條指令對應一個被依賴指令集 合。運些集合中的指令是與目標基本塊內(nèi)執(zhí)行包中的指令存在數(shù)據(jù)依賴關(guān)系的被依賴指 令;
      [0047] 4)計算執(zhí)行包可填充最早時間的確定有限狀態(tài)自動機的各個狀態(tài)的枚舉;
      [0048] 5)每個執(zhí)行包都需要的輔助數(shù)據(jù):執(zhí)行包的可執(zhí)行最早時間;執(zhí)行包可執(zhí)行最早 時間對應的節(jié)拍的編號,執(zhí)行包的可填充最早時間,執(zhí)行包可填充最早時間對應的節(jié)拍的 編號。
      [0049] 2頂層流程控制
      [0050] 頂層控制過程有如下步驟:
      [0051] (1)查找可進行跨基本塊空閑節(jié)拍填充的一對基本塊?;緣KBl和B2是滿足調(diào)度 條件的基本塊對,Bl是B2的前驅(qū)基本塊,B2是Bl的后繼基本塊,如果找到運樣的一對基本 塊,用下面的步驟對它們進行處理;
      [0052] (2)對無條件跳轉(zhuǎn)目標基本塊的執(zhí)行包序列中的各執(zhí)行包進行前驅(qū)執(zhí)行包判定, 找出所有被依賴執(zhí)行包并放入被依賴執(zhí)行包集合中。
      [0053] (3)通過執(zhí)行包中的所有指令與其被依賴指令之間的數(shù)據(jù)依賴關(guān)系,計算出當前 執(zhí)行包的可執(zhí)行最早時間。
      [0054] (4)將執(zhí)行包的可執(zhí)行最早時間對應的節(jié)拍與基本塊內(nèi)空閑節(jié)拍進行區(qū)間比較, 確定執(zhí)行包的可填充最早時間。
      [0055] (5)將可填充的執(zhí)行包填入到相應的空閑節(jié)拍中,同時在目標基本塊的執(zhí)行包序 列中刪除該可填充執(zhí)行包。
      [0056] 3查找滿足調(diào)度條件的一對基本塊
      [0057] 運一部分的處理對應5.2節(jié)步驟中的第1步。在代碼流圖中查找運樣的一對基本塊 W對它們進行跨基本塊填充空閑節(jié)拍,需要滿足W下條件:
      [005引1)基本塊Bl W無條件跳轉(zhuǎn)指令結(jié)束;
      [0059] 2)基本塊BI有唯一后繼基本塊B2,B2有唯一前驅(qū)基本塊BI;
      [0060] 3)基本塊Bl內(nèi)有空閑節(jié)拍;
      [0061] 4)基本塊B2的第一個執(zhí)行包內(nèi)不包含分支指令。
      [0062] 具體步驟如下:
      [0063] 1)為基本塊設(shè)置兩個標示變量flag和target,它們分別標示當前基本塊是否包含 無條件跳轉(zhuǎn)指令和是否是滿足條件的目標基本塊。根據(jù)基本塊標號遍歷基本塊集合中的各 個基本塊,對基本塊進行下面的所有步驟的處理;
      [0064] 2)令flag為"假",target為"假",遍歷基本塊內(nèi)的各個執(zhí)行包中的各條指令,若當 前基本塊執(zhí)行包序列中存在任意一個包含有無條件跳轉(zhuǎn)指令的執(zhí)行包,并且當前基本塊中 存在至少一個空執(zhí)行包,則令flag為"真"值并結(jié)束遍歷。分W下兩種情況處理:
      [0065] (1)在當前基本塊內(nèi)的所有執(zhí)行包中的所有指令都遍歷完成之后,若flag值仍為 "假",則對緊接著當前基本塊的下一個基本塊進行上述步驟2)處理;
      [0066] (2)當flag為"真"時,根據(jù)無條件跳轉(zhuǎn)指令操作數(shù)中的目標基本塊標號找到目標 基本塊;
      [0067] 3)如果目標基本塊有唯一前驅(qū),則遍歷第一個執(zhí)行包中的所有指令,如果該執(zhí)行 包中不包含分支指令,則令target為"真",否則target仍為"假',同時令flag也為"假";此 時表示該基本塊對不滿足條件。然后對緊接著前驅(qū)基本塊的下一個基本塊進行上述步驟2) 處理1;
      [006引6)flag和化rget同時為"真"時,表示找到了滿足條件的一對基本塊。
      [0069] 4執(zhí)行包的前驅(qū)執(zhí)行包判定
      [0070] 如果指令12必須在指令I(lǐng)l執(zhí)行完之后才能執(zhí)行,則稱Il為12的前驅(qū)指令,即Il是 12的被依賴指令,12是Il的依賴指令。如果12在執(zhí)行包E2內(nèi),Il在執(zhí)行包El內(nèi),則稱El為E2 的前驅(qū)執(zhí)行包,即E2必須在El之后執(zhí)行。
      [0071] 進行執(zhí)行包前驅(qū)執(zhí)行包判定是計算執(zhí)行包的可執(zhí)行最早時間的準備工作。一條指 令的被依賴指令可能有多條,意味著一個執(zhí)行包的前驅(qū)執(zhí)行包可能有多個,并且該指令與 對應的各被依賴指令之間的延遲都可能不同。此時根據(jù)執(zhí)行包中的各指令與其對應的被依 賴指令之間的延遲時間找到該執(zhí)行包在基本塊內(nèi)可W開始執(zhí)行的最早時間對應的節(jié)拍。計 算執(zhí)行包的可執(zhí)行最早時間的處理過程如附圖1所示。
      [0072] 執(zhí)行包的前驅(qū)執(zhí)行包判定的具體步驟如下:
      [0073] 1)如果目標基本塊中有分支指令,則遍歷分支指令之前的每一個執(zhí)行包內(nèi)的每一 條指令,否則遍歷目標基本塊執(zhí)行包序列中的每一個執(zhí)行包內(nèi)的每一條指令;對各指令進 行如下所有步驟處理;
      [0074] 2)找到當前指令的每一條被依賴指令,并放入被依賴指令集合中。如果被依賴指 令集合中存在屬于目標基本塊B2內(nèi)的指令,則包含當前指令的執(zhí)行包不能對前驅(qū)基本塊Bl 內(nèi)的空閑節(jié)拍進行填充,否則繼續(xù)下面步驟處理;
      [0075] 3)遍歷當前執(zhí)行包內(nèi)當前指令的被依賴指令集合中的各指令,通過每條指令對應 的指令模板信息類對象確定各被依賴指令的執(zhí)行周期T;
      [0076] 4)確定當前指令的各被依賴指令所在的被依賴執(zhí)行包對應的節(jié)拍編號P;
      [0077] 5)計算當前指令的所有被依賴指令對應的T+P的值,則當前指令的可執(zhí)行最早時 間為最大的那個T+P的值對應的節(jié)拍;
      [0078] 6)對當前執(zhí)行包中的其他指令進行3)、4)、5)步驟處理,確定當前執(zhí)行包中每條指 令的可執(zhí)行最早時間,其中最大的那個可執(zhí)行最早時間就是當前執(zhí)行包的可執(zhí)行最早時 間。
      [0079] 5獲得執(zhí)行包的可填充最早時間
      [0080] 本發(fā)明方法通過確定狀態(tài)有限自動機來發(fā)現(xiàn)可W填充基本塊內(nèi)空閑節(jié)拍的執(zhí)行 包,狀態(tài)轉(zhuǎn)換關(guān)系見附圖2。獲得執(zhí)行包的可填充最早時間FTime的步驟如下:
      [0081] 1)更新空閑節(jié)拍列表。遍歷基本塊Bl指令執(zhí)行包序列中的所有執(zhí)行包,如果有空 執(zhí)行包,即該執(zhí)行包所在的節(jié)拍為空閑節(jié)拍;將運些空閑節(jié)拍對應的節(jié)拍編號依次存入空 閑節(jié)拍列表中。
      [0082] 2)遍歷目標基本塊指令執(zhí)行包序列中的各個指令執(zhí)行包,對各執(zhí)行包進行下面步 驟3)的處理。
      [0083] 3)對當前執(zhí)行包進行前驅(qū)執(zhí)行包判定。將執(zhí)行包的可執(zhí)行最早時間ETime對應的 節(jié)拍編號與空閑節(jié)拍列表中的空閑節(jié)拍對應的節(jié)拍編號進行區(qū)間關(guān)系分析,分析過程分如 下幾種情況進行處理:
      [0084] (1)若當前執(zhí)行包不存在被依賴執(zhí)行包,則當前執(zhí)行包的可填充最早時間FTime為 基本塊內(nèi)第一個空閑節(jié)拍對應的節(jié)拍編號a[l]。將當前執(zhí)行包的所有指令復制到該空節(jié)點 對應的執(zhí)行包中,然后刪除目標基本塊內(nèi)執(zhí)行包鏈表中當前執(zhí)行包所在的節(jié)點。進行步驟 1)處理更新空閑節(jié)拍列表。
      [0085] (2)若當前執(zhí)行包的可執(zhí)行最早時間ETime小于等于空閑節(jié)拍列表中的第一個元 素曰[1]的值,則當前執(zhí)行包的可填充最早時間FTime對應的節(jié)拍為空閑節(jié)拍列表中第一個 元素 a[l]所對應的節(jié)拍。將當前執(zhí)行包的所有信息復制到該空節(jié)點中,然后刪除目標基本 塊內(nèi)執(zhí)行包鏈表中當前執(zhí)行包所在的節(jié)點。進行步驟1)處理更新空閑節(jié)拍列表。
      [0086] (3)若當前執(zhí)行包的可執(zhí)行最早時間ETime大于空閑節(jié)拍列表中的第一個元素 a
      [1]的值,小于等于空閑節(jié)拍列表中的最后一個元素 a[n]的值,則當前執(zhí)行包的可填充最早 時間FTime對應的節(jié)拍為空閑節(jié)拍列表中第一個其元素的值大于等于該執(zhí)行包可執(zhí)行最早 時間的那個元素 a[i]所對應的節(jié)拍。將當前執(zhí)行包的所有信息復制到該空節(jié)點中,然后刪 除目標基本塊內(nèi)執(zhí)行包鏈表中當前執(zhí)行包所在的節(jié)點。進行步驟1)處理更新空閑節(jié)拍列 表。
      [0087] (4)若當前執(zhí)行包的可執(zhí)行最早時間ETime大于空閑節(jié)拍列表中的最后一個元素 a [n]的值,則當前執(zhí)行包不能用來填充空閑節(jié)拍。
      [0088] 4)取下一個執(zhí)行包進行上述2)、3)步驟處理,直到取到含有分支指令的執(zhí)行包或 者目標基本塊內(nèi)的所有執(zhí)行包都處理完成。
      [0089] 附表1目標基本塊中執(zhí)行包可填充最早時間FTime-覽表。其中,(a[i]為空閑節(jié)拍 集合中第一個其元素的值大于等于該執(zhí)行包可執(zhí)行最早時間的那個元素所表示的節(jié)拍,a [1]為基本塊中的第一個空閑節(jié)拍,a[n]為最后一個空閑節(jié)拍,n為空閑節(jié)拍的個數(shù)。)
      [0090]
      [0091] 附表1中的內(nèi)容是獲得執(zhí)行包可填充最早時間后的結(jié)果,執(zhí)行包的可填充最早時 間只有表中所示的運幾種可能
      [0092] W上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何 不經(jīng)過創(chuàng)造性勞動想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的 保護范圍應該W權(quán)利要求書所限定的保護范圍為準。
      【主權(quán)項】
      1. 用跳轉(zhuǎn)目標基本塊的執(zhí)行包填充空閑節(jié)拍的指令調(diào)度方法,其特征在于,包括如下 步驟: 步驟一,在代碼流圖中找出與進行跨基本塊選擇執(zhí)行包填充空閑節(jié)拍操作有關(guān)的目標 基本塊對; 步驟二,對跳轉(zhuǎn)目標基本塊內(nèi)的指令執(zhí)行包進行前驅(qū)執(zhí)行包判定,即判定該執(zhí)行包內(nèi) 各指令所依賴的其他指令,即被依賴指令所在的執(zhí)行包及其位置,并根據(jù)指令之間的依賴 關(guān)系確定該執(zhí)行包的可執(zhí)行最早時間對應的節(jié)拍; 步驟三,根據(jù)各個指令執(zhí)行包可執(zhí)行最早時間對應的節(jié)拍與基本塊內(nèi)空閑節(jié)拍的位置 關(guān)系,計算出各指令執(zhí)行包各自對應的可填充最早時間,移動這些執(zhí)行包到對應的空閑節(jié) 拍處,完成填充。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟一中,本方法對應的處理是在已 經(jīng)完成了基本塊調(diào)度并形成了各基本塊的執(zhí)行包序列的基礎(chǔ)上進行的;因此,在初始時刻, 基本塊內(nèi)的指令已經(jīng)被分派到執(zhí)行包序列中的各個執(zhí)行包內(nèi)。3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,確定步驟一中基本塊的處理包括以下基本 流程: 1) 找到含有無條件跳轉(zhuǎn)指令的基本塊B1,且B1中有空閑節(jié)拍; 2) 找到B1中的跳轉(zhuǎn)指令的跳轉(zhuǎn)目標基本塊B2,并要求B2內(nèi)第一個執(zhí)行包中不包含跳轉(zhuǎn) 指令; 3) 判斷B1是否是B2的唯一前驅(qū)基本塊,B2是否是B1的唯一后繼基本塊;若條件滿足,則 表示發(fā)現(xiàn)了可進行跨基本塊填充空閑節(jié)拍的一對基本塊。4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟二中目標基本塊內(nèi)執(zhí)行包的前驅(qū)執(zhí)行 包判定具體為: 如果指令12必須在指令I(lǐng)I執(zhí)行完之后才能執(zhí)行,則稱II為12的前驅(qū)指令。如果12在執(zhí) 行包E2內(nèi),11在執(zhí)行包E1內(nèi),則稱E1為E2的前驅(qū)執(zhí)行包,即E2必須在E1之后執(zhí)行。這種判定 處理的主要方法是: 1) 判斷目標基本塊內(nèi)的各指令執(zhí)行包是否有前驅(qū)執(zhí)行包; 2) 若存在前驅(qū)執(zhí)行包,則通過該執(zhí)行包與前驅(qū)執(zhí)行包中各指令之間的數(shù)據(jù)依賴關(guān)系, 計算該執(zhí)行包的可執(zhí)行最早時間,然后根據(jù)執(zhí)行包的可執(zhí)行最早時間對應的節(jié)拍與B1內(nèi)空 閑節(jié)拍的位置關(guān)系確定當前執(zhí)行包的可填充最早時間; 3) 若不存在前驅(qū)執(zhí)行包,則該執(zhí)行包可插入到B1內(nèi)的第一個空閑節(jié)拍。5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟三中,執(zhí)行包的可填充最早時間 確定方法包括以下內(nèi)容: 1) 確定B1中所有空閑節(jié)拍在基本塊中的位置; 2) 對于跳轉(zhuǎn)目標基本塊中的某個執(zhí)行包,在完成其前驅(qū)執(zhí)行包判定、得到其可執(zhí)行最 早時間以后,判斷其可填充最早時間對應的節(jié)拍時分三種情況處理:若其可執(zhí)行最早時間 在基本塊內(nèi)第一個空閑節(jié)拍之前,則可填充最早時間為第一個空閑節(jié)拍;若其可執(zhí)行最早 時間在基本塊內(nèi)第一個空閑節(jié)拍和最后一個空閑節(jié)拍之間,則可填充最早時間為該執(zhí)行包 可執(zhí)行最早時間之后的第一個空閑節(jié)拍;若其可執(zhí)行最早時間在基本塊內(nèi)最后一個空閑節(jié) 拍之后,則當前執(zhí)行包不可以用來填充。
      【文檔編號】G06F9/45GK106020922SQ201610370406
      【公開日】2016年10月12日
      【申請日】2016年5月30日
      【發(fā)明人】胡勇華, 黃文體, 李國輝, 邱亞瓊
      【申請人】湖南科技大學
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1