專利名稱:用于多線程處理器的線程去加重指令的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及多線程處理器,并且尤其涉及多線程處理器的線
程管理。
背景技術(shù):
由于高速緩存未命中(cache misses)或其他存儲器事務(wù)而引發(fā)的指令流水線停止(stall),可能降低處理器的效率。該問題在多線程處理器中尤為嚴(yán)重,由于一個線程引起的指令流水線停止可能延遲其他線程的執(zhí)行。有些處理器獨立于程序流對停止的指令流水線進(jìn)行監(jiān)視,并且響應(yīng)于停止,而許可除了引起停止的線程之外的線程在流水線中被執(zhí)行的優(yōu)先級。然而,在指令流水線中監(jiān)視停止通常是困難的,并且需要額外的處理器開銷。因此,需要一種改進(jìn)的技術(shù),用于在多線程處理器中向線程分配處理器資源。
圖1是數(shù)據(jù)處理設(shè)備的具體實施例的框圖2是圖1中處理器的具體實施例的框圖3是圖2中線程優(yōu)先級模塊的具體實施例的框圖4是描述調(diào)度線程的方法的具體實施例的圖表;
圖5是描述調(diào)度線程的方法的另一具體實施例的圖表;以及[OOOS]圖6是描述調(diào)度線程的示例方法的具體實施例的圖表。
具體實施例方式公開了一種在處理器中調(diào)度線程的執(zhí)行的技術(shù)。該技術(shù)包括執(zhí)行線程的線程去加重(de-emphasis)指令,其對線程進(jìn)行去加重,直到與線程相關(guān)聯(lián)的未決存儲器事務(wù),諸如高速緩存未命中,的數(shù)目等于或小于閾值。當(dāng)線程被去加重時,在處理器中具有較高優(yōu)先級的其他線程可以被執(zhí)行或被指配系統(tǒng)資源。因此,降低了處理器中停止的可能性。在一個實施例中,線程去加重指令是程序流中的這樣一種指令該指令在與第一線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目超過閾值時,通過改變第一線程的優(yōu)先級狀況來對第一線程進(jìn)行去加重。 一旦未決存儲器事務(wù)的數(shù)目等于或低于閾值,即可以恢復(fù)第一線程的優(yōu)先級狀
況。閾值可以基于線程去加重指令的操作對象(opemnd),或可以基于預(yù)定值。在具體實施例中,閾值是零,從而線程去加重指令對線程進(jìn)行去加重,直到已經(jīng)解決了所有與線程相關(guān)聯(lián)的未決存儲器事務(wù)。例如,可以針對特定的存儲器事務(wù)類型對線程進(jìn)行去加重。線程去加重指令可以基于與線程相關(guān)聯(lián)的高速緩存未命中數(shù)目來對該線程進(jìn)行去加重。另一種線程去加重指令可以基于與線程相關(guān)聯(lián)的不可高速緩存的存儲器訪問的數(shù)目(即,對標(biāo)識為不可高速緩存的地址進(jìn)行的存儲器訪問的數(shù)目)來對線程進(jìn)行去加重??商娲鷮嵤├梢曰诔舜鎯ζ魇聞?wù)的數(shù)目之外的特性來對線程進(jìn)行去加重。此外,可替代實施例可以通過改變除了線程優(yōu)先級狀況之外的線程特性,諸如改變與線程相關(guān)聯(lián)的"可直接運行(ready-to-mn)"比特,來對線程進(jìn)行去加重。相比其他線程,去加重線程被給予較低的處理器資源優(yōu)先級。例如,如果處理器采用粗粒度多線程,使得在某一時間只有一個線程被指配到指令流水線,那么去加重線程將不會在指令流水線中被執(zhí)行,直到它相對其他線程不再被去加重。如果處理器采用細(xì)粒度多線程,使得在某一時間與不同線程相關(guān)聯(lián)的指令可以在指令流水線的不同級被執(zhí)行,那么與去加重程序相關(guān)聯(lián)的指令不在指令流水線的特定級被執(zhí)行,直到執(zhí)行了與在該級未決的較高優(yōu)先級的線程相關(guān)聯(lián)的指令。此外,在指令流水線的某些級,去加重線程可以比其他線程具有更低的優(yōu)先級,但在其他級仍保持其優(yōu)先級。去加重線程也可以在其他處理器資源的分配中被給予較低的優(yōu)先級。例如,針對高速緩存訪問、存儲隊列訪問、完成緩沖條目、指令獲取等,去加重線程可被給予較低的優(yōu)先級。此外,線程可以相對于某些線程被去加重,但相對于其他線程仍維持優(yōu)先級。參考圖1,描述了數(shù)據(jù)處理設(shè)備100的具體實施例的框圖。數(shù)據(jù)處理設(shè)備IOO包括處理器102、存儲器控制器104、以及存儲器106。處理器102和存儲器控制器分別連接到總線105。存儲器106包括與存儲器控制器104的雙向連接。存儲器控制器104經(jīng)由總線105接收存儲器訪問信息,并且基于該信息來訪問存儲器106。存儲器106可以存儲軟件程序和例程,其包括用于在處理器102中執(zhí)行的指令。存儲器106可以是易失性存儲器,諸如RAM存儲器,或非易失性存儲器,諸如閃速存儲器或硬盤驅(qū)動器。在特定實施例中,存儲器106和存儲器控制器104集成在與處理器102相同的半導(dǎo)體襯底上。在另一具體實施例中,存儲器106處在與處理器102和存儲器控制器104分離的半導(dǎo)體襯底上。處理器102可以是微處理器、微控制器、ASIC等等。該處理器102是多線程處理器,其被配置用于執(zhí)行多個線程。線程可以與不同的軟件程序或例程相關(guān)聯(lián),或者可以與單個軟件程序或程序或其組合的不同任務(wù)相關(guān)聯(lián)。在圖1所示的實施例中,處理器102包括指令高速緩存110、線程控制模塊!12、指令流水線U4和數(shù)據(jù)高速緩存116。指令高速緩存110對于指令流水線114和線程控制模塊112是可訪問的。指令流水線U4對于線程控制模塊112是可訪問的。此外,數(shù)據(jù)高速緩存116對于指令流水線114是可訪問的。
8
指令高速緩存IIO存儲指令數(shù)據(jù),該指令數(shù)據(jù)表示要在處理器102中執(zhí)行的指令。高速緩存的指令數(shù)據(jù)可以是存儲在存儲器106中的軟件程序數(shù)據(jù)的拷貝。指令流水線U4執(zhí)行指令,以執(zhí)行任務(wù),諸如存儲器訪問、算術(shù)運算等等。例如,響應(yīng)于特定的指令,指令流水線114可以訪問數(shù)據(jù)高速緩存116以檢索數(shù)據(jù)。響應(yīng)于另一指令,指令流水線114可以經(jīng)由存儲器控制器104從存儲器106中請求數(shù)據(jù),并將請求的數(shù)據(jù)存儲在數(shù)據(jù)高速緩存116中。線程控制模塊112存儲用于指示每個線程的狀況的狀態(tài)信息,包括每個線程的優(yōu)先級狀況。基于每個線程的優(yōu)先級狀況和其他屬性,線程控制模塊112分配處理器102的資源,諸如通過調(diào)度在指令流水線114中執(zhí)行線程的順序。線程控制模塊112也跟蹤與每個線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目。指令高速緩存IIO包括明確的線程去加重指令120。在線程去加重指令120的執(zhí)行過程中,指令流水線114通知線程控制模塊112,
第--線程的優(yōu)先級應(yīng)該已被去加重,直到與第一線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目等于或低于閾值。在特定實施例中,線程去加重指令i20具有無操作(no-op)指令的特殊形式,其指示線程應(yīng)被去加重,直到?jīng)]有與該線程相關(guān)聯(lián)的存儲器事務(wù)是未決的。響應(yīng)于指令流水線114中線程去加重指令120的執(zhí)行,線程控制模塊112調(diào)整第一線程的優(yōu)先級狀態(tài),以相對于其他線程對該線程進(jìn)行去加重。在特定實施例中,這是通過清除與該線程相關(guān)聯(lián)的"可直接運行"比特來實現(xiàn)的。只要該比特被清除,該線程將被給予低的執(zhí)行優(yōu)先級。即使當(dāng)該比特被清除時,線程控制模塊仍可以針對該線程跟蹤其他的優(yōu)先級信息,使得當(dāng)可直接運行比特被設(shè)置時,給予該線程適當(dāng)?shù)膬?yōu)先級。此外,線程控制模塊112監(jiān)視指令流水線114,并且跟蹤與第一線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目。 一旦已經(jīng)解決了由線程去加重指令120指示的未決存儲器事務(wù)的數(shù)目,線程控制模塊112即設(shè)置優(yōu)先級狀態(tài)使得第一線程不再被去加重。因此,線程去加重指令120可用于對特定的線程進(jìn)行去加重,直到與該線程相關(guān)聯(lián)的存儲器事務(wù)數(shù)目等于或低于閾值。這允許程序員或編譯器有效地分配指令流水線114的資源。例如,線程去加重指令120可以在用戶認(rèn)為將導(dǎo)致指令流水線114的停止的指令之后或之前的線程的程序流中實施,諸如在一系列加載指令之后,其可導(dǎo)致大量的高速緩存未命中。線程被去加重,直到解決了與加載指令相關(guān)聯(lián)的存儲器事務(wù),當(dāng)存儲器事務(wù)正在解決時,允許指令流水線114執(zhí)行與其他線程相關(guān)聯(lián)的指令。參考圖2,示出了對應(yīng)于諸如圖1的處理器102的處理器的處理器202的框圖。處理器202包括指令高速緩存210、線程控制模塊212、指令流水線214和數(shù)據(jù)高速緩存216。指令高速緩存210可由線程控制模塊212經(jīng)由總線296訪問以及可由指令流水線214訪問。數(shù)據(jù)高速緩存216可由指令流水線214訪問。指令高速緩存210包括與線程相關(guān)聯(lián)的指令集合,包括線程A指令221和線程B指令222。線程A指令221包括線程去加重指令220,以相對于線程B對線程A進(jìn)行去加重,直到與線程A相關(guān)聯(lián)的未決存儲器事務(wù)已經(jīng)得到解決。線程控制模塊212包括連接到線程優(yōu)先級模塊235的線程調(diào)度器模塊230。線程優(yōu)先級模塊235包括連接到總線290的輸入,以接收已經(jīng)完成了線程的存儲器事務(wù)的指示。該線程調(diào)度器模塊230包括連接到總線291、總線292、總線293、總線294、總線295及總線296的輸出。該線程調(diào)度器模塊230在每個總線291-296上提供控制信息,用于在指令流水線214的各級調(diào)度指令的執(zhí)行。線程優(yōu)先級模塊235針對處理器202中的每個線程存儲優(yōu)先級狀態(tài)信息,包括線程A和線程B,并且基于優(yōu)先級狀態(tài)信息,將優(yōu)先級狀況信息提供給線程調(diào)度器模塊230?;趦?yōu)先級狀況信息,線程調(diào)度器模塊230在總線291-296上提供控制信息,用于在指令流水線214的各級調(diào)度指令的執(zhí)行。指令流水線214包括指令獲取級240、解碼級242、調(diào)遣級244和加載/存儲單元246、執(zhí)行單元248和執(zhí)行單元249。執(zhí)行單元248和249可以是加載/存儲單元、浮點運算單元、整數(shù)運算單元等等。指令流水線214還包括緩沖器250-254。指令獲取級240包括連接到指令高速緩存210的輸入和輸出。緩沖器250包括連接到指令獲取級240的輸出的輸入、連接到總線295的輸入、和輸出。解碼級242包括連接到緩沖器250的輸入和輸出。緩沖器251包括連接到解碼級240的輸出的輸入、連接到總線294的輸入、和輸出。調(diào)遣級244包括連接到緩沖器251的輸出的輸入和三個輸出。緩沖器252包括連接到調(diào)遣級244的第一輸出的輸入、連接到總線292的輸入、和輸出。加載/存儲單元246包括連接到緩沖器251的輸出的輸入、至總線290的連接和至數(shù)據(jù)高速緩存216的連接。緩沖器253包括連接到調(diào)遣級244的第二輸出的輸入、連接到總線293的輸入、和輸出。執(zhí)行單元248包括連接到緩沖器253的輸出的輸入。緩沖器254包括連接到調(diào)遣級244的第三輸出的輸入、連接到總線291的輸入、和輸出。執(zhí)行單元249包括連接到緩沖器254的輸出的輸入。
指令獲取級240從指令高速緩存210獲取指令數(shù)據(jù)并且向緩沖器250提供所獲取的指令數(shù)據(jù)?;诮?jīng)由總線293接收到的控制信息,解碼部分242訪問來自緩沖器250的指令。解碼級242對在緩沖器250中訪問的指令進(jìn)行解碼,并將解碼指令提供給緩沖器251?;诮?jīng)由總線292接收到的控制信息,調(diào)遣級訪問在緩沖器251中的解碼指令。調(diào)遣級244確定加載/存儲單元246、執(zhí)行單元248、和執(zhí)行單元249中的哪個執(zhí)行單元,并基于該確定將解碼指令發(fā)送到緩沖器252-254之一。緩沖器252存儲由調(diào)遣級244提供的解碼指令?;诮?jīng)由總線292提供的控制信息,加載/存儲單元246訪問解碼指令?;趶木彌_器252接收到的指令,加載/存儲單元246在數(shù)據(jù)高速緩存216處執(zhí)行加載和存儲操作。此外,加載/存儲單元可對處理器202外部的存儲器執(zhí)行加載和存儲操作。例如,當(dāng)數(shù)據(jù)高速緩存216處發(fā)生高速緩存未命中時,加載/存儲單元通過從數(shù)據(jù)高速緩存216的外部存儲器加載與高速緩存未命中相關(guān)聯(lián)的數(shù)據(jù)來解決高速緩存未命中。而且,加載/存儲經(jīng)由總線2 90提供關(guān)于每個線程的未決存儲器事務(wù)的信息。例如,在與某線程相關(guān)聯(lián)的高速緩存未命中得到解決之后,加載/存儲單元246經(jīng)由總線290提供這樣的信息該信息指示與該線程相關(guān)聯(lián)的未決高速緩存未命中的數(shù)目已減小了一。緩沖器253存儲由調(diào)遣級244提供的解碼指令?;诮?jīng)由總線293提供的控制信息,執(zhí)行單元248訪問解碼指令。執(zhí)行單元248執(zhí)行由緩沖器253提供的指令。緩沖器254存儲由調(diào)遣級244提供的解碼指令?;诮?jīng)由總線291提供的控制信息,執(zhí)行單元249訪問解碼指令。執(zhí)行單元249執(zhí)行在緩沖器254中訪問的指令。在操作過程中,線程調(diào)度器模塊230從線程優(yōu)先級模塊235接收優(yōu)先級信息。基于該優(yōu)先級信息,線程調(diào)度器模塊230向緩沖器250-254以及指令高速緩存210提供控制信息,以控制處理器資源的分配,包括在指令流水線214的每級執(zhí)行線程指令的順序。例如,基于接收到的優(yōu)先級信息,線程調(diào)度器模塊230可以確定在解碼級242中,應(yīng)當(dāng)給予線程A指令221比線程B指令222高的優(yōu)先級。因此,線程調(diào)度器模塊230經(jīng)由總線295向緩沖器250提供控制信息,使得存儲在緩沖器250中的線程A指令在存儲在緩沖器250的線程B指令被提供之前被提供給解碼級242。因此,通過向指令高速緩存210和緩沖器250-254提供適當(dāng)控制信息,線程調(diào)度器模塊230控制在指令流水線214的每級執(zhí)行線程指令的順序。線程調(diào)度器模塊230基于存儲在線程優(yōu)先級模塊235中的優(yōu)先級信息,確定線程指令的執(zhí)行順序。在加載/存儲單元246中通過執(zhí)行線程去加重指令220,可以改變線程優(yōu)先級信息。響應(yīng)于線程去加重指令220的執(zhí)行,加載/存儲單元246向線程優(yōu)先級模塊235提供這樣的信息該信息指示線程A應(yīng)被去加重,直到與該線程相關(guān)聯(lián)的未決存儲器事務(wù)數(shù)目低于閾值。加載/存儲單元246也可以基于線程去加重指令220的操作對象,提供用于設(shè)置該閾值的信息。作為響應(yīng),線程優(yōu)先級模塊235確定與線程A相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目,并且如果該數(shù)目超過閾值,則改變與線程A相關(guān)聯(lián)的優(yōu)先級狀態(tài),以便使其相對于線程B去加重。當(dāng)加載/存儲單元246解決了與線程A相關(guān)聯(lián)的未決存儲器事務(wù)時,它經(jīng)由總線2卯通知線程優(yōu)先級模塊235。作為響應(yīng),線程優(yōu)先級模塊235調(diào)整與線程A相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目,并且當(dāng)存儲器事務(wù)的數(shù)目低于閾值時,調(diào)整線程A的優(yōu)先級狀態(tài),以使它相對于線程B不再被去加重。因此,當(dāng)未決存儲器事務(wù)的數(shù)目下滑至低于閾值時,線程A的優(yōu)先級狀況自動恢復(fù)到其以前的狀況。參考圖3,圖3示出對應(yīng)于圖2的線程優(yōu)先級模塊235的線
13程優(yōu)先級模塊335的框圖。線程優(yōu)先級模塊335包括存儲器事務(wù)控制 模塊302、存儲器事務(wù)寄存器集合304、存儲器事務(wù)計數(shù)器集合306、 優(yōu)先級狀況寄存器集合308、和優(yōu)先級確定模塊310。存儲器事務(wù)控制 模塊302包括至存儲器事務(wù)寄存器集合304以及至存儲器事務(wù)計數(shù)器 集合306的雙向連接。存儲器事務(wù)控制模塊還包括來自加載/存儲單元 246 (圖2)的輸入和輸出。優(yōu)先級狀況寄存器集合308包括連接到存 儲器事務(wù)控制模塊302的輸出的輸入和輸出。優(yōu)先級確定模塊310包 括連接到優(yōu)先級狀況寄存器集合308的輸出的輸入和連接到線程調(diào)度 器模塊230的輸出(圖2)。存儲器事務(wù)控制模塊302被配置用于接收來自加載/存儲單 元246的控制信息,并且基于該信息對存儲在存儲器事務(wù)寄存器集合 304中、存儲器事務(wù)計數(shù)器集合306中、以及優(yōu)先級狀況寄存器集合 308中的值進(jìn)行適當(dāng)調(diào)整。存儲器事務(wù)寄存器集合304包括寄存器320,其用于存儲與 線程A相關(guān)聯(lián)的存儲器事務(wù)的閾值,和寄存器321,其用于存儲與線 程B相關(guān)聯(lián)的存儲器事務(wù)的閾值,存儲在寄存器320和321中的存儲 器事務(wù)的閾值可以基于加載/存儲單元246提供的信息,通過存儲器事 務(wù)控制模塊302被設(shè)置,例如基于線程去加重指令的操作對象的信息。 在另一實施例中,存儲器事務(wù)閾值是由ROM存儲器、操作系統(tǒng)等等固 定的值。存儲器事務(wù)計數(shù)器集合306包括計數(shù)器330,其存儲與線程 A相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目,以及計數(shù)器331,其存儲與線程B 相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目。存儲器事務(wù)控制模塊302可以單獨 地調(diào)整存儲在計數(shù)器330和331中的值。優(yōu)先級狀況寄存器集合308包括寄存器340,其存儲與線程 A相關(guān)聯(lián)的優(yōu)先級狀況信息,以及寄存器341,其存儲與線程B相關(guān)聯(lián)的優(yōu)先級狀況信息。存儲器事務(wù)控制模塊302可以單獨地調(diào)整存儲在
寄存器340和341中的狀態(tài)信息。優(yōu)先級確定模塊基于存儲在寄存器340和341中的優(yōu)先級狀 況狀態(tài)信息,確定線程A和線程B的優(yōu)先級?;诿總€線程的優(yōu)先級, 優(yōu)先級確定模塊向線程調(diào)度器模塊230提供控制信息,以使與每個線 程相關(guān)聯(lián)的指令以適當(dāng)?shù)捻樞蛟谥噶盍魉€214的每級被執(zhí)行(圖2)。在操作過程中,存儲器事務(wù)控制模塊302接收來自加載/存 儲單元246的信息,該信息指示與線程相關(guān)聯(lián)的存儲器事務(wù)未決,或 者指示與線程相關(guān)聯(lián)的存儲器事務(wù)已得到解決。作為響應(yīng),存儲器事 務(wù)控制模塊302調(diào)整存儲在存儲器事務(wù)計數(shù)器集合306中的值。例如,加載Z存儲單元246可以向存儲器事務(wù)控制模塊302 指示由于與線程A相關(guān)聯(lián)的指令發(fā)生了高速緩存未命中。作為響應(yīng), 存儲器事務(wù)控制模塊302調(diào)整存儲在計數(shù)器330中的值,以反映該高 速緩存未命中未決。在該高速緩存未命中解決之后(即通過從外部存 儲器獲得數(shù)據(jù)并將其加載到數(shù)據(jù)高速緩存216 (圖2)),加載/存儲單 元246向存儲器事務(wù)控制模塊302指示高速緩存未命中已解決。作為 響應(yīng),存儲器事務(wù)控制模塊302調(diào)整存儲在計數(shù)器330中的值,以反 映該存儲器事務(wù)已得到解決。因此,存儲在計數(shù)器330和331中的值 反映與線程A和線程B分別相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目。此外,加載/存儲單元246可以向存儲器事務(wù)控制模塊302 提供信息,該信息指示已經(jīng)接收到與線程相關(guān)聯(lián)的線程去加重指令。 作為響應(yīng),存儲器事務(wù)控制模塊302將如存儲器事務(wù)計數(shù)器集合306 所反映的與線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目和如存儲器事務(wù)計數(shù) 器集合304所反映的與該線程相關(guān)聯(lián)的存儲器事務(wù)閾值相比較。基于 比較結(jié)果,存儲器事務(wù)控制模塊302通過在優(yōu)先級狀況寄存器308中 調(diào)整線程的狀況狀態(tài),來調(diào)整線程的優(yōu)先級。
15
例如,如果線程去加重指令與線程B相關(guān)聯(lián),則存儲器事 務(wù)控制模塊302將存儲在計數(shù)器331中的值和存儲在寄存器321中的 閾值進(jìn)行比較。如果比較表明,與線程B相關(guān)聯(lián)的未決存儲器事務(wù)的 數(shù)目超過閾值,則存儲器事務(wù)控制模塊302調(diào)整寄存器321所存儲的 值,以使線程B去加重。參考圖4 ,圖4示出了調(diào)度線程執(zhí)行的方法的具體實施例的 圖示。在框402中,在時間to基于每個線程的優(yōu)先級狀況執(zhí)行線程。 在示出的示例中,線程A的優(yōu)先級高于線程B,使得線程A指令在線 程B指令之前執(zhí)行。在框404中,在時間t,處理線程A中的線程去加重指令。 該線程去加重指令的執(zhí)行導(dǎo)致線程A的去加重,從而給予線程B最高 優(yōu)先級。因此,在框406中,線程A的執(zhí)行被暫停,直到與線程A相 關(guān)聯(lián)的未決存儲器事務(wù)已經(jīng)得到解決。因此,在示出的實施例中,在 時間12只有線程B指令被執(zhí)行,直到線程A的未決存儲器事務(wù)己經(jīng)得 到解決。進(jìn)行至框408,在線程A的未決存儲器事務(wù)已經(jīng)得到解決 之后,在時間13恢復(fù)線程A的優(yōu)先級狀況。因此,如圖所示線程A重 新獲得高于線程B的執(zhí)行優(yōu)先級。參考圖5,圖5示出了調(diào)度線程執(zhí)行的方法的另一個具體實 施例的圖示。在框502,在時間tc基于每個線程的優(yōu)先級狀況執(zhí)行線程。 在示出的示例中,線程A的優(yōu)先級高于線程B和C,而線程B的優(yōu)先 級高于線程C。 . .在框504中,在時間t,接收到針對線程A的線程去加重指 令,導(dǎo)致線程A的去加重。因此,在框506中,線程A被去加重,直到與線程A相關(guān)聯(lián)的未決存儲器事務(wù)已經(jīng)得到解決。因此,在示出的
示例中,在框506中,在時間t2線程B具有高于線程A的執(zhí)行優(yōu)先級。 然而,線程A的優(yōu)先級仍保持高于線程C。因此,在示出的示例中, 可以相對于其他線程單獨地對線程進(jìn)行去加重。進(jìn)行至框508,在線程A的未決存儲器事務(wù)已經(jīng)得到解決 之后,在時間13恢復(fù)線程A的優(yōu)先級狀況。因此,如圖所示線程A的 優(yōu)先級重新獲得高于線程B的優(yōu)先級。參考圖6,圖6示出了在指令流水線中調(diào)度線程執(zhí)行的示 例性方法602和604的框圖。方法602描述了在沒有線程去加重指令 時指令流水線中的線程調(diào)度。相反,方法604描述了當(dāng)從線程A執(zhí)行 線程去加重指令時,在指令流水線中的線程調(diào)度。如圖所示,對于兩 種方法602和604,在缺少明確的去加重的情況下,線程A通常具有 高干線程B的優(yōu)先級。參考方法602,在框610,在指令高速緩存中存儲兩個指令, 第一個與線程A相關(guān)聯(lián),第二個與線程B相關(guān)聯(lián)。在框612中,根據(jù) 每個指令的當(dāng)前優(yōu)先級,指令流水線的獲取級獲得指令,使得線程A 指令先于線程B指令被獲得。在框614中,在指令流水線的解碼級在緩沖器中存儲兩個 指令。在框616中,基于每個指令的當(dāng)前優(yōu)先級狀況對指令進(jìn)行解碼, 使得線程A指令先于線程B指令被解碼。因此,如果線程A指令導(dǎo)致 停止,則直到停止得到解決才對線程B指令進(jìn)行解碼。參考方法604,在框620中,在指令高速緩存中存儲兩個指 令,第一個與線程A相關(guān)聯(lián),第二個與線程B相關(guān)聯(lián)。在框622中, 根據(jù)每個指令的當(dāng)前優(yōu)先級狀況,指令流水線的獲取級獲得指令,使 得線程A指令先于線程B指令被獲得。
在框624中,在指令流水線的解碼級在緩沖器中存儲兩個 指令。如圖所示,在框624,緩沖器接收控制信息,該控制信息指示與 線程A相關(guān)聯(lián)的線程去加重指令已經(jīng)在指令流水線的另一級中被執(zhí) 行。響應(yīng)于線程去加重指令,線程A的優(yōu)先級狀況相對于線程B被去 加重。因此,在框626,基于每個指令的當(dāng)前優(yōu)先級狀況對指令進(jìn)行解 碼,使得線程B指令先于線程A指令被解碼。因此,如果線程A指令 導(dǎo)致停止,則在停止被解決的同時對線程B指令進(jìn)行解碼,這導(dǎo)致指 令流水線的操作相對于方法602更高效。在此文檔中,關(guān)系術(shù)語,諸如"第一"和"第二",等等,可以 僅用于將一個實體或動作與另一個實體或動作區(qū)分開,而不必要求或 暗示這些實體和動作之間的任何實際的這種關(guān)系或順序。術(shù)語"包括", 或其任何其他變形,是用以涵蓋非排他的內(nèi)含物,使得包括一系列元
素的過程、方法、物品或裝置不僅僅包括那些元素,還可能包括沒有 明確列出的或該過程、方法、物品或裝置所固有的其他元素。在沒有 更多的限制的情況下,以"包括...一"開始的元素,并沒有排除在包括該 元素的過程、方法、物品或裝置中存在其他同等元素。術(shù)語"或"往往指 包含性的"或",以使得在"或"條件性的兩個條件都得到滿足時,條件性 得到滿足。術(shù)語"范圍"可以包括只包括單個值的范圍。本文中所使用的術(shù)語"另一個",被定義為至少第二或更多。 本文中所使用的術(shù)語"包括"、"具有"及其任何變形被定義為包括。此外 使用的術(shù)語"耦合",參考電-光技術(shù),被定義為連接,盡管不必是直接 連接,也不必是機(jī)械連接。此處使用的術(shù)語"總線"用于指可以用于傳輸一個或多個不 同類型的信息,諸如數(shù)據(jù)、地址、控制或狀況的多個信號或?qū)w。此 處所討論的導(dǎo)體,可示出或描述為單個導(dǎo)體、多個導(dǎo)體、單向?qū)w或 雙向?qū)w。然而,不同實施例可以改變導(dǎo)體的實現(xiàn)方式。例如,可以使用獨立的單向?qū)w而非雙向?qū)w,反之亦然。而且,多個導(dǎo)體可由 單個導(dǎo)體替換,其串行傳輸或以時間復(fù)用方式傳輸多個信號。同樣, 承載多個信號的單個導(dǎo)體可被分割成多個不同的導(dǎo)體來承載這些信號 的子集。因此,存在用于傳輸信號的許多選項。只要考慮到此處公開的說朋書和實踐,該發(fā)明的其它實施 例、使用和優(yōu)點對于本領(lǐng)域技術(shù)人員來說將是顯而易見的。例如,雖 然此處公開的性能事件監(jiān)視技術(shù)是相對于單個處理器討論的,但類似 的技術(shù)也可以應(yīng)用于具有多個處理器核的設(shè)備。每個處理器核可以與 不同的性能事件監(jiān)視相關(guān)聯(lián),或設(shè)備的每個性能事件監(jiān)視可與多個處 理器核相關(guān)聯(lián)。說明書和附圖應(yīng)當(dāng)僅僅作為示例,并且本發(fā)明的范圍 相應(yīng)地僅由所附權(quán)利要求及其等效范圍所限定。
權(quán)利要求
1.一種方法,包括在處理器中執(zhí)行第一線程的第一線程去加重指令;以及響應(yīng)于執(zhí)行所述第一線程去加重指令,基于與所述第一線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目與第一閾值之間的第一關(guān)系,對所述第一線程的優(yōu)先級狀況進(jìn)行去加重。
2. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括響應(yīng)于對所述第一 線程的優(yōu)先級狀況進(jìn)行去加重,暫停所述第一線程的執(zhí)行,所述第一 線程的優(yōu)先級狀況被設(shè)置為第一狀態(tài)。
3. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括當(dāng)所述第一線程的 優(yōu)先級狀況被去加重時,在所述處理器中執(zhí)行第二線程。
4. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括基于所述第一線程 的優(yōu)先級狀況,指配所述處理器中的處理器資源。
5. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括.-當(dāng)所述第一線程的優(yōu)先級狀況被去加重時,接收與所述第一線程 相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目改變的指示;響應(yīng)于所述指示,將所述第一線程的優(yōu)先級狀況恢復(fù)為第二狀態(tài)。
6. 根據(jù)權(quán)利要求5所述的方法,進(jìn)一步包括響應(yīng)于對所述第一線程的優(yōu)先級狀況進(jìn)行去加重,暫停所述第一 線程的執(zhí)行;以及響應(yīng)于恢復(fù)所述第一線程的優(yōu)先級狀況,而再繼續(xù)所述第一線程 的執(zhí)行。
7. 根據(jù)權(quán)利要求1所述的方法,其中與所述第一線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目是基于與所述第一線程相關(guān)聯(lián)的高速緩存未命中的數(shù)目。
8. 根據(jù)權(quán)利要求l所述的方法,其中與所述第一線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目是基于與所述第一線程相關(guān)聯(lián)的不可高速緩存的存儲器事務(wù)的數(shù)目。
9. 根據(jù)權(quán)利要求1所述的方法,其中與所述第一線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目與第一存儲器事務(wù)類型相關(guān)聯(lián),所述第一存儲器事務(wù)類型是基于所述第一線程去加重指令。
10. 根據(jù)權(quán)利要求1所述的方法,其中所述第一閾值是基于所述第 一 線程去加重指令的操作對象。
11. 根據(jù)權(quán)利要求1所述的方法,其中所述第一線程去加重指令是無操作指令。
12. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括在所述處理器中接收第二線程的第二線程去加重指令;響應(yīng)于接收所述第二線程去加重指令,基于與所述第二線程相關(guān)聯(lián)的未決存儲器事務(wù)數(shù)目與第二閾值之間的第 一 關(guān)系,對所述第二線程的優(yōu)先級狀況進(jìn)行去加重。
13. —種設(shè)備,包括指令流水線,所述指令流水線被配置用于執(zhí)行多個線程的指令;以及線程控制模塊,包括線程調(diào)度器模塊,所述線程調(diào)度器模塊被配置為基于所述多個線程中的每一個線程的優(yōu)先級水平,調(diào)度所述指令流水線中多個線程的指令的執(zhí)行;以及優(yōu)先級控制模塊,所述優(yōu)先級控制模塊被配置為響應(yīng)于所述指令流水線中第一線程去加重指令的執(zhí)行,基于與所述第一線程相關(guān)聯(lián)的未決存儲器事務(wù)數(shù)目與第一閾值之間的第一關(guān)系,對所述多個線程中的第一線程的優(yōu)先級狀況進(jìn)行去加重。
14. 根據(jù)權(quán)利要求13所述的設(shè)備,其中所述線程調(diào)度器模塊被配置為響應(yīng)于對所述第一線程的優(yōu)先級狀況進(jìn)行去加重,而暫停所述第一線程的執(zhí)行。
15. 根據(jù)權(quán)利要求13所述的設(shè)備,其中所述線程調(diào)度器模塊被配置為基于所述多個線程中的每一個線程的優(yōu)先級狀況,分配所述指令流水線的資源。
16. 根據(jù)權(quán)利要求13所述的設(shè)備,其中優(yōu)先級控制模塊被配置為響應(yīng)于所述指令流水線中第—二指令的執(zhí)行,而將所述多個線程中的第二線程的優(yōu)先級水平設(shè)置為第一狀態(tài),基f與所述第二線程相關(guān)聯(lián)的未決存儲器事務(wù)數(shù)目與第二閾值之問的第 一關(guān)系,將所述第二線程的優(yōu)先級水平設(shè)置為所述第一狀態(tài)。
17. 根據(jù)權(quán)利要求13所述的設(shè)備,其中所述第一閾值是基于所述第一線程去加重指令的操作對象。
18. 根據(jù)權(quán)利要求13所述的設(shè)備,其中與所述第一線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目是基于與所述第一線程相關(guān)聯(lián)的高速緩存未命中的數(shù)冃。
19. 根據(jù)權(quán)利要求13所述的設(shè)備,其中與所述第 -線程相關(guān)聯(lián)的未決存儲器事務(wù)的數(shù)目是基于與所述第一線程相關(guān)聯(lián)的不可高速緩存的存儲器事務(wù)的數(shù)目。
20. —種包括用于操控處理器的多個指令的計算機(jī)可讀介質(zhì),所述多個指令包括用于在處理器中執(zhí)行多個線程中的第一線程的第一線程去加重指令的指令;以及用于基于與所述第一線程相關(guān)聯(lián)的未決存儲器事務(wù)數(shù)目與第一閾值之間的第一關(guān)系來對所述第一線程的優(yōu)先級狀況進(jìn)行去加重的指令。
全文摘要
本發(fā)明公開了一種在處理器(102)中調(diào)度線程(221,222)的執(zhí)行的技術(shù)。該技術(shù)包括執(zhí)行線程(221)的線程去加重指令(220),其對線程進(jìn)行去加重直至與該線程相關(guān)聯(lián)的未決存儲器事務(wù)(330),如高速緩存未命中,的數(shù)目等于或小于閾值(320)。當(dāng)線程被去加重時,處理器中具有較高優(yōu)先級的其他線程,可以被執(zhí)行或被指配系統(tǒng)資源。因此,減小了處理器中發(fā)生停止的可能性。
文檔編號G06F9/38GK101689124SQ200880015444
公開日2010年3月31日 申請日期2008年4月28日 優(yōu)先權(quán)日2007年5月10日
發(fā)明者克拉斯·M·布魯斯, 加里·L·惠森亨特, 塞爾吉奧·舒勒, 邁克爾·D·斯奈德, 馬特·B·斯米特爾 申請人:飛思卡爾半導(dǎo)體公司