一種多線程處理器中的指令輸出裝置、方法及其處理器的制造方法
【專利摘要】本發(fā)明涉及一種多線程處理器中的指令輸出裝置,包括指針產(chǎn)生邏輯單元、指令緩存單元、指令發(fā)布單元、指令執(zhí)行單元和存儲器訪問單元;所述指令緩存單元在未收到來自所述存儲器訪問單元的、表示數(shù)據(jù)冒險存在的中斷信號時按照取指周期依次輸出所述讀指針指向的指令;收到所述中斷信號時,所述指令緩存單元暫停當(dāng)前線程指令的輸出,并將讀指針替換為保證指針數(shù)值。本發(fā)明還涉及一種指令輸出方法及其處理器。實施本發(fā)明的一種多線程處理器中的指令輸出裝置、方法及其處理器,具有以下有益效果:其處理的時間較少、控制簡單、在等待數(shù)據(jù)時不會占用寶貴的硬件資源。
【專利說明】一種多線程處理器中的指令輸出裝置、方法及其處理器
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及處理器的指令實現(xiàn),更具體地說,涉及一種多線程處理器中的指令輸出裝置、方法及其處理器。
【背景技術(shù)】
[0002]在典型的處理器指令處理流水線上,當(dāng)指令發(fā)布(instruction is issued)后,可能產(chǎn)生數(shù)據(jù)冒險(data hazard)的情況,此時,該指令將不得不停止并等待,直到數(shù)據(jù)冒險被清除后才能重新執(zhí)行。例如,一個上載/存儲的指令將不知道其需要的數(shù)據(jù)是否被存入數(shù)據(jù)緩存或內(nèi)部的存儲器。在后一種情況下(即一個存儲的指令),其數(shù)據(jù)將直到多個時鐘周期后才會到達(dá),使得該指令一直停止并等待其數(shù)據(jù)由外部的存儲器到達(dá)。這種停止不但帶來了極大的時間臨界性(time critical),而且使在指令處理流水線的各個階段保持控制該停止的指令變得復(fù)雜。如果該流水線處理的指令是多線程中的一個,其復(fù)雜程度將倍增。同時,該停止的指令也將占用指令實現(xiàn)模塊進(jìn)行等待,從而對整個線程的進(jìn)度帶來影響。
【發(fā)明內(nèi)容】
[0003]本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的上述處理時間增多、復(fù)雜、占用硬件資源的缺陷,提供一種處理時間較少、簡單、不會占用硬件資源的多線程處理器中的指令輸出裝置、方法及其處理器。
[0004]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:構(gòu)造一種多線程處理器中的指令輸出裝置,包括指針產(chǎn)生邏輯單元、指令緩存單元、指令發(fā)布單元、指令執(zhí)行單元和存儲器訪問單元;所述指針產(chǎn)生單元產(chǎn)生表示當(dāng)前運(yùn)行線程的本取指周期內(nèi)輸出的指令所在的讀指針、表示當(dāng)前運(yùn)行線程的本取指周期內(nèi)輸入指令的存儲位置的寫指針以及表示當(dāng)前線程中已輸出但未執(zhí)行指令中最先輸出的一條指令位置的保證指針,并分別輸出所述指針到所述指令緩存單元;所述指令發(fā)布單元將其得到的指令傳輸?shù)剿鲋噶顖?zhí)行單元;所述指令執(zhí)行單元通過所述存儲器訪問單元取得當(dāng)前其接收指令涉及的數(shù)據(jù)并實現(xiàn)該指令;
所述指令緩存單元在未收到來自所述存儲器訪問單元的、表示數(shù)據(jù)冒險存在的中斷信號時按照取指周期依次輸出所述讀指針指向的指令;收到所述中斷信號時,所述指令緩存單元暫停當(dāng)前線程指令的輸出,并將讀指針替換為保證指針數(shù)值。
[0005]更進(jìn)一步地,所述指令緩存單元還包括用于比較輸入的寫指針和保證指針的指針比較模塊;所述指針比較單元比較所述寫指針和所述保證指針,且在二者相同時,使得本取指周期取得的當(dāng)前線程指令停止寫入所述指令緩存單元。
[0006]更進(jìn)一步地,所述指針產(chǎn)生邏輯單元還包括保證指針產(chǎn)生單元,所述保證指針產(chǎn)生單元在開始取指時取得所述當(dāng)前運(yùn)行線程的讀指針的值作為保證指針的初始值,并在所述保證指針指向的指令執(zhí)行后,更新所述保證指針值。
[0007]更進(jìn)一步地,所述保證指針的更新包括按照設(shè)定的步長指向本線程下一條已輸出或未輸出的指令。
[0008]更進(jìn)一步地,所述指針產(chǎn)生邏輯單元還包括用于產(chǎn)生讀指針的讀指針產(chǎn)生單元,所述讀指針產(chǎn)生單元依照指令輸出產(chǎn)生讀指針并在接收到來自所述存儲器訪問單元的第一設(shè)定信號時,重啟所述被暫停的線程,并重新輸出其與所述保證指針一致的讀指針?biāo)赶虻闹噶畹剿鲋噶畎l(fā)布單元;所述第一設(shè)定信號表示至少在上一個或多個取指周期檢測的、未有效存在的輸出指令涉及數(shù)據(jù)在本取指周期已經(jīng)有效存在。
更進(jìn)一步地,所述存儲器訪問單元還與存儲器連接,所述存儲器是與外部存儲器連接的數(shù)據(jù)緩沖區(qū)域或數(shù)據(jù)緩沖單元;所述數(shù)據(jù)有效存在為涉及的數(shù)據(jù)已經(jīng)讀入所述數(shù)據(jù)緩沖區(qū)域或數(shù)據(jù)緩沖單元并存儲。
[0009]更進(jìn)一步地,所述指針產(chǎn)生邏輯單元還包括停止信號產(chǎn)生單元,所述停止信號產(chǎn)生單元分別輸出放棄當(dāng)前指令執(zhí)行的控制信號到所述指令發(fā)布單元和所述指令執(zhí)行單元。
[0010]本發(fā)明還涉及一種多線程處理器中的指令輸出方法,包括如下步驟:
A)產(chǎn)生分別用于當(dāng)前運(yùn)行線程指令輸出和輸入的讀、寫指針以及用于表示已輸出但尚未確認(rèn)是否無數(shù)據(jù)冒險的最后一條指令的位置的保證指針;
B)判斷是否接收到表示所述保證指針指向指令存在數(shù)據(jù)冒險存在的中斷信號,如是,暫停本線程的指令輸出,并將讀指針替換為當(dāng)前保證指針值;否則,執(zhí)行步驟C);
C)比較所述寫指針和所述保證指針是否相同,如相同,不寫入指令,,并執(zhí)行下一步驟;否則,寫入取得的指令并執(zhí)行下一步驟;
D)繼續(xù)輸出本線程指令,并在輸出指令已執(zhí)行時,更新保證指針值;執(zhí)行本步驟后,返回步驟A);
當(dāng)處于暫停本線程指令輸出時,還包括如下步驟:
E)判斷是否接收到第一設(shè)定信號,如是,使用本線程當(dāng)前的讀指針值作為讀指針,并返回步驟A);否則,重復(fù)本步驟;其中,所述第一設(shè)定信號表示至少在上一個或幾個取指周期檢測的、未有效存在的輸出指令涉及數(shù)據(jù)在本取指周期已經(jīng)有效存在。
[0011]更進(jìn)一步地,所述步驟B)中,進(jìn)一步包括:
輸出控制信號到指令發(fā)布單元和指令執(zhí)行單元,取消其中正在等待其涉及的數(shù)據(jù)到來的已發(fā)布指令。
[0012]本發(fā)明還涉及一種多線程處理器,包括用于輸出指令并執(zhí)行的、設(shè)置在其指令輸出流水線上的指令輸出裝置,所述指令輸出裝置是上述任意一項所述的多線程處理器中的指令輸出裝置。
實施本發(fā)明的一種多線程處理器中的指令輸出裝置、方法及其處理器,具有以下有益效果:由于在傳統(tǒng)的指令流水線上都是使用讀指針輸出或發(fā)布指令,比較寫指針和讀指針的值來判斷指令緩存是否寫滿,這使得輸出指令在指令緩存中的存儲位置將被輸入的指令覆蓋,從而使得輸出指令在遇到數(shù)據(jù)冒險時只能占用指令流水線的硬件資源進(jìn)行等待;而本發(fā)明則增加了一個表示指令涉及數(shù)據(jù)狀態(tài)的保證指針,通過比較寫指針和保證指針的值來判斷輸入的指令是否可以寫入指令緩存,使得其數(shù)據(jù)未準(zhǔn)備好的指令不用占據(jù)硬件資源而是在數(shù)據(jù)緩沖單元中等待(即使其已經(jīng)輸入,也可以被取消,但在指令緩存中的內(nèi)容不會被覆蓋),使得硬件資源可以對別的線程或指令進(jìn)行處理;在相關(guān)數(shù)據(jù)到位后,才輸出或再次輸出指令,并執(zhí)行該指令。所以,其處理的時間較少、控制簡單、在等待數(shù)據(jù)時不會占用寶貴的硬件資源。
【專利附圖】
【附圖說明】
[0013]圖1是本發(fā)明一種多線程處理器中的指令輸出裝置、方法及其處理器實施例中指令輸出裝置的結(jié)構(gòu)示意圖;
圖2是本發(fā)明所述實施例中一種情況下的指令輸出裝置結(jié)構(gòu)示意圖;
圖3是所述實施例中指令輸出方法的流程圖。
【具體實施方式】
[0014]下面將結(jié)合附圖對本發(fā)明實施例作進(jìn)一步說明。
[0015]如圖1所示,在本發(fā)明一種一種多線程處理器中的指令輸出裝置、方法及其處理器實施例中,該指令輸出裝置包括指針產(chǎn)生邏輯單元1、指令緩存單元2、指令發(fā)布單元3、指令執(zhí)行單元4和存儲器訪問單元5;其中,指針產(chǎn)生單元產(chǎn)生表示指令存儲地址的讀指針(read-ptr)傳輸?shù)街噶罹彺鎲卧? ;指令緩存單元2在得到上述指令讀指針并在取指周期開始時,傳輸該指針指向地址存儲的指令到指令發(fā)布單元3 ;上述指針產(chǎn)生邏輯單元I同時還產(chǎn)生寫指針(write-ptr)傳輸?shù)街噶罹彺鎲卧?,指令緩存單元2將依據(jù)寫指針的指向,將在本取指周期開始時取得的指令寫入指令緩存單元2中由該寫指針指向的位置,但是,這個指令的寫入是有條件的,這個條件正是本實施例中的技術(shù)方案區(qū)別于傳統(tǒng)的指令輸出方案的重要區(qū)別之一,稍后將詳細(xì)描述;此外,上述指針產(chǎn)生邏輯單元I還產(chǎn)生保證指針(commit-ptr),該保證指針表示該指針?biāo)赶虻闹噶罹彺鎲卧狪中的地址存儲的指令所涉及的數(shù)據(jù)已經(jīng)有效存在,在本實施中,該指令已經(jīng)被輸出;也就是說,保證指針?biāo)赶虻闹噶羁隙ㄊ且呀?jīng)被輸出,但是還沒有被執(zhí)行的指令;如果一個指令已經(jīng)被執(zhí)行,則其涉及的數(shù)據(jù)必然已經(jīng)到位;如果一個指令被輸出,則并不意味著其涉及的數(shù)據(jù)已經(jīng)到位或準(zhǔn)備好。在現(xiàn)有技術(shù)中,一個指令已經(jīng)被輸出(或被發(fā)射),而其涉及的數(shù)據(jù)又沒有由外部存儲器或別的地方進(jìn)入內(nèi)部存儲器,導(dǎo)致該指令只能占用硬件資源等待這些數(shù)據(jù),則認(rèn)為出現(xiàn)數(shù)據(jù)冒險。在本實施例中,保證指針的設(shè)置就是為了消除出現(xiàn)數(shù)據(jù)沒有到位時對硬件資源的占用。指令發(fā)布單元3將其得到的指令進(jìn)行必要的處理之后傳輸?shù)街噶顖?zhí)行單元4 ;指令執(zhí)行單元4通述存儲器訪問單元5取得當(dāng)前其接收指令涉及的數(shù)據(jù)并實現(xiàn)該指令。在本實施例中,上述在取指周期開始時取得的指令寫入指令緩存單元2的條件是寫指針的值不等于保證指針的值(或者說寫入的地址沒有指向雖然已經(jīng)被輸出,但是還沒有被執(zhí)行的指令所在的區(qū)域)時,將本取指周期內(nèi)取得的指令寫入寫指針指向的位置;也就是說,在本實施例中,如果一條已經(jīng)輸出的指令尚未被確定是否存在數(shù)據(jù)冒險(其涉及的數(shù)據(jù)是否已經(jīng)在內(nèi)存中有效存在)或被執(zhí)行,則該指令在指令緩存單元2中就將保存,不會被覆蓋,以便于出現(xiàn)數(shù)據(jù)冒險其在輸出后的處理步驟中被消除并在數(shù)據(jù)冒險被消除后該指令的重新輸出或發(fā)布;如果寫指針和保證指針指向同一個存儲位置,則寫入的指令將覆蓋之前該位置上存儲的指令,而該指令雖然已經(jīng)輸出,一旦出現(xiàn)數(shù)據(jù)冒險,該指令只能在輸出后的步驟中等待數(shù)據(jù)冒險的消除,這正是傳統(tǒng)的指令輸出方法,這將使得輸出的指令在數(shù)據(jù)冒險時占用硬件資源等待,從而帶來處理時間的延長及資源的浪費(fèi)。一般來講,在指令輸出時,其正常輸出的指令地址是按照設(shè)定的步長遞增或遞減的,該步長就是指令本身的長度,例如,加入指令為單字節(jié)指令,且輸出由O開始,則第一條指令地址為O,第二條指令地址為1,并依此類推;假設(shè)保證指針的值是2,則新的指令寫入只能寫在O和I兩個地址,不能寫在2,更不能寫在2以后的地址。也就是說,保證指針被視為一個點(diǎn),其劃分了可以寫入新的指令的區(qū)域和不可以寫入新的指令的區(qū)域。
[0016]在本實施例中,指針產(chǎn)生邏輯單元I產(chǎn)生表示本取指周期內(nèi)輸出指令緩存單元2指令所在的讀指針、表示本取指周期內(nèi)輸入指令緩存單元2的指令存儲位置的寫指針以及表示由指令緩存單元2已經(jīng)輸出的、尚未執(zhí)行的、緊隨已執(zhí)行的最后一條指令的指令位置(即在當(dāng)前未消除數(shù)據(jù)冒險等待時間的指令中最先輸出的指令的位置)的保證指針,并分別輸出這些指針到指令緩存單元2 ;在本實施例中,指令緩存單元2按照取指周期的安排,輸出讀指針指向的指令到指令發(fā)布單元3,指令發(fā)布單元3將其得到的指令傳輸?shù)街噶顖?zhí)行單元4 ;指令執(zhí)行單元4通過存儲器訪問單元5取得當(dāng)前其接收指令涉及的數(shù)據(jù)并實現(xiàn)或執(zhí)行該指令。同樣地,指令緩存單元2也按照取指周期的安排在取指周期開始時由外部存儲區(qū)域中取得一條輸入的指令,但是,這條取得的輸入指令是否能夠?qū)懭胫噶罹彺鎲卧?中,則需要進(jìn)行判斷,在滿足上述條件的情況下,才能寫入。因此,在本實施例中,指令緩沖單元2還包括指針比較模塊21,指針比較模塊21用于比較輸入的寫指針和保證指針;在二者相等時輸出控制信號,使得本取指周期取得的指令不能寫入指令緩存單元2 ;而在寫指針的值不同于保證指針的值時(此時,表示寫入新指令的位置還沒有達(dá)到上述保證指針指向的區(qū)域劃分點(diǎn))輸出控制信號,使得本取指周期取得的指令寫入指令緩存單中該寫指針指向的存儲位置。
[0017]在本實施例中,上述保證指針在開始取值時,表現(xiàn)為讀指針的一個拷貝,其數(shù)值就是讀指針的值;但是隨著指令的執(zhí)行,可能會有多個指令雖然存在與指令流水線上,但還沒有執(zhí)行;由于保證指針是在其指向的指令被執(zhí)行后才能增加或更新,所以保證指針的值將落后于上述讀指針,其表示了已經(jīng)輸出的指令但尚未執(zhí)行的、在時間上最先輸出的指令在指令緩存單元2中的位置(通常來講,此時該指令后面可能還排列有多個同樣已輸出但尚未執(zhí)行的指令),但是,其指向的指令還沒有執(zhí)行,也就是不能確認(rèn)沒有數(shù)據(jù)冒險;當(dāng)確認(rèn)該指令確認(rèn)沒有數(shù)據(jù)冒險或數(shù)據(jù)冒險已消失的情況下(這種情況的結(jié)果就是該指令被執(zhí)行),該保證指針更新,例如,按照系統(tǒng)規(guī)定的方式加一或減一,指向下一條已輸出指令但是排列在上述被執(zhí)行指令之后的那條指令。在本實施例中,為了實現(xiàn)上述性能,在指針產(chǎn)生邏輯單元I還包括保證指針產(chǎn)生單元11,保證指針產(chǎn)生單元11在系統(tǒng)開始取指時取得讀指針的值作為保證指針的初始值,并在接收到來自存儲器訪問單元5的、表示該讀指針指向的指令已執(zhí)行的信號時,更新所述保證指針值。更新的方式與傳統(tǒng)的讀指針更新的方式是相同的,均遵從系統(tǒng)的設(shè)定,例如,更新的方向或步長。
[0018]如果保證指針指向的指令存在數(shù)據(jù)冒險,也就是說,在執(zhí)行該指令時,存儲器訪問單元5不能得到其涉及的所有數(shù)據(jù),該指令就沒有辦法執(zhí)行。此時,存儲器訪問單元5輸出中斷信號到指針產(chǎn)生邏輯單元I。在現(xiàn)有技術(shù)中,出現(xiàn)這種情況時,該指令占用硬件資源并等待數(shù)據(jù)冒險的消失,也就是等待這些數(shù)據(jù)的到位。但是,在本實施例中,如果出現(xiàn)這種情況,則暫停該線程的指令輸出,放棄已經(jīng)輸出的本線程的指令,將后面的硬件資源釋放,使得別的線程可以使用這些硬件資源。同時,指針產(chǎn)生邏輯單元I將讀指針用保證指針的值替換。也就是說,此時,將保證指針的值拷貝到讀指針中。這樣,當(dāng)恢復(fù)本線程輸出指令時,讀指針就指向當(dāng)前的保證指針?biāo)赶虻闹噶?,由于該指令尚未被?zhí)行,所以在恢復(fù)本線程指令輸出時,首先輸出該指令并執(zhí)行。
[0019]總之,在本實施例中,在指令取消信號之前,指令會繼續(xù)從讀指針?biāo)柑幇l(fā)布,不管讀指針和保證指針是否相同。這是因為從指令發(fā)布到知道有沒有數(shù)據(jù)阻礙會有好幾個時鐘周期,在這幾個周期內(nèi),讀指針和保證指針不會相同,但不表示當(dāng)前線程應(yīng)該等待。唯有取消信號發(fā)出,該線程才會等待(而同時讀指針重回到保證指針的值)。
[0020]同時,請參見圖2,在本實施例的一種情況下,為了在存在數(shù)據(jù)冒險的情況下將已經(jīng)輸出的指令停止執(zhí)行(cancel),指針產(chǎn)生邏輯單元2還包括分別輸出放棄當(dāng)前指令執(zhí)行的控制信號到所述指令發(fā)布單元和所述指令執(zhí)行單元的停止信號產(chǎn)生單元13。該停止信號產(chǎn)生單元13是在上述出現(xiàn)了中斷信號,表明數(shù)據(jù)冒險存在的情況下輸出該控制信號的。這種設(shè)置進(jìn)一步保證了對已輸出指令的消除,即可以主動清除已發(fā)出的指令,為別的線程使用硬件資源提供更好的條件,避免了一個線程在等待由于某種原因遲到的數(shù)據(jù)時,對硬件資源的占用。當(dāng)然,在一些情況下,也可以不管上述已輸出在流水線上的指令,僅僅釋放硬件資源,由接手控制該硬件資源的線程對其進(jìn)行處理。這樣可以減少本線程的操作,對當(dāng)前線程而言,可以降低退出操作的復(fù)雜性。
[0021]此外,在本實施例中,存儲器訪問單元5還與存儲器6連接,存儲器6是與外部存儲器(圖中未示出)連接的數(shù)據(jù)緩沖區(qū)域或數(shù)據(jù)緩沖單元;而在本實施例中,數(shù)據(jù)有效存在就是涉及的數(shù)據(jù)已經(jīng)讀入上述數(shù)據(jù)緩沖區(qū)域或數(shù)據(jù)緩沖單元并存儲。
[0022]請參見圖3,在本實施例中,還涉及一種多線程處理器中的指令輸出方法,包括如下步驟:
步驟Sll產(chǎn)生讀指針、寫指針和保證指針:在本步驟中,如同傳統(tǒng)的指令輸出方法一樣,產(chǎn)生讀指針和寫指針。一般來講,這兩個指針時隨取指周期的進(jìn)行而變化的,變化的步長是與系統(tǒng)相關(guān)的。在一個新的取指周期到來之際,這兩個指針都會在原來的基礎(chǔ)上變化設(shè)定的步長。當(dāng)然,在本實施例中也會出現(xiàn)一些例外的情況,例如,如果上一個取指周期的取得指令并沒有寫入指令緩存單元中,則需要視系統(tǒng)設(shè)置情況判斷是否再次取得存儲在外部存儲器中的指令。在傳統(tǒng)的指令輸出方法中,正如前面所述的一樣,該讀、寫指針產(chǎn)生并被送到指令緩存單元,而指令緩存單元則依據(jù)該讀指針輸出指令以及依據(jù)該寫指針將取得指令寫入指令緩存單元中。如果該輸出指令涉及的數(shù)據(jù)未準(zhǔn)備好,該指令將在流水線上等待。而本實施例中涉及的指令輸出方法則不然,其通過后面所述的步驟,避免了上述的指令由于數(shù)據(jù)不到位而出現(xiàn)的在流水線上等待的情況,從而使得流水線的硬件資源得到合理的利用。其中,在初始時,保證指針是讀指針數(shù)值的一個拷貝,但是其更新的方法和讀指針是不同的。讀指針除了在后面的步驟中所述的被替換的情況外,都是按照取指周期及設(shè)定步長更新的。而保證指針一旦具有初始值,在未收到表示其指向的指令被執(zhí)行的信號時,是不更新的;只有在其指向的指令被執(zhí)行后才在當(dāng)前的基礎(chǔ)上按照設(shè)定步長更新。
[0023]步驟S12收到中斷信號否:在本步驟中,判斷是否收到中斷信號,如是,執(zhí)行步驟S13 ;否則,執(zhí)行步驟S16 ;在本實施例中,上述中斷信號是存儲器訪問單元輸出的、表示當(dāng)前執(zhí)行的指令所涉及的數(shù)據(jù)未取得的信號。通常來講,該信號的出現(xiàn)表示數(shù)據(jù)冒險的存在。
[0024]步驟S13暫停本線程指令輸出:在本步驟中,由于讀指針和保證指針不同,也就是說,已經(jīng)輸出的指令中至少有一條存在數(shù)據(jù)冒險的可能(通常是在未執(zhí)行的指令中最先輸出的那條指令),其數(shù)據(jù)還沒有由外部存儲器中送入,因此,該指令已經(jīng)在等待中,在其后輸出的指令也進(jìn)入等待狀態(tài)。整個硬件通道將等待該指令執(zhí)行。所以,在本步驟中,停止本線程指令的輸出,其目的是讓出硬件資源給別的線程。
[0025]步驟S14替換讀指針為保證指針:在本步驟中,由于已經(jīng)暫停本線程的指令輸出,但是,已經(jīng)輸出的指令還有至少一條是沒有執(zhí)行的,為了保證本線程再次載入時由該條指令開始執(zhí)行,在本步驟中,將讀指針的值替換為保證指針的值,即保證本線程再次載入時開始執(zhí)行的指令就是上次由于數(shù)據(jù)冒險而未執(zhí)行的指令,確保了線程的正確執(zhí)行。
[0026]步驟S15是否收到第一設(shè)定信號:在本步驟中,判斷是否收到第一設(shè)定信號,如是,表明前面所述的數(shù)據(jù)冒險已經(jīng)消除,可以將本線程重新載入,跳轉(zhuǎn)到步驟S11,重新開始執(zhí)行本線程,值得一體的是,由此處跳轉(zhuǎn)到步驟Sll開始執(zhí)行時,其讀指針的值是步驟S14中替換過的讀指針的值;否則,表明前面所述的數(shù)據(jù)冒險尚未消除,重復(fù)本步驟。在本步驟中,第一設(shè)定信號表示至少在上一個或多個取指周期中發(fā)現(xiàn)的已輸出指令涉及數(shù)據(jù)在當(dāng)時未有效存在的,而在本取指周期已經(jīng)有效存在。也就是說,第一設(shè)定信號出現(xiàn)之前,一定出現(xiàn)過一個中斷信號,該中斷信號表示當(dāng)時執(zhí)行的指令由于其涉及的數(shù)據(jù)冒險沒有成功執(zhí)行;而第一指定信號的出現(xiàn),表示這些數(shù)據(jù)現(xiàn)在已經(jīng)有效存在,該指令可以繼續(xù)執(zhí)行了。于是,第一設(shè)定信號出現(xiàn)后,將本線程重新載入,由上次未能成功執(zhí)行的指令開始執(zhí)行。
[0027]步驟S16保證指針和寫指針相同否:在本步驟中,判斷保證指針的值是否與寫指針的相同,如相同,執(zhí)行步驟S17;否則,執(zhí)行步驟S18.步驟S17讀得的指令不寫入:在本步驟中,由于寫指針指向保證指針指向的位置,所以由外部存儲器取得的新的指令不能寫入。一般來講,不斷地取得外部存儲器存儲的指令,同時不斷地輸出指令執(zhí)行,構(gòu)成程序執(zhí)行的基本步驟。在現(xiàn)有技術(shù)中,實際上對新取得指令的寫入也是有限定的,即不能覆蓋尚未輸出的指令所在的位置。但是,就本實施例中而言,由于其要求較為特別,也就是已經(jīng)輸出但尚未執(zhí)行的指令可能會被放棄,然后再重新輸出。所以,其禁止寫入的區(qū)域還需要包括這些已經(jīng)輸出但尚未執(zhí)行的指令的存儲位置。而在本實施例中,采用了保證指針來指示這一位置,劃分可寫入?yún)^(qū)域和禁止寫入?yún)^(qū)域。
[0028]步驟S18讀得的指令寫入:在本步驟中,將由外部存儲器取得的新的指令寫入寫指針指向的位置。請注意,在本步驟中,寫指針指向的存儲位置還沒有到以保證指針為分界點(diǎn)的禁止寫入?yún)^(qū)域,不會存在覆蓋雖已輸出但還未執(zhí)行或尚未輸出的指令的風(fēng)險。所以,可以寫入新指令。
[0029]步驟S19輸出讀指針指向的指令:在本步驟中,按照取指周期的設(shè)定,繼續(xù)輸出本線程指令,并在輸出指令(通常是尚未執(zhí)行的指令中的最先輸出的指令,即排在未執(zhí)行指令隊列中最前面的指令)已執(zhí)行時,更新保證指針值;保證指針的更新是按照系統(tǒng)的設(shè)定步長而遞增或遞減的。執(zhí)行本步驟后,返回步驟Sll ;此時的寫指針、讀指針和保證指針值將被攜帶到步驟Sll中。
[0030]上述步驟S11-S19體現(xiàn)了一個當(dāng)前執(zhí)行線程取指周期中指令的輸入和輸出的步驟。當(dāng)然,眾所周知,處理器取指是多個取指周期連續(xù)執(zhí)行而實現(xiàn)的。所以,按照傳統(tǒng)的規(guī)則,在正常的取指周期完成后,上述幾個指針的值被代入上述步驟SI I,重新開始一個取指周期。其中,讀指針和寫指針可能會按照傳統(tǒng)的規(guī)則變化,但是,保證指針的值將被代入步驟S11,不會變化(在出現(xiàn)第一設(shè)定信號的情況下,該值指的是在第一設(shè)定信號出現(xiàn)后經(jīng)過變換的值)。
[0031]在本實施例中,還涉及一種處理器,該處理器包括用于依次取得并執(zhí)行指令的指令輸出裝置,該指令輸出裝置就是上述的指令輸出裝置。在本實施例,上述處理器可以是任何設(shè)置有這種指令輸出裝置或取指裝置的任何處理器。例如該處理器可以是CPU、GPU、CPU和GPU的混合體、流處理器、多核的并行處理器以及并行的、具有較強(qiáng)功能的嵌入式處理器中的一種或數(shù)種的組合,只要這種處理器是多線程處理器就可以使用本實施例中的這些裝置或方法來實現(xiàn)不占用硬件資源(硬件資源被別的線程使用)等待數(shù)據(jù)的到來。
[0032]基本上來講,在本實施例中,通過停止執(zhí)行上載/存儲的指令,并使其在指令緩存中等待,徹底地消除了當(dāng)數(shù)據(jù)緩存中缺失相關(guān)數(shù)據(jù)時,指令在流水線上的停止和等待(在流水線上等待會占用硬件資源,并帶來時序復(fù)雜、耗時等缺陷)。這樣,當(dāng)指令在上述指令緩存中等待數(shù)據(jù)由外部存儲器中進(jìn)入內(nèi)部的數(shù)據(jù)緩存時,不會占用流水線或硬件資源。在這種情況下,允許其他線程使用該正在等待的指令曾經(jīng)占用的硬件資源,從而在流水線上達(dá)到更好的負(fù)載平衡,且不存在不同的SMT線程之間轉(zhuǎn)換的時延。而該等待的指令保存在指令緩存中,同時,與其同一線程的其他指令均不能發(fā)布(be issued)。當(dāng)?shù)却臄?shù)據(jù)由外部的主存儲進(jìn)入內(nèi)部的數(shù)據(jù)緩存后,該等待的指令被重新發(fā)布(be reissued),且其所在的線程被如常地重新執(zhí)行(resume)。
[0033]以上所述實施例僅表達(dá)了本發(fā)明的幾種實施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種多線程處理器中的指令輸出裝置,其特征在于,包括指針產(chǎn)生邏輯單元、指令緩存單元、指令發(fā)布單元、指令執(zhí)行單元和存儲器訪問單元;所述指針產(chǎn)生單元產(chǎn)生表示當(dāng)前運(yùn)行線程的本取指周期內(nèi)輸出的指令所在的讀指針、表示當(dāng)前運(yùn)行線程的本取指周期內(nèi)輸入指令的存儲位置的寫指針以及表示當(dāng)前線程中已輸出但未執(zhí)行指令中最先輸出的一條指令位置的保證指針,并分別輸出所述指針到所述指令緩存單元;所述指令發(fā)布單元將其得到的指令傳輸?shù)剿鲋噶顖?zhí)行單元;所述指令執(zhí)行單元通過所述存儲器訪問單元取得當(dāng)前其接收指令涉及的數(shù)據(jù)并實現(xiàn)該指令; 所述指令緩存單元在未收到來自所述存儲器訪問單元的、表示數(shù)據(jù)冒險存在的中斷信號時按照取指周期依次輸出所述讀指針指向的指令;收到所述中斷信號時,所述指令緩存單元暫停當(dāng)前線程指令的輸出,并將讀指針替換為保證指針數(shù)值。
2.根據(jù)權(quán)利要求1所述的多線程處理器中的指令輸出裝置,其特征在于,所述指令緩存單元還包括用于比較輸入的寫指針和保證指針的指針比較模塊;所述指針比較單元比較所述寫指針和所述保證指針,且在二者相同時,使得本取指周期取得的當(dāng)前線程指令停止寫入所述指令緩存單元。
3.根據(jù)權(quán)利要求2所述的多線程處理器中的指令輸出裝置,其特征在于,所述指針產(chǎn)生邏輯單元還包括保證指針產(chǎn)生單元,所述保證指針產(chǎn)生單元在開始取指時取得所述當(dāng)前運(yùn)行線程的讀指針的值作為保證指針的初始值,并在所述保證指針指向的指令執(zhí)行后,更新所述保證指針值。
4.根據(jù)權(quán)利要求3所述的多線程處理器中的指令輸出裝置,其特征在于,所述保證指針的更新包括按照設(shè)定的步長指向本線程下一條已輸出或未輸出的指令。
5.根據(jù)權(quán)利要求4所述的多線程處理器中的指令輸出裝置,其特征在于,所述指針產(chǎn)生邏輯單元還包括用于產(chǎn)生讀指針的讀指針產(chǎn)生單元,所述讀指針產(chǎn)生單元依照指令輸出產(chǎn)生讀指針并在接收到來自所述存儲器訪問單元的第一設(shè)定信號時,重啟所述被暫停的線程,并重新輸出其與所述保證指針一致的讀指針?biāo)赶虻闹噶畹剿鲋噶畎l(fā)布單元;所述第一設(shè)定信號表示至少在上一個或多個取指周期檢測的、未有效存在的輸出指令涉及數(shù)據(jù)在本取指周期已經(jīng)有效存在。
6.根據(jù)權(quán)利要求5所述的多線程處理器中的指令輸出裝置,其特征在于,所述存儲器訪問單元還與存儲器連接,所述存儲器是與外部存儲器連接的數(shù)據(jù)緩沖區(qū)域或數(shù)據(jù)緩沖單元;所述數(shù)據(jù)有效存在為涉及的數(shù)據(jù)已經(jīng)讀入所述數(shù)據(jù)緩沖區(qū)域或數(shù)據(jù)緩沖單元并存儲。
7.根據(jù)權(quán)利要求6所述的多線程處理器中的指令輸出裝置,其特征在于,所述指針產(chǎn)生邏輯單元還包括停止信號產(chǎn)生單元,所述停止信號產(chǎn)生單元分別輸出放棄當(dāng)前指令執(zhí)行的控制信號到所述指令發(fā)布單元和所述指令執(zhí)行單元。
8.一種多線程處理器中的指令輸出方法,其特征在于,包括如下步驟: A)產(chǎn)生分別用于當(dāng)前運(yùn)行線程指令輸出和輸入的讀、寫指針以及用于表示已輸出但尚未確認(rèn)是否無數(shù)據(jù)冒險的最后一條指令的位置的保證指針; B)判斷是否接收到表示所述保證指針指向指令存在數(shù)據(jù)冒險存在的中斷信號,如是,暫停本線程的指令輸出,并將讀指針替換為當(dāng)前保證指針值;否則,執(zhí)行步驟C); C)比較所述寫指針和所述保證指針是否相同,如相同,不寫入指令,,并執(zhí)行下一步驟;否則,寫入取得的指令并執(zhí)行下一步驟;D)繼續(xù)輸出本線程指令,并在輸出指令已執(zhí)行時,更新保證指針值;執(zhí)行本步驟后,返回步驟A); 當(dāng)處于暫停本線程指令輸出時,還包括如下步驟: E)判斷是否接收到第一設(shè)定信號,如是,使用本線程當(dāng)前的讀指針值作為讀指針,并返回步驟A);否則,重復(fù)本步驟;其中,所述第一設(shè)定信號表示至少在上一個或幾個取指周期檢測的、未有效存在的輸出指令涉及數(shù)據(jù)在本取指周期已經(jīng)有效存在。
9.根據(jù)權(quán)利要求8所述的指令輸出方法,其特征在于,所述步驟B)中,進(jìn)一步包括: 輸出控制信號到指令發(fā)布單元和指令執(zhí)行單元,取消其中正在等待其涉及的數(shù)據(jù)到來的已發(fā)布指令。
10.一種多線程處理器,包括用于輸出指令并執(zhí)行的、設(shè)置在其指令輸出流水線上的指令輸出裝置,其特征在于,所述指令輸出裝置是如權(quán)利要求1-7任意一項所述的多線程處理器中的指令輸出 裝置。
【文檔編號】G06F9/38GK103593169SQ201310619576
【公開日】2014年2月19日 申請日期:2013年11月29日 優(yōu)先權(quán)日:2013年11月29日
【發(fā)明者】梅思行, 勞詠儀, 王世好 申請人:深圳中微電科技有限公司