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

用于smt處理器上的cpi調(diào)度的系統(tǒng)和方法

文檔序號:6429377閱讀:244來源:國知局
專利名稱:用于smt處理器上的cpi調(diào)度的系統(tǒng)和方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及用于在SMT處理器上調(diào)度線程的系統(tǒng)和方法。更具體地,本發(fā)明涉及為了進行SMT調(diào)度,使用一種度量以便確定相互兼容的處理線程的系統(tǒng)和方法。
背景技術(shù)
現(xiàn)代計算機的基本結(jié)構(gòu)包括有外圍設(shè)備以便向外部世界傳輸信息和從外部世界接收信息;這種外圍設(shè)備可以是鍵盤、顯示器、磁帶驅(qū)動器、耦合于網(wǎng)絡(luò)的通信線路等。計算機的基礎(chǔ)結(jié)構(gòu)中還包括從外部世界接收、處理和向外部世界傳遞這些信息所需的硬件,包括總線、存儲器單元、輸入/輸出(I/O)控制器、存儲設(shè)備和至少一個中央處理單元(CPU)等。CPU是系統(tǒng)的大腦。它執(zhí)行構(gòu)成計算機程序的指令,并且指揮著其它系統(tǒng)組件的運行。
從計算機硬件的立場上看,多數(shù)系統(tǒng)的操作方式基本上相同。處理器實際上快速地執(zhí)行非常簡單的操作,諸如算術(shù)、邏輯比較、和數(shù)據(jù)從一個位置到另一個位置的移動。指揮著計算機執(zhí)行大量這種簡單操作的程序給人以這樣的幻覺,即計算機正在執(zhí)行一些很復(fù)雜的操作。然而,用戶所感覺到的計算機系統(tǒng)新的或增強的能力實際上可能是機器正在執(zhí)行同樣的簡單功能,但是執(zhí)行得更快得多。因此,對計算機系統(tǒng)的繼續(xù)改進要求這些系統(tǒng)被做得還要更快。
對計算機整體速度的一種度量,也稱為吞吐量,是度量單位時間內(nèi)所執(zhí)行的操作的數(shù)目。從概念上講,在所有可能的對系統(tǒng)速度的改進中最簡單的是提高各種部件的時鐘速度,特別是處理器的時鐘速度。如果所有的部件都以快兩倍的速度執(zhí)行,但是在其他方面以完全相同的方式工作,則系統(tǒng)將用原來時間的一半執(zhí)行給定的任務(wù)。幾年以前由分立部件構(gòu)成的計算機處理器,通過縮小尺寸并且減少部件的數(shù)目,執(zhí)行速度明顯地更快了;最終,整個處理器被封裝在單個芯片上的一個集成電路上。尺寸的縮小使得提高處理器的時鐘速度成為可能,并且因此提高了系統(tǒng)的速度。
盡管由集成電路獲得了巨大的速度提升,但是依然存在對更快的計算機系統(tǒng)的需求。硬件設(shè)計者通過更大的集成度、進一步減小電路的尺寸以及其它的技術(shù)可以獲得速度的進一步提高。然而,設(shè)計者考慮到物理尺寸不可能無限地持續(xù)減小,而處理器時鐘速度的不斷提高也存在著限制。因此,已注意尋求其它方法進一步改進計算機系統(tǒng)的整體速度。
在不改變時鐘速度的情況下,通過使用多個處理器仍然可能提高系統(tǒng)的速度。封裝在集成電路芯片上的單個處理器的適度的成本使得這是可行的。從處理器的使用通過將工作負(fù)載從主處理器轉(zhuǎn)移到從處理器上極大地提高了系統(tǒng)的速度。例如,從處理器例行地執(zhí)行重復(fù)的和單個特定目的的程序,諸如輸入/輸出設(shè)備通信和控制。還可以將多個CPU放置在單個計算機系統(tǒng)內(nèi),典型地放置在基于主機的系統(tǒng)內(nèi),該系統(tǒng)同時為多個用戶提供服務(wù)。每個不同的處理器可以為不同的用戶單獨地執(zhí)行不同的任務(wù),因此提高了系統(tǒng)同時執(zhí)行多個任務(wù)的整體速度。
然而,提高單個任務(wù)諸如一個應(yīng)用程序的執(zhí)行速度更加困難。在多個CPU之間協(xié)調(diào)各個功能的執(zhí)行并且傳遞各個功能的結(jié)果是一件很難處理的工作。對于從I/O處理器來說,這并不是如此困難,因為功能是已經(jīng)預(yù)先定義的和有限的,而對于執(zhí)行通用應(yīng)用程序的多個CPU來說,協(xié)調(diào)這些功能就要困難得多,這部分地是因為,系統(tǒng)設(shè)計者事先不知道這些程序的細節(jié)。多數(shù)應(yīng)用程序按著單一路徑或由處理器所執(zhí)行的步驟流執(zhí)行。盡管有時可能將這個單一路徑分解為多個并行的路徑,進行這樣處理的一種通用應(yīng)用還在研究之中。一般地,將冗長的任務(wù)分解成較小的任務(wù)以便由多個處理器并行執(zhí)行是由軟件工程師逐個案例地編寫代碼來完成的。對于執(zhí)行不一定是重復(fù)的或可預(yù)知的商務(wù)事務(wù)來說,這種專用方法尤其成問題。
因此,雖然多處理器提高了整個系統(tǒng)的性能,但是仍然存在許多提高單個CPU的速度的理由。如果CPU時鐘速度是給定的,則通過提高每個時鐘周期內(nèi)所執(zhí)行的操作的平均數(shù)目,有可能進一步提高CPU的速度,即每秒執(zhí)行的操作數(shù)目。一種用于高性能、單芯片微處理器的常見的體系結(jié)構(gòu)是精簡指令集計算機(RISC)結(jié)構(gòu),其特征在于一個經(jīng)常使用的指令的小的、簡化的集合以便快速執(zhí)行,這些簡單的操作如前面說明的被快速地執(zhí)行。由于半導(dǎo)體技術(shù)的進步,RISC體系結(jié)構(gòu)的目標(biāo)已經(jīng)成為開發(fā)具有在每個機器時鐘周期內(nèi)執(zhí)行一條或多條指令的能力的處理器。另一個增加每個時鐘周期所執(zhí)行的操作的平均數(shù)目的方法是修改CPU內(nèi)的硬件。這種吞吐量度量,即每條指令的時鐘周期,通常被用于表示高性能處理器體系結(jié)構(gòu)的特征。指令流水線和高速緩沖存儲器是使得這種成就成為可能的計算機體系結(jié)構(gòu)特征。流水線指令執(zhí)行允許隨后的指令在先前發(fā)出的指令完成之前就開始執(zhí)行。高速緩沖存儲器在更靠近處理器處存儲頻繁使用的和其它數(shù)據(jù),并且在多數(shù)情況下允許繼續(xù)執(zhí)行指令,而不必等待主存儲器的整個訪問時間。還已經(jīng)展示了某些改進,其中多個執(zhí)行單元具有前瞻硬件,用于尋找指令以并行執(zhí)行。
對于在超標(biāo)量系統(tǒng)中順序和亂序地完成指令這兩者,流水線在某些情況下將會停滯(stall)。依賴于先前發(fā)出的還沒有完成的指令的結(jié)果的指令可能會使得流水線停滯。例如,在高速緩存中沒有入/存儲指令中所需的數(shù)據(jù),即高速緩存未命中時,依賴于該裝入/存儲指令的指令不能被完成,直到在高速緩存中可以得到該數(shù)據(jù)時為止。特別是對涉及到大數(shù)據(jù)結(jié)構(gòu)的計算而言,在高速緩存中維護持續(xù)執(zhí)行所必需的請求數(shù)據(jù),并且維持高命中率,即對該數(shù)據(jù)的請求次數(shù)與在高速緩存中準(zhǔn)備好了該數(shù)據(jù)的次數(shù)的比,并不是容易的事。一次高速緩存未命中可以使得流水線停滯幾個時鐘周期,并且如果數(shù)據(jù)在多數(shù)情況下都不在,則存儲器延遲的總量將是嚴(yán)重的。雖然用于主存儲器的存儲器裝置正在變得更快,但是這種存儲器芯片的速度和高端處理器的速度之間的差距正在變得越來越大。因此,當(dāng)前高端處理器設(shè)計中的相當(dāng)數(shù)量的執(zhí)行時間花在了等待高速緩存未命中的解決上,并且這些存儲器訪問延遲占用了處理器執(zhí)行時間的越來越多的部分。
提高CPU內(nèi)硬件效率的另一種技術(shù)是將一個處理任務(wù)分成被稱為線程的可獨立地執(zhí)行的指令序列。這種技術(shù)與將較大的任務(wù)分成較小的任務(wù)以便由不同的處理器獨立地執(zhí)行有關(guān),只是此處將由同一個處理器執(zhí)行這些線程。然后當(dāng)CPU出于任何原因不能繼續(xù)處理或執(zhí)行這些線程中的一個線程時,CPU切換到并且執(zhí)行另一個線程。在計算機體系結(jié)構(gòu)中定義的術(shù)語“多線程”與該術(shù)語在軟件中的使用是不相同的,在軟件中它的含義是將一個任務(wù)分割成多個相關(guān)的線程。在體系結(jié)構(gòu)的定義中,這些線程可以是相互獨立的。因此“硬件多線程”經(jīng)常被用于區(qū)分該術(shù)語的這兩種使用。
硬件多線程的傳統(tǒng)形式涉及為每個線程復(fù)制處理器寄存器。例如,對于實現(xiàn)了IBM公司所提供的商業(yè)名稱為PowerPCTM的體系結(jié)構(gòu)以執(zhí)行多線程的處理器,該處理器必須維護N個狀態(tài)以便運行N個線程。因此,下面的內(nèi)容要被復(fù)制N次通用寄存器、浮點寄存器、條件寄存器、浮點狀態(tài)和控制寄存器、計數(shù)寄存器、鏈接寄存器、異常寄存器、保存/恢復(fù)寄存器和專用寄存器。
此外,可以復(fù)制專用的緩沖區(qū)諸如段后備緩沖區(qū)(segment lookasidebuffer),或者可以將線程號標(biāo)記在每個緩沖區(qū)項上,并且否則,則必須被在每次線程轉(zhuǎn)換時清倉每個緩沖區(qū)項。還有,某些分支預(yù)測機制,例如,相關(guān)性寄存器(correlation register)和返回堆棧也應(yīng)該被復(fù)制。幸運的是,不需要復(fù)制處理器的某些較大的功能,諸如一級指令高速緩存(L1 I-cache)、一級數(shù)據(jù)高速緩存(L1 D-cache)、指令緩沖區(qū)、存儲隊列、指令調(diào)度器、功能性或執(zhí)行單元、流水線、翻譯后援緩沖區(qū)(TLB)以及分支歷史表。
同時多線程(SMT)是一種允許多個獨立的線程在每個時鐘周期內(nèi)向超標(biāo)量處理器的功能性單元發(fā)出多條指令的技術(shù)。SMT組合了現(xiàn)代超標(biāo)量處理器的多指令特性和多線程體系結(jié)構(gòu)的等待時間隱藏能力。與依靠快速上下文切換來共享處理器的執(zhí)行資源的傳統(tǒng)多線程體系結(jié)構(gòu)不同,SMT處理器中所有硬件環(huán)境同時處于活動狀態(tài),它們在每個時鐘周期競爭所有的可用資源。這種對功能性單元的動態(tài)共享允許同時多線程以便很大地提高吞吐量,解決了處理器利用率的兩個主要障礙——長的等待時間和有限的接線程的并行性。
然而,SMT處理器(即實現(xiàn)了硬件線程的處理器)面對的一個挑戰(zhàn)是由SMT處理器執(zhí)行的諸軟件線程競爭某些同樣的基于處理器的資源,諸如功能性和執(zhí)行單元。如果兩個軟件線程反復(fù)地競爭同樣的基于處理器的資源,在一個線程使用該資源時,另一個線程將等待(或被交換出去(swapout))。等待資源降低了整個系統(tǒng)的吞吐量,并且降低了單個線程的效率。如在此處所使用的,術(shù)語“線程”指軟件線程,除非另行說明。
因此,所需要的是一種系統(tǒng)和方法,所述的系統(tǒng)和方法用于識別可以很好地一起運行的線程,或者,換言之,識別相互兼容的線程。那些在一起運行時可以很好地執(zhí)行的線程很可能指示著對SMT處理器中的基于處理器的資源的較少的競爭。還需要的是一種用于在運行過程中,將兼容的線程相互配對的系統(tǒng)和方法。

