麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種指令調(diào)度方法及裝置制造方法

文檔序號(hào):6508542閱讀:157來(lái)源:國(guó)知局
一種指令調(diào)度方法及裝置制造方法
【專利摘要】本發(fā)明實(shí)施例提供一種指令調(diào)度方法及裝置,涉及通信領(lǐng)域,能夠使得處理器或流水線正常運(yùn)行,提高了調(diào)度的正確性。包括:構(gòu)建數(shù)據(jù)依賴圖;分別從所述數(shù)據(jù)依賴圖中提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字,使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之間不存在依賴關(guān)系;其中,0≤k≤m×n,所述n表示一個(gè)超長(zhǎng)指令字中指令槽的個(gè)數(shù),所述n為大于等于1的整數(shù),所述m表示每拍中超長(zhǎng)指令字的個(gè)數(shù),所述m為大于等于1的整數(shù),所述t為大于等于1小于等于n-1的整數(shù)。本發(fā)明實(shí)施例提供一種指令調(diào)度方法及裝置用于指令的調(diào)度。
【專利說(shuō)明】一種指令調(diào)度方法及裝置

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及通信領(lǐng)域,尤其涉及一種指令調(diào)度方法及裝置。

【背景技術(shù)】
[0002] 現(xiàn)有技術(shù)中,CPU (Central Processing Unit,中央處理器)中的各功能部件通常 是獨(dú)立并行的,因此編譯器基于CPU結(jié)構(gòu)采用指令調(diào)度方法提高指令級(jí)并行。其中,指令調(diào) 度是一種指令并行執(zhí)行的技術(shù),編譯器或者機(jī)器硬件通過(guò)調(diào)整指令的順序來(lái)提高每拍內(nèi)機(jī) 器執(zhí)行指令的數(shù)量,所述拍為編譯器在編譯源程序時(shí)所模擬的機(jī)器執(zhí)行指令的時(shí)鐘周期。 現(xiàn)有編譯技術(shù)中通常采用表調(diào)度算法來(lái)實(shí)現(xiàn)指令調(diào)度,通常采用一個(gè)候選指令隊(duì)列。具體 的,在進(jìn)行指令調(diào)度時(shí),首先對(duì)需要調(diào)度的指令構(gòu)建數(shù)據(jù)依賴圖,該數(shù)據(jù)依賴圖由若干個(gè)節(jié) 點(diǎn)組成,每個(gè)節(jié)點(diǎn)代表一條指令,該數(shù)據(jù)依賴圖可以用來(lái)表示指令之間的依賴關(guān)系。然后計(jì) 算各條指令的優(yōu)先級(jí),接著逐拍對(duì)數(shù)據(jù)依賴圖中的指令進(jìn)行調(diào)度。指令調(diào)度初始時(shí)刻,從 所述數(shù)據(jù)依賴圖中找出入度為零的指令加入到候選指令隊(duì)列;并將其他候選指令隊(duì)列置為 空;具體的,每拍的調(diào)度方法為:按照指令優(yōu)先級(jí)依次從候選指令隊(duì)列中選擇指令填入指 令槽,并更新候選指令隊(duì)列;對(duì)于未能選擇到指令填入的指令槽,填入空操作指令;當(dāng)調(diào)度 完一拍內(nèi)的指令槽后,更新拍,更新所述候選指令隊(duì)列,重復(fù)上述步驟進(jìn)行一拍內(nèi)的調(diào)度, 直到數(shù)據(jù)依賴圖中的所有指令都完成調(diào)度則結(jié)束。
[0003] 隨著多核處理器的出現(xiàn),多核處理器是由多個(gè)單核處理器組成的,其中單核的結(jié) 構(gòu)趨于簡(jiǎn)單,出現(xiàn)了串行的功能部件的組織形式,甚至是功能部件陣列。如果使用現(xiàn)有技術(shù) 中表調(diào)度的指令調(diào)度方法完成在多核處理器上的指令調(diào)度,在執(zhí)行指令時(shí)就可能出現(xiàn)具有 依賴關(guān)系的指令在同一拍執(zhí)行或者依賴本條指令的下一條指令先于本條指令執(zhí)行的情況 發(fā)生,這些情況可能導(dǎo)致處理器運(yùn)行錯(cuò)或者流水線的停頓,調(diào)度的正確性較低。


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

