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