發(fā)明內(nèi)容
已經(jīng)發(fā)現(xiàn)的是,可以在同時多線程(SMT)環(huán)境中通過計算當(dāng)SMT處理器上有兩個線程在運行時所發(fā)生的性能度量來識別兼容的線程。在一個實施例中,這個度量是每條指令的周期數(shù)(CPI),它可以由當(dāng)兩個線程正在執(zhí)行時所執(zhí)行的時鐘周期數(shù)除以在這些時鐘周期數(shù)內(nèi)所執(zhí)行的指令數(shù)而確定。CPI越小,性能越好。
當(dāng)線程在一起執(zhí)行時,線程中的一個線程一般會在另一個線程結(jié)束之前先結(jié)束(即任務(wù)調(diào)出(task out)等)。當(dāng)一個線程結(jié)束時,確定當(dāng)兩個線程處于執(zhí)行中時所獲得的CPI。將該CPI與一個可以調(diào)整的兼容性閾值比較。如果所獲得的CPI比該兼容性閾值更好(更低),則這些線程就被認(rèn)為是可兼容的,并且記錄指明這種兼容性的信息。在一個實施例中,每個線程標(biāo)識符都可以具有一個兼容性列表,所述列表包含有被識別為兼容的其它線程的標(biāo)識符。兼容性列表被周期地清理以便去除那些曾經(jīng)是兼容的,但是看起來不再兼容了的線程。另外,如果兼容性列表中的空間有限,則如果新發(fā)現(xiàn)的線程獲得了比先前兼容線程更好的CPI,則使用該新發(fā)現(xiàn)的線程代替該先前識別出的兼容線程。
當(dāng)一個線程將要結(jié)束時,調(diào)度器查看將結(jié)束的線程所在的運行隊列以便調(diào)度另一個線程。調(diào)度器識別出這樣的線程(1)與仍在SMT處理器上執(zhí)行的線程(即不是將要結(jié)束的線程)兼容,并且(2)準(zhǔn)備好要執(zhí)行。CPI數(shù)據(jù)被不斷地更新,從而不斷地識別出相互兼容的各個線程。雖然以具有兩個硬件線程的SMT處理器說明了描述于此的本發(fā)明,但是本領(lǐng)域的技術(shù)人員可以理解,此處講述的技術(shù)等同地適用于使用處理多于兩個硬件線程的SMT處理器的情況。
上述是本發(fā)明的概述,并且因此必然包括簡化、概括和對細節(jié)的忽略;因此,本領(lǐng)域的技術(shù)人員可以理解這個概述僅是示例性的,而并不旨在作為任何形式的限制。通過下面給出的非限制性的詳細說明,將明了唯一地由權(quán)利要求定義的本發(fā)明的其它方面、發(fā)明特征和優(yōu)點。


