專利名稱:用戶級(jí)線程的調(diào)度優(yōu)化的制作方法
用戶級(jí)線程的調(diào)度優(yōu)化技術(shù)領(lǐng)域本公開(kāi)一般涉及信息處理系統(tǒng),更具體地說(shuō),涉及操作系統(tǒng)未調(diào) 度的用戶級(jí)線程的自調(diào)度的改進(jìn)效率。
背景技術(shù):
為了提高信息處理系統(tǒng)(例如包括微處理器的那些系統(tǒng))的性能, 已經(jīng)采用了硬件和軟件技術(shù)。在硬件方面,提高微處理器性能的微處 理器設(shè)計(jì)方法包括增加的時(shí)鐘速度、流水線、分支預(yù)測(cè)、超標(biāo)量執(zhí)行、 亂序執(zhí)行和高速緩存。許多此類方法導(dǎo)致增加的晶體管個(gè)數(shù),并且甚 至在某些情況中導(dǎo)致了晶體管個(gè)數(shù)增加的速度大于提高性能的速度。相對(duì)于嘗試通過(guò)附加的晶體管來(lái)努力地提高性能,其他性能增強(qiáng) 方式包括軟件技術(shù)。已用來(lái)提高處理器性能的一種軟件方法公知為 "多線程"。在軟件多線程中,可以將一個(gè)指令流分成可以并行執(zhí)行 的多個(gè)指令流?;蛘?,可以并行地執(zhí)行多個(gè)獨(dú)立軟件流。在一種公知為時(shí)間片多線程或時(shí)分復(fù)用("TMUX")多線程的方 法中,單個(gè)處理器在固定的時(shí)間期間之后在多個(gè)線程之間進(jìn)行切換。 在另一種方法中,單個(gè)處理器在發(fā)生觸發(fā)事件(例如長(zhǎng)等待時(shí)間的高 速緩存未命中)時(shí)在多個(gè)線程之間切換。在后一種公知為基于事件切 換多線程("SoEMT")的方法中,在給定的時(shí)間最多僅一個(gè)線程是活 動(dòng)的。多線程越來(lái)越多地在硬件中得到支持。例如,在一種方法中,多 處理器系統(tǒng)(例如芯片多處理器("CMP")系統(tǒng))中的處理器可以同 時(shí)地分別對(duì)多個(gè)軟件線程的其中 一個(gè)進(jìn)行操作。在另一種稱為同時(shí)多線程("SMT")的方法中,使單個(gè)物理處理 器對(duì)于操作系統(tǒng)和用戶程序看上去像是多個(gè)邏輯處理器。對(duì)于SMT,多個(gè)軟件線程可以同時(shí)在單個(gè)處理器上活動(dòng)并執(zhí)行而不進(jìn)行切換。 即,每個(gè)邏輯處理器維護(hù)一組完整的體系結(jié)構(gòu)狀態(tài),但是共享物理處 理器的許多其他資源,例如高速緩存、執(zhí)行單元、分支預(yù)測(cè)器、控制邏輯和總線。因此對(duì)于SMT,來(lái)自多個(gè)軟件線程的指令各在不同的邏輯處理器上同時(shí)執(zhí)行。對(duì)于支持軟件線程的同時(shí)執(zhí)行的系統(tǒng)(例如SMT和/或CMP系 統(tǒng)),操作系統(tǒng)應(yīng)用程序可以控制軟件線程的調(diào)度和執(zhí)行。但是,通 常操作系統(tǒng)控制規(guī)劃得不是很好;操作系統(tǒng)應(yīng)用程序能夠在不負(fù)面地 影響性能的情況下調(diào)度線程通常局限于相對(duì)較小數(shù)量的線程。
可以參考如下附圖來(lái)理解本發(fā)明的實(shí)施例,附圖中相似的編號(hào)指 示相似的部件。這些附圖無(wú)意作為限制,而是用于"^兌明在多線程化系 統(tǒng)中以具有判斷力地調(diào)度用戶級(jí)線程的設(shè)備、系統(tǒng)和方法的所選實(shí)施例。圖1是呈示多循序器系統(tǒng)的通用并行編程方法的圖表示的框圖。 圖2是示出用戶級(jí)多線程的至少 一個(gè)實(shí)施例的線程和微程之間共享的存儲(chǔ)器和狀態(tài)的框圖。圖3是示出多循序器系統(tǒng)的多種實(shí)施例的框圖。圖4是示出用于支持用戶級(jí)微程的多循序器多線程系統(tǒng)的調(diào)度機(jī)制的至少一個(gè)實(shí)施例的數(shù)據(jù)流程圖。圖5是示出軟件運(yùn)行時(shí)(runtime)庫(kù)的至少一個(gè)實(shí)施例的框圖。 圖6是示出能夠生成用戶級(jí)線程的調(diào)度提示的軟件運(yùn)行時(shí)庫(kù)的至少 一個(gè)實(shí)施例的數(shù)據(jù)流程圖。圖7是示出示例微程相關(guān)性圖的至少一個(gè)實(shí)施例的有向圖。圖8是示出示例有時(shí)間戳的微程相關(guān)性圖的至少一個(gè)實(shí)施例的有向圖。圖9是示出用于生成調(diào)度提示的方法的至少一個(gè)實(shí)施例的流程圖。圖10是示出能夠執(zhí)行^Hf的技術(shù)的系統(tǒng)的至少一個(gè)實(shí)施例的框圖。圖11是示出數(shù)據(jù)遷移優(yōu)化方法的數(shù)據(jù)流程圖。
具體實(shí)施方式
下文論述描述用于提高不是由操作系統(tǒng)創(chuàng)建或調(diào)度的執(zhí)行的多 個(gè)同時(shí)執(zhí)行的用戶級(jí)線程(稱為"微程")的調(diào)度效率的方法、系統(tǒng) 和制造產(chǎn)品的所選實(shí)施例。由反饋驅(qū)動(dòng)的調(diào)度器來(lái)調(diào)度這些微程,該 反饋驅(qū)動(dòng)的調(diào)度器能夠基于運(yùn)行時(shí)反饋和微程間相關(guān)性的預(yù)測(cè)來(lái)動(dòng) 態(tài)地調(diào)整微程調(diào)度??梢哉{(diào)度微程在一個(gè)或多個(gè)OS隔離(OS-sequestered)的循序器 (sequencer)上運(yùn)行。本文中有時(shí)將OS隔離的循序器稱為"OS不可見(jiàn) 的";操作系統(tǒng)不在此類循序器上調(diào)度工作。本文描述的這些機(jī)制可 以結(jié)合單核或多核多線程系統(tǒng)來(lái)使用。在下文描述中,闡述了諸如處 理器類型、多線程環(huán)境、系統(tǒng)配置和多循序器系統(tǒng)中的循序器的數(shù)量 和拓樸的許多特定細(xì)節(jié)以便能夠更透徹地理解本發(fā)明。然而本領(lǐng)域技 術(shù)人員將認(rèn)識(shí)到,沒(méi)有這些特定細(xì)節(jié),仍可以實(shí)施本發(fā)明。此外,未 詳細(xì)示出一些^^知的結(jié)構(gòu)、電路等,以免不必要地妨礙對(duì)本發(fā)明的理 解??梢栽诜Q為并行編程的方法中使用共享的存儲(chǔ)器多處理范例 (multiprocessing paradigm )。根據(jù)該方法,應(yīng)用程序程序"i殳計(jì)員可以 將有時(shí)稱為"應(yīng)用程序"或"進(jìn)程"的軟件程序拆分成要同時(shí)運(yùn)行的 多個(gè)任務(wù),以便表現(xiàn)軟件程序的并行性。相同軟件程序("進(jìn)程")的 所有線程共享存儲(chǔ)器的共用邏輯視圖。圖1是示出多循序器多線程系統(tǒng)上的并行編程方法的圖表示的框 圖。圖1示出對(duì)于操作系統(tǒng)("OS" ) 140可見(jiàn)的進(jìn)程100、 103、 120。 這些進(jìn)程100、 103、 120可以是不同的專欠件應(yīng)用程序,例如字處理程序、圖形程序和電子郵件管理程序。通常,每個(gè)進(jìn)程在不同的虛擬地 址空間中工作。操作系統(tǒng)("OS" ) 140通常負(fù)責(zé)管理進(jìn)程(例如進(jìn)程103和120 ) 的用戶定義的任務(wù)。雖然每個(gè)進(jìn)程具有至少一個(gè)任務(wù)(例如,參見(jiàn)進(jìn) 程0 100和進(jìn)程2 103),但是其他進(jìn)程可能具有一個(gè)以上(例如進(jìn)程 1 120)此類任務(wù)。不應(yīng)將圖1所示的進(jìn)程的數(shù)量以及每個(gè)進(jìn)程的用戶 定義的任務(wù)的數(shù)量視為限制。這樣圖示僅是出于解釋的目的。圖1示出可以在操作系統(tǒng)140中創(chuàng)建與進(jìn)程120關(guān)聯(lián)的每個(gè)用戶 定義的任務(wù)的不同線程125、 126,并且操作系統(tǒng)140可以將線程125、 126映射到線程執(zhí)行資源。(圖1中未示出線程執(zhí)行資源,但是下文對(duì) 此進(jìn)行詳細(xì)論述。)相似地,可以在操作系統(tǒng)中創(chuàng)建與進(jìn)程103關(guān)聯(lián) 的用戶定義的任務(wù)的線程127;也可以創(chuàng)建與進(jìn)程0關(guān)聯(lián)的用戶定義 的任務(wù)的線程124。OS 140通常負(fù)責(zé)調(diào)度這些線程125、 126、 127以便在執(zhí)行資源上 執(zhí)行。與相同進(jìn)程相關(guān)的線程常常具有相同的虛擬存儲(chǔ)器地址空間。因?yàn)镺S140負(fù)責(zé)創(chuàng)建、映射和調(diào)度線程,所以線程125、 126、 127對(duì)于OS 140是"可見(jiàn)的"。此外,本發(fā)明的實(shí)施例包含對(duì)于OS 140 不可見(jiàn)的附加線程130-139。即,OS140不創(chuàng)建、管理或以其他方式 確認(rèn)或控制這些附加線程130-139。這些附加線程既不由OS 140創(chuàng)建 也不由OS140控制,本文有時(shí)將它們稱為"微程"130-139以便將它 們與OS可見(jiàn)的線程相區(qū)分。微程由用戶級(jí)程序(稱為"微程化程序") 創(chuàng)建和管理,并且可以調(diào)度微程在與操作系統(tǒng)隔離的循序器上運(yùn)行。 OS隔離的循序器常常共享一組共用的環(huán)(ring)0狀態(tài)作為OS可見(jiàn)的循 序器。這些共享的環(huán)-0體系結(jié)構(gòu)狀態(tài)常常是負(fù)責(zé)支持OS可見(jiàn)的循序 器與OS隔離的循序器之間的共用共享的存儲(chǔ)器地址空間的那些狀 態(tài)。例如,對(duì)于基于IA-32體系結(jié)構(gòu)的實(shí)施例,CR0、 CR2、 CR3、 CR4是這些共享的環(huán)-0體系結(jié)構(gòu)狀態(tài)的其中一些。因此,微程共享對(duì) 相同進(jìn)程所關(guān)聯(lián)的線程創(chuàng)建的相同執(zhí)行環(huán)境(虛擬地址映射)。如本文所使用的,術(shù)語(yǔ)"線程"和"微程"至少包括要與進(jìn)程的 其他線程和/或微程同時(shí)執(zhí)行的一組指令的概念。因此,線程和"微程" 術(shù)語(yǔ)都涵蓋一組軟件原語(yǔ)或應(yīng)用程序編程接口 (API)的理念。如本文所使用的,都是指令流的線程(由OS控制)和微程(對(duì)于操作系 統(tǒng)不可見(jiàn)而是由用戶控制)之間的區(qū)分因素取決于如何管理相應(yīng)的線 程和微程指令流的調(diào)度和執(zhí)行之間的差異。線程是響應(yīng)對(duì)OS的系統(tǒng) 調(diào)用而生成的。OS生成該線程并分配資源來(lái)運(yùn)行線程。為線程分配 的此類資源可以包括操作系統(tǒng)用來(lái)控制和調(diào)度線程的數(shù)據(jù)結(jié)構(gòu)。與之相比,微程的至少一個(gè)實(shí)施例是通過(guò)用戶級(jí)軟件"原語(yǔ)"生 成的,用戶級(jí)軟件"原語(yǔ)"調(diào)用OS獨(dú)立的機(jī)制來(lái)生成OS未知的微 程。因此^t程可以是響應(yīng)用戶級(jí)軟件調(diào)用而生成的。對(duì)于至少一個(gè)實(shí) 施例,用戶級(jí)軟件原語(yǔ)可以涉及可在硬件或固件中創(chuàng)建用戶級(jí)微程的 用戶級(jí)(環(huán)-3 )指令。由此創(chuàng)建的用戶級(jí)微程可以由硬件和/或固件和 /或用戶級(jí)軟件來(lái)調(diào)度。OS獨(dú)立的機(jī)制可以是位于用戶空間(例如軟 件庫(kù))中的軟件代碼??梢越Y(jié)合任何用戶級(jí)線程包來(lái)使用本文論述的 微程調(diào)度優(yōu)化技術(shù)。圖2是以圖形式就上文陳述進(jìn)一步詳細(xì)地示出相同軟件程序或進(jìn) 程的所有線程共享存儲(chǔ)器的共用邏輯視圖的框圖。在本文中可以將與 程序或進(jìn)程的所有線程關(guān)聯(lián)的存儲(chǔ)器的此共用邏輯視圖稱為"應(yīng)用程 序映像"。對(duì)于本發(fā)明的實(shí)施例,此應(yīng)用程序映像也^皮與進(jìn)程100、 103 、 120關(guān)聯(lián)的微程共享(圖1 )。本文中結(jié)合圖1來(lái)論述圖2。圖2示出圖1所示的進(jìn)程120、線程124、125、126和微程130-136 的圖形表示。但是,不應(yīng)將這種表示視為限制。本發(fā)明的實(shí)施例不一 定對(duì)與進(jìn)程關(guān)聯(lián)的線程或微程的數(shù)量設(shè)定上限或下限。就下限而言, 圖1示出在給定時(shí)間運(yùn)行的每個(gè)進(jìn)程與至少一個(gè)線程關(guān)聯(lián)。然而,這 些線程完全無(wú)需一定與任何微程關(guān)聯(lián)。例如,示出圖1所示的進(jìn)程0 100與一個(gè)線程124 —起運(yùn)行,但是在圖1所示的特定時(shí)間沒(méi)有任何 微程。然而,其他進(jìn)程103、 120可以與圖1所示的一個(gè)或多個(gè)OS調(diào)度 的線程關(guān)聯(lián)。圖1中使用點(diǎn)劃線和省略號(hào)表示可選的附加微程。圖1 示出與一個(gè)OS調(diào)度的線程127關(guān)聯(lián)的一個(gè)進(jìn)程103以及還示出與兩 個(gè)或兩個(gè)以上線程125-126關(guān)聯(lián)的另一個(gè)進(jìn)程120。此外,每個(gè)進(jìn)程 103、 120可以另外分別與一個(gè)或多個(gè)微程137-139、 130-136關(guān)聯(lián)。 進(jìn)程1 120的兩個(gè)線程125、 126和四個(gè)孩i程130-136的表示以及進(jìn)程 2 103的一個(gè)線程127和兩個(gè)微程137、 139的表示僅為說(shuō)明性的而不 應(yīng)視為限制。與進(jìn)程關(guān)聯(lián)的OS可見(jiàn)的線程的數(shù)量可以由OS程序來(lái) 限制。然而,對(duì)于至少一個(gè)實(shí)施例,與進(jìn)程關(guān)聯(lián)的微程的累積數(shù)量的 上限僅由算法線程級(jí)并行性的量值(amount)和執(zhí)行期間在特定時(shí)間 可用的微程執(zhí)行資源的數(shù)量(例如循序器的數(shù)量)限制。圖2示出與進(jìn)程120關(guān)聯(lián)的第二線程126所具有的與之關(guān)if關(guān)的線 程數(shù)量(n)可以不同于與第一線程125關(guān)聯(lián)的線程數(shù)量。(對(duì)于線程 125、 126的其中之一或二者,N可以為0。)圖2示出與特定進(jìn)程120關(guān)聯(lián)的所有線程125、 126共享存儲(chǔ)器 的特定邏輯視圖200。圖2示出每個(gè)線程125、 126分別具有其自己的 應(yīng)用程序和系統(tǒng)狀態(tài)202a、 202b。圖2示出線程125、 126的應(yīng)用程 序和系統(tǒng)狀態(tài)202被與該特定線程關(guān)聯(lián)的所有微程(例如微程 130-136 )所共享。例如對(duì)于至少一個(gè)實(shí)施例,與特定微程關(guān)聯(lián)的所有 微程共享環(huán)o狀態(tài)和與該特定線程關(guān)聯(lián)的應(yīng)用程序狀態(tài)的至少一部分。相應(yīng)地,圖2示出本發(fā)明的至少一個(gè)實(shí)施例的系統(tǒng)可以支持OS 可見(jiàn)的線程(例如線程125)與該線程所關(guān)聯(lián)的微程130-132 (對(duì)于 OS是不可見(jiàn)的)之間的l對(duì)多關(guān)系。在程序員而非OS可以采用用戶 級(jí)技術(shù)來(lái)創(chuàng)建、同步和以其他方式管理和控制微程的操作的意義上來(lái) 說(shuō),微程對(duì)于OS是"不可見(jiàn)"的(參見(jiàn)圖1中的140)。雖然OS140 知道并管理一個(gè)或多個(gè)線程,但是OS 140不知道且不管理或控制微 程。因此,并不依賴于操作系統(tǒng)來(lái)管理線程單元硬件與微程之間的映 射,而是可以由用戶空間中的調(diào)度器邏輯來(lái)管理該映射。對(duì)于至少一 個(gè)實(shí)施例,調(diào)度器邏輯可以在運(yùn)行時(shí)軟件庫(kù)中。對(duì)于至少 一個(gè)實(shí)施例,用戶可以利用微程控制指令或原語(yǔ)來(lái)直接 控制此類映射,這些微程控制指令或原語(yǔ)由調(diào)度器或軟件(例如運(yùn)行 時(shí)庫(kù))中的其他邏輯來(lái)處理。此外,用戶可以直接操縱與微程執(zhí)行關(guān) 聯(lián)的控制和狀態(tài)轉(zhuǎn)移。因此,對(duì)于本文描述的方法、機(jī)制、制造產(chǎn)品 和系統(tǒng),線程單元的體系結(jié)構(gòu)的用戶可見(jiàn)特征至少是一組允許用戶直 接操縱和控制線程單元硬件的規(guī)范指令。如本文所使用的,本文可互換地稱為"循序器"的線程單元可以 是能夠執(zhí)行線程或微程的任何物理或邏輯單元。它可以包括用于為給 定線程或微程確定要執(zhí)行的下一個(gè)指令的下一個(gè)指令指針邏輯。例如,圖1所示的OS線程125 (作為圖2中的"線程A" 125)可以在 循序器(未示出)上執(zhí)行,而每個(gè)活動(dòng)微程130-136可以分別在其他 循序器"seql" - "seq4"上執(zhí)行。循序器可以是邏輯線程單元或物理 線程單元。圖3中示出邏輯與物理線程單元之間的這種差異。圖3是示出能夠執(zhí)行所公開(kāi)的技術(shù)的多循序器系統(tǒng)的實(shí)施例 310、 350的所選^/f牛特征的框圖。圖3示出單核多循序器多線程環(huán)境 310的所選硬件特征。圖3也示出多核多線程環(huán)境350的所選硬件特 征,其中每個(gè)循序器是一個(gè)單獨(dú)的物理處理器核。在單核多線程環(huán)境310中,使單個(gè)物理處理器304對(duì)于操作系統(tǒng) 和用戶程序看上去像是多個(gè)邏輯處理器(未示出),本文稱為L(zhǎng)&至 LPn。每個(gè)邏輯處理器LP!至LPn分別維護(hù)一組完整的體系結(jié)構(gòu)狀態(tài) ASrASn。對(duì)于至少一個(gè)實(shí)施例,體系結(jié)構(gòu)狀態(tài)包括數(shù)據(jù)寄存器、段 寄存器、控制寄存器、調(diào)試寄存器和大部分的型號(hào)專用寄存器。邏輯 處理器LPrLPn共享物理處理器304的大部分其他資源,例如高速緩 存、執(zhí)行單元、分支預(yù)測(cè)器、控制邏輯和總線。雖然此類特征可以被 共享,但是多線程環(huán)境310中的每個(gè)線程上下文可以獨(dú)立地生成下一個(gè)指令地址(并執(zhí)行例如從指令高速緩存、執(zhí)行指令高速緩存或跟蹤高速緩存中提取)。因此,即使可以在單個(gè)物理提取/解碼單元322中實(shí) 現(xiàn)多個(gè)邏輯循序器,處理器304仍包括邏輯上獨(dú)立的下一個(gè)指令指針 和提取邏輯320來(lái)提取每個(gè)線程上下文的指令。對(duì)于單核多線程實(shí)施 例,術(shù)語(yǔ)"循序器"涵蓋用于線程上下文的至少下一個(gè)指令指針和提 取邏輯320,以及用于該線程上下文的至少一些關(guān)聯(lián)體系結(jié)構(gòu)狀態(tài) 312。應(yīng)該注意單核多線程系統(tǒng)310的循序器無(wú)需^^對(duì)稱的。例如, 相同物理核的兩個(gè)單核多線程循序器可以在它們各自維護(hù)的體系結(jié) 構(gòu)狀態(tài)信息的數(shù)量上有所不同。單核多線程系統(tǒng)可以實(shí)現(xiàn)多種多線程方案的任何一種,包括同時(shí) 多線程(SMT)、基于事件切換多線程(SoeMT)和/或時(shí)分復(fù)用多線 程(TMUX )。當(dāng)來(lái)自 一個(gè)以上硬件線程上下文(或邏輯處理器)的指 令在任何特定時(shí)間點(diǎn)同時(shí)運(yùn)行在處理器上時(shí),這稱為SMT。否則,單 核多線程系統(tǒng)可以實(shí)現(xiàn)SoeMT,其中在多個(gè)硬件線程上下文之間復(fù)用 處理器流水線,但是在任何給定時(shí)間,僅來(lái)自一個(gè)硬件線程上下文的 指令可以在流水線中執(zhí)行。對(duì)于SoeMT,如果線程切換事件是基于時(shí) 間的,則它是TMUX。因此,對(duì)于至少一個(gè)實(shí)施例,多循序器系統(tǒng)310是支持同時(shí)多線 程的單核處理器304。對(duì)于此實(shí)施例,每個(gè)循序器是具有它自己的指 令下一個(gè)指令指針和提取邏輯以及它自己的體系結(jié)構(gòu)狀態(tài)信息的邏 輯處理器,盡管相同的物理處理器核304執(zhí)行所有線程指令。對(duì)于此 實(shí)施例,邏輯處理器維護(hù)它自己版本的體系結(jié)構(gòu)狀態(tài),盡管可以在同 時(shí)執(zhí)行的線程之間共享單個(gè)處理器核的執(zhí)行資源。圖3還示出多核多線程環(huán)境350的至少一個(gè)實(shí)施例。此環(huán)境350 包括兩個(gè)或兩個(gè)以上單獨(dú)的物理處理器304a-304n,這些處理器 304a-304n均能夠執(zhí)行不同的線程/微程,以使這些不同的線程/微程的 至少一部分的執(zhí)行可以同時(shí)進(jìn)行。每個(gè)處理器304a至304n包括用于 提取其相應(yīng)的線程或微程的指令信息的物理上獨(dú)立的提取單元322。在每個(gè)處理器304a-304n執(zhí)行單個(gè)線程/微程的實(shí)施例中,提取/解碼單 元322實(shí)現(xiàn)單個(gè)下一個(gè)指令指針和提取邏輯320。然而,在每個(gè)處理 器304a-304n支持多個(gè)線程上下文的實(shí)施例中,提取/解碼單元322為 每個(gè)支持的線程上下文實(shí)現(xiàn)不同的下一個(gè)指令指針和提取邏輯320。 圖3中以點(diǎn)劃線表示多處理器環(huán)境350中的附加下一個(gè)指令指針和提 取邏輯320的可選特性。對(duì)于圖3示出的多核系統(tǒng)350的至少一個(gè)實(shí)施例,每個(gè)循序器可 以是一個(gè)處理器核304,其中多個(gè)核304a-304n駐留在單個(gè)芯片封裝 360中。每個(gè)核304a-304n可以為單線程化(threaded)或多線程化的處 理器核。圖3中以虛線表示芯片封裝360,以指示多核系統(tǒng)350的所 示單芯片實(shí)施例^f又僅是說(shuō)明性的。對(duì)于其他實(shí)施例,多核系統(tǒng)的處理器核可以駐留在單獨(dú)的芯片上。即,多核系統(tǒng)可以是多插槽對(duì)稱多處 理系統(tǒng)。為了便于論述,下文論述著重于多核系統(tǒng)350的實(shí)施例。但是, 這種著重論述不應(yīng)^皮視為限制,因?yàn)橄挛拿枋龅臋C(jī)制在多核或單核多 循序器環(huán)境中都可以執(zhí)行。圖4是示出用于支持用戶級(jí)線程控制的多循序器多線程系統(tǒng)的調(diào) 度機(jī)制400的至少一個(gè)實(shí)施例的數(shù)據(jù)流程圖。機(jī)制400包括調(diào)度器例 行程序450,它可以在多個(gè)循序器403、 404的每一個(gè)循序器上執(zhí)行。 當(dāng)然,圖4中僅示出兩個(gè)循序器,這僅出于說(shuō)明目的。本領(lǐng)域技術(shù)人 員將認(rèn)識(shí)到系統(tǒng)可以包括兩個(gè)或兩個(gè)以上循序器,它們可以全部是一 種循序器類型(對(duì)稱)或者可以分別是多種循序器類型的其中 一種(不 對(duì)稱)。圖4示出機(jī)制400包括工作隊(duì)列系統(tǒng)402。對(duì)于至少一個(gè)實(shí)施例, 工作隊(duì)列系統(tǒng)402可以包括一個(gè)或多個(gè)隊(duì)列以便維護(hù)排隊(duì)執(zhí)行并因此 處于"未決(pending)"的用戶定義的^f鼓程的描述符??梢岳靡粋€(gè)或 多個(gè)隊(duì)列來(lái)保存等待共享的資源變?yōu)榭捎?例如同步對(duì)象或循序器) 的微程的描述符。工作隊(duì)列系統(tǒng)402以及調(diào)度器邏輯450可以作為軟件來(lái)實(shí)現(xiàn)。然而,在備選實(shí)施例中,隊(duì)列系統(tǒng)402和調(diào)度器邏輯450 可以在硬件中實(shí)現(xiàn)或可以作為固件(例如只讀存儲(chǔ)器中的微代碼)來(lái) 實(shí)現(xiàn)。如上文陳述的,可以采用調(diào)度機(jī)制400而不采用OS提供的調(diào)度 機(jī)制。每個(gè)工作描述符描述要在OS隔離的或OS可見(jiàn)的循序器上獨(dú) 立于OS干預(yù)而執(zhí)行的微程??梢皂憫?yīng)另 一個(gè)微程或知道微程(shred-aware)的線程執(zhí)行用戶 級(jí)微程創(chuàng)建指令(或"原語(yǔ)")來(lái)創(chuàng)建微程描述符??梢詫⒚枋龇糜?工作隊(duì)列系統(tǒng)402中。對(duì)于至少一個(gè)實(shí)施例,觸發(fā)微程描述符的創(chuàng)建 的用戶級(jí)指令是類似API ("應(yīng)用程序程序員接口")的線程控制原語(yǔ) (例如"shred—create"或"shred—fork")。如本文所使用的,描述為由程序員或用戶生成的指令或原語(yǔ)應(yīng)不 僅應(yīng)涵蓋可基于用戶生成的代碼由匯編器或編譯器生成的體系結(jié)構(gòu) 指令或由使用匯編語(yǔ)言的程序員生成的體系結(jié)構(gòu)指令,而且還涵蓋最 后可以匯編或編譯成體系結(jié)構(gòu)微程控制指令的任何高級(jí)原語(yǔ)或指令。 還應(yīng)該理解,還可以將體系結(jié)構(gòu)微程控制指令解碼成一個(gè)或多個(gè)微操 作。本領(lǐng)域技術(shù)人員將會(huì)認(rèn)識(shí)到,在程序員的代碼(例如包括類似 API的shred—create原語(yǔ)的代碼)與使循序器執(zhí)行促使微程描述符的生 成并將描述符置于工作隊(duì)列402中的實(shí)際體系結(jié)構(gòu)指令之間可以存在 一個(gè)或多個(gè)級(jí)別的抽象。軟件440 (例如軟件運(yùn)行時(shí)庫(kù)提供的軟件) 可以響應(yīng)shred—create原語(yǔ)來(lái)創(chuàng)建新微程的微程描迷符,并且可以將 其置于工作隊(duì)列系統(tǒng)402中。對(duì)于至少 一個(gè)實(shí)施例,因此由車欠件440響應(yīng)shred—create原語(yǔ)來(lái) 創(chuàng)建微程描述符,并將其置于隊(duì)列系統(tǒng)402中。對(duì)于至少一個(gè)實(shí)施例, 微程描述符可以是標(biāo)識(shí)微程的至少如下屬性的記錄aM敖程開(kāi)始執(zhí)行 的地址,以及b)堆棧描述符。堆棧描述符標(biāo)識(shí)新樣i程用于存儲(chǔ)臨時(shí) 變量(例如本地變量和返回地址)的存儲(chǔ)器存儲(chǔ)區(qū)(堆棧)。圖4還示出每個(gè)循序器的調(diào)度器例行程序450a、 450b可以訪問(wèn) 工作隊(duì)列系統(tǒng)402以便獲取用于在關(guān)聯(lián)的循序器403、 404上執(zhí)行的 微程。當(dāng)調(diào)度器例行程序450a、 450b調(diào)度微程時(shí),它們可以提供有關(guān) 調(diào)度實(shí)例的信息以便可以記錄該實(shí)例(參見(jiàn)圖6的下文論述)。對(duì)于 至少一個(gè)實(shí)施例,調(diào)度器450a、 450b提供的調(diào)度信息608可以包括正 在調(diào)度的微程的微程E)以及例如時(shí)間戳的其他輔助信息。應(yīng)該注意圖4所示的循序器403、 404無(wú)需是對(duì)稱的,并且不應(yīng) 將圖4所示的循序器的數(shù)量視為限制。就循序器的數(shù)量而言,可以對(duì) 任何數(shù)量的循序器采用調(diào)度機(jī)制400。例如,并非限制,可以對(duì)包括 4、 8、 16、 32個(gè)或更多個(gè)循序器的多循序器系統(tǒng)實(shí)現(xiàn)該調(diào)度機(jī)制。就對(duì)稱而言,圖4示出可以包括至少兩種類型的不對(duì)稱循序器-類型A循序器403和類型B循序器404的系統(tǒng)的調(diào)度機(jī)制400。每個(gè) 循序器403、 404包括或運(yùn)行分布式調(diào)度器例行程序450的一部分。 這些部分450a、450b可以是彼此完全相同的副本,但是無(wú)需一定如此。循序器403、 404可以在任何方式上有所不同,包括影響計(jì)算質(zhì) 量的那些方面。例如,這些循序器可以在功耗、熱量度量、計(jì)算性能 的速度、功能特征、微體系結(jié)構(gòu)組織、體系結(jié)構(gòu)特征等方面有所不同。 通過(guò)舉例,對(duì)于一個(gè)實(shí)施例,循序器403、 404可以在功能性方面有 所不同。例如, 一個(gè)循序器能夠執(zhí)行整數(shù)和浮點(diǎn)指令,但是無(wú)法執(zhí)行 指令擴(kuò)充的單指令多數(shù)據(jù)("SIMD")集,例如流SIMD擴(kuò)充3 ("SSE3")。另一方面,另一個(gè)循序器能夠執(zhí)行第一循序器能夠執(zhí)行 的所有指令,同時(shí)還可以執(zhí)行SSE3指令。作為功能不對(duì)稱的另一個(gè)示例, 一個(gè)循序器403可以對(duì)于OS是 可見(jiàn)的(例如參見(jiàn)圖1的140),并且因此能夠執(zhí)行超級(jí)用戶 (supervisor)模式(例如IA32的"環(huán)0")操作,例如執(zhí)行系統(tǒng)調(diào)用、 服務(wù)頁(yè)故障等。在另一方面,可以將另一個(gè)循序器404與OS隔離, 因此僅能夠執(zhí)行管理模式(例如IA32的"環(huán)3")操作且不能執(zhí)行環(huán) 0操作。其上可利用調(diào)度機(jī)制400的系統(tǒng)的循序器還可以在任何其他方式 (例如元件封裝、字寬度和/或數(shù)據(jù)路徑大小、拓樸、存儲(chǔ)器、功耗、 功能單元的數(shù)量、通信體系結(jié)構(gòu)(多跳對(duì)點(diǎn)到點(diǎn)互連)或與功能性、 性能、元件封裝等相關(guān)的任何其他度量)上有所不同。對(duì)于至少一個(gè)實(shí)施例,類型A和類型B循序器的功能性可以是 互斥的。即,例如一種類型的循序器403可以支持例如執(zhí)行SSE3指 令的特定功能性,另一種類型的循序器404卻不支持;同時(shí)第二種類 型的循序器404可以支持例如環(huán)0操作的特定功能性,而第一種類型 的循序器403卻不支持。然而,對(duì)于至少另一個(gè)實(shí)施例,循序器類型A403和B404的功 能性表示超集-子集功能性關(guān)系,并非互斥的功能性關(guān)系。即,第一組 循序器(例如類型A循序器403 )提供功能性的超集,其中該超集包 含第二組循序器(例如類型B循序器404)的所有功能性,加上第二 組循序器404不能提供的附加功能性。對(duì)于本文描述的機(jī)制、系統(tǒng)和方法的至少一些實(shí)施例,分布式調(diào) 度器450作為事件驅(qū)動(dòng)的自調(diào)度器來(lái)工作,其中響應(yīng)因類似API微程 控制(例如shred_create、 shred_fork等)或微程同步(例如shredjyield、 互斥(shred—lock/shred—unlock)、臨界區(qū)(critical section )等)指令或 原語(yǔ)而創(chuàng)建的排隊(duì)調(diào)度事件來(lái)創(chuàng)建微程。圖5是示出運(yùn)行時(shí)軟件500的至少一個(gè)實(shí)施例的框圖。圖5所示 的軟件500的實(shí)施例是軟件庫(kù),但是不應(yīng)將此圖示視為限制。圖5所 示的特征可以駐留在用戶空間中的任何位置。軟件庫(kù)500可以包括如 上文論述的調(diào)度器450。軟件庫(kù)500還可以包括微程創(chuàng)建軟件440, 微程創(chuàng)建軟件440響應(yīng)"create(創(chuàng)建)"類似API的用戶指令(例如 "shred一create")而創(chuàng)建微程描述符。如上文論述的,微程創(chuàng)建軟件 440可以通過(guò)將微程描述符置于工作隊(duì)列系統(tǒng)(例如,參見(jiàn)圖4的402 ) 來(lái)支持微程的創(chuàng)建。此外,軟件庫(kù)500還可以包括微程同步控制軟件504。 ^:程同步控制軟件504可以響應(yīng)微程同步用戶級(jí)原語(yǔ)(例如產(chǎn)量(yield)原語(yǔ)或 微程互斥或臨界區(qū)原語(yǔ))來(lái)執(zhí)行微程同步功能。如果在當(dāng)前微程中遇到"產(chǎn)量"原語(yǔ),則可以將調(diào)用進(jìn)程的微程 描述符》文回到隊(duì)列系統(tǒng)中,并且將控制返回到調(diào)度器450。相應(yīng)地, 在執(zhí)行"產(chǎn)量,,原語(yǔ)時(shí),同步控制軟件504可以將當(dāng)前微程的余下微 程指令的微程描述符放回到工作隊(duì)列系統(tǒng)402 (圖4 )中。此外,軟件庫(kù)500還可以包括調(diào)度提示生成器506。調(diào)度提示生 成器506可以創(chuàng)建微程相關(guān)性圖(SDG )和/或具有時(shí)間戳的微程相關(guān) 性圖(TSDG),下文對(duì)此進(jìn)一步詳細(xì)論述。圖5示出可以將微程調(diào)度器450、微程創(chuàng)建/終止軟件440、微程 同步控制軟件504和調(diào)度提示生成器506的任何一個(gè)或全部作為運(yùn)行 時(shí)庫(kù)500的一部分來(lái)實(shí)現(xiàn)。雖然本文示出為軟件邏輯,但是本領(lǐng)域技 術(shù)人員將認(rèn)識(shí)到庫(kù)500的功能性可以作為固件、固件和軟件的組合來(lái) 實(shí)現(xiàn),并且甚至可以作為專用硬件電路來(lái)實(shí)現(xiàn)。運(yùn)行時(shí)庫(kù)500可以創(chuàng)建傳統(tǒng)業(yè)界標(biāo)準(zhǔn)API (例如符合^更攜式操作 系統(tǒng)接口 ("POSIX")的API)與至少支持一組規(guī)范微程指令的多循 序器系統(tǒng)的硬件之間的中間抽象層。運(yùn)行時(shí)庫(kù)500可以作為中間抽象 級(jí),以使程序員可以將傳統(tǒng)線程API (例如PTHREADS API或 WINDOWS THREADS API或OPENMP API)結(jié)合支持微程的硬件來(lái) 使用。庫(kù)500可以提供基于用戶編程的原語(yǔ)來(lái)透明地調(diào)用規(guī)范微程指 令的功能。圖6是進(jìn)一步詳細(xì)地示出軟件庫(kù)500可以包括調(diào)度提示生成器 506的數(shù)據(jù)流程圖,其中調(diào)度提示生成器506監(jiān)視微程化(shredded)程 序602的行為,具體來(lái)說(shuō),監(jiān)視微程化程序602的線程執(zhí)行歷史。本 領(lǐng)域技術(shù)人員將理解,對(duì)于至少一個(gè)實(shí)施例,圖6中表示的微程化程 序602可以是任何格式的,包括源代碼或目標(biāo)代碼(例如COFF格式 或PE32格式的二進(jìn)制可執(zhí)行代碼)。除了監(jiān)視程序行為之外,調(diào)度提示生成器506還還可以分析、表征和記錄執(zhí)行歷史的某些方面。對(duì)于至少一個(gè)實(shí)施例,可以采用微程相關(guān)性(shred dependency graph)圖600和/或具有時(shí)間戳的微程相關(guān)性 圖604的其中之一或二者的形式來(lái)記錄執(zhí)行歷史的這些方面。微程相關(guān)性圖("SDG") 600明確地將微程化程序執(zhí)行表示為微 程相關(guān)性的圖。對(duì)于至少一個(gè)實(shí)施例,SDG600可以是有向圖,其中 每個(gè)節(jié)點(diǎn)是微程,且每條線是兩個(gè)微程之間的相關(guān)性。因此,SDG600 表示微程化程序602的執(zhí)行通過(guò)期間動(dòng)態(tài)地執(zhí)行的微程實(shí)例之間的相 關(guān)性。圖7示出示范微程相關(guān)性圖700。圖7所示的示范SDG700表示 在包括一個(gè)或多個(gè)循序器的系統(tǒng)上運(yùn)行的多微程化矩陣乘程序。在圖 7中,微程4是主微程,以及它分支出并行執(zhí)行矩陣乘的4個(gè)其他微 程(5、 6、 7和8)。圖7示出從微程4到表示分支(fork)操作的所 有其他微程的邊。對(duì)于圖7所示的示例,本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到程 序可以在包括四個(gè)循序器的系統(tǒng)上運(yùn)行,因?yàn)樵诜种С龅奈⒊掏瓿伤?們的工作之前,主微程(4)不執(zhí)行任何工作。圖7中所示的這四條邊的每條邊上的標(biāo)號(hào)表示在創(chuàng)建每個(gè)微程時(shí) 的微程4的等待時(shí)間(以時(shí)鐘周期為單位)。圖7所示的示例假定"shred join"指令對(duì)所有分支出的微程執(zhí)行。因此,每個(gè)分支出的微程(5、 6、 7和8)也包^"返回邊。返回邊上的標(biāo)號(hào)表示相應(yīng)孩支程的扭J亍時(shí)間 (以時(shí)鐘周期為單位)。返回到圖6,其中所示的TSDG 604進(jìn)一步以有關(guān)動(dòng)態(tài)微程執(zhí)行 的按時(shí)間順序的信息來(lái)擴(kuò)充SDG 600的信息。具體來(lái)說(shuō),TSDG 604 可以結(jié)合與微程調(diào)度和執(zhí)行相關(guān)的多種權(quán)重度量,例如微程相關(guān)性的 定時(shí)。在TSDG 604中,節(jié)點(diǎn)表示調(diào)度的微程的動(dòng)態(tài)實(shí)例,邊標(biāo)號(hào)表 示發(fā)生指示相關(guān)性的事件的時(shí)間。圖8示出示范程序的示例TSDG 800。 TSDG 800表示多個(gè)相關(guān)性可以裝設(shè)(instrument)調(diào)度器450 (圖4)以在調(diào)度微程時(shí)捕獲相關(guān)性,并且可以將此信息(例如,參見(jiàn)圖6的608)轉(zhuǎn)發(fā)到調(diào)度提示生 成器(參見(jiàn)圖6的506),并利用此信息生成圖8中的TSDG 800 (也 參見(jiàn)圖6中的604)。可以在調(diào)度器遇到微程控制原語(yǔ)或指令(例如"shred_create") 時(shí)記錄相關(guān)性。此外,還可以在調(diào)度器遇到同步原語(yǔ)或指令(例如互 斥(mutex)、產(chǎn)量、或臨界區(qū)原語(yǔ))時(shí)記錄相關(guān)性。即,可以將相關(guān)性 定義為如下情況的發(fā)生阻塞一個(gè)微程進(jìn)一步執(zhí)行而等待某個(gè)事件在 另一個(gè)微程上發(fā)生。例如,圖8示出微程5(節(jié)點(diǎn)5.4)被阻塞于互斥, 直到獨(dú)UE7 (節(jié)點(diǎn)7.0)在時(shí)間1401上釋^L該互斥為止?;コ饪梢杂?程序員使用同步原語(yǔ)(例如"lock"和"unlock"原語(yǔ))來(lái)取得或釋^:。 響應(yīng)(例如由微程7.0)先前執(zhí)行l(wèi)ock原語(yǔ)未成功獲得互斥,爭(zhēng)用微 程的循序器可以執(zhí)行產(chǎn)量操作,從而使同步控制機(jī)制(例如,參見(jiàn), 圖6的504 )將爭(zhēng)用微程(例如微程5.4 )的描述符放回到工作隊(duì)列系 統(tǒng)(例如,參見(jiàn)圖6的402)。正如上文陳述的,工作隊(duì)列系統(tǒng)可以包 括專用隊(duì)列來(lái)維護(hù)出于同步目的而被阻塞的微程的描述符。圖8示出TSDG800的至少一個(gè)實(shí)施例可以標(biāo)識(shí)程序的系統(tǒng)關(guān)鍵路徑。系統(tǒng)關(guān)^:路徑是程序中具有最長(zhǎng)等待時(shí)間的路徑。該路徑上的任何線程對(duì)于程序的性能都是關(guān)鍵的,并因此在可能的情況下應(yīng)該以 最高優(yōu)先級(jí)調(diào)度它。利用TSDG 800提供的信息來(lái)標(biāo)識(shí)哪些微程位于系統(tǒng)關(guān)鍵路徑上 是顯而易見(jiàn)的。可以在具有最大時(shí)間值(表示最后 一個(gè)節(jié)點(diǎn))的TSDG 800的節(jié)點(diǎn)處開(kāi)始并向上遍歷到TSDG 800的根來(lái)容易地標(biāo)識(shí)系統(tǒng)關(guān) 鍵路徑820。圖8示出節(jié)點(diǎn)8.2是最后一個(gè)節(jié)點(diǎn),并且微程4 (節(jié)點(diǎn) 4.0)和微程8 (節(jié)點(diǎn)8.0、 8.1、 8.2)位于系統(tǒng)關(guān)4定路徑820上。返回到圖6,可見(jiàn)到,基于SDG600和TSDG604中的信息,調(diào) 度提示生成器506可以執(zhí)行多種類型的分析來(lái)生成可供調(diào)度器450利 用的提示610。利用如TSDG 604提供的有關(guān)微程間動(dòng)態(tài)數(shù)據(jù)相關(guān)性 的信息,調(diào)度提示生成器506可以標(biāo)識(shí)和表征系統(tǒng)關(guān)鍵路徑(關(guān)鍵路徑圖或子圖的深度)以及微程化應(yīng)用程序602的線程級(jí)并行性(圖或 子圖的深度)。調(diào)度器可以接收提示610,并可以使用這些提示來(lái)探究 并行性以使調(diào)度向前進(jìn)行并通過(guò)更具判斷力地來(lái)調(diào)度程序602的微程 而增強(qiáng)調(diào)度效率。此外,如果提示生成器506利用來(lái)自微程同步控制軟件504的信 息,例如與同步對(duì)象(例如互斥、條件變量等)相關(guān)的信息,則基于此 信息生成的SDG 600和/或TSDG 604除了可以反映微程控制相關(guān)性外 還可以反映微程數(shù)據(jù)相關(guān)性。調(diào)度提示生成器506可以采用多種優(yōu)化方法的其中一種或多種, 這些優(yōu)化方法利用有關(guān)微程化程序602的微程間交互的動(dòng)態(tài)行為的調(diào) 度信息608。嘗試探究線程級(jí)并行性的任何優(yōu)化方法均可以采用。例 如,可以對(duì)基于指令數(shù)據(jù)或控制相關(guān)性圖的許多經(jīng)典指令級(jí)并行性 (ILP)算法實(shí)現(xiàn)線程級(jí)模擬。這些算法包括列表調(diào)度、隨機(jī)調(diào)度和 樹(shù)遍歷調(diào)度??梢圆捎没赟DG和TSDG對(duì)線程級(jí)并行性的模擬方 法。對(duì)于至少一個(gè)實(shí)施例,調(diào)度提示生成器506采用的優(yōu)化方法可以 包括如下方法的一種或多種系統(tǒng)關(guān)鍵路徑調(diào)度、數(shù)據(jù)流微程調(diào)度和 動(dòng)態(tài)功率節(jié)制(power throttling )。系統(tǒng)關(guān)鍵路徑調(diào)度。此優(yōu)化方法基于如下認(rèn)識(shí)TSDG 604的某 些節(jié)點(diǎn)對(duì)于應(yīng)用程序602的性能比另一些節(jié)點(diǎn)更為關(guān)鍵。當(dāng)執(zhí)行系統(tǒng) 關(guān)鍵路徑調(diào)度優(yōu)化時(shí),提示生成器506標(biāo)識(shí)關(guān)鍵路徑-其性能影響 程序602的整體性能的那些節(jié)點(diǎn)。TSDG 604的系統(tǒng)關(guān)4建路徑具有如 下特性程序602中的其他路徑不存在更長(zhǎng)的等待時(shí)間。如果這些節(jié) 點(diǎn)花費(fèi)更長(zhǎng)時(shí)間來(lái)執(zhí)行,則降低程序602的整體性能。提示生成器506 將關(guān)鍵路徑上的所有微程標(biāo)識(shí)為"關(guān)鍵微程",并提供提示以指示調(diào) 度器450應(yīng)該以比其他非關(guān)鍵微程更高的優(yōu)先級(jí)來(lái)調(diào)度此類微程。使用此系統(tǒng)關(guān)鍵路徑信息,微程調(diào)度器450可以通過(guò)對(duì)關(guān)鍵微程 設(shè)置優(yōu)先級(jí)來(lái)提高性能。對(duì)于對(duì)稱多循序器系統(tǒng)上的調(diào)度器,優(yōu)化可 以包括簡(jiǎn)單地以更高優(yōu)先級(jí)來(lái)調(diào)度關(guān)鍵微程。對(duì)于不對(duì)稱多循序器系統(tǒng),優(yōu)化可以包括例如在更快和/或更強(qiáng)的循序器上調(diào)度關(guān)鍵^d程。一 般來(lái)說(shuō),調(diào)度器可以利用系統(tǒng)關(guān)鍵路徑信息來(lái)減少系統(tǒng)關(guān)鍵路徑的等 待時(shí)間,以便減少整個(gè)程序等待時(shí)間。數(shù)據(jù)流調(diào)度。與嘗試通過(guò)減少系統(tǒng)的關(guān)鍵路徑的等待時(shí)間來(lái)提高 性能的系統(tǒng)關(guān)鍵路徑調(diào)度相比,數(shù)據(jù)流調(diào)度嘗試減少個(gè)別微程的等待時(shí)間。在此方法中,調(diào)度器450可以嘗試將共享數(shù)據(jù)的那些微程調(diào)度 到相同的循序器。這種技術(shù)的一個(gè)目的是要提高數(shù)據(jù)局部性(data locality),并因此減少高速緩存未命中的總數(shù),從而減少微程的執(zhí)行 時(shí)間。如上文解釋的,TSDG (參見(jiàn)圖8的800)提供微程相關(guān)性信息。 確切地,TSDG標(biāo)識(shí)潛在的微程相關(guān)性。提示生成器506可以將有關(guān) 這些相關(guān)性的提示610傳遞到調(diào)度器450。然后,調(diào)度器450可以使 用此信息在可能的情況下在相同的時(shí)間附近將數(shù)據(jù)共享的微程調(diào)度 到相同的循序器。通過(guò)在相同循序器上調(diào)度數(shù)據(jù)共享的微程,提高數(shù) 據(jù)局部性,并可以減少微程的等待時(shí)間,從而改善整體性能。動(dòng)態(tài)功率節(jié)制。并不是嘗試提高性能,第三種優(yōu)化方法嘗試通過(guò) 動(dòng)態(tài)地控制功率節(jié)制來(lái)減少能量使用??梢詫⒋朔椒ㄓ糜诓粚?duì)稱多處 理系統(tǒng),該系統(tǒng)包括可以對(duì)其功率使用進(jìn)行向下節(jié)制的 一個(gè)或多個(gè)循 序器。當(dāng)向下節(jié)制時(shí),循序器可以使用更少的功率,更具能量效率, 并可能具有較慢的執(zhí)行時(shí)間。如上文陳述的,可以容易地從TSDG確定系統(tǒng)關(guān)4定路徑,并因此 反過(guò)來(lái),TSDG還標(biāo)識(shí)不是性能關(guān)鍵的微程。提示生成器506因此可 以將標(biāo)識(shí)非關(guān)鍵微程的提示610傳遞到調(diào)度器450。調(diào)度器450可以 在向下節(jié)制的循序器上調(diào)度此類非關(guān)鍵微程。對(duì)于不對(duì)稱多處理系 統(tǒng),調(diào)度器450可以控制節(jié)制機(jī)制,并因此可以實(shí)質(zhì)上控制系統(tǒng)的行 為。因此,通過(guò)使用TSDG提供的系統(tǒng)關(guān)鍵路徑信息,可以生成提示, 并將其提供到調(diào)度器,調(diào)度器可以通過(guò)動(dòng)態(tài)地節(jié)制不對(duì)稱多處理系統(tǒng) 來(lái)減少總的能量使用。作為備選實(shí)施例,不對(duì)稱多處理系統(tǒng)可以包括變化的固定功耗需求的循序器。即, 一個(gè)或多個(gè)循序器可以不進(jìn)行功率的動(dòng)態(tài)節(jié)制,而 是可以將其靜態(tài)地配置在比系統(tǒng)中的一個(gè)或多個(gè)其他循序器低的功耗需求。對(duì)于這種實(shí)施例,可以在較低功率的循序器上調(diào)度非性能關(guān) 鍵微程。繼續(xù)參考圖6,可以看到可將調(diào)度提示生成器506生成的調(diào)度提 示610轉(zhuǎn)發(fā)到調(diào)度器450。調(diào)度器450可以在微程化程序602的當(dāng)前 執(zhí)行期間利用提示610 (本文稱為"在線"分析)?;蛘?,調(diào)度器450 可以在微程化程序602的后續(xù)通過(guò)期間利用提示(本文稱為"離線" 分析)。對(duì)于前一種方法(在線分析),調(diào)度提示生成器506僅生成部分 TSDG 604。使用已經(jīng)為微程化程序602的執(zhí)行窗口生成的部分TSDG 604,調(diào)度提示生成器506在程序602繼續(xù)運(yùn)行的同時(shí)預(yù)測(cè)微程的調(diào) 度優(yōu)先級(jí)??梢詫⑦@些提示用作將來(lái)執(zhí)行行為的預(yù)測(cè)因子(predictor)。 調(diào)度器的輸出是基于這些提示或預(yù)測(cè)以提高性能為目標(biāo)的新調(diào)度。對(duì)于后一種方法(離線分析),可以在第一次通過(guò)微程化程序602 期間生成完整TSDG 604。然后可以將調(diào)度提示生成器506基于完整 TSDG 604生成的調(diào)度提示610轉(zhuǎn)發(fā)到調(diào)度器450,并在^f效程化程序 602的后續(xù)執(zhí)行通過(guò)期間利用該調(diào)度提示610。至少一個(gè)實(shí)施例將在線分析方法與離線分析方法組合而實(shí)現(xiàn)一 種混合方法。對(duì)于混合方法,離線分析產(chǎn)生從先前運(yùn)行和簡(jiǎn)檔獲得的 調(diào)度提示;將此類提示傳遞到調(diào)度器450。利用離線調(diào)度提示作為輸 入,調(diào)度器450還可以基于經(jīng)由在線分析觀察到的動(dòng)態(tài)微程調(diào)度行為 來(lái)動(dòng)態(tài)地細(xì)調(diào)、調(diào)整、調(diào)節(jié)和更新提示。圖9是示出利用TSDG605的信息來(lái)執(zhí)行分析并生成調(diào)度提示的 方法950的至少 一個(gè)實(shí)施例的流程圖。對(duì)于至少 一個(gè)實(shí)施例,方法950 可以由調(diào)度提示生成邏輯(例如,參見(jiàn)圖6的506 )來(lái)執(zhí)行。根據(jù)圖 9所示的方法950的實(shí)施例,使用TSDG 604形成程序的才丸行歷史。基于此類執(zhí)行歷史信息,用戶空間中的軟件(例如,參見(jiàn)圖5中的運(yùn)行時(shí)庫(kù)500的提示生成器506 )可以計(jì)算微程間交互、推導(dǎo)微程間相 關(guān)性并推斷啟發(fā)式(heuristics)以預(yù)測(cè)相關(guān)的將來(lái)微程。因此,對(duì)于 至少一個(gè)實(shí)施例,圖9所示的方法950可以由提示生成器(例如圖6 的506 )來(lái)執(zhí)行。圖9示出方法950開(kāi)始于框951,并進(jìn)行到框952。在框952,在 執(zhí)行歷史中記錄如TSDG 604指示的微程調(diào)度的每個(gè)實(shí)例??梢酝ㄟ^(guò) 捕獲調(diào)度實(shí)例的微程ID來(lái)記錄該實(shí)例。對(duì)于整個(gè)程序執(zhí)行,所得到 的執(zhí)行歷史可以是微程ID實(shí)例的文本文件(連同例如時(shí)間戳等的其 他輔助信息)。>^人框952,處理進(jìn)行到框954。在框954,可以將4丸行歷史文件"文本"排序,并可以生成唯一 "符號(hào)"的字母表970??梢允褂米帜副?70中的每個(gè)符號(hào)來(lái)表示唯 —的微程實(shí)例??梢愿鶕?jù)每個(gè)符號(hào)的出現(xiàn)頻率來(lái)對(duì)字母表970定序。 此外,還可以在框954,將框952基于微程標(biāo)識(shí)符記錄的執(zhí)行歷史轉(zhuǎn) 換成基于符號(hào)的執(zhí)行歷史。作為說(shuō)明方法950的處理的另一個(gè)示例,假定在框952在執(zhí)行歷 史中記錄微程實(shí)例的次序用于調(diào)度循環(huán),并在框954將其轉(zhuǎn)換成符號(hào)。 在表l中提出示范次序表 1表l中示出的示范次序指示在框954生成的基于符號(hào)的執(zhí)行歷史 中可以標(biāo)識(shí)相鄰符號(hào)的重復(fù)出現(xiàn)次序的多個(gè)才莫式。例如,表l示出微表l:循環(huán)的示范微程實(shí)例ABCD ABCD程B總是在微程A的實(shí)例之后。因此,可以將AB標(biāo)識(shí)為"短語(yǔ)"。 可以在框956將此類重復(fù)出現(xiàn)的短語(yǔ)記錄在短語(yǔ)詞典980中?;诖?詞典980,可以在框958生成提示以使調(diào)度器知道微程B常常在微程 A之后被調(diào)度。通過(guò)進(jìn)一步檢查,可以看到模式"A、 B、 C、 D"在 表l中顯然是較大的短語(yǔ)。因此,可以在框956將短語(yǔ)"A、 B、 C、 D,,記錄在短語(yǔ)詞典980中,并可以在框958生成有關(guān)此短語(yǔ)的提示。對(duì)于至少一個(gè)實(shí)施例,可以通過(guò)在框956對(duì)照已在框954生成的 基于符號(hào)的執(zhí)行歷史來(lái)運(yùn)行壓縮算法而標(biāo)識(shí)短語(yǔ)詞典980中記錄的短 語(yǔ)。對(duì)于至少一個(gè)實(shí)施例,該壓縮算法是一種Lempel-Ziv等效的壓縮 方法,對(duì)此字母表從8位ASCII擴(kuò)充到框954生成的符號(hào)字母表970 中的32位或64位符號(hào)所表示的新字母表。對(duì)于至少一個(gè)實(shí)施例,在框956使用的壓縮算法已證明在信息理 論上是最優(yōu)且有效率的(其中時(shí)間與輸入文本的大小成線性,以及查 詢時(shí)間逼近常量)。在框956施加壓縮的結(jié)果可以是短語(yǔ)詞典970,它 枚舉在框954生成的基于符號(hào)的執(zhí)行歷史中出現(xiàn)的符號(hào)的頻繁重復(fù)出 現(xiàn)的短語(yǔ)。對(duì)于此實(shí)施例,短語(yǔ)詞典980中的每個(gè)短語(yǔ)表示涉及一組 特定微程的一個(gè)重復(fù)出現(xiàn)的微程調(diào)度活動(dòng)鏈,該組特定微程可以通過(guò) 一組特定的同步對(duì)象和/或控制原語(yǔ)按特定的順序交互??梢允褂眠@些 重復(fù)出現(xiàn)的鏈的每一個(gè)鏈的頻率(即,冗余度的量)來(lái)對(duì)短語(yǔ)詞典980 中的短語(yǔ)定序。圖9示出在框956創(chuàng)建短語(yǔ)詞典980之后,方法950的處理進(jìn)行 到框958。在框958,可以分析重復(fù)出現(xiàn)的短語(yǔ)的詞典980。對(duì)于至少 一個(gè)實(shí)施例,在框958 4會(huì)降序處理短語(yǔ)詞典980 (相對(duì)框956施加的 定序)。作為此處理的結(jié)果,可以生成調(diào)度提示。例如,基于重復(fù)出 現(xiàn)的短語(yǔ),提示生成器(例如,參見(jiàn)圖6的506)可以預(yù)測(cè)應(yīng)該調(diào)度 的下一個(gè)或多個(gè)即將出現(xiàn)的微程(例如,微程B和C應(yīng)該總是在微程 A之后被調(diào)度)。可以生成提示以便能夠更有效率地調(diào)度此類微程。 例如,可以執(zhí)行對(duì)匯總短語(yǔ)的優(yōu)化,以便在相同或相鄰循序器上調(diào)度從屬的微程(例如,參見(jiàn)上文數(shù)據(jù)流微程調(diào)度的論述)。為了筒明地對(duì)本文公開(kāi)的調(diào)度器的實(shí)施例所支持的數(shù)據(jù)流微程 調(diào)度概念更深入地^:討位,應(yīng)該注意,對(duì)于至少一個(gè)實(shí)施例,多核系 統(tǒng)中的每個(gè)處理器包括高速緩存。還應(yīng)該注意,相同線程的微程可以共享相同的應(yīng)用程序工作集。例如,如果微程B從屬于微程A,則在這兩個(gè)微程共享的數(shù)據(jù)周圍可能存在同步點(diǎn)(互斥等)。而且(或者作為備選),微程A和B可能涉及相同的數(shù)據(jù)結(jié)構(gòu)。通常,如果微程B 從屬于微程A,則調(diào)度器可以假定這些微程共享至少一些數(shù)據(jù)。因此,提示生成器可以在框958生成提示,指示應(yīng)該在可能的情 況下在相同核上調(diào)度微程A和B,以便它們能夠共享數(shù)據(jù)高速緩存。 總之,提示生成器可以基于線性相關(guān)性來(lái)生成"局部性"提示,以便序器上執(zhí)行。以此方式,調(diào)度器可以有效地移動(dòng)代碼以便與數(shù)據(jù)相關(guān) 性相適應(yīng)。 一般來(lái)說(shuō),調(diào)度器可以嘗試在相同(附近的)循序器上連 續(xù)調(diào)度線性相關(guān)的微程來(lái)執(zhí)行,以便利用高速緩存級(jí)的數(shù)據(jù)局部性。 此方法基于如下假設(shè),線性從屬的微程可能使用相同的數(shù)據(jù)。換言之, 調(diào)度器邏輯450可以調(diào)度微程以在接近工作集所在位置的位置執(zhí)行?;蛘?,調(diào)度器可以利用局部性提示以便將數(shù)據(jù)的工作集從一個(gè)高 速緩存遷移到另一個(gè)高速緩存。即,調(diào)度器可以使數(shù)據(jù)移到其上將t丸 行需要該數(shù)據(jù)的代碼的核??梢詫⑦@種方法用于其中循序器硬件支持 數(shù)據(jù)遷移的系統(tǒng)。換言之,調(diào)度器450可以調(diào)度向使用該數(shù)據(jù)的代碼 所在的位置進(jìn)行數(shù)據(jù)移動(dòng)。調(diào)度器還可以利用局部性提示來(lái)實(shí)現(xiàn)一種類型的微程級(jí)并行性。 如果調(diào)度器接收微程A、 B、 C和D是線性從屬且常常作為"短語(yǔ)" 順序執(zhí)行的提示,則調(diào)度器可以將這些微程映射到相鄰循序器上。此 外,盡管在單獨(dú)的循序器上執(zhí)行每個(gè)微程的代碼,還可以將來(lái)自每個(gè) 循序器的數(shù)據(jù)沿著循序器鏈來(lái)遷移,以便經(jīng)由相關(guān)性鏈來(lái)遷移數(shù)據(jù)。圖11示出可以在概念上視為一種類型的流水線的此方法。圖11示出調(diào)度每個(gè)順序執(zhí)行的微程在單獨(dú)的循序器上執(zhí)行。調(diào)度微程A在循序器1122上執(zhí)行;調(diào)度微程B在循序器1124上執(zhí)行;調(diào)度微程C 在循序器1128上執(zhí)行;以及調(diào)度微程D在循序器1126上執(zhí)行。在執(zhí) 行了微程A之后,在執(zhí)行《效程B之前,將循序器1122的高速緩存1102 中的數(shù)據(jù)遷移到循序器1124的高速緩存1104。在執(zhí)行了微程B之后, 也執(zhí)行相似的數(shù)據(jù)遷移,以便在循序器1128上執(zhí)行微程C之前,將 數(shù)據(jù)從高速緩存1104遷移到高速緩存1108。相似地,在循序器1126 上執(zhí)行微程D之前,將數(shù)據(jù)從高速緩存1108遷移到高速緩存1106。返回到圖9,可以通過(guò)定時(shí)信息(例如關(guān)鍵系統(tǒng)路徑信息)的獲 知來(lái)進(jìn)一步增強(qiáng)在框958生成的提示。利用來(lái)自TSDG的信息(例如, 參見(jiàn)圖6的604),可以生成提示以便在某些短語(yǔ)對(duì)應(yīng)于系統(tǒng)關(guān)4定路徑 的情況下更高地設(shè)置它們的優(yōu)先級(jí)(參見(jiàn)上文對(duì)系統(tǒng)關(guān)4建路徑調(diào)度的 論述)。在框958生成的提示還可以包含短語(yǔ)級(jí)優(yōu)化。例如,運(yùn)行時(shí)專欠件 可能知道任何特定時(shí)間點(diǎn)上的硬件資源分配(例如與編譯器執(zhí)行的調(diào) 度優(yōu)化相反)。因此,調(diào)度提示生成器(例如,參見(jiàn)圖6的506)可以 創(chuàng)建提示以使系統(tǒng)關(guān)鍵路徑上的短語(yǔ)的非從屬微程實(shí)例均被調(diào)度在 單獨(dú)的循序器上。此類提示可以將任何對(duì)稱或不對(duì)稱度量納入考慮。 例如,如果系統(tǒng)關(guān)鍵路徑上的短語(yǔ)的微程A需要具有特定能力的循序 器,而微程B不需要,則可以通過(guò)提示將此類信息傳遞到循序器,以 便在調(diào)度時(shí)在給定可用硬件資源的情況下,可以盡可能有效率地調(diào)度 這些微程。而且,例如調(diào)度器可以基于此類提示來(lái)調(diào)度關(guān)鍵路徑上的 微程以便在更快或更具能力的循序器上執(zhí)行。在框958生成的提示還可以包含轉(zhuǎn)換提示。對(duì)于至少 一個(gè)實(shí)施例, 例如,調(diào)度器可以利用轉(zhuǎn)換提示來(lái)執(zhí)行負(fù)載平衡。如果順序短語(yǔ)的每 個(gè)微程的負(fù)載指令活動(dòng)是不均等的,但是執(zhí)行微程的可用循序器是相 同大小的,則可以轉(zhuǎn)換這些微程的代碼以便更均等地將負(fù)載指令分布 在循序器上。再次參考圖11來(lái)對(duì)負(fù)載平^^做進(jìn)一步論述。圖11示出調(diào)度微程A、 B、 C和D分別在循序器1122、 1124、 1128和1126上運(yùn)行。如果 微程A包括比微程B更多的負(fù)載指令,則可以生成提示以使調(diào)度器可 以對(duì)微程A和B重新分區(qū),以便微程A的一些較后指令作為循序器 1124上執(zhí)行的第一指令來(lái)執(zhí)行,此后才在循序器1124上執(zhí)行微程B 的指令。實(shí)際中,將代碼/人一個(gè)循序器移到另一個(gè)循序器,以便將代 碼均等地平衡從而匹配可用硬件資源。此類提示可以基于TSDG中的 相關(guān)性信息來(lái)生成(例如,參見(jiàn)圖6的604 )。圖9示出在框960已將調(diào)度提示提供給調(diào)度器之后,方法950的 處理然后在框962結(jié)束。本文論述的運(yùn)行時(shí)庫(kù)的實(shí)施例支持任何類型的多循序器系統(tǒng)的 用戶級(jí)微程。支持用戶級(jí)線程的任何用戶級(jí)運(yùn)行時(shí)軟件(包括纖程、 pthread等)可以利用本文描述的技術(shù)。此外,本文論述的調(diào)度機(jī)制和 技術(shù)可以實(shí)現(xiàn)在任何多循序器系統(tǒng)上,包括單核SMT系統(tǒng)(例如, 參見(jiàn)圖3的310)和多核系統(tǒng)(例如,參見(jiàn)圖3的350 )。此類多循序 器系統(tǒng)可以包括OS可見(jiàn)和OS隔離的循序器。對(duì)于至少一個(gè)實(shí)施例,來(lái)自相同應(yīng)用程序的用戶級(jí)微程可以同時(shí) 在OS可見(jiàn)的循序器和/或OS隔離的循序器的全部或任何子集上運(yùn)行。 并不僅維持應(yīng)用程序線程至OS線程的一對(duì)一映射并依賴于OS來(lái)管 理循序器與線程之間的映射,本文論述的運(yùn)行時(shí)庫(kù)的實(shí)施例而是可以 使單個(gè)應(yīng)用程序映像中的多個(gè)用戶級(jí)微程能夠在多循序器系統(tǒng)中同 時(shí)運(yùn)行。對(duì)于同時(shí)為多線程化和多微程的單個(gè)應(yīng)用程序,本發(fā)明的實(shí) 施例因此可以支持M:N線程至微程映射,以便N個(gè)用戶級(jí)微程和M 個(gè)線程可以同時(shí)在系統(tǒng)中的任何或全部循序器上運(yùn)行,不管是OS可 見(jiàn)的還是OS隔離的。(M, N > 1)。如本文公開(kāi)的這種運(yùn)行時(shí)庫(kù)提供與如下系統(tǒng)的對(duì)比,該系統(tǒng)例如 對(duì)于每個(gè)OS可見(jiàn)的線程最多僅允許一個(gè)用戶控制的"纖程"來(lái)執(zhí)行。 此類系統(tǒng)的纖程與OS控制的線程關(guān)聯(lián),來(lái)自相同線程的兩個(gè)纖程無(wú)法同時(shí)4丸行。對(duì)于此類所對(duì)比的系統(tǒng),來(lái)自相同OS控制的線程的多 個(gè)用戶級(jí)微程無(wú)法同時(shí)執(zhí)行。對(duì)于本文^^開(kāi)的運(yùn)行時(shí)庫(kù)的至少一個(gè)實(shí)施例,庫(kù)(例如,參見(jiàn)圖5的500 )可以為每個(gè)OS可見(jiàn)的循序器啟動(dòng)一個(gè)不同的OS線程來(lái)作 為專用服務(wù)線程。該服務(wù)線程可以與一個(gè)或多個(gè)OS隔離的循序器關(guān) 聯(lián)。這些OS可見(jiàn)的服務(wù)線程可以為它關(guān)聯(lián)的OS可見(jiàn)的循序器各執(zhí) 行自調(diào)度器(例如,參見(jiàn)圖5的450)的應(yīng)用程序?qū)S酶北?。該服?wù) 線程可以調(diào)度一個(gè)或多個(gè)微程在與OS可見(jiàn)的循序器關(guān)聯(lián)的OS隔離 的循序器上執(zhí)行(例如,參見(jiàn)圖1中分別與OS可見(jiàn)的線程125和126 關(guān)聯(lián)的微程130-132和134-136 )。每個(gè)微程可以在OS隔離的循序器 上運(yùn)行自調(diào)度器的副本。圖10示出能夠執(zhí)行所公開(kāi)的技術(shù)的計(jì)算系統(tǒng)900的至少一個(gè)示 范實(shí)施例。計(jì)算系統(tǒng)900包括至少一個(gè)處理器核904和存儲(chǔ)系統(tǒng)940。 存儲(chǔ)系統(tǒng)940可以包括較大且相對(duì)較慢的存儲(chǔ)裝置902以及一個(gè)或多 個(gè)較小且相對(duì)較快的高速緩存(例如指令高速緩存944和/或數(shù)據(jù)高速 緩存942 )。存儲(chǔ)裝置902可以存儲(chǔ)用于控制處理器904的操作的指令 910和數(shù)據(jù)912。指令910可以包括運(yùn)行時(shí)軟件(例如,參見(jiàn)圖5的 500 )。數(shù)據(jù)912可以包括工作隊(duì)列系統(tǒng)(例如,參見(jiàn)圖4和6的402 )。存儲(chǔ)系統(tǒng)940應(yīng)視為存儲(chǔ)器的規(guī)范化表示,并且可以包括多種形 式的存儲(chǔ)器,例如硬盤驅(qū)動(dòng)器、CD-ROM、隨機(jī)存取存儲(chǔ)器(RAM)、 動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、閃 速存儲(chǔ)器和相關(guān)的電路。存儲(chǔ)系統(tǒng)940可以存儲(chǔ)處理器904可執(zhí)行的 數(shù)據(jù)信號(hào)所表示的指令910和/或數(shù)據(jù)912。指令910和/或數(shù)據(jù)912可 以包括用于執(zhí)行本文論述的任何或所有技術(shù)的代碼和/或數(shù)據(jù)。例如, 數(shù)據(jù)912可以包括形成能夠存儲(chǔ)上文描述的微程描述符的隊(duì)列系統(tǒng) 402的一個(gè)或多個(gè)隊(duì)列?;蛘撸噶?10可以包括生成用于存儲(chǔ)微程 描迷符的隊(duì)列系統(tǒng)402的指令,并且可以包括調(diào)度邏輯450。處理器904可以包括向執(zhí)行核930提供指令信息的前端920??梢栽诟咚倬彺?25中緩存所提取的指令信息,以等待被執(zhí)行核930執(zhí) 行。前端920可以按程序次序?qū)⒅噶钚畔⑻峁┑綀?zhí)行核930。對(duì)于至 少一個(gè)實(shí)施例,前端920包括用于確定要執(zhí)行的下一個(gè)指令的提取/ 解碼單元322。對(duì)于系統(tǒng)900的至少一個(gè)實(shí)施例,提取/解碼單元322 可以包括單個(gè)下一個(gè)指令指針和提取邏輯320。但是,在每個(gè)處理器 904支持多個(gè)線程上下文的實(shí)施例中,提取/解碼單元322為每個(gè)支持 的線程上下文實(shí)現(xiàn)不同的下一個(gè)指令指針和提取邏輯320。圖9中的 點(diǎn)劃線表示多處理器環(huán)境中的附加下一個(gè)指令指針和提取邏輯320的 可選特性。可以采用硬件、硬件仿真軟件或其他軟件、固件或此類實(shí)現(xiàn)方法 的組合來(lái)實(shí)現(xiàn)本文描述的這些方法的實(shí)施例??梢詾榭删幊滔到y(tǒng)實(shí)現(xiàn) 本發(fā)明的實(shí)施例,該可編程系統(tǒng)包括至少一個(gè)處理器、數(shù)據(jù)存儲(chǔ)系統(tǒng) (包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)部件)、至少一個(gè)輸入裝置和 至少一個(gè)輸出裝置。對(duì)此應(yīng)用來(lái)說(shuō),處理系統(tǒng)包括具有例如下列處理 器的任何系統(tǒng)數(shù)字信號(hào)處理器(DSP)、微控制器、專用集成電路 (ASIC)或微處理器??梢詫⒊绦虼鎯?chǔ)在通用或?qū)S每删幊烫幚硐到y(tǒng)可讀的存儲(chǔ)^某體 或裝置(例如硬盤驅(qū)動(dòng)器、軟盤驅(qū)動(dòng)器、只讀存儲(chǔ)器(ROM)、 CD-ROM 裝置、閃速存儲(chǔ)器裝置、數(shù)字多功能光盤(DVD)或其他存儲(chǔ)裝置) 上。處理系統(tǒng)中的處理器可訪問(wèn)的指令在處理系統(tǒng)讀取存儲(chǔ)if某體或裝 置來(lái)執(zhí)行本文描述的過(guò)程時(shí)對(duì)處理系統(tǒng)進(jìn)行配置和操作。還可以考慮 將本發(fā)明的實(shí)施例作為配置成與處理系統(tǒng)一起使用的機(jī)器可讀存儲(chǔ) 媒體來(lái)實(shí)現(xiàn),其中如此配置的存儲(chǔ)媒體使處理系統(tǒng)以特定且預(yù)定的方 式工作來(lái)執(zhí)行本文描述的功能。示范系統(tǒng)900表示基于可從英特爾公司獲得的Pentium , Pentium Pro 、 Pentium II、 Pentium III、 Pentium 4、 Itanium 和 Itanium 2微處理器以及Mobile Intel Pentium III處理器-M和 Mobile Intel Pentium 4處理器-M的處理系統(tǒng),但是也可以使用其他系統(tǒng)(包括具有其他微處理器的個(gè)人計(jì)算機(jī)(PC)、工程工作站、 個(gè)人數(shù)字助理和其他手持設(shè)備、機(jī)頂盒等)。對(duì)于一個(gè)實(shí)施例,示范系統(tǒng)可以執(zhí)行可從微軟公司獲得的一種版本的WindowsTM操作系統(tǒng), 但是也可以使用例如其他操作系統(tǒng)和圖形用戶界面。雖然示出和描述了本發(fā)明的具體實(shí)施例,但是對(duì)于本領(lǐng)域技術(shù)人 員來(lái)說(shuō),顯然在不背離所附權(quán)利要求的范圍的前提下可以進(jìn)行更改和 修改。例如,工作隊(duì)列系統(tǒng)702可以包括由多種循序器類型爭(zhēng)用的單 個(gè)隊(duì)列。對(duì)于此實(shí)施例,資源需求明確地包含在每個(gè)微程描述符中。 分布式調(diào)度器的每個(gè)循序器部分執(zhí)行檢查以確保循序器能夠在將微 程的描述符從循序器執(zhí)行的工作隊(duì)列中移除之前執(zhí)行微程。因此,本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,在不背離本發(fā)明的前提下可以 在本發(fā)明的更廣方面進(jìn)行更改和修改。所附權(quán)利要求將落在本發(fā)明真 正范圍內(nèi)的所有此類更改和修改涵蓋在其范圍內(nèi)。
權(quán)利要求
1.一種方法,包括記錄軟件程序的多個(gè)用戶級(jí)線程的相關(guān)性信息;以及利用所述相關(guān)性信息來(lái)執(zhí)行對(duì)所述用戶級(jí)線程的調(diào)度,其中對(duì)所述用戶級(jí)線程的所述調(diào)度由駐留在用戶空間中的調(diào)度器執(zhí)行;其中所述調(diào)度器在沒(méi)有操作系統(tǒng)干預(yù)的情況下調(diào)度所述用戶級(jí)線程來(lái)執(zhí)行。
2. 如權(quán)利要求l所述的方法,其特征在于,還包括所述多個(gè)用戶級(jí)線程的至少兩個(gè)用戶級(jí)線程與OS控制的線程共 享應(yīng)用程序映像;以及所述調(diào)度器還調(diào)度所述至少兩個(gè)用戶級(jí)線程來(lái)彼此同時(shí)地執(zhí)行。
3. 如權(quán)利要求l所述的方法,其特征在于,所述記錄還包括 響應(yīng)第 一用戶級(jí)線程中的線程創(chuàng)建指令來(lái)確定相關(guān)用戶級(jí)線程的標(biāo)識(shí)符。
4. 如權(quán)利要求3所述的方法,其特征在于,所述記錄還包括 確定與所述相關(guān)用戶級(jí)線程的創(chuàng)建關(guān)聯(lián)的時(shí)間戳。
5. 如權(quán)利要求l所述的方法,其特征在于,所述記錄還包括 響應(yīng)第一用戶級(jí)線程中的同步指令來(lái)確定相關(guān)用戶級(jí)線程的標(biāo)識(shí)符。
6. 如權(quán)利要求5所述的方法,其特征在于,所述記錄還包括 確定與所述相關(guān)用戶級(jí)線程的執(zhí)行關(guān)聯(lián)的時(shí)間戳。
7. 如權(quán)利要求l所述的方法,其特征在于,所述記錄還包括 生成有向圖來(lái)表示所述相關(guān)性信息。
8. 如權(quán)利要求7所述的方法,其特征在于所述有向圖包括所述用戶級(jí)線程的執(zhí)行的每個(gè)唯一實(shí)例的節(jié)點(diǎn)。
9. 如權(quán)利要求8所述的方法,其特征在于所述節(jié)點(diǎn)的第一和第二節(jié)點(diǎn)之間的每條邊表示所述第一節(jié)點(diǎn)與 所述第二節(jié)點(diǎn)之間的相關(guān)性關(guān)系。
10. 如權(quán)利要求8所述的方法,其特征在于所述有向圖包括與每個(gè)節(jié)點(diǎn)的執(zhí)行等待時(shí)間對(duì)應(yīng)的時(shí)間戳。
11. 如權(quán)利要求1所述的方法,其特征在于,所述利用還包括 確定包括所述用戶級(jí)線程的其中 一個(gè)或多個(gè)用戶級(jí)線程的系統(tǒng)關(guān)鍵路徑,以及對(duì)所述關(guān)鍵路徑上的用戶級(jí)線程指定比其余用戶級(jí)線程高的調(diào) 度優(yōu)先級(jí)。
12. 如權(quán)利要求l所述的方法,其特征在于,所述利用還包括 確定順序^L行的用戶級(jí)線程的重復(fù)出現(xiàn)才莫式,以及 調(diào)度所述順序執(zhí)行的用戶級(jí)線程在單個(gè)線程執(zhí)行單元上執(zhí)行。
13. 如權(quán)利要求l所述的方法,其特征在于,所述利用還包括 確定包括所述用戶級(jí)線程的其中 一個(gè)或多個(gè)用戶級(jí)線程的系統(tǒng)關(guān)鍵:路徑,以及指定所述用戶級(jí)線程中不在所述系統(tǒng)關(guān)鍵路徑上的那些用戶級(jí) 線程在一個(gè)或多個(gè)低功率線程執(zhí)行單元上運(yùn)行。
14. 一種系統(tǒng),包括 第一線程執(zhí)行單元; 第二線程執(zhí)行單元;以及調(diào)度器邏輯,用于調(diào)度第一用戶級(jí)線程在所述第一線程執(zhí)行單元 上執(zhí)行,并調(diào)度第二用戶級(jí)線程在所述第二執(zhí)行單元上同時(shí)執(zhí)行;其中所述調(diào)度器基于有關(guān)所述第一和第二用戶級(jí)線程的相關(guān)性 信息來(lái)執(zhí)行所述調(diào)度,并且還在沒(méi)有操作系統(tǒng)干預(yù)的情況下^U亍所述 調(diào)度。
15. 如權(quán)利要求14所述的系統(tǒng),其特征在于 所述調(diào)度器還基于與所述第一和第二線程執(zhí)行單元關(guān)聯(lián)的硬件分配信息來(lái)進(jìn)行所述調(diào)度。
16. 如權(quán)利要求14所述的系統(tǒng),其特征在于,還包括 一個(gè)或多個(gè)附加線程執(zhí)行單元,所述調(diào)度器調(diào)度一個(gè)或多個(gè)附加用戶級(jí)線程在所迷一個(gè)或多個(gè)附加線程執(zhí)行單元上同時(shí)執(zhí)行。
17. 如權(quán)利要求14所述的系統(tǒng),其特征在于 所述調(diào)度器在軟件程序的執(zhí)行通過(guò)期間接收所述相關(guān)性信息,并且還在所述相同執(zhí)行通過(guò)期間動(dòng)態(tài)地考慮所述相關(guān)性信息。
18. 如權(quán)利要求14所述的系統(tǒng),其特征在于 所述調(diào)度器在軟件程序的執(zhí)行通過(guò)期間接收所述相關(guān)性信息,并
19. 一種多循序器多線程系統(tǒng),包括 存儲(chǔ)系統(tǒng);第一循序器;耦合到所述笫 一循序器并耦合到所述存儲(chǔ)系統(tǒng)的第二循序器;以及存儲(chǔ)在所述存儲(chǔ)系統(tǒng)的用戶空間中的調(diào)度邏輯,所述調(diào)度邏輯包 括用于同時(shí)調(diào)度與單個(gè)應(yīng)用程序映像關(guān)聯(lián)的一個(gè)或多個(gè)用戶級(jí)線程 的一個(gè)或多個(gè)指令,其中所述同時(shí)調(diào)度基于有關(guān)用戶級(jí)線程之間的相 關(guān)性的反々責(zé)。
20. 如權(quán)利要求19所述的系統(tǒng),其特征在于 所述調(diào)度邏輯還包括用于將未決用戶級(jí)線程的描述符置于工作隊(duì)列中的邏輯。
21. 如權(quán)利要求19所述的系統(tǒng),其特征在于 所述第一循序器是第一種循序器類型的,而所述第二循序器是第二種循序器類型的。
22. 如權(quán)利要求19所述的系統(tǒng),其特征在于 所述調(diào)度邏輯還包括用于在軟件程序的執(zhí)行期間監(jiān)視所述反饋的邏輯。
23. —種包括機(jī)器可訪問(wèn)媒體的產(chǎn)品,所述機(jī)器可訪問(wèn)i某體具有多個(gè)機(jī)器可訪問(wèn)指令,其中當(dāng)所述指令被處理器執(zhí)行時(shí),所述指令使所述處理器執(zhí)行如下方法,包括記錄軟件程序的多個(gè)用戶級(jí)線程的相關(guān)性信息;以及利用所述相關(guān)性信息來(lái)執(zhí)行對(duì)所述用戶級(jí)線程的調(diào)度,其中對(duì)所述用戶級(jí)線程的所述調(diào)度由調(diào)度器例行程序執(zhí)行;其中所述調(diào)度器例行程序在沒(méi)有操作系統(tǒng)干預(yù)的情況下調(diào)度所述用戶級(jí)線程來(lái)執(zhí)行。
24. 如權(quán)利要求23所述的產(chǎn)品,其特征在于所述多個(gè)用戶級(jí)線程的至少兩個(gè)用戶級(jí)線程與OS控制的線程共 享應(yīng)用程序映像;以及所述調(diào)度器例行程序還調(diào)度所述至少兩個(gè)用戶級(jí)線程來(lái)彼此同 時(shí)地執(zhí)行。
25. 如權(quán)利要求23所述的產(chǎn)品,其特征在于,提供所述記錄的所 述指令還包括在被處理器執(zhí)行時(shí)提供如下操作的指令響應(yīng)第 一用戶級(jí)線程中的線程創(chuàng)建指令來(lái)確定相關(guān)用戶級(jí)線程 的標(biāo)識(shí)符。
26. 如權(quán)利要求23所述的產(chǎn)品,其特征在于,提供所述記錄的所 述指令還包括在被處理器執(zhí)行時(shí)提供如下操作的指令確定與所述相關(guān)用戶級(jí)線程的創(chuàng)建關(guān)聯(lián)的時(shí)間戳。
27. 如權(quán)利要求23所述的產(chǎn)品,其特征在于,提供所述記錄的所 述指令還包括在被處理器執(zhí)行時(shí)提供如下操作的指令生成有向圖來(lái)表示所述相關(guān)性信息。
28. 如權(quán)利要求27所述的產(chǎn)品,其特征在于所述有向圖包括所述用戶級(jí)線程的#1行的每個(gè)唯一實(shí)例的節(jié)點(diǎn)。
29. 如權(quán)利要求28所述的產(chǎn)品,其特征在于 所述節(jié)點(diǎn)的第一和第二節(jié)點(diǎn)之間的每條邊表示所述第一節(jié)點(diǎn)與所述第二節(jié)點(diǎn)之間的相關(guān)性關(guān)系。
30. 如權(quán)利要求28所述的產(chǎn)品,其特征在于所述有向圖包括與每個(gè)節(jié)點(diǎn)的執(zhí)行等待時(shí)間對(duì)應(yīng)的時(shí)間戳。
31. 如權(quán)利要求23所述的產(chǎn)品,其特征在于,提供所述利用的所 述指令還包括在被處理器執(zhí)行時(shí)提供如下操作的指令確定包括所述用戶級(jí)線程的其中 一個(gè)或多個(gè)用戶級(jí)線程的系統(tǒng) 關(guān)鍵路徑,以及對(duì)所述關(guān)鍵路徑上的用戶級(jí)線程指定比其余用戶級(jí)線程高的調(diào) 度優(yōu)先級(jí)。
32. 如權(quán)利要求23所述的產(chǎn)品,其特征在于,提供所述利用的所 述指令還包括在被處理器執(zhí)行時(shí)提供如下操作的指令確定順序執(zhí)行的用戶級(jí)線程的重復(fù)出現(xiàn);溪式,以及
33. 如權(quán)利要求23所述的產(chǎn)品,其特征在于,提供所述利用的所 述指令還包括在被處理器執(zhí)行時(shí)提供如下操作的指令確定包括所述用戶級(jí)線程的其中 一個(gè)或多個(gè)用戶級(jí)線程的系統(tǒng) 關(guān)鍵路徑,以及指定所述用戶級(jí)線程中不在所述系統(tǒng)關(guān)鍵路徑上的那些用戶級(jí) 線程在一個(gè)或多個(gè)低功率線程執(zhí)行單元上運(yùn)行。
全文摘要
在沒(méi)有操作系統(tǒng)的干預(yù)下調(diào)度用戶級(jí)OS獨(dú)立“微程”的方法、設(shè)備和系統(tǒng)實(shí)施例。對(duì)于至少一個(gè)實(shí)施例,調(diào)度器例行程序而非操作系統(tǒng)調(diào)度微程來(lái)執(zhí)行。調(diào)度器例行程序駐留在用戶空間并可以是運(yùn)行時(shí)庫(kù)的一部分。該庫(kù)還可以包括監(jiān)視微程化程序的執(zhí)行并基于微程相關(guān)性信息向調(diào)度器提供調(diào)度提示的監(jiān)視邏輯。此外,調(diào)度器還可以通過(guò)將有關(guān)系統(tǒng)的線程執(zhí)行硬件的配置的信息納入考慮來(lái)優(yōu)化微程調(diào)度。還描述了其他實(shí)施例并且對(duì)這些其他實(shí)施例要求權(quán)利。
文檔編號(hào)G06F9/48GK101273335SQ200680035351
公開(kāi)日2008年9月24日 申請(qǐng)日期2006年9月22日 優(yōu)先權(quán)日2005年9月26日
發(fā)明者B·比比, D·阿姆斯特隆, G·欽亞, H·王, J·沈, P·彼得森, R·帕特爾, R·拉克維克, R·漢金斯, S·考什基, T·迪普, X·田 申請(qǐng)人:英特爾公司