[0004] 本發(fā)明的實(shí)施例提供一種信息顯示方法及設(shè)備,能夠
[0005] 為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0006] 第一方面,提供一種指令調(diào)度方法,應(yīng)用于指令調(diào)度裝置,包括:
[0007] 構(gòu)建數(shù)據(jù)依賴圖;
[0008] 分別從所述數(shù)據(jù)依賴圖中提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字, 使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字 的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之間不存在依 賴關(guān)系;
[0009] 其中,0彡k彡mXn,所述n表示一個(gè)超長(zhǎng)指令字中指令槽的個(gè)數(shù),所述n為大于 等于1的整數(shù),所述m表示每拍中超長(zhǎng)指令字的個(gè)數(shù),所述m為大于等于1的整數(shù),所述t 為大于等于1小于等于n-1的整數(shù)。
[0010] 結(jié)合第一方面,在第一種可實(shí)現(xiàn)方式中,在所述分別從所述數(shù)據(jù)依賴圖中提取k 個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字之后,所述方法還包括:
[0011] 按照所述超長(zhǎng)指令字中各個(gè)指令的排列順序執(zhí)行所述超長(zhǎng)指令字中的各個(gè)指令。
[0012] 結(jié)合第一方面、第一種可實(shí)現(xiàn)方式,在第二種可實(shí)現(xiàn)方式中,
[0013] 在構(gòu)建數(shù)據(jù)依賴圖之后,所述方法還包括:
[0014] 建立n+1個(gè)候選指令隊(duì)列,所述n+1個(gè)候選指令隊(duì)列分別為第1至第n+1候選指 令隊(duì)列;
[0015] 初始化所述n+1個(gè)候選指令隊(duì)列,使所述n+1個(gè)候選指令隊(duì)列均為空。
[0016] 結(jié)合第二種可實(shí)現(xiàn)方式,在第三種可實(shí)現(xiàn)方式中,所述分別從所述數(shù)據(jù)依賴圖中 提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字,使得同一拍內(nèi)的超長(zhǎng)指令字之間是 并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的 任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之間不存在依賴關(guān)系包括:
[0017] 在進(jìn)行第0拍調(diào)度時(shí),
[0018] 在所述數(shù)據(jù)依賴圖中提取當(dāng)前入度為零的指令得到第1候選指令隊(duì)列,所述入度 為零的指令在所述數(shù)據(jù)依賴圖中的沒有前驅(qū)結(jié)點(diǎn)或者其所有前驅(qū)結(jié)點(diǎn)已被調(diào)度;
[0019] 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指 令分別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中 尚未填充的指令槽中放入空操作指令,0 < h < m ;
[0020] 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令;
[0021] 在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第2候選指令隊(duì)列;
[0022] 執(zhí)行下述步驟,q初始化為2 ;
[0023] a.從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入每 個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真依 賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真依 賴關(guān)系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < h < m ;
[0024] b.在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令;
[0025] c.從所有候選指令隊(duì)列中刪除所述h個(gè)指令;
[0026] d.使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指令 隊(duì)列,重復(fù)步驟a至d,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在未調(diào) 度的指令或第n+1候選指令隊(duì)列中的指令被更新。
[0027] 結(jié)合第三種可實(shí)現(xiàn)方式,在第四種可實(shí)現(xiàn)方式中,所述分別從所述數(shù)據(jù)依賴圖中 提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字,使得同一拍內(nèi)的超長(zhǎng)指令字之間是 并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的 任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之間不存在依賴關(guān)系還包括:
[0028] 在進(jìn)行第P拍調(diào)度時(shí),p為大于0的整數(shù),
[0029] 從所述第2候選指令隊(duì)列開始,依次將所述第2候選指令隊(duì)列至所述第n+1候選 指令隊(duì)列中的指令放入前一個(gè)候選指令隊(duì)列中;
[0030] 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指 令分別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中 尚未填充的指令槽中放入空操作指令,〇 < h < m ;
[0031] 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令;
[0032] 在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第2候選指令隊(duì)列;
[0033] 執(zhí)行下述步驟:
[0034] 執(zhí)行下述步驟,q初始化為2 ;
[0035] a.從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入每 個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真依 賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真依 賴關(guān)系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < h < m ;
[0036] b.在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令;
[0037] c.從所有候選指令隊(duì)列中刪除所述h個(gè)指令;
[0038] d.使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指令 隊(duì)列,重復(fù)步驟a至d,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在未調(diào) 度的指令或第n+1候選指令隊(duì)列中的指令被更新。
[0039] 結(jié)合第三、四種可實(shí)現(xiàn)方式,在第五種可實(shí)現(xiàn)方式中,
[0040] 所述與第q-1個(gè)指令槽中的指令具有的真依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源 需求包括:
[0041] 與第q-1個(gè)指令槽中的指令具有一對(duì)一依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需 求。
[0042] 第二方面,提供一種指令調(diào)度裝置,包括:
[0043] 構(gòu)建單元,用于構(gòu)建數(shù)據(jù)依賴圖;
[0044] 調(diào)度單元,用于分別從所述數(shù)據(jù)依賴圖中提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m 個(gè)超長(zhǎng)指令字,使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的 任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指 令之間不存在依賴關(guān)系;
[0045] 其中,0彡k彡mXn,所述n表示一個(gè)超長(zhǎng)指令字中指令槽的個(gè)數(shù),所述n為大于 等于1的整數(shù),所述m表示每拍中超長(zhǎng)指令字的個(gè)數(shù),所述m為大于等于1的整數(shù),所述t 為大于等于1小于等于n-1的整數(shù)。
[0046] 結(jié)合第二方面,在第一種可實(shí)現(xiàn)方式中,所述指令調(diào)度裝置還包括:
[0047] 執(zhí)行單元,用于按照所述超長(zhǎng)指令字中各個(gè)指令的排列順序執(zhí)行所述超長(zhǎng)指令字 中的各個(gè)指令。
[0048] 結(jié)合第二方面、第一種可實(shí)現(xiàn)方式,在第二種可實(shí)現(xiàn)方式中,
[0049] 所述指令調(diào)度裝置還包括:
[0050] 建立單元,用于建立n+1個(gè)候選指令隊(duì)列,所述n+1個(gè)候選指令隊(duì)列分別為第1至 第n+1候選指令隊(duì)列;
[0051] 初始化單元,用于初始化所述n+1個(gè)候選指令隊(duì)列,使所述n+1個(gè)候選指令隊(duì)列均 為空。
[0052] 結(jié)合第二種可實(shí)現(xiàn)方式,在第三種可實(shí)現(xiàn)方式中,所述調(diào)度單元具體用于:
[0053] 在進(jìn)行第0拍調(diào)度時(shí),
[0054] 在所述數(shù)據(jù)依賴圖中提取當(dāng)前入度為零的指令得到第1候選指令隊(duì)列,所述入度 為零的指令在所述數(shù)據(jù)依賴圖中的沒有前驅(qū)結(jié)點(diǎn)或者其所有前驅(qū)結(jié)點(diǎn)已被調(diào)度;
[0055] 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指 令分別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中 尚未填充的指令槽中放入空操作指令,〇 < h < m ;
[0056] 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令;
[0057] 在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第2候選指令隊(duì)列;
[0058] 執(zhí)行下述步驟,q初始化為2 ;
[0059] a.從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入每 個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真依 賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真依 賴關(guān)系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < h < m ;
[0060] b.在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令; [0061] c.從所有候選指令隊(duì)列中刪除所述h個(gè)指令;
[0062] d.使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指令 隊(duì)列,重復(fù)步驟a至d,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在未調(diào) 度的指令或第n+1候選指令隊(duì)列中的指令被更新。
[0063] 結(jié)合第三種可實(shí)現(xiàn)方式,在第四種可實(shí)現(xiàn)方式中,所述調(diào)度單元具體用于:
[0064] 在進(jìn)行第P拍調(diào)度時(shí),p為大于0的整數(shù),
[0065] 從所述第2候選指令隊(duì)列開始,依次將所述第2候選指令隊(duì)列至所述第n+1候選 指令隊(duì)列中的指令放入前一個(gè)候選指令隊(duì)列中;
[0066] 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指 令分別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中 尚未填充的指令槽中放入空操作指令,〇 < h < m ;
[0067] 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令;
[0068] 在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第2候選指令隊(duì)列;
[0069] 執(zhí)行下述步驟:
[0070] 執(zhí)行下述步驟,q初始化為2 ;
[0071] a.從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入每 個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真依 賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真依 賴關(guān)系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < h < m ;
[0072] b.在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令;
[0073] c.從所有候選指令隊(duì)列中刪除所述h個(gè)指令;
[0074] d.使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指令 隊(duì)列,重復(fù)步驟a至d,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在未調(diào) 度的指令或第n+1候選指令隊(duì)列中的指令被更新。
[0075] 結(jié)合第三、四種可實(shí)現(xiàn)方式,在第五種可實(shí)現(xiàn)方式中,
[0076] 所述與第q_l個(gè)指令槽中的指令具有的真依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源 需求包括:
[0077] 與第q_l個(gè)指令槽中的指令具有一對(duì)一依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需 求。
[0078] 本發(fā)明實(shí)施例提供一種指令調(diào)度方法及裝置,包括:構(gòu)建數(shù)據(jù)依賴圖;分別從所 述數(shù)據(jù)依賴圖中提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字,使得同一拍內(nèi)的超 長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字的第t個(gè)指令槽 的指令與前一拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之間不存在依賴關(guān)系;其中, 0彡k彡mXn,所述n表示一個(gè)超長(zhǎng)指令字中指令槽的個(gè)數(shù),所述n為大于等于1的整數(shù), 所述m表示每拍中超長(zhǎng)指令字的個(gè)數(shù),所述m為大于等于1的整數(shù),所述t為大于等于1小 于等于n-1的整數(shù)。這樣一來(lái),使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩 拍中后一拍的任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指令字的第t+1 個(gè)指令槽的指令之間不存在依賴關(guān)系,因此在具有串行功能部件的多核處理器上執(zhí)行指令 時(shí),就不會(huì)出現(xiàn)具有依賴關(guān)系的指令在同一拍執(zhí)行或者依賴本條指令的下一條指令先于本 條指令執(zhí)行的情況發(fā)生,能夠使得處理器或流水線正常運(yùn)行,提高了調(diào)度的正確性。

