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