一種cpu指令處理方法和處理器的制造方法
【專利摘要】本發(fā)明提供一種CPU指令處理方法和處理器,涉及計算機領域,能夠節(jié)省寄存器資源,并降低讀寫繼存器所需消耗的功耗。其方法為:當?shù)谝恢噶畹慕Y(jié)果只被第一指令之后的第二指令使用一次時,將第一指令和第二指令的中間結(jié)果不寫回寄存器堆并且在寄存器重命名階段對存儲所述中間結(jié)果的寄存器不進行重命名,即不將存儲所述中間結(jié)果的寄存器映射為物理寄存器。本發(fā)明的實施例用于指令間的結(jié)果傳遞。
【專利說明】一種CPU指令處理方法和處理器
【技術(shù)領域】
[0001] 本發(fā)明涉及計算機領域,尤其涉及一種CPU指令處理方法和處理器。
【背景技術(shù)】
[0002] 現(xiàn)在的處理器(Center Process Unit, CPU)中大都采用流水線技術(shù),基本的五級 流水線包括取指(即取出指令),譯碼(即對指令進行譯碼),執(zhí)行(即對指令進行執(zhí)行),訪 存(即將數(shù)據(jù)寫到內(nèi)存中,或者從內(nèi)存中讀取數(shù)據(jù)),寫回(即將數(shù)據(jù)寫到寄存器堆當中), 同一個周期內(nèi),可以有5條指令分別處于不同的流水級。
[0003] 執(zhí)行的指令間存在著3種相關(guān)性,S卩數(shù)據(jù)相關(guān)、控制相關(guān)和結(jié)構(gòu)相關(guān)。而數(shù)據(jù)相關(guān) 中又分為3種:讀后與相關(guān)(Read After Write,RAW),即后面的指令要用到如面指令所與 的數(shù)據(jù);寫后寫相關(guān)(Write After Write,WAW),即兩條指令同時寫同一個單元;讀后寫相 關(guān)(Write After Read,WAR),即被讀取的數(shù)據(jù)將會被后面的指令所寫入。數(shù)據(jù)相關(guān)有可能 導致流水線的阻塞,比如,流水線要求指令在譯碼階段讀取寄存器時,該寄存器是流水線中 前面指令的目標寄存器,并且結(jié)果還沒有寫回,那么該指令就要在譯碼階段等待。
[0004] 為了解決上述阻塞問題,提高流水線的效率,目前業(yè)界的一般做法是使用前遞技 術(shù)(Forwarding),也稱為旁路技術(shù)(Bypass),即當后面的指令用到前面指令的運算或者是 訪存結(jié)果時,就可以直接通過旁路獲取結(jié)果,而不需要等到結(jié)果寫回寄存器,并可以通過寄 存器重名命來避免WAW和WAR相關(guān),從而提高指令級并行的效率。實際上,程序中使用的寄 存器是程序員可見的邏輯寄存器,這些程序員可見的寄存器又稱為結(jié)構(gòu)寄存器,而實際硬 件執(zhí)行中,會將這些寄存器重新映射到程序員不可見的微結(jié)構(gòu)寄存器。
[0005] 對于一般的整數(shù)運算指令序列來說,要經(jīng)過取指、譯碼和寄存器重命名(Rename), 然后送到發(fā)射隊列(Issue queue)。在發(fā)射隊列的指令,假如發(fā)現(xiàn)它的源操作數(shù)的值已經(jīng)準 備好了,那么它就可以發(fā)送到空閑的整點運算單元(Fix Point Arthmetic Unit,FX),進行 整數(shù)的運算。運算結(jié)果進行寫回(Write Back,WB),存儲到寄存器堆當中。
[0006] 其中寄存器重命名的階段,就是將結(jié)構(gòu)寄存器(程序員可見),映射到物理寄存器 (程序員不可見)上的過程,該過程可以避免WRW,WAR相關(guān)。
[0007] 在實現(xiàn)上述解決阻塞問題的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題:
[0008] 隨著功能單元(Function Unit)的增多,寄存器堆(Register File)越做越大,對 于寄存器堆的讀寫,是相當耗能的。實際上,很多指令的結(jié)果,往往只會被后面一條,或者 是接下來幾條指令中的其中的一條所用,而且,僅被使用一次,對于這類只被使用一次的結(jié) 果,寫回寄存器堆,實際上是對寄存器資源的浪費。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明的實施例提供一種CPU指令處理方法和處理器,能夠節(jié)省寄存器資源,并 且降低了讀寫繼存器所需消耗的功耗。
[0010] 為達到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:
[0011] 第一方面,提供一種CPU指令處理方法,所述方法包括:
[0012] 判斷第一指令的結(jié)果是否只被所述第一指令之后的第二指令使用一次;
[0013] 若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則將所述第一指令的結(jié) 果不寫回寄存器堆;
[0014] 將所述第一指令和第二指令發(fā)射到功能單元中進行運算,使第一指令先于第二指 令執(zhí)行,并將第一指令的處理結(jié)果傳遞給所述第二指令,作為所述第二指令的源操作數(shù)。
[0015] 在第一種可能的實現(xiàn)方式中,結(jié)合第一方面,所述判斷第一指令的結(jié)果是否只被 所述第一指令之后的指令使用一次包括:
[0016] 在譯碼階段識別所述第一指令和第二指令是否有特殊標識,如果有特殊標識則確 定第一指令的結(jié)果只被所述第一指令之后的第二指令使用一次。
[0017] 在第二種可能的實現(xiàn)方式中,結(jié)合第一方面或第一方面的第一種實現(xiàn)方式,所述 判斷第一指令的結(jié)果是否只被所述第一指令之后的指令使用一次還包括:
[0018] 若第一寄存器作為所述第一指令的結(jié)果的存放寄存器,同時只作為所述第二指令 的源操作數(shù),則確定所述第一指令的結(jié)果只被所述第一指令之后的指令使用一次,對所述 第一指令和第二指令做特殊標識。
[0019] 在第三種可能的實現(xiàn)方式中,結(jié)合第一方面的第二種可能的實現(xiàn)方式,對所述第 一指令和第二指令做特殊標識包括:
[0020] 將所述第一寄存器替換為特殊寄存器,且對第一指令和第二指令做特殊關(guān)系標 記。
[0021] 在第四種可能的實現(xiàn)方式中,結(jié)合第一方面的第二種可能的實現(xiàn)方式,對所述第 一指令和第二指令做特殊標識包括:
[0022] 在所述第一指令以及第二指令后添加特殊比特位,用于標記第一指令和第二指令 的關(guān)系。
[0023] 在第五種可能的實現(xiàn)方式中,結(jié)合第一方面或第一方面的第一至第四種可能的實 現(xiàn)方式中的任意一項,所述將所述第一指令和第二指令發(fā)射到功能單元中進行運算,使第 一指令先于第二指令執(zhí)行,并將第一指令的處理結(jié)果傳遞給所述第二指令包括:
[0024] 若所述第一指令和所述第二指令為連續(xù)的兩條指令,則將所述第一指令的結(jié)果通 過前遞通路直接傳遞給所述第二指令,作為所述第二指令的源操作數(shù);
[0025] 若所述第一指令和所述第二指令為不連續(xù)的兩條指令,則在所述第一指令執(zhí)行 后,將所述第一指令的結(jié)果緩存在所述功能單元中,當所述第二指令執(zhí)行時,將所述第一指 令的結(jié)果傳遞給所述第二指令,作為所述第二指令的源操作數(shù)。
[0026] 在第六種可能的實現(xiàn)方式中,結(jié)合第一方面或第一方面的第一至第五種可能的實 現(xiàn)方式,所述方法還包括:
[0027] 若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則對所述第一指令的結(jié) 果所在的寄存器在重命名階段不進行重命名操作。
[0028] 在第七種可能的實現(xiàn)方式中,結(jié)合第一方面或第一方面的第一至第六可能的實現(xiàn) 方式中的任意一項,所述方法還包括:
[0029] 在所述第一指令執(zhí)行完成后要通知重排序緩沖器,以便將所述第一指令按照所述 重排序緩沖器中的排序規(guī)則進行提交;
[0030] 在所述第二指令執(zhí)行完成后要將所述第二指令的結(jié)果寫回寄存器堆,并通知重排 序緩沖器,以便將所述第二指令按照所述重排序緩沖器中的排序規(guī)則進行提交。
[0031] 在第八種可能的實現(xiàn)方式中,結(jié)合第一方面或第一方面的第一至第七種可能的實 現(xiàn)方式,所述方法還包括:
[0032] 當所述第一指令和第二指令執(zhí)行完成后,將所述第一指令和所述第二指令同時提 交;
[0033] 當所述第一指令和/或第二指令執(zhí)行出現(xiàn)異常時,將所述第一指令和所述第二指 令重新執(zhí)行。
[0034] 第二方面,提供一種處理器,所述處理器包括:
[0035] 判決單元,用于判斷第一指令的結(jié)果是否只被所述第一指令之后的第二指令使用 一次;
[0036] 執(zhí)行單元,用于若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則將所 述第一指令的結(jié)果不寫回寄存器堆;并執(zhí)行第一指令和第二指令;
[0037] 發(fā)射單元,用于將所述第一指令和第二指令發(fā)射到功能單元中進行運算,使第一 指令先于第二指令執(zhí)行,并將第一指令的處理結(jié)果傳遞給所述第二指令,作為所述第二指 令的源操作數(shù)。
[0038] 在第一種可能的實現(xiàn)方式中,結(jié)合第二方面,所述判決單元具體用于:
[0039] 在譯碼階段識別所述第一指令和第二指令是否有特殊標識,如果有特殊標識則確 定第一指令的結(jié)果只被所述第一指令之后的第二指令使用一次。
[0040] 在第二種可能的實現(xiàn)方式中,結(jié)合第二方面或第二方面的第一種實現(xiàn)方式,所述 處理器還包括:
[0041] 標識單元,在譯碼階段識別第一寄存器作為所述第一指令的結(jié)果的存放寄存器, 同時只作為所述第二指令的源操作數(shù),則確定所述第一指令的結(jié)果只被所述第一指令之后 的指令使用一次,對所述第一指令和第二指令做特殊標識。
[0042] 在第三種可能的實現(xiàn)方式中,結(jié)合第二方面的第二種實現(xiàn)方式中的任意一項,所 述標識單元具體用于:
[0043] 將所述第一寄存器替換為特殊寄存器,且對第一指令和第二指令做特殊關(guān)系標 記。
[0044] 在第四種可能的實現(xiàn)方式中,結(jié)合第二方面的第二種實現(xiàn)方式,所述判決單元具 體用于:
[0045] 在所述第一指令以及第二指令后添加特殊比特位,用于標記第一指令和第二指令 的關(guān)系。
[0046] 在第五種可能的實現(xiàn)方式中,結(jié)合第二方面或第二方面的第一至第四種可能的實 現(xiàn)方式中的任意一項,所述發(fā)射單元具體用于:
[0047] 若所述第一指令和所述第二指令為連續(xù)的兩條指令,則將所述第一指令的結(jié)果通 過前遞通路直接傳遞給所述第二指令,作為所述第二指令的源操作數(shù);
[0048] 若所述第一指令和所述第二指令為不連續(xù)的兩條指令,則在所述第一指令執(zhí)行 后,將所述第一指令的結(jié)果緩存在所述功能單元中,當所述第二指令執(zhí)行時,將所述第一指 令的結(jié)果傳遞給所述第二指令,作為所述第二指令的源操作數(shù);
[0049] 在第六種可能的實現(xiàn)方式中,結(jié)合第一方面或第一方面的第一至第五種可能的實 現(xiàn)方式,所述處理器還包括:
[0050] 重命名單元,用于若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則對 所述第一指令的結(jié)果所在的寄存器在重命名階段不進行重命名操作。
[0051] 在第七種可能的實現(xiàn)方式中,結(jié)合第二方面或第二方面的第一至第六種可能的實 現(xiàn)方式中的任意一項,所述處理器還包括:
[0052] 通知單元,同于在所述第一指令執(zhí)行完成后要通知重排序緩沖器,以便將所述第 一指令按照所述重排序緩沖器中的排序規(guī)則進行提交;在所述第二指令執(zhí)行完成后要將所 述第二指令的結(jié)果寫回寄存器堆,并通知重排序緩沖器,以便將所述第二指令按照所述重 排序緩沖器中的排序規(guī)則進行提交。
[0053] 在第八種可能的實現(xiàn)方式中,結(jié)合第二方面或第二方面的第一至第七種可能的實 現(xiàn)方式中的任意一項,所述處理器還包括:
[0054] 提交單元,用于當所述第一指令和第二指令執(zhí)行完成后,將所述第一指令和所述 第二指令同時提交;
[0055] 異常處理單元,用于當所述第一指令和/或第二指令執(zhí)行出現(xiàn)異常時,將所述第 一指令和所述第二指令重新執(zhí)行。
[0056] 本發(fā)明實施例提供一種CPU指令處理方法和處理器,當?shù)谝恢噶畹慕Y(jié)果只被第一 指令之后的第二指令使用一次時,將第一指令和第二指令的中間結(jié)果不寫回寄存器堆并且 在寄存器重命名階段對存儲所述中間結(jié)果的寄存器不進行重命名,即不將存儲所述中間結(jié) 果的寄存器映射為物理寄存器,從而節(jié)省了寄存器資源,并且降低了讀寫繼存器所需消耗 的功耗。
【專利附圖】
【附圖說明】
[0057] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0058] 圖1為本發(fā)明實施例提供的一種CPU指令處理方法的流程示意圖一;
[0059] 圖2為本發(fā)明實施例提供的一種CPU指令處理方法的流程示意圖二;
[0060] 圖3為本發(fā)明實施例提供的一種處理器的結(jié)構(gòu)不意圖一;
[0061] 圖4為本發(fā)明實施例提供的一種處理器的結(jié)構(gòu)示意圖二;
[0062] 圖5為本發(fā)明實施例提供的一種處理器的結(jié)構(gòu)示意圖三;
[0063] 圖6為本發(fā)明實施例提供的一種處理器的結(jié)構(gòu)示意圖四;
[0064] 圖7為本發(fā)明實施例提供的一種處理器的結(jié)構(gòu)不意圖五;
[0065] 圖8為本發(fā)明實施例提供的另一種處理器的結(jié)構(gòu)示意圖。
【具體實施方式】
[0066] 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。
[0067] 本發(fā)明實施例提供一種CPU指令處理方法,如圖1所示,所述方法包括:
[0068] 101、判斷第一指令的結(jié)果是否只被所述第一指令之后的第二指令使用一次。
[0069] 需要注意的是,一條指令的結(jié)果只被該條指令之后的第二指令使用一次的關(guān)系指 的是:
[0070] 當一條指令執(zhí)行后的中間結(jié)果作為該條指令之后的第二指令執(zhí)行時所用的源操 作數(shù),并且這種關(guān)系只存在一次。
[0071] 102、若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則將所述第一指令 的結(jié)果不寫回寄存器堆。
[0072] 103、將所述第一指令和第二指令發(fā)射到功能單元中進行運算,使第一指令先于第 二指令執(zhí)行,并將第一指令的處理結(jié)果傳遞給所述第二指令,作為所述第二指令的源操作 數(shù)。
[0073] 本發(fā)明實施例提供一種CPU指令處理方法,當?shù)谝恢噶畹慕Y(jié)果只被第一指令之后 的第二指令使用一次時,將第一指令和第二指令的中間結(jié)果不寫回寄存器堆并且在寄存器 重命名階段對存儲所述中間結(jié)果的寄存器不進行重命名,即不將存儲所述中間結(jié)果的寄存 器映射為物理寄存器,從而節(jié)省了寄存器資源,并且降低了讀寫繼存器所需消耗的功耗。
[0074] 為了使本領域技術(shù)人員能夠更清楚地理解本發(fā)明實施例提供的技術(shù)方案,下面通 過具體的實施例,對本發(fā)明實施例提供的一種CPU指令處理方法進行詳細說明,如圖2所 示,該方法包括:
[0075] 201、處理器將程序代碼進行編譯,并在編譯完成后讀入指令。
[0076] 具體的,可以通過以下方法實現(xiàn):
[0077] 若有程序指令需要被執(zhí)行時,則處理器通過取指器將指令讀入,若發(fā)現(xiàn)讀入的兩 條指令的中間結(jié)果只被使用一次,則在編譯器生成代碼的時候可以用特殊的結(jié)構(gòu)寄存器R0 來存儲所述中間結(jié)果。
[0078] 示例性的,若一條程序代碼為a[0] = b+c+d,一般情況下編譯器編譯后生成的代 碼如下:
[0079] ADD R3, Rl, R2
[0080] ADD R5, R3, R4
[0081] STD 0 (R6), R5
[0082] 其中R1存放b的值,R2存放c的值,R4存放d的值,R6存放a [0]的地址;
[0083] 假設其中第一條為指令A,第二條為指令B,其中指令A在指令B前面執(zhí)行,并且指 令A的執(zhí)行結(jié)果存儲于寄存器R3中,同時指令B的源寄存器也為R3,即指令A與指令B間 的中間結(jié)果只被使用一次,那么我們可以修改編譯器,將指令A與指令B的中間結(jié)果存放于 特殊結(jié)構(gòu)寄存器R0中,用以將存在上述特殊關(guān)系的兩條指令標識出來,修改編譯器后生成 的代碼如下:
[0084] ADD R0, Rl, R2
[0085] ADD R5, R0, R4
[0086] STD 0 (R6), R5
[0087] 或給每條指令添加一個標記位,用以標記中間結(jié)果只被使用一次的兩條指令,經(jīng) 編譯后生成的代碼如下:
[0088] ADD R3,R1,R2 1
[0089] ADD R5, R3, R4 1
[0090] STD 0 (R6), R5 0
[0091] 其中標記位為1時,表示兩條指令存在中間結(jié)果被使用一次的關(guān)系;
[0092] 當這兩條指令需要被執(zhí)行時,則處理器通過IF取值器將指令A與指令B讀入。
[0093] 202、處理器在譯碼階段判斷第一指令的結(jié)果是否只被第一指令之后的第二指令 使用一次的情況,若存在,則對兩條指令進行標識。
[0094] 具體的,可以通過以下方法實現(xiàn):
[0095] 若在譯碼階段,譯碼器發(fā)現(xiàn)第一指令使用了特殊寄存器R0作為結(jié)果寄存器,同時 接下來的第二指令使用寄存器R0作為源操作數(shù),那么譯碼階段將會識別出第一指令和第 二指令并對該兩條指令進行特殊標識;
[0096] 或譯碼器發(fā)現(xiàn)第一指令與第二指令的標記位都為1,則對該兩條指令進行特殊標 識。
[0097] 示例性的,若發(fā)現(xiàn)指令A使用了特殊寄存器R0作為結(jié)果寄存器,同時接下來的某 指令B使用寄存器R0中的值作為源操作數(shù),那么譯碼階段將會識別出指令A和指令B具備 '中間結(jié)果只被使用一次'的關(guān)系,對該兩條指令進行特殊標識;
[0098] 或發(fā)現(xiàn)指令A與指令B的標記位都為1,則對指令A與指令B進行特殊標識。
[0099] 203、處理器在重命名階段,若發(fā)現(xiàn)兩條指令擁有特殊標記,則對存儲中間結(jié)果的 寄存器不進行重命名,并將指令流信息發(fā)送給重排序緩沖器和發(fā)射隊列。
[0100] 具體的,可通過以下方法實現(xiàn):
[0101] 當指令流到達重命名階段,若發(fā)現(xiàn)兩條指令擁有特殊標記,則對于存儲這兩條指 令的中間結(jié)果的寄存器不進行重命名操作,即不將其映射為物理寄存器,而存儲其他信息 的寄存器需要進行重命名,并映射為物理寄存器。
[0102] 示例性的,當指令A與指令B經(jīng)過重命名階段時,發(fā)現(xiàn)指令A與指令B擁有特殊標 記,若指令A與指令B的中間結(jié)果被存儲在R0中,則不對其中的R0寄存器進行重命名工 作,其他寄存器照常進行重命名工作,即將對應的結(jié)構(gòu)寄存器重命名為物理寄存器,若指令 A與指令B的中間結(jié)果被存儲在R3中,則不對其中的R3寄存器進行重命名工作,其他寄存 器照常進行重命名工作,即將對應的結(jié)構(gòu)寄存器重命名為物理寄存器,;
[0103] 當重命名工作結(jié)束后,將指令流相關(guān)信息發(fā)送到重排序緩沖器與發(fā)射隊列中,其 中指令流信息是譯碼以后得到的指令信息。包括源操作數(shù),目的操作數(shù),需要進行的操作和 命令息。
[0104] 204、處理器在發(fā)射隊列中進行等待的指令的源操作數(shù)準備就緒后,將該指令發(fā)送 到功能單元中進行運算。
[0105] 具體的,可以通過以下方法實現(xiàn):
[0106] 當指令在發(fā)射隊列中進行等待的時候,若寄存器堆中已經(jīng)保存有最新的源操作數(shù) 或功能單元已經(jīng)算出最新的值,但是還沒有寫回寄存器堆中,則表明指令的源操作數(shù)已經(jīng) 準備就緒,將指令發(fā)送到功能單元中進行運算。
[0107] 可選的,在進行計算后,還可以包括以下步驟:
[0108] 205、若第一指令的結(jié)果只被第一指令之后的第二指令使用一次,當?shù)谝恢噶钣嬎?出結(jié)果時,不將所述結(jié)果發(fā)送到寄存器堆,而是緩存在功能單元中,等待第二指令執(zhí)行時, 將所述結(jié)果作為源操作數(shù)。
[0109] 具體的,可以通過以下方法實現(xiàn):
[0110] 對于只具有一般關(guān)系的兩條指令,經(jīng)過功能單元計算結(jié)束后的結(jié)果直接寫回寄存 器堆并通知重排序緩沖器指令執(zhí)行完畢等待最終提交,對于中間結(jié)果只被使用一次的兩條 指令,若第一指令計算出結(jié)果時,并不將所述結(jié)果發(fā)送到寄存器堆,而是緩存在功能單元 中,等待第二指令執(zhí)行時,將所述結(jié)果作為源操作數(shù);
[0111] 假如兩條指令是連續(xù)的時候,第一指令執(zhí)行的結(jié)果可以通過前向通路直接傳遞給 第二指令進行計算而不需要緩存,第一指令執(zhí)行結(jié)束時需要通知重排序緩沖器,當?shù)诙?令執(zhí)行結(jié)束時,需要將結(jié)果寫回寄存器堆,并通知重排序緩沖器。
[0112] 示例性的,對于中間結(jié)果被使用一次的兩條指令A和B,當A指令計算出結(jié)果時,該 結(jié)果并不被發(fā)送到寄存器堆,而是緩存在功能單元中,并在B指令執(zhí)行時,作為B指令的源 操作數(shù);
[0113] 事實上,假如A指令和B指令是連續(xù)的時候,A指令執(zhí)行的結(jié)果可以通過前向通路 直接傳遞給B指令進行計算而不需要緩存,對于A指令,其經(jīng)過功能單元計算結(jié)束后是需要 通知重排序緩沖器的,當B指令執(zhí)行結(jié)束后,需要將B指令的執(zhí)行結(jié)果寫回寄存器堆,并通 知重排序緩沖器。
[0114] 206、若第一指令的結(jié)果只被第一指令之后的第二指令使用一次,則重排序緩沖器 需要在兩條指令都執(zhí)行完畢后同時進行提交。
[0115] 具體的,可以通過以下方法實現(xiàn):
[0116] 若第一指令的結(jié)果只被第一指令之后的第二指令使用一次,為了避免第一指令執(zhí) 行時,忽然發(fā)生異常進入異常處理程序,而導致第一指令的結(jié)果丟失的情況,重排序緩沖器 需要在第二指令執(zhí)行結(jié)束時才可以提交第一指令和第二指令,即保證同時提交,假如第一 指令執(zhí)行結(jié)束了,而第二指令還沒執(zhí)行結(jié)束的時候,忽然發(fā)生異常,那么此時,第一和第二 指令都不能提交,需要等待重新執(zhí)行。
[0117] 示例性的,對于A、B兩條指令,重排序緩沖器需要在B指令完成時才可以提交A指 令和B指令,即為了保證同時提交,從而避免A執(zhí)行時,忽然發(fā)生異常而進入異常處理程序 導致A指令的結(jié)果丟失的情況,假如A指令執(zhí)行結(jié)束,而B指令還沒執(zhí)行結(jié)束的時候,忽然 發(fā)生異常,那么此時,A指令和B指令都不能提交,需要等待重新執(zhí)行。
[0118] 本發(fā)明實施例提供一種CPU指令處理方法,當?shù)谝恢噶畹慕Y(jié)果只被第一指令之后 的第二指令使用一次時,將第一指令和第二指令的中間結(jié)果不寫回寄存器堆并且在寄存器 重命名階段對存儲所述中間結(jié)果的寄存器不進行重命名,即不將存儲所述中間結(jié)果的寄存 器映射為物理寄存器,從而節(jié)省了寄存器資源,并且降低了讀寫繼存器所需消耗的功耗。
[0119] 本發(fā)明實施例提供一種處理器01,如圖3所示,處理器01包括:
[0120] 判決單元011,用于判斷第一指令的結(jié)果是否只被第一指令之后的第二指令使用 一次;
[0121] 執(zhí)行單元012,用于若結(jié)果只被第一指令之后的第二指令使用一次,則將第一指令 的結(jié)果不寫回寄存器堆;并執(zhí)行第一指令和第二指令;
[0122] 發(fā)射單元013,用于將第一指令和第二指令發(fā)射到功能單元中進行運算,使第一指 令先于第二指令執(zhí)行,并將第一指令的處理結(jié)果傳遞給第二指令,作為第二指令的源操作 數(shù)。
[0123] 進一步的,判決單元011具體用于:
[0124] 在譯碼階段識別第一指令和第二指令是否有特殊標識,如果有特殊標識則確定第 一指令的結(jié)果只被第一指令之后的第二指令使用一次。
[0125] 再進一步的,如圖4所示,處理器01還包括:
[0126] 標識單元014,在譯碼階段識別第一寄存器作為第一指令的結(jié)果的存放寄存器, 同時只作為第二指令的源操作數(shù),則確定第一指令的結(jié)果只被第一指令之后的指令使用一 次,對第一指令和第二指令做特殊標識。
[0127] 再進一步的,執(zhí)行單元012具體用于:
[0128] 將第一寄存器替換為特殊寄存器,且對第一指令和第二指令做特殊關(guān)系標記。
[0129] 再進一步的,標識單元014具體用于:
[0130] 在第一指令以及第二指令后添加特殊比特位,用于標記第一指令和第二指令的關(guān) 系。
[0131] 更進一步的,發(fā)射單元013具體用于:
[0132] 若第一指令和第二指令為連續(xù)的兩條指令,則將第一指令的結(jié)果通過前遞通路直 接傳遞給第二指令,作為第二指令的源操作數(shù);
[0133] 若第一指令和第二指令為不連續(xù)的兩條指令,則在第一指令執(zhí)行后,將第一指令 的結(jié)果緩存在功能單元中,當?shù)诙噶顖?zhí)行時,將第一指令的結(jié)果傳遞給第二指令,作為第 二指令的源操作數(shù)。
[0134] 可選的,如圖5所示,處理器01還包括:
[0135] 重命名單元015,用于若結(jié)果只被第一指令之后的第二指令使用一次,則對第一指 令的結(jié)果所在的寄存器在重命名階段不進行重命名操作。
[0136] 優(yōu)選的,如圖6所示,處理器01還包括:
[0137] 通知單元016,同于在第一指令執(zhí)行完成后要通知重排序緩沖器,以便將第一指令 按照重排序緩沖器中的排序規(guī)則進行提交;在第二指令執(zhí)行完成后要將第二指令的結(jié)果寫 回寄存器堆,并通知重排序緩沖器,以便將第二指令按照重排序緩沖器中的排序規(guī)則進行 提交。
[0138] 優(yōu)選的,如圖7所示,處理器01還包括:
[0139] 提交單元017,用于當?shù)谝恢噶詈偷诙噶顖?zhí)行完成后,將第一指令和第二指令同 時提交;
[0140] 異常處理單元018,用于當?shù)谝恢噶詈?或第二指令執(zhí)行出現(xiàn)異常時,將第一指令 和第二指令重新執(zhí)行。
[0141] 本發(fā)明實施例提供一種處理器,當?shù)谝恢噶畹慕Y(jié)果只被第一指令之后的第二指令 使用一次時,將第一指令和第二指令的中間結(jié)果不寫回寄存器堆并且在寄存器重命名階段 對存儲中間結(jié)果的寄存器不進行重命名,即不將存儲中間結(jié)果的寄存器映射為物理寄存 器,從而節(jié)省了寄存器資源,并且降低了讀寫繼存器所需消耗的功耗。
[0142] 本發(fā)明實施例提供一種處理器02,如圖8所示,處理器02包括:
[0143] 取指器021、譯碼器022、重命名部件023、發(fā)射隊列024、重排序緩沖器025、寄存器 堆026以及功能單元027,其中重命名部件023與發(fā)射隊列024和重排序緩沖器025相連 接,寄存器堆026與重排序緩沖器025、發(fā)射隊列024相互連接,寄存器堆026和發(fā)射隊列 024與功能單元027相連接,功能單元027與重排序緩沖器025和寄存器堆026相連接,指 令首先經(jīng)過取指器021后到達譯碼器022 ;其中,譯碼器022用于:
[0144] 判斷第一指令的結(jié)果是否只被第一指令之后的第二指令使用一次;
[0145] 若結(jié)果只被第一指令之后的第二指令使用一次,則將第一指令的結(jié)果不寫回寄存 器堆026。
[0146] 進一步的,發(fā)射隊列024用于:
[0147] 將第一指令和第二指令發(fā)射到功能單元027中進行運算,使第一指令先于第二指 令執(zhí)行,并將第一指令的處理結(jié)果傳遞給第二指令,作為第二指令的源操作數(shù)。
[0148] 再進一步的,譯碼器022具體用于:
[0149] 在譯碼階段識別第一指令和第二指令是否有特殊標識,如果有特殊標識則確定第 一指令的結(jié)果只被第一指令之后的第二指令使用一次。
[0150] 再進一步的,譯碼器022具體用于:
[0151] 在譯碼階段識別第一寄存器作為第一指令的結(jié)果的存放寄存器,同時只作為第二 指令的源操作數(shù),則確定第一指令的結(jié)果只被第一指令之后的指令使用一次,對第一指令 和第二指令做特殊標識。
[0152] 再進一步的,譯碼器022具體用于:
[0153] 將第一寄存器替換為特殊寄存器,且對第一指令和第二指令做特殊關(guān)系標記。
[0154] 再進一步的,譯碼器022具體用于:
[0155] 在第一指令以及第二指令后添加特殊比特位,用于標記第一指令和第二指令的關(guān) 系。
[0156] 再進一步的,發(fā)射隊列024具體用于:
[0157] 若第一指令和第二指令為連續(xù)的兩條指令,則將第一指令的結(jié)果通過前遞通路直 接傳遞給第二指令,作為第二指令的源操作數(shù);
[0158] 若第一指令和第二指令為不連續(xù)的兩條指令,則在第一指令執(zhí)行后,將第一指令 的結(jié)果緩存在功能單元027中,當?shù)诙噶顖?zhí)行時,將第一指令的結(jié)果傳遞給第二指令,作 為第二指令的源操作數(shù)。
[0159] 再進一步的,重命名部件023具體用于:
[0160] 若結(jié)果只被第一指令之后的第二指令使用一次,則對第一指令的結(jié)果所在的寄存 器在重命名階段不進行重命名操作。
[0161] 再進一步的,功能單元027具體用于:
[0162] 在第一指令執(zhí)行完成后要通知重排序緩沖器025,以便將第一指令按照重排序緩 沖器025中的排序規(guī)則進行提交;在第二指令執(zhí)行完成后要將第二指令的結(jié)果寫回寄存器 堆026,并通知重排序緩沖器025,以便將第二指令按照重排序緩沖器025中的排序規(guī)則進 行提交。
[0163] 更進一步的,重排序緩沖器025還用于:
[0164] 當?shù)谝恢噶詈偷诙噶顖?zhí)行完成后,將第一指令和第二指令同時提交;
[0165] 當?shù)谝恢噶詈?或第二指令執(zhí)行出現(xiàn)異常時,將第一指令和第二指令重新執(zhí)行。
[0166] 本發(fā)明實施例提供一種處理器,當?shù)谝恢噶畹慕Y(jié)果只被第一指令之后的第二指令 使用一次時,將第一指令和第二指令的中間結(jié)果不寫回寄存器堆并且在寄存器重命名階段 對存儲中間結(jié)果的寄存器不進行重命名,即不將存儲中間結(jié)果的寄存器映射為物理寄存 器,從而節(jié)省了寄存器資源,并且降低了讀寫繼存器所需消耗的功耗。
[0167] 在本申請所提供的幾個實施例中,應該理解到,所揭露的方法,裝置和系統(tǒng)可以通 過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃 分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可 以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討 論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合 或通信連接,可以是電性,機械或其它的形式。
[0168] 另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以 是各個單元單獨物理包括,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單 元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
[0169] 上述以軟件功能單元的形式實現(xiàn)的集成的單元,可以存儲在一個計算機可讀取存 儲介質(zhì)中。上述軟件功能單元存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機 設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的 部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(Read-Only Memory,簡稱 ROM)、隨機存取存儲器(Random Access Memory,簡稱RAM)、磁碟或者光盤等各種可以存儲 程序代碼的介質(zhì)。
[0170] 以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何 熟悉本【技術(shù)領域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應涵 蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應以所述權(quán)利要求的保護范圍為準。
【權(quán)利要求】
1. 一種CPU指令處理方法,其特征在于,所述方法包括: 判斷第一指令的結(jié)果是否只被所述第一指令之后的第二指令使用一次; 若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則將所述第一指令的結(jié)果不 寫回寄存器堆; 將所述第一指令和第二指令發(fā)射到功能單元中進行運算,使第一指令先于第二指令執(zhí) 行,并將第一指令的處理結(jié)果傳遞給所述第二指令,作為所述第二指令的源操作數(shù)。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述判斷第一指令的結(jié)果是否只被所述 第一指令之后的指令使用一次包括: 在譯碼階段識別所述第一指令和第二指令是否有特殊標識,如果有特殊標識則確定第 一指令的結(jié)果只被所述第一指令之后的第二指令使用一次。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述判斷第一指令的結(jié)果是否只被所 述第一指令之后的指令使用一次還包括: 若第一寄存器作為所述第一指令的結(jié)果的存放寄存器,同時只作為所述第二指令的源 操作數(shù),則確定所述第一指令的結(jié)果只被所述第一指令之后的指令使用一次,對所述第一 指令和第二指令做特殊標識。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,對所述第一指令和第二指令做特殊標識 包括: 將所述第一寄存器替換為特殊寄存器,且對第一指令和第二指令做特殊關(guān)系標記。
5. 根據(jù)權(quán)利要求3所述的方法,其特征在于,對所述第一指令和第二指令做特殊標識 包括: 在所述第一指令以及第二指令后添加特殊比特位,用于標記第一指令和第二指令的關(guān) 系。
6. 根據(jù)權(quán)利要求1至5任意一項所述方法,其特征在于,所述將所述第一指令和第二指 令發(fā)射到功能單元中進行運算,使第一指令先于第二指令執(zhí)行,并將第一指令的處理結(jié)果 傳遞給所述第二指令包括: 若所述第一指令和所述第二指令為連續(xù)的兩條指令,則將所述第一指令的結(jié)果通過前 遞通路直接傳遞給所述第二指令,作為所述第二指令的源操作數(shù); 若所述第一指令和所述第二指令為不連續(xù)的兩條指令,則在所述第一指令執(zhí)行后,將 所述第一指令的結(jié)果緩存在所述功能單元中,當所述第二指令執(zhí)行時,將所述第一指令的 結(jié)果傳遞給所述第二指令,作為所述第二指令的源操作數(shù)。
7. 根據(jù)權(quán)利要求1至6中任一項所述方法,其特征在于,所述方法還包括: 若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則對所述第一指令的結(jié)果所 在的寄存器在重命名階段不進行重命名操作。
8. 根據(jù)權(quán)利要求1至7中任一項所述方法,其特征在于,在所述第一指令執(zhí)行完成后要 通知重排序緩沖器,以便將所述第一指令按照所述重排序緩沖器中的排序規(guī)則進行提交; 在所述第二指令執(zhí)行完成后要將所述第二指令的結(jié)果寫回寄存器堆,并通知重排序緩 沖器,以便將所述第二指令按照所述重排序緩沖器中的排序規(guī)則進行提交。
9. 根據(jù)權(quán)利要求1至8中任意一項所述的方法,其特征在于,所述方法還包括: 當所述第一指令和第二指令執(zhí)行完成后,將所述第一指令和所述第二指令同時提交; 當所述第一指令和/或第二指令執(zhí)行出現(xiàn)異常時,將所述第一指令和所述第二指令重 新執(zhí)行。
10. -種處理器,其特征在于,包括: 判決單元,用于判斷第一指令的結(jié)果是否只被所述第一指令之后的第二指令使用一 次; 執(zhí)行單元,用于若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則將所述第 一指令的結(jié)果不寫回寄存器堆;并執(zhí)行第一指令和第二指令; 發(fā)射單元,用于將所述第一指令和第二指令發(fā)射到功能單元中進行運算,使第一指令 先于第二指令執(zhí)行,并將第一指令的處理結(jié)果傳遞給所述第二指令,作為所述第二指令的 源操作數(shù)。
11. 根據(jù)權(quán)利要求10所述的處理器,其特征在于,所述判決單元具體用于: 在譯碼階段識別所述第一指令和第二指令是否有特殊標識,如果有特殊標識則確定第 一指令的結(jié)果只被所述第一指令之后的第二指令使用一次。
12. 根據(jù)權(quán)利要求10或11所述處理器,其特征在于,還包括: 標識單元,在譯碼階段識別第一寄存器作為所述第一指令的結(jié)果的存放寄存器,同時 只作為所述第二指令的源操作數(shù),則確定所述第一指令的結(jié)果只被所述第一指令之后的指 令使用一次,對所述第一指令和第二指令做特殊標識。
13. 根據(jù)權(quán)利要求12所述處理器,其特征在于,所述標識單元具體用于: 將所述第一寄存器替換為特殊寄存器,且對第一指令和第二指令做特殊關(guān)系標記。
14. 根據(jù)權(quán)利要求12所述處理器,其特征在于,所述標識單元具體用于: 在所述第一指令以及第二指令后添加特殊比特位,用于標記第一指令和第二指令的關(guān) 系。
15. 根據(jù)權(quán)利要求10至14中任一項所述處理器,其特征在于,所述發(fā)射單元具體用 于: 若所述第一指令和所述第二指令為連續(xù)的兩條指令,則將所述第一指令的結(jié)果通過前 遞通路直接傳遞給所述第二指令,作為所述第二指令的源操作數(shù); 若所述第一指令和所述第二指令為不連續(xù)的兩條指令,則在所述第一指令執(zhí)行后,將 所述第一指令的結(jié)果緩存在所述功能單元中,當所述第二指令執(zhí)行時,將所述第一指令的 結(jié)果傳遞給所述第二指令,作為所述第二指令的源操作數(shù)。
16. 根據(jù)權(quán)利要求10至15中任一項所述處理器,其特征在于,所述處理器還包括: 重命名單元,用于若所述結(jié)果只被所述第一指令之后的第二指令使用一次,則對所述 第一指令的結(jié)果所在的寄存器在重命名階段不進行重命名操作。
17. 根據(jù)權(quán)利要求10至16中任一項所述處理器,其特征在于,所述處理器還包括: 通知單元,用于在所述第一指令執(zhí)行完成后要通知重排序緩沖器,以便將所述第一指 令按照所述重排序緩沖器中的排序規(guī)則進行提交;在所述第二指令執(zhí)行完成后要將所述第 二指令的結(jié)果寫回寄存器堆,并通知重排序緩沖器,以便將所述第二指令按照所述重排序 緩沖器中的排序規(guī)則進行提交。
18. 根據(jù)權(quán)利要求10至17中任一項所述處理器,其特征在于,所述處理器還包括: 提交單元,用于當所述第一指令和第二指令執(zhí)行完成后,將所述第一指令和所述第二 指令同時提交; 異常處理單元,用于當所述第一指令和/或第二指令執(zhí)行出現(xiàn)異常時,將所述第一指 令和所述第二指令重新執(zhí)行。
【文檔編號】G06F9/30GK104216681SQ201310213735
【公開日】2014年12月17日 申請日期:2013年5月31日 優(yōu)先權(quán)日:2013年5月31日
【發(fā)明者】張立新, 張柳航, 侯銳, 姜志穎 申請人:華為技術(shù)有限公司, 中國科學院計算技術(shù)研究所