通過參考附圖,本領(lǐng)域的技術(shù)人員可以更好地理解本發(fā)明,并且可以明了本發(fā)明的各個目的、特征和優(yōu)點。不同附圖中所使用的相同的標(biāo)號表示類似的或相同的項。
圖1是將被調(diào)度以便在SMT處理器上并發(fā)執(zhí)行的多個線程的高層示意圖。
圖2是表示了調(diào)度器使用線程度量數(shù)據(jù)和運行隊列數(shù)據(jù)在SMT處理器上調(diào)度線程的示意圖;圖3是表示了調(diào)度器在確定將調(diào)度到SMT處理器上的一個線程的過程中所采取的步驟的流程圖;圖4是表示了更新線程兼容性列表所采取的步驟的流程圖;圖5是表示了從線程兼容性列表內(nèi)去除表項所采取的步驟的流程圖;圖6是表示了周期性地清除在線程控制塊中發(fā)現(xiàn)的兼容性列表所采取的步驟的流程圖;圖7是表示了調(diào)度器將一個低性能執(zhí)行的線程從一個SMT處理器交換到另一個SMT處理器上以便提高整個系統(tǒng)的性能的示意圖;圖8是表示了更新線程的CPI所采取的步驟的流程圖;圖9是表示了在SMT處理器之間交換低性能線程所采取的步驟的流程圖;圖10是表示了識別低性能線程以便在多SMT處理器系統(tǒng)內(nèi)進行交換所采取的步驟的流程圖;圖11是表示了在SMT處理器間交換低性能線程所采取的步驟的流程圖;以及圖12是能夠?qū)崿F(xiàn)本發(fā)明的一種信息處理系統(tǒng)的方塊圖。
具體實施例方式
下面的說明旨在提供對本發(fā)明的一個例子的詳細說明,并且不應(yīng)被理解為是對本發(fā)明本身的限制。確切地說,可以有任何數(shù)目的改型落在本發(fā)明的范圍內(nèi),本發(fā)明定義于本說明之后的權(quán)利要求內(nèi)。
圖1是被調(diào)度以便在SMT處理器上并發(fā)執(zhí)行的多個線程的高層示意圖。調(diào)度器100讀取與多個線程110相應(yīng)的線程數(shù)據(jù)。在一個實施例中,線程數(shù)據(jù)被存儲在線程控制塊(TCB)內(nèi),線程控制塊被系統(tǒng)用于維護并管理當(dāng)前存在的線程。
調(diào)度器100調(diào)度線程以在支持同時多線程的處理器120上執(zhí)行。同時多線程(SMT)是一種允許多個獨立的線程在每個時鐘周期內(nèi)向超標(biāo)量處理器的功能性單元發(fā)出多條指令的技術(shù)。SMT組合了現(xiàn)代超標(biāo)量處理器的多指令特征和多線程體系結(jié)構(gòu)的等待時間隱藏能力。與傳統(tǒng)的依賴于快速上下文切換來共享處理器執(zhí)行資源的多線程體系結(jié)構(gòu)不同,SMT處理器內(nèi)的所有硬件環(huán)境同時處于活動狀態(tài),每個時鐘周期都競爭所有的可用資源。這種對功能性單元的動態(tài)共享允許同時多線程以便很大地提高吞吐量,解決了處理器利用率的兩個主要障礙——長的等待時間和有限的按線程的并行性。
處理器線程130和140代表在處理器120上同時執(zhí)行的兩個線程,它們競爭處理器資源150、160和170。取決于正在執(zhí)行的任務(wù),每個可執(zhí)行的線程110都有對處理器資源的不同需求。例如,某些線程可能是數(shù)據(jù)密集的,需要大量地訪問處理器的“裝入/存儲”資源,而其它線程可能是計算密集的,并且需要大量地訪問處理器的“加法器”資源或是浮點資源。
因為資源是在當(dāng)前執(zhí)行的線程之間共享的,如果每個線程需要執(zhí)行同樣的功能,則其中一個線程必須在另一個線程獲得對資源的訪問時等待。如果進程間存在對資源的高度競爭,則與低競爭的情況相比這些進程將花費更多的時間完成。
為每個可執(zhí)行的線程維護指示著每個線程與其它線程的兼容性的數(shù)據(jù)。例如,如果兩個線程可以很好地一起運行(即,當(dāng)一起運行時,它們每個都有低的CPI),這個信息將被調(diào)度器用于優(yōu)選地使得這兩個線程同時運行。
圖2是表示了調(diào)度器使用線程度量數(shù)據(jù)和運行隊列數(shù)據(jù)調(diào)度線程到SMT處理器上的示意圖。當(dāng)一個線程在SMT處理器250上執(zhí)行完畢時,調(diào)度器200調(diào)度下一個線程以便執(zhí)行。如果來自運行隊列A(270)的一個線程結(jié)束了,則另一個來自運行隊列A的線程被調(diào)度。同樣地,如果來自運行隊列B(285)的一個線程結(jié)束了,則調(diào)度器從運行隊列B中調(diào)度另一個準(zhǔn)備好要執(zhí)行的線程。
為了確定將調(diào)度哪個線程,調(diào)度器200確定當(dāng)前哪個線程正在另一個處理器線程上運行。例如,如果要結(jié)束的線程來自運行隊列B,則獲取與當(dāng)前在處理器線程A(255)中執(zhí)行的線程相應(yīng)的線程標(biāo)識符。類似地,如果要結(jié)束的線程來自運行隊列A,則獲取與當(dāng)前正在處理器線程B(260)中執(zhí)行的線程相應(yīng)的線程標(biāo)識符。運行隊列包括與線程的標(biāo)識符有關(guān)的數(shù)據(jù)(用于運行隊列A中的線程的標(biāo)識符275,和用于運行隊列B中的線程的標(biāo)識符290),以及指示著該線程是否準(zhǔn)備好執(zhí)行的數(shù)據(jù)(用于運行隊列A中的線程的指示符280,和用于運行隊列B中的線程的標(biāo)識符295)。
然后調(diào)度器確定是否有任何“兼容的”線程準(zhǔn)備好執(zhí)行。例如,如果來自運行隊列A的線程“aaa”正在與來自運行隊列B的線程“bbb”一起執(zhí)行,而線程“bbb”將要結(jié)束了,則調(diào)度器確定是否有來自運行隊列“B”的與線程“aaa”兼容的任何線程準(zhǔn)備好執(zhí)行。在一個實施例中,調(diào)度器從線程控制塊210中線程“aaa”的表項內(nèi)讀取該線程“aaa”的兼容信息。線程控制塊210包括用于每個線程的多個數(shù)據(jù)字段。這些數(shù)據(jù)包括線程215的標(biāo)識符、在這個實施例中用于多達3個相應(yīng)于兼容線程的標(biāo)識符(標(biāo)識符220、235、245)的字段,以及當(dāng)這些兼容線程與這些兼容線程同時運行時所達到的每條指令的周期數(shù)(CPI)(CPI 225相應(yīng)于線程ID 220,CPI 235相應(yīng)于線程ID 230,CPI 245相應(yīng)于線程ID 240)。在一個實施例中,存儲在字段225、235和245中的CPI是該線程最后與兼容線程同時執(zhí)行的過程中所得到的最后的CPI。在另一實施例中,為各個線程保持平均CPI,并且將在該線程與兼容線程同時運行過程中所獲得的平均CPI存儲在CPI字段中。
在給出的例子中,線程“aaa”是最與線程“bbb”兼容的線程,因為它在與線程“bbb”同時運行時具有最低的CPI(0.7)。線程“aaa”還與線程“ddd”(CPI為1.0)以及“fff”(CPI為1.2)兼容。調(diào)度器確定線程“ddd”是否準(zhǔn)備好執(zhí)行,并且如果是這樣的,將該線程從運行隊列B調(diào)度到SMT處理器250中處理器的“B”線程空間(260)內(nèi)。如果線程“ddd”沒有準(zhǔn)備好執(zhí)行,則調(diào)度器確定線程“fff”是否準(zhǔn)備好執(zhí)行,并且如果是的則調(diào)度器調(diào)度該線程。如果線程“ddd”和“fff”都沒有準(zhǔn)備好執(zhí)行,則選擇運行隊列B中的下一個準(zhǔn)備好執(zhí)行的線程,并且由調(diào)度器調(diào)度它。
此外,當(dāng)線程結(jié)束運行時,更新其CPI。某些兼容線程ID是“[null]”(一個空槽(slot)),這指示著沒有發(fā)現(xiàn)足夠的兼容線程來填滿所有的槽。當(dāng)一個線程結(jié)束執(zhí)行時,就捕獲該線程的CPI,并且將其與CPI閾值265比較。如果該線程的CPI好于該閾值,則可將CPI的度量和標(biāo)識符放置到一個兼容性槽內(nèi),如果(1)存在一個空的槽的話,或者(2)不存在空的槽,但是新捕獲的CPI比當(dāng)前兼容線程中的一個線程的CPI更好的話(在這種情況下,新捕獲的CPI和線程標(biāo)識符替換掉具有最高即最不好的CPI的當(dāng)前兼容線程)。
圖3是給出了調(diào)度器在確定哪個線程將被調(diào)度到SMT處理器上時所采取的步驟的流程圖。處理從300開始,在步驟305調(diào)度器收到一個通知,當(dāng)前正在運行的線程將要任務(wù)調(diào)出。
確定哪個運行隊列包括該將要結(jié)束的線程(判斷310)。如果將要結(jié)束的線程在運行隊列“A”上,則判斷310轉(zhuǎn)向“是”分支318,以便獲得從運行隊列“A”調(diào)度的下一個線程。在步驟320,檢查兼容性列表以確定運行隊列“A”上的哪些線程與當(dāng)前正在處理器線程“B”(它接收來自運行隊列“B”的線程)上運行的線程兼容。這個檢查是通過讀取存儲在線程控制塊315中的兼容數(shù)據(jù)(關(guān)于存儲在線程控制塊中的數(shù)據(jù)的更詳細的例子,參見圖2中的塊210)而進行的。
確定是否存在有被列出的與運行在處理器線程“B”上的線程兼容的任何線程(判斷325)。如果沒有兼容的線程被列出,則判斷325轉(zhuǎn)向“否”分支326,于是在步驟350,來自運行隊列“A”的下一個可得到的準(zhǔn)備好運行的線程被調(diào)度,并且處理在395處結(jié)束。
在另一方面,如果線程控制塊中所列出的一個或多個線程與當(dāng)前在處理器線程“B”上運行的線程兼容,則判斷325轉(zhuǎn)向“是”分支328,于是在步驟330,通過讀取來自運行隊列“A”的數(shù)據(jù)檢查最兼容的線程(即具有最小CPI的線程),以便確定它是否準(zhǔn)備好了運行。確定最后檢查的線程是否準(zhǔn)備好了運行(判斷335)。如果最后檢查的線程準(zhǔn)備好了運行,則判斷335轉(zhuǎn)向“是”分支338,于是在步驟340調(diào)度該線程。在另一方面,如果該兼容的線程沒有準(zhǔn)備好執(zhí)行,判斷335轉(zhuǎn)向“否”分支342,于是確定是否還有兼容線程列于線程控制塊中(判斷345)。如果還有兼容線程列出,則判斷345轉(zhuǎn)向“是”分支346,它循環(huán)回去以便檢查該線程是否準(zhǔn)備好運行。這個循環(huán)一直繼續(xù)直到或是發(fā)現(xiàn)了一個兼容的準(zhǔn)備好了運行的線程(判斷335轉(zhuǎn)向“是”分支338),或是沒有更多的兼容線程要檢查,判斷345轉(zhuǎn)向“否”分支348,于是在步驟350,下一個來自運行隊列“A”的可用線程(準(zhǔn)備好運行的)被調(diào)度。然后處理在395處結(jié)束。
回到判斷310,如果將結(jié)束的線程是運行隊列“B”上的線程,判斷310轉(zhuǎn)向分支352,于是執(zhí)行相同意義的一組判斷和步驟,以便確定應(yīng)該調(diào)度來自隊列“B”的哪個線程。這些步驟的細節(jié)如下在步驟355,檢查兼容性列表以確定運行隊列“B”上的哪些線程與當(dāng)前在處理器線程“A”(它接收來自運行隊列“A”的線程)上運行的線程兼容。這個檢查是通過讀取存儲在線程控制塊315中的兼容數(shù)據(jù)而進行的。
確定是否有任何列出的與運行在處理器線程“A”上的線程兼容的線程(判斷360)。如果沒有列出的兼容線程,則判斷360轉(zhuǎn)向“否”分支362,于是在步驟390,來自運行隊列“B”的準(zhǔn)備好運行的下一個可用線程被調(diào)度,并且處理在395處結(jié)束。
在另一方面,如果在線程控制塊中列出了一個或多個與當(dāng)前運行在處理器線程“A”上的線程兼容的線程,則判斷360轉(zhuǎn)向“是”分支364,于是在步驟365通過讀取來自運行隊列“B”的數(shù)據(jù)檢查最兼容的線程(即具有最小CPI的線程)以便確定它是否準(zhǔn)備好了運行。確定最后檢查的線程是否準(zhǔn)備好了運行(判斷375)。如果最后檢查的線程準(zhǔn)備好了運行,判斷375轉(zhuǎn)向“是”分支378,于是在步驟380調(diào)度該線程。在另一方面,如果該兼容的線程沒有準(zhǔn)備好運行,則判斷375轉(zhuǎn)向“否”分支382,于是確定是否還有兼容線程列于線程控制塊內(nèi)(判斷385)。如果還有線程列出,判斷385轉(zhuǎn)向“是”分支386,它循環(huán)回去以查看該線程是否準(zhǔn)備好了運行。這個循環(huán)一直繼續(xù)直到或是發(fā)現(xiàn)了一個兼容的準(zhǔn)備好了運行的線程(判斷375轉(zhuǎn)向“是”分支378),或是沒有更多的兼容線程要檢查,判斷385轉(zhuǎn)向“否”分支388,于是在步驟390,下一個來自運行隊列“B”的可用線程(準(zhǔn)備好運行的)被調(diào)度。然后處理在395處結(jié)束。
圖4是表示了更新線程的兼容性列表所采取的步驟的流程圖。處理從400開始,在步驟405,獲取剛剛在一個處理器線程上結(jié)束執(zhí)行的線程的標(biāo)識符,以及仍然在另一個處理器線程上執(zhí)行的線程的線程標(biāo)識符。接著,在步驟410,通過用處理器所執(zhí)行的周期數(shù)除以被執(zhí)行的指令的總數(shù)(即,由運行在處理器上的兩個線程已執(zhí)行的指令的總數(shù)),計算剛剛結(jié)束的該線程和仍然在執(zhí)行的另一個線程的時間段內(nèi)所獲得的CPI。
確定獲得的CPI是否比已經(jīng)建立的兼容閾值小或相等(即更好)(判斷415)。如果CPI大于該閾值,則這些線程被認(rèn)為是不兼容的。所述的閾值是一個可以調(diào)整的值。該值越高,就有越多的線程將被認(rèn)為是兼容的,然而由于該值較高,這些CPI將不會必然地極大地提高整體系統(tǒng)的性能。在另一方面,降低閾值更可能確?!凹嫒莸摹本€程,當(dāng)可以得到時,將在一起很好地執(zhí)行,然而由于閾值較低,可能會識別出較少的兼容線程。因此,取決于給定的計算機系統(tǒng)正在執(zhí)行的處理的類型,可能需要調(diào)整該兼容閾值。
如果CPI大于閾值,判斷415轉(zhuǎn)向“否”分支418,于是這些線程被判定為是“不兼容的”,并且刪除任何指示著這些線程為兼容線程的表項(預(yù)先定義的過程420,處理細節(jié)參見圖5),并且處理在425處結(jié)束。
在另一方面,如果CPI小于或等于該閾值,判斷415轉(zhuǎn)向“是”分支428,于是在步驟430檢查剛剛結(jié)束的線程的兼容性列表。如果當(dāng)前正在運行的線程已經(jīng)存在于兼容性列表內(nèi)了,則在步驟430中更新用于該線程的CPI。在一個實施例中,所述的線程表追蹤最后的CPI,在這種情況下,在線程表中相應(yīng)于當(dāng)前正在執(zhí)行的線程的標(biāo)識符的字段中插入最新的CPI。在另一個實施例中,線程表保留一個平均CPI值,在這種情況下將最新的CPI值與當(dāng)剛剛結(jié)束的線程和當(dāng)前正在執(zhí)行的線程一起運行時所獲得的其它值進行平均。此外,在步驟430中,記錄一個時間戳,以便追蹤這兩個線程一起運行的最后時間。
在當(dāng)前正在運行的線程沒有被列于最后線程的兼容性列表內(nèi)的情況下,做出一個關(guān)于兼容性列表內(nèi)是否有任何空槽(即字段)的決定(判斷435)。如果至少有一個空(即當(dāng)前沒有使用的)字段,判斷435轉(zhuǎn)向“是”分支438,于是在步驟440記錄當(dāng)前正在運行的線程的線程標(biāo)識符以及其CPI和一個時間戳。
在另一方面,如果在用于剛剛結(jié)束的線程的兼容性列表內(nèi)沒有空槽,判斷435轉(zhuǎn)向“否”分支442,它繞過步驟440并且進行另一個關(guān)于在這兩個線程之間所獲得的CPI是否好于(即小于)當(dāng)前列于兼容性列表內(nèi)的最不好的(即最高的)CPI的確定(判斷445)。如果為這兩個線程所獲得的CPI好于當(dāng)前列于兼容性列表內(nèi)的CPI中的一個CPI,判斷445轉(zhuǎn)向“是”分支448,于是在步驟450,與列出的最高兼容CPI相應(yīng)的線程標(biāo)識符被改寫為當(dāng)前正在運行的線程的線程標(biāo)識符,兼容性列表內(nèi)的CPI值被改寫為剛剛獲得的CPI,并且以前的時間戳被改寫一個更新過的時間戳,它反映了由這兩個線程獲得該CPI的時刻。
如果該CPI不比線程表中所列的最差CPI好,不觸動(即,不改變)與剛剛結(jié)束的線程的線程標(biāo)識符相應(yīng)的兼容性列表表項,并且判斷445轉(zhuǎn)向“否”分支452。
與上面說明的為剛剛結(jié)束執(zhí)行的線程更新兼容性列表的步驟430到450相類似,執(zhí)行相同的步驟以便為當(dāng)前正在運行的線程更新兼容性列表。在步驟460,檢查與當(dāng)前正在運行的線程的標(biāo)識符相應(yīng)的兼容性列表,并且如果剛剛結(jié)束的線程的線程標(biāo)識符已被列于其內(nèi),則與剛剛結(jié)束的線程相應(yīng)的數(shù)據(jù)被更新(即,CPI和時間戳被更新)。再次的,在一個實施例中,追蹤最后的CPI,而在另一個實施例中計算并記錄平均CPI。
在剛剛結(jié)束的線程沒有列于當(dāng)前正在運行的線程的兼容性列表內(nèi)的情況下,確定兼容性列表內(nèi)是否還有任何空槽(判斷470)。如果至少還有一個空(即,當(dāng)前沒有使用的)字段,判斷470轉(zhuǎn)向“是”分支472,于是在步驟474,記錄當(dāng)前正在運行的線程的標(biāo)識符以及CPI值和時間戳。
在另一方面,如果在當(dāng)前正在運行的線程的兼容性列表內(nèi)沒有空位置,判斷470轉(zhuǎn)向“否”分支478,它繞過了步驟475,并且進行另一個關(guān)于由這兩個線程所獲得的CPI是否比兼容性列表內(nèi)當(dāng)前所列出的最差(即,最大的)CPI更好(即,更小)的確定(判斷480)。如果由這兩個線程所獲得的CPI比兼容性列表內(nèi)當(dāng)前列出的CPI中的一個CPI好,判斷480轉(zhuǎn)向“是”分支485,于是在步驟490與所列出的最高兼容CPI值相應(yīng)的線程標(biāo)識符被改寫為剛剛結(jié)束執(zhí)行的線程的線程標(biāo)識符,兼容性列表內(nèi)的CPI值被改寫為剛剛得到的CPI,并且以前的時間戳被改寫為更新的時間戳,它反映了由這兩個線程獲得該CPI的時刻。
如果該CPI不比線程表內(nèi)所列出的最差CPI好,則不觸動(即,不改變)相應(yīng)于剛剛結(jié)束的線程的線程標(biāo)識符的兼容性列表表項,而判斷480轉(zhuǎn)向“否”分支492,繞過步驟490。
此后為更新線程的兼容性列表所執(zhí)行的處理在495處結(jié)束。
圖5是表示了從線程的兼容性列表內(nèi)刪除表項所采取的步驟的流程圖。當(dāng)在SMT處理器上同時執(zhí)行兩個線程時所獲得的CPI不如(即,高于)為系統(tǒng)設(shè)定的一個閾值時調(diào)用該過程(見圖4,已預(yù)先定義的處理420,它調(diào)用圖5中表示的處理)。
圖5的處理從500開始,在步驟510讀取相應(yīng)于剛剛結(jié)束執(zhí)行的線程的兼容性列表,以便確定當(dāng)前正在執(zhí)行的線程的線程標(biāo)識符是否被作為兼容線程列出來了。在一個實施例中,兼容性列表存儲于線程控制塊540內(nèi)。確定當(dāng)前正在執(zhí)行的線程的標(biāo)識符是否被列于最后的線程兼容性列表內(nèi)(判斷520)。如果當(dāng)前線程被列于最后的線程的兼容性列表內(nèi),判斷520轉(zhuǎn)向“是”分支525,于是在步驟530從兼容性列表內(nèi)刪除與當(dāng)前正在執(zhí)行的線程有關(guān)的數(shù)據(jù)。在一個實施例中,兼容性列表數(shù)據(jù)存儲于線程控制塊540中。在另一方面,如果與當(dāng)前正在執(zhí)行的線程有關(guān)的數(shù)據(jù)沒有列于剛剛結(jié)束的線程的兼容性列表內(nèi),判斷520轉(zhuǎn)向“否”分支535,繞過步驟530。
在步驟550,讀取相應(yīng)于當(dāng)前正在執(zhí)行的線程的兼容性列表以便確定剛剛結(jié)束執(zhí)行的線程的線程標(biāo)識符是否作為兼容線程被列出了。確定剛剛結(jié)束執(zhí)行的線程的線程標(biāo)識符是否列于當(dāng)前正在運行的線程的兼容性列表內(nèi)(判斷560)。如果剛剛結(jié)束執(zhí)行的線程的線程標(biāo)識符被列于當(dāng)前正在運行的線程的兼容性列表內(nèi),判斷560轉(zhuǎn)向“是”分支570,于是在步驟580從該兼容性列表內(nèi)刪除與剛剛結(jié)束執(zhí)行的線程有關(guān)的數(shù)據(jù)。在另一方面,如果與剛剛結(jié)束執(zhí)行的線程有關(guān)的數(shù)據(jù)沒有列于當(dāng)前正在運行的線程的兼容性列表內(nèi),判斷560轉(zhuǎn)向“否”分支590,繞過步驟580。處理此后在595處結(jié)束。
圖6是周期地清理在線程控制塊中發(fā)現(xiàn)的兼容性列表所采取的步驟的流程圖。處理從600開始,于是在步驟605,處理以周期性的間隔,例如每兩秒鐘,被喚醒。
處理一直繼續(xù)直到系統(tǒng)關(guān)閉為止。因此,確定系統(tǒng)是否正在被關(guān)閉。當(dāng)系統(tǒng)正在被關(guān)閉時,判斷610轉(zhuǎn)向“是”分支612,于是處理在615處結(jié)束。
在另一方面,如果系統(tǒng)不是正在被關(guān)閉,判斷610轉(zhuǎn)向“否”分支618以執(zhí)行線程清理操作。在步驟620,處理獲得當(dāng)前的系統(tǒng)時間(時間戳)。通過從該時間戳中減去一過時的時間,基于當(dāng)前時間計算一個過時的時間戳(步驟625)。例如,一個在過去兩秒鐘內(nèi)沒有更新其時間戳值的本來兼容的線程可以被認(rèn)為是“過時的”,并且因此不再被認(rèn)為與該線程兼容了。其原因可能是由于另一線程已經(jīng)終止了,該另一線程已被置于睡眠狀態(tài)而等待其它事件的發(fā)生,或是沒有調(diào)度該另一線程以便和該本來兼容的線程一起運行的某種其它原因。
在步驟630,讀取線程控制塊中的第一個線程。確定該線程控制塊數(shù)據(jù)是否包括兼容線程的信息(判斷635)。如果用于該線程的表項包括兼容線程信息,判斷635轉(zhuǎn)向“是”分支638,于是在步驟640讀取相應(yīng)于第一個被列出的兼容線程的時間戳。通過比較這個時間戳和計算出的過時的時間戳值,確定兼容性列表內(nèi)所列的該線程是否已過時并應(yīng)當(dāng)從列表中刪除(判斷650)。如果兼容性列表內(nèi)列出的線程過時了,判斷650轉(zhuǎn)向“是”分支655,于是在步驟660,過時的線程被從兼容線程列表內(nèi)刪除。在另一方面,如果兼容線程的時間戳位于一個可接受的參數(shù)內(nèi)(即,線程沒有過時),則判斷650轉(zhuǎn)向“否”分支665,并且該線程保留在兼容線程列表內(nèi)。
確定是否有更多的列于該兼容線程列表內(nèi)的線程需要被處理(判斷670)。如果有更多的線程列出,判斷670轉(zhuǎn)向“是”分支672,于是在步驟675,讀取兼容線程列表內(nèi)的下一個線程的時間戳,并且處理循環(huán)回去以確定該線程是否已過時并應(yīng)被從兼容線程列表內(nèi)刪除。這個循環(huán)一直繼續(xù)直到對于從線程控制塊中讀取的該線程沒有更多的兼容線程列出為止,此時判斷670轉(zhuǎn)向“否”分支678。
確定是否有更多的列于線程控制塊內(nèi)的線程需要被處理,并且清理它們的兼容性列表(判斷680)。如果線程控制塊內(nèi)有更多的線程,判斷680轉(zhuǎn)向到“是”分支685,于是在步驟690,讀取線程控制塊內(nèi)下一個線程的數(shù)據(jù),并且處理循環(huán)回去以清理該線程兼容性列表內(nèi)的任何過時線程。
這個循環(huán)一直繼續(xù)直到線程控制塊內(nèi)的所有線程都已被讀取為止,此時判斷680轉(zhuǎn)向“否”分支695,它循環(huán)回步驟605,使得處理在再次執(zhí)行清理處理之前等待所述的時間間隔流逝。清理處理繼續(xù),直到系統(tǒng)被關(guān)閉為止,此時判斷610轉(zhuǎn)向“是”分支612,并且處理在615處結(jié)束。
圖1-6說明了如何識別兼容線程,并且如何在同一SMT處理器上執(zhí)行兼容線程,其中在線程控制塊內(nèi)追蹤兼容性數(shù)據(jù)。圖7-11描述了具有多個SMT處理器的系統(tǒng),并且講述了將一個低性能線程從一個SMT處理器移到另一個SMT處理器上,以便提高整體的系統(tǒng)性能。圖1-6和7-11所講述的內(nèi)容可以被組合在一起以便創(chuàng)建一個具有多個SMT處理器的系統(tǒng),該系統(tǒng)為每個SMT處理器識別兼容的線程,并且將低性能線程從一個SMT處理器移動到另一個SMT處理器。因此可以將圖7-11中表示的線程控制塊實現(xiàn)為存儲圖1-6中說明的性能數(shù)據(jù),或是將其存儲在單獨的表中。
圖7是一個表示了調(diào)度器將低性能線程從一個SMT處理器交換到另一個SMT處理器上以便提高整體系統(tǒng)性能的示意圖。調(diào)度器700讀取與存儲于線程控制塊710內(nèi)的線程有關(guān)的數(shù)據(jù),以便確定將在具有多個SMT處理器的系統(tǒng)內(nèi)的各個處理器之間交換哪些線程。
存儲在線程控制塊內(nèi)的CPI數(shù)據(jù)被調(diào)度器用于從該線程以前的執(zhí)行過程中所收集的數(shù)據(jù)中識別低性能的線程。在圖7給出的實施例中,給出了兩個SMT處理器(760和785),它們每個都具有兩個處理器線程以便同時執(zhí)行兩個執(zhí)行線程(處理器線程765和770相應(yīng)于SMT處理器760,并且處理器線程790和795相應(yīng)于SMT處理器785)。每個SMT處理器都具有一個運行隊列(運行隊列755相應(yīng)于SMT處理器760,并且運行隊列780相應(yīng)于SMT處理器785)。運行隊列識別被調(diào)度以便在處理器上運行的線程。在給出的例子中,線程“aaa”、“ccc”、“eee”和“ggg”被列于運行隊列755,并且因此在SMT處理器760上執(zhí)行。類似地,線程“bbb”、“ddd”、“fff”和“hhh”被列于運行隊列780,并且因此在SMT處理器785上執(zhí)行。
調(diào)度器700確定來自各個運行隊列的哪些線程是最低性能線程。一旦識別出了低性能線程,調(diào)度器700內(nèi)的過程705就將這些線程從一個運行隊列交換到另一個運行隊列。在給出的例子中,線程“ggg”是列于運行隊列755內(nèi)的最低性能線程,而線程“hhh”是列于運行隊列780內(nèi)的最低性能線程。當(dāng)執(zhí)行過程705時,線程“ggg”將被放置到運行隊列780中,而線程“hhh”將被放置到運行隊列755中。
因為線程在SMT環(huán)境中共享處理器資源,將線程從一個運行隊列交換到另一個運行隊列是將被交換的線程放置到一個具有不同處理器資源的不同線程的池中。因此,交換線程的目的是為低性能的線程尋找一個更有效的環(huán)境以便減少對處理器資源的競爭,從而提高線程的效率。此外,圖7-11中給出的交換線程技術(shù)可以與圖1-6中給出的SMT調(diào)度技術(shù)結(jié)合使用,從而一個運行隊列中的線程可以與該相同運行隊列內(nèi)的更兼容的線程一起被調(diào)度。
圖8是表示了更新線程的CPI所采取的步驟的流程圖。處理從800開始,于是在步驟810,由調(diào)度器將一個線程調(diào)度到SMT處理器內(nèi)包括的處理器線程中的一個處理器線程上。在步驟820,從處理器獲得一個初始的CPI值。在一個實施例中,處理器記錄下所執(zhí)行的周期數(shù)以及執(zhí)行的指令數(shù)。然后用周期數(shù)除以所執(zhí)行的指令數(shù)來計算CPI。在步驟830,線程執(zhí)行一段時間直到線程結(jié)束其處理或任務(wù)調(diào)出(即,時間到)。當(dāng)線程將要結(jié)束執(zhí)行時,在步驟840收到一個通知,通知該過程該線程將要結(jié)束處理。如果圖8中表示的處理是由調(diào)度器執(zhí)行的,則因為調(diào)度器確定何時調(diào)度線程并且何時它們?nèi)蝿?wù)調(diào)出,該過程將決定該線程將要結(jié)束。在另一方面,如果圖8中表示的處理由與調(diào)度器分離的一個過程執(zhí)行,則調(diào)度器在該線程將要結(jié)束執(zhí)行時向該過程發(fā)送一個信號。
在步驟850,獲得剛剛結(jié)束執(zhí)行的線程的最終的CPI。通過計算該線程執(zhí)行過程中所經(jīng)過的周期數(shù)和處理器在這兩個線程都在執(zhí)行時所執(zhí)行的指令數(shù)目,為線程的最后的運行周期確定CPI值。在步驟860,在線程表870(即,線程控制塊)中存儲線程的最后CPI。在步驟880,通過對存儲于線程表內(nèi)的這個線程的CPI值進行平均計算該線程的平均CPI。然后在步驟890,在線程表870內(nèi)存儲該線程的平均CPI。
為由調(diào)度器調(diào)度的每個線程執(zhí)行圖8中表示的處理。出于示例的目的,圖8給出了為單個線程執(zhí)行的CPI追蹤。由于SMT處理器同時運行多個線程,圖8中表示的處理將被調(diào)用多次以便追蹤各個處理器線程。例如,如果SMT處理器同時處理兩個處理器線程,則圖8中表示的處理將或是被執(zhí)行兩次(每一個線程一次),或是被修改為追蹤兩個線程的CPI。
圖9是表示了在SMT處理器間交換低性能線程所采取的步驟的流程圖。處理從900開始,在步驟905初始化(即,清理)交換列表970。在910選擇相應(yīng)于第一處理器的運行隊列915。在步驟920,通過搜索整個線程表925,尋找所選擇的運行隊列內(nèi)的具有最差(即最高的)CPI的線程,來識別第一運行隊列925內(nèi)的最差性能的線程。
確定該最差性能線程的CPI是否高于(即,差于)一個預(yù)先確定的閾值(判斷930)。做出這個確定以便確保僅有低性能的線程被交換,否則將會占用額外的資源來交換具有足夠性能的線程。如果線程的CPI不比該閾值差,判斷930轉(zhuǎn)向“否”分支932,它繞過了為了在SMT運行隊列間進行交換而將線程數(shù)據(jù)寫入交換列表所采取的步驟。在另一方面,如果線程的CPI比該閾值差,判斷930轉(zhuǎn)向“是”分支934,于是在步驟935,讀取以前交換的線程列表940以便查看該最低性能線程是否最近被交換過。以前交換的線程列表包括有關(guān)于已經(jīng)被交換的線程的數(shù)據(jù)。這個數(shù)據(jù)包括被交換的線程的標(biāo)識符、這些線程被交換時的CPI、以及指示著每個線程被最后交換的時間的時間戳。
確定最低性能的線程以前是否被交換過,這是由在以前交換的列表內(nèi)發(fā)現(xiàn)的該線程的標(biāo)識符所指示的(判斷945)。如果該線程以前被交換過,則判斷945轉(zhuǎn)向“是”分支948,于是確定該線程的CPI是否在交換后變差了或是在交換前更差(判斷950)。如果被交換后該線程的CPI改善了(即,不是更差了),則判斷950轉(zhuǎn)向“否”分支952,于是在步驟955,識別出來自所選的處理器運行隊列的下一個最差性能線程,并且處理循環(huán)回去以確定這個線程以前是否被交換過,以及交換后該線程的性能是提高還是下降了?;氐脚袛?50,如果所選的線程的CPI在交換后更差了,則判斷950轉(zhuǎn)向“是”分支956。
確定是否將識別出的線程包括到交換列表內(nèi)(判斷965)。這個判斷可以基于各種因素,諸如該線程的CPI是否比給定的閾值差,以及如果該線程以前被交換過,交換發(fā)生在多久之前??梢詻Q定不交換近期內(nèi)剛剛被交換過的線程,以避免在處理器運行隊列間將同一個線程換來換去。如果該線程將要被包括在交換列表中,判斷960轉(zhuǎn)向“是”分支962,于是在步驟965,通過將該線程的標(biāo)識符寫入交換列表970來更新該列表。在另一方面,如果線程不是將要包括在交換列表內(nèi),判斷960轉(zhuǎn)向“否”分支968,繞過步驟965。
確定是否還有其它的SMT處理器,可以從它們之上識別低性能線程(判斷975)。為了在處理器間交換線程,計算機系統(tǒng)內(nèi)至少要有兩個SMT處理器,因此判斷975將至少有一次轉(zhuǎn)向“是”分支978。
如果有更多的SMT處理器要處理,判斷975轉(zhuǎn)向“是”分支978,于是在步驟980,選擇該多處理器系統(tǒng)內(nèi)的下一個處理器,并且處理循環(huán)回去以從所選的SMT處理器識別一低性能線程。這個循環(huán)一直繼續(xù)直到所有的SMT處理器都被處理過了,此時判斷975轉(zhuǎn)向“否”分支982,于是在各個處理器之間交換交換列表內(nèi)的線程(預(yù)先定義的處理985,參見圖11和相應(yīng)文字來了解處理細節(jié))。在步驟990,更新以前交換的線程的列表940,以便記錄該些被交換的線程的線程標(biāo)識符、最后的CPI和時間戳。此外,如果系統(tǒng)內(nèi)包括多于兩個SMT處理器,則以前交換的線程列表也追蹤該線程所來自的處理器。此后處理在995處結(jié)束。
圖10是表示了識別低性能線程以便在多SMT處理器系統(tǒng)內(nèi)進行交換所采取的步驟的流程圖。處理從1000開始,于是在步驟1005,運行在SMT處理器中的一個處理器上的線程中的一個線程結(jié)束了(即,被搶占了,時間片到時等)。在步驟1010從線程表1015內(nèi)讀取該最近結(jié)束的線程的CPI,線程表1015包括有當(dāng)前正在執(zhí)行的線程的與CPI有關(guān)的信息。
確定最近結(jié)束的線程的CPI是否比一個預(yù)先確定的閾值差(判斷1020)。該預(yù)先確定的閾值是一個可以調(diào)整的值。將該閾值設(shè)高將減少識別出的低性能線程的數(shù)目,而相反地,將該值設(shè)低將增加識別出的低性能線程的數(shù)目。如果該最近結(jié)束的線程的CPI不比該閾值差,判斷1020轉(zhuǎn)向“否”分支1022,于是處理在1025結(jié)束。在另一方面,如果該最近結(jié)束的線程的CPI比該閾值差,判斷1020轉(zhuǎn)向“是”分支1028以執(zhí)行進一步的處理,以便最終確定該最近結(jié)束的線程是否應(yīng)被交換到其它處理器。
在步驟1030,讀取以前交換過的線程的數(shù)據(jù)結(jié)構(gòu)1040。這個數(shù)據(jù)結(jié)構(gòu)包括關(guān)于以前從一個SMT處理器被交換到另一個SMT處理器上的線程的信息,并且包括諸如線程的標(biāo)識符、線程在其最后被交換時的CPI、以及指示著該線程最后一次被交換的時間的時間戳。
確定該最近結(jié)束的線程是否是最近被交換的(判斷1050)。如果該最近結(jié)束的線程是以前交換過的,判斷1050轉(zhuǎn)向“是”分支1055,于是確定該最近結(jié)束的線程的CPI在交換后是否變差了(判斷1060)。如果在交換之后該最近結(jié)束的線程的CPI沒有變差(即相同或有所改善),判斷1060轉(zhuǎn)向“否”分支1065,于是在步驟1070,在所選擇的處理器上識別出下一個低性能線程,并且處理循環(huán)回去以確定新識別的線程是否比所述的閾值差,該線程是否以前被交換過,以及該新識別出的線程的CPI在被交換后是否變差了。這個循環(huán)一直繼續(xù)或是直到識別出的線程的CPI(基于線程的CPI)比給定的閾值好(此時處理在1025處結(jié)束),或是直到識別出其CPI比該閾值差的線程,并且該線程或是以前尚未被交換過了(判斷1050轉(zhuǎn)向“否”分支1075),或是在交換后其CPI變差了(判斷1060轉(zhuǎn)向“是”分支1078)。
當(dāng)已識別出了低性能的線程時,確定是否將識別出的線程包括到交換列表內(nèi)(判斷1080)。這個判斷可以基于各種其他因素,諸如多久以前該線程被交換,該線程在一個不同的處理器上執(zhí)行的情況好了多少(即,可將在不同處理器上的邊際改進(marginal improvement)與交換線程的操作相權(quán)衡)等等。如果該確定是仍然將該線程包括在交換列表內(nèi),判斷1080轉(zhuǎn)向“是”分支1082,于是在步驟1085,通過將線程的標(biāo)識符寫入交換列表1090內(nèi)更新交換列表。在另一方面,如果該確定是不將該線程包括在交換列表內(nèi),判斷1080轉(zhuǎn)向“否”分支1092,繞過步驟1085。此后處理在1095處結(jié)束。
圖11是表示了在SMT處理器間交換低性能線程所采取的步驟的流程圖。處理從1100開始,于是在步驟1110從交換列表獲取兩個線程的標(biāo)識符。在一個實施例中,交換列表用于交換來自多于兩個SMT處理器的線程。因此,交換列表既識別線程也識別所述線程最后執(zhí)行于其上的SMT處理器。此外,基于所述線程在不同處理器上的過去的性能,交換列表可以識別該線程應(yīng)被調(diào)度在其上的處理器。例如,在具有4個SMT處理器的系統(tǒng)內(nèi),其中一低性能線程已經(jīng)在第一、第二和第三個SMT處理器上試運行過了,則交換列表可以指出該線程應(yīng)被調(diào)度到第四個SMT處理器上運行。
在步驟1125,從交換列表中讀取的第一個線程被放置在一個不同的運行隊列上(即,相應(yīng)于一個不同的SMT處理器的運行隊列)。在步驟1130,從交換列表讀取的第二個線程也被放置在一個不同的運行隊列上。在一個實施例中,第一個線程被放置在與第二個線程相應(yīng)的運行隊列上,并且第二個線程被放置在與第一個線程相應(yīng)的運行隊列上。在步驟1140,更新線程表1150,反映出對線程的運行隊列所做的修改。在步驟1160,與這些線程有關(guān)的數(shù)據(jù)被寫入以前交換過的線程的數(shù)據(jù)結(jié)構(gòu)1170。這個數(shù)據(jù)包括線程的標(biāo)識符、線程在被交換時的CPI、以及指示線程被交換的時刻的當(dāng)前時間戳。
在步驟1175,從交換列表1120內(nèi)刪除與剛剛被交換到不同運行隊列的線程相應(yīng)的信息。確定交換列表內(nèi)是否還有更多表項需要被交換(判斷1180)。如果交換列表內(nèi)還有其它表項,判斷1180轉(zhuǎn)向“是”分支1190,它循環(huán)回去以便交換交換列表內(nèi)的下兩個表項(并且從該列表內(nèi)刪除這些表項)。這個循環(huán)一直繼續(xù)直到交換列表為空時為止,此時判斷1180轉(zhuǎn)向“否”分支1192,并且處理在1195處結(jié)束。
圖12表示了信息處理系統(tǒng)1201,該系統(tǒng)是能夠執(zhí)行此處說明的計算操作的計算機系統(tǒng)的一個簡化的例子。計算機系統(tǒng)1201包括處理器1200,它連接到主機總線1202。二級(L2)高速緩沖存儲器1204也連接到主機總線1202。主機到PCI的橋1206連接于主存儲器1208,該橋包括高速緩沖存儲器和主存儲器控制功能,并且提供總線控制以便處理PCI總線1210、處理器1200、L2高速緩存1204、主存儲器1208與主機總線1202之間的傳輸。主存儲器1208連接于主機到PIC橋1206以及主機總線1202。完全由(諸)主機處理器1200使用的設(shè)備,諸如LAN卡1230,連接于PCI總線1210。服務(wù)處理器接口和ISA訪問直通(ISA Access Pass-through)1212在PCI總線1210和PCI總線1214之間提供了一個接口。以這種方式,PCI總線1214被從PCI總線1210分隔開。諸如閃速存儲器1218的設(shè)備連接于PCI總線1214。在一種實現(xiàn)中,閃速存儲器1218包括BIOS代碼,它包括有用于各種低級系統(tǒng)功能和系統(tǒng)啟動功能的必要的處理器可執(zhí)行的代碼。
PCI總線1214為由(諸)處理器1200和服務(wù)處理器1216共享的各種設(shè)備提供了一個接口,所述的設(shè)備包括,例如,閃速存儲器1218。PCI到ISA橋1235提供了總線控制以便處理PCI總線1214和ISA總線1240間傳輸、通用串行總線(USB)功能1245、電源管理功能1255,并且能夠包括其它未給出的功能元件,諸如實時時鐘(RTC)、DMA控制、中斷支持和系統(tǒng)管理總線支持。非易失RAM 1220連接于ISA總線1240。PCI到SCSI橋1280提供了總線控制以便處理PCI總線1214和SCSI總線1285間的傳輸。SCSI設(shè)備1290(即,SCSI硬盤驅(qū)動器)使用SCSI總線1285與計算機系統(tǒng)1201的其它部分通信。
服務(wù)處理器1216包括用于在初始化步驟中與(諸)處理器1200通信的JTAG和I2C總線1222。JTAG/I2C總線1222也連接于L2高速緩存1204、主機到PCI橋1206以及主存儲器1208,提供了處理器、服務(wù)處理器、L2高速緩存、主機到PCI橋以及主存儲器之間的通信路徑。服務(wù)處理器1216還可訪問系統(tǒng)電源資源以便關(guān)閉信息處理設(shè)備1201的電源。
外圍設(shè)備和輸入/輸出(I/O)設(shè)備可以被連接到各種接口上(例如,并行接口1262、串行接口1264、鍵盤接口1268和連接于ISA總線1240的鼠標(biāo)接口1270)。或者,可由一個連接到ISA總線1240上的超級I/O控制器(未示出)來接納許多I/O設(shè)備。
為了將計算機系統(tǒng)1201連接于其它的計算機系統(tǒng)以便通過網(wǎng)絡(luò)復(fù)制文件,LAN卡1230被連接于PCI總線1210。類似地,為了使用電話線連接將計算機系統(tǒng)1201連接到ISP以便連接到因特網(wǎng),調(diào)制解調(diào)器1275被連接到串口1264和PCI到ISA橋1235。
雖然圖12中說明的計算機系統(tǒng)能夠執(zhí)行此處說明的過程,但是這個計算機系統(tǒng)只是計算機系統(tǒng)的一個例子。本領(lǐng)域的技術(shù)人員可以理解許多其它的計算機系統(tǒng)設(shè)計能夠執(zhí)行此處說明的過程。
本發(fā)明的一個優(yōu)選實施方式是一個應(yīng)用程序,也就是一個代碼模塊內(nèi)的一組指令(程序代碼),該代碼模塊可以,例如,駐留在計算機的隨機訪問存儲器內(nèi)。直到該計算機需要時為止,這組指令可以被存儲在其它的計算機存儲器內(nèi),例如,在硬盤驅(qū)動器上,或是在可移動存儲裝置中,諸如光盤(最后用于CD ROM中)或軟盤(最后用于軟盤驅(qū)動器)中,或通過因特網(wǎng)或其它計算機網(wǎng)絡(luò)下載。因此,本發(fā)明可以被實現(xiàn)為用于計算機內(nèi)的計算機程序產(chǎn)品。此外,雖然所說明的各種方法被方便地實現(xiàn)于由軟件可選擇地激活的或重新配置的通用計算機內(nèi),本領(lǐng)域的普通技術(shù)人員將會認(rèn)識到,這些方法可以在硬件、固件或在被構(gòu)造用來執(zhí)行所需要的方法步驟的更專用的裝置內(nèi)執(zhí)行。
雖然已經(jīng)給出并說明了本發(fā)明的特定的實施例,對于本領(lǐng)域的技術(shù)人員來說顯而易見的是,基于此處講述,可以做出改變和改型而不脫離本發(fā)明和其更寬的方面,因此,所附的權(quán)利要求將在它們的范圍內(nèi)包括所有處在本發(fā)明的實際精神和范圍之內(nèi)的改變和改型。此外,應(yīng)當(dāng)理解,本發(fā)明完全由所附的權(quán)利要求定義。本領(lǐng)域的技術(shù)人員可以理解如果打算的是所引入的權(quán)利要求要素的特定數(shù)目,這種打算將被明確地表述在權(quán)利要求內(nèi),并且在沒有這種表述的地方,就沒有這種限制。為了幫助理解,作為一個非限制性的例子,下面所附的權(quán)利要求包含引導(dǎo)性的短語“至少一個”和“一個或多個”以便引出權(quán)利要求要素。然而,這種短語的使用不應(yīng)被理解成暗示,用不定冠詞“一”或“一個”引出的權(quán)利要求要素將包含這種被引出的權(quán)利要求要素的任何特定的權(quán)利要求限制為僅包括一個這種要素的發(fā)明,即使當(dāng)該同一權(quán)利要求包括引導(dǎo)性的短語“一個或多個”或“至少一個”以及不定冠詞諸如“一”或“一個”時;同樣的規(guī)則對于定冠詞權(quán)利要求中的使用也成立。
權(quán)利要求
1.一種識別兼容的軟件線程以便在SMT處理器上執(zhí)行的、計算機實施的方法,該方法包括識別一個時間間隔,在這個時間間隔內(nèi)第一線程和第二線程兩者都運行在SMT處理器上;獲取在識別出的時間間隔內(nèi)發(fā)生的性能值;基于所獲取的性能值,確定第一線程是否與第二線程兼容;以及響應(yīng)該確定操作,記錄第一線程與第二線程的兼容性。
2.如權(quán)利要求1的方法,其中所述性能值是每條指令的周期數(shù)(CPI)值。
3.如權(quán)利要求2的方法,其中所述CPI值還包括獲取指示著發(fā)生于所述時間間隔內(nèi)的處理周期數(shù)的周期數(shù)目值;獲取指示著在所述時間間隔內(nèi)由SMT處理器執(zhí)行的指令數(shù)目的指令數(shù)目值;以及將所述周期數(shù)目值除以所述指令數(shù)目值,除得的結(jié)果是所述CPI值。
4.如權(quán)利要求2的方法,還包括將該CPI值與一個閾值比較,其中如果該CPI值好于該閾值,則確定第一線程和第二線程兼容。
5.如權(quán)利要求2的方法,還包括將相應(yīng)于第一線程的第一標(biāo)識符和該CPI值寫入相應(yīng)于第二線程的兼容性列表內(nèi)。
6.如權(quán)利要求5的方法,其中所述寫操作是響應(yīng)在第二線程的兼容性列表內(nèi)識別出了一個空字段而執(zhí)行的。
7.如權(quán)利要求5的方法,其中所述寫操作是響應(yīng)下面的處理而執(zhí)行的將該CPI值與以前記錄的、與以前識別出的一個或多個兼容線程相應(yīng)的一個或多個CPI值比較;以及確定該CPI好于所述以前記錄的CPI值中的至少一個CPI值。
8.如權(quán)利要求7的方法,還包括在所述寫操作之前,刪除與以前識別出的兼容線程中的一個線程相應(yīng)的一個以前記錄的CPI值和數(shù)據(jù)。
9.如權(quán)利要求1的方法,還包括將與第一線程相應(yīng)的第一標(biāo)識符寫入與第二線程相應(yīng)的兼容性列表內(nèi),其中該兼容性列表存儲了與第二線程兼容的多個線程的標(biāo)識符。
10.如權(quán)利要求9的方法,還包括寫入與第一標(biāo)識符相應(yīng)的時間戳,該時間戳指示著所述時間間隔發(fā)生的時刻,其中所述多個線程標(biāo)識符中的每個線程標(biāo)識符還包括一個時間戳,所述時間戳指示著每個線程與第二線程共同執(zhí)行的時刻。
11.如權(quán)利要求10的方法,還包括周期地清理多個兼容性列表,包括第二線程的兼容性列表,所述清理包括讀取與列于兼容性列表內(nèi)的每個線程相應(yīng)的表項;將列于兼容性列表內(nèi)的時間戳與當(dāng)前時間進行比較;基于所述比較,確定與該時間戳相關(guān)聯(lián)的表項是否過時了;以及響應(yīng)該表項已經(jīng)過時了的確定刪除該表項。
12.如權(quán)利要求1的方法,還包括檢測到第一或第二線程將要結(jié)束;調(diào)度一個新的線程以便執(zhí)行,所述調(diào)度包括識別出一個兼容的線程,所述兼容的線程與那個不是將要結(jié)束的線程兼容;確定該兼容的線程是否準(zhǔn)備好了執(zhí)行;以及調(diào)度該兼容的線程以便在SMT處理器上執(zhí)行。
13.如權(quán)利要求12的方法,其中所述將要結(jié)束的線程和所述兼容的線程列于第一運行隊列中,并且其中不是將要結(jié)束的線程列于第二運行隊列中。
14.一種調(diào)度軟件線程以便在SMT處理器上執(zhí)行的、計算機實施的方法,所述方法包括檢測一個將要結(jié)束在所述SMT處理器上的執(zhí)行的將結(jié)束的線程;識別一個仍然運行在所述SMT處理器上的正在運行的線程;檢查一個或多個兼容的線程的一個列表,其中所述兼容的線程與所述正在運行的線程兼容;確定所述兼容的線程中的一個線程準(zhǔn)備好了執(zhí)行;以及調(diào)度該被確定的線程以便在SMT處理器上執(zhí)行。
15.如權(quán)利要求14的方法,其中所述將結(jié)束的線程和所述兼容線程列于第一運行隊列中,并且其中所述正在運行的線程列于第二隊列中。
16.如權(quán)利要求14的方法,其中所述確定所述兼容線程中的一個線程準(zhǔn)備好了執(zhí)行的步驟還包括按照CPI值的順序檢查兼容線程是否準(zhǔn)備好了執(zhí)行,其中按照由相應(yīng)于每個兼容線程的CPI值所確定的順序檢查兼容線程,從而具有較好CPI值的兼容線程被首先檢查。
17.一種信息處理系統(tǒng),包括一個或多個SMT處理器;可由所述處理器訪問的存儲器;用于識別兼容線程以便在所述SMT處理器中的一個處理器上執(zhí)行的兼容性工具,所述兼容性工具包括可以有效地用于下述處理的軟件代碼識別一個時間間隔,在這個時間間隔內(nèi)第一線程和第二線程兩者都運行在SMT處理器上;獲取在該識別出的時間間隔內(nèi)發(fā)生的性能值;基于所獲取的性能值,確定第一線程是否與第二線程兼容;以及響應(yīng)該確定操作,記錄第一線程與第二線程的兼容性。
18.如權(quán)利要求17的信息處理系統(tǒng),其中所述性能值是每條指令的周期數(shù)(CPI)值。
19.如權(quán)利要求18的信息處理系統(tǒng),其中所述CPI值是使用能夠有效地進行下述處理的軟件代碼計算的獲取指示著發(fā)生于所述時間間隔內(nèi)的周期數(shù)的周期數(shù)目值;獲取指示著在所述時間間隔內(nèi)執(zhí)行的指令數(shù)目的指令數(shù)目值;以及將所述周期數(shù)目值除以所述指令數(shù)目值,除得的結(jié)果是所述CPI值。
20.如權(quán)利要求18的信息處理系統(tǒng),還包括能夠有效地進行下述處理的軟件代碼將該CPI值與一個閾值比較,其中如果該CPI值好于該閾值,則確定第一線程和第二線程兼容。
21.如權(quán)利要求18的信息處理系統(tǒng),還包括能夠有效地進行下述處理的軟件代碼將相應(yīng)于第一線程的第一標(biāo)識符和所述CPI值寫入相應(yīng)于第二線程的兼容性列表內(nèi)。
22.如權(quán)利要求21的信息處理系統(tǒng),其中所述寫操作是響應(yīng)有效地在第二線程的兼容性列表內(nèi)識別出一個空字段的軟件代碼而執(zhí)行的。
23.如權(quán)利要求21的信息處理系統(tǒng),其中所述寫操作是響應(yīng)有效地進行如下處理的軟件代碼而執(zhí)行的將該CPI值與以前記錄的與以前識別出的一個或多個兼容線程相應(yīng)的一個或多個CPI值比較;以及確定該CPI好于所述以前記錄的CPI值中的至少一個CPI值。
24.如權(quán)利要求23的信息處理系統(tǒng),還包括能夠有效地進行如下處理的軟件代碼在所述寫操作之前,刪除與以前識別出的兼容線程中的一個線程相應(yīng)的一個以前記錄的CPI值和數(shù)據(jù)。
25.如權(quán)利要求17的信息處理系統(tǒng),還包括能夠有效地進行如下處理的軟件代碼將與第一線程相應(yīng)的第一標(biāo)識符寫入與第二線程相應(yīng)的兼容性列表內(nèi),其中該兼容性列表存儲了與第二線程兼容的多個線程的標(biāo)識符。
26.如權(quán)利要求25的信息處理系統(tǒng),還包括能夠有效地進行如下處理的軟件代碼記錄與第一標(biāo)識符相應(yīng)的時間戳,該時間戳指示著所述時間間隔發(fā)生的時刻,其中所述多個線程標(biāo)識符中的每個線程標(biāo)識符還包括一個時間戳,所述時間戳指示著每個線程與第二線程共同執(zhí)行的時刻。
27.如權(quán)利要求26的信息處理系統(tǒng),還包括能夠有效地進行如下處理的軟件代碼周期地清理多個兼容性列表,包括第二線程的兼容性列表,所述清理包括能夠有效地進行如下處理的軟件代碼讀取與列于兼容性列表內(nèi)的每個線程相應(yīng)的表項;將列于兼容性列表內(nèi)的時間戳與當(dāng)前時間進行比較;基于所述比較,確定與該時間戳相關(guān)聯(lián)的表項是否過時了;以及響應(yīng)確定該表項已經(jīng)過時了的操作刪除該表項。
28.如權(quán)利要求17的信息處理系統(tǒng),還包括能夠有效地進行如下處理的軟件代碼檢測到第一或第二線程將要結(jié)束;調(diào)度一個新的線程以便執(zhí)行,所述調(diào)度包括能夠有效地進行如下處理的軟件代碼識別出一個兼容的線程,所述兼容線程與那個不是將要結(jié)束的線程兼容;確定該兼容的線程是否準(zhǔn)備好了執(zhí)行;以及調(diào)度該兼容的線程以便在SMT處理器上執(zhí)行。
29.如權(quán)利要求28的信息處理系統(tǒng),其中所述將要結(jié)束的線程和所述兼容的線程被列于第一運行隊列中,并且其中不是將要結(jié)束的線程列于第二運行隊列中。
30.一種信息處理系統(tǒng),包括一個或多個SMT處理器;可由所述處理器訪問的存儲器;用于調(diào)度兼容線程以便在所述SMT處理器中一個SMT處理器上同時執(zhí)行的調(diào)度工具,所述調(diào)度工具包括能夠有效地進行如下操作的軟件代碼檢測一個將要結(jié)束在所述SMT處理器上的執(zhí)行的將結(jié)束的線程;識別一個仍然在所述SMT處理器上執(zhí)行的正在運行的線程;檢查一個或多個兼容的線程的一個列表,其中所述兼容的線程與所述正在運行的線程兼容;確定所述兼容的線程中的一個線程準(zhǔn)備好了執(zhí)行;以及調(diào)度該被確定的線程以便在SMT處理器上執(zhí)行。
31.如權(quán)利要求30的信息處理系統(tǒng),其中所述將結(jié)束的線程和所述兼容的線程列于第一運行隊列中,并且其中所述正在運行的線程列于第二運行隊列中。
32.如權(quán)利要求30的信息處理系統(tǒng),其中所述確定所述兼容線程中的一個線程準(zhǔn)備好了執(zhí)行的操作還包括能夠有效地進行如下操作的軟件代碼按照CPI值的順序檢查兼容線程是否準(zhǔn)備好了執(zhí)行,其中按照由相應(yīng)于每個兼容線程的CPI值所確定的順序檢查兼容線程,從而具有較好CPI值的兼容線程被首先檢查。
33.一種存儲在計算機可以使用的介質(zhì)上的計算機程序產(chǎn)品,用于識別兼容的軟件線程以在一個SMT處理器上執(zhí)行,所述計算機程序產(chǎn)品包括用于識別一個時間間隔的單元,在這個時間間隔內(nèi)第一線程和第二線程兩者都運行在SMT處理器上;用于獲取在該識別出的時間間隔內(nèi)發(fā)生的性能值的單元;用于基于所獲取的性能值,確定第一線程是否與第二線程兼容的單元;以及用于響應(yīng)該確定操作,記錄第一線程與第二線程的兼容性的單元。
34.如權(quán)利要求33的計算機程序產(chǎn)品,其中所述性能值是每條指令的周期數(shù)(CPI)值。
35.如權(quán)利要求34的計算機程序產(chǎn)品,其中計算所述CPI值包括用于獲取指示著發(fā)生于所述時間間隔內(nèi)的處理周期數(shù)的周期數(shù)目值的單元;用于獲取指示著在所述時間間隔內(nèi)由SMT處理器執(zhí)行的指令數(shù)目的指令數(shù)目值的單元;以及用于將所述周期數(shù)目值除以所述指令數(shù)目值、除得的結(jié)果是所述CPI值的單元。
36.如權(quán)利要求34的計算機程序產(chǎn)品,還包括用于將該CPI值與一個閾值比較的單元,其中如果該CPI值好于該閾值,則確定第一線程與第二線程兼容。
37.如權(quán)利要求34的計算機程序產(chǎn)品,還包括用于將相應(yīng)于第一線程的第一標(biāo)識符和所述CPI值寫入相應(yīng)于第二線程的兼容性列表內(nèi)的單元。
38.如權(quán)利要求37的計算機程序產(chǎn)品,其中所述寫操作是響應(yīng)在第二線程的兼容性列表內(nèi)識別出了一個空字段而執(zhí)行的。
39.如權(quán)利要求37的計算機程序產(chǎn)品,其中所述用于寫操作單元是響應(yīng)以下單元而執(zhí)行的用于將該CPI值與以前記錄的與以前識別出的一個或多個兼容線程相應(yīng)的一個或多個CPI值進行比較的單元;以及用于確定該CPI好于所述以前記錄的CPI值中的至少一個CPI值的單元。
40.如權(quán)利要求39的計算機程序產(chǎn)品,還包括用于在所述寫操作之前,刪除與以前識別出的兼容線程中的一個線程相應(yīng)的一個以前記錄的CPI值和數(shù)據(jù)的單元。
41.如權(quán)利要求33的計算機程序產(chǎn)品,還包括用于將與第一線程相應(yīng)的第一標(biāo)識符寫入與第二線程相應(yīng)的兼容性列表內(nèi)的單元,其中該兼容性列表存儲了與第二線程兼容的多個線程的標(biāo)識符。
42.如權(quán)利要求41的計算機程序產(chǎn)品,還包括用于記錄與第一標(biāo)識符相應(yīng)的時間戳的單元,該時間戳指示著所述時間間隔發(fā)生的時刻,其中多個線程標(biāo)識符中的每個線程標(biāo)識符還包括一個時間戳,所述時間戳指示著每個線程與第二線程共同執(zhí)行的時刻。
43.如權(quán)利要求42的計算機程序產(chǎn)品,還包括用于周期地清理多個兼容性列表,包括第二線程的兼容性列表的單元,所述清理包括用于讀取與列于兼容性列表內(nèi)的每個線程相應(yīng)的表項的單元;用于將列于兼容性列表內(nèi)的時間戳與當(dāng)前時間進行比較的單元;用于基于所述比較,確定與該時間戳相關(guān)聯(lián)的表項是否過時了的單元;以及用于響應(yīng)所述確定該表項已經(jīng)過時了的操作刪除該表項的單元。
44.如權(quán)利要求33的計算機程序產(chǎn)品,還包括用于檢測到第一或第二線程將要結(jié)束的單元;用于調(diào)度一個新的線程以便執(zhí)行的單元,所述調(diào)度包括用于識別出一個兼容的線程的單元,所述兼容線程與那個不是將要結(jié)束的線程兼容;用于確定該兼容線程是否準(zhǔn)備好了執(zhí)行的單元;以及用于調(diào)度該兼容的線程以便在SMT處理器上執(zhí)行的單元。
45.如權(quán)利要求44的計算機程序產(chǎn)品,其中所述將要結(jié)束的線程和所述兼容的線程被列于第一運行隊列中,并且其中所述不是將要結(jié)束的線程列于第二運行隊列中。
46.一種存儲在計算機可以使用的介質(zhì)上的計算機程序產(chǎn)品,用于識別在一個SMT處理器上執(zhí)行的兼容的軟件線程,所述計算機程序產(chǎn)品包括用于檢測一個將要結(jié)束在所述SMT處理器上的執(zhí)行的將結(jié)束的線程的單元;用于識別一個仍然在所述SMT處理器上執(zhí)行的正在運行的線程的單元;用于檢查一個或多個兼容的線程的一個列表的單元,其中所述兼容的線程與所述正在運行的線程兼容;用于確定兼容的線程中的一個線程準(zhǔn)備好了執(zhí)行的單元;以及用于調(diào)度該被確定的線程以便在SMT處理器上執(zhí)行的單元。
47.如權(quán)利要求46的計算機程序產(chǎn)品,其中所述將結(jié)束的線程和所述兼容線程列于第一運行隊列中,并且其中所述正在運行的線程列于第二隊列中。
48.如權(quán)利要求46的計算機程序產(chǎn)品,其中所述確定兼容線程中的一個線程準(zhǔn)備好了執(zhí)行的操作還包括用于按照CPI值的順序檢查兼容線程是否準(zhǔn)備好了執(zhí)行的單元,其中按照由相應(yīng)于每個兼容線程的CPI的值所確定的順序檢查兼容線程,從而具有較好CPI值的兼容線程被首先檢查。
全文摘要
本發(fā)明提供了一種用于在同時多線程(SMT)處理器環(huán)境中通過計算性能度量,諸如當(dāng)兩個線程運行在該SMT處理器上時發(fā)生的CPI,來識別兼容的線程的系統(tǒng)和方法。確定當(dāng)兩個線程運行在所述SMT處理器上時所獲得的CPI。如果所獲得的CPI好于一個兼容性閾值,則記錄指示兼容性的信息。當(dāng)一個線程將要結(jié)束時,調(diào)度器在將要結(jié)束的線程所屬的運行隊列內(nèi)尋找并調(diào)度另一個線程。調(diào)度器識別這樣的線程該線程(1)與仍然運行在SMT處理器上的線程(即,不是將要結(jié)束的線程)兼容,并且(2)準(zhǔn)備好了執(zhí)行。不斷地更新CPI數(shù)據(jù),從而不斷地識別出與另一線程兼容的線程。
文檔編號G06F9/46GK1601476SQ20041008008
公開日2005年3月30日 申請日期2004年9月24日 優(yōu)先權(quán)日2003年9月25日
發(fā)明者J·M·阿卡帕蒂, A·杜希, D·米歇爾, M·S·斯里尼瓦斯 申請人:國際商業(yè)機器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
体育| 乐东| 封开县| 梨树县| 吴旗县| 马鞍山市| 长兴县| 安塞县| 无锡市| 贺州市| 金昌市| 南乐县| 阿克苏市| 镇远县| 武城县| 义马市| 崇文区| 黄平县| 陕西省| 嘉荫县| 全椒县| 武隆县| 正定县| 灵台县| 定兴县| 托克托县| 南通市| 无极县| 禄丰县| 腾冲县| 两当县| 常山县| 阳曲县| 中卫市| 合江县| 泾川县| 遂溪县| 江山市| 巴彦淖尔市| 浦江县| 灵寿县|