多線程處理器中分支預(yù)測資源的調(diào)度方法、設(shè)備和系統(tǒng)的制作方法【專利摘要】本發(fā)明實(shí)施例涉及計(jì)算機(jī)【
技術(shù)領(lǐng)域:
】,公開了一種多線程處理器中分支預(yù)測資源的調(diào)度方法、系統(tǒng)和多線程處理器。其中,所述多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,所述多線程處理器包括至少一個(gè)分支預(yù)測部件,該方法包括:設(shè)置所述至少二個(gè)線程與所述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;所述至少一個(gè)分支預(yù)測部件的數(shù)量小于所述至少二個(gè)線程的數(shù)量,所述至少一個(gè)分支預(yù)測部件包括所述第一分支預(yù)測部件,所述至少二個(gè)線程包括所述第一線程。實(shí)施本發(fā)明實(shí)施例,可以減少分支預(yù)測資源的硬件開銷,提高分支預(yù)測的準(zhǔn)確性。【專利說明】多線程處理器中分支預(yù)測資源的調(diào)度方法、設(shè)備和系統(tǒng)【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計(jì)算機(jī)【
技術(shù)領(lǐng)域:
】,具體涉及一種多線程處理器中分支預(yù)測資源的調(diào)度方法、設(shè)備和系統(tǒng)?!?br>背景技術(shù):
】[0002]目前,多數(shù)處理器都使用流水線方式使指令的執(zhí)行可以重疊以提高效率,當(dāng)包含流水線技術(shù)的處理器處理分支指令時(shí)就會(huì)遇到一個(gè)問題,根據(jù)判定條件的真/假的不同,有可能會(huì)產(chǎn)生轉(zhuǎn)跳,而這會(huì)打斷流水線中指令的處理,因?yàn)樘幚砥鳠o法確定該指令的下一條指令,直到分支執(zhí)行完畢。流水線越長,處理器等待的時(shí)間便越長,因?yàn)樗仨毜却种е噶钐幚硗戤?,才能確定下一條進(jìn)入流水線的指令程序中。分支預(yù)測技術(shù)便是為解決這一問題而出現(xiàn)的,分支預(yù)測可包括對條件分支指令的目標(biāo)跳轉(zhuǎn)方向的預(yù)測以及對子程序返回地址的預(yù)測。[0003]現(xiàn)有技術(shù)中存在一種多線程處理器的分支預(yù)測方法,在該方法中每個(gè)線程獨(dú)自占有一個(gè)子程序RAS(ReturnAddressStack,返回地址棧)用于子程序返回地址的預(yù)測。RAS采用LIFO(LastInFirstOut,后進(jìn)先出)結(jié)構(gòu),ControlLogic(控制邏輯)控制返回地址的入棧與出棧邏輯。在指令對call/ret(請求/返回)中,call指令在fetch(取指令)流水級時(shí)將返回地址push(入棧)到RAS中,子程序結(jié)束時(shí)ret指令在fetch流水級時(shí)將返回地址從RAS中pop(出棧)。以32個(gè)線程的多線程處理器為例,則需要32個(gè)RAS,若每個(gè)RAS中有4個(gè)entry(條目),則共有128個(gè)entry,同時(shí)每個(gè)RAS還需要一個(gè)控制邏輯,這樣導(dǎo)致硬件開銷太大。但如果將每個(gè)RAS中的entry減少為2個(gè),開銷雖然降低,但每個(gè)線程獨(dú)自享有的資源變少了,可能經(jīng)常發(fā)生溢出而影響性能。[0004]現(xiàn)有技術(shù)中還存在一種多線程處理器的分支預(yù)測方法,在該方法中,每個(gè)線程有自己獨(dú)立的GHR(GlobalHistoryRegister,全局歷史寄存器),多個(gè)線程共享PHT(patternhistorytable,模式歷史表)進(jìn)行分支跳轉(zhuǎn)方向的預(yù)測。該方法中,雖然每個(gè)線程之間共享PHT,減少了一定的硬件開銷,但也會(huì)導(dǎo)致線程間的相互干擾,降低分支預(yù)測的準(zhǔn)確性?!?br/>發(fā)明內(nèi)容】[0005]本發(fā)明實(shí)施例提供一種多線程處理器中分支預(yù)測資源的調(diào)度方法、設(shè)備和系統(tǒng),用于減少分支預(yù)測資源的硬件開銷,提高分支預(yù)測的準(zhǔn)確性。[0006]本發(fā)明實(shí)施例提供一種多線程處理器中分支預(yù)測資源的調(diào)度方法,所述多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,所述多線程處理器包括至少一個(gè)分支預(yù)測部件,所述方法包括:[0007]設(shè)置所述至少二個(gè)線程與所述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;[0008]將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;所述至少一個(gè)分支預(yù)測部件的數(shù)量小于所述至少二個(gè)線程的數(shù)量,所述至少一個(gè)分支預(yù)測部件包括所述第一分支預(yù)測部件,所述至少二個(gè)線程包括所述第一線程。[0009]相應(yīng)的,本發(fā)明實(shí)施例還提供一種多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng),所述多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,所述多線程處理器包括至少一個(gè)分支預(yù)測部件,所述系統(tǒng)包括:[0010]設(shè)置單元,用于設(shè)置所述至少二個(gè)線程與所述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;所述至少一個(gè)分支預(yù)測部件的數(shù)量小于所述至少二個(gè)線程的數(shù)量;[0011]分配單元,用于將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;所述至少一個(gè)分支預(yù)測部件包括所述第一分支預(yù)測部件,所述至少二個(gè)線程包括所述第一線程。[0012]相應(yīng)的,本發(fā)明實(shí)施例還提供一種多線程處理器,所述多線程處理器包括:[0013]至少一個(gè)分支預(yù)測部件以及如前所述的分支預(yù)測資源的調(diào)度系統(tǒng)。[0014]本發(fā)明實(shí)施例中提供的多線程處理器中分支預(yù)測資源的調(diào)度方法、系統(tǒng)和多線程處理器,該多線程處理器中分支預(yù)測部件的數(shù)量小于多線程處理器的線程的數(shù)量,可節(jié)約硬件開銷,另外,將一個(gè)分支預(yù)測部件分配給多線程處理器可執(zhí)行的多個(gè)線程中的其中一個(gè)線程獨(dú)享使用,也克服了現(xiàn)有技術(shù)中共享分支預(yù)測資源所帶來的線程間的相互干擾的問題,提高了分支預(yù)測的準(zhǔn)確性。【專利附圖】【附圖說明】[0015]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。[0016]圖1是本發(fā)明實(shí)施例一提供的多線程處理器中分支預(yù)測資源的調(diào)度方法的流程示意圖;[0017]圖2是本發(fā)明實(shí)施例二提供的多線程處理器中分支預(yù)測資源的調(diào)度方法的流程示意圖;[0018]圖3是本發(fā)明實(shí)施例三提供的多線程處理器中分支預(yù)測資源的調(diào)度方法的流程示意圖;[0019]圖4本發(fā)明實(shí)施例四提供的多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng)的結(jié)構(gòu)示意圖;[0020]圖5是本發(fā)明實(shí)施例五提供的多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng)的結(jié)構(gòu)示意圖;[0021]圖6是本發(fā)明實(shí)施例六提供的多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng)的結(jié)構(gòu)示意圖?!揪唧w實(shí)施方式】[0022]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。[0023]本發(fā)明實(shí)施例中提供了一種多線程處理器中分支預(yù)測資源的調(diào)度方法、系統(tǒng)和多線程處理器,用于節(jié)約分支預(yù)測資源的硬件開銷,提高分支預(yù)測的準(zhǔn)確性。以下分別進(jìn)行詳細(xì)說明。[0024]本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”、“第三”“第四”等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例例如能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。[0025]實(shí)施例一:[0026]參考圖1,本發(fā)明提供一種多線程處理器中分支預(yù)測資源的調(diào)度方法,該多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,該多線程處理器包括至少一個(gè)分支預(yù)測部件,如圖1所示,該方法包括:[0027]101、設(shè)置上述至少二個(gè)線程與上述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;[0028]本實(shí)施例中,分支預(yù)測部件可以為模式歷史表PHT或返回地址棧RAS;[0029]102、將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;[0030]其中,上述至少一個(gè)分支預(yù)測部件的數(shù)量小于上述至少二個(gè)線程的數(shù)量,上述至少一個(gè)分支預(yù)測部件包括上述第一分支預(yù)測部件,上述至少二個(gè)線程包括上述第一線程,且上述第一線程與上述第一分支預(yù)測部件存在對應(yīng)關(guān)系。[0031]本實(shí)施例中,多線程處理器中分支預(yù)測部件的數(shù)量小于多線程處理器的可同時(shí)執(zhí)行的線程的數(shù)量,可節(jié)約硬件開銷,另外,將一個(gè)分支預(yù)測部件分配給多個(gè)線程中的其中一個(gè)線程獨(dú)享使用,也克服了現(xiàn)有技術(shù)中共享分支預(yù)測資源所帶來的線程間的相互干擾的問題,提高了分支預(yù)測的準(zhǔn)確性。[0032]實(shí)施例二:[0033]本發(fā)明還提供一種多線程處理器中分支預(yù)測資源的調(diào)度方法,該多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,該多線程處理器包括至少一個(gè)分支預(yù)測部件,如圖2所示,該方法包括:[0034]201、設(shè)置上述至少二個(gè)線程與上述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;[0035]本實(shí)施例中,分支預(yù)測部件可以為模式歷史表PHT或返回地址棧RAS;[0036]202、檢測上述至少二個(gè)線程中各個(gè)線程的優(yōu)先級;[0037]203、將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;[0038]其中,上述至少一個(gè)分支預(yù)測部件的數(shù)量小于上述至少二個(gè)線程的數(shù)量,上述至少一個(gè)分支預(yù)測部件包括上述第一分支預(yù)測部件,上述至少二個(gè)線程包括上述第一線程,且上述第一線程是與第一分支預(yù)測部件對應(yīng)的線程中優(yōu)先級最高的線程;[0039]204、將上述第一分支預(yù)測部件的所有條目置為無效;[0040]在將第一分支預(yù)測部件分配給第一線程獨(dú)享使用之后,由于第一分支預(yù)測部件可能保存著上一個(gè)線程中的分支預(yù)測歷史信息,這些分支預(yù)測歷史信息可能對第一線程的分支預(yù)測沒有用處,因此可將第一分支預(yù)測部件的所有條目(entry)置為無效,以清空對第一線程無效的分支預(yù)測歷史信息;[0041]205、保存指示上述第一分支預(yù)測部件被分配給上述第一線程獨(dú)享使用的分配信肩、O[0042]具體地,如果上述分支預(yù)測部件是PHT,則操作系統(tǒng)可以通過MSR(movegeneralpurposeregistertosystemregister)類型的指令設(shè)置至少二個(gè)線程與至少一個(gè)模式歷史表PHT的對應(yīng)關(guān)系,上述預(yù)先設(shè)置的至少二個(gè)線程與至少一個(gè)模式歷史表PHT的對應(yīng)關(guān)系的信息可以保存在分支線程寄存器(BTR,BranchThreadRegister)中,該分支線程寄存器可以是只寫(Write-only)寄存器;同樣,也可以將指示上述第一PHT被分配給上述第一線程獨(dú)享使用的分配信息保存在分支線程寄存器,每個(gè)PHT可配置一個(gè)BTR用于保存與該P(yáng)HT相關(guān)的對應(yīng)關(guān)系和分配信息。[0043]例如,一個(gè)8線程處理器,其中包括2個(gè)PHT,預(yù)先設(shè)置為:ΡΗΤ0對應(yīng)于threadO、threadl、thread2、thread3,PHTl對應(yīng)于線程thread4、thread5、thread6、thread7,對于ΡΗΤΟ,將其分配給threadO、threadl、thread2、thread3中優(yōu)先級最高的線程獨(dú)享使用。對于PHT1,將其分配給thread4、thread5、thread6、thread7中優(yōu)先級最高的線程獨(dú)享使用。操作系統(tǒng)可以每隔預(yù)定時(shí)間對各個(gè)線程的優(yōu)先級進(jìn)行判斷,以更新PHT的分配。[0044]當(dāng)然,PHT的分配方式不限于上述的優(yōu)先級高的方式,也可以采用其它分配方式,例如隨機(jī)選擇的分配方式。[0045]具體地,如果分支預(yù)測部件是RAS,則操作系統(tǒng)可以通過MSR(movegeneralpurposeregistertosystemregister)類型的指令設(shè)置至少二個(gè)線程與至少一個(gè)返回地址棧RAS的對應(yīng)關(guān)系,上述預(yù)先設(shè)置的至少二個(gè)線程與至少一個(gè)返回地址棧RAS的對應(yīng)關(guān)系的信息可以保存在返回地址棧_線程寄存器(RAS_TR,ReturnAddressStack_ThreadRegister)中,該RAS_TR可以是只讀(Read-only)寄存器;同樣,也可以將指示上述第一RAS被分配給上述第一線程獨(dú)享使用的分配信息保存在RAS_TR中,每個(gè)RAS可配置一個(gè)RAS_TR用于保存與該RAS相關(guān)的對應(yīng)關(guān)系和分配信息。[0046]例如,一個(gè)8線程處理器,其中包括2個(gè)RAS,預(yù)先設(shè)置為:RAS0對應(yīng)于threadO、threadl>thread2、thread3,RASl對應(yīng)于線程thread4、thread5、thread6、thread7,對于RAS0,將其分配給threadO、threadl、thread2、thread3中優(yōu)先級最高的線程獨(dú)享使用。對于RAS1,將其分配給thread4、thread5、thread6、thread7中優(yōu)先級最高的線程獨(dú)享使用。操作系統(tǒng)可以每隔預(yù)定時(shí)間對各個(gè)線程的優(yōu)先級進(jìn)行判斷,以更新RAS的分配。[0047]當(dāng)然,RAS的分配方式不限于上述的優(yōu)先級高的方式,也可以采用其它分配方式,例如隨機(jī)選擇的分配方式。[0048]本實(shí)施例中提供的多線程處理器中分支預(yù)測資源的調(diào)度方法,可方便于從操作系統(tǒng)層面對分支資源進(jìn)行靈活的調(diào)度和分配,可控性地進(jìn)行分支預(yù)測,提高了分支預(yù)測的準(zhǔn)確率;從硬件角度看,在多線程處理器中,本實(shí)施例的方案與現(xiàn)有技術(shù)中的方案相比,節(jié)約了分支預(yù)測硬件資源;從而很好地平衡了分支預(yù)測中資源開銷和準(zhǔn)確率之間的沖突。[0049]實(shí)施例三:[0050]參考圖3,本發(fā)明還提供一種多線程處理器中分支預(yù)測資源的調(diào)度方法,該多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,該多線程處理器包括至少一個(gè)分支預(yù)測部件,如圖3所示,該方法包括:[0051]301、設(shè)置上述至少二個(gè)線程與上述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;[0052]本實(shí)施例中,分支預(yù)測部件可以為模式歷史表PHT或返回地址棧RAS;[0053]302、將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;[0054]其中,上述至少一個(gè)分支預(yù)測部件的數(shù)量小于上述至少二個(gè)線程的數(shù)量;上述至少一個(gè)分支預(yù)測部件包括上述第一分支預(yù)測部件,上述第一線程固定為與上述第一分支預(yù)測部件對應(yīng)的線程中的其中一個(gè);[0055]303、將上述第一分支預(yù)測部件的所有條目置為無效;[0056]在將第一分支預(yù)測部件分配給第一線程獨(dú)享使用之后,由于第一分支預(yù)測部件可能保存著上一個(gè)線程中的分支預(yù)測歷史信息,這些分支預(yù)測歷史信息可能對第一線程的分支預(yù)測沒有用處,因此可將第一分支預(yù)測部件的所有條目(entry)置為無效,以清空對第一線程無用的分支預(yù)測歷史信息;[0057]304、保存指示上述第一分支預(yù)測部件被分配給上述第一線程獨(dú)享使用的分配信息;[0058]305、將第二線程中需要進(jìn)行分支預(yù)測的任務(wù)調(diào)度到上述第一線程進(jìn)行執(zhí)行;上述第二線程為與上述第一分支預(yù)測部件對應(yīng)的線程中的任意一個(gè),且與上述第一線程不同;[0059]本實(shí)施例中,與實(shí)施例二不同的是,對于一個(gè)分支預(yù)測部件,其將被分配給固定的一個(gè)線程獨(dú)享使用,當(dāng)其他線程中存在需要分支預(yù)測的任務(wù)時(shí),為了完成這些任務(wù),可將其他線程中的需要分支預(yù)測的任務(wù)調(diào)度到第一線程中進(jìn)行執(zhí)行。[0060]具體地,如果上述分支預(yù)測部件是PHT,則操作系統(tǒng)可以通過MSR(movegeneralpurposeregistertosystemregister)類型的指令設(shè)置至少二個(gè)線程與至少一個(gè)模式歷史表PHT的對應(yīng)關(guān)系,上述預(yù)先設(shè)置的至少二個(gè)線程與至少一個(gè)模式歷史表PHT的對應(yīng)關(guān)系的信息可以保存在分支線程寄存器(BTR,BranchThreadRegister)中,該分支線程寄存器可以是只寫(Write-only)寄存器;同樣,也可以將指示上述第一PHT被分配給上述第一線程獨(dú)享使用的分配信息保存在分支線程寄存器,每個(gè)PHT可配置一個(gè)BTR用于保存與該P(yáng)HT相關(guān)的對應(yīng)關(guān)系和分配信息。[0061]例如,一個(gè)8線程處理器,其中包括2個(gè)PHT,預(yù)先設(shè)置為:ΡΗΤ0對應(yīng)于threadO、threadl>thread2、thread3,PHTl對應(yīng)于線程thread4、thread5、thread6、thread7。對于ΡΗΤΟ,將其分配給threadO獨(dú)享使用,當(dāng)threadl、thread2、thread3的任意一個(gè)線程中存在需要分支預(yù)測的任務(wù)時(shí),可以將這些需要分支預(yù)測的任務(wù)都調(diào)度到threadO來執(zhí)行,在調(diào)度之前,可將與PHTO的所有條目置為無效。對于PHT1,將其分配給threacM獨(dú)享使用,同樣,當(dāng)thread5、thread6、thread7的任意一個(gè)線程中存在需要分支預(yù)測的任務(wù)時(shí),可以將這些需要分支預(yù)測的任務(wù)都調(diào)度到thread4來執(zhí)行,在調(diào)度之前,可將與PHTl的所有條目置為無效。[0062]具體地,當(dāng)分支預(yù)測部件是RAS時(shí),操作系統(tǒng)可以通過MSR(movegeneralpurposeregistertosystemregister)類型的指令設(shè)置至少二個(gè)線程與至少一個(gè)返回地址棧RAS的對應(yīng)關(guān)系,上述預(yù)先設(shè)置的至少二個(gè)線程與至少一個(gè)返回地址棧RAS的對應(yīng)關(guān)系的信息可以保存在返回地址棧_線程寄存器(RAS_TR,ReturnAddressStack_ThreadRegister)中,該RAS_TR可以是只讀(Read-only)寄存器;同樣,也可以將指示上述第一RAS被分配給上述第一線程獨(dú)享使用的分配信息保存在RAS_TR中,每個(gè)RAS可配置一個(gè)RAS_TR用于保存與該RAS相關(guān)的對應(yīng)關(guān)系和分配信息。[0063]例如,一個(gè)8線程處理器,其中包括2個(gè)RAS,預(yù)先設(shè)置為:RAS0對應(yīng)于threadO、threadl>thread2、thread3,RASl對應(yīng)于線程thread4、thread5、thread6、thread7。對于RASO,將其分配給threadO獨(dú)享使用,對于RASl,將其分配給thread4獨(dú)享使用。如果threadl(或thread2,或thread3)中存在需要進(jìn)行分支預(yù)測的任務(wù),可將該任務(wù)調(diào)度到threadO上進(jìn)行執(zhí)行,在調(diào)度之前,可將與RASO中的內(nèi)容置為無效。同理,也可將thread5(或thread6,或thread7)中的需要分支預(yù)測的任務(wù)調(diào)度到thread4上進(jìn)行執(zhí)行,在調(diào)度之前,也可將與RASl中的內(nèi)容置為無效。[0064]本實(shí)施例中提供的多線程處理器中分支預(yù)測資源的調(diào)度方法,可方便于從操作系統(tǒng)層面對分支資源進(jìn)行靈活的調(diào)度和分配,可控性地進(jìn)行分支預(yù)測,提高了分支預(yù)測的準(zhǔn)確率;從硬件角度看,在多線程處理器中,本實(shí)施例的方案與現(xiàn)有技術(shù)中的方案相比,節(jié)約了分支預(yù)測硬件資源;從而很好地平衡了分支預(yù)測中資源開銷和準(zhǔn)確率之間的沖突。[0065]實(shí)施例四:[0066]本發(fā)明還提供一種多線程處理器中的分支預(yù)測資源的調(diào)度系統(tǒng),該多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,且該多線程處理器包括至少一個(gè)分支預(yù)測部件,如圖4所示,該系統(tǒng)可包括:[0067]設(shè)置單元100,用于設(shè)置上述至少二個(gè)線程與上述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;上述至少一個(gè)分支預(yù)測部件的數(shù)量小于上述至少二個(gè)線程的數(shù)量;[0068]分配單元200,用于將第一分支預(yù)測部件分配給與上述第一分支預(yù)測部件對應(yīng)的第一線程獨(dú)享使用;上述至少一個(gè)分支預(yù)測部件包括上述第一分支預(yù)測部件,上述至少二個(gè)線程包括上述第一線程。[0069]本實(shí)施例中,分支預(yù)測部件可以是模式歷史表PHT或返回地址棧RAS。[0070]本實(shí)施例中提供的多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng)可用于為包括至少一個(gè)分支預(yù)測部件的多線程處理器進(jìn)行分支預(yù)測資源的調(diào)度,本實(shí)施例中,多線程處理器中分支預(yù)測部件的數(shù)量小于多線程處理器的可同時(shí)執(zhí)行的線程的數(shù)量,可節(jié)約硬件開銷,另外,將一個(gè)分支預(yù)測部件分配給多個(gè)線程中的其中一個(gè)線程獨(dú)享使用,也克服了現(xiàn)有技術(shù)中共享分支預(yù)測資源所帶來的線程間的相互干擾的問題,提高了分支預(yù)測的準(zhǔn)確性。[0071]實(shí)施例五:[0072]本發(fā)明還提供一種多線程處理器中的分支預(yù)測資源的調(diào)度系統(tǒng),該多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,且該多線程處理器包括至少一個(gè)分支預(yù)測部件,如圖5所示,該系統(tǒng)可包括:[0073]設(shè)置單元100,用于設(shè)置上述至少二個(gè)線程與上述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;上述至少一個(gè)分支預(yù)測部件的數(shù)量小于上述至少二個(gè)線程的數(shù)量;[0074]分配單元200,用于將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;上述至少一個(gè)分支預(yù)測部件包括上述第一分支預(yù)測部件,上述至少二個(gè)線程包括上述第一線程,上述第一線程為與所述第一分支預(yù)測部件對應(yīng)的線程中優(yōu)先級最高的線程;[0075]優(yōu)先級檢測單元300,與分配單元200連接,用于檢測上述至少二個(gè)線程中各個(gè)線程的優(yōu)先級;[0076]無效單元400,與分配單元200連接,用于在分配單元200將第一分支預(yù)測部件分配給上述第一線程獨(dú)享使用之后,將上述第一分支預(yù)測部件的所有條目置為無效;[0077]保存單元500,與分配單元200連接,用于保存指示上述第一分支預(yù)測部件被分配給上述第一線程獨(dú)享使用的分配信息。[0078]本實(shí)施例中,分支預(yù)測部件可以為模式歷史表PHT或返回地址棧RAS。[0079]具體地,如果上述分支預(yù)測部件是PHT,則操作系統(tǒng)可以通過MSR(movegeneralpurposeregistertosystemregister)類型的指令設(shè)置至少二個(gè)線程與至少一個(gè)模式歷史表PHT的對應(yīng)關(guān)系,上述預(yù)先設(shè)置的至少二個(gè)線程與至少一個(gè)模式歷史表PHT的對應(yīng)關(guān)系的信息可以保存在分支線程寄存器(BTR,BranchThreadRegister)中,該分支線程寄存器可以是只寫(Write-only)寄存器;同樣,也可以將指示上述第一PHT被分配給上述第一線程獨(dú)享使用的分配信息保存在分支線程寄存器,每個(gè)PHT可配置一個(gè)BTR用于保存與該P(yáng)HT相關(guān)的對應(yīng)關(guān)系和分配信息。[0080]例如,一個(gè)8線程處理器,其中包括2個(gè)PHT,預(yù)先設(shè)置為:ΡΗΤ0對應(yīng)于threadO、threadl>thread2、thread3,PHTl對應(yīng)于線程thread4、thread5、thread6、thread7,對于ΡΗΤΟ,將其分配給threadO、threadl、thread2、thread3中優(yōu)先級最高的線程獨(dú)享使用。對于PHT1,將其分配給thread4、thread5、thread6、thread7中優(yōu)先級最高的線程獨(dú)享使用。操作系統(tǒng)可以每隔預(yù)定時(shí)間對各個(gè)線程的優(yōu)先級進(jìn)行判斷,以更新PHT的分配。[0081]當(dāng)然,PHT的分配方式不限于上述的優(yōu)先級高的方式,也可以采用其它分配方式,例如隨機(jī)選擇的分配方式。[0082]具體地,如果分支預(yù)測部件是RAS,則操作系統(tǒng)可以通過MSR(movegeneralpurposeregistertosystemregister)類型的指令設(shè)置至少二個(gè)線程與至少一個(gè)返回地址棧RAS的對應(yīng)關(guān)系,上述預(yù)先設(shè)置的至少二個(gè)線程與至少一個(gè)返回地址棧RAS的對應(yīng)關(guān)系的信息可以保存在返回地址棧_線程寄存器(RAS_TR,ReturnAddressStack_ThreadRegister)中,該RAS_TR可以是只讀(Read-only)寄存器;同樣,也可以將指示上述第一RAS被分配給上述第一線程獨(dú)享使用的分配信息保存在RAS_TR中,每個(gè)RAS可配置一個(gè)RAS_TR用于保存與該RAS相關(guān)的對應(yīng)關(guān)系和分配信息。[0083]例如,一個(gè)8線程處理器,其中包括2個(gè)RAS,預(yù)先設(shè)置為:RAS0對應(yīng)于threadO、threadl>thread2、thread3,RASl對應(yīng)于線程thread4、thread5、thread6、thread7,對于RASO,將其分配給threadO、threadl、thread2、thread3中優(yōu)先級最高的線程獨(dú)享使用。對于RAS1,將其分配給thread4、thread5、thread6、thread7中優(yōu)先級最高的線程獨(dú)享使用。操作系統(tǒng)可以每隔預(yù)定時(shí)間對各個(gè)線程的優(yōu)先級進(jìn)行判斷,以更新RAS的分配。[0084]當(dāng)然,RAS的分配方式不限于上述的優(yōu)先級高的方式,也可以采用其它分配方式,例如隨機(jī)選擇的分配方式。[0085]本實(shí)施例中提供的多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng),可方便于從操作系統(tǒng)層面對分支資源進(jìn)行靈活的調(diào)度和分配,可控性地進(jìn)行分支預(yù)測,提高了分支預(yù)測的準(zhǔn)確率;從硬件角度看,在多線程處理器中,本實(shí)施例的方案與現(xiàn)有技術(shù)中的方案相比,節(jié)約了分支預(yù)測硬件資源;從而很好地平衡了分支預(yù)測中資源開銷和準(zhǔn)確率之間的沖突。[0086]實(shí)施例六:[0087]本發(fā)明還提供一種多線程處理器中的分支預(yù)測資源的調(diào)度系統(tǒng),該多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,且該多線程處理器包括至少一個(gè)分支預(yù)測部件,如圖6所示,該系統(tǒng)可包括:[0088]設(shè)置單元100,用于設(shè)置上述至少二個(gè)線程與上述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;上述至少一個(gè)分支預(yù)測部件的數(shù)量小于上述至少二個(gè)線程的數(shù)量;[0089]分配單元200,用于將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;上述至少一個(gè)RAS包括上述第一RAS,上述至少二個(gè)線程包括上述第一線程,且上述第一線程固定為與上述第一分支預(yù)測部件對應(yīng)的線程中的其中一個(gè);[0090]無效單元400,與分配單元200連接,用于在分配單元200將第一分支預(yù)測部件分配給上述第一線程獨(dú)享使用之后,將上述第一分支預(yù)測部件的所有條目置為無效;[0091]保存單元500,與分配單元200連接,用于保存指示上述第一分支預(yù)測部件被分配給上述第一線程獨(dú)享使用的分配信息;[0092]調(diào)度單元600,與保存單元500連接,用于將第二線程中需要進(jìn)行分支預(yù)測的任務(wù)調(diào)度到上述第一線程進(jìn)行執(zhí)行;上述第二線程為與上述第一分支預(yù)測部件對應(yīng)的線程中的任意一個(gè),且與上述第一線程不同。[0093]本實(shí)施例中,與實(shí)施例五不同的是,對于一個(gè)分支預(yù)測部件,其將被分配給固定的一個(gè)線程獨(dú)享使用,當(dāng)其他線程中存在需要分支預(yù)測的任務(wù)時(shí),為了完成這些任務(wù),可將其他線程中的需要分支預(yù)測的任務(wù)調(diào)度到第一線程中進(jìn)行執(zhí)行。[0094]具體地,如果上述分支預(yù)測部件是PHT,則操作系統(tǒng)可以通過MSR(movegeneralpurposeregistertosystemregister)類型的指令設(shè)置至少二個(gè)線程與至少一個(gè)模式歷史表PHT的對應(yīng)關(guān)系,上述預(yù)先設(shè)置的至少二個(gè)線程與至少一個(gè)模式歷史表PHT的對應(yīng)關(guān)系的信息可以保存在分支線程寄存器(BTR,BranchThreadRegister)中,該分支線程寄存器可以是只寫(Write-only)寄存器;同樣,也可以將指示上述第一PHT被分配給上述第一線程獨(dú)享使用的分配信息保存在分支線程寄存器,每個(gè)PHT可配置一個(gè)BTR用于保存與該P(yáng)HT相關(guān)的對應(yīng)關(guān)系和分配信息。[0095]例如,一個(gè)8線程處理器,其中包括2個(gè)PHT,預(yù)先設(shè)置為:ΡΗΤ0對應(yīng)于threadO、threadl>thread2、thread3,PHTl對應(yīng)于線程thread4、thread5、thread6、thread7。對于ΡΗΤΟ,將其分配給threadO獨(dú)享使用,當(dāng)threadl、thread2、thread3的任意一個(gè)線程中存在需要分支預(yù)測的任務(wù)時(shí),可以將這些需要分支預(yù)測的任務(wù)都調(diào)度到threadO來執(zhí)行,在調(diào)度之前,可將與PHTO的所有條目置為無效。對于PHTl,將其分配給threacM獨(dú)享使用,同樣,當(dāng)thread5、thread6、thread7的任意一個(gè)線程中存在需要分支預(yù)測的任務(wù)時(shí),可以將這些需要分支預(yù)測的任務(wù)都調(diào)度到threacM來執(zhí)行,在調(diào)度之前,可將與PHTl的所有條目置為無效。[0096]具體地,當(dāng)分支預(yù)測部件是RAS時(shí),操作系統(tǒng)可以通過MSR(movegeneralpurposeregistertosystemregister)類型的指令設(shè)置至少二個(gè)線程與至少一個(gè)返回地址棧RAS的對應(yīng)關(guān)系,上述預(yù)先設(shè)置的至少二個(gè)線程與至少一個(gè)返回地址棧RAS的對應(yīng)關(guān)系的信息可以保存在返回地址棧_線程寄存器(RAS_TR,ReturnAddressStack_ThreadRegister)中,該RAS_TR可以是只讀(Read-only)寄存器;同樣,也可以將指示上述第一RAS被分配給上述第一線程獨(dú)享使用的分配信息保存在RAS_TR中,每個(gè)RAS可配置一個(gè)RAS_TR用于保存與該RAS相關(guān)的對應(yīng)關(guān)系和分配信息。[0097]例如,一個(gè)8線程處理器,其中包括2個(gè)RAS,預(yù)先設(shè)置為:RAS0對應(yīng)于threadO、threadl>thread2、thread3,RASl對應(yīng)于線程thread4、thread5、thread6、thread7。對于RASO,將其分配給threadO獨(dú)享使用,對于RASl,將其分配給thread4獨(dú)享使用。如果threadl(或thread2,或thread3)中存在需要進(jìn)行分支預(yù)測的任務(wù),可將該任務(wù)調(diào)度到threadO上進(jìn)行執(zhí)行,在調(diào)度之前,可將與RASO中的內(nèi)容置為無效。同理,也可將thread5(或thread6,或thread7)中的需要分支預(yù)測的任務(wù)調(diào)度到thread4上進(jìn)行執(zhí)行,在調(diào)度之前,也可將與RASl中的內(nèi)容置為無效。[0098]本實(shí)施例中提供的多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng),可方便于從操作系統(tǒng)層面對分支資源進(jìn)行靈活的調(diào)度和分配,可控性地進(jìn)行分支預(yù)測,提高了分支預(yù)測的準(zhǔn)確率;從硬件角度看,在多線程處理器中,本實(shí)施例的方案與現(xiàn)有技術(shù)中的方案相比,節(jié)約了分支預(yù)測硬件資源;從而很好地平衡了分支預(yù)測中資源開銷和準(zhǔn)確率之間的沖突。[0099]實(shí)施例七:[0100]本發(fā)明還提供一種多線程處理器,所述多線程處理器包括:[0101]至少一個(gè)分支預(yù)測部件以及如實(shí)施例四或?qū)嵤├寤驅(qū)嵤├龅姆种ьA(yù)測資源的調(diào)度系統(tǒng)。[0102]上述分支預(yù)測部件可以是PHT或RAS。[0103]該多線程處理器可以進(jìn)行分支跳轉(zhuǎn)方向和/或返回地址的預(yù)測,具體地,可參考實(shí)施例四或五或六的描述,在此不予贅述。[0104]需要說明的是,以上各實(shí)施例均基于同一發(fā)明構(gòu)思,在各實(shí)施例中描述各有側(cè)重,個(gè)別實(shí)施例描述未詳盡之處,可參考其他實(shí)施例中的描述。[0105]本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:閃存盤、只讀存儲(chǔ)器(Read-OnlyMemory,ROM)、隨機(jī)存取器(RandomAccessMemory,RAM)、磁盤或光盤等。[0106]以上對本發(fā)明實(shí)施例所提供的多線程處理器中分支預(yù)測資源的調(diào)度方法、系統(tǒng)和多線程處理器進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。【權(quán)利要求】1.一種多線程處理器中分支預(yù)測資源的調(diào)度方法,其特征在于,所述多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,所述多線程處理器包括至少一個(gè)分支預(yù)測部件,所述方法包括:設(shè)置所述至少二個(gè)線程與所述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;所述至少一個(gè)分支預(yù)測部件的數(shù)量小于所述至少二個(gè)線程的數(shù)量,所述至少一個(gè)分支預(yù)測部件包括所述第一分支預(yù)測部件,所述至少二個(gè)線程包括所述第一線程。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括:將所述第一分支預(yù)測部件的所有條目置為無效;保存指示所述第一分支預(yù)測部件被分配給所述第一線程獨(dú)享使用的分配信息。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述將第一分支預(yù)測部件分配給第一線程獨(dú)享使用之前,所述方法還包括:檢測所述至少二個(gè)線程中各個(gè)線程的優(yōu)先級;所述第一線程為與所述第一分支預(yù)測部件對應(yīng)的線程中優(yōu)先級最高的線程。4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述第一線程為與所述第一分支預(yù)測部件對應(yīng)的線程中的其中一個(gè);在所述將第一分支預(yù)測部件分配給第一線程獨(dú)享使用之后,所述方法還包括:將第二線程中需要進(jìn)行分支預(yù)測的任務(wù)調(diào)度到所述第一線程進(jìn)行執(zhí)行;所述第二線程為與所述第一分支預(yù)測部件對應(yīng)的線程中的任意一個(gè),且與所述第一線程不同。5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于,所述分支預(yù)測部件為返回地址?;蚰J綒v史表。6.一種多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng),其特征在于,所述多線程處理器能夠同時(shí)執(zhí)行至少二個(gè)線程,所述多線程處理器包括至少一個(gè)分支預(yù)測部件,所述系統(tǒng)包括:設(shè)置單元,用于設(shè)置所述至少二個(gè)線程與所述至少一個(gè)分支預(yù)測部件的對應(yīng)關(guān)系;所述至少一個(gè)分支預(yù)測部件的數(shù)量小于所述至少二個(gè)線程的數(shù)量;分配單元,用于將第一分支預(yù)測部件分配給第一線程獨(dú)享使用;所述至少一個(gè)分支預(yù)測部件包括所述第一分支預(yù)測部件,所述至少二個(gè)線程包括所述第一線程。7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括:無效單元,與所述分配單元連接,用于在所述分配單元將第一分支預(yù)測部件分配給所述第一線程獨(dú)享使用之后,將所述第一分支預(yù)測部件的所有條目置為無效;保存單元,與所述分配單元連接,用于保存指示所述第一分支預(yù)測部件被分配給所述第一線程獨(dú)享使用的分配信息。8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括:優(yōu)先級檢測單元,與所述分配單元連接,用于檢測所述至少二個(gè)線程中各個(gè)線程的優(yōu)先級;所述第一線程為與所述第一分支預(yù)測部件對應(yīng)的線程中優(yōu)先級最高的線程。9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述第一線程為與所述第一分支預(yù)測部件對應(yīng)的線程中的其中一個(gè);所述系統(tǒng)還包括:調(diào)度單元,與所述保存單元連接,用于將第二線程中需要進(jìn)行分支預(yù)測的任務(wù)調(diào)度到所述第一線程進(jìn)行執(zhí)行;所述第二線程為與所述第一分支預(yù)測部件對應(yīng)的線程中的任意一個(gè),且與所述第一線程不同。10.根據(jù)權(quán)利要求6-9任一項(xiàng)所述的系統(tǒng),其特征在于,所述分支預(yù)測部件為返回地址?;蚰J綒v史表。11.一種多線程處理器,其特征在于,所述多線程處理器包括:至少一個(gè)分支預(yù)測部件以及如權(quán)利要求6-10任一項(xiàng)所述的多線程處理器中分支預(yù)測資源的調(diào)度系統(tǒng)?!疚臋n編號】G06F9/50GK104424032SQ201310386082【公開日】2015年3月18日申請日期:2013年8月29日優(yōu)先權(quán)日:2013年8月29日【發(fā)明者】侯銳,馮煜晶,郭旭斌,蘇東鋒申請人:華為技術(shù)有限公司,中國科學(xué)院計(jì)算技術(shù)研究所