欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

處理器和處理器的控制方法

文檔序號:6517485閱讀:194來源:國知局
處理器和處理器的控制方法
【專利摘要】本發(fā)明涉及處理器和處理器的控制方法。運(yùn)算處理器設(shè)備包括獲取單元,其在重復(fù)包括獲取指令的獲取階段和執(zhí)行所述指令的執(zhí)行階段的指令處理的所述運(yùn)算處理設(shè)備的獲取階段,從被定義為指令存儲源的指令地址獲取指令;關(guān)聯(lián)關(guān)系存儲單元,其記錄正在經(jīng)歷指令處理的指令的指令地址的高階位域和所述指令地址的高階位域被編碼成的高階地址信息之間的關(guān)聯(lián)關(guān)系;編碼單元,其基于所述關(guān)聯(lián)關(guān)系將包含在所述指令地址中的高階位域編碼成所述高階地址信息;以及解碼單元,其從所述高階地址信息和所述關(guān)聯(lián)關(guān)系解碼出所述高階位域。
【專利說明】處理器和處理器的控制方法【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及處理器和處理器的控制方法。
【背景技術(shù)】
[0002]信息處理設(shè)備的分支預(yù)測機(jī)構(gòu)基于過去執(zhí)行的指令在存儲器上的存儲地址,來管理分支指令的執(zhí)行歷史。然后,分支預(yù)測機(jī)構(gòu)通過管理分支指令的執(zhí)行歷史而在接下來執(zhí)行該分支指令的情況下預(yù)測分支目的地。在下文中將指令在存儲器上的存儲地址稱為指令地址。
[0003]在預(yù)測分支目的地時(shí),分支預(yù)測機(jī)構(gòu)通過組關(guān)聯(lián)方法,根據(jù)過去從存儲器上的存儲源取得的分支指令的指令地址的一部分的位域,來確定一組存儲裝置。在下文中將短語“從存儲器取得指令”稱為“取指”。此外,將“分支指令的指令地址”稱為分支源地址。然后,分支預(yù)測機(jī)構(gòu)通過將分支源地址的另外一個(gè)位域用作標(biāo)簽的方式,將分支目的地地址單向存儲在根據(jù)指令地址的所述部分的位域而確定的組中。
[0004]然后,分支預(yù)測機(jī)構(gòu)在指令取指階段通過利用指令地址全面搜索存儲裝置。隨后,當(dāng)過去已經(jīng)執(zhí)行的分支指令的分支目的地地址被存儲在存儲裝置中時(shí),分支預(yù)測機(jī)構(gòu)可以根據(jù)與相關(guān)組中的標(biāo)簽的內(nèi)容一致的方式來獲得分支目的地地址。也就是說,分支預(yù)測機(jī)構(gòu)可以與取指并行地確定要取得的指令是否是分支指令,即,分支目的地地址是否是以使用分支源的指令地址的域作為標(biāo)簽的方式存儲的。
[0005]也就是說,在上述技術(shù)中,信息處理設(shè)備獲取當(dāng)前正在取得的指令的地址,從而與取指并行地確定要被取得的指令是否是分支指令。然后,如果該指令是分支指令,則信息處理設(shè)備可以獲取要預(yù)測的分支目的地地址。因此,信息處理設(shè)備即使在執(zhí)行流水線(pipeline)處理時(shí),也能夠事先與當(dāng)前的取指并行地準(zhǔn)備在下一個(gè)階段從要預(yù)測的分支目的地的取指。
[0006]然后,如果從當(dāng)前正在取得的指令獲得的分支目的地是預(yù)測的分支目的地,則信息處理設(shè)備可以跨各階段進(jìn)行并行操作而不停止流水線處理。反之,如果從當(dāng)前正在取得的指令獲得的分支目的地不是預(yù)測的分支目的地,則然后信息處理設(shè)備從正確的分支目的地重新開始取指。此外,當(dāng)分支目的地不是以與當(dāng)前正在取得的分支指令的指令地址相關(guān)聯(lián)的方式存儲在存儲裝置中時(shí),即,當(dāng)分支預(yù)測沒有成功,而分支指令被執(zhí)行時(shí),信息處理設(shè)備也不能利用該分支預(yù)測。在此情況下,信息處理設(shè)備從通過對取得后的分支指令進(jìn)行解碼而獲得的分支目的地重新開始取指。
[0007]這樣,在信息處理設(shè)備中,存儲指令的空間迄今已經(jīng)是32位地址空間。然而,與要處理的數(shù)據(jù)的數(shù)據(jù)尺寸的增加相對應(yīng),這種信息處理設(shè)備存在將虛擬地址空間擴(kuò)展到64位。在這種信息處理設(shè)備中,數(shù)據(jù)空間和指令空間都采用64位配置。
[0008]然而,實(shí)際程序尺寸遠(yuǎn)小于作為具有32位地址的可管理尺寸的極限給出的4GB。即使在比較大的情況下,程序尺寸也就例如大約幾百兆字節(jié)(MB)。因此,可以說,使得被限定為推測執(zhí)行處理單元的分支預(yù)測設(shè)備對64位地址進(jìn)行處理是硬件資源的浪費(fèi)。[0009]例如,將64位配置只應(yīng)用于指令集架構(gòu)中限定的必要部分是有效率的。在此情況下,在信息處理設(shè)備中,用于根據(jù)分支預(yù)測推測性地控制取指的控制單元迄今已經(jīng)通過只將低階32位地址用到最大可能的程度,控制了與傳統(tǒng)取得相同的取指。
[0010]具體的方法是信息處理設(shè)備預(yù)先固定高階(high-order) 32位地址,并且通過使用固定的高階32位和低階(low-order) 32位的4G字節(jié)空間,進(jìn)行取指。然后,例如,考慮這樣的方法,如果分支指令的分支目的地地址超過4G字節(jié)空間,則信息處理設(shè)備重新定義高階32位。
[0011]也就是說,信息處理設(shè)備通常固定程序計(jì)數(shù)器的高階32位。然后,當(dāng)改變高階32位的指令出現(xiàn)時(shí),例如,當(dāng)分支指令、異常等出現(xiàn)時(shí),信息處理設(shè)備再次獲得高階32位。注意,當(dāng)由于中斷的出現(xiàn)而導(dǎo)致出現(xiàn)改變程序計(jì)數(shù)器的高階32位的事件時(shí),信息處理設(shè)備也執(zhí)行相同的處理。在此情況下,當(dāng)改變高階32位的指令或者事件完成時(shí),信息處理設(shè)備臨時(shí)徹底清除包含取指和指令執(zhí)行的流水線。
[0012]因此,在將程序計(jì)數(shù)器的高階32位重寫為新值之后,信息處理設(shè)備利用重寫的新地址,從取指重新開始處理。因此,當(dāng)存在改變高階32位的指令或者事件時(shí),信息處理設(shè)備不能享有推測性執(zhí)行的益處。即使不能享用推測性執(zhí)行的益處,只要程序尺寸小,就不會出現(xiàn)問題。其理由是可以預(yù)測改變高階32位的指令或事件的出現(xiàn)頻率不會高到影響信息處理設(shè)備的性能的程度。
[0013]然而,有一些實(shí)際的OS (操作系統(tǒng))即使在要被分配的程序尺寸小的情況下也采用64位指令地址的高階32位來執(zhí)行控制。即使在要被分配的程序尺寸小的情況下,在安裝有采用高階32位的OS的信息處理設(shè)備中,程序散布在64位虛擬存儲空間中也不是不可能的。如果這樣的話,即使當(dāng)各個(gè)程序的尺寸小時(shí),也可能由于分支指令達(dá)到比預(yù)期更大的程度而導(dǎo)致出現(xiàn)超過32位的4GB地址的分支。
[0014]然而,該64位地址空間被配置為便于數(shù)據(jù)空間的64位擴(kuò)展,因此指令序列實(shí)際上被不均衡地分配給地址空間中的地址。因?yàn)檫@個(gè)原因,考慮通過利用這種不均衡性,以偽方式由小數(shù)量的位表達(dá)高階32位。也就是說,考慮頻繁出現(xiàn)的高階地址的模式,并且由使用該小數(shù)量的位的固定代碼來表達(dá)頻繁出現(xiàn)的高階地址可能就夠了。其中,“小數(shù)量的位”意味著比高階地址的位數(shù)少的位。如果指令序列被實(shí)際上不均勻地分配給地址,則高階地址的改變頻率呈現(xiàn)為低。因此,即使當(dāng)關(guān)于預(yù)先固定的多個(gè)高階地址安排用來表達(dá)這些高階地址中的每一個(gè)的位數(shù)少的固定代碼時(shí),仍可以預(yù)測伴隨高階地址變化的分支指令的執(zhí)行計(jì)數(shù)是小的。因此,信息處理設(shè)備可以通過使用表達(dá)多個(gè)指定的高階地址的位數(shù)少的固定代碼進(jìn)行有效的分支預(yù)測。
[0015]引f列表
[0016]專利文獻(xiàn)列表
[0017]專利文獻(xiàn)1:日本特開平H6-089173號公報(bào)
[0018]專利文獻(xiàn)2:國際公開第TO2007/099605號
[0019]專利文獻(xiàn)3:日本特開昭S63-147243號公報(bào)

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

[0020]摶術(shù)問是頁[0021]在傳統(tǒng)技術(shù)中,信息處理設(shè)備用位數(shù)少的代碼表達(dá)頻繁出現(xiàn)的高階地址。信息處理設(shè)備是基于指令序列被不均勻地分配給地址這一前提的。因此,如果不滿足該前提,則根據(jù)該傳統(tǒng)技術(shù),難以有效地執(zhí)行處理。例如,如果由OS分配的程序散布在虛擬的64位存儲空間中,則難以用位數(shù)少的代碼來表達(dá)頻繁出現(xiàn)的高階地址。
[0022]本公開的一個(gè)實(shí)施例致力于通過關(guān)于64位地址中的高階地址,以使用比該高階地址的位數(shù)少的位數(shù)的方式表達(dá)高階地址來實(shí)現(xiàn)信息處理。
[0023]在這種情況下,本實(shí)施例的一個(gè)方面由處理器來例示。該處理器包括取指單元、關(guān)聯(lián)關(guān)系存儲單元、編碼單元、解碼單元和分支預(yù)測單元。在重復(fù)指令處理的所述處理器的取指階段,所述取指單元從被定義為指令存儲源的指令地址取得指令,其中所述指令處理包括取得所述指令的取指階段和執(zhí)行所述指令的執(zhí)行階段。所述關(guān)聯(lián)關(guān)系存儲單元寄存正在經(jīng)歷指令處理的指令的指令地址的高階位域和所述指令地址的高階位域被編碼成的高階地址信息之間的關(guān)聯(lián)關(guān)系。所述編碼單元基于所述關(guān)聯(lián)關(guān)系將包含在所述指令地址中的高階位域編碼成高階地址信息。所述解碼單元基于所述關(guān)聯(lián)信息從所述高階地址信息解碼出所述高階位域。
【專利附圖】