【專利附圖】

【附圖說(shuō)明】
[0079] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0080] 圖1為本發(fā)明實(shí)施例提供的一種指令調(diào)度方法流程示意圖;
[0081] 圖2為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)依賴圖的示意圖;
[0082] 圖3為本發(fā)明實(shí)施例提供的另一種指令調(diào)度方法流程示意圖;
[0083] 圖4為本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)依賴圖的示意圖;
[0084] 圖5為本發(fā)明實(shí)施例提供的一種指令發(fā)射執(zhí)行示意圖;
[0085] 圖6為本發(fā)明實(shí)施例提供的一種指令調(diào)度裝置結(jié)構(gòu)示意圖;
[0086] 圖7為本發(fā)明實(shí)施例提供的另一種指令調(diào)度裝置結(jié)構(gòu)示意圖;
[0087] 圖8為本發(fā)明實(shí)施例提供的又一種指令調(diào)度裝置結(jié)構(gòu)示意圖;
[0088] 圖9為本發(fā)明實(shí)施例提供的又再一種指令調(diào)度裝置結(jié)構(gòu)示意圖。

【具體實(shí)施方式】
[0089] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于 本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0090] 本發(fā)明實(shí)施例提供一種指令調(diào)度方法,應(yīng)用于指令調(diào)度裝置,如圖1所示,包括:
[0091] 步驟101、構(gòu)建數(shù)據(jù)依賴圖。
[0092] 在本發(fā)明實(shí)施例中,所述數(shù)據(jù)依賴圖可以為DAG (Directed acyclic graph,有向 無(wú)環(huán)圖),所述數(shù)據(jù)依賴圖的構(gòu)建方法與現(xiàn)有技術(shù)相同,本發(fā)明對(duì)此不做贅述。
[0093] 步驟102、分別從所述數(shù)據(jù)依賴圖中提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng) 指令字,使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一超 長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之間 不存在依賴關(guān)系。
[0094] 所述依賴關(guān)系可以包括:正相關(guān)、反相關(guān)及輸出相關(guān),所述正相關(guān)的依賴關(guān)系也 稱為真依賴關(guān)系,所述真依賴關(guān)系包括一對(duì)一依賴關(guān)系、多對(duì)一依賴關(guān)系、一對(duì)多依賴關(guān)系 以及多對(duì)多依賴關(guān)系。所述一對(duì)一依賴關(guān)系為存在先后順序的兩條指令,前一條的結(jié)果數(shù) 僅為后面一條指令所使用,而所述后面一條指令的某一個(gè)操作數(shù)確定是由前面一條所定義 的。所述多對(duì)一依賴關(guān)系為存在先后順序的多條指令,前面多條的結(jié)果數(shù)僅為后面一條指 令所使用,而所述后面一條指令的某一個(gè)操作數(shù)確定是由前面多條所定義的。所述一對(duì)多 依賴關(guān)系為存在先后順序的多條指令,前面一條的結(jié)果數(shù)為后面多條指令所使用,而所述 后面多條指令的某一個(gè)操作數(shù)確定是由前面一條所定義的。所述多對(duì)多依賴關(guān)系為存在先 后順序的多條指令,前面多條的結(jié)果數(shù)為后面多條指令所使用,而所述后面多條指令的某 一個(gè)操作數(shù)是由前面多條指令所定義的。
[0095] 其中,0彡k彡mXn,所述n表示一個(gè)超長(zhǎng)指令字中指令槽的個(gè)數(shù),所述n為大于 等于1的整數(shù),所述m為大于等于1的整數(shù),所述t為大于等于1小于等于n-1的整數(shù)。 [0096] 需要說(shuō)明的是,所述指令調(diào)度裝置可以為編譯器,該指令調(diào)度方法適用于具有串 行功能部件處理器的編譯器的指令調(diào)度。該指令調(diào)度裝置以拍為單位進(jìn)行指令調(diào)度,每拍 包含m個(gè)超長(zhǎng)指令字,即所述指令調(diào)度裝置的發(fā)射寬度為m,每個(gè)超長(zhǎng)指令字包括n個(gè)指令 槽,即能放入n個(gè)指令。本實(shí)施例中的超長(zhǎng)指令字為VLIW(Very Long Instruction Word, 超長(zhǎng)指令字),是利用指令級(jí)并行的一種體系架構(gòu)。
[0097] 這樣一來(lái),使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一 拍的任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽 的指令之間不存在依賴關(guān)系,因此在具有串行功能部件的多核處理器上執(zhí)行指令時(shí),就不 會(huì)出現(xiàn)具有依賴關(guān)系的指令在同一拍執(zhí)行或者依賴本條指令的下一條指令先于本條指令 執(zhí)行的情況發(fā)生,能夠使得處理器或流水線正常運(yùn)行,提高了調(diào)度的正確性。
[0098] 特別的,本發(fā)明實(shí)施例提供的指令調(diào)度方法,為了使得同一拍內(nèi)的超長(zhǎng)指令字之 間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一 拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之間不存在依賴關(guān)系,可以通過(guò)建立多個(gè)候 選指令隊(duì)列來(lái)實(shí)現(xiàn)指令的調(diào)度,示例的,在構(gòu)建數(shù)據(jù)依賴圖之后,可以建立n+1個(gè)候選指令 隊(duì)列,所述n+1個(gè)候選指令隊(duì)列分別為第1至第n+1候選指令隊(duì)列;然后初始化所述n+1個(gè) 候選指令隊(duì)列,使所述n+1個(gè)候選指令隊(duì)列均為空。
[0099] 其中,所述入度為零的指令在所述數(shù)據(jù)依賴圖中的沒有前驅(qū)結(jié)點(diǎn)或者其所有前驅(qū) 結(jié)點(diǎn)已被調(diào)度。在本實(shí)施例中,所述已被調(diào)度的指令指的是已放入超長(zhǎng)指令字的指令槽中 的指令。示例的,指令a的前驅(qū)結(jié)點(diǎn)為數(shù)據(jù)依賴圖上所有指向指令a的有向箭頭的反向端 的結(jié)點(diǎn)。所述指令a入度為零指指令a在數(shù)據(jù)依賴圖上沒有前驅(qū)結(jié)點(diǎn)或者其前驅(qū)結(jié)點(diǎn)已被 調(diào)度。如圖2所示,本實(shí)施例中,數(shù)據(jù)依賴圖為有向無(wú)環(huán)圖,由一組節(jié)點(diǎn)和連接節(jié)點(diǎn)的有向 無(wú)環(huán)邊組成。在該指令調(diào)度方法的數(shù)據(jù)依賴圖中,各節(jié)點(diǎn)可以表示機(jī)器指令,有向無(wú)環(huán)邊代 表指令之間的依賴關(guān)系。所述依賴關(guān)系有正相關(guān)、反相關(guān)及輸出相關(guān),所述正相關(guān)也稱真依 賴關(guān)系。所述各節(jié)點(diǎn)的邊上標(biāo)有表示依賴的權(quán)值信息,即延遲,該延遲信息表示前一條指 令發(fā)射到后一條指令發(fā)射必須間隔的時(shí)間。如圖2中所示的1表示指令al發(fā)射到指令a2 發(fā)射必須間隔的時(shí)間為1個(gè)時(shí)鐘周期。同理可知圖2中2表示指令aO發(fā)射到指令a2發(fā)射 必須間隔的時(shí)間為2個(gè)時(shí)鐘周期,圖2中3表示指令a2發(fā)射到指令a3發(fā)射必須間隔的時(shí) 間為3個(gè)時(shí)鐘周期。同時(shí),所述有向無(wú)環(huán)邊為有向箭頭形式時(shí),所述有向箭頭表示指令間的 依賴關(guān)系,該有向ftr頭由如驅(qū)指令指向后繼指令,即后繼指令的執(zhí)彳丁依賴于如驅(qū)指令,如aO 為a2的前驅(qū)指令,a2為aO的后繼指令。
[0100] 在進(jìn)行第〇拍調(diào)度時(shí),
[0101] 在所述數(shù)據(jù)依賴圖中提取當(dāng)前入度為零的指令得到第1候選指令隊(duì)列,所述入度 為零的指令在所述數(shù)據(jù)依賴圖中的沒有前驅(qū)結(jié)點(diǎn)或者其所有前驅(qū)結(jié)點(diǎn)已被調(diào)度;
[0102] 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指 令分別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中 尚未填充的指令槽中放入空操作指令,0 < h < m ;
[0103] 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令;
[0104] 需要說(shuō)明的是,由于在進(jìn)行第0拍調(diào)度時(shí),調(diào)度了所述h個(gè)指令,并且從所述第1 候選指令隊(duì)列中刪除所述h個(gè)指令,相應(yīng)的,所述h個(gè)指令為已調(diào)度指令,因此在數(shù)據(jù)依賴 圖中出現(xiàn)了在所述h個(gè)指令被調(diào)度后入度為零的指令,即新增的入度為零的指令,這些新 增的入度為零的指令不在第1候選隊(duì)列中,因此可以在所述數(shù)據(jù)依賴圖中提取新增的入度 為零的指令得到第2候選指令隊(duì)列。
[0105] 執(zhí)行下述步驟,q初始化為2 ;
[0106] al.從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入 每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真 依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真 依賴關(guān)系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < h < m ;
[0107] bl.在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令;
[0108] cl.從所有候選指令隊(duì)列中刪除所述h個(gè)指令;
[0109] dl.使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指 令隊(duì)列,重復(fù)步驟al至dl,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在 未調(diào)度的指令或第n+1候選指令隊(duì)列中的指令被更新。其中,所述第n+1候選指令隊(duì)列中 的指令被更新表示在q=n+l時(shí),在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到了第 n+1候選指令隊(duì)列,這樣一拍的調(diào)度就結(jié)束了。
[0110] 需要說(shuō)明的是,由于步驟al調(diào)度了所述h個(gè)指令,步驟cl從所有候選指令隊(duì)列中 刪除所述h個(gè)指令,相應(yīng)的,所述h個(gè)指令為已調(diào)度指令,因此在數(shù)據(jù)依賴圖中出現(xiàn)了在所 述h個(gè)指令被調(diào)度后入度為零的指令,即新增的入度為零的指令,這些新增的入度為零的 指令不在第q候選隊(duì)列中,因此,在步驟dl中使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入 度為零的指令得到第q候選指令隊(duì)列。
[0111] 在進(jìn)行第P拍調(diào)度時(shí),P為大于〇的整數(shù),
[0112] 從所述第2候選指令隊(duì)列開始,依次將所述第2候選指令隊(duì)列至所述第n+1候選 指令隊(duì)列中的指令放入前一個(gè)候選指令隊(duì)列中;
[0113] 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指 令分別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中 尚未填充的指令槽中放入空操作指令,0 < h < m ;
[0114] 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令;
[0115] 需要說(shuō)明的是,由于在進(jìn)行第〇拍調(diào)度時(shí),調(diào)度了所述h個(gè)指令,并且從所述第1 候選指令隊(duì)列中刪除所述h個(gè)指令,相應(yīng)的,所述h個(gè)指令為已調(diào)度指令,因此在數(shù)據(jù)依賴 圖中出現(xiàn)了在所述h個(gè)指令被調(diào)度后入度為零的指令,即新增的入度為零的指令,這些新 增的入度為零的指令不在第1候選隊(duì)列中,因此可以在所述數(shù)據(jù)依賴圖中提取新增的入度 為零的指令得到第2候選指令隊(duì)列。
[0116] 執(zhí)行下述步驟:
[0117] 執(zhí)行下述步驟,q初始化為2 ;
[0118] a2.從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入 每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有的 真依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有 的真依賴關(guān)系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < h < m ;
[0119] b2.在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令;
[0120] c2.從所有候選指令隊(duì)列中刪除所述h個(gè)指令;
[0121] d2.使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指 令隊(duì)列,重復(fù)步驟a2至d2,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在 未調(diào)度的指令或第n+1候選指令隊(duì)列中的指令被更新。其中,所述第n+1候選指令隊(duì)列中 的指令被更新表示在q=n+l時(shí),在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到了第 n+1候選指令隊(duì)列。
[0122] 需要說(shuō)明的是,由于步驟a2調(diào)度了所述h個(gè)指令,步驟c2從所有候選指令隊(duì)列中 刪除所述h個(gè)指令,相應(yīng)的,所述h個(gè)指令為已調(diào)度指令,因此在數(shù)據(jù)依賴圖中出現(xiàn)了在所 述h個(gè)指令被調(diào)度后入度為零的指令,即新增的入度為零的指令,這些新增的入度為零的 指令不在第q候選隊(duì)列中,因此,在步驟d2中使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入 度為零的指令得到第q候選指令隊(duì)列。
[0123] 特別的,在步驟al和a2中按照所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具 有一對(duì)一的真依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求來(lái)調(diào)度指令時(shí),可以節(jié)省存放前一 指令槽中指令的結(jié)果數(shù)的寄存器,節(jié)省硬件資源,提高性能。
[0124] 計(jì)算所述數(shù)據(jù)依賴圖中各指令的優(yōu)先級(jí)可以根據(jù)一定的啟發(fā)式規(guī)則進(jìn)行計(jì)算,所 述啟發(fā)式規(guī)則可以包括指令的最大距離、指令的執(zhí)行延遲、指令的最早開始時(shí)間、指令的最 晚開始時(shí)間、是否關(guān)鍵路徑上的指令等,不同的編譯器可能選擇不同的啟發(fā)式規(guī)則。
[0125] 所述真依賴關(guān)系包括一對(duì)一依賴關(guān)系、多對(duì)一依賴關(guān)系、一對(duì)多依賴關(guān)系以及多 對(duì)多依賴關(guān)系。所述一對(duì)一依賴關(guān)系為存在先后順序的兩條指令,前一條的結(jié)果數(shù)僅為后 面一條指令所使用,而所述后面一條指令的某一個(gè)操作數(shù)確定是由前面一條所定義的。示 例的,如圖2所示,指令a2與指令a3滿足一對(duì)一依賴關(guān)系,即指令a2的結(jié)果數(shù)僅被a3所使 用,指令a3的某個(gè)操作數(shù)確定由a2所定義。指令a0與指令a2滿足一對(duì)一依賴關(guān)系,指令 a0的結(jié)果數(shù)僅被a2所使用,指令a2的某個(gè)操作數(shù)確定由a0所定義。指令al與指令a2滿 足一對(duì)一依賴關(guān)系,指令al的結(jié)果數(shù)僅被a2所使用,指令a2的另一個(gè)操作數(shù)確定由al所 定義。需要說(shuō)明的是,在本發(fā)明實(shí)施例中,進(jìn)行指令調(diào)度時(shí),判斷所述h個(gè)指令滿足的條件 中所述與第q_l個(gè)指令槽中的指令具有真依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求包括: 與第q_l個(gè)指令槽中的指令具有一對(duì)一依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求。這樣, 在存在多個(gè)指令滿足真依賴關(guān)系時(shí),可以優(yōu)先調(diào)度與前一指令槽的指令滿足一對(duì)一依賴關(guān) 系的指令,這樣可以節(jié)省一個(gè)存放所述前一指令槽的指令的結(jié)果數(shù)的寄存器,簡(jiǎn)化指令調(diào) 度的過(guò)程。
[0126] 特別的,在每調(diào)度完一個(gè)指令之后,指令調(diào)度裝置中的可用資源都會(huì)發(fā)生變化,所 述可用資源包括CPU中執(zhí)行指令的功能部件、寄存器、指令窗口等。在對(duì)每個(gè)指令進(jìn)行調(diào)度 前,調(diào)度器需要查詢資源使用表來(lái)得到適合的下一個(gè)指令的調(diào)度,所述資源使用表中包括 了當(dāng)前機(jī)器的可用資源,該資源使用表是實(shí)時(shí)變化的,反映了各資源被釋放的時(shí)間。因此, 在執(zhí)行步驟102時(shí),指令調(diào)度裝置不但需要判斷所述存在依賴關(guān)系的兩條指令之間是否滿 足延遲時(shí)間,而且需要判斷當(dāng)前CPU提供的資源是否滿足被調(diào)度的各條指令的資源需求。
[0127] 在步驟102之后,所述方法還包括:
[0128] 按照所述超長(zhǎng)指令字中各個(gè)指令的排列順序執(zhí)行所述超長(zhǎng)指令字中的各個(gè)指令。
[0129] 本發(fā)明實(shí)施例提供另一種指令調(diào)度方法,應(yīng)用于指令調(diào)度裝置,假設(shè)該指令調(diào)度 裝置以拍為單位進(jìn)行指令調(diào)度,每拍包含1個(gè)或2個(gè)超長(zhǎng)指令字,即m=l或m=2,每個(gè)超長(zhǎng)指 令字包括4個(gè)指令槽。如圖3所示,所述方法包括:
[0130] 步驟301、構(gòu)建數(shù)據(jù)依賴圖。
[0131] 數(shù)據(jù)依賴圖中的指令為:13〇、131、匕2、〇0、〇1、〇2、〇3及〇4。假設(shè)根據(jù)上述指令的各 指令間的依賴關(guān)系構(gòu)建得到的數(shù)據(jù)依賴圖如圖4所示。
[0132] 步驟302、計(jì)算所述數(shù)據(jù)依賴圖中所有指令的優(yōu)先級(jí)。
[0133] 如圖4所示,假設(shè)按照?qǐng)D4所示的數(shù)據(jù)依賴圖以及各指令間的延遲來(lái)計(jì)算各指令 的優(yōu)先級(jí)。假設(shè)指令c4需要1個(gè)時(shí)鐘周期完成,則其余指令的優(yōu)先級(jí)可以為:
[0134] P (c4) =1 ;
[0135] P (c3) =2+P (c4) =3 ;
[0136] P (b2) =2+P (c4) =3 ;
[0137] P (c2) =3+P (c3) =6 ;
[0138] P (bl) =1+P (b2) =4 ;
[0139] P (cO) =1+P (c2) =7 ;
[0140] P (cl) =1+P (c2) =7 ;
[0141] P (bO) =1+P (bl) =5。
[0142] 需要說(shuō)明的是P為代表指令的優(yōu)先級(jí)。
[0143] 步驟303、建立5個(gè)候選指令隊(duì)列。
[0144] 所述5個(gè)候選指令隊(duì)列分別為第1至第5候選指令隊(duì)列。
[0145] 步驟304、初始化所述5個(gè)候選指令隊(duì)列,使所述5個(gè)候選指令隊(duì)列均為空。
[0146] 步驟305、通過(guò)所述5個(gè)候選指令隊(duì)列,根據(jù)數(shù)據(jù)依賴圖進(jìn)行指令調(diào)度。
[0147] 為了描述的簡(jiǎn)便,本發(fā)明實(shí)施例假設(shè)所有指令均滿足資源需求。
[0148] 當(dāng)m=l,即指令調(diào)度裝置以拍為單位進(jìn)行指令調(diào)度,每拍包含1個(gè)超長(zhǎng)指令字,所 述指令調(diào)度裝置的發(fā)射寬度為1時(shí),具體步驟如下:
[0149] 如表1所示,在進(jìn)行第0拍調(diào)度時(shí),所述候選指令隊(duì)列中的指令為b0、bl、b2、cO、 cl、c2、c3及c4,結(jié)合數(shù)據(jù)依賴圖可以得到所述候選指令隊(duì)列中當(dāng)前入度為零的指令為b0、 c0及cl,所述第1候選指令隊(duì)列包括指令b0、cO及cl,優(yōu)先級(jí)分別為5, 7, 7。即第1候選 指令隊(duì)列1〇0,(:1,13〇},第2,3,4,5候選指令隊(duì)列都設(shè)置為空。
[0150] 對(duì)于第1個(gè)指令槽,從第1候選指令隊(duì)列中按照優(yōu)先級(jí),可以選擇調(diào)度c〇或者cl, 且都滿足時(shí)間延遲要求,需要說(shuō)明的是,當(dāng)所述指令調(diào)度裝置為具體的編譯器時(shí),可能會(huì)考 慮不同指令需要的功能部件的特征或其他因素,從而進(jìn)一步判定cO和cl之間的優(yōu)先級(jí),本 實(shí)施例假設(shè)這里選擇調(diào)度cO。調(diào)度完cO后,從所有候選指令隊(duì)列中刪除cO。檢查數(shù)據(jù)依 賴圖,cO的后繼指令為c2,由于c2還依賴于cl,而cl尚未被調(diào)度,于是c2尚不能加入候 選隊(duì)列。此時(shí)的候選指令隊(duì)列依次為:Icl,b0},空,空,空,空。
[0151] 對(duì)于第2個(gè)指令槽,從第1,第2候選指令隊(duì)列中選擇指令,按照優(yōu)先級(jí)優(yōu)先調(diào)度 Cl,并且沒有與Cl優(yōu)先級(jí)相同的未調(diào)度指令,且Cl滿足時(shí)間延遲要求,填入第2個(gè)指令槽。 調(diào)度完cl之后,從所有候選指令隊(duì)列中刪除cl。檢查數(shù)據(jù)依賴圖,cl的后繼指令為c2,由 于c2所依賴的cO和cl都已經(jīng)被調(diào)度,則將c2加入第3候選指令隊(duì)列,為第3指令槽的調(diào) 度做好準(zhǔn)備。候選指令隊(duì)列依次為:{b0},空,{c2},空,空。
[0152] 對(duì)于第3個(gè)指令槽,從第1,第2,第3候選指令隊(duì)列中選擇指令,按照優(yōu)先級(jí)優(yōu)先 調(diào)度c2,并且沒有與c2優(yōu)先級(jí)相同的未調(diào)度指令,且由于c2依賴于cl和c0,需要在c0, cl 后一拍執(zhí)行,c2填入第3個(gè)指令槽滿足此延遲要求,因此c2滿足時(shí)間延遲要求,填入第3個(gè) 指令槽。調(diào)度完c2之后,從所有候選指令隊(duì)列中刪除c2。檢查數(shù)據(jù)依賴圖,依賴于c2的 c3指令此時(shí)前驅(qū)已經(jīng)被調(diào)度,而將c3指令加入第4候選指令隊(duì)列,候選指令隊(duì)列依次為: {b0},空,空,{c3},空。
[0153] 對(duì)于第4個(gè)指令槽,從第1,第2,第3,第4候選指令隊(duì)列中選擇指令,按照優(yōu)先級(jí) 優(yōu)先調(diào)度b0,并且沒有與b0優(yōu)先級(jí)相同的未調(diào)度指令,且由于b0不依賴于其他指令,b0填 入第4個(gè)指令槽滿足此延遲要求,因此b0滿足時(shí)間延遲要求,填入第4個(gè)指令槽。調(diào)度完 b0之后,從所有候選指令隊(duì)列刪除b0。檢查數(shù)據(jù)依賴圖,依賴于b0的bl指令此時(shí)前驅(qū)已 經(jīng)被調(diào)度而將bl指令加入第5候選指令隊(duì)列,候選指令隊(duì)列依次為:空,空,空,{c3},{bl}。
[0154] 當(dāng)?shù)?拍結(jié)束時(shí),第1,2, 3,4, 5候選指令隊(duì)列依次為:空,空,空,{c3},{bl}。
[0155] 表 1
[0156]

