本發(fā)明涉及指令優(yōu)化領(lǐng)域,具體而言,涉及一種應(yīng)用復(fù)合指令加快數(shù)據(jù)流結(jié)構(gòu)中指令執(zhí)行速度的方法。
背景技術(shù):
:據(jù)統(tǒng)計(jì),全球每天產(chǎn)生的數(shù)據(jù)以2.5eb的速度不斷積累(張引,陳敏,廖小飛.大數(shù)據(jù)應(yīng)用的現(xiàn)狀與展望[j].計(jì)算機(jī)研究與發(fā)展,2013,50(s2):216-233.),idc報(bào)告指出,全球數(shù)據(jù)總量正以每?jī)赡攴环乃俣瘸掷m(xù)增長(zhǎng),從2013年到2020年,全球數(shù)據(jù)總量將增長(zhǎng)10倍,達(dá)到44zb。毋容置疑,大數(shù)據(jù)時(shí)代已經(jīng)到來,人類已經(jīng)從it時(shí)代悄然進(jìn)入dt時(shí)代。許多科學(xué)計(jì)算領(lǐng)域的應(yīng)用也轉(zhuǎn)變成了大數(shù)據(jù)應(yīng)用。許多領(lǐng)域的科研都在通過高通量傳感器和儀器獲取大量數(shù)據(jù),從天體物理學(xué)和海洋學(xué),到基因?qū)W和環(huán)境研究,無不如此。美國(guó)國(guó)家科學(xué)基金會(huì)(nsf)最近公布了bigdata方案征集,以利于信息共享和數(shù)據(jù)分析。一些學(xué)科已經(jīng)開發(fā)了海量數(shù)據(jù)平臺(tái)并取得了相應(yīng)的收益。例如,在生物學(xué)中,iplant正應(yīng)用網(wǎng)絡(luò)基礎(chǔ)設(shè)施、物理計(jì)算資源、協(xié)作環(huán)境、虛擬機(jī)資源、可互操作的分析軟件和數(shù)據(jù)服務(wù)來協(xié)助研究人員、教育工作者和學(xué)生建設(shè)所有的植物學(xué)科。iplant數(shù)據(jù)集形式變化多端,其中包括規(guī)范或參考數(shù)據(jù)、實(shí)驗(yàn)數(shù)據(jù)、模擬和模型數(shù)據(jù)、觀測(cè)數(shù)據(jù)以及其他派生數(shù)據(jù)。現(xiàn)有的高性能處理器在面向高性能計(jì)算機(jī)性能評(píng)價(jià)標(biāo)準(zhǔn)測(cè)試程序時(shí)能獲得很高的浮點(diǎn)效率,但在處理某些大規(guī)模實(shí)際科學(xué)計(jì)算時(shí)獲得浮點(diǎn)效率卻非常低(申小偉,葉笑春,王達(dá),張浩,王飛,譚旭,張志敏,范東睿,唐志敏,孫凝暉.一種面向科學(xué)計(jì)算的數(shù)據(jù)流優(yōu)化方法[j].計(jì)算機(jī)學(xué)報(bào),2016,:1-18)。浮點(diǎn)效率的低下意味著浮點(diǎn)計(jì)算資源和計(jì)算能力的浪費(fèi),在面向未來e級(jí)科學(xué)計(jì)算時(shí),計(jì)算系統(tǒng)將難以承受現(xiàn)有處理器低效帶來的計(jì)算能力需求和功耗需求。大數(shù)據(jù)科學(xué)計(jì)算領(lǐng)域,相比控制流處理器,數(shù)據(jù)流處理器具有較好的指令并行性、數(shù)據(jù)復(fù)用性和能效比。大規(guī)??茖W(xué)計(jì)算應(yīng)用在數(shù)據(jù)流體系結(jié)構(gòu)實(shí)現(xiàn)時(shí),可以將大規(guī)模的數(shù)據(jù)劃分成小塊,將處理小塊數(shù)據(jù)的邏輯轉(zhuǎn)化為數(shù)據(jù)流圖,將數(shù)據(jù)流圖轉(zhuǎn)化為一串?dāng)?shù)據(jù)流指令(即內(nèi)核)映射到數(shù)據(jù)流處理器中,不同的小塊作為獨(dú)立的上下文流式地注入數(shù)據(jù)流處理器,這種動(dòng)態(tài)數(shù)據(jù)流方式指令利用率高,不同層的數(shù)據(jù)流圖猶如流水線般運(yùn)行,上下文吞吐量大。在數(shù)據(jù)流結(jié)構(gòu)中,一條指令要發(fā)射需要滿足兩個(gè)條件,一個(gè)是要滿足源操作數(shù)全部準(zhǔn)備好,另一個(gè)是要確認(rèn)依賴于這條指令的指令已經(jīng)準(zhǔn)備好接受源操作數(shù)了。如圖1所示為指令的發(fā)射約束示意圖,圖1中,op1、op2和op3為3個(gè)指令發(fā)射單元,op1可以發(fā)射指令就要滿足它的兩個(gè)源操作數(shù)到達(dá),且op3返回給它一個(gè)ack消息,說明op3的第一個(gè)源操作數(shù)的位置為空,是可以寫入的,那么在這種情況下,op1就可以發(fā)射了。同樣op3要等op1和op2產(chǎn)生的數(shù)據(jù)傳輸?shù)給p3的源操作數(shù)位置,且依賴于op3的指令返回給了op3的ack消息后才能發(fā)射。因?yàn)閿?shù)據(jù)流結(jié)構(gòu)具有上述特點(diǎn),產(chǎn)生了數(shù)據(jù)流執(zhí)行過程中獨(dú)特的現(xiàn)象和規(guī)律,圖2為指令之間發(fā)射的依賴關(guān)系示意圖,如圖2所示:圖2中,micc負(fù)責(zé)啟動(dòng)一次或多次數(shù)據(jù)流圖的執(zhí)行;每一個(gè)長(zhǎng)方塊代表一條指令,箭頭指向下一條可以發(fā)射的指令;長(zhǎng)方塊左邊的小塊“空白”表示操作數(shù)沒有就位,有灰度時(shí)表示操作數(shù)就位了;長(zhǎng)方塊右邊的小塊里面是圈時(shí)表示依賴于它的指令可以接受它產(chǎn)生的結(jié)果,是叉時(shí)代表依賴它的指令的操作數(shù)位已經(jīng)被占用,不能接受新的數(shù);不同灰度代表的是同一數(shù)據(jù)流圖的多次執(zhí)行??梢钥吹剑c一條可以發(fā)射的指令有依賴和被依賴關(guān)系的指令都處于不能被發(fā)射的狀態(tài),可以同時(shí)發(fā)射的指令之間沒有直接的依賴關(guān)系。而且每一條指令進(jìn)入發(fā)射狀態(tài)時(shí),必須接受到多個(gè)其他指令從網(wǎng)絡(luò)上發(fā)來的數(shù)據(jù)消息和ack消息??梢?,對(duì)于一個(gè)數(shù)據(jù)流圖,如果能有效減少依賴鏈上的指令數(shù)量,就可以減少網(wǎng)絡(luò)中的數(shù)據(jù)消息和ack消息的數(shù)量,同時(shí)還可以減少執(zhí)行單元的存儲(chǔ)指令和數(shù)據(jù)的需求,并且加快數(shù)據(jù)流程序的執(zhí)行速度。指令合并優(yōu)化的思想在馮諾依曼結(jié)構(gòu)的計(jì)算機(jī)中已經(jīng)有一些具體設(shè)計(jì),如指令合并優(yōu)化(cn201380016936.7),但是它并不能在數(shù)據(jù)流結(jié)構(gòu)中得以應(yīng)用。數(shù)據(jù)流計(jì)算模式是一種與傳統(tǒng)控制流完全不同的計(jì)算模式,下表對(duì)兩種計(jì)算模式的差別進(jìn)行了總結(jié)??刂屏髋c數(shù)據(jù)流的差別驅(qū)動(dòng)控制方式數(shù)據(jù)傳遞方式控制流指令驅(qū)動(dòng)順序的、集中的共享存儲(chǔ)數(shù)據(jù)流數(shù)據(jù)驅(qū)動(dòng)異步的、分散的直接在指令間傳遞從上表可以看到控制流的指令是順序的,并且指令之間傳遞數(shù)據(jù)是通過共享寄存器的方式。這就意味著,在控制流的結(jié)構(gòu)中判斷指令是否可以合并的條件包含了以下兩部分:(1)確定所述兩個(gè)或更多機(jī)器指令包括指定第一目標(biāo)寄存器的第一指令以及指定該第一目標(biāo)寄存器作為源寄存器以及目標(biāo)寄存器的第二指令;(2)該第二指令在編程順序上是該第一指令的下一個(gè)順序的指令,其中該第一指令指定要進(jìn)行第一功能,并且該第二指令指定要進(jìn)行第二功能。而數(shù)據(jù)流結(jié)構(gòu)中的數(shù)據(jù)傳遞是在指令間直接傳遞的,沒有共享寄存器存在,那么就無法根據(jù)第一條指令的目的寄存器和第二指令的源寄存器相同作為合并依據(jù)。同樣,數(shù)據(jù)流的指令不是順序的,而是充分地發(fā)掘了指令級(jí)并行,所以不需要遵守指令間的順序,這點(diǎn)也與控制流的條件不同。因此,如何根據(jù)數(shù)據(jù)流的特點(diǎn)對(duì)其指令進(jìn)行優(yōu)化,以加快指令的執(zhí)行速度,是本領(lǐng)域技術(shù)人員面對(duì)的一大問題。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提供一種應(yīng)用復(fù)合指令加快數(shù)據(jù)流結(jié)構(gòu)中指令執(zhí)行速度的方法,該方法應(yīng)用于一數(shù)據(jù)流處理的硬件架構(gòu)中,以加快指令執(zhí)行速度。為了達(dá)到上述目的,本發(fā)明提供了一種應(yīng)用復(fù)合指令加快數(shù)據(jù)流結(jié)構(gòu)中指令執(zhí)行速度的方法,其包括以下步驟:s1:判斷數(shù)據(jù)流結(jié)構(gòu)中兩條相互依賴的指令是否可以結(jié)合為一條復(fù)合指令,判斷方式為:第二條指令是否只依賴于第一條指令,如果是,則進(jìn)行步驟s2;s2:將第一條指令和第二條指令結(jié)合為一條復(fù)合指令,其中,第一條指令和第二條指令的指令格式如下表:其中,第一條指令的目的指令為目的指令0~n1,第二條指令的目的指令為目的指令0~n2,第一條指令中的“目的指令0”指向第二條指令,結(jié)合后的復(fù)合指令的指令格式如下表:其中,復(fù)合指令的源操作數(shù)個(gè)數(shù)與第一條指令的源操作數(shù)的個(gè)數(shù)相同,復(fù)合指令中的前n1條目的指令依次對(duì)應(yīng)第一條指令中的目的指令1~n1,復(fù)合指令中的其余指令依次對(duì)應(yīng)第二條指令中的各條目的指令;s3:將向第一條指令提供源操作數(shù)的目的指令修改為結(jié)合后的復(fù)合指令;s4:對(duì)數(shù)據(jù)流結(jié)構(gòu)中所有兩條相互依賴指令均執(zhí)行上述步驟s1~s3;s5:針對(duì)數(shù)據(jù)流中的指令集,于譯碼器中構(gòu)建一復(fù)合指令列表,所述復(fù)合指令列表包含多個(gè)復(fù)合指令項(xiàng)目,每一指令項(xiàng)目包含復(fù)合指令名稱以及該復(fù)合指令名稱對(duì)應(yīng)的第一條指令名稱和第二條指令名稱;s6:在數(shù)據(jù)流處理的硬件架構(gòu)中設(shè)置一數(shù)據(jù)選擇器和多個(gè)緩沖單元,其中,緩沖單元的數(shù)量與運(yùn)算部件的流水線拍數(shù)相同,所述譯碼器與所述數(shù)據(jù)選擇器的第一輸入端連接,所述數(shù)據(jù)選擇器的輸出端與運(yùn)算部件連接,多個(gè)緩沖單元串接并與所述數(shù)據(jù)選擇器和運(yùn)算部件并行設(shè)置,所述運(yùn)算部件的最后一拍與最后一個(gè)緩存單元連接后進(jìn)一步與所述數(shù)據(jù)選擇器的第二輸入端連接以構(gòu)成一旁路邏輯;s7:譯碼器依次接收指令選擇器發(fā)送來的指令,若該指令為復(fù)合指令,譯碼器則根據(jù)所述復(fù)合指令列表將其拆分為對(duì)應(yīng)的第一指令和第二指令;s8:所述數(shù)據(jù)選擇器的第一輸入端和第二輸入端分別接收由所述譯碼器和所述旁路邏輯發(fā)送的指令,于接收到所述譯碼器發(fā)送的指令的同時(shí)判斷旁路邏輯是否有發(fā)送來的指令,若為是,所述數(shù)據(jù)選擇器則優(yōu)先將旁路邏輯發(fā)送來的指令發(fā)送至運(yùn)算部件,之后再將所述譯碼器發(fā)送來的指令發(fā)送至運(yùn)算部件,若為否,所述數(shù)據(jù)選擇器則直接將所述譯碼器發(fā)送來的指令發(fā)送至運(yùn)算部件,其中,當(dāng)指令為復(fù)合指令時(shí),所述數(shù)據(jù)選擇器是將第一指令發(fā)送至運(yùn)算部件,第二指令則由譯碼器發(fā)送至第一個(gè)緩沖單元;s9:運(yùn)算部件按照運(yùn)算流水依次執(zhí)行其中的指令,多個(gè)緩沖單元以與所述運(yùn)算部件中的流水同步的速度將其中的指令依次傳遞至下一個(gè)緩沖單元;s10:對(duì)于非復(fù)合指令,所述運(yùn)算部件執(zhí)行完運(yùn)算流水的最后一拍后直接輸出運(yùn)算結(jié)果,對(duì)于復(fù)合指令,當(dāng)運(yùn)算部件執(zhí)行完第一指令的運(yùn)算流水的最后一拍并輸出運(yùn)算結(jié)果后,該運(yùn)算結(jié)果與最后一個(gè)緩存單元輸出的第二指令合并后通過所述旁路邏輯發(fā)送至所述數(shù)據(jù)選擇器的第二輸入端;s11:執(zhí)行上述步驟直至s7~s10直至所有指令均輸出運(yùn)算結(jié)果。在本發(fā)明的一實(shí)施例中,于步驟s2中,若指令為復(fù)合指令,則指令格式中的相應(yīng)位置為“1”,若指令為非復(fù)合指令,則指令格式中相應(yīng)位置為“0”。在本發(fā)明的一實(shí)施例中,于步驟s5中,所述復(fù)合指令列表包含的多個(gè)復(fù)合指令項(xiàng)目如下表:在本發(fā)明的一實(shí)施例中,于步驟s8中,所述旁路邏輯向所述數(shù)據(jù)選擇器的第二端發(fā)送指令的同時(shí)發(fā)送一標(biāo)志為1的有效位,所述數(shù)據(jù)選擇器通過檢查該有效位的標(biāo)志是否為1來判斷旁路邏輯是否發(fā)送來指令。在本發(fā)明的一實(shí)施例中,于步驟s8中,當(dāng)指令為復(fù)合指令時(shí),第一指令的操作碼、所有源操作數(shù)、立即數(shù)參數(shù)、寄存器參數(shù)和目的指令0~n1均發(fā)送至所述運(yùn)算部件,第二指令的操作碼、立即數(shù)參數(shù)、寄存器參數(shù)和目的指令0~n2均發(fā)送至所述緩存單元。本發(fā)明提供的應(yīng)用復(fù)合指令加快數(shù)據(jù)流結(jié)構(gòu)中指令執(zhí)行速度的方法可以有效地減少數(shù)據(jù)流圖中的指令數(shù)量,并且具有以下有益技術(shù)效果:(1)減少執(zhí)行單元的存儲(chǔ)指令及數(shù)據(jù)的負(fù)荷;(2)減少網(wǎng)絡(luò)中的數(shù)據(jù)消息和ack消息的數(shù)量;(3)減少一次和多次數(shù)據(jù)流圖運(yùn)行的時(shí)間。附圖說明為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為指令的發(fā)射約束示意圖;圖2為指令之間發(fā)射的依賴關(guān)系示意圖;圖3為本發(fā)明數(shù)據(jù)流處理的硬件架構(gòu)示意圖;圖4-1為本發(fā)明一實(shí)施例的指令執(zhí)行第一拍的示意圖;圖4-2為本發(fā)明一實(shí)施例的指令執(zhí)行第二拍的示意圖;圖4-3為本發(fā)明一實(shí)施例的指令執(zhí)行第三拍的示意圖;圖4-4為本發(fā)明一實(shí)施例的指令執(zhí)行第四拍的示意圖;圖4-5為本發(fā)明一實(shí)施例的指令執(zhí)行第五拍的示意圖;圖4-6為本發(fā)明一實(shí)施例的指令執(zhí)行第六拍的示意圖;圖4-7為本發(fā)明一實(shí)施例的指令執(zhí)行第七拍的示意圖;圖4-8為本發(fā)明一實(shí)施例的指令執(zhí)行第八拍的示意圖;圖4-9為本發(fā)明一實(shí)施例的指令執(zhí)行第九拍的示意圖;圖4-10為本發(fā)明一實(shí)施例的指令執(zhí)行第十拍的示意圖.具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有付出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明對(duì)數(shù)據(jù)流中的指令進(jìn)行了優(yōu)化,將兩條相互依賴的指令用一條復(fù)合指令進(jìn)行替換,這兩條指令需要滿足第二條指令只依賴于一條指令,即第二條指令需要的源操作數(shù)只有一個(gè),即可稱這兩條指令是這條復(fù)合指令的微指令,這個(gè)條件是復(fù)合指令提出的基礎(chǔ)。當(dāng)?shù)诙l指令只需要一個(gè)源操作數(shù)時(shí),在已經(jīng)收到后一條指令的ack消息的情況下,可以在前一條指令計(jì)算出結(jié)果以后,立馬就發(fā)射。本發(fā)明在運(yùn)算部件中增加旁路電路,在復(fù)合指令中的第一條指令執(zhí)行完后,立即將操作數(shù)通過旁路電路提供給運(yùn)算部件,繼續(xù)執(zhí)行第二條指令。本發(fā)明的這種執(zhí)行方式與數(shù)據(jù)流思想契合。在數(shù)據(jù)流結(jié)構(gòu)中,指令執(zhí)行不是順序的,所以無法像指令流中合并指令那樣通過在指令前設(shè)置標(biāo)志位來說明這條指令與上一條指令合并了,而是需要將這兩條指令用一條指令替換,而這個(gè)替換過程應(yīng)該在編譯的過程中完成,不需要硬件支持。本發(fā)明提供的應(yīng)用復(fù)合指令加快數(shù)據(jù)流結(jié)構(gòu)中指令執(zhí)行速度的方法,其包括以下步驟:s1:判斷數(shù)據(jù)流結(jié)構(gòu)中兩條相互依賴的指令是否可以結(jié)合為一條復(fù)合指令,判斷方式為:第二條指令是否只依賴于第一條指令,如果是,則進(jìn)行步驟s2;此處需要明確的是,由于第二條指令只有一個(gè)操作數(shù),那么其只能是寄存器指令或者是立即數(shù)指令,而第一條指令的種類不受限制,另外,復(fù)合指令的源操作數(shù)全部是第一條指令的源操作數(shù)。s2:將第一條指令和第二條指令結(jié)合為一條復(fù)合指令,其中,第一條指令和第二條指令的指令格式如下表:對(duì)于上表中的第3列,每條指令都對(duì)應(yīng)有存放源操作數(shù)的地址空間,源操作數(shù)是由指令所依賴的指令送來的,即一條指令將運(yùn)算結(jié)果送給它的每一條目的指令,并指明這個(gè)運(yùn)算結(jié)果中的數(shù)據(jù)是這條目的指令的第幾個(gè)操作數(shù),每條目的指令就會(huì)把這個(gè)數(shù)存放到對(duì)應(yīng)源操作數(shù)空間中去,當(dāng)它所需的源操作數(shù)全部準(zhǔn)備好后,這條指令就會(huì)發(fā)射。對(duì)于上表中的第4、5列,如果一條指令是立即數(shù)指令,則在第4列存放其立即數(shù)參數(shù),如果一條指令是寄存器指令,則在第5列存放存儲(chǔ)有相應(yīng)參數(shù)的寄存器的編號(hào)。如果兩者都不是,則該兩列為空或填入預(yù)設(shè)的代表相應(yīng)狀態(tài)的字符。對(duì)于上表中的第6列之后的各列,其存放的為對(duì)應(yīng)的目的指令存放操作數(shù)的單元的地址。其中,第一條指令的目的指令為目的指令0~n1,第二條指令的目的指令為目的指令0~n2,第一條指令中的“目的指令0”指向第二條指令,結(jié)合后的復(fù)合指令的指令格式如下表:其中,復(fù)合指令的源操作數(shù)個(gè)數(shù)與第一條指令的源操作數(shù)的個(gè)數(shù)相同,復(fù)合指令中的前n1條目的指令依次對(duì)應(yīng)第一條指令中的目的指令1~n1,復(fù)合指令中的其余指令依次對(duì)應(yīng)第二條指令中的各條目的指令;其中,于步驟s2中可以進(jìn)一步實(shí)施以下子步驟:若指令為復(fù)合指令,則指令格式中的相應(yīng)位置為“1”,若指令為非復(fù)合指令,則指令格式中相應(yīng)位置為“0”,于本實(shí)施例中,如上兩個(gè)表所示,指令格式的起始字節(jié)即表示該指令是否為復(fù)合指令,因此,通過此字節(jié)可以表示和呈現(xiàn)一個(gè)指令是否為復(fù)合指令。s3:將向第一條指令提供源操作數(shù)的目的指令修改為結(jié)合后的復(fù)合指令;s4:對(duì)數(shù)據(jù)流結(jié)構(gòu)中所有兩條相互依賴指令均執(zhí)行上述步驟s1~s3;s5:針對(duì)數(shù)據(jù)流中的指令集,于譯碼器中構(gòu)建一復(fù)合指令列表,復(fù)合指令列表包含多個(gè)復(fù)合指令項(xiàng)目,每一指令項(xiàng)目包含復(fù)合指令名稱以及該復(fù)合指令名稱對(duì)應(yīng)的第一條指令名稱和第二條指令名稱;例如,于步驟s5中,復(fù)合指令列表包含的多個(gè)復(fù)合指令項(xiàng)目如下表:復(fù)合指令列表包含的多個(gè)復(fù)合指令項(xiàng)目不限于上表所示,實(shí)際實(shí)施時(shí)應(yīng)根據(jù)實(shí)際需要而定。本發(fā)明未對(duì)復(fù)合指令進(jìn)行重新編碼、譯碼,而是對(duì)構(gòu)成復(fù)合指令的第一指令和第二指令分別進(jìn)行編碼、譯碼的原因?yàn)?,?duì)于一指令集,其可能的復(fù)合指令的條數(shù)可能是指令集中指令數(shù)目的級(jí)數(shù)倍,若對(duì)每一復(fù)合指令進(jìn)行單獨(dú)編碼和譯碼會(huì)造成譯碼邏輯非常復(fù)合以及占用面積較大。以下步驟s6請(qǐng)參考圖3所示的數(shù)據(jù)流處理的硬件架構(gòu)示意圖。s6:在數(shù)據(jù)流處理的硬件架構(gòu)中設(shè)置一數(shù)據(jù)選擇器和多個(gè)緩沖單元,其中,緩沖單元的數(shù)量與運(yùn)算部件的流水線拍數(shù)相同,譯碼器與數(shù)據(jù)選擇器的第一輸入端連接,數(shù)據(jù)選擇器的輸出端與運(yùn)算部件連接,多個(gè)緩沖單元串接并與數(shù)據(jù)選擇器和運(yùn)算部件并行設(shè)置,運(yùn)算部件的最后一拍與最后一個(gè)緩存單元連接后進(jìn)一步與數(shù)據(jù)選擇器的第二輸入端連接以構(gòu)成一旁路邏輯;s7:譯碼器依次接收指令選擇器發(fā)送來的指令,若該指令為復(fù)合指令,譯碼器則根據(jù)復(fù)合指令列表將其拆分為對(duì)應(yīng)的第一指令和第二指令;s8:數(shù)據(jù)選擇器的第一輸入端和第二輸入端分別接收由譯碼器和旁路邏輯發(fā)送的指令,于接收到譯碼器發(fā)送的指令的同時(shí)判斷旁路邏輯是否有發(fā)送來的指令,若為是,數(shù)據(jù)選擇器則優(yōu)先將旁路邏輯發(fā)送來的指令發(fā)送至運(yùn)算部件,之后再將譯碼器發(fā)送來的指令發(fā)送至運(yùn)算部件,若為否,數(shù)據(jù)選擇器則直接將譯碼器發(fā)送來的指令發(fā)送至運(yùn)算部件,其中,當(dāng)指令為復(fù)合指令時(shí),數(shù)據(jù)選擇器是將第一指令發(fā)送至運(yùn)算部件,第二指令則由譯碼器發(fā)送至第一個(gè)緩沖單元;于步驟s8中,旁路邏輯向數(shù)據(jù)選擇器的第二端發(fā)送指令的同時(shí)可以進(jìn)一步發(fā)送一標(biāo)志為1的有效位,數(shù)據(jù)選擇器通過檢查該有效位的標(biāo)志是否為1來判斷旁路邏輯是否發(fā)送來指令。另外,于步驟s8中,當(dāng)指令為復(fù)合指令時(shí),第一指令的操作碼、所有源操作數(shù)、立即數(shù)參數(shù)、寄存器參數(shù)和目的指令0~n1均發(fā)送至運(yùn)算部件,第二指令的操作碼、立即數(shù)參數(shù)、寄存器參數(shù)和目的指令0~n2均發(fā)送至緩存單元。s9:運(yùn)算部件按照運(yùn)算流水依次執(zhí)行其中的指令,多個(gè)緩沖單元以與運(yùn)算部件中的流水同步的速度將其中的指令依次傳遞至下一個(gè)緩沖單元;s10:對(duì)于非復(fù)合指令,運(yùn)算部件執(zhí)行完運(yùn)算流水的最后一拍后直接輸出運(yùn)算結(jié)果,對(duì)于復(fù)合指令,當(dāng)運(yùn)算部件執(zhí)行完第一指令的運(yùn)算流水的最后一拍并輸出運(yùn)算結(jié)果后,該運(yùn)算結(jié)果與最后一個(gè)緩存單元輸出的第二指令合并后通過旁路邏輯發(fā)送至數(shù)據(jù)選擇器的第二輸入端;s11:執(zhí)行上述步驟直至s7~s10直至所有指令均輸出運(yùn)算結(jié)果。以下以一具體執(zhí)行的實(shí)施例進(jìn)一步說明本發(fā)明提供的應(yīng)用復(fù)合指令加快數(shù)據(jù)流結(jié)構(gòu)中指令執(zhí)行速度的方法,其使用了上述步驟s5中的復(fù)合指令列表,假設(shè)運(yùn)算部件具有三級(jí)流水,需要執(zhí)行的指令為aaai-sub-maamur-siamur-madd,如圖4-1至圖4-10所示,其中,“buf”為緩存單元,“mux”為數(shù)據(jù)選擇器,于執(zhí)行時(shí),第一拍至第十拍步驟分別如下:第一拍:指令選擇器將指令aaai發(fā)送給譯碼模塊。第二拍:指令選擇器將指令sub發(fā)送給譯碼模塊。aaai進(jìn)入譯碼模塊,譯碼模塊將其拆成兩個(gè)指令add和addi。第三拍:經(jīng)過數(shù)據(jù)選擇器的判斷,旁路邏輯中沒有送來指令,所以運(yùn)算部件開始執(zhí)行add指令。第一個(gè)緩存單元存儲(chǔ)了addi指令。同時(shí)sub進(jìn)入了譯碼模塊。第四拍:經(jīng)過數(shù)據(jù)選擇器的判斷,運(yùn)算部件開始執(zhí)行sub指令。add進(jìn)入了運(yùn)算流水的第二拍。addi流到了第二個(gè)緩存單元。maamur進(jìn)入譯碼模塊,譯碼模塊將其拆成兩個(gè)指令madd和mulr。第五拍:經(jīng)過數(shù)據(jù)選擇器的判斷,運(yùn)算部件開始執(zhí)行madd指令。mulr進(jìn)入第一個(gè)緩存單元。運(yùn)算部件中sub、add向前流動(dòng)。運(yùn)算部件輸出add的結(jié)果。addi流到了第三個(gè)緩存單元。add的結(jié)果和第三個(gè)緩存單元中存儲(chǔ)的指令信息合并后送給數(shù)據(jù)選擇器,同時(shí)向數(shù)據(jù)選址器發(fā)送一標(biāo)志為1的有效位。siamur進(jìn)入了譯碼模塊,譯碼模塊將其拆成兩個(gè)指令subi和mulr。第六拍:數(shù)據(jù)選擇器檢測(cè)到標(biāo)志為1的有效位,從而優(yōu)先選通了上一拍第三個(gè)緩存單元的addi指令和運(yùn)算部件輸出的結(jié)果,運(yùn)算部件開始執(zhí)行addi指令。運(yùn)算部件中madd、sub向前流動(dòng)。運(yùn)算部件輸出sub的結(jié)果。mulr流到了第二個(gè)緩存單元。譯碼模塊中的微指令subi和mulr被堵塞。第七拍:因?yàn)樯弦慌牡谌齻€(gè)緩存單元中沒有指令,數(shù)據(jù)選擇器選了譯碼器的輸入,運(yùn)算部件開始執(zhí)行subi指令。mulr進(jìn)入第一個(gè)緩存單元。運(yùn)算部件中addi、madd向前流動(dòng)。運(yùn)算部件輸出madd的結(jié)果。mulr流到了第三個(gè)緩存單元。madd的結(jié)果和第三個(gè)緩存單元中存儲(chǔ)的mulr指令信息合并后送給數(shù)據(jù)選擇器。madd進(jìn)入了譯碼模塊。第八拍:數(shù)據(jù)選擇器優(yōu)先選通了上一拍第三個(gè)緩存單元內(nèi)的mulr指令和運(yùn)算部件輸出的結(jié)果,運(yùn)算部件開始執(zhí)行mulr指令。運(yùn)算部件中subi、addi向前流動(dòng)。運(yùn)算部件輸出addi的結(jié)果。mulr流到了第二個(gè)緩存單元。譯碼模塊中的指令madd被堵塞。第九拍:數(shù)據(jù)選擇器選通了madd,運(yùn)算部件開始執(zhí)行madd指令。運(yùn)算部件中mulr、subi向前流動(dòng)。運(yùn)算部件輸出subi的結(jié)果。mulr流到了第三個(gè)緩存單元。subi的結(jié)果和第三個(gè)緩存單元中存儲(chǔ)的mulr微指令信息合并之后送給數(shù)據(jù)選擇器。第十拍:數(shù)據(jù)選擇器選通了上一拍第三個(gè)緩存單元內(nèi)的mulr指令和運(yùn)算部件輸出的結(jié)果,運(yùn)算部件開始執(zhí)行mulr指令。運(yùn)算部件中madd、mulr向前流動(dòng)。運(yùn)算部件輸出mulr的結(jié)果。本發(fā)明提供的應(yīng)用復(fù)合指令加快數(shù)據(jù)流結(jié)構(gòu)中指令執(zhí)行速度的方法可以有效地減少數(shù)據(jù)流圖中的指令數(shù)量,并且具有以下有益技術(shù)效果:(1)減少執(zhí)行單元的存儲(chǔ)指令及數(shù)據(jù)的負(fù)荷;(2)減少網(wǎng)絡(luò)中的數(shù)據(jù)消息和ack消息的數(shù)量;(3)減少一次和多次數(shù)據(jù)流圖運(yùn)行的時(shí)間。本領(lǐng)域普通技術(shù)人員可以理解:附圖只是一個(gè)實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的。本領(lǐng)域普通技術(shù)人員可以理解:實(shí)施例中的裝置中的模塊可以按照實(shí)施例描述分布于實(shí)施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例技術(shù)方案的精神和范圍。當(dāng)前第1頁(yè)12