專利名稱::基于編譯器的用戶級線程調(diào)度優(yōu)化的制作方法
技術(shù)領(lǐng)域:
:一般來說,本^^開涉及信息處理系統(tǒng),更具體地說,涉及不通過操作系統(tǒng)調(diào)度的用戶級線程的調(diào)度效率的提高。
背景技術(shù):
:一種用來提高處理器性能的方法稱為"多線程"。在軟件多線程中,可以將指令流分成多個可以并行執(zhí)行的指令流?;蛘撸梢圆⑿袌?zhí)行多個獨立的軟件流。在一種稱為時間片多線程或時分復(fù)用("TMUX")多線程的方法中,單個處理器在固定時期之后在線程間切換。在另一種方法中,單個處理器在發(fā)生諸如長等待時間高速緩存不命中的觸發(fā)事件之后在線程間切換。在稱為基于事件切換的多線程("SoEMT")的后一種方法中,在給定時間,最多只有一個線程是活動的。多線程越來越多地在硬件中得到支持。例如,在一種方法中,在諸如芯片多處理器("CMP")系統(tǒng)的多處理器系統(tǒng)中的多個處理器可以同時分別對多個軟件線程的其中一個進行操作。在另一種稱為同時多線程("SMT")的方法中,使單個物理處理器對于操作系統(tǒng)和用戶程序來說看上去就像是多個邏輯處理器一樣。對于SMT,多個軟每個邏輯處理器維護一組完整的體系結(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)用程序在不負面影響性能的情況下調(diào)度線程的能力一般局限于相對較少數(shù)量的線程。因此,可以將系統(tǒng)實現(xiàn)成使得通過用戶空間中的程序而不是通過操作系統(tǒng)來調(diào)度用戶級線程。一個這樣的系統(tǒng)在2005年9月26日提交的共同待決的申請美國序列號11/235865中有所論述??梢詤⒄找韵赂綀D來理解本發(fā)明的實施例,附圖中相同的元件用相同的數(shù)字表示。這些圖無意作為限制,而是用于說明至少部分基于來自編譯器的調(diào)度提示來在多線程化(multithreaded)系統(tǒng)中具有判斷力地調(diào)度用戶級線程的計算機可訪問介質(zhì)、系統(tǒng)和方法的選定實施例。圖1是呈示多循序器系統(tǒng)的通用并行編程方法的圖形表示的框圖。圖2是示出用戶級多線程的至少一個實施例的在線程和用戶級線程之中共享的存儲器和狀態(tài)的框圖。圖3是示出多循序器系統(tǒng)的各個實施例的框圖。圖4是示出支持用戶級線程并從編譯器接收調(diào)度提示的多循序器多線程系統(tǒng)的至少一個實施例的數(shù)據(jù)流程圖。圖5是示出用于為用戶級線程調(diào)度生成編譯器提示的方法的至少一個實施例的流程圖。圖6是示出能夠利用編譯器生成的提示來指導(dǎo)調(diào)度決策的運行時用戶級線程調(diào)度器的至少一個實施例的框圖。圖7是示出利用局部性提示來指導(dǎo)用戶級線程調(diào)度決策的方法的至少一個實施例的數(shù)據(jù)流程圖。圖8是示出基于局部性的遷移的一個實例的概念性數(shù)據(jù)流程圖。圖9是示出能夠執(zhí)行公開的技術(shù)的系統(tǒng)的至少一個實施例的框圖。具體實施例方式以下論述描述用于提高不是通過操作系統(tǒng)創(chuàng)建或調(diào)度的執(zhí)行的多個同時執(zhí)行的用戶級線程(本文有時稱為"微程(shred)")的調(diào)度效率的方法、系統(tǒng)和制造產(chǎn)品的選定實施例。這些微程而是通過調(diào)度器例行程序來調(diào)度,該調(diào)度器例行程序可以基于至少部分由編譯器提供的信息動態(tài)地調(diào)整微程調(diào)度。編譯器提供的信息的本質(zhì)是提示,調(diào)度器可以在不影響程序正確性的情況下忽略該信息。該信息是在沒有用戶指示或其它語用信息的情況下由編譯器獨立生成的??梢哉{(diào)度微程在一個或多個OS隔離的循序器(sequencer)上運行。本文中有時將OS隔離的循序器稱為"OS不可見";操作系統(tǒng)不會調(diào)度工作在此類循序器上。本文描述的機制可以結(jié)合單核或多核多線程系統(tǒng)來使用。在以下描述中,闡述了眾多特定細節(jié),如處理器類型、多線程環(huán)境、系統(tǒng)配置以及多循序器系統(tǒng)中的循序器的數(shù)量、類型和拓樸,以便更充分地理解本發(fā)明。但是,本領(lǐng)域的技術(shù)人員將明白,在沒有這些特定細節(jié)的情況下,也可以實現(xiàn)本發(fā)明。此外,沒有詳細示出一些熟知的結(jié)構(gòu)、電路等,以免不必要地使本發(fā)明晦澀難懂??梢栽诜Q為并行編程的方法中使用共享的存儲器多處理范例。根椐該方法,應(yīng)用程序設(shè)計員可以將軟件程序(有時稱為"應(yīng)用程序"或"進程")拆分為將同時運行的多個任務(wù),以便表現(xiàn)軟件程序的并行性。相同軟件程序("進程")的所有線程共享共用的存儲器邏輯視圖。圖1是示出多循序器多線程系統(tǒng)上的并行編程方法的圖形表示的框圖。圖l示出對于操作系統(tǒng)("OS")140可見的進程100、103、120。這些進程100、103、120可以是不同的軟件應(yīng)用程序,如字處理程序、圖形程序和電子郵件管理程序。通常,每個進程在不同的虛擬地址空間中工作。操作系統(tǒng)("OS")140—般負責(zé)管理進程(如進程103和120)的用戶定義的任務(wù)。盡管每個進程具有至少一個任務(wù)(例如,參見分別具有附圖標記100和103的進程0和進程2),但其它進程也可以具有多于一個任務(wù)(例如,具有附圖標記120的進程1)。不應(yīng)將如圖1所示的進程的數(shù)量以及每個進程的用戶定義的任務(wù)的數(shù)量視為是限制性的。該圖示只是為了說明的目的。圖1示出,可以在操作系統(tǒng)140中創(chuàng)建與進程120關(guān)聯(lián)的每個用戶定義的任務(wù)的不同線程125、126,并且操作系統(tǒng)140可以將線程125、126映射到線程執(zhí)行資源。(圖1中沒有示出線程執(zhí)行資源,但是下文將對此進行詳細論述。)類似地,可以在操作系統(tǒng)140中創(chuàng)建與進程103關(guān)聯(lián)的用戶定義的任務(wù)的線程127;同樣也可以在操作系統(tǒng)140中創(chuàng)建與進程0關(guān)聯(lián)的用戶定義的任務(wù)的線程124。OS140—般負責(zé)調(diào)度這些線程125、126、127用于在執(zhí)行資源上執(zhí)行。與相同進程關(guān)聯(lián)的線程通常具有相同的虛擬存儲器地址空間。因為OS140負責(zé)創(chuàng)建、映射和調(diào)度線程,所以線程125、126、127對于OS140是"可見的"。此外,本發(fā)明的實施例包含對于OS140不可見的附加用戶級線程130-139。即,OS140不創(chuàng)建、管理、或以其它方式確認或控制這些附加用戶級線程130-139。這些附加線程既不由OS140創(chuàng)建也不由OS140控制,它們可以經(jīng)調(diào)度而相互同時執(zhí)行,本文有時將它們稱為"微程"130-139,以便將它們與OS可見的線程相區(qū)分,并進一步將它們與PTHREADS或?qū)τ谙嗤腛S可見的線程可能相互不同時執(zhí)行的其它用戶級線程相區(qū)分。微程由用戶級程序(稱為"微程化程序")創(chuàng)建和管理,它們可以經(jīng)調(diào)度而在與操作系統(tǒng)隔離的循序器上運行。OS隔離的循序器通常與OS可見的循序器共享一組共用的環(huán)0狀態(tài)。這些共享的環(huán)-0體系結(jié)構(gòu)狀態(tài)通常是那些負責(zé)支持OS可見的循序器與OS隔離的循序器之間共用的共享的存儲器地址空間的狀態(tài)。例如,對于基于IA-32體系結(jié)構(gòu)的實施例,CR0、CR2、CR3、CR4是這些共享的環(huán)-0體系結(jié)構(gòu)狀態(tài)中的一些狀態(tài)。因此,微程共享為與相同進程關(guān)聯(lián)的線程而創(chuàng)建的相同執(zhí)行環(huán)境(虛擬地址映射)。本文所用的術(shù)語"線程"和"微程"至少包含將與進程的其它線程和/或微程同時執(zhí)行的一組指令的概念。因此,線程和"微程"這兩個術(shù)語涵蓋一組軟件原語或應(yīng)用程序編程接口(API)的理念。如本文所用,同為指令流的線程(由OS控制)和微程(對于操作系統(tǒng)不可見,而是由用戶控制)之間的區(qū)分要素在于如何管理相應(yīng)線程和微程指令流的調(diào)度和執(zhí)行的差異上。線程是響應(yīng)對OS的系統(tǒng)調(diào)用而生成的。OS生成該線程,并分配資源來運行該線程。分配給線程的這些資源可以包括供操作系統(tǒng)用來控制和調(diào)度線程的數(shù)據(jù)結(jié)構(gòu)。與之相比,孩i程的至少一個實施例是經(jīng)由用戶級軟件"原語"生成的,用戶級軟件"原語,,調(diào)用OS獨立的機制來生成OS未知的樣i程。因此,微程可以是響應(yīng)用戶級軟件調(diào)用而生成的。對于至少一個實施例,用戶級軟件原語可以涉及用戶級(環(huán)-3)指令,這些指令可以在硬件或固件中創(chuàng)建用戶級微程。由此創(chuàng)建的用戶級微程可以由硬件和/或固件和/或用戶級軟件來調(diào)度。OS獨立的機制可以是位于用戶空間(如軟件庫)中的軟件代碼。本文所論述的微程調(diào)度優(yōu)化技術(shù)可以結(jié)合任何用戶級線程包來使用。圖2是以圖形形式就上文所做的陳述進一步詳細示出相同軟件程序或進程的所有線程共享共用的存儲器邏輯視圖的框圖。本文可以將與程序或進程的所有線程關(guān)聯(lián)的此共用的存儲器邏輯視圖稱為"應(yīng)用程序映像"。對于本發(fā)明的實施例,此應(yīng)用程序映像也^皮與進程100、103、120(圖1)關(guān)聯(lián)的微程共享。本文參照圖1來論述圖2。圖2描繪如圖1所示的進程120、線程124、125、126和微程130-136的圖形表示。但是,不應(yīng)將這種表示視為是限制性的。本發(fā)明的實施例不一定對與進程關(guān)聯(lián)的線程或微程的數(shù)量設(shè)定上限或下限。關(guān)于下限,圖l示出,在給定時間運行的每個進程與至少一個線程關(guān)聯(lián)。但是,這些線程完全無需一定與任何微程關(guān)聯(lián)。例如,在如圖1所示的特定時間,如圖1所示的進程0(100)示為與一個線程124—起運行,但是沒有任何微程。但是,如圖l所示,其它進程103、120可以與一個或多個OS調(diào)度的線程關(guān)聯(lián)。圖1中使用點劃線和省略號來表示可選的附加微程。圖1示出與一個OS調(diào)度的線程127關(guān)聯(lián)的一個進程103,還示出與兩個或兩個以上線程125-126關(guān)聯(lián)的另一個進程120。此外,每個進程103、120可以另外分別與一個或多個微程137-139、130-136關(guān)聯(lián)。進程1120的兩個線程125、126和四個微程130-136的表示以及進程2103的一個線程127和兩個微程137、139的表示只是說明性的,而不應(yīng)將其視為是限制性的。與進程關(guān)聯(lián)的OS可見的線程的數(shù)量可以由OS程序來限制。但是,對于至少一個實施例,與進程關(guān)聯(lián)的微程的累積數(shù)量的上限只由算法線程級并行性的量值和在執(zhí)行期間的特定時間可用的微程執(zhí)行資源的數(shù)量(如循序器的數(shù)量)限制。圖2示出,與進程120關(guān)聯(lián)的第二線程126所具有的與之關(guān)聯(lián)的微程的數(shù)量(n)可以不同于與第一線程125關(guān)聯(lián)的微程的數(shù)量。(對于線程125、126的其中之一或二者,n可以為O。)圖2示出,與特定進程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)所共享。例如,對于至少一個實施例,與特定線程關(guān)聯(lián)的所有微程可以共享環(huán)0狀態(tài)以及與該特定線程關(guān)聯(lián)的應(yīng)用程序狀態(tài)的至少一部分。因此,圖2示出,本發(fā)明的至少一個實施例的系統(tǒng)可以支持OS可見的線程(如線程125)和與該線程關(guān)聯(lián)的微程130-136(對于OS不可見)之間的一對多關(guān)系。在程序員而非OS可以采用用戶級技術(shù)來創(chuàng)建、同步化和以其它方式管理和控制《鼓程的操作的意義上來i兌,微程對于OS(參見圖1中的140)是"不可見的"。盡管OS140知道并管理一個或多個線程,但是OS140不知道也不管理或控制微程。因此,并不依賴于操作系統(tǒng)來管理線程單元硬件與微程之間的映射,而是可以由用戶空間中的調(diào)度器邏輯來管理該映射。對于至少一個實施例,調(diào)度器邏輯可以存在于運行時軟件庫中。對于至少一個實施例,用戶可以利用微程控制指令或原語來直接控制該映射,這些微程控制指令或原語由調(diào)度器或軟件(如運行時庫)中的其它邏輯來處理。此外,用戶可以直接操縱與微程執(zhí)行關(guān)聯(lián)的控制和狀態(tài)轉(zhuǎn)移。因此,對于本文描述的方法、機制、制造產(chǎn)品和系統(tǒng)的實施例,線程單元的體系結(jié)構(gòu)的用戶可見的特征至少是一組允許用戶直接操縱和控制線程單元硬件的規(guī)范指令。本文所用的線程單元在本文又可互換地稱為"循序器,,,它可以是能夠執(zhí)行線程或微程的任何物理或邏輯單元。它可以包括用于為給定線程或微程確定將要執(zhí)行的下一個指令的下一個指令指針邏輯。例如,如圖1所示的OS線程125(在圖2中為"線程A"125)可以在一個循序器(未示出)上執(zhí)行,而每個活動微程130-136可以分別在其它循序器"seq1"-"seq4"上執(zhí)行。循序器可以是邏輯線程單元或物理線程單元。圖3中示出邏輯與物理線程單元之間的這種差異。圖3是示出能夠執(zhí)行公開的技術(shù)的多循序器系統(tǒng)的實施例310、350的選定硬件特征的框圖。圖3示出單核多循序器多線程環(huán)境310的選定硬件特征。圖3還示出多核多線程環(huán)境350的選定硬件特征,其中每個循序器是一個單獨的物理處理器核。在單核多線程環(huán)境310中,使單個物理處理器304對于才乘作系統(tǒng)和用戶程序來說看上去就像是多個邏輯處理器(未示出)一樣,本文將這些邏輯處理器稱為LP廠LPn。每個邏輯處理器UVLPn分別維護一組完整的體系結(jié)構(gòu)狀態(tài)ASrASn。對于至少一個實施例,體系結(jié)構(gòu)狀態(tài)包括數(shù)據(jù)寄存器、段寄存器、控制寄存器、調(diào)試寄存器和大部分的型號專用寄存器。邏輯處理器UVLPn共享物理處理器304的大部分其它資源,如高速緩存、執(zhí)行單元、分支預(yù)測器、控制邏輯和總線。盡管這些特征可以被共享,但是多線程環(huán)境310中的每個線程上下文可以獨立地生成下一個指令地址(并執(zhí)行例如從指令高速緩存、執(zhí)行指令高速緩存或跟蹤高速緩存中的提取)。因此,即使可以在單個物理提取/解碼單元322中實現(xiàn)多個邏輯循序器,處理器304仍包括邏輯上獨立的下一個指令指針和提取邏輯320來提取每個線程上下文的指令。對于單核多線程實施例,術(shù)語"循序器"至少涵蓋線程上下文的下一個指令指針和提取邏輯320,以及用于該線程上下文的至少一些關(guān)聯(lián)的體系結(jié)構(gòu)狀態(tài)312。應(yīng)注意,單核多線程系統(tǒng)310的循序器無需^:對稱的。例如,相同物理核的兩個單核多線程循序器可以在它們各自維護的體系結(jié)構(gòu)狀態(tài)信息的數(shù)量上有所不同。單核多線程系統(tǒng)可以實現(xiàn)多種多線程方案中的任何一種方案,包括同時多線程(SMT)、基于事件切換的多線程(SoeMT)和/或時分復(fù)用多線程(TMUX)。當(dāng)在任何特定時間點,來自多于一個硬件線程上下文(或邏輯處理器)的指令在處理器中同時運行時,這稱為SMT。否則,單核多線程系統(tǒng)可以實現(xiàn)SoeMT,其中在多個硬件線程上下文之間復(fù)用處理器流水線,但是在任何給定時間,只有來自一個硬件線程上下文的指令可以在流水線中執(zhí)行。對于SoeMT,如果線程切換事件是基于時間的,則它是TMUX。因此,對于至少一個實施例,多循序器系統(tǒng)310是支持同時多線程的單核處理器304。對于該實施例,每個循序器是具有它自己的指令下一個指令指針和提取邏輯以及它自己的體系結(jié)構(gòu)狀態(tài)信息的邏輯處理器,但相同的物理處理器核304執(zhí)行所有線程指令。對于該實施例,邏輯處理器維護它自己的體系結(jié)構(gòu)狀態(tài)版本,但是同時執(zhí)行的線程之間可以共享單個處理器核的執(zhí)行資源。圖3還示出多核多線程環(huán)境350的至少一個實施例。該環(huán)境350包括兩個或兩個以上獨立的物理處理器304a-304n,這些處理器304a-304n均能夠執(zhí)行不同的線程/微程,以便使這些不同的線程/微程的至少某些部分的執(zhí)行可以同時進行。每個處理器304a-304n包括用于提取其相應(yīng)的線程或微程的指令信息的物理上獨立的提取單元322。在每個處理器304a-304n執(zhí)行單個線程/微程的實施例中,提取/解碼單元322實現(xiàn)單個下一個指令指針和提取邏輯320。但是,在每個處理器304a-304n支持多個線程上下文的實施例中,提取/解碼單元322為每個支持的線程上下文實現(xiàn)不同的下一個指令指針和提取邏輯320。圖3中以點劃線表示多處理器環(huán)境350中的附加的下一個指令指針和提取邏輯320的可選特性。對于如圖3所示的多核系統(tǒng)350的至少一個實施例,每個循序器都可以是處理器核304,其中多個核304a-304n駐留在單個芯片封裝360中。每個核304a-304n都可以是單線程化或多線程化處理器核。圖3中以虛線表示芯片封裝360,以便指示多核系統(tǒng)350的所示單芯片實施例只是說明性的。對于其它實施例,多核系統(tǒng)的處理器核可以駐留在獨立的芯片上。即,多核系統(tǒng)可以是多插槽對稱多處理系統(tǒng)。為了便于論述,以下論述著重于多核系統(tǒng)350的實施例。但是,不應(yīng)將這種著重論述視為是限制性的,因為下文描述的機制在多核或單核多循序器環(huán)境中都可以執(zhí)行。圖4是示出支持微程控制的多循序器多線程系統(tǒng)的系統(tǒng)400的至少一個實施例的數(shù)據(jù)流程圖。圖4示出,系統(tǒng)400包括調(diào)度器例行程序450。調(diào)度器例行程序450可以是"分布式的",因為例行程序450的所有或一部分在多個循序器403、404中的每個循序器上執(zhí)行。對于至少一個實施例,調(diào)度器450可以進行操作以便調(diào)度因API類微程控制(如shred_create、shred—fork等)或微程同步(如shred_yield、互斥(shred—lock/shred—unlock)、臨界區(qū)(criticalsection)等)指令或原語而創(chuàng)建的微程。操作系統(tǒng)("OS")(例如,參見圖1中的140)可以獨立于調(diào)度器例行程序450進行操作以便調(diào)度OS管理的線程。與之相反,通過調(diào)度器例行程序450而不是通過由OS提供的調(diào)度機制來調(diào)度用戶級微程。因此,每個微程由調(diào)度器例行程序450獨立于OS調(diào)度邏輯來調(diào)度以用于執(zhí)行。每個孩i程可以經(jīng)調(diào)度而在OS隔離或OS可見的循序器上執(zhí)行。圖4示出,編譯器402可以接收用戶程序440作為輸入。用戶程序可以"微程化",因為它可以包括一個或多個用戶級微程創(chuàng)建指令(或"原語")。對于至少一個實施例,觸發(fā)微程創(chuàng)建的用戶級指令是API類("應(yīng)用程序程序員接口")微程控制原語,如"shred_create"或"shrsd—fork"。編譯器402在微程化應(yīng)用程序440中遇到這些微程控制原語之一時生成置于由編譯器402產(chǎn)生的插裝(instrumented)代碼403中的原語擴充。即,對于本發(fā)明的至少一個實施例,為接口442定義的API類原語包括用于將調(diào)度提示從編譯器傳遞給調(diào)度器的一個或多個擴充(例如,下文結(jié)合表2"i侖述的shred_create_attr)。編譯器402可以將這些原語擴充插入到每個最小執(zhí)行單元("MUE")的插裝代碼403中,MUE將在以下題為"通過編譯器生成提示"的章節(jié)中描述。此外,編譯器402還可在插裝代碼403中生成一個或多個指令以更新提示值(例如,參見如下表2所示的屬性表中的值)。調(diào)度器例行程序450可以從由編譯器402生成的插裝代碼403中接收調(diào)度提示,以便向調(diào)度器例行程序450提供提示。編譯器402可以基于對微程化用戶程序440的靜態(tài)分析或概況分析來生成初始提示值。(如上所述,可以在運行時期間,響應(yīng)編譯器402置于插裝代碼403中的指令,更新提示值。)本文所用的"微程化"程序是包括一個或多個微程創(chuàng)建/控制原語或指令的用戶級程序。提示是在沒有諸如語用信息的用戶輸入的情況下由編譯器402獨立生成的??梢越?jīng)由接口442將提示從插裝代碼403提供給調(diào)度器450。因此,如圖4所示的系統(tǒng)400可以接收由編譯器生成的提示,這些提示可以傳遞給調(diào)度器450,并且調(diào)度器450可以利用這些提示來更具判斷力地執(zhí)行動態(tài)微程調(diào)度,從而提高微程化程序的線程級并行性。編譯器402能夠獨立地生成提示,并且調(diào)度器450可以利用這些提示來執(zhí)行更有效的微程調(diào)度。本領(lǐng)域的技術(shù)人員將認識到,在程序員的代碼440(例如,包括API類微程創(chuàng)建原語的代碼)和使循序器執(zhí)行微程的實際體系結(jié)構(gòu)指令之間可以存在一個或多個抽象級。如本文所用,描述為由程序員或用戶生成的指令或原語不僅應(yīng)涵蓋可以基于用戶生成的代碼由匯編器或編譯器生成的體系結(jié)構(gòu)指令或由使用匯編語言的程序員生成的體系結(jié)構(gòu)指令,而且還應(yīng)涵蓋最后可以匯編或編譯成體系結(jié)構(gòu)微程控制指令的任何高級原語或指令。還應(yīng)理解,還可以將體系結(jié)構(gòu)微程控制指令解碼成一個或多個微操作。在分析用戶應(yīng)用程序440期間,編譯器402可以識別在調(diào)度器450于運行時期間嘗試動態(tài)地優(yōu)化微程調(diào)度時對于調(diào)度器450有益的信息(提示)。在編譯時間,編譯器402可以訪問比在用戶程序440的運行時期間暴露給調(diào)度器450的信息更多的關(guān)于程序440的語義信息?;趹?yīng)用程序開發(fā)者在用戶程序440中采用的線程化算法,編譯器402可以靜態(tài)地捕獲和突出顯示(經(jīng)由提示傳遞)某些潛在區(qū)域,在這些區(qū)域,運行時調(diào)度器可以著手采用增強性能或減少功率消耗的方式動態(tài)地調(diào)度微程。因此,編譯器402可以靜態(tài)地生成提示,運行時調(diào)度器450可以在動態(tài)調(diào)度期間使用這些提示。因為它們是不會影響程序正確性的"提示",所以調(diào)度器450也可以隨意地忽略這些提示。關(guān)于提示的生成,編譯器402可以在執(zhí)行應(yīng)用程序440之前執(zhí)行離線相關(guān)性分析,以便確定微程中哪些執(zhí)行單元經(jīng)常作為獨立的執(zhí)行單元出現(xiàn)并且可以作為獨立的執(zhí)行單元執(zhí)行。以此方式,編譯器402就能夠確定微程的哪些部分可以獨立地執(zhí)行,以便可以將每個獨立的工作部分分配給不同的物理循序器(如果在運行時可用),乂人而增加程序440的線程級并行性。調(diào)度器450還可以考慮運行時反饋以及在運行時之前生成的編譯器提示。除了(或替代)編譯器提示之外,調(diào)度器450還可以考慮系統(tǒng)400的某些運行時特性,這些特性可以包括但不限于循序器利用率和可用性、高速緩存配置、當(dāng)前已經(jīng)調(diào)度的微程數(shù)量等。應(yīng)注意,如圖4所示的循序器403、404無需^^對稱的,并且不應(yīng)將如圖4所示的循序器的數(shù)量視為是限制性的。關(guān)于循序器的數(shù)量,可以對任何數(shù)量的循序器使用調(diào)度機制400。圖4中只示出兩個循序器,這只是出于說明的目的。本領(lǐng)域的技術(shù)人員將認識到,系統(tǒng)可以包括兩個以上循序器,它們可以全部是一種循序器類型(對稱),或者可以各自為多種循序器類型之一(不對稱)。例如但非限制,可以對包括4、8、16、32或更多個對稱和/或不對稱循序器的多循序器系統(tǒng)實現(xiàn)該調(diào)度機制。關(guān)于對稱,圖4示出系統(tǒng)400的調(diào)度邏輯450,該系統(tǒng)400可以包括至少兩種類型的循序器,即A型循序器403和B型循序器404。每個循序器403、404可以包括或運行分布式調(diào)度器例行程序450的一部分。這些部分可以是彼此完全相同的副本,但是不一定要如此。循序器403、404可以不對稱,在這一點上,它們可以在任何方式上有所不同,包括那些影響計算質(zhì)量的方面。這些循序器可以在功率消耗、計算速度性能、功能特征等方面有所不同。舉例來說,對于一個實施例,循序器403、404可以在功能性方面有所不同。例如,一個循序器能夠執(zhí)行整數(shù)和浮點指令,但是不能執(zhí)行單指令多數(shù)據(jù)("SIMD")指令擴充集,如流SIMD擴充3("SSE3")。另一方面,另一個循序器能夠執(zhí)行第一循序器可以執(zhí)行的所有指令,同時還可以執(zhí)行SSE3指令。作為功能不對稱的另一個實例,一個循序器403可以對于OS(例如,參見圖1中的140)是可見的,并且因此能夠執(zhí)行超級用戶才莫式(例如,IA-32的"環(huán)0")操作,如執(zhí)行系統(tǒng)調(diào)用、服務(wù)頁故障等。另一方面,另一個循序器404可以與OS隔離,并且因此只能夠執(zhí)行用戶級(例如,IA-32的"環(huán)-3")操作,而不能夠執(zhí)行環(huán)O操作。其上利用調(diào)度機制400的系統(tǒng)的循序器還可以在任何其它方式上有所不同,如覆蓋范圍(footprint)、字寬度和/或數(shù)據(jù)路徑大小、拓樸、存儲器、功率消耗、功能單元的數(shù)量、通信體系結(jié)構(gòu)(多點連接對點到點互連)、或與功能性、性能、覆蓋范圍等有關(guān)的任何其它度量。對于至少一個實施例,A型403和B型404循序器的功能性可以是互斥的。即,例如,一種類型的循序器403可以支持另一種類型的循序器404所不支持的特定功能性,如SSE3指令的執(zhí)行;而第二類型的循序器404可以支持第一類型的循序器403所不支持的特定功能性,如環(huán)0操作。但是,對于至少一個實施例,A型403和B型404循序器的功能性表示超集-子集功能性關(guān)系,而非相互排斥的功能性關(guān)系。即,第一組循序器(如A型循序器403)提供功能性的超集,該超集包括第二組循序器(如B型循序器404)的所有功能性,加上第二組循序器404不能提供的附加功能性。一般來說,如圖4所示的系統(tǒng)利用混合方法來進行動態(tài)的微程調(diào)度,以便利用編譯器402和調(diào)度器450的各自的特定強項。編譯器402完全知道程序語義,并且因此非常適于執(zhí)行功能分解,以便為微程揭開可以獨立執(zhí)行的最小線程執(zhí)行單元("MUE"),從而增加線程級并行性。分解可以涉及全局相關(guān)性分析,并且因此更易由編譯器而不是由調(diào)度器執(zhí)行。因此,編譯器402能夠在運行時期間提供比調(diào)度器450搜集的調(diào)度提示更強的調(diào)度提示;編譯器402通過接口442將這些提示傳遞給調(diào)度器450。與之相比,調(diào)度器450更適于利用由編譯器搜集的關(guān)于MUE的信息來自適應(yīng)地執(zhí)行MUE的遷移和聚集。調(diào)度器450完全知道系統(tǒng)的處理器的數(shù)量、系統(tǒng)的高速鄉(xiāng)爰存配置、系統(tǒng)的互連拓樸以及潛在的資源分布不平衡和循序器中的功能不對稱性。因此,調(diào)度器450非常適于在運行時為給定的目標多循序器系統(tǒng)自適應(yīng)地聚集MUE和/或?qū)UE與可用資源對準。換句話說,分裂(將用戶應(yīng)用程序440中的微程計算分解成多個獨立的工作單元并生成關(guān)聯(lián)提示)更易由編譯器執(zhí)行,而聚集(即,以資源有效的方式將MUE與循序器對準)較佳由動態(tài)微程調(diào)度器450在運行時執(zhí)行。因此,圖4示出混合方法,該混合方法包括靜態(tài)和動態(tài)組成部分,以便為各種不同的運行時平臺自適應(yīng)地遞送最佳性能。編譯器402執(zhí)行靜態(tài)分析或離線概況分析,以便生成專用編譯器提示,從而使運行時調(diào)度器免于在運行時執(zhí)行該相關(guān)性分析。通過調(diào)度器450在運行時期間動態(tài)地利用這些提示,允許以有效利用特定系統(tǒng)的運行時資源的方式4丸行調(diào)度。用于將提示從編譯器傳遞給調(diào)度器的接口首先,本章節(jié)論述用于將微程調(diào)度提示從編譯器402傳遞給調(diào)度器450的接口442的至少一個實施例。在以下章節(jié)中,還提供關(guān)于編譯器402如何靜態(tài)地生成(通過靜態(tài)分析或離線概況分析)提示以及調(diào)度器450如何在動態(tài)運行時調(diào)度微程期間利用這些提示的進一步的細節(jié)。關(guān)于接口442,可以將它實施為編譯器402與調(diào)度邏輯450之間的API("應(yīng)用程序程序員接口")類型的接口。提供接口442的API可以包括屬性數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)在本文稱為屬性表(ATTR),它可以由編譯器402維護,并傳遞給調(diào)度器450。因此,在創(chuàng)建微程時,編譯器402負責(zé)設(shè)置微程的屬性數(shù)據(jù)結(jié)構(gòu)并將該信息傳遞給調(diào)度器邏輯450。編譯器402可以維護和管理在編譯后的應(yīng)用程序440中的每個微程的獨立的屬性表。接口442包括明示地規(guī)定將微程的屬性表中的信息從編譯器402傳遞給調(diào)度器450的原語。對于至少一個實施例,這些原語是已有微程創(chuàng)建和控制原語的擴充。(參見下文對shred—create—attr6々i侖述)。屬性表可以包括每種類型的提示項,以使得它包括存在于編譯器和調(diào)度器之間的特定微程的所有優(yōu)化提示。因此,數(shù)據(jù)結(jié)構(gòu)負責(zé)為特定微程表現(xiàn)和傳達在接口442上定義的所有可能的優(yōu)化提示。盡管本文描述了某些類型的提示,但應(yīng)了解,屬性表的性質(zhì)使得它尤其可以修正成包含附加的、或與本文描述的類型不同的提示。擁有優(yōu)化提示的數(shù)據(jù)結(jié)構(gòu)允許相對容易地對數(shù)據(jù)結(jié)構(gòu)做進一步的修正,以便可以在數(shù)據(jù)結(jié)構(gòu)中增加附加、或不同的提示。因此,可以根據(jù)需要修改屬性表以便滿足設(shè)計考慮。不管包含什么樣的提示,表中的信息都可以經(jīng)由API原語從編譯器402傳遞給調(diào)度器450。對于至少一個實施例,該原語可以是其它微程創(chuàng)建指令或原語的擴充,該擴充指示將會把屬性表作為參數(shù)傳遞。例如,"shred一create"原語可以擴充成包含屬性表。這種擴充的這樣的至少一個實施例的一個實例"shred一create一attr"可以包括如下表2(將在下文進一步詳細論述)所示的參數(shù)。如上所示的屬性表可以包含可以從編譯器傳遞給調(diào)度器的每種類型的提示項。對于至少一個實施例,屬性表中包含的提示類型如下表1所述。表l提示類型說明不平衡指示與MUE關(guān)聯(lián)的計算程度。實際上,指示將通過MUE執(zhí)行以使得可以執(zhí)行負荷平衡的工作量。合并指示MUE是否與其它MUE—致,它是否可以與另一個MUE聚集,以及它是否與先前的MUE相關(guān)。局部性指示與其它4效程數(shù)據(jù)共享的程度。屬性數(shù)據(jù)結(jié)構(gòu)的一個實施例可以用如表1A所述的偽代碼表示:表1ATypedefstruct{intimbalance;intfdsion;intlocality;inthotspot;}attr;在微程創(chuàng)建之后,編譯器負責(zé)設(shè)置和維護屬性數(shù)據(jù)結(jié)構(gòu)并將屬性數(shù)據(jù)傳遞給調(diào)度器。編譯器可以按照以下方式這樣做。如果編譯器在應(yīng)用程序440中遇到微程創(chuàng)建原語,那么編譯器生成該微程的屬性表的實例。編譯器用任何合適的提示來填充屬性表。編譯器可以用經(jīng)過修改的微程創(chuàng)建指令(如"shred_create—attr,,,這將在下文結(jié)合表2進行論述)來替換該微程創(chuàng)建指令,經(jīng)過修改的微程創(chuàng)建指令包括耀:程的屬性表作為參數(shù)。以此方式,編譯器設(shè)置并填充每個微程的屬性表的實例。關(guān)于如何將屬性表信息傳遞給調(diào)度器,參照表2。表2示出,包括微程創(chuàng)建和控制指令或原語的API可以經(jīng)過修改以便提供允許將屬性表傳遞給調(diào)度器的擴充。具體來說,表2示出為了支持shred一create原語的新屬性數(shù)據(jù)結(jié)構(gòu)而對API所做的修改。表2示出可以在執(zhí)行shred—create—attr原語時扭J亍的乂于shred—create函數(shù)的偽代^馬的》務(wù)改。該函數(shù)可以是諸如軟件庫的用戶空間中的軟件程序的一部分。表2<table>tableseeoriginaldocumentpage22</column></row><table>編譯器可以在離線分析用戶程序440期間靜態(tài)地生成ATTR表中通過4妻口442傳遞的每個提示。如上表1所示,這些提示可以包括不平4紆(Imbalance)/不對稱(Asymmetry)、局部性(Locality)和合并(Fusion)提示。這些類型的提示所提供的信息可供調(diào)度器450用來執(zhí)行遷移、共置和/或合并微程的動態(tài)優(yōu)化。通過編譯器生成提示進行到對提示生成的論述,結(jié)合圖4來參考圖5。圖5示出通過編譯器402執(zhí)行以便生成將經(jīng)由接口442傳遞到調(diào)度器450的調(diào)度提示的方法500的至少一個實施例??梢詫χT如程序的任何編譯單元扭^行方法500。圖5示出,方法在方框502開始,并進行到方框504。在方框504,編譯器執(zhí)行相關(guān)性分析,以便確定可以獨立執(zhí)行程序中的微程的哪些部分,從而增加程序的并行性。編譯器402可以靜態(tài)地(即,可以在運行時執(zhí)行用戶程序之前離線執(zhí)行)扭i行該"計算分解"504。在該分解過程中,編譯器402可以識別一個或多個MUE,這個或這些MUE是用于獨立執(zhí)行調(diào)度的工作的基本單元。例如,對于簡并情形,如果整個程序是串行程序,那么MUE就是整個程序;因此工作負荷不平〗軒。通過將用戶應(yīng)用程序的微程分解成多個較小的獨立工作單元(MUE),編譯器就可以使調(diào)度器能夠解決包括多個微程的應(yīng)用程序中的工作負荷不平衡。如果編譯器主動(aggressively)將微程分解504成多個MUE,那么調(diào)度器就具有更大的自由度來自適應(yīng)地執(zhí)行運行時工作負荷平衡并增加并行性。還應(yīng)滿足數(shù)據(jù)相關(guān)性約束。例如,如果在循環(huán)迭代中獨立處理工作單元,那么通過在循環(huán)上利用標準數(shù)據(jù)相關(guān)性分析,編譯器可以將循環(huán)迭代識別為最小線程執(zhí)行單元。一般來說,如果編譯器402執(zhí)行的相關(guān)性分析表明,在循環(huán)的多次迭代中不存在任何循環(huán)攜帶的相關(guān)性,那么可以將每個循環(huán)迭代視為是MUE。因此,編譯器402可以才艮據(jù)數(shù)據(jù)相關(guān)性約束來在方框504執(zhí)行計算分解,以便盡可能多地主動識別用戶程序"0中的MUE。編譯器402在方框504中識別的MUE越多,調(diào)度器450就有越大的自由度來自適應(yīng)地執(zhí)行調(diào)度以提高性能。本質(zhì)上,編譯器在方框504識別的MUE是可以基于運行時了解獨立映射到系統(tǒng)的物理循序器并在其上執(zhí)行的虛擬微程。對于它所識別的每個MUE,編譯器做如下動作它將微程創(chuàng)建原語或指令插入到經(jīng)編譯的代碼中;以及它生成每個MUE的屬性結(jié)構(gòu)(例如,參見上表1A)。關(guān)于微程創(chuàng)建原語或指令的插入,參照上表2。編譯器可以為編譯器在程序中遇到的每個傳統(tǒng)微程創(chuàng)建指令(表2.0)插入將屬性結(jié)構(gòu)作為參數(shù)傳遞的經(jīng)過修改的微程創(chuàng)建指令(表2.1)。因此,原始編程的每個微程現(xiàn)在與屬性表關(guān)聯(lián)。但是,通過相關(guān)性分析、分解和/或概況分析,編譯器能夠?qū)⒃嘉⒊谭纸獬啥鄠€較小的獨立工作單元(MUE)。對于所識別的這些MUE中的每個MUE,編譯器插入附加的經(jīng)過修改的微程創(chuàng)建指令(表2.1),并為每個MUE生成關(guān)聯(lián)的屬性結(jié)構(gòu)??梢酝ㄟ^編譯器置入到MUE的屬性結(jié)構(gòu)中的提示之一是不平衡提示。圖5示出,在方框506,編譯器402計算不平衡提示。不平衡提示可以是表示與MUE關(guān)聯(lián)的計算程度的整數(shù)值。該值向調(diào)度器450指示多少"工作,,涉及MUE,以使得調(diào)度器450可以平衡工作負荷。從方框506,處理進行到方框508。如同一些其它已知系統(tǒng)所做的那樣,允許編譯器將MUE靜態(tài)地集合成線程,可以導(dǎo)致運行時的負荷不平衡。例如,編譯器402可能不知道特定運行時平臺的某些高速緩存組織特征,并且因此不如調(diào)度器450那樣能夠基于關(guān)于可用系統(tǒng)硬件資源的運行時信息自適應(yīng)地將MUE從過負荷循序器遷移到另一個可用循序器。并非使編譯器402將MUE集合成線程,4i定調(diào)度器450完全了解運行時環(huán)境,如果從性能優(yōu)化的觀點看有意義,那么系統(tǒng)400的至少一個實施例允許調(diào)度器450聚集MUE用于執(zhí)行。反之,調(diào)度器450可以將獨立的MUE遷移到獨立的循序器上。下面在以下章節(jié)中闡述關(guān)于調(diào)度器如何利用編譯器生成的提示信息來在運行時調(diào)度期間執(zhí)行這些優(yōu)化的進一步i侖述。并非在循序器之間遷移MUE以便平衡工作負荷,或者除此之外,調(diào)度器450的至少一個實施例可以將共享數(shù)據(jù)的MUE共置在相同或相鄰的循序器上。例如,可以在拓樸上彼此相鄰的循序器上和/或在共享高速緩存的循序器上調(diào)度共享數(shù)據(jù)的微程。本文將這種類型的優(yōu)化稱為共置,它是遷移的一種,但它考慮MUE之間的關(guān)系,而不僅僅考慮工作負荷平衡。圖5示出,在編譯器在方框504識別完MUE之后,可以在方框508生成圖來表示編譯單元(例如,它可以是樣i程化程序)。對于編譯器402的至少一個實施例,編譯器402生成508圖以便生成各種提示,這些提示將經(jīng)由接口442傳遞給調(diào)度器450。圖5示出,編譯器402可以在方框508生成共置提示,調(diào)度器450可以利用該共置提示來執(zhí)行共置。經(jīng)由接口442從編譯器402傳遞給調(diào)度器450的局部性/共置提示讓調(diào)度器450知道一個MUE與其它MUE共享數(shù)據(jù)的嚴重程度。這些局部性提示可以按照以下方式生成。本文將在方框508生成的圖稱為是"局部性圖",其中圖中的每個節(jié)點是經(jīng)由計算分解確定的MUE。然后,該圖可以進行某些優(yōu)化,如圖歸約。與局部性圖的邊緣關(guān)聯(lián)的權(quán)表示該邊緣的兩個連接節(jié)點(MUE)之間的局部性量值。對于至少一個實施例,用于生成508局部性圖的邏輯的偽代碼如表3所述。編譯器402可以在方框508執(zhí)行表3中的邏輯。一般來說,表3示出,局部性圖的邊緣可以反映編譯器對MUE中的空間局部性、時間局部性、近鄰(才莫版)局部性和歸約局部性的計算。編譯器可以在一個或多個數(shù)椐結(jié)構(gòu)中維持這些值以及可以供編譯器用來在接口442上生成提示的其它中間值。這些數(shù)據(jù)結(jié)構(gòu)的至少一個實施例如表4所示。表3示出,局部性圖的生成可以考慮表4的結(jié)構(gòu)(基于編譯器的程序分析生成)中維持的一個或多個值以及估算的高速緩存行大小。表3build—locaUty_grapli(a—compilation—unit)「——build—a—加de—for—each一MUE();foreachIR(Namely-compiler'sintermediaterepresentation)beinganalyzed{if(reductionfound){addlocalityweighttotheedgesconnectingtheMUE,sinvolvedinthereductionoperation}elseif(stencilfound){addlocalityweightbetweenthenear-neighborMUE,s,basedon傷estencilpattern}else{、有當(dāng)前的流元素對于內(nèi)核.是可見的*/if(streamstodifferentkernelsare打ofow/b/*mfl6/e){scalethestreamstomakeitconformable}addwightfort咖porallocalitybetweenMUE,saccessingthesamedataaddweightforspatiallocalitybetweenMUE,saccessingthesamecache〗ine表4Locality一t{IntTemporal;MSpatial;Fusion一t{IntIntIntImbalance一t{Intdegree)〃時間局部性程度〃空間局部性程度Conforaiability;〃是否一致?Aggregation;//是否還有其它MUE要與它合并?Impendence;〃是否與另一個MUE相關(guān)?〃計算程度如表3所示的偽代碼示出,對于至少一個實施例,可以在方框508執(zhí)行局部性圖的歸約。歸約操作指示,應(yīng)當(dāng)在MUE之間傳送數(shù)據(jù)以便實現(xiàn)MUE之間的并行歸約。因此,表3指示,如果執(zhí)行歸約,那么對在歸約中涉及的MUE的邊緣增加局部性權(quán)。表3還指示,局部性圖可以考慮模版。模版是近鄰相關(guān)性,如a[i]=函數(shù)(b[i-l],b[i],b[i+l])。對于至少一個實施例,為才莫版操作增加的局部性權(quán)大于為歸約而增加的局部性權(quán)。表3示出,還可以在方框508對局部性圖的邊緣增加權(quán)以反映MUE中的空間和時間局部性。即,在編譯器識別完MUE之后,它接著還可以識別MUE接觸的數(shù)據(jù)的類型。通過靜態(tài)分析或概況分析,編譯器402可以識別MUE中的局部性。在方框508,編譯器402可以在內(nèi)部在如表4所示的數(shù)據(jù)結(jié)構(gòu)中記錄該局部性,然后利用這些值來為局部性圖的邊緣生成權(quán)值。局部性圖的邊緣上的權(quán)可以經(jīng)修改以反映空間局部性,由此考慮不同MUE可以訪問相同高速緩存行的可能性。類似地,兩個MUE之間的邊緣可以經(jīng)4務(wù)改以反映這兩個MUE可能訪問相同數(shù)據(jù)(時間局部性)。對于編譯器402的至少一個實施例,假定,在調(diào)度期間考慮時,時間局部性可以提供大于空間局部性的性能益處,這是因為時間局部性解決了MUE之間完全相同的數(shù)據(jù)的使用。因此,編譯器402可以在生成局部性圖時為時間局部性分配高于空間局部性的權(quán)值。但是,本領(lǐng)域的技術(shù)人員將認識到,在調(diào)度期間考慮時,如果運行時高速緩存行大小大至足以保存兩個MUE的相鄰數(shù)據(jù),那么空間局部性可以產(chǎn)生與時間局部性相同的性能益處。接著,一般來i兌,編譯器402的至少一個實施例在生成局部性圖期間利用以下通用邊緣加權(quán)方案時間局部性的權(quán)>空間局部性的權(quán)>模版的權(quán)>歸約的權(quán)。圖5示出,處理^v方框508進行到方框510?;诰植啃詧D中的信息,編譯器可以在方框510生成共置提示。共置提示可以是表示一個MUE(例如,與包括該提示的ATTR表的特定實例關(guān)聯(lián)的MUE)與其它MUE共享的量的整數(shù)值。利用局部性圖,編譯器402可以在方框510根據(jù)如表5所示的偽代碼生成共置提示表5-共置提示的生成co1ocate一for—locality(a—compilationuni仁threshold)「——,—tniild—locality_graf)h(a—compilation—unit);while(thereexistsanedgewhoseweight>tbreshold){嚴如杲圖中有多條邊具有相同的權(quán),則任意選擇其中一條邊*/edge-find—edge—with—heaviest一we妙t();/*為調(diào)度器產(chǎn)生對應(yīng)于這條邊的兩個節(jié)點的共置編譯器提示*/cdocateJiint(edge);/*在局部性圖中,將對應(yīng)于這條邊的兩個節(jié)點并成一個,并接合離開每個節(jié)點的剩余邊緣*/coalesce(edge);對于如表5所示的colocate—hint()函數(shù),提示可以由同為相同值的兩個節(jié)點的局部性值生成。(下表7闡述了可供調(diào)度器450用來利用共置提示指導(dǎo)共置決策的方法的至少一個實施例的偽代碼。)colocate—hint函數(shù)的闞參數(shù)取決于高速緩存大小、高速緩存行大小和處理器間通信成本。例如,如果機器的通信成本越大,那么閾值將越大而促使越多的共置。從方框510,處理進行到方框512。編譯器402可以在方框512生成另一種類型的提示,該提示與"熱點,,有關(guān)。通過概況分析,編譯器可以獲得關(guān)于諸如高速緩存不命中的長等待時間事件的信息。編譯器還可以獲得關(guān)于控制流程圖的頻繁執(zhí)行的邊緣的概況分析信息。這些類型的概況分析信息中的每種信息都可以指示程序的"熱點",即頻繁執(zhí)行或長等待時間的程序部分。這些熱點的快速執(zhí)行可以導(dǎo)致改善的性能,尤其是在多微程化程序的關(guān)鍵線程上出現(xiàn)熱點時。如下文進一步詳細描述,調(diào)度器"0在執(zhí)行工作負荷再平衡時也可以考慮關(guān)于熱點的提示。從方框512,處理可以進行到方框514。除了由編譯器生成的局部性和熱點提示之外,編譯器402還可在方框514生成合并提示,調(diào)度器450可以利用合并提示來執(zhí)行合并優(yōu)化。在合并優(yōu)化期間,調(diào)度器450可以對MUE執(zhí)行比基于局部性的共置更主動的共置優(yōu)化。對于合并,不僅遷移微程以使它們共置,而且還在相關(guān)微程中改變計算次序。如果編譯器可以識別由同步機制分離的兩個MUE,那么這兩個MUE可以潛在地"合并,,,并且編譯器402可以將一個或多個提示傳遞給調(diào)度器450用于運行時合并。合并應(yīng)當(dāng)滿足相關(guān)性約束。例如,給定兩個雙深循環(huán)嵌套,調(diào)度器450可以在滿足以下條件時合并循環(huán)l)循環(huán)是一致的;以及2)不存在相關(guān)性向量"<,>"。因此,為了支持合并優(yōu)化,編譯器402可以執(zhí)行合并可行性分析,并基于該分析,在它的內(nèi)部數(shù)據(jù)結(jié)構(gòu)中保留一致性值和相關(guān)性值(參見上表4)。一致性需要不同MUE的循環(huán)邊界相同。編譯器指示,如果第一循環(huán)和第二循環(huán)的循環(huán)邊界相同,那么表示第一循環(huán)的MUE與表示笫二循環(huán)的另一個MUE—致。該信息可以記錄在如表4所示的內(nèi)部一致性字段中。關(guān)于相關(guān)性,編譯器在方框514執(zhí)行相關(guān)性分析,以免為違反相關(guān)性約束的MUE生成合并提示。如果不同MUE的兩次數(shù)據(jù)訪問是指相同位置,并且其中至少一次訪問是寫操作,那么我們就說這兩次訪問相關(guān)。對于至少一個實施例,編譯器可以確定相關(guān)性方向向量(例如,參見表4中的相關(guān)性字段)。每個向量元素對應(yīng)于一個閉合循環(huán)。元素值可以是"<,,、"="、">"或未知。值"=,,表示MUE只取決于它本身。值"<"指示MUE應(yīng)當(dāng)按照它的原始次序4丸行,而值">,,指示MUE應(yīng)當(dāng)按照相反的次序執(zhí)行。例如,考慮簡單的一階閉合循環(huán)。如果i〈j,那么從訪問A[i]到訪問A(j]的方向向量元素可以是"<"。如果i〉j,那么方向向量元素將是">"。如果i二j,那么方向向量元素將是。如果MUE的相關(guān)性向量是"-",那么可以在不違反相關(guān)性約束的情況下合并MUE。對于至少一個實施例,編譯器402可以在方框514為一對MUE生成合并才是示,前提條件是這兩個MUE—致,并且其中任何一個MUE都不具有相關(guān)性向量(<,>)。編譯器可以在方框514根據(jù)如表6所述的偽代碼所示的方法生成合并提示表6-合并提示的生成ftise(a—compilation—unit){——foreachpairofMUE,s{if(noreductionoperator&&nostenciloperator){/*只有當(dāng)前的流元素對于內(nèi)核是可見的*/if(streamstobothMUEareconformable){if(noscalarcodeorpointercodebetweenkernelstoinducedependences){if(nodependencevectorwith(<,>)){addflisehintfor也ispairofMUE,sforschedulerj_從方框514,處理在方框516結(jié)束。論述現(xiàn)在轉(zhuǎn)到調(diào)度器對通過編譯器根據(jù)圖5中的方法生成的提示的使用。調(diào)度器對提示的使用結(jié)合圖4來參考圖6,圖6示出,調(diào)度器邏輯450可以包括用于執(zhí)行將在下文進一步詳細描述的每種運行時調(diào)度優(yōu)化的邏輯。圖6示出,調(diào)度器450可以包括遷移邏輯602、共置邏輯604和合并邏輯606。圖6示出,調(diào)度器邏輯450可以是用戶軟件600的一部分。如圖6所示的軟件600的實施例是軟件庫,但是不應(yīng)將該圖示視為是限制性的。如圖6所示的特征可以駐留在用戶空間中的任何位置。除了調(diào)度器450之外,軟件庫600還可包括微程創(chuàng)建專t件640,該微程創(chuàng)建軟件640響應(yīng)諸如"shred—create—attr"(如上文結(jié)合表2所論述)的"create(創(chuàng)建)"API類用戶指令來提供微程的創(chuàng)建。對于至少一個實施例,微程創(chuàng)建軟件通過將微程描述符置于工作隊列系統(tǒng)650中來提供微程的創(chuàng)建。對于至少一個實施例,工作隊列系統(tǒng)650可以包括一個或多個隊列以便維護排隊供調(diào)度和執(zhí)行并因此處于"未決(periding)"的用戶定義的微程的描述符??梢岳靡粋€或多個隊列來保存等待共享的資源變?yōu)榭捎?例如同步對象或循序器)的微程的描述符。工作隊列系統(tǒng)650以及調(diào)度器邏輯450可以作為軟件來實現(xiàn)。然而,在備選實施例中,隊列系統(tǒng)650和調(diào)度器邏輯450也可以在硬件中實現(xiàn),或者可以作為固件(例如只讀存儲器中的微代碼)來實現(xiàn)。圖6示出,可以將微程調(diào)度器450、微程創(chuàng)建軟件640和工作隊列系統(tǒng)650中的任何一個或全部作為運行時庫600的一部分來實現(xiàn)。盡管本文示為是軟件邏輯,但是本領(lǐng)域的技術(shù)人員將認識到,庫600的功能性可以作為固件、固件和軟件的組合來實現(xiàn),并且甚至可以作為專用硬件電路來實現(xiàn)。運行時庫600可以創(chuàng)建傳統(tǒng)業(yè)界標準API(例如,符合便攜式操作系統(tǒng)接口("POSIX")的API)與至少支持一組規(guī)范微程指令的多循序器系統(tǒng)的硬件之間的中間抽象層。運行時庫600可以作為中間抽象級,以使程序員可以將傳統(tǒng)的線程API(例如,PTHREADSAPI件來使用。調(diào)度器450可以在運行時調(diào)度微程期間執(zhí)行各種優(yōu)化,以便嘗試提高微程化程序的性能。本文描述了三種優(yōu)化,即遷移、共置(co-location)和合并(fiise),調(diào)度器450可以基于上文描述的編譯器生成的提示來執(zhí)行這三種優(yōu)化。但是,本領(lǐng)域的技術(shù)人員將認識到,不應(yīng)將以下論述視為是限制性的。在不偏離隨附權(quán)利要求的范圍的情況下,可以基于由編譯器402生成并經(jīng)由接口442傳遞給調(diào)度器450的其它提示來執(zhí)行各種其它優(yōu)化。遷移。調(diào)度器450/人編譯器的MUE確定獲益來執(zhí)行該優(yōu)化,該優(yōu)化基本上是工作負荷平纟軒優(yōu)化。遷移優(yōu)化可以由調(diào)度器450的遷移塊602來執(zhí)行。MUE分解中的粒度越細,將程序的各個部分遷移到獨立循序器的靈活性就越大(增加并行性)。對于該優(yōu)化,調(diào)度器450可以利用不平4軒提示,該提示是指示與微程關(guān)聯(lián)的計算程度的整數(shù)值。對于至少一個實施例,這是通過將"計算程度"提示與MUE關(guān)聯(lián)來實現(xiàn)的。該提示使得調(diào)度器知道關(guān)于"多少工作"涉及MUE執(zhí)行的值。利用該信息,調(diào)度器450可以在運行時在系統(tǒng)的可用循序器中才丸行有效的負荷再平^f纖。即,調(diào)度器450可以將相同的原始線程或微程的MUE遷移到不同的循序器以便在執(zhí)行期間更有效地增加線程級并行性,和/或可以將MUE聚集到單個循序器上以實現(xiàn)平衡負荷的目的。調(diào)度器可以利用熱點提示來告知它自己對熱點的運行時監(jiān)視。例如,如果調(diào)度器從編譯器接收熱點提示,那么這指示編譯器已經(jīng)確定特定MUE可以比其它MUE更頻繁地執(zhí)行,或者指示編譯器已經(jīng)通過概況分析確定該MUE可能包括諸如高速緩存不命中的長等待時間指令。然后,調(diào)度器450可以將該熱點添加到它作為潛在的熱點監(jiān)視的那些程序地址的列表中。周期性地(例如每500ms),調(diào)度器450可以在運行時期間對程序計數(shù)器(PC)釆樣。如果所監(jiān)視的地址之一在此采樣期間反復(fù)出現(xiàn)在PC中,那么調(diào)度器450可以將該地址作為熱點處理,并且可以相應(yīng)地做出調(diào)度決策。對于至少一個實施例,調(diào)度器450可以為熱點執(zhí)行分配一組更強大、更快速的循序器,或者可以在較高調(diào)度優(yōu)先級的情況下調(diào)度熱點用于執(zhí)行。共置。調(diào)度器450可以利用編譯器402在方框510(圖5)生成的共置提示來執(zhí)行該優(yōu)化,對于該優(yōu)化,調(diào)度器450可以將數(shù)據(jù)共享型MUE調(diào)度到相同(或相鄰)的循序器上。共置優(yōu)化可以由調(diào)度器450的共置塊604來#^亍。為了利用MUE的局部性提示,調(diào)度器450的共置塊604—般可以執(zhí)行以下動作如果特定MUE的局部性提示大于某個閾值,那么調(diào)度器訪問局部性圖,以便查看哪些其它MUE與當(dāng)前的MUE共享數(shù)據(jù)。對于至少一個實施例,調(diào)度器450可以訪問由編譯器402生成的局部性圖(例如,參見圖5中的方框508)。例如,可以采用例如與存儲符號表的方式相同的方式將局部性圖作為編譯器的輸出的一部分進行存儲。調(diào)度器450的共置邏輯604可以在接收MUE的共置提示時確定共置提示值是否超過預(yù)定閾值。如果是,則調(diào)度器450可以在局部性圖中查找當(dāng)前的MUE。然后,調(diào)度器450可以遍歷局部性圖以確定哪些其它MUE可能與當(dāng)前的MUE共享數(shù)據(jù),并且可以相應(yīng)地做出聚集決策。表7闡述了利用由編譯器402通過接口442提供的信息來指導(dǎo)共置決策的調(diào)度器例行程序的至少一個實施例的示范偽代碼。即,一旦調(diào)度器450經(jīng)由共置提示和局部性圖遍歷確定多個微程共享一個局部性值,則如表7所示的方法便示出調(diào)度器如何利用該信息來指導(dǎo)聚集決策。圖7以流程圖的形式示出表7的方法700。對于至少一個實施例,方法700可以由調(diào)度器450來執(zhí)行。更具體地說,對于至少一個實施例,圖7中以流程圖的形式經(jīng)由表7中的偽代碼示出的方法700可以由共置邏輯604來執(zhí)行。表7-局部性調(diào)度算法Poravailablesequencerpforeachavailablesiueci,'/p.locality是通過調(diào)度器維護用來表示循序器局部性的變量Ifslired.attr,locafity=p-iocaHty]fp,k)礎(chǔ)tyaotsetScliedukshredonprocessorp,locality=shred,attr,locality〃如果不匹配,則使用默認調(diào)度異法,升將p.locality設(shè)為是shred.attr.locality對于表7和圖7中呈示的簡單算法,目標是將線程與最可能具有它們可以使用的數(shù)椐的循序器相匹配。對于至少一個實施例,經(jīng)由接口442接收的局部性提示是整數(shù),并且該值表示與其它微程共享。例如,如果兩個微程具有相同的局部性值,那么最有可能在它們之間具有正局部性。轉(zhuǎn)到圖8,進一步示出這個概念。本文同樣參照圖7來論述圖8。圖8示出,與MUE關(guān)聯(lián)的局部性變量802是整數(shù)。概念上,編譯器(例如,參見圖4中的402)可以將編譯單元800(如稱t程化程序)的MUE分成共享局部性的組804a、804b、804c和804d。圖8示出,圖8中的示范編譯單元800可以分成四組MUE,其中每組的微程共享相同的局部性值。因此,如圖8所示的示范MUE(虛擬微程)A、B和Z都具有相同的局部性整數(shù)值-O。組804b中的示范MUE/微程C具有局部性值1。組804d中的示范MUE/微程D和E具有局部性值2。最后,圖8示出,組804c中的示范MUE/微程F具有局部性值3。圖8示出,能夠運行程序800的系統(tǒng)可以包括多個物理循序器850(0)-850(n)。組804a中的所有微程(A,B,Z)具有相同的局部性整數(shù)(0),并且因此,通過將微程(A,B,Z)調(diào)度到相同或相鄰的循序器上、或在共享單個高速纟爰存的循序器上可以獲得性能益處。因此,對于如表7所示的方法700,調(diào)度器450可以調(diào)度微程A在特定循序器850(1)上執(zhí)行,然后可以調(diào)度具有相同局部性值的額外微程(B,Z)在相同循序器850(1)上執(zhí)行。應(yīng)注意,局部性整數(shù)只是指示MUE間的可能的局部性關(guān)系,并且指示任何特定循序器或^5更件資源。關(guān)于將使用哪個特定資源來執(zhí)行微程的決定最好由調(diào)度器在運行時期間做出。關(guān)于該過程的進一步細節(jié)可以從圖7中獲得。為了說明的目的,結(jié)合如圖8所示的實例來論述圖7中的處理。對于該論述,假定,在執(zhí)行方法700的當(dāng)前迭代之前,工作隊列系統(tǒng)650包括如圖8所示的FIFO次序的微程描述符A、C、D、B、Z、F、E。對于至少一個實施例,還4艮定,在加電時,便已將每個循序器850的局部性值設(shè)為是空值。但是,在執(zhí)行方法700的任何特定時間,可能之前就已經(jīng)指派其中一個或多個循序器用于執(zhí)行具有特定局部性整數(shù)值的微程。因此,在方法700的特定迭代之前,可能已經(jīng)將循序器的局部性值(其指示已經(jīng)被調(diào)度在該循序器上執(zhí)行的微程的局部性)指派z哈特定循序器。圖7示出,方法700的處理在方框702開始,并進行到方框704。在方框704,確定任何物理循序器850是否可用于工作。如果可以,則在方框708選擇當(dāng)前的物理循序器850。出于我們的實例的目的,假定,在方框706的第一遍選擇循序器850(1)。然后,處理進行到方框710,在方框710,從工作隊列系統(tǒng)650中選擇"當(dāng)前"微程。出于我們的實例的目的,假定,在方框710的第一遍選擇微程A。處理進行到方框712。出于我們的實例的目的,假定,自從上一次初始化(在加電、重啟、重設(shè)時等)以來從未為循序器850(1)指派局部性值。因此,方框712評判為^^并且處理落到方框714。對于我們的實例,方框714處的判斷評判為"真"。因此,在方框716,將循序器850(1)的局部性值設(shè)置為微程A的局部性值(整數(shù)值0)。然后,在方框718,調(diào)度線程A在循序器850(l)上執(zhí)行,并從隊列系統(tǒng)650中移除微程A的微程描述符。然后,處理進行到方框720。對于我們的實例,隊列系統(tǒng)650中還保留了幾個微程(C,D,B,Z,F和E)。因此,方框720處的判斷評判為"真",并且處理進行到方框710進行第二遍。在方框710的第二遍,從工作隊列650中選擇下一個微程,即微程C。圖8示出,微程C的局部性值是整數(shù)值"1"。但是,在方框716的第一遍,當(dāng)前循序器(循序器850(1))的局部性值是設(shè)為整數(shù)值"0"的。因此,方框712和714的第二遍處的判斷評判為"假"。因此,不將微程C調(diào)度到當(dāng)前循序器(循序器850(1))上,并且微程C因而仍然保留在工作隊列系統(tǒng)650中。然后,處理進行到方框720。因為隊列系統(tǒng)650中還保留了幾個微程(G,D,B,Z,F和E),所以方框720處的判斷評判為"真,,,并且處理進行到方框710進行第三遍。在方框710的第三遍,從工作隊列650中選擇下一個微程,即微程D。微程D的局部性值是整數(shù)值"2",它的處理如上文針對微程C所描述的那樣進行。因為微程D和當(dāng)前循序器(850(1))的局部性值不匹配,所以不將微程D調(diào)度到該循序器上,并且孩£程D的描述符仍然保留在工作隊列系統(tǒng)650中。然后,處理進行到方框720。因為隊列系統(tǒng)650中還保留了幾個微程(GrB,B,Z,F和E),所以方框720處的判斷評判為"真",并且處理進行到方框710進行笫四遍。在方框710的第四遍,從工作隊列650中選擇下一個微程,即微程B。然后,處理進行到方框712。在方框712,將耀:程B的局部性與當(dāng)前循序器(循序器850(1))的局部性進行比較。圖8示出,這兩者的局部性都是整數(shù)值"0"。因此,方框712處的比較評判為"真",并且處理進行到方框718。調(diào)度微程B在循序器850(1)上執(zhí)行,并從隊列系統(tǒng)650中移除微程B的描述符。然后,處理進行到方框720。因為隊列系統(tǒng)650中還保留了幾個微程(G^,Z,F和E),所以方框720處的判斷評判為"真",并且處理進行到方框710進行第五遍。在方框710的笫五遍,從工作隊列650中選擇下一個微程,即微程Z。圖8示出,擲:程Z的局部性值也是整數(shù)值"0"。因此,采用如上文針對微程B論述的方式調(diào)度微程Z在循序器850(1)上執(zhí)行。然后,處理進行到方框720。圖8示出,剩下沒有考慮的凝:程、微程F和微程E的局部性分別是整數(shù)值"3"和"2"。在方法700的第6和第7遍,這些微程的局部性與當(dāng)前循序器(循序器850(1))的局部性(為整數(shù)值"0")不匹配。因此,既不從工作隊列650中移除微程,也不調(diào)度微程用于執(zhí)行。因此,方法700的第7遍的處理進行到方框720。因為已經(jīng)為當(dāng)前循序器考慮了工作隊列650中的所有未決孩i程,所以方框720處的評判評判為"假",并且處理進行到方框722。在方框722,確定任何額外循序器是否可用于微程的調(diào)度。對于我們的實例,假定循序器850(0)和850(n)可用。因此,處理進行到方框708,并選擇下一個循序器作為"當(dāng)前"循序器。對于我們的實例,假定在方框708選擇循序器850(0)。然后,處理進行到方框710。在我們的實例中,在針對循序器850(0)的方框710的第一遍,工作隊列系統(tǒng)650包括微程C、D、B、Z、F和E的描述符。對于我們的實例,々i定,在針對循序器850(0)的方框710的第一遍,選擇微程C。然后,處理進行到方框712。同樣假定,循序器850(0)具有空的局部性值。因此,方框712處的判斷評判為"假",并且處理落到方框714。對于我們的實例,對于循序器850(0),方框714處的判斷評判為"真,,,并且處理進行到方框716。在方框716,將循序器850(0)的局部性值設(shè)置為微程C的局部性值(整數(shù)值"1")。然后,處理進行到方框718。在針對循序器850(0)的方框718的這第一遍,調(diào)度微程C在循序器850(0)上執(zhí)行,并從工作隊列系統(tǒng)650中移除微程C的微程描述符。然后,處理進行到方框720。在針對循序器850(0)的方法700的第二、第三和第四遍,執(zhí)行上文關(guān)于循序器850(1)結(jié)合微程C、D、F和E描述的處理。即,不將微程D、F或E中的任何一個微程調(diào)度到循序器850(0)上,因為它們中沒有一個微程具有與指派給循序器850(0)的局部性整數(shù)相同的局部性整數(shù)。即,在方框716指派給循序器850(0)的局部性整數(shù)是整數(shù)值"1",而微程D、F和E的局部性值分別是"2"、"3"和"2"。在對當(dāng)前循序器850(0)考慮完所有微程之后,處理進行到方框722,在方框722,確定還有一個循序器(循序器850(n))可用于工作。因此,對于我們的實例,在方框708,選擇循序器850(n)作為當(dāng)前循序器。然后,處理進行到方框710。對于我們的實例,在針對循序器850(n)的方法700的第一遍,以下微程在工作隊列系統(tǒng)中保持未決微程D、F和E。如上所述,方法700將在工作隊列650中未決的所有剩余微程中循環(huán),以便確定是否應(yīng)當(dāng)將它們調(diào)度到循序器850(n)上。對于我們的實例(同樣假定,循序器850(n)的局部性值最初是空值),在針對循序器850(n)的方框718的第一遍,將微程D調(diào)度到循序器850(n)上,并從工作隊列系統(tǒng)650中移除微程D。在針對循序器850(n)的方法700的第二遍,將不調(diào)度微程F,并且微程F仍將保留在工作隊列系統(tǒng)650中。這是因為在針對循序器850(n)的方框716的第一遍,將循序器850(n)的局部性值指派為微程D的局部性值,即整數(shù)值"2",而微程F的局部性值是整數(shù)值"3"。對于我們的實例,只有三個循序器(850(0),850(1)和850(n))可用于工作。因此,當(dāng)方框722處的判斷在方框722處評判為時,在工作隊列系統(tǒng)650中仍存在未^皮調(diào)度的微程,即微程F。圖7示出,在方框724,根據(jù)調(diào)度器450的默認方法(例如,F(xiàn)IFO調(diào)度方法),而不是根據(jù)如圖7所示的基于局部性的方法700,來調(diào)度該剩余微程。本領(lǐng)域的技術(shù)人員將注意,如表7和圖7所示的方法只是調(diào)度器450如何利用共置編譯器提示的一個實施。其它實施可以提供其它類型的信息,調(diào)度器450可以利用這些信息來探究局部性程度并更主動地調(diào)整共置決策。例如,對于一個備選實施例,共置提示不是由編譯器生成的。而是,編譯器確定諸如空間局部性和時間局部性(見表4)的中間值以及模版和歸約信息并將這些中間值和信息置于接口442上,以使得調(diào)度器450可以利用該信息來自身做出共置決定。當(dāng)然,如同其它提示,調(diào)度器可以隨意忽略局部性提示。未能利用局部性提示來共置具有局部性的MUE雖然無法實現(xiàn)某些性能益處,但這也不會影響程序正確性。合并。通過接口傳遞給調(diào)度器450的合并提示指示編譯器是否已經(jīng)確定當(dāng)前MUE可以與另一個MUE合并。如上所述,編譯器確定具有非空合并提示值的MUE可以與另一個MUE合并,這是因為這兩個相鄰循環(huán)嵌套不具有任何相關(guān)性向量"<,>",并且這2個循環(huán)是一致的。當(dāng)然,如同其它提示,調(diào)度器450可以隨意地忽略合并提示,而不會影響程序正確性。編譯器402為MUE生成的合并提示指示,合并該MUE是安全的;調(diào)度器450可以在運行時期間從性能觀點隨意地決定該合并是否合乎需要。用戶級微程。支持微程(包括纖程、pthread等)的任何用戶級運行時軟件可以利用本文描述的技術(shù)。此外,本文論述的調(diào)度機制和技術(shù)可以在任何多循序器系統(tǒng)上實現(xiàn),包括單核SMT系統(tǒng)(例如,參見圖3中的310)和多核系統(tǒng)(例如,參見圖3中的350)。此類多循序器系統(tǒng)可以包括OS可見和OS隔離的循序器。對于至少一個實施例,來自相同應(yīng)用程序的用戶級微程可以同時在OS可見的循序器和/或OS隔離的循序器的全部或任何子集上運行。不是僅僅維持應(yīng)用程序線程至OS線程的一對一映射并依賴于OS來管理循序器與線程之間的映射,本文論述的運行時庫的實施例而是可以使單個應(yīng)用程序映像中的多個用戶級微程能夠在多循序器系統(tǒng)中同時運行。對于同時為多線程化和多微程化的單個應(yīng)用程序,本發(fā)明的實施例因此可以支持M:N的線程至微程映射,以使得N個用戶級微程和M個線程可以在系統(tǒng)中的任何或全部循序器上同時執(zhí)行,而不管是OS可見的還是OS隔離的。(M,N>1)。如本文公開的這種運行時庫提供與如下系統(tǒng)的對比,這些系統(tǒng)例如對于每個OS可見的線程最多只允許一個用戶控制的"纖程"執(zhí)行。此類系統(tǒng)的纖程與OS控制的線程關(guān)聯(lián),并且來自相同線程的兩個纖程無法同時執(zhí)行。對于此類對比的系統(tǒng),來自相同OS控制的線程的多個用戶級微程無法同時執(zhí)行。對于本文^^開的運行時庫的至少一個實施例,該庫(例如,參見圖6中的600)可以為每個OS可見的循序器啟動一個不同的OS線程來作為專用服務(wù)線程。該服務(wù)線程可以與一個或多個OS隔離的循序器關(guān)聯(lián)。這些OS可見的服務(wù)線程可以為它關(guān)聯(lián)的OS可見的循序器各自執(zhí)行調(diào)度器(例如,參見圖5中的450)的專用副本。該服務(wù)線程可以調(diào)度一個或多個微程在與OS可見的循序器關(guān)聯(lián)的OS隔離的循序器上執(zhí)行(例如,參見圖1中分別與OS可見的線程125和126關(guān)聯(lián)的微程130-132和134-136)。其中每個微程可以在OS隔離的循序器上運行調(diào)度器的副本。圖9示出能夠執(zhí)行公開的技術(shù)的計算系統(tǒng)900的至少一個示范實施例。計算系統(tǒng)900包括至少一個處理器核卯4和存儲系統(tǒng)940。存儲系統(tǒng)940可以包括較大且相對較慢的存儲裝置902以及一個或多個較小且相對較快的高速緩存(如指令高速緩存944和/或數(shù)據(jù)高速緩存942)。存儲裝置902可以存儲用于控制處理器904的操作的指令910和數(shù)據(jù)912。指令910可以包括運行時庫(例如,參見圖6中的600),該運行時庫包括用戶級線程的運行時調(diào)度器450。數(shù)據(jù)912可以包括工作隊列系統(tǒng)(例如,參見圖6中的650)。存儲系統(tǒng)940應(yīng)視為存儲器的規(guī)范化表示,它可以包括多種形式的存儲器,例如硬盤驅(qū)動器、CD-ROM、隨機存取存儲器(RAM)、動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機存取存儲器(SRAM)、閃速存儲器和相關(guān)的電路。存儲系統(tǒng)940可以存儲由處理器904可執(zhí)行的數(shù)據(jù)信號所表示的指令910和/或數(shù)據(jù)912。指令910和/或數(shù)據(jù)例如,數(shù)據(jù)912可以包括用于形成能夠存儲上文描述的微程描述符的隊列系統(tǒng)702的一個或多個隊列。或者,指令910可以包括生成用于存儲微程描述符的隊列系統(tǒng)702的指令。處理器904可以包括用于向執(zhí)行核930提供指令信息的前端920??梢栽诟咚倬彺?25中緩沖所提取的指令信息,以等待通過執(zhí)行核930執(zhí)行。前端920可以按程序次序?qū)⒅噶钚畔⑻峁┙o執(zhí)行核930。對于至少一個實施例,前端920包括用于確定要執(zhí)行的下一個指令的提取/解碼單元322。對于系統(tǒng)900的至少一個實施例,提取/解碼單元322可以包括單個下一個指令指針和提取邏輯320。但是,在每個處理器904支持多個線程上下文的實施例中,才是取/解碼單元322為每個支持的線程上下文實現(xiàn)不同的下一個指令指針和提取邏輯320。圖9中用點劃線表示多處理器環(huán)境中的附加下一個指令指針和提取邏輯320的可選特性??梢圆捎糜布?、硬件仿真軟件或其它軟件、固件或此類實現(xiàn)方法的組合來實現(xiàn)本文描述的方法的實施例??梢詫删幊滔到y(tǒng)實現(xiàn)本發(fā)明的實施例,該可編程系統(tǒng)包括至少一個處理器、數(shù)據(jù)存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲部件)、至少一個輸入裝置和至少一個輸出裝置。出于本申請的目的,處理系統(tǒng)包括具有諸如下列的處理器的任何系統(tǒng)數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器。可以將程序存儲在通用或?qū)S每删幊烫幚硐到y(tǒng)可讀的存儲介質(zhì)或裝置(如硬盤驅(qū)動器、軟盤驅(qū)動器、只讀存儲器(ROM)、CD-ROM裝置、閃速存儲器裝置、數(shù)字多功能光盤(DVD)或其它存儲裝置)上。處理系統(tǒng)中的處理器可訪問的指令在處理系統(tǒng)讀取存儲介質(zhì)或裝置來執(zhí)行本文描述的過程時對處理系統(tǒng)進行配置和操作。還可以考慮將本發(fā)明的實施例作為配置成與處理系統(tǒng)一起使用的機器可讀存儲介質(zhì)來實現(xiàn),其中如此配置的存儲介質(zhì)使處理系統(tǒng)以特定的預(yù)定方式工作來執(zhí)行本文描述的功能。示范系統(tǒng)900表示基于可從英特爾公司獲得的Pentium,PentiumPro、PentiumII、PentiumIII、Pentium4、Itanium禾口Itanium2微處理器以及MobileIntelPentiumIII處理器-M和MobileIntelPentium4處理器-M的處理系統(tǒng),但是也可以使用其它系統(tǒng)(包括具有其它微處理器的個人計算機(PC)、工程工作站、個人數(shù)字助理和其它手持裝置、機頂盒等)。對于一個實施例,示范系統(tǒng)可以執(zhí)行可從微軟公司獲得的WindowsTM版操作系統(tǒng),但是也可以使用例如其它操作系統(tǒng)和圖形用戶界面。雖然示出和描述了本發(fā)明的具體實施例,但是對于本領(lǐng)域的技術(shù)人員來說顯而易見的是,在不背離隨附權(quán)利要求的范圍的前提下,可以進行更改和修改。例如,上文描述的靜態(tài)/離線分析可以改為在諸如即時編譯器(JIT編譯器)的動態(tài)編譯器中實現(xiàn)。因此,本領(lǐng)域的技術(shù)人員將認識到,在不背離本發(fā)明的更廣方面的前提下,可以進行更改和修改。隨附權(quán)利要求將落在本發(fā)明的真正范圍內(nèi)的所有此類更改和^f務(wù)改涵蓋在其范圍內(nèi)。權(quán)利要求1.一種方法,包括從編譯器接收用戶級的調(diào)度提示信息;以及考慮所述調(diào)度提示信息來執(zhí)行用戶級線程的動態(tài)運行時調(diào)度,其中所述用戶級線程的所述調(diào)度是由用戶空間中的調(diào)度器執(zhí)行的。2.如權(quán)利要求l所述的方法,其特征在于程序員接口接收所述調(diào)度提示信息。3.如權(quán)利要求l所述的方法,其特征在于所述調(diào)度器用于在沒有操作系統(tǒng)調(diào)度邏輯的干預(yù)下調(diào)度所述用戶級線程用于執(zhí)行。4.如權(quán)利要求l所述的方法,其特征在于,所述調(diào)度提示信息還包括關(guān)于所述用戶級線程可以作為獨立的執(zhí)行單元來調(diào)度的指示。5.如權(quán)利要求1所述的方法,其特征在于,所述調(diào)度提示還包括關(guān)于可以在不違反相關(guān)性約束的情況下將所述用戶級線程與另一個用戶級線程合并的指示。6.如權(quán)利要求l所述的方法,其特征在于,所述調(diào)度提示信息還包括關(guān)于所述用戶級線程的局部性程度的指示。7.如權(quán)利要求l所述的方法,其特征在于,所述調(diào)度提示信息還包括計算程度指示符。8.如權(quán)利要求l所述的方法,其特征在于,所述調(diào)度提示信息還包括熱點指示。9.如權(quán)利要求2所述的方法,其特征在于所述接口還包括屬性表。10.如權(quán)利要求9所述的方法,其特征在于所述接收還包括接收多個用戶級線程的調(diào)度提示信息;并且11.如權(quán)利要求l所述的方法,其特征在于所述調(diào)度提示信息是在沒有用戶輸入的情況下由所述編譯器獨立生成的。12.如權(quán)利要求1所述的方法,其特征在于所述考慮所述調(diào)度提示信息還包括確定是否可以在利用所述信息來指導(dǎo)調(diào)度決策時獲得性能益處;并且如果不能,則在執(zhí)行所述調(diào)度時忽略所述調(diào)度提示信息。13.如權(quán)利要求6所述的方法,其特征在于,所述考慮所述調(diào)度提示信息還包括將具有與所述用戶級線程相同的局部性程度的另一個用戶級線程調(diào)度到相同的循序器上。14.如權(quán)利要求5所述的方法,其特征在于,所述考慮所述調(diào)度提示信息還包括調(diào)度所述用戶級線程和所述另一個用戶級線程在相同的循序器上執(zhí)行。15.如權(quán)利要求5所述的方法,其特征在于,所述考慮所述調(diào)度提示信息還包括調(diào)度所述用戶級線程和所述另一個用戶級線程在拓樸上彼此相鄰的循序器上執(zhí)行。16.如權(quán)利要求5所述的方法,其特征在于,所述考慮所述調(diào)度提示信息還包括調(diào)度所述用戶級線程和所述另一個用戶級線程在共享單個高速緩存的兩個不同的物理循序器上執(zhí)行。17.如權(quán)利要求4所述的方法,其特征在于,所述利用還包括利用所述調(diào)度提示信息將所述用戶級線程調(diào)度到物理循序器上以便增加原始程序的并行性。18.如權(quán)利要求8所述的方法,其特征在于,所述利用還包括利用所述調(diào)度提示信息將所述用戶級線程調(diào)度到物理循序器上以便減少所述用戶級線程的等待時間。19.一種系統(tǒng),包括存儲器;用于調(diào)度一個或多個用戶級線程的運行時調(diào)度器,所述調(diào)度器駐留在所述存儲器的用戶空間中;用于執(zhí)行所述一個或多個用戶級線程的一個或多個線程執(zhí)行單元;以及用于將所述用戶級線程中的至少一個用戶級線程的由編譯器生成的調(diào)度提示從編譯器傳遞給所述調(diào)度器的接口。20.如權(quán)利要求19所述的系統(tǒng),其特征在于,所述運行時調(diào)度器還用于利用所述調(diào)度提示以便選擇所述線程執(zhí)行單元之一來執(zhí)行所述至少一個用戶級線程。21.如權(quán)利要求19所述的系統(tǒng),其特征在于,所述接口還包括用于向所述調(diào)度器提供多個靜態(tài)生成的調(diào)度提示的所述編譯器的機制。22.如權(quán)利要求21所述的系統(tǒng),其特征在于,所述接口還包括由所述編譯器維護的屬性數(shù)據(jù)結(jié)構(gòu),其包括所述提示中的每個才是示的字段;以及用于向所述調(diào)度器提供所述數(shù)據(jù)結(jié)構(gòu)中的值的機制。23.如權(quán)利要求22所述的系統(tǒng),其特征在于,用于提供所述值的所述機制還包括包含作為參數(shù)的所述數(shù)據(jù)結(jié)構(gòu)的應(yīng)用程序編程接口原語。24.—種方法,包括對包括用戶級線程的程序執(zhí)行相關(guān)性分析;將所述程序分解成獨立的工作單元;以及在不利用用戶提供的語用信息的情況下,為所述獨立的工作單元中的至少一個工作單元靜態(tài)地生成一個或多個調(diào)度^是示;以及將所述調(diào)度提示提供給運行時調(diào)度器。25.如權(quán)利要求24所述的方法,還包括生成圖來表示所述獨立的工作單元之間的局部性。26.如權(quán)利要求24所述的方法,其特征在于,提供所述調(diào)度提示還包括提供指向保存所述調(diào)度提示的結(jié)構(gòu)的指針,其中所述指針作為參數(shù)提供以用于函數(shù)調(diào)用。27.如權(quán)利要求26所述的方法,其特征在于所述函數(shù)用于創(chuàng)建用戶級線程,并且所述函數(shù)是由應(yīng)用程序編程接口提供的。28.—種包括機器可訪問介質(zhì)的產(chǎn)品,所述機器可訪問介質(zhì)具有多個機器可訪問指令,其中,當(dāng)處理器執(zhí)行所述指令時,所述指令使所述處理器執(zhí)行包括以下步驟的方法對包括用戶級線程的程序執(zhí)行相關(guān)性分析;將所述程序分解成獨立的工作單元;以及在不利用用戶提供的語用信息的情況下,為所述獨立的工作單元中的至少一個工作單元靜態(tài)地生成一個或多個調(diào)度提示;以及為所述程序生成經(jīng)編譯的代碼,所述代碼包含用于將所述調(diào)度提示提供給運行時調(diào)度器的指令。29.如權(quán)利要求28所述的產(chǎn)品,還包括額外的機器可訪問指令,其中,當(dāng)處理器執(zhí)行所述指令時,所述指令還使所述處理器生成圖來表示所述獨立的工作單元之間的局部性。30.如權(quán)利要求21所述的產(chǎn)品,其特征在于,用于提供所述調(diào)度提示的所述指令還包括在由處理器執(zhí)行時用于進行如下操作的指令提供指向保存所述調(diào)度提示的結(jié)構(gòu)的指針,其中所述指針作為參數(shù)提供以用于函數(shù)調(diào)用。31.如權(quán)利要求21所述的產(chǎn)品,其特征在于所述函數(shù)用于創(chuàng)建用戶級線程,并且所述函數(shù)是由應(yīng)用程序編程接口提供的。32.如權(quán)利要求24所述的方法,還包括碼6一個調(diào)度提示,全文摘要描述用于在沒有操作系統(tǒng)干預(yù)下調(diào)度用戶級OS獨立“微程”的方法、設(shè)備和系統(tǒng)實施例。對于至少一個實施例,通過調(diào)度器例行程序而不是通過操作系統(tǒng)來調(diào)度微程用于執(zhí)行。調(diào)度器例行程序可以從編譯器接收由編譯器生成的提示。編譯器提示可以在沒有用戶提供的雜注的情況下由編譯器生成,并且可以經(jīng)由API類接口傳遞給調(diào)度器例行程序。該接口可以包括由編譯器維護的調(diào)度提示數(shù)據(jù)結(jié)構(gòu)。還描述了其它實施例并對這些實施例要求權(quán)利。文檔編號G06F9/46GK101317156SQ200680044471公開日2008年12月3日申請日期2006年11月16日優(yōu)先權(quán)日2005年11月29日發(fā)明者G·呂,G·吳,G·欽亞,H·王,J·沈,P·M·彼得森,R·A·漢金斯,R·N·拉克維克,S·-W·廖,S·沙,T·迪普,X·田申請人:英特爾公司