【權(quán)利要求】
1. 一種指令調(diào)度方法,應(yīng)用于指令調(diào)度裝置,其特征在于,包括: 構(gòu)建數(shù)據(jù)依賴圖; 分別從所述數(shù)據(jù)依賴圖中提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字,使得 同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字的第 t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之間不存在依賴關(guān) 系; 其中,0 < k < mXn,所述n表示一個(gè)超長(zhǎng)指令字中指令槽的個(gè)數(shù),所述n為大于等于 1的整數(shù),所述m表示每拍中超長(zhǎng)指令字的個(gè)數(shù),所述m為大于等于1的整數(shù),所述t為大于 等于1小于等于n-1的整數(shù)。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述分別從所述DAG數(shù)據(jù)依賴圖中提取 k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字之后,所述方法還包括: 按照所述超長(zhǎng)指令字中各個(gè)指令的排列順序執(zhí)行所述超長(zhǎng)指令字中的各個(gè)指令。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于, 在構(gòu)建數(shù)據(jù)依賴圖之后,所述方法還包括: 建立n+1個(gè)候選指令隊(duì)列,所述n+1個(gè)候選指令隊(duì)列分別為第1至第n+1候選指令隊(duì) 列; 初始化所述n+1個(gè)候選指令隊(duì)列,使所述n+1個(gè)候選指令隊(duì)列均為空。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述分別從所述數(shù)據(jù)依賴圖中提取k個(gè)指 令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字,使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的 關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指 令字的第t+1個(gè)指令槽的指令之間不存在依賴關(guān)系包括: 在進(jìn)行第〇拍調(diào)度時(shí), 在所述數(shù)據(jù)依賴圖中提取當(dāng)前入度為零的指令得到第1候選指令隊(duì)列,所述入度為零 的指令在所述數(shù)據(jù)依賴圖中的沒有前驅(qū)結(jié)點(diǎn)或者其所有前驅(qū)結(jié)點(diǎn)已被調(diào)度; 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指令分 別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中尚未 填充的指令槽中放入空操作指令,〇 < h < m ; 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令; 在所述數(shù)據(jù)依賴圖中提取新增入度為零的指令得到第2候選指令隊(duì)列; 執(zhí)行下述步驟,q初始化為2 ; a. 從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入每個(gè)超 長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真依賴關(guān) 系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真依賴關(guān) 系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < m ; b. 在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令; c. 從所有候選指令隊(duì)列中刪除所述h個(gè)指令; d. 使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指令隊(duì)列, 重復(fù)步驟a至d,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在未調(diào)度的指 令或第n+1候選指令隊(duì)列中的指令被更新。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述分別從所述數(shù)據(jù)依賴圖中提取k個(gè)指 令進(jìn)行調(diào)度得到每一拍的m個(gè)超長(zhǎng)指令字,使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的 關(guān)系,相鄰兩拍中后一拍的任一超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指 令字的第t+1個(gè)指令槽的指令之間不存在依賴關(guān)系還包括: 在進(jìn)行第P拍調(diào)度時(shí),P為大于〇的整數(shù), 從所述第2候選指令隊(duì)列開始,依次將所述第2候選指令隊(duì)列至所述第n+1候選指令 隊(duì)列中的指令放入前一個(gè)候選指令隊(duì)列中; 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指令分 別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中尚未 填充的指令槽中放入空操作指令,〇 < h < m ; 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令; 在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第2候選指令隊(duì)列; 執(zhí)行下述步驟: 執(zhí)行下述步驟,q初始化為2 ; a. 從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入每個(gè)超 長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真依賴關(guān) 系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真依賴關(guān) 系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < m ; b. 在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令; c. 從所有候選指令隊(duì)列中刪除所述h個(gè)指令; d. 使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指令隊(duì)列, 重復(fù)步驟a至d,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在未調(diào)度的指 令或第n+1候選指令隊(duì)列中的指令被更新。
6. 根據(jù)權(quán)利要求4或5所述的方法,其特征在于, 所述與第q_l個(gè)指令槽中的指令具有真依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求包 括: 與第q_l個(gè)指令槽中的指令具有一對(duì)一依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求。
7. -種指令調(diào)度裝置,其特征在于,包括: 構(gòu)建單元,用于構(gòu)建數(shù)據(jù)依賴圖; 調(diào)度單元,用于分別從所述數(shù)據(jù)依賴圖中提取k個(gè)指令進(jìn)行調(diào)度得到每一拍的m個(gè)超 長(zhǎng)指令字,使得同一拍內(nèi)的超長(zhǎng)指令字之間是并行執(zhí)行的關(guān)系,相鄰兩拍中后一拍的任一 超長(zhǎng)指令字的第t個(gè)指令槽的指令與前一拍的任一超長(zhǎng)指令字的第t+1個(gè)指令槽的指令之 間不存在依賴關(guān)系; 其中,0 < k < mXn,所述n表示一個(gè)超長(zhǎng)指令字中指令槽的個(gè)數(shù),所述n為大于等于 1的整數(shù),所述m表示每拍中超長(zhǎng)指令字的個(gè)數(shù),所述m為大于等于1的整數(shù),所述t為大于 等于1小于等于n-1的整數(shù)。
8. 根據(jù)權(quán)利要求7所述的指令調(diào)度裝置,其特征在于,所述指令調(diào)度裝置還包括: 執(zhí)行單元,用于按照所述超長(zhǎng)指令字中各個(gè)指令的排列順序執(zhí)行所述超長(zhǎng)指令字中的 各個(gè)指令。
9. 根據(jù)權(quán)利要求7或8所述的指令調(diào)度裝置,其特征在于, 所述指令調(diào)度裝置還包括: 建立單元,用于建立n+1個(gè)候選指令隊(duì)列,所述n+1個(gè)候選指令隊(duì)列分別為第1至第 n+1候選指令隊(duì)列; 初始化單元,用于初始化所述n+1個(gè)候選指令隊(duì)列,使所述n+1個(gè)候選指令隊(duì)列均為 空。
10. 根據(jù)權(quán)利要求9所述的指令調(diào)度裝置,其特征在于,所述調(diào)度單元具體用于: 在進(jìn)行第〇拍調(diào)度時(shí), 在所述數(shù)據(jù)依賴圖中提取當(dāng)前入度為零的指令得到第1候選指令隊(duì)列,所述入度為零 的指令在所述數(shù)據(jù)依賴圖中的沒有前驅(qū)結(jié)點(diǎn)或者其所有前驅(qū)結(jié)點(diǎn)已被調(diào)度; 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指令分 別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中尚未 填充的指令槽中放入空操作指令,〇 < h < m ; 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令; 在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第2候選指令隊(duì)列; 執(zhí)行下述步驟,q初始化為2 ; a. 從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入每個(gè)超 長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真依賴關(guān) 系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真依賴關(guān) 系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,〇 < m ; b. 在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令; c. 從所有候選指令隊(duì)列中刪除所述h個(gè)指令; d. 使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指令隊(duì)列, 重復(fù)步驟a至d,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在未調(diào)度的指 令或第n+1候選指令隊(duì)列中的指令被更新。
11. 根據(jù)權(quán)利要求10所述的指令調(diào)度裝置,其特征在于,所述調(diào)度單元具體用于: 在進(jìn)行第P拍調(diào)度時(shí),P為大于〇的整數(shù), 從所述第2候選指令隊(duì)列開始,依次將所述第2候選指令隊(duì)列至所述第n+1候選指令 隊(duì)列中的指令放入前一個(gè)候選指令隊(duì)列中; 從所述第1候選指令隊(duì)列中提取優(yōu)先級(jí)最高且滿足時(shí)間延遲和資源需求的h個(gè)指令分 別放入每個(gè)超長(zhǎng)指令字的第1個(gè)指令槽中,在每個(gè)所述超長(zhǎng)指令字的第1個(gè)指令槽中尚未 填充的指令槽中放入空操作指令,〇 < h < m ; 從所述第1候選指令隊(duì)列中刪除所述h個(gè)指令; 在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第2候選指令隊(duì)列; 執(zhí)行下述步驟: 執(zhí)行下述步驟,q初始化為2; a.從所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中提取h個(gè)指令分別放入每個(gè)超 長(zhǎng)指令字的第q個(gè)指令槽中,所述h個(gè)指令滿足:與第q_l個(gè)指令槽中的指令具有真依賴關(guān) 系且同時(shí)滿足時(shí)間延遲和資源需求,或,不與所述第q_l個(gè)指令槽中的指令具有真依賴關(guān) 系,但優(yōu)先級(jí)最高且同時(shí)滿足時(shí)間延遲和資源需求,0 < m ; b. 在每個(gè)超長(zhǎng)指令字的第q個(gè)指令槽中的未填充的指令槽中放入空操作指令; c. 從所有候選指令隊(duì)列中刪除所述h個(gè)指令; d. 使q=q+l,在所述數(shù)據(jù)依賴圖中提取新增的入度為零的指令得到第q候選指令隊(duì)列, 重復(fù)步驟a至d,直至所述第1候選指令隊(duì)列至所述第q候選指令隊(duì)列中不存在未調(diào)度的指 令或第n+1候選指令隊(duì)列中的指令被更新。
12.根據(jù)權(quán)利要求10或11所述的指令調(diào)度裝置,其特征在于, 所述與第q_l個(gè)指令槽中的指令具有的真依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求 包括: 與第q_l個(gè)指令槽中的指令具有一對(duì)一依賴關(guān)系且同時(shí)滿足時(shí)間延遲和資源需求。
【文檔編號(hào)】G06F9/48GK104424026SQ201310367751
【公開日】2015年3月18日 申請(qǐng)日期:2013年8月21日 優(yōu)先權(quán)日:2013年8月21日
【發(fā)明者】黃磊, 連瑞琦 申請(qǐng)人:華為技術(shù)有限公司, 中國(guó)科學(xué)院計(jì)算技術(shù)研究所
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
主站蜘蛛池模板: 安达市| 都兰县| 集贤县| 洪湖市| 丹凤县| 普格县| 苍山县| 土默特左旗| 永胜县| 淮安市| 枣强县| 邹城市| 游戏| 德州市| 西乡县| 喀什市| 南澳县| 嘉定区| 尉犁县| 贵阳市| 峨边| 垣曲县| 辽宁省| 南阳市| 察隅县| 兴海县| 深州市| 沁源县| 紫阳县| 儋州市| 海淀区| 张北县| 皋兰县| 广昌县| 西乡县| 闻喜县| 遂宁市| 潞城市| 永安市| 银川市| 扎囊县|