【附圖說明】
[0024]圖1是示出比較例中的高階地址表的結(jié)構(gòu)例子的圖;
[0025]圖2是示出執(zhí)行分支指令的流程的流程圖;
[0026]圖3是示出在執(zhí)行該指令時(shí)更新高階地址表的情況下的問題的流程圖;
[0027]圖4是示出根據(jù)一個(gè)工作例子的系統(tǒng)架構(gòu)的圖;
[0028]圖5是示出根據(jù)一個(gè)工作例子的處理器的配置的圖;
[0029]圖6是描述地址信息的流程的圖;
[0030]圖7是示出高階地址表更新操作的流程的流程圖;
[0031]圖8是示出在SMT方法中沒有伴隨更新高階地址表的另一線程無效控制的情況下的問題的流程圖;
[0032]圖9是示出解決SMT方法中伴隨更新高階地址表的問題的方法的流程圖;態(tài)的例子的圖表;
[0033]圖10是H32編碼器的配置圖;
[0034]圖11是H32編碼器的配置圖;
[0035]圖12是高階地址切換確定單元的配置圖。
【具體實(shí)施方式】
[0036]下面參照附圖描述根據(jù)一個(gè)實(shí)施例的信息處理設(shè)備。以下實(shí)施例的配置是示例性的,并且本設(shè)備不局限于該實(shí)施例的配置。
[0037]<比較例>
[0038]下面參照圖1至圖3描述根據(jù)比較例的信息處理設(shè)備。根據(jù)該比較例的信息處理設(shè)備具有例如64位虛擬地址空間。其中,在該64位地址中,高階32位被稱為高階地址,而低階32位被稱為低階地址。
[0039]此外,該比較例中的信息處理設(shè)備將32位高階地址編碼為比32位少的位數(shù)的代碼。此外,該比較例中的信息處理設(shè)備內(nèi)部設(shè)置有高階地址表。該高階地址表是存儲由該信息處理設(shè)備處理的高階地址與所述位數(shù)少的代碼之間的關(guān)聯(lián)關(guān)系的表。該高階地址表具有分別由比32位少的位數(shù)的代碼標(biāo)識的(例如,由3位代碼標(biāo)識的)條目。該比較例中的信息處理設(shè)備每當(dāng)處理新的高階地址時(shí),將該新的高階地址寄存在該高階地址表中。其中,“新的高階地址”意思是未被寄存在高階地址表中的高階地址。
[0040]該比較例中的信息處理設(shè)備在將高階地址寄存到高階地址表時(shí),利用與該高階地址被寄存到的高階地址表中的條目相關(guān)聯(lián)的位數(shù)少的代碼代替32位的高階地址,來描述高階地址。也就是說,該比較例中的信息處理設(shè)備在運(yùn)行程序期間動態(tài)地將高階地址寄存在高階地址表中,從而利用該位數(shù)少的代碼更新高階地址的關(guān)聯(lián)關(guān)系。例如,當(dāng)該比較例中的/[目息處理設(shè)備在該聞階地址表中沒有空閑空間的狀態(tài)下進(jìn)一步寄存未被寄存的聞階地址時(shí),該信息處理設(shè)備將該未被寄存的地址覆寫到已經(jīng)寄存了現(xiàn)有的高階地址的條目。因此,該比較例中的信息處理設(shè)備能夠在運(yùn)行程序期間動態(tài)切換要被編碼的高階地址。
[0041]圖1示出利用傳統(tǒng)的固定代碼來對高階地址進(jìn)行編碼的方法與本比較例中的信息處理設(shè)備中利用非固定的代碼對高階地址進(jìn)行動態(tài)編碼的方法之間的比較。圖1中使用固定代碼的編碼方法是信息處理設(shè)備利用比高階地址的位數(shù)少的位數(shù)對被預(yù)測為表現(xiàn)出基準(zhǔn)頻率高的固定高階地址進(jìn)行編碼。
[0042]在圖1的例子中,例如,高階地址“OX00000000”的區(qū)域被例示為64位地址空間中的內(nèi)核區(qū)域和32位用戶文本區(qū)域。
[0043]此外,例如,高階地址“0X00000001”的區(qū)域被例示為64位地址空間中的64位用
戶文本區(qū)域,并且該文本區(qū)域之后的區(qū)域被例示為用戶數(shù)據(jù)區(qū)域。從確保每個(gè)程序的區(qū)域的角度來講,用戶數(shù)據(jù)區(qū)域可能是波動的。
[0044]此外,例如,高階地址“0XFFFFFFFF”的區(qū)域被例示為64位地址空間中的系統(tǒng)數(shù)據(jù)庫區(qū)域。
[0045]注意,用戶的64位數(shù)據(jù)區(qū)域之后的區(qū)域被例示為用戶數(shù)據(jù)庫區(qū)域。用戶數(shù)據(jù)庫區(qū)域的起始位置取決于該數(shù)據(jù)區(qū)域的尺寸,并因此在該圖中被指示為“0X”。其中,“:”(冒號)的左側(cè)指示高階地址,而冒號的右側(cè)指示低階地址。此外,符號“”代表任意的十六進(jìn)制值。
[0046]傳統(tǒng)的固定編碼方案涉及將代碼“00”、“01”、“11”固定地分配給高階地址“0X00000000”、“ 0X00000001 ”和“ O X FFFFFFFF ”。因此,例如,在起始位置波動的用戶數(shù)據(jù)
庫區(qū)域中不能有效進(jìn)行分支預(yù)測。這是因?yàn)殡y以確定固定的代碼被分配給哪個(gè)高階地址。
[0047]對于這種情況,該比較例中的信息處理設(shè)備進(jìn)行非固定編碼。在圖1中的非固定編碼方法中,信息處理設(shè)備通過高階地址表來準(zhǔn)備與3位代碼相關(guān)聯(lián)的7個(gè)條目。然后,信息處理設(shè)備在運(yùn)行程序期間識別到?jīng)]有寄存在該高階地址表中的高階地址時(shí),將識別出的高階地址寄存在高階地址表中。然后,信息處理設(shè)備將與具有被寄存的高階地址的條目相關(guān)聯(lián)的代碼分配給該寄存的高階地址。
[0048]例如,在圖1的例子中,代碼“000”被分配給高階地址“OX00000000”。此外,例
如,代碼“ 001 ”被分配給高階地址“ O X FFFFFFFF”。
[0049]也就是說,在圖1中所示的高階地址表的情況下,信息處理設(shè)備使用例如代碼“000”代替高階地址“O X 00000000”。此外,信息處理設(shè)備使用代碼“001”代替高階地址“O XFFFFFFFF”。
[0050]因此,關(guān)于寄存在高階地址表中的高階地址,信息處理設(shè)備可以采用3位代碼代替使用32位高階地址。此外,未被寄存在高階地址表中的高階地址被批處理地編碼為例如代碼“100”。
[0051]此外,在所有條目中(例如在圖1的情況下,在高階地址表的七個(gè)條目中)都已經(jīng)寄存了高階地址之后,信息處理設(shè)備當(dāng)識別到新的高階地址時(shí),在刪除已經(jīng)寄存的高階地址的同時(shí)寄存這些新的高階地址,即,用新的高階地址順序地覆寫這些已經(jīng)寄存的高階地址。然后,信息處理設(shè)備利用圖1中的高階地址表,以分別與七個(gè)代碼(即七個(gè)3位數(shù)據(jù))相關(guān)聯(lián)的方式對七個(gè)高階地址進(jìn)行編碼。按照上述方式,信息處理設(shè)備通過在運(yùn)行程序期間動態(tài)地切換要被寄存在高階地址表中的高階地址來對高階地址進(jìn)行編碼,并且通過采用與高階地址相關(guān)聯(lián)的代碼和低階地址來執(zhí)行諸如分支預(yù)測等處理。
[0052]然而,當(dāng)在運(yùn)行程序期間動態(tài)地切換與高階地址相關(guān)聯(lián)的代碼時(shí),會出現(xiàn)以下問題。例如,關(guān)于分支預(yù)測是成功還是不成功的判斷是基于計(jì)算出的分支目的地地址是否與進(jìn)行分支預(yù)測時(shí)給出的地址相符來進(jìn)行的。在下文中,在該比較例中假定分支目的地地址是低階地址與高階地址的代碼的結(jié)合。
[0053]圖2和圖3分別是示出執(zhí)行分支指令的流程的流程圖。圖2示出從取指到執(zhí)行指令的執(zhí)行流程、分支預(yù)測單元的分支預(yù)測流程和驗(yàn)證分支控制單元的運(yùn)算結(jié)果與分支預(yù)測的相符性的流程。
[0054]在圖2中的指令執(zhí)行流程中,信息處理設(shè)備從指令高速緩沖存儲器中取得指令,并且將取得的指令寄存在指令緩沖器中(SI)。接下來,信息處理設(shè)備對寄存在指令緩沖器中的指令進(jìn)行解碼,并且將分支目的地地址計(jì)算請求發(fā)送到計(jì)算單元(S2)。然后,信息處理設(shè)備將作為計(jì)算單元的計(jì)算結(jié)果獲取的分支目的地地址傳送到分支控制單元(S3)。傳送到分支控制單元的分支目的地地址是64位地址(高階地址[63:32] +低階地址[31:0])。信息處理設(shè)備的分支控制單元通過查閱高階地址表來對高階地址進(jìn)行編碼,并且產(chǎn)生高階地址代碼H32C0DE [2:0]。然后,信息處理設(shè)備將高階地址代碼H32C0DE [2:0]與低階地址[31:0]相結(jié)合(H32C0DE[2:0]+低階地址[31:0],從而產(chǎn)生分支目的地地址作為計(jì)算結(jié)果。
[0055]另一方面,在信息處理設(shè)備的分支預(yù)測流程中,信息處理設(shè)備從分支歷史獲取預(yù)測的分支目的地地址(S5)。該預(yù)測的分支目的地可以由高階地址代碼和低階地址的結(jié)合來描述,例如H32C0DE[2:0] +低階地址[31:0]。然后,信息處理設(shè)備將從分支歷史獲取的預(yù)測的分支目的地地址傳送到分支控制單元(S6)。
[0056]信息處理設(shè)備的分支控制單元對從指令執(zhí)行流程獲取的作為計(jì)算結(jié)果的分支目的地地址與從分支預(yù)測流程獲取的預(yù)測的分支目的地地址進(jìn)行比較(S7)。隨后,如果作為計(jì)算結(jié)果的分支目的地地址與預(yù)測的分支目的地地址相符,則信息處理設(shè)備確定分支預(yù)測成功。然后,信息處理設(shè)備按照原樣繼續(xù)對正在經(jīng)歷推測執(zhí)行的后續(xù)指令的處理(S8)。
[0057]反之,如果在S7中確定作為計(jì)算結(jié)果的分支目的地地址與預(yù)測的分支目的地地址不符,則信息處理設(shè)備確定分支預(yù)測不成功。隨后,信息處理設(shè)備取消對正在經(jīng)歷推測執(zhí)行的后續(xù)指令的處理(S9)。然后,信息處理設(shè)備基于正確的分支目的地地址(即,作為計(jì)算結(jié)果給出的分支目的地地址)從取指開始執(zhí)行處理(SA)。在分支預(yù)測失敗的情況下,從正確的分支目的地地址的取指也被稱為“重新取指”。[0058]圖3是示出從圖2中的分支預(yù)測階段到計(jì)算分支目的地階段的時(shí)間段期間更新高階地址的代碼的情況下的結(jié)果的流程圖。圖3中所示的處理與圖2中的相同。然而,在圖3中,在處理流程內(nèi)繪出單點(diǎn)虛線LA,這意味著高階地址表的內(nèi)容在單點(diǎn)虛線LA前后被更新。
[0059]例如,當(dāng)信息處理設(shè)備基于流水線處理來處理某一分支指令時(shí),假定在分支預(yù)測階段代碼“000”被寄存在高階地址表中作為高階地址代碼“OXaaaaaaaa”。進(jìn)一步假定高階地址代碼在從分支預(yù)測階段到分支目的地計(jì)算階段的時(shí)間段期間被更新。例如,假定代碼“ 000 ”被寄存在高階地址表中作為高階地址代碼“ O X nnnnnnnn ”。
[0060]如果上述假定成立,則當(dāng)進(jìn)行分支預(yù)測時(shí),分支預(yù)測地址的高階地址“OXaaaaaaaa”被編碼為代碼“000”。此外,如果作為分支目的地的計(jì)算結(jié)果給出的高階地址是“ O X nnnnnnnn ”,則高階地址被編碼為“ OOO ”。
[0061]因此,即使當(dāng)高階地址代碼相同時(shí),對于進(jìn)行分支預(yù)測時(shí)的地址與作為分支目的地的計(jì)算結(jié)果給出的地址來說,高階地址也不同。也就是說,如果基于高階地址進(jìn)行確定,則分支預(yù)測由于分支目的地地址不符而不成功。因此,結(jié)果是信息處理設(shè)備在不使用高階地址代碼的處理中,取消正在經(jīng)歷用于分支預(yù)測的推測執(zhí)行的指令,并且基于計(jì)算出的分支目的地地址重新開始取指。
[0062]然而,在圖3中所示的處理的情況下,分支預(yù)測地址的高階地址代碼和作為分支目的地的計(jì)算結(jié)果給出的地址的高階地址代碼二者都是“000”。因此,信息處理設(shè)備不能檢測到分支目的地地址的不符。因此,如果高階地址的代碼被更新,并且如果高階地址在進(jìn)行分支預(yù)測時(shí)被擦除,則信息處理設(shè)備無法對最初已經(jīng)被編碼的原始高階地址進(jìn)行解碼。因此,信息處理設(shè)備難以檢測到高階地址的不符。
[0063]如果無法檢測到高階地址的不符,則信息處理設(shè)備無法確定分支預(yù)測失敗。結(jié)果,在信息處理設(shè)備中,處理照常進(jìn)行而不取消本該被取消的推測執(zhí)行的指令(SB)。因此,結(jié)果是執(zhí)行與符合由信息處理設(shè)備執(zhí)行的程序處理的指令不同的指令,并且存在例如寄存器和存儲器的值毀壞的可能性。
[0064]此外,在將該比較例中的處理應(yīng)用于多線程處理器的情況下,會出現(xiàn)以下問題。其中,多線程處理器是指被配置為通過在單個(gè)處理器內(nèi)復(fù)用多個(gè)寄存器而使計(jì)算裝置等的資源能夠在多個(gè)程序之間共享的處理器。當(dāng)程序并行地運(yùn)行在多線程處理器上時(shí),頻繁出現(xiàn)的高階地址的位模式被預(yù)測為彼此類似。因此,如果高階地址的模式可以在線程之間共享,則認(rèn)為可以實(shí)現(xiàn)更有效的分支預(yù)測。
[0065]當(dāng)考慮高階地址代碼在線程之間共享并且動態(tài)地在多線程處理器上切換時(shí),還認(rèn)為其切換定時(shí)對于每個(gè)線程是獨(dú)立的。結(jié)果,認(rèn)為比單線程更難以檢測到高階地址的不符。
[0066][例子]
[0067]在本實(shí)施例中,信息處理設(shè)備包括編碼單元和解碼單元。編碼單元在高階地址表中具有高階地址與代碼之間的關(guān)聯(lián)關(guān)系,并且基于高階地址表將高階地址編碼為具有位數(shù)少的代碼。在本實(shí)施例中,下文中基于高階地址表將高階地址編碼成的代碼也被稱為高階地址信息。解碼單元基于同一表將位數(shù)少的高階地址信息解碼回到高階地址。
[0068]該信息處理設(shè)備還包括分支預(yù)測單元、取指控制單元和分支控制單元。分支預(yù)測單元寄存一組位數(shù)少的高階地址信息和低階地址作為地址。取指控制單元通過將從分支預(yù)測單元獲得的高階地址信息被解碼單元解碼成的高階地址與從分支預(yù)測單元獲得的低階地址相結(jié)合來產(chǎn)生指令地址。然后,取指控制單元基于該指令地址進(jìn)行取指。分支控制單元從取得的指令代碼解碼出分支指令,然后計(jì)算分支目的地地址并且驗(yàn)證計(jì)算出的分支目的地地址與進(jìn)行分支預(yù)測時(shí)給出的分支目的地地址之間的相符性。隨后,分支控制單元確定分支預(yù)測是成功還是不成功。
[0069]在本實(shí)施例中,信息處理設(shè)備更新寄存有高階地址的高階地址表,并且在運(yùn)行程序期間動態(tài)地切換要被編碼的高階地址與所述代碼(即,高階地址信息)之間的關(guān)聯(lián)關(guān)系。如比較例中說明的,當(dāng)高階地址在執(zhí)行分支指令期間被更新時(shí),難以檢測到進(jìn)行分支預(yù)測時(shí)給出的高階地址與計(jì)算分支目的地地址時(shí)給出的高階地址之間的不符。因此,該信息處理設(shè)備限制高階地址地址表的更新定時(shí),即,切換要被編碼的高階地址與所述代碼之間的關(guān)聯(lián)關(guān)系的定時(shí)。也就是說,根據(jù)本實(shí)施例的信息處理設(shè)備通過限制高階地址表的更新定時(shí)來確保高階地址與進(jìn)行分支預(yù)測和計(jì)算分支目的地地址時(shí)該高階地址被編碼成的代碼之間的相符性。
[0070]<確保高階地址與代碼之間關(guān)聯(lián)關(guān)系的檢查>
[0071]在本實(shí)施例中,首先檢查分支目的地的高階地址被禁止解碼的情況。為了關(guān)于分支目的地的高階地址進(jìn)行該檢查,在此假定信息處理設(shè)備執(zhí)行分支指令的情況。
[0072]例如,當(dāng)分支目的地的高階地址被寄存在高階地址表中時(shí),信息處理設(shè)備可以通過查閱高階地址表從所述代碼計(jì)算出分支目的地的高階地址。此外,如果高階地址沒有改變的地址指示分支目的地,則信息處理設(shè)備可以通過查閱指示正在執(zhí)行的指令的地址的程序計(jì)數(shù)器來計(jì)算高階地址。
[0073]因此,無法計(jì)算分支目的地的高階地址的情況是分支目的地的高階地址是未被寄存在高階地址表中的高階地址并且不同于正在執(zhí)行的指令的地址的情況。
[0074]在本實(shí)施例中,信息處理設(shè)備將與分配給被寄存的高階地址的代碼不同的代碼(例如,“X”)分配給未被寄存在高階地址表中的高階地址。然后,如果計(jì)算分支目的地地址時(shí)給出的高階地址信息的代碼是“X”并且分支目的地的高階地址不同于由程序計(jì)數(shù)器指示的地址,則信息處理設(shè)備確定分支目的地地址不符。也就是說,當(dāng)分支目的地的高階地址未被寄存在高階地址表中并且由計(jì)算單元計(jì)算出的分支目的地的高階地址與分支源的指令地址的高階地址(程序計(jì)數(shù)器值)不符(出現(xiàn)超過4GB的分支)時(shí),信息處理設(shè)備確定分支目的地地址與預(yù)測的分支目的地地址不符。
[0075]然后,信息處理設(shè)備進(jìn)行控制,以取消該指令的推測執(zhí)行,并且利用由計(jì)算單元計(jì)算出的分支目的地地址來更新程序計(jì)數(shù)器。當(dāng)更新了程序計(jì)數(shù)器時(shí),信息處理設(shè)備能夠從更新后的程序計(jì)數(shù)器的值計(jì)算出高階地址。隨后,信息處理設(shè)備從更新后的程序計(jì)數(shù)器產(chǎn)生高階地址,并且可以基于包含所產(chǎn)生的高階地址的正確地址重新開始取指。
[0076]此外,在本實(shí)施例中,在能夠確保進(jìn)行分支預(yù)測時(shí)和計(jì)算分支目的地地址時(shí)與所述代碼相關(guān)聯(lián)的高階地址相符的定時(shí)更新高階地址表。在這種情況下,在本實(shí)施例中,信息處理設(shè)備利用由于分支預(yù)測失敗而取消指令的推測執(zhí)行這一時(shí)機(jī)。指令的推測執(zhí)行的取消是通過取消目前存在的所有指令執(zhí)行,從被定義為流水線的第一階段的取指重新進(jìn)行處理的過程。然后,信息處理設(shè)備在由于分支預(yù)測失敗而取消指令的推測執(zhí)行的定時(shí)更新高階地址表。[0077]例如,當(dāng)如上所述分支目的地的高階地址未被寄存在高階地址表中的時(shí)候完成了分支指令的執(zhí)行時(shí),信息處理設(shè)備取消執(zhí)行的推測執(zhí)行。在取消指令的推測執(zhí)行時(shí),信息處理設(shè)備將剛完成其執(zhí)行的指令的分支目的地的高階地址寄存在高階地址表中,從而更新高階地址表。在取消指令的推測執(zhí)行之后,處理從分支目的地地址的執(zhí)行取得重新開始,并且因此信息處理設(shè)備可以在執(zhí)行后續(xù)指令的時(shí)候確保進(jìn)行分支預(yù)測時(shí)和計(jì)算分支目的地地址時(shí)要被編碼的高階地址與所述代碼之間的關(guān)聯(lián)關(guān)系一致。注意,除了分支目的地的高階地址未被寄存在高階地址表中的情況以外,例如,在低階地址不符的情況下,即,正常的分支預(yù)測未成功,在檢測到異常的情況下以及在發(fā)生中斷的情況下,指令的推測執(zhí)行也都被取消。
[0078]在利用單線程進(jìn)行指令處理的情況下,在上述定時(shí)更新高階地址表的控制下在運(yùn)行程序期間動態(tài)更新高階地址表時(shí),信息處理設(shè)備也可以確保要被編碼的高階地址與所述代碼之間的關(guān)聯(lián)關(guān)系。然而,在處理器采用多線程方法,特別是同步多線程(SMT)方法并且具有在線程之間共享要被編碼的高階地址的模式的配置的情況下,該處理變得復(fù)雜。同步多線程是指單個(gè)CPU (中央處理單元)并行地同步執(zhí)行多個(gè)線程的技術(shù)、處理等。
[0079]根據(jù)SMT方法,取消指令的推測執(zhí)行的定時(shí)可以沒有任何依賴性地出現(xiàn)在每個(gè)線程。因此,在如上所述取消某一線程“a”的推測執(zhí)行的定時(shí)執(zhí)行要被編碼的高階地址與所述代碼之間的關(guān)聯(lián)關(guān)系的切換時(shí),存在切換所述關(guān)聯(lián)關(guān)系的定時(shí)出現(xiàn)在正在執(zhí)行另一線程“b”期間的可能性。在此情況下,信息處理設(shè)備不能確保進(jìn)行另一線程“b”的分支預(yù)測時(shí)和計(jì)算分支目的地地址時(shí)編碼模式相符。
[0080]在此情況下,在本實(shí)施例中,信息處理設(shè)備在操作多個(gè)線程時(shí)確保利用某一線程更新高階地址表時(shí)另一線程的操作。假定在通過某一線程“a”的分支指令來更新高階地址表時(shí)另一線程正在經(jīng)歷指令的執(zhí)行。在此情況下,信息處理設(shè)備將高階地址編碼為“X”,而不管關(guān)于另一線程“b”的分支指令的分支目的地的高階地址是否被寄存在高階地址表中。其中,符號“X”代表與未被寄存在高階地址表中的高階地址相關(guān)聯(lián)的代碼。
[0081]當(dāng)高階地址信息的代碼是“X”時(shí),并且如果分支目的地的高階地址改變,則信息處理設(shè)備確定進(jìn)行分支預(yù)測時(shí)給出的分支目的地地址與在上述控制下計(jì)算分支目的地地址時(shí)給出的分支目的地地址不符。因此,信息處理設(shè)備檢測到線程“b”中分支目的地地址的不符。當(dāng)檢測到分支目的地地址不符時(shí),線程“b”的推測執(zhí)行被取消,并且重新開始取指。因此,在線程“b”中也取消指令的推測執(zhí)行時(shí)以及此后,可以確保進(jìn)行分支預(yù)測時(shí)和計(jì)算分支目的地地址時(shí)要被編碼的高階地址與所述代碼之間的關(guān)聯(lián)關(guān)系相符。當(dāng)在線程“b”中重新開始取指時(shí),信息處理設(shè)備基于利用線程“a”來更新的高階地址表進(jìn)行分支預(yù)測。因此,信息處理設(shè)備能夠在運(yùn)行程序期間以在線程之間共享高階地址和所述代碼之間的動態(tài)關(guān)聯(lián)關(guān)系的方式進(jìn)行有效的分支預(yù)測。
[0082]因此,本實(shí)施例中的信息處理設(shè)備通在運(yùn)行程序期間動態(tài)切換要被編碼的高階地址與所述代碼之間的關(guān)聯(lián)關(guān)系來避免出現(xiàn)問題。信息處理設(shè)備使64位地址空間中頻繁出現(xiàn)的高階32位地址能夠由少數(shù)量的位來表達(dá),并且進(jìn)一步能夠在運(yùn)行程序期間切換轉(zhuǎn)換到所述少數(shù)量位的方法。因此,信息處理設(shè)備能夠基于少量的硬件資源來實(shí)現(xiàn)有效的分支預(yù)測。
[0083]<硬件配置>[0084]圖4示出根據(jù)一個(gè)工作例子的信息處理設(shè)備的系統(tǒng)架構(gòu)。圖4描述了包括本工作例子應(yīng)用于的處理器的服務(wù)器等的系統(tǒng)。圖4中所示的信息處理設(shè)備包括多個(gè)處理器(CPU) 1-1和1-2、存儲器3-1和3-2以及執(zhí)行與外部裝置的輸入/輸出控制的互聯(lián)控制單元5。其中,處理器1-1、1_2等一般簡稱為處理器I。順便提及,這不意味著圖4的信息處理設(shè)備中處理器的數(shù)目局限于“ I”。
[0085]圖5示出了處理器I的配置。此外,圖6示出用于取指的地址信息的流程。在該工作例子中,采用無序執(zhí)行和具有流水線功能的通用處理器。注意,如程序中編寫的順序執(zhí)行被稱為有序執(zhí)行。另一方面,無序執(zhí)行被定義為這樣的技術(shù),以處理器在不同于寫到程序中的執(zhí)行過程的執(zhí)行過程中(例如,在執(zhí)行過程被寫到程序之前)執(zhí)行可執(zhí)行指令的方式來擴(kuò)展同步執(zhí)行多個(gè)指令的可能性。
[0086]圖5示出“取指”階段、“指令發(fā)送”階段、“指令執(zhí)行”階段和“指令完成”階段。圖5描述各階段和在各階段操作的部件之間的關(guān)系。例如,在指令取指階段,取指控制單元
11、指令緩沖器12、分支預(yù)測單元20、(初級)指令高速緩沖存儲器24和次級高速緩沖存儲器25進(jìn)行操作。
[0087]取指控制單元11獲取從分支預(yù)測單元20取得的指令的預(yù)測分支目的地地址。此夕卜,取指控制單元11從分支控制單元22獲取通過分支計(jì)算建立的分支目的地地址。此外,取指控制單元11從程序計(jì)數(shù)器控制單元19獲取被定義為接下來完成的指令地址的程序計(jì)數(shù)器值。取指控制單元11是取指單元的一個(gè)例子。
[0088]此外,如果在取指控制單元11內(nèi)沒有分支,則取指控制單元11產(chǎn)生用于連續(xù)取得指令的下一個(gè)地址。取指控制單元11通過從如上所述獲取的預(yù)測分支目的地地址、程序計(jì)數(shù)器值和由此產(chǎn)生的下一個(gè)地址中進(jìn)行選擇來建立下一個(gè)取指地址。
[0089]取指控制單元11將所建立的取指地址輸出到指令高速緩沖存儲器24,并且從由此輸出的執(zhí)行取得地址中取得指令代碼。指令高速緩沖存儲器24是用于存儲次級高速緩沖存儲器25的數(shù)據(jù)的一部分的初級高速緩沖存儲器。此外,次級高速緩沖存儲器25存儲例如存儲器3-1 (見圖4)等的數(shù)據(jù)的一部分。如果在被定義為初級高速緩沖存儲器的指令高速緩沖存儲器24中不存在相關(guān)地址的數(shù)據(jù),則從次級高速緩沖存儲器25的指令高速緩沖存儲器24中獲取該數(shù)據(jù)。此外,如果在次級高速緩沖存儲器25中也不存在該相關(guān)數(shù)據(jù),則從存儲器3-1等將該數(shù)據(jù)獲取到次級高速緩沖存儲器25中。
[0090]在該工作例子中,存儲器3-1等布置在處理器I外部。因此,通過存儲器控制器26來進(jìn)行外部存儲器3-1等和處理器I之間的I/O控制。從指令高速緩沖存儲器24、次級高速緩沖存儲器25、存儲器3-1等的相關(guān)地址取得的指令代碼被存儲在指令緩沖器12中。
[0091]分支預(yù)測單元20與取指并行地執(zhí)行分支預(yù)測。分支預(yù)測單元20接收從取指控制單元11輸出的取指地址。然后,分支預(yù)測單元20基于接收到的取指地址進(jìn)行分支預(yù)測,并且將指示該分支是否被建立的分支方向和分支目的地地址發(fā)送回到取指控制單元11。如果預(yù)測的分支方向沒有被建立,則取指控制單元11選擇被預(yù)測為下一個(gè)取指地址的分支目的地地址。之后,利用預(yù)測的分支目的地地址進(jìn)行指令的推測執(zhí)行。
[0092]在圖5的指令發(fā)送階段,指令解碼器13和指令發(fā)送控制單元14進(jìn)行操作。指令解碼器13從指令緩沖器12接收指令代碼,并且分析指令的類型和必要的執(zhí)行資源。然后,指令解碼器13將分析結(jié)果輸出到指令發(fā)送控制單元14、分支控制單元22和指令完成控制單元18。
[0093]指令發(fā)送控制單元14具有保留站的結(jié)構(gòu)。例如,該保留站針對該指令查看所查閱的寄存器的依存性,并由此根據(jù)具有該依存性的寄存器的更新狀態(tài)并根據(jù)涉及使用同一執(zhí)行資源的指令的執(zhí)行狀態(tài),來確定執(zhí)行資源是否能夠執(zhí)行該指令。然后,保留站將執(zhí)行該指令所需的多項(xiàng)信息(例如,寄存器編號和操作數(shù)地址)輸出到能夠執(zhí)行該指令的每個(gè)執(zhí)行資源。此外,指令發(fā)送控制單元14起到存儲該指令直到達(dá)到能夠執(zhí)行的狀態(tài)為止的緩沖器的作用。指令地址緩沖器21存儲從取指控制單元11輸出的取指地址。
[0094]在指令執(zhí)行階段,諸如計(jì)算單元15、(初級)操作數(shù)高速緩沖存儲器16和分支控制單元22等的執(zhí)行資源進(jìn)行操作。計(jì)算單元15根據(jù)程序被執(zhí)行,從寄存器17和操作數(shù)高速緩沖存儲器16接收數(shù)據(jù),并且執(zhí)行與指令對應(yīng)的運(yùn)算操作,諸如四則運(yùn)算操作、邏輯操作、三角函數(shù)操作和地址計(jì)算。然后,計(jì)算單元15將運(yùn)算結(jié)果輸出到寄存器17和操作數(shù)高速緩沖存儲器16。操作數(shù)高速緩沖存儲器16與指令高速緩沖存儲器24類似地存儲次級高速緩沖存儲器25的數(shù)據(jù)的一部分。操作數(shù)高速緩沖存儲器16根據(jù)加載指令來將數(shù)據(jù)從存儲器3-1等加載到計(jì)算單元15和寄存器17中。此外,操作數(shù)高速緩沖存儲器16根據(jù)存儲指令來將數(shù)據(jù)從計(jì)算單元15和寄存器17存儲在存儲器3-1等中。執(zhí)行資源中的每一個(gè)將指令執(zhí)行完成通知(COMPLETE)輸出到指令完成控制單元18。
[0095]分支控制單元22具有保留站的結(jié)構(gòu)。注意,分支控制單元22內(nèi)的保留站被稱為分支保留站22A (見圖6)。分支控制單元22 (分支保留站22A)接收來自指令解碼器13的分支指令的類型、來自指令地址緩沖器21的與指令解碼器13同步的分支指令地址、以及來自計(jì)算單元15的成為分支條件的分支目的地地址和運(yùn)算結(jié)果的信號等。然后,分支保留站22A基于每個(gè)分支指令存儲每個(gè)信號。如果所獲取的運(yùn)算結(jié)果滿足分支條件,則分支控制單元22確定分支被建立,而如果所獲取的運(yùn)算結(jié)果不滿足分支條件,則確定分支未被建立,從而確立分支方向。此外,在分支控制單元22中,分支保留站22A確定分支地址是否與運(yùn)算結(jié)果中和進(jìn)行分支預(yù)測時(shí)給出的預(yù)測的分支目的地中的分支方向相符。此外,分支控制單元22還控制分支指令的序列關(guān)系。
[0096]分支保留站22A將進(jìn)行分支預(yù)測時(shí)給出的分支方向和分支目的地地址寄存在條目中。然后,分支保留站22A在驗(yàn)證了運(yùn)算結(jié)果與預(yù)測的相符性之后,基于運(yùn)算結(jié)果替換該條目。如果運(yùn)算結(jié)果與預(yù)測相符,則分支保留站22A將分支指令“COMPLETE”輸出到指令完成控制單元18。反之,如果運(yùn)算結(jié)果與預(yù)測不符,則分支保留站22A將分支指令“COMPLETE”與后續(xù)指令的取消請求(由于本工作例子中的其他因素,下文中將該取消請求稱為推測性執(zhí)行指令取消請求)和重新取指請求一起輸出到指令完成控制單元18。這是因?yàn)檫\(yùn)算結(jié)果與預(yù)測不符意味著分支預(yù)測失敗。此外,如果分支的建立被確定,則分支保留站22A將運(yùn)算結(jié)果的分支目的地地址從輸出分支指令“COMPLETE”的分支保留站22A的條目輸出到程序計(jì)數(shù)器控制單元19。
[0097]在指令完成階段,指令完成控制單元18、寄存器17、程序計(jì)數(shù)器控制單元19和分支歷史更新單元23進(jìn)行操作。指令完成控制單元18將從指令解碼器13接收到的指令的類型依次存儲在提交堆棧條目中。指令完成控制單元18基于從每個(gè)指令執(zhí)行資源接收到的COMPLETE (完成)信號,以存儲在提交堆棧條目中的指令代碼的順序執(zhí)行執(zhí)行指令完成(提交)處理。例如,指令完成控制單元18將寄存器更新指示輸出到寄存器17,將程序計(jì)數(shù)器的更新指示輸出到程序計(jì)數(shù)器控制單元19。
[0098]寄存器17在從指令完成控制單元18接收到寄存器更新指示時(shí),基于從計(jì)算單元15和操作數(shù)高速緩沖存儲器16接收到的運(yùn)算結(jié)果的數(shù)據(jù)來執(zhí)行寄存器數(shù)據(jù)的更新。
[0099]程序計(jì)數(shù)器控制單元19從指令完成控制單元18接收指令的COMMIT (提交)信號和提交的指令的類型,并且還從分支控制單元22接收分支目的地地址。程序計(jì)數(shù)器控制單元19在從指令完成控制單元18接收到分支指令的COMMIT信號時(shí),將從分支控制單元22接收到的分支目的地地址設(shè)置在程序計(jì)數(shù)器中。此外,程序計(jì)數(shù)器控制單元19在接收到指令的COMMIT信號而不是分支指令時(shí),加上與所提交的指令計(jì)數(shù)相對應(yīng)的程序計(jì)數(shù)器值。更新后的程序計(jì)數(shù)器值代表接下來被提交的指令的地址。
[0100]分支歷史更新單元23基于從分支控制單元22接收到的分支運(yùn)算操作的結(jié)果來產(chǎn)生分支預(yù)測單元20的歷史更新數(shù)據(jù),并且將所產(chǎn)生的歷史更新數(shù)據(jù)輸出到分支預(yù)測單元20,從而更新分支預(yù)測單元20的歷史。
[0101]在該工作例子中,如圖6中所示,指令地址是64位地址。此外,在該工作例子中,處理器I將64位的指令地址中的高階32位編碼成3位信號(下文中將其稱為“H32C0DE”)。然而,這不意味著高階32位被編碼成的H32C0DE的位數(shù)局限于3位。在圖6中,H32C0DE和32位的低階地址的2元組被指示為例如[2:0] [31:0]。此外,未被編碼的64位地址由[63:0]來指示。因此,例如,H32C0DE和32位的低階地址的2元組,即,[2:0] [31:0],被存儲在分支預(yù)測單元20的分支歷史中。
[0102]然后,處理器I通過指令執(zhí)行流水線來傳播指令地址的高階32位被編碼成的H32C0DE與低階32位的組合。其中,指令執(zhí)行流水線包括例如取指控制單元11、指令地址緩沖器21、分支保留站22A、程序計(jì)數(shù)器19A、分支歷史更新單元23和分支預(yù)測單元20等。然后,處理器I在使用指令地址的高階32位的部件中通過解碼所傳播的H32C0DE來執(zhí)行向高階地址的轉(zhuǎn)換。
[0103]在該工作例子中,H32C0DE的編碼器(下文中稱為H32編碼器7)和H32C0DE的解碼器(下文中稱為H32解碼器8)通過查閱共同的高階地址表來執(zhí)行H32C0DE轉(zhuǎn)換。該高階地址表是指存儲H32C0DE和高階地址之間的關(guān)聯(lián)關(guān)系的表,其中每個(gè)條目包含H32C0DE和32位地址。其中,處理器I可以采用這樣的配置(配置例子1),其中使用一個(gè)表作為在所有H32解碼器8和H32編碼器7之間共享的高階地址表。此外,處理器I可以采用這樣的配置(配置例子2),其中H32解碼器8和H32編碼器7中的每一個(gè)具有小規(guī)模的表,并且所有表的更新定時(shí)被同步。在該工作例子中,處理器I采用配置例子2。
[0104]此外,當(dāng)處理器I采用SMT方法時(shí),還考慮這樣的配置,其中通過基于每個(gè)線程向高階地址表提供各個(gè)表進(jìn)行控制。然而,在該工作例子中,利用具有小的封裝面積的有效配置在線程之間共享高階地址表。
[0105]圖10示出H32編碼器7的配置。H32編碼器7利用輸入的高階地址來比較H32編碼器7內(nèi)的高階地址表71中寄存的每個(gè)條目的32位地址與輸入的高階地址。然后,H32編碼器7輸出被寄存在相符的條目中的代碼(H32C0DE)作為編碼結(jié)果。H32編碼器7是編碼單元的一個(gè)例子。此外,高階地址表71是關(guān)聯(lián)關(guān)系存儲單元的一個(gè)例子。
[0106]在圖10的例子中,H32編碼器7包括高階地址表71和選擇電路,選擇電路連接高階地址表71的各條目并且選擇并輸出被寄存在高階地址表71中的代碼(H32C0DE)。選擇電路包括例如比較器72和2輸入“與”門73。比較器72比較高階地址表71的相關(guān)條目中寄存的高階地址與輸入到H32編碼器7的高階地址。作為比較結(jié)果,如果高階地址表71的相關(guān)條目中寄存的高階地址與輸入到H32編碼器7的高階地址相符,則比較器將真(true)(接通,“I”)信號發(fā)送到2輸入“與”門73的一個(gè)輸入端子。因此,比較器72使用高階地址表71的相關(guān)條目中寄存的高階地址作為基準(zhǔn)信號。
[0107]通過比較器72與高階地址比較的、高階地址表71的相關(guān)條目中寄存的代碼(H32C0DE)的值(位模式)被輸入到2輸入“與”門73的另一個(gè)輸入端子。如上所述,所述代碼(H32C0DE)是用于利用少的位數(shù)(即,本例子中的3位)對32位高階地址進(jìn)行編碼的代碼。因此,從比較器72接收真(ON)信號輸入的“與”門73輸出從所述另一個(gè)輸入端子輸入的、高階地址表71的相關(guān)條目中寄存的代碼(H32C0DE)。此外,從比較器72接收到假(false)(斷開)信號輸入的“與”門被切斷。因此,“與”門73不輸出從所述另一個(gè)輸入端子輸入的、高階地址表71的相關(guān)條目中寄存的代碼(H32C0DE)。也就是說,圖10概念性示出“與”門73,然而,更具體來說,選擇電路包括由比較器72接通/斷開的開關(guān)可能就夠了。
[0108]另一方面,當(dāng)比較器72的所有比較結(jié)果都是假(斷開,“O”)時(shí),多輸入“與”門74輸出代碼(H32C0DE) “100”。代碼(H32C0DE) “ 100”被定義為指示被輸入到H32編碼器7的高階地址未被寄存在高階地址表71中的信號。此外,多輸入“或”門75將所述多個(gè)“與”門73和多輸入“與”門74中的任一個(gè)輸出到選擇器76。
[0109]選擇器76根據(jù)高階地址無效信號是接通還是斷開來切換要被選擇的信號。其中,高階地址無效信號是由圖6和圖12中的高階地址切換確定單元產(chǎn)生的信號。高階地址無效信號是用于當(dāng)處理器I采用SMT方法時(shí)避免受另一線程中更新高階地址表71所施加的影響的信號。
[0110]在圖10中,當(dāng)高階地址無效信號是斷開時(shí),選擇器76選擇并輸出“或”門75的輸出。在此情況下,基于由選擇電路做出的選擇結(jié)果來輸出高階地址表中寄存的代碼(H32C0DE)或者代碼“100”。反之,當(dāng)高階地址無效信號是接通時(shí),選擇器76輸出代碼“ 100”而不依賴于選擇電路的處理結(jié)果。
[0111]例如,在圖10的情況下,寄存有與輸入數(shù)據(jù)“OXaaaaaaaa”相符的地址的條目的代碼(H32C0DE)是“000”,因此H32編碼器7輸出“000”。此外,如果沒有與輸入的高階地址相符的條目,或者如果高階地址無效信號是“1”,則H32編碼器7輸出指示比較結(jié)果不符的特定代碼“ 100”作為編碼結(jié)果。
[0112]圖11示出H32解碼器8的配置。H32解碼器8利用輸入的代碼(H32C0DE)來比較H32解碼器8內(nèi)的高階地址表中寄存的每個(gè)條目與輸入的代碼(H32C0DE),并且輸出相符的條目中寄存的32位高階地址作為解碼結(jié)果。
[0113]在圖11的例子中,H32解碼器8包括高階地址表81和連接到高階地址表81的各條目的選擇電路,并且選擇并輸出高階地址表81中寄存的高階地址。H32解碼器8是解碼單元的一個(gè)例子。此外,高階地址表81是關(guān)聯(lián)關(guān)系存儲單元的一個(gè)例子。
[0114]選擇電路包括例如比較器82和2輸入“與”門83。比較器82比較高階地址表81的相關(guān)條目中寄存的代碼(H32C0DE)與輸入到H32解碼器8的代碼(H32C0DE)。作為比較結(jié)果,如果高階地址表81的相關(guān)條目中寄存的代碼(H32C0DE)與輸入到H32解碼器8的代碼(H32C0DE)相符,則比較器82將真(接通,“I”)信號發(fā)送到2輸入“與”門83的一個(gè)輸入終端。因此,比較器82通過基準(zhǔn)信號來使用高階地址表81的相關(guān)條目中寄存的代碼(H32C0DE)。
[0115]由比較器82比較的、高階地址表81的相關(guān)條目中寄存的高階地址的值(位模式)被輸入到2輸入“與”門83的另一個(gè)輸入端子。因此,從比較器82接收到真(接通)信號輸入的“與”門83輸出從所述另一個(gè)輸入端子輸入的、高階地址表81的相關(guān)條目中寄存的高階地址。也就是說,該代碼(H32C0DE)被解碼,并由此轉(zhuǎn)換為高階地址。此外,從比較器82接收到假(斷開,“O”)輸入的“與”門83被切斷。在此情況下,“與”門83不輸出從所述另一個(gè)輸入端子輸入的、高階地址表81的相關(guān)條目中寄存的高階地址。因此,與圖10類似,圖11也概念性示出“與”門83,然而,更具體地說,選擇電路包括由比較器82接通/斷開的開關(guān)可能就夠了。
[0116]反之,當(dāng)比較器82的所有比較結(jié)果都是假(斷開)時(shí),多輸入“與”門84輸出程序計(jì)數(shù)器值的高階32位。此外,多輸入“或”門85將所述多個(gè)“與”門83和所輸入“與”門84的輸出中的任一個(gè)輸出到選擇器86。
[0117]選擇器86根據(jù)高階地址無效信號是接通還是斷開來切換要被選擇的信號。也就是說,如果高階地址無效信號是斷開,則選擇器86選擇并輸出“或”門85的輸出。在此情況下,基于選擇電路做出的選擇結(jié)果來輸出高階地址表中寄存的高階地址或者程序計(jì)數(shù)器值的高階32位。反之,如果高階地址無效信號是接通,則選擇器86輸出程序計(jì)數(shù)器值的高階32位而不依賴于選擇電路的處理結(jié)果。
[0118]例如,在圖1的情況下,寄存有與輸入數(shù)據(jù)“000”相符的代碼(H32C0DE)的條目的32位地址是“OXaaaaaaaa”,因此H32解碼器8輸出“OXaaaaaaaa”作為關(guān)于代碼(H32C0DE) “000”的解碼結(jié)果。此外,如果沒有與輸入的代碼(H32C0DE)相符的條目,或者如果高階地址轉(zhuǎn)換無效信號是“ I ”,則H32解碼器8認(rèn)為比較結(jié)果不符,并且輸出被定義為正在執(zhí)行的處理中的指令地址的程序計(jì)數(shù)器19A的高階地址,作為解碼結(jié)果。
[0119]在圖6中,代碼8-1、8_2被用于區(qū)分所述多個(gè)H32解碼器8。代碼7_1、7_2被用于區(qū)分所述多個(gè)H32編碼器7。例如,具有H32解碼器8_1的取指控制單元11從接收自分支預(yù)測單元20、分支控制單元22和程序計(jì)數(shù)器控制單元19的代碼H32C0DE和如上所述的用于最后一次取指的代碼H32C0DE中選擇用于接下來的取指的代碼H32C0DE,并且H32解碼器8-1將其轉(zhuǎn)換為高階地址。取指控制單元11利用作為取得地址的高階地址的轉(zhuǎn)換后地址來執(zhí)行取指。如果在高階地址表81中不存在與H32C0DE相符的條目,則H32解碼器8_1輸出指示此時(shí)正在執(zhí)行的指令地址的程序計(jì)數(shù)器的高階位。因此,取指控制單元11通過將程序計(jì)數(shù)器的高階位設(shè)置為取指地址的高階地址來執(zhí)行取指。因此,如果在高階地址表81中不存在與H32C0DE相符的條目,則存在取指地址是錯(cuò)誤的可能性。然而,通過使用正在執(zhí)行的指令地址的高階地址作為取指地址,可以避免高速緩沖存儲器被填充。這是因?yàn)樵诔绦虻膱?zhí)行中在指定的地址附近進(jìn)行迭代處理的情況是存在的。注意,H32解碼器8-1不能在取指控制單元11中將H32C0DE轉(zhuǎn)換為高階地址的情況暗示分支預(yù)測單元20中存處的分支歷史中的H32C0DE要在進(jìn)行分支預(yù)測的時(shí)間點(diǎn)被更新的情況的假定。分支預(yù)測單元20中存儲的分支歷史中的代碼H32C0DE在進(jìn)行分支預(yù)測的時(shí)間點(diǎn)被更新,在此情況下,分支預(yù)測成功的可能性降低,然而,信息處理設(shè)備可以識別出分支預(yù)測未成功。
[0120]此外,如圖6中所示,分支控制單元22包括H32編碼器7_1,H32編碼器7_1將從計(jì)算單元15獲得的分支地址計(jì)算結(jié)果的高階地址轉(zhuǎn)換為代碼H32C0DE。分支控制單元22將轉(zhuǎn)換后的H32C0DE作為分支目的地地址寄存在分支保留站22k中。此外,分支控制單元22通過確定進(jìn)行分支預(yù)測時(shí)給出的分支目的地地址是否正確來驗(yàn)證與計(jì)算結(jié)果的相符性。通過比較H32編碼器7-1將關(guān)于分支目的地地址的高階地址的檢查結(jié)果轉(zhuǎn)換成的代碼H32C0DE與進(jìn)行分支預(yù)測時(shí)給出的代碼H32C0DE來檢查分支目的地地址。此外,分支控制單元22包括確定分支目的地的高階地址是否改變的高階地址切換控制單元22B。
[0121]圖12示出高階地址切換控制單元22B的配置。高階地址切換控制單元22B是切換確定單元的一個(gè)例子。高階地址切換控制單元22B包括分支目的地高階地址緩沖器22B6和高階地址轉(zhuǎn)換無效信號保持電路22B4,分支目的地高階地址緩沖器22B6保持“提交”前分支目的地地址的高階地址、高階地址表更新指示信號產(chǎn)生邏輯、由于高階地址不符而引起的推測執(zhí)行指令取消請求產(chǎn)生邏輯。
[0122]分支目的地高階地址緩沖器22B6保持例如由計(jì)算單元15計(jì)算出的分支目的地地址的高階32位。分支目的地高階地址緩沖器22B6保持用于更新高階地址表81、71等的高階地址。將更新高階地址表81、71的情況假設(shè)為這樣的情況,分支目的地的高階地址從分支源的高階地址改變并且將是沒有被寄存在高階地址表81、71中的新的高階地址。在此情況下,將由計(jì)算單元15計(jì)算該新的高階地址。
[0123]如果高階地址表更新指示信號產(chǎn)生邏輯輸出“真”(導(dǎo)通,“1”),則通過與代碼H32C0DE相關(guān)聯(lián)的方式,將分支目的地高階地址緩沖器22B6所保持的分支目的地地址的高階32位寄存在H32解碼器8的高階地址表81中和H32編碼器7的高階地址表71中。然而,圖12示出在H32解碼器8的高階地址表81中的寄存路徑。
[0124]將參照例如圖12描述高階地址切換確定單元22B的高階地址表更新指示信號產(chǎn)生邏輯。高階地址表切換確定單元22B包括保持此時(shí)的程序計(jì)數(shù)器值的高階位的程序計(jì)數(shù)器緩沖器(下文中簡稱為PCU緩沖器22B7)、保持與分支源地址的高階32位相關(guān)聯(lián)的代碼H32C0DE的分支源地址代碼緩沖器(下文中簡稱為分支源代碼緩沖器22B8)以及保持與分支目的地地址的高階32位相關(guān)聯(lián)的代碼H32C0DE的分支目的地地址代碼緩沖器(下文中簡稱為分支目的地代碼緩沖器22B9)。其中“分支源地址”是指程序計(jì)數(shù)器值。此外,“分支目的地地址”是指例如由計(jì)算單元15計(jì)算出的分支目的地地址。
[0125]注意,在圖12中,在分支目的地高階地址緩沖器22B6、P⑶緩沖器22B7、分支源代碼緩沖器22B8和分支目的地代碼緩沖器22B9的每一個(gè)中都示出線程編號(thO)。此外,在高階地址轉(zhuǎn)換無效信號和由于其他因素而引起的推測執(zhí)行指令取消請求中也都示出線程編號(thO)。線程編號(thO)指示所關(guān)注的線程。
[0126]另一方面,在圖12中還示出高階地址更新指示信號(thl)。高階地址更新指示信號(thl)是指來自另一線程的信號。也就是說,在圖12中,復(fù)用各個(gè)寄存器,以與基于SMT方法的處理器I兼容。因此,如果不采用SMT方法,則高階地址切換確定單元22B可以不復(fù)用具有線程編號(thO)的分支目的地高階地址緩沖器22B6、P⑶緩沖器22B7、分支源代碼緩沖器22B8和分支目的地代碼緩沖器22B9。此外,如果不采用SMT方法,高階地址切換確定單元22B可以不被設(shè)置有高階地址轉(zhuǎn)換無效信號保持電路22B4。
[0127]高階地址切換確定單元22B從程序計(jì)數(shù)器19A獲取此時(shí)的程序計(jì)數(shù)器值的高階32位并且將所獲取的高階32位保持在P⑶緩沖器22B7中可能就夠了。此外,高階地址切換確定單元22B從程序計(jì)數(shù)器19A的H32編碼器7_2獲取分支源的代碼H32C0DE,并且還獲取由計(jì)算單元15計(jì)算出的、由編碼器7-1編碼的分支目的地地址的代碼H32C0DE。高階地址切換確定單元22B將分支源的代碼H32C0DE和分支目的地的代碼H32C0DE分別保持在分支源代碼緩沖器22B8和分支目的地代碼緩沖器22B9中可能就夠了。然后,高階地址切換確定單元22B通過比較器22BA確定分支目的地高階地址緩沖器22B6中保持的分支目的地地址的高階32位是否與PCU緩沖器22B7中保持的程序計(jì)數(shù)器值的高階32位相符,如果不符,則將“真”(接通,“I”)輸出到“與”門22B2和“與”門22BD的輸入端子中的一個(gè)。
[0128]此外,高階地址切換確定單元22B通過比較器22BB和22BC確定分支源代碼緩沖器22B8中保持的分支源地址的高階32位的代碼H32C0DE和分支目的地代碼緩沖器22B9中保持的分支目的地地址的高階32位的代碼H32C0DE中的至少一個(gè)是否為值“100”。高階地址切換確定單元22B利用對確定結(jié)果進(jìn)行“或”操作的“或”門22B1將“或”操作的結(jié)果輸出到“與”門22B2的一個(gè)輸入端子。
[0129]此外,由指令完成控制單元18給出的分支指令“提交”信號被輸入到“與”門22B2的一個(gè)輸入端子。因此,“與”門22B2在如下條件下產(chǎn)生推測執(zhí)行指令取消信號:
[0130]條件(I):分支目的地高階地址緩沖器22B6的分支目的地高階地址與程序計(jì)數(shù)器值的高階32位不符;
[0131]條件(2):分支指令的指令地址的高階地址的代碼H32C0DE和分支目的地地址的高階地址的代碼H32C0DE中的至少一個(gè)是“ 100” ;以及
[0132]條件(3):分支指令“提交”信號被發(fā)送;并且“與”門22B2將所產(chǎn)生的推測執(zhí)行指令取消信號輸出到處理器I的各單元,如取指控制單元11、指令高速緩沖存儲器24、分支預(yù)測單元20、指令完成控制單元18、程序計(jì)數(shù)器控制單元19和分支控制單元22。利用上述配置,可以識別出分支指令的分支目的地未被寄存在高階地址表81 (和表71)中,并且超過4GB的分支指令被執(zhí)行。因此,高階地址切換確定單元22B可以識別出關(guān)于包含進(jìn)行超過4GB的分支的分支指令的分支預(yù)測失敗。
[0133]此外,高階地址切換確定單元22B將分支目的地代碼緩沖器22B9中保持的代碼H32C0DE的值是否為“100”的確定結(jié)果輸出到“與”門22BD的一個(gè)輸入端子。此外,由指令完成控制單元18給出的分支指令“提交”信號被輸入到“與”門22BD的一個(gè)輸入端子?!芭c”門22BD通過對比較器22BA、22BC的輸出和分支指令“提交”信號進(jìn)行“與”操作,來產(chǎn)生分支目的地高階地址不符信號,并且將所產(chǎn)生的信號輸出到“與”門22B5的一個(gè)輸入端子。
[0134]“與”門22B5對由“與”門22BD給出的分支目的地高階地址不符信號和由高階地址轉(zhuǎn)換無效信號保持電路22B4給出的高階地址轉(zhuǎn)換無效信號的相反值(“與非”)進(jìn)行“與”操作,從而產(chǎn)生高階地址更新請求指示信號。利用該高階地址更新請求指示信號,分支目的地高階地址緩沖器22B6中保持的分支目的地地址的高階地址被寄存在高階地址表81、71的空條目中。此外,如果在高階地址表81、71中沒有空條目,則從最早到最新的順序覆寫這些條目。因此,利用高階地址更新請求指示信號,處理器I內(nèi)的H32解碼器8的高階地址表81和H32編碼器7的高階地址表71被更新。注意,在基于SMT方法的處理器I中,高階地址更新請求指示信號例如被基于每個(gè)線程復(fù)用,保持在寄存器中,并且被通知給其他線程。
[0135]高階地址轉(zhuǎn)換無效信號保持電路22B4例如是鎖存器。由高階地址切換控制單元22B給出的與另一線程(thl)相關(guān)聯(lián)的高階地址更新指示信號(thl)來設(shè)置高階地址轉(zhuǎn)換無效信號保持電路22B4的設(shè)定端子。高階地址轉(zhuǎn)換無效信號保持電路22B4是高階地址轉(zhuǎn)換無效指示單元的一個(gè)例子。
[0136]此外,例如由“或”門22B3的輸出信號來對高階地址轉(zhuǎn)換無效信號保持電路22B4進(jìn)行復(fù)位,其中,“或”門22B3對推測執(zhí)行指令取消請求或者由其他因素引起的推測執(zhí)行指令取消請求進(jìn)行“或”操作。其中,“由其他因素引起的推測執(zhí)行指令取消請求”是基于例如上述高階地址切換確定單元22B的高階地址表更新指示信號產(chǎn)生邏輯以外的邏輯的推測執(zhí)行指令取消請求。如果如圖6中所示,在分支保留站22A中分支預(yù)測單元20的分支預(yù)測結(jié)果與計(jì)算單元15執(zhí)行分支指令的結(jié)果不符,則從分支保留站22A發(fā)出由其他因素引起的推測執(zhí)行指令取消請求。
[0137]如上所述,通過使用“與”門22B5的方式,對分支目的地高階地址的不符檢測信號(“與”門22BD的輸出)和高階地址轉(zhuǎn)換無效信號的負(fù)極邏輯進(jìn)行“與”運(yùn)算,來配置高階地址表更新指示信號的產(chǎn)生。利用該配置,如果高階地址轉(zhuǎn)換無效信號是“真”(導(dǎo)通,“1”),則“與”門22B5變成“假”(斷開,“0”),并且即使當(dāng)檢測到分支目的地高階地址不符時(shí),也不更新高階地址表。如果高階地址轉(zhuǎn)換無效信號是“真”(導(dǎo)通,“1”),則H32編碼器7輸出“100”而與高階地址表71和代碼H32C0DE之間的比較結(jié)果無關(guān)。因此,高階地址已經(jīng)被寄存在高階地址表71中,但是“與”門22BD進(jìn)行操作以發(fā)出用于將高階地址再次寄存在高階地址表71中的更新指示信號。然后,如果高階地址表更新指示信號是“真”(導(dǎo)通,“1”),則“與”門22B5設(shè)置障礙以不發(fā)出高階地址表更新指示信號。
[0138]注意,高階地址切換確定單元22B的分支目的地高階地址緩沖器22B6在保持“提交”之前分支指令中最早的指令的分支目的地地址的32位高階地址。分支控制單元22將分支目的地地址的32位高階地址與分支目的地地址的32位低階地址以及代碼H32C0DE —起輸出到程序計(jì)數(shù)器控制單元19。
[0139]此外,如圖6中所示,高階地址轉(zhuǎn)換無效信號被分別發(fā)送到處理器I內(nèi)的H32編碼器7和H32解碼器8。此外,如圖6中所示,程序計(jì)數(shù)器控制單元19包括H32解碼器8_2和H32編碼器7-2,并且當(dāng)完成分支指令的執(zhí)行時(shí),從分支控制單元22接收分支目的地地址的代碼H32C0DE。然后,當(dāng)H32解碼器8_2解碼從分支控制單元22接收到的分支目的地地址的代碼H32C0DE時(shí),程序計(jì)數(shù)器控制單元19將該高階地址作為下一個(gè)指令地址寄存在程序計(jì)數(shù)器19A中。如果高階地址表81不包含相符條目,則在本工作例子中代碼H32C0DE是“100”。在此情況下,通過選擇器19B不選擇H32解碼器8-2的輸出而是選擇分支目的地高階地址緩沖器22B6的輸出,程序計(jì)數(shù)器控制單元19更新程序計(jì)數(shù)器19A (見圖6)。這是因?yàn)槌绦蛴?jì)數(shù)器控制單元19獲取到接下來要執(zhí)行的指令的正確指令地址。
[0140]此外,當(dāng)H32編碼器7將程序計(jì)數(shù)器中的高階地址的值轉(zhuǎn)換為代碼H32C0DE時(shí),程序計(jì)數(shù)器控制單元19將該代碼H32C0DE傳送到取指控制單元11的取指地址選擇邏輯。
[0141]在上述高階地址切換確定單元22B的控制下,高階地址表71、81等被更新。處理器內(nèi)的多個(gè)高階地址表71、81被同時(shí)更新。下面描述一個(gè)H32解碼器8的高階地址表81如何被更新的例子。
[0142]<高階地址表更新過程>
[0143]然而,考慮關(guān)于高階地址表81的條目的更新順序的各種形式,為了簡單化,在該工作例子中高階地址切換確定單元22B采用從最早的條目開始的順序填充條目的形式。執(zhí)行高階地址表81的更新,以使得如上所述進(jìn)行分支預(yù)測時(shí)給出的高階地址表與計(jì)算分支目的地地址時(shí)給出的高階地址表相符。因此,如上所述,該工作例子中的處理器I檢測到分支預(yù)測地址與指令被實(shí)際分支到的分支目的地不符。然后,如果檢測到不符,則處理器I從正確地址進(jìn)行重新取指,并且如果分支目的地的高階地址改變成高階地址代碼中未被寄存的值,則更新高階地址表81。以下是對基于上述工作例子中處理器I的硬件配置的高階地址更新處理的描述。
[0144]圖7示出更新高階地址表的操作過程。除了 S4A中的處理以外,圖7中的處理與由上述比較例給出的圖2和圖3中的處理相同。注意,當(dāng)高階地址未被寄存在高階地址表中時(shí),在圖7中S4A的處理中,將高階地址編碼成指示“未被寄存”的代碼“100”。
[0145]利用32位的低階地址和代碼H32C0DE,可以通過比較在分支保留站22A的條目中存儲的分支目的地與作為計(jì)算結(jié)果獲取的分支目的地,來檢測預(yù)測的分支目的地與計(jì)算單元15計(jì)算出的分支目的地不符。當(dāng)分支指令由于分支目的地地址不符而變成“提交”時(shí),取指控制單元11做出重新取指請求。注意,除了重新取指是在取消正在經(jīng)歷推測執(zhí)行的指令之后進(jìn)行的取指以外,重新取指與正常的取指相同。此外,高階地址切換確定單元22B同時(shí)更新高階地址表。
[0146]如上所述,響應(yīng)于推測執(zhí)行指令取消請求,所有后續(xù)的推測執(zhí)行指令都被取消,并且通過查閱改變后的高階地址表來重新開始分支預(yù)測和取指。因此,可以確保正確地址的取指。然而,上述處理是代碼H32C0DE是特殊代碼“100”以外的代碼的情況下的處理。
[0147]然而,由計(jì)算單元15計(jì)算出的分支指令的分支目的地地址的代碼H32C0DE的值是指示高階地址表中沒有條目的特殊代碼“ 100”,在此情況下,即使當(dāng)代碼H32C0DE符合時(shí),處理器I也不能確保高階地址符合。也就是說,處理器I不能確保正在經(jīng)歷推測執(zhí)行的后續(xù)分支目的地指令是否正確。對于分支指令的指令地址(程序計(jì)數(shù)器值)的代碼H32C0DE的值是指示高階地址表中沒有條目的特殊代碼“ 100”的情況也是如此。如果分支目的地地址的代碼H32C0DE的值是“100”以外的值,則在分支預(yù)測依然成功時(shí),處理器I繼續(xù)推測執(zhí)行指令。這是因?yàn)槿绻?dāng)高階地址改變時(shí)并且甚至分支指令的指令地址的代碼H32C0DE的值是“ 100”時(shí)仍繼續(xù)分支指令,則存在分支指令的指令地址的高階地址不一定與程序計(jì)數(shù)器19A的高階地址相符的情況。
[0148]因此,處理器I檢查分支指令的指令地址的代碼H32C0DE是“100”的條件或者分支指令的分支目的地地址的代碼H32C0DE是“ 100”的條件是否成立(圖12中的“或”門22B1)。然后,處理器I進(jìn)一步通過比較分支目的地高階地址緩沖器22B6與程序計(jì)數(shù)器19A,對H32C0DE= “ 100”取“與”條件。如果高階地址表中沒有條目并且如果分支目的地地址的高階地址與程序計(jì)數(shù)器的高階地址不符,則不確保進(jìn)行分支預(yù)測時(shí)給出的分支目的地的高階地址正確。因此,高階地址切換控制單元22B在分支指令由于分支目的地地址不符而變成“提交”時(shí)發(fā)出推測執(zhí)行指令取消請求,并且進(jìn)一步執(zhí)行高階地址表的更新。此外,程序計(jì)數(shù)器控制單元11將重新取指請求輸出到指令高速緩沖存儲器24。其中,當(dāng)高階地址切換控制單元22B檢測到高階地址表中不存在條目并且高階地址不符時(shí),總是出現(xiàn)重新取指,然后取消指令的后續(xù)推測執(zhí)行,因此,分支目的地高階地址緩沖器22B6在“提交”前保留分支指令中最早的分支指令的分支目的地高階地址用于一個(gè)指令就夠了。注意,如圖8和圖9中所示,如果處理器I是基于SMT方法的,則分支目的地地址高階地址緩沖器22B6在基于每個(gè)線程“提交”之前保留分支指令中最早的分支指令的分支目的地高階地址用于一個(gè)指令可能就夠了。
[0149]圖8示出在SMT方法中沒有伴隨更新高階地址表的另一個(gè)線程無效控制的情況下的問題。圖8中的處理與圖7的情況下的處理相同。然而,在圖8中,前提是當(dāng)前線程(thO)的高階地址表被在單點(diǎn)虛線LC下側(cè)上的另一個(gè)線程(thl)中的處理更新。此外,圖9示出解決SMT方法中伴隨更新高階地址表的問題的方法。除了 S4B的處理以外,圖9中的處理與圖8中的相同。
[0150]此外,在SMT中在線程之間共享高階地址表的情況下,與圖7類似,處理器I的高階地址切換確定單元22B執(zhí)行檢測作為計(jì)算結(jié)果而給出的分支目的地地址與分支預(yù)測出的分支目的地地址之間高階地址不符的處理。假定在指令執(zhí)行中高階地址表由于線程(thO)的因素而被更新,那么在當(dāng)前線程(thl)中,在進(jìn)行分支預(yù)測時(shí)和在進(jìn)行計(jì)算之后,被查閱的高階地址表變得不同。因此,即使在進(jìn)行分支預(yù)測時(shí)和在進(jìn)行計(jì)算之后分支目的地的高階地址是不同的,仍存在與各自的高階地址相關(guān)聯(lián)的代碼H32C0DE相同的可能性(圖8中的S7)。
[0151]在此情況下,高階地址切換確定單元22B不能檢測到分支目的地地址不符。因此,基于錯(cuò)誤預(yù)測的后續(xù)推測執(zhí)行指令不能被取消。結(jié)果,出現(xiàn)分支到原始分支目的地地址以外的地址之后的處理繼續(xù)進(jìn)行的問題。在此情況下,高階地址切換確定單元22B還將用于更新高階地址表81、71的高階地址表更新指示信號通知給另一線程,使得在更新高階地址之后該另一線程不查閱高階地址表。然后,高階地址切換確定單元22B通過通知給該另一線程的高階地址表更新指示信號來設(shè)置高階地址轉(zhuǎn)換無效信號保持電路22B4,并且產(chǎn)生高階地址轉(zhuǎn)換無效信號(圖12)。如果高階地址轉(zhuǎn)換無效信號是“1”,則H32編碼器7將代碼H32C0DE強(qiáng)制轉(zhuǎn)換為“100”。該轉(zhuǎn)換使高階地址切換確定單元22B的高階地址表更新指示信號產(chǎn)生邏輯能夠通過檢測分支目的地地址不符來發(fā)出推測執(zhí)行指令取消請求(圖12)。因此,使得處理器I能夠基于錯(cuò)誤預(yù)測來取消后續(xù)的推測執(zhí)行指令(圖9中的S7-SA)。如果處理從取指重新開始,那么對于所關(guān)注的線程可以確保正確地址的取指。
[0152]如上所述,高階地址轉(zhuǎn)換無效信號保持電路22B4可以由I位鎖存器配置而成,該I位鎖存器通過來自另一線程的高階地址表更新指示信號將值設(shè)置為“1”,并且通過來自本身線程的推測執(zhí)行指令取消請求信號將該值復(fù)位為“O”。此外,如圖11中所示,如果高階地址轉(zhuǎn)換無效信號是“ I ”,則H32解碼器8始終檢測為分支目的地地址不符。因此,可以避免在高階地址轉(zhuǎn)換無效信號保持電路22B4在另一線程中更新高階地址表81、71等的情況下不能檢測到由分支預(yù)測單元20預(yù)測的分支目的地地址與計(jì)算單元15計(jì)算出的分支目的地不符的狀態(tài)。
[0153]如上所述,該工作例子已經(jīng)例示了動態(tài)更換高階地址表71、81的配置。然而,通過將特定的代碼固定地分配給頻繁出現(xiàn)的模式來混合動態(tài)的高階地址模式和固定的高階地址模式,可以實(shí)現(xiàn)更有效的分支預(yù)測。
[0154]此外,在該工作例子中,代碼H32C0DE由3位信號來實(shí)現(xiàn),然而,即使對于潛在的尺寸增大的程序出現(xiàn)一些數(shù)據(jù)和指令分配給64位地址空間時(shí),通過擴(kuò)展代碼H32C0DE的位數(shù)以增加能夠同時(shí)編碼的地址模式,能夠以較少的改變保持有效分支預(yù)測的性能。此外,在本工作例子中,以窄化到線程數(shù)為“2”的情況的方式進(jìn)行描述,然而,由于該配置在線程之間共享高階地址表,所以即使將來增加線程數(shù)時(shí),也能夠以幾乎不變的控制實(shí)現(xiàn)相同的配置。然而,本實(shí)施例的配置當(dāng)然還可以應(yīng)用于線程數(shù)為“I”的處理器。在此情況下,如已經(jīng)提到的,圖12中的高階地址轉(zhuǎn)換無效信號保持電路22B4變得不必要。
[0155]當(dāng)上述配置被實(shí)現(xiàn)時(shí),處理器I在運(yùn)行程序期間動態(tài)地將指令地址的高階地址與高階地址編碼成的代碼H32C0DE之間的關(guān)聯(lián)關(guān)系存儲在高階地址表71、81中,將該高階地址轉(zhuǎn)換為代碼H32C0DE,并且可以有效地實(shí)現(xiàn)分支預(yù)測單元20等的處理。
[0156]此外,處理器I可以解決運(yùn)行程序期間由于動態(tài)更新高階地址表71、81而出現(xiàn)的問題。也就是說,更新高階地址表的定時(shí)被限制到推測執(zhí)行取消請求的出現(xiàn)定時(shí),從而可以檢測到作為計(jì)算結(jié)果給出的分支目的地地址與進(jìn)行分支預(yù)測時(shí)給出的分支目的地地址不符。
[0157]此外,處理器I將未被寄存在高階地址表71中的高階地址編碼為一個(gè)代碼,例如,“100”,從而使未被寄存的高階地址能夠被一致地處理。此外,處理器I將未被寄存在高階地址表81中的代碼H32C0DE解碼回程序計(jì)數(shù)器值的高階地址,從而例如可以抑制指令高速緩沖存儲器24的條目被填充。
[0158]此外,當(dāng)處理器I采用SMT方法時(shí),高階地址更新指示信號被通知給正在執(zhí)行另一個(gè)線程的高階地址切換確定單元22B,從而可以防止在一個(gè)線程中更新高階地址表71、81影響另一個(gè)線程。
[0159]根據(jù)該處理器,對于64位地址中的高階地址,通過使用比該高階地址的位數(shù)少的位數(shù)表達(dá)該高階地址,可以實(shí)現(xiàn)信息處理。
[0160]附圖標(biāo)記列表
[0161]I 處理器
[0162]3 存儲器
[0163]5 互聯(lián)控制單元
[0164]7 H32 編碼器
[0165]8 H32 解碼器
[0166]11取指控制單元
[0167]12指令緩沖器
[0168]13指令解碼器
[0169]14指令發(fā)送控制單元
[0170]15計(jì)算單元
[0171]16操作數(shù)高速緩沖存儲器
[0172]17寄存器
[0173]18指令完成控制單元
[0174]19程序計(jì)數(shù)器控制單元
[0175]20分支預(yù)測單元
[0176]21指令地址緩沖器
[0177]22分支控制單元
[0178]22A分支保留站[0179]22B高階地址確定單元
[0180]23分支歷史更新單元
[0181]24指令高速緩沖存儲器
[0182]25次級高速緩沖存儲器
[0183]71、81高階地址表。
【權(quán)利要求】
1.一種處理器,包括: 取指單元,其在重復(fù)指令處理的所述處理器的取指階段,從被定義為指令存儲源的指令地址取得指令,所述指令處理包括取得所述指令的所述取指階段和執(zhí)行所述指令的執(zhí)行階段; 關(guān)聯(lián)關(guān)系存儲單元,其寄存正在經(jīng)歷所述指令處理的指令的指令地址的高階位域和所述指令地址的所述高階位域被編碼成的高階地址信息之間的關(guān)聯(lián)關(guān)系; 編碼單元,其基于所述關(guān)聯(lián)關(guān)系將包含在所述指令地址中的高階位域編碼成所述高階地址信息;以及 解碼單元,其根據(jù)所述高階地址信息和所述關(guān)聯(lián)關(guān)系來解碼出所述高階位域。
2.根據(jù)權(quán)利要求1所述的處理器,還包括切換確定單元,在正在經(jīng)歷所述指令處理的指令是分支指令的情況下,當(dāng)關(guān)于所述分支指令的分支目的地地址和所述分支指令的分支源地址中的至少一個(gè)的關(guān)聯(lián)關(guān)系未被寄存在所述關(guān)聯(lián)關(guān)系存儲單元中并且所述分支指令分支跳轉(zhuǎn)到所述高階地址的變化范圍內(nèi)的分支目的地時(shí),所述切換確定單元取消對所述分支指令的分支預(yù)測,以及當(dāng)關(guān)于所述分支指令的分支目的地地址的關(guān)聯(lián)關(guān)系未被寄存在所述關(guān)聯(lián)關(guān)系存儲單元中并且所述分支指令分支跳轉(zhuǎn)到所述高階地址的變化范圍內(nèi)的分支目的地時(shí),所述切換確定單元更新所述關(guān)聯(lián)關(guān)系。
3.根據(jù)權(quán)利要求1或2所述的處理器,其中所述編碼單元產(chǎn)生這樣的代碼:所述代碼指示關(guān)聯(lián)關(guān)系未被寄存的指令地址的高階位域的未寄存狀態(tài)。
4.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的處理器,還包括程序計(jì)數(shù)器,所述程序計(jì)數(shù)器指示由所述取指單元取得的指令的指令地址, 其中關(guān)于關(guān)聯(lián)關(guān)系未被寄存的高階地址信息,所述解碼單元根據(jù)所述程序計(jì)數(shù)器指示的指令地址解碼出所述高階位域。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的處理器,其中所述關(guān)聯(lián)關(guān)系存儲單元以在線程之間共享的方式存儲所述關(guān)聯(lián)關(guān)系, 所述處理器還包括高階地址轉(zhuǎn)換無效信號指示單元,當(dāng)在第一線程中更新所述關(guān)聯(lián)關(guān)系時(shí),在從第二線程中的取指階段直到重新進(jìn)行指令處理的時(shí)間段期間,所述高階地址轉(zhuǎn)換無效信號指示單元使所述編碼單元執(zhí)行當(dāng)所述高階地址的關(guān)聯(lián)關(guān)系未被寄存時(shí)要執(zhí)行的處理,以及使所述解碼單元執(zhí)行當(dāng)所述高階地址信息的關(guān)聯(lián)關(guān)系未被寄存時(shí)要執(zhí)行的處理。
6.一種處理器的控制方法,包括: 取指步驟,在重復(fù)指令處理的處理器的取指階段,從被定義為指令存儲源的指令地址取得指令,所述指令處理包括取得所述指令的所述取指階段和執(zhí)行所述指令的執(zhí)行階段; 寄存步驟,將正在經(jīng)歷所述指令處理的指令的指令地址的高階位域和所述指令地址的所述高階位域被編碼成的高階地址信息之間的關(guān)聯(lián)關(guān)系寄存在關(guān)聯(lián)關(guān)系存儲單元中; 編碼步驟,基于所述關(guān)聯(lián)關(guān)系將包含在所述指令地址中的高階位域編碼成所述高階地址信息; 解碼步驟,基于所述關(guān)聯(lián)關(guān)系根據(jù)所述高階地址信息解碼出所述高階位域;以及 分支預(yù)測步驟,基于歷史信息來預(yù)測由所述取指單元取得的指令是否是分支指令,以存儲正在經(jīng)歷所述指令處理的所述分支指令的分支目的地地址相關(guān)聯(lián)的所述高階地址信息和低階位域。
【文檔編號】G06F9/38GK103853528SQ201310532943
【公開日】2014年6月11日 申請日期:2013年10月31日 優(yōu)先權(quán)日:2012年12月3日
【發(fā)明者】鈴木崇志 申請人:富士通株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
伊川县| 利川市| 三江| 仙游县| 安徽省| 化隆| 宜丰县| 伊宁县| 新丰县| 侯马市| 老河口市| 项城市| 灵石县| 河西区| 灵寿县| 荃湾区| 枣强县| 广平县| 普定县| 禹城市| 河北省| 沈丘县| 绥江县| 灌阳县| 凭祥市| 台东市| 南木林县| 台东市| 连山| 沙湾县| 措勤县| 图们市| 金昌市| 哈密市| 鄂温| 无锡市| 西昌市| 台安县| 美姑县| 永寿县| 时尚|