專利名稱:管理計算系統(tǒng)中協(xié)處理器的計算資源的方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及管理計算系統(tǒng)中協(xié)處理器的計算資源的系統(tǒng)和方法。
背景技術:
自本世紀60年代中葉的第一個分時系統(tǒng)開始,操作系統(tǒng)(OS)實現了許多允許多個互不了解的應用程序共享計算機計算資源的方法。通過為各個應用程序分配較小的″時間片″,并且在″時間片″用完時中斷應用程序,計算機可以為各個應用程序提供正在計算機上單獨運行的假象。例如,2個應用程序可以按照1毫秒的時間片在系統(tǒng)上運行。在這種情況下,各個應用程序的運行速度略微小于其在計算機上單獨運行時的速度的一半(由于2個應用程序之間的切換所需的開銷),其中各個應用程序每秒均得到大約500個時間片。較長的時間片產生較少的開銷,并且產生粗的執(zhí)行粒度,使得系統(tǒng)不太適于定時要求較高的應用程序。
人們在開發(fā)各種諸如虛擬存儲器、進程和線程的抽象模型方面做了大量工作,這些抽象模型進行交互以便為應用程序提供允許共享中央處理單元(CPU)的計算資源的軟件模型。然而這些抽象模型還沒有強大到能夠適用于管理圖形處理單元(GPU)和主機微處理器中的計算資源的程度。
在這點上,最近幾年來,圖形處理器的功能變得非常強大。PC圖形芯片中晶體管數量的增長速度遠超過Moore定律所能預見的速度,即圖形芯片中晶體管數量已經從1995年的大約200,000個增長到2001年的大約60,000,000個。這些芯片的計算能力也隨著晶體管數量的增加而提高;也就是說,圖形芯片不僅可以處理更多的數據,而且也可以為數據提供更加復雜的計算。結果,在今天,計算機系統(tǒng)中的圖形芯片可以被看作是對主機微處理器的計算資源的補充。
圖形芯片提供的軟件模型略微不同于主機微處理器提供的軟件模型。兩個模型均涉及上下文,即一組精確描述處理器正進行的處理的數據。上下文可以包含數據寄存器或控制寄存器,數據寄存器包含當前正被執(zhí)行的任何操作的中間結果,控制寄存器在處理器執(zhí)行某些操作時改變其行為。例如在32位INTEL處理器上,EAX數據寄存器被用作累加器,以執(zhí)行乘法運算,保存函數返回值,等等。浮點控制字(FPCW)是控制寄存器,控制浮點指令如何舍入不精確結果(單、雙或擴展精度,到正或負極限,到零、或到最接近值;等等)。然而通常情況下圖形處理器在控制寄存器中具有的狀態(tài)遠多于通用微處理器中的狀態(tài)。圖形處理器的高性能源于其流水線式、靈活且固定的功能體系結構。許多控制寄存器狀態(tài)需要設置圖形處理器執(zhí)行的操作。例如,一組控制寄存器可以包含(a)基地址和當前充當輸入的一或多個紋理貼圖(texture map)的尺寸,(b)紋理尋址和過濾模式,在紋理值和插值顏色值之間執(zhí)行的混和操作,(c)應用于碎片(fragment)的alpha和Z值以決定是否將其合并到顏色緩沖區(qū)中的測試,和(d)當在最終著色階段把顏色碎片合并到顏色緩沖區(qū)中時使用的alpha混合操作。雖然圖形處理器包含許多諸如控制其處理的迭代器的臨時寄存器,然而通常不必在上下文切換期間保存那些寄存器,因為在需要保存那些寄存器的粒度上不允許進行上下文切換。在任何情況下,即使在上下文切換期間必須保存這些寄存器,軟件應用通常也不能直接得到它們。易失寄存器狀態(tài)對客戶端軟件的不透明性僅僅是圖形處理器提供的軟件模型和通用微處理器提供的軟件模型之間的一個區(qū)別。
目前,對管理諸如圖形處理器的協(xié)處理器的計算資源的嘗試已經盡其可能。到目前為止,由于每次只有一個應用程序活躍,尚未對這些計算資源的細致管理提出更多的要求。在3D加速硬件最初被用于加速例如3D模擬和動畫的商業(yè)工作站應用程序環(huán)境中,最終用戶通常每次只操作一個應用程序。即使在指定時間有不止一個應用程序處于活躍狀態(tài),最終用戶仍然在切換到另一個應用程序之前在當前應用程序中完成大量工作,并且應用程序之間的切換粒度大約為秒級或者更大。游戲應用程序,即第二類因圖形硬件加速而根本受益的應用程序通常也是每次只運行一個。事實上,Windows中的DIRECTX應用編程接口(API)特別允許游戲應用程序獲得對計算機系統(tǒng)中硬件資源,尤其是圖形芯片的獨占訪問。
隨著圖形芯片功能的更加強大,自然期望增加那些要求從中得到大量計算資源的活躍應用程序的數量,并且使這些應用程序之間的切換粒度變得更加精細。在某些領域中,這種趨勢已經很明顯。例如,在2001年間,諸如硬件加速運動補償(″mocomp″)和整數離散余弦變換(″IDCT″)的視頻解碼加速已經被加入多數圖形芯片中。由于可以同時啟動視頻重放應用程序和運行其它應用程序,重放視頻和運行任何其他向圖形處理器要求計算資源的應用程序需要細致管理那些資源,以保證視頻重放和其它應用程序均使最終用戶得到高質量的體驗。
其它增加對圖形處理器計算資源的要求的潛在來源包含多個應用程序輸出的合成,和諸如GDI(圖形開發(fā)接口)或GDI+的2D圖形API對硬件加速的改進利用。概括地說,有關計算系統(tǒng)中圖形處理器的計算資源的高效和有效管理的需求只會隨著圖形處理器自身的能力、靈活性和速度的提高,以及同時使用圖形處理器計算資源的應用程序的數量的提高而不斷增加。
發(fā)明內容
基于上述考慮,本發(fā)明提供了管理計算系統(tǒng)中諸如圖形處理器的協(xié)處理器的計算資源的系統(tǒng)和方法。所述系統(tǒng)和方法用于管理協(xié)處理器的計算資源,以利于在多任務環(huán)境中高效執(zhí)行多個應用程序。通過允許所執(zhí)行的多個線程并行組成命令緩沖區(qū),提交那些命令緩沖區(qū)以便操作系統(tǒng)調度和分配,并且監(jiān)視通知命令緩沖區(qū)完成的中斷,系統(tǒng)允許多個應用程序高效共享系統(tǒng)中的可用計算資源。
在各種實施例中,本發(fā)明提供了控制具有主處理器的主機計算系統(tǒng)中協(xié)處理器的計算資源的方法,其中該方法包含通過由主處理器提交到協(xié)處理器的命令緩沖區(qū)控制計算系統(tǒng)的一或多個協(xié)處理器,根據命令緩沖區(qū)中的命令向主機計算系統(tǒng)回送數據,以及通過主機計算系統(tǒng)中包含的管理對象調度命令緩沖區(qū)的發(fā)送,其中主機計算系統(tǒng)上實現的多個應用程序可以同時得到協(xié)處理器的計算資源。
在相關和其它實施例中,本發(fā)明提供了計算設備和計算機可讀介質,在所述計算機可讀介質上存儲多個用于控制具有主處理器的主機計算系統(tǒng)中協(xié)處理器的計算資源的計算機可執(zhí)行模塊,計算設備和計算機可執(zhí)行模塊均包含管理對象,所述管理對象通過由主處理器提交到協(xié)處理器的命令緩沖區(qū)控制計算系統(tǒng)的協(xié)處理器,并且調度命令緩沖區(qū)的發(fā)送。計算設備和計算機可執(zhí)行模塊還均包含根據命令緩沖區(qū)中的命令向主機計算系統(tǒng)回送數據,從而使主機計算系統(tǒng)上實現的多個應用程序可以同時得到協(xié)處理器的計算資源的裝置。
下面描述本發(fā)明的其它特性和實施例。
下面參照附圖描述管理圖形處理器的計算資源的系統(tǒng)和方法,其中附圖1A的模塊圖示出了具有各種可以實現本發(fā)明的計算設備的示例性網絡環(huán)境;附圖1B的模塊圖示出了可以實現本發(fā)明的示例非限制性計算設備;圖2圖解了命令緩沖區(qū)在被應用程序用于向協(xié)處理器發(fā)送命令時的示例性生命周期;圖3A-3E圖解了將運行時刻級命令轉換成硬件專用命令的驅動程序部件的示例性實現;圖4圖解了本發(fā)明的用戶模式驅動程序DLL的示例性實現;圖5詳細圖解了當應用程序調用應用編程接口以執(zhí)行圖形操作時出現的示例性事件序列;圖6根據本發(fā)明的一個實施例圖解了示例性的硬件可使用的典型命令緩沖區(qū)格式;而圖7根據本發(fā)明的一個實施例圖解了示例性的中間典型命令緩沖區(qū)格式。
具體實施例方式
綜述如背景技術部分所述,有許多當前已有和潛在的、增加對圖形處理器計算資源的要求的來源。當不止一個這樣的來源幾乎同時要求訪問圖形處理器時,圖形處理器不能輕松地滿足所有這些來源的要求。于是,本發(fā)明提供各種管理多個應用程序的圖形處理請求的調度和分配的方式,以便確保諸如圖形處理單元的協(xié)處理器單元的計算資源被高效地分配給請求方應用程序。因此,本發(fā)明提供用于控制主機計算系統(tǒng)中協(xié)處理器的計算資源的方法和系統(tǒng),其中通過由主處理器提交的命令緩沖區(qū)控制協(xié)處理器,通過主機計算系統(tǒng)中諸如操作系統(tǒng)的對象調度向協(xié)處理器的命令緩沖區(qū)發(fā)送,使得多個應用程序可以同時得到協(xié)處理器的計算資源。
術語表下面是后面對本發(fā)明的詳細描述中使用的術語和引用的各種術語的對應定義。
圖形加速端口(AGP)是利于從主機微處理器向圖形外設快速發(fā)送數據的高速總線。
命令緩沖區(qū)是被圖形硬件使用的特定于硬件的繪圖命令流,例如參見下面對令牌流的定義。
上下文是被處理器用來執(zhí)行命令的硬件狀態(tài)。這里,線程上下文是指主機微處理器的硬件狀態(tài),而硬件上下文是指圖形硬件的狀態(tài)。在可以執(zhí)行指令流(主機上)或命令流(圖形芯片上)之前加載上下文。
中央處理單元(CPU)包含主機微處理器。
設備驅動程序接口(DDI)是被操作系統(tǒng)用來與硬件驅動程序交互的標準化接口。
顯示列表是一系列圖形硬件命令,這些命令已經被記錄,使得可以馬上″重放″命令,其效率高于再次執(zhí)行初始命令系列的效率。由于顯示列表已經被轉換成特定于硬件的形式,顯示列表常常對應用程序非透明,即它們不能被編輯。
動態(tài)鏈接庫是可執(zhí)行代碼單元,可以被鏈接到進程中,并且可以被多個進程同時共享。本文假定DLL的代碼在用戶模式下執(zhí)行。
直接存儲器訪問(DMA)是允許外設直接讀取或寫入主機可訪問存儲器的硬件特性。
延遲過程調用(DPC)是被諸如Windows的操作系統(tǒng)調用的例程,通常響應中斷而執(zhí)行,但是以略微低于中斷服務例程(參見下面的ISR)的優(yōu)先權運行。通常情況下,中斷服務例程應當完成解決中斷所需的最小處理,并且將DPC排入隊列以便完成響應中斷所需的其它工作。
圖形處理器是硬件外設,被用來加速諸如位塊傳送(BLT)的圖形繪圖命令,和諸如三角柵化的3D圖形基本繪圖進程。在這點上,圖形處理器與主機微處理器的更加通用和欠靈活的資源形成反差。
主機微處理器是執(zhí)行操作系統(tǒng)和/或在操作系統(tǒng)中運行的應用程序的處理器。系統(tǒng)中的主機微處理器與圖形處理器或系統(tǒng)中的其它計算資源形成反差。
中斷是允許外設將主機微處理器偏離其當前處理并且將控制轉移到存儲器中特殊位置的硬件特性。操作系統(tǒng)使用這個機制調用被稱為中斷服務例程(ISR)的驅動程序代碼以響應中斷。
中斷服務例程(ISR)是通常在設備驅動程序中的函數,當驅動程序控制的硬件發(fā)出中斷時被操作系統(tǒng)調用,例如參見DPC。
運行時(JIT)編譯是將額外步驟引入從源代碼到目標代碼的轉換的編譯處理。在這點上,源代碼被轉換成可編譯、獨立于硬件、被發(fā)送到客戶端計算機的中間語言,其中源代碼在″運行時″被編譯成可以在客戶端上運行的目標代碼。
內核模式是允許系統(tǒng)代碼直接訪問硬件資源的特權處理器模式。
進程是操作系統(tǒng)中的工作的邏輯分割。在Windows中,進程包括虛擬地址空間,可執(zhí)行程序,執(zhí)行的一或多個線程,用戶資源定額的某部分,和操作系統(tǒng)已經分配給進程的線程的系統(tǒng)資源。
資源是可以授權多個線程非獨占訪問或授權單線程獨占訪問的同步原語。
同步原語是可用于同步多個線程對諸如臨界段、互斥、信號燈或事件的共享資源的訪問的對象。
線程是可執(zhí)行實體,包括程序計數器、用戶模式堆棧、內核模式堆棧和一組寄存器數值。
令牌流是獨立于硬件的令牌的流,描述一系列繪圖操作。令牌流可以被特定于硬件的軟件構件,例如驅動程序轉換成命令緩沖區(qū)或其它硬件命令系列。
用戶模式是不允許代碼直接訪問硬件資源的主機微處理器模式。
示例性聯網和分布式環(huán)境本領域的普通技術人員可以理解,計算機、或其它客戶端或服務器設備可以被用作計算機網絡的一部分,或者被用在分布式計算環(huán)境中。在這點上,本發(fā)明涉及任何計算機系統(tǒng),所述計算機系統(tǒng)具有任意數量的存儲器或存儲單元,以及在任意數量的存儲單元或卷上出現的任意數量的應用程序和進程,所述應用程序和進程可以向協(xié)處理器資源發(fā)出請求。本發(fā)明適用于具有網絡環(huán)境或分布式計算環(huán)境中采用的服務器計算機和客戶端計算機、具有遠程或本地存儲的環(huán)境。本發(fā)明也可以被應用于獨立的計算設備,所述計算設備具有編程語言功能,以及解釋和執(zhí)行能力,以便產生、接收和發(fā)送涉及遠程或本地服務的信息。
分布計算利于通過計算設備和系統(tǒng)之間的直接交換共享計算機資源和服務。這些資源和服務包含信息交換,高速緩沖存儲和文件的磁盤存儲。分布計算利用了網絡連接,允許客戶端均衡其共同擁有的處理能力,以使整個企業(yè)受益。在這點上,各種設備可以具有能夠請求通過本發(fā)明的技術管理的協(xié)處理資源的應用程序、對象或資源。
圖1A提供了示例性聯網或分布式計算環(huán)境的示意圖。分布式計算環(huán)境包括計算對象10a、10b等等,以及計算對象或設備110a、110b、110c等等。這些對象可以包括程序、方法、數據存儲、可編程邏輯等等。對象可以包括例如PDA、電視、MP3播放器、電視、個人計算機等等的相同或不同設備的部分。各個對象可以通過通信網絡14與其它對象通信。網絡本身可以包括為圖1A的系統(tǒng)提供服務的其它計算對象和計算設備。根據本發(fā)明一個方面,各個對象10或110可以包含可能請求主機系統(tǒng)的協(xié)處理資源的應用程序。
在分布式計算體系結構中,通常被單純用作客戶端的計算機之間直接通信,并且可以充當客戶端和服務器,其中假定無論被用作客戶端還是服務器,其作用對于網絡均是最高效的。這降低了服務器上的負載,并且允許所有客戶端訪問其它客戶端上的可用資源,從而提高了整個網絡的能力和效率。于是,根據本發(fā)明的協(xié)處理資源管理可以分布在客戶端和服務器中間,從而能夠以對于整個網絡高效的方式管理專用協(xié)處理。
分布計算有助于企業(yè)更有效地跨越不同地理界限提供服務和能力。此外,分布計算可以將數據移動到更接近使用數據的地點,該地點充當網絡高速緩存機構。分布計算還允許計算網絡使用智能代理動態(tài)地一起工作。代理駐留在同層計算機上,并且前后傳送各種信息。代理也可以啟動代表其它同層系統(tǒng)的任務。例如,智能代理可用于劃分網絡上的任務的優(yōu)先權,改變傳輸流,本地文件搜索,或確定諸如病毒的反常行為并且在其影響網絡之前終止該行為。也可以考慮所有種類的其它服務。由于高度專用的協(xié)處理資源實際上可以物理位于一或多個位置上,對請求使用協(xié)處理資源的應用程序的管理在這種系統(tǒng)中具有很高的實用性。
也可以理解,諸如110c的對象可以被駐留在其它計算設備10或110上。于是,雖然描述的物理環(huán)境可以示出作為計算機的被連接設備,然而這種圖解只是示例性的,可選地,物理環(huán)境可以被描述成包括各種數字設備,例如PDA、電視、MP3播放器等等,以及被描述成包括軟件對象,例如接口、COM對象等等。
存在各種支持分布式計算環(huán)境的系統(tǒng)、部件和網絡構造。例如,可以通過有線或無線系統(tǒng),局域網或廣域分布式網絡將計算系統(tǒng)連接在一起。當前,許多網絡被連接到互聯網,互聯網提供用于廣域分布計算的基礎設施并且包括許多不同網絡。
在家庭網絡環(huán)境中,存在至少4種不同的網絡傳送介質,這些網絡傳送介質均可以支持諸如供電線路、數據(無線和有線)、語音(例如電話)和娛樂媒體的獨特協(xié)議。多數諸如照明開關的家用控制設備和電器可以使用供電線路進行連接。數據服務可以作為寬帶(例如DSL或電纜調制解調器)業(yè)務進入家庭,并且在家里使用無線(例如HomeRF或802.11b)或有線(例如家用PNA、Cat5、甚至供電線路)連接訪問數據服務。語音傳輸可以作為有線(例如Cat3)或無線(例如蜂窩電話)業(yè)務進入家庭,并且可以使用Cat3有線在家庭內部分布。娛樂媒體可以通過衛(wèi)星或電纜進入家庭,并且通常使用同軸電纜在家庭中分布。IEEE1394和DVI作為媒體設備集簇的數字互連而出現。所有這些網絡環(huán)境和其它可以充當協(xié)議標準的環(huán)境可以被互連以構成內部網,內部網通過互聯網可以被連接到外部世界。概括地說,存在各種用于數據存儲和傳輸的不同來源,因此,今后的計算設備會需要各種共享數據,例如圖形芯片的數據處理所訪問或使用的數據的方式。
互聯網通常是指使用TCP/IP協(xié)議族的網絡和網關的集合,并且是計算機網絡領域中眾所周知的。TCP/IP是″傳送控制協(xié)議/接口程序″的縮寫?;ヂ摼W可以被看作是通過計算機執(zhí)行的網絡協(xié)議互連的地理上分布的遠程計算機網絡構成的系統(tǒng),所述網絡協(xié)議允許用戶通過網絡交互和共享信息。由于這種廣泛分布的信息共享,諸如互聯網的遠程網絡目前已經演變成開放系統(tǒng),開發(fā)人員可以實質上沒有限制地針對開放系統(tǒng)設計軟件應用,以便執(zhí)行專用操作或服務。
于是,網絡基礎設施允許主機具有諸如客戶/服務器、端到端或混合體系結構的網絡拓撲?!蹇蛻舳恕迨且粋€類或組的成員,使用與其無關的其它類或組的服務。于是,在計算中,客戶端是請求其它程序提供的服務的進程,即一組指令或任務??蛻舳诉M程在不必″知道″關于其它程序或服務本身的任何工作細節(jié)的情況下使用所請求的服務。在客戶/服務器體系結構中,尤其是在網絡系統(tǒng)中,客戶端通常是訪問其它計算機,例如服務器提供的共享網絡資源的計算機。在圖1A的例子中,計算機110a、110b等等可以被認為是客戶端,而計算機10a、10b等等可以被認為是服務器,其中服務器10a、10b等等維護接著在客戶端計算機110a、110b等等中復制的數據。
服務器通常是可通過諸如互聯網的遠程網絡訪問的遠程計算機系統(tǒng)??蛻舳诉M程可以在第一計算機系統(tǒng)中活躍,而服務器進程可以在第二計算機系統(tǒng)中活躍,彼此通過通信介質進行通信,于是提供分布式功能,并且允許多個客戶端利用服務器的信息收集能力。
客戶端和服務器使用協(xié)議層提供的功能彼此通信。例如,超文本傳送協(xié)議(HTTP)是用于環(huán)球網(WWW)或″Web″的公共協(xié)議。通常,諸如通用資源定位符(URL)或網際協(xié)議的計算機網絡地址或網際協(xié)議(IP)地址被用來彼此標識服務器或客戶端計算機。網絡地址可以被稱作通用資源定位符地址。例如,可以通過通信介質提供通信。尤其是,客戶端和服務器可以通過用于高容量通信的TCP/IP連接彼此連接。
于是,圖1A圖解了示例性的、可以使用本發(fā)明的網絡或分布式環(huán)境,其中服務器通過網絡/總線與客戶端計算機通信。更詳細地,若干服務器10a、10b等等通過可以是LAN、WAN、內部網、互聯網等等的通信網絡/總線14,被互連到若干客戶端或遠程計算設備110a、110b、110c、110d、110e等等,例如便攜計算機、手持計算機、薄客戶端、網絡設備,或者連接到根據本發(fā)明的其它設備,例如VCR、電視、烤箱、照明設備、加熱器等等。于是,本發(fā)明適用于任何期望用于管理協(xié)處理器計算資源的計算設備。
在通信網絡/總線14是互聯網的網絡環(huán)境中,服務器10可以是Web服務器,其中客戶端110a、110b、110c、110d、110e等等通過若干已知協(xié)議,例如超文本傳送協(xié)議(HTTP)中的任何協(xié)議與Web服務器通信。服務器10也可以充當客戶端110,這是分布式計算環(huán)境的特點。根據需要,通信可以是有線或無線通信。客戶端設備110可以通過通信網絡/總線14通信,也可以不通信,并且可以具有與其相關的的獨立通信。例如,對于電視或VCR,其控制可以有或沒有聯網特性。各個客戶端計算機110和服務器計算機10可以配備各種應用程序模塊或對象135,以及針對各種存儲單元或對象的連接或訪問,其中在所述存儲單元或對象中可以存儲文件,或者向其下載或轉移部分文件。任何計算機10a、10b、110a、110b等等均可以負責數據庫20或根據本發(fā)明的其它存儲單元,例如用于存儲圖形數據i的數據庫或存儲器20的維護和更新。于是,本發(fā)明可以用于具有客戶端計算機等等的計算機網絡環(huán)境,客戶端計算機110a、110b等等可以訪問計算機網絡/總線14和服務器計算機10a、10b等等并與其交互,服務器計算機10a、10b等等可以與客戶端計算機110a、110b等等,以及其它設備111和數據庫20交互。
示例性計算設備圖1B和下面的討論對可以實現本發(fā)明的適當計算環(huán)境進行了概括描述。然而應當理解,所有種類的手持、便攜和其它計算設備和計算對象均可以和本發(fā)明結合使用。雖然下面描述的是通用計算機,但這只是一個例子,可以通過具有網絡/總線互操作性和交互的薄客戶端實現本發(fā)明。于是,可以在具有聯網駐留服務、包含非常少或最小客戶端資源的環(huán)境中實現本發(fā)明,例如在諸如設備中對象的客戶端設備僅僅充當網絡/總線接口的網絡環(huán)境中。本質上,可以存儲或從其檢索數據的任何位置均是用于本發(fā)明的協(xié)處理器資源管理的期望或適當的環(huán)境。
雖然不需要,然而可以通過操作系統(tǒng)實現本發(fā)明,以便被服務開發(fā)人員用于設備或對象,和/或包含在幫助管理計算資源的應用軟件內部??梢栽谟梢换蚨鄠€諸如客戶端工作站、服務器或其它設備的計算機執(zhí)行的計算機可執(zhí)行指令通用環(huán)境,例如程序模塊中描述軟件。通常,程序模塊包含執(zhí)行具體任務或實現特定抽象數據類型的例程、程序、對象、部件、數據結構等等。通常,在各種實施例中可以根據需要合并或分布程序模塊的功能。此外,本領域的技術人員會理解,本發(fā)明可以用于其它計算機系統(tǒng)結構。其它眾所周知的適用于本發(fā)明的計算系統(tǒng)、環(huán)境和/或結構包含但不限于個人計算機(PC)、自動出納機、服務器計算機、手持或膝上型設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程用戶電子設備、網絡PC、儀器、照明設備、環(huán)境控制單元、小型機、大型計算機等等。本發(fā)明也可以用于分布式計算環(huán)境中,其中通過遠程處理設備執(zhí)行任務,并且通過通信網絡/總線或其它數據傳輸介質鏈接遠程處理設備。在分布式計算環(huán)境中,程序模塊可以位于包含存儲器存儲設備的本地和遠程計算機存儲介質中,并且客戶端節(jié)點可以充當服務器節(jié)點。
圖1B圖解了可以實現本發(fā)明的適當計算系統(tǒng)環(huán)境100的例子,雖然如上所述,計算系統(tǒng)環(huán)境100只是適當計算環(huán)境的一個例子,并且不對本發(fā)明的使用范圍或功能產生任何限制。也不應當將計算環(huán)境100解釋成對示例性操作環(huán)境100中圖解的任何一個部件或其組合有任何依賴性,或對其有要求。
參照圖1B,實現本發(fā)明的示例性系統(tǒng)包含具有計算機110的形式的通用計算設備。計算機110的部件可以包含但不限于處理單元120、系統(tǒng)存儲器130和系統(tǒng)總線121,其中系統(tǒng)總線121將包含系統(tǒng)存儲器的各種系統(tǒng)部件連接到處理單元120。系統(tǒng)總線121可以是若干種總線結構中的任意一個,包含使用各種總線體系結構中的任意總線體系結構的存儲器總線或存儲器控制器、外設總線、和局部總線。例如但并不限于此,這種體系結構包含工業(yè)標準結構(ISA)總線、微通道結構(MCA)總線、增強ISA(EISA)總線、視頻電子標準協(xié)會(VESA)局部總線、和外設部件互連(PCI)總線(也被稱為中間總線)。
計算機110通常包含各種計算機可讀介質。計算機可讀介質可以是能夠被計算機110訪問的任何可用介質,并且包含易失和非易失介質,可移動和非可移動介質。例如但并不限于此,計算機可讀介質可以包括計算機存儲介質和通信介質。計算機存儲介質包含通過任何方法或技術實現的易失和非易失,可移動和非可移動介質,用于存儲諸如計算機可讀指令、數據結構、程序模塊或其它數據的信息。計算機存儲介質包含但不限于RAM、ROM、EEPROM、快閃存儲器或其它存儲器技術、CDROM、數字化視頻光盤(DVD)或其它光盤存儲器、盒式磁帶、磁帶、磁盤存儲器或其它磁存儲設備、或任何其他可用于存儲期望信息并且可以被計算機110訪問的介質。通信介質通常包含計算機可讀指令、數據結構、程序模塊或諸如載波或其它傳送機制的調制數據信號中的數據,并且包含任何信息傳送介質。術語″調制數據信號″表示以對信號中的信息進行編碼的方式設置或改變其特征中的一或多個特性的信號。例如但并不限于此,通信介質包含諸如有線網絡或直接有線連接的有線介質,和諸如聲波、RF、紅外和其它無線介質的無線介質。上述介質的任何組合也應當被包含在計算機可讀介質的范圍內。
系統(tǒng)存儲器130包含具有易失和/或非易失存儲器形式的計算機存儲介質,例如只讀存儲器(ROM)131和隨機訪問存儲器(RAM)132。包含有助于在計算機110內部的單元之間傳送信息(例如在啟動期間)的基本例程的基本輸入/輸出系統(tǒng)133(BIOS)通常被存儲在ROM131中。RAM132通常包含可被處理單元120立即訪問和/或當前正被處理單元120操作的數據和/或程序模塊。例如但并不限于此,圖1B圖解了操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數據137。
計算機110也可以包含其它可移動/非可移動,易失/非易失計算機存儲介質。例如,圖1B圖解了讀寫非可移動、非易失磁介質的硬盤驅動器141,讀寫可移動、非易失磁盤152的磁盤驅動器151,讀寫可移動、非易失光盤156,例如CD ROM或其它光學介質的光盤驅動器155。其它可被用于示例性操作環(huán)境的可移動/非可移動、易失/非易失計算機存儲介質包含但不限于磁帶盒、快閃存儲器卡、數字化視頻光盤、數字視頻磁帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅動器141通常通過例如接口140的非可移動存儲器接口連接到系統(tǒng)總線121,而磁盤驅動器151和光盤驅動器155通常通過諸如接口150的可移動存儲器接口連接到系統(tǒng)總線121。
圖1B描述和圖解的驅動器及其相關計算機存儲介質提供對計算機110的計算機可讀指令、數據結構、程序模塊和其它數據的存儲。例如在圖1B中,硬盤驅動器141被圖解成存儲操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數據147。注意,這些部件可以相同于或不同于操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數據137。這里為操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數據147指定不同的附圖標記,以表明至少它們是不同的拷貝。用戶可以通過諸如鍵盤162和定點設備161的輸入設備向計算機110輸入命令和信息,定點設備161通常被稱作鼠標、軌跡球或觸摸板。其它輸入設備(未示出)可以包含話筒、操縱桿、游戲墊、圓盤衛(wèi)星電視天線、掃描儀等等。這些和其它輸入設備通常通過用戶輸入接口160連接到處理單元120,但是可以被諸如并行端口、游戲端口或通用串行總線(USB)的其它接口和總線結構連接,其中用戶輸入接口160連接到系統(tǒng)總線121。諸如北橋的圖形接口182也可以被連接到系統(tǒng)總線121。北橋是與CPU或主機處理單元120通信的芯片組,并且假定負責AGP通信。一或多個圖形處理單元(GPU)184可以與圖形接口182通信。在這點上,GPU184通常包含諸如寄存器存儲的片內存儲器存儲,并且GPU184與視頻存儲器186通信。更通常地,本發(fā)明可以結合任何協(xié)處理器使用,其中GPU184只是一個例子。監(jiān)視器191或其它類型的顯示設備也通過諸如視頻接口190、可以與視頻存儲器186通信的接口連接到系統(tǒng)總線121。除監(jiān)視器191之外,計算機也可以包含諸如揚聲器197和打印機196、可以通過輸出外設接口195連接的其它外部輸出設備。
通過使用針對一或多個遠程計算機,例如遠程計算機180的邏輯連接,計算機110可以在聯網或分布式網絡環(huán)境中工作。遠程計算機180可以是個人計算機、服務器、路由器、網絡PC、同層設備或其它公共網絡節(jié)點,并且通常包含針對計算機110描述的多個或所有單元,盡管圖1B中只圖解了存儲器存儲設備181。圖1B中的邏輯連接包含局域網(LAN)171和廣域網(WAN)173,但是也可以包含其它網絡/總線。這樣的網絡環(huán)境在家庭、辦公室、企業(yè)計算機網絡、內部網和互聯網中隨處可見。
當用于LAN網絡環(huán)境時,計算機110通過網絡接口或適配器170連接到LAN171。當用于WAN網絡環(huán)境時,計算機110通常包含調制解調器172或其它用于在例如互聯網的廣域網173上建立通信的裝置??梢晕挥趦炔炕蛲獠康恼{制解調器172通過用戶輸入接口160或其它適當機構可以連接到系統(tǒng)總線121。在網絡環(huán)境中,針對計算機110描述的程序模塊或其部分可以被存儲在遠程存儲器存儲設備中。例如但并不限于此,圖1B圖解了駐留在存儲器設備181上的遠程應用程序185。應當理解,所述網絡連接只是示例性的,可以使用其它在計算機之間建立通信鏈路的裝置。
示例性分布計算框架或體系結構隨著個人計算和互聯網的融合,已經和正在開發(fā)各種分布計算框架。為個人和企業(yè)用戶等等提供用于應用程序和計算設備、可無縫地互操作和Web式的接口,使得計算活動越來越面向Web瀏覽器或網絡。
例如,微軟公司的.Net平臺包含服務器、構件式服務(例如基于Web的數據存儲)和可下載設備軟件。通常,.Net平臺提供(1)使整個范圍內的計算設備一起工作,并且在所有計算設備上使用戶信息自動更新和同步的能力,(2)通過大量使用XML而不是HTML得到提高的Web站點交互能力,(3)在線服務,從中央接入點為用戶提供定制訪問并傳送產品和服務,以便管理各種諸如電子郵件的應用程序或諸如Office.Net的軟件,(4)集中數據存儲,能夠提高信息訪問的效率和方便程度,以及改進用戶和設備中間的信息同步,(5)集成各種諸如電子郵件、傳真和電話的通信介質的能力,(6)使開發(fā)人員建立可重用模塊以提高生產率并減少編程錯誤數量的能力,和(7)許多其它跨平臺集成特性。
雖然這里結合計算設備上駐留的軟件描述了示例性實施例,然而也可以通過操作系統(tǒng)或協(xié)處理器和請求方對象之間的″中間人″對象實現本發(fā)明的一或多個部分,使得可以在所有.NET語言和服務,以及其它分布計算架構中執(zhí)行、支持或訪問圖像處理服務。
計算系統(tǒng)中計算資源的管理I.圖形處理器編程首先簡要描述用于控制圖形處理器的不同機制及其折衷。雖然結合圖形處理器描述了本發(fā)明的各種實施例,然而本發(fā)明可以被應用于作為對主處理器操作的補充的協(xié)處理器。在提出不同機制之后,描述本發(fā)明的控制圖形處理器的方法。以利于操作系統(tǒng)管理其計算資源的方式實現本發(fā)明的方法。
表格1列舉出圖形硬件接收命令的一些方式
第一方法,即端口I/O或PIO涉及執(zhí)行從外設請求信息的IN指令,和向外設發(fā)送信息的OUT指令。PIO非常低效,并且通常不能很好地伸縮適應系統(tǒng)中指定硬件部分的多個實例。通常,可以只在內核模式下,即允許直接操作硬件的微處理器模式下執(zhí)行IN和OUT指令。如果用戶模式線程遇到這種指令,則系統(tǒng)產生異常,在用戶模式線程試圖控制硬件的情況下,通常導致線程終止執(zhí)行。
存儲器映射I/O允許通過針對專用存儲器位置進行讀寫來控制硬件。MMIO的一個優(yōu)點在于,如果可以改變控制指定硬件部分的存儲器位置,則硬件的多個實例可以駐留在單個系統(tǒng)中。所謂的可重定位MMIO是例如在PC上支持多個監(jiān)視器的關鍵特性。類似于PIO,通常使用內核模式地址在內核模式中執(zhí)行MMIO。然而某些系統(tǒng)將MMIO地址暴露給用戶模式,所以不經切換到內核模式便可以直接對硬件編程。然而仍然必須實施互斥,并且非置信或帶缺陷用戶模式軟件進行的虛假寫入會導致硬件產生不可預測的行為。于是,多數MMIO實現需要通過內核模式訪問存儲器位置,但是某些MMIO實現允許對硬件進行用戶模式訪問。如果硬件在其寄存器遭到虛假寫入時不健壯,則這種設計會面臨不可預測的、災難性故障的風險。
由于那些操作直接影響硬件的狀態(tài),所以每次只有一個線程可以執(zhí)行PIO或MMIO。于是,當系統(tǒng)支持PIO和MMIO時,系統(tǒng)在使用PIO和/或MMIO向硬件發(fā)送指令的代碼路徑之間實施互斥,即保證任何時候只有一個線程對硬件進行編程。通常,這意味著在執(zhí)行通過PIO或MMIO對硬件編程的代碼之前,線程必須等待諸如臨界段或互斥(互斥對象)的鎖。獲得和釋放鎖需要花費時間,即使其中不存在沖突也是如此。如果存在沖突,即如果多個線程同時試圖獲得指定的鎖,則在許多線程必須長時間等待以獲得鎖的情況下,會降低總體性能。
直接存儲器訪問(DMA)是在計算機系統(tǒng)內部移動數據的通用方法,并且可用于圖形處理器,盤驅動器、網絡適配器和諸如USB和IEEE1394的外部總線的控制。DMA通常是指諸如數字攝像機或盤控制器的外設不經主處理器直接參與而讀寫存儲器的能力。主機事先設置DMA傳送,即設置這樣的頁面,該頁面鎖定例如數字攝像機要寫入來自將要得到的圖片的圖像數據的存儲器區(qū)域,并且向照相機指定該存儲器位置。頁面鎖定導致虛擬存儲器管理程序拒絕將所涉及的存儲器位置寫到磁盤中。一旦完成設置,照相機可以得到圖片并且將圖像數據寫入存儲器,接著通知主機DMA傳送已經完成。對于圖形處理器控制,一系列用于圖形處理器的命令可以被寫入存儲器,并且接著通過DMA操作被傳送到圖形處理器。
DMA具有許多優(yōu)于其它提交圖形處理器命令的方法的優(yōu)點。第一,它利于主機和圖形處理器的并行執(zhí)行。由于CPU執(zhí)行的這些″其它操作″通常涉及產生更多用于圖形處理器的命令,常常要維護多個DMA緩沖區(qū)和其間的″往返傳遞″,即在圖形處理器讀取和執(zhí)行其中的一個時寫入另一個。第二,DMA允許多個應用程序向存儲器寫入命令緩沖區(qū),并且接著在其準備好執(zhí)行時向圖形處理器提交命令緩沖區(qū)的內容。圖形處理器每次只能執(zhí)行一個命令緩沖區(qū),但是由于不同線程可以寫入包含命令緩沖區(qū)的不同存儲器區(qū)域,DMA利于同時構造許多命令緩沖區(qū)。第三,DMA經常導致更高效地利用系統(tǒng)中的總線資源。換言之,通過DMA可達到的帶寬通常高于通過主機微處理器的直接參與可達到的帶寬。
圖形加速端口(AGP)是專門為充當從系統(tǒng)存儲器向圖形處理器傳送數據的高帶寬管道而設計的專用總線。為了這里的描述,AGP可以被認為是DMA的特例。
除了針對硬件傳送信息和接收信息的機制之外,在我們的背景討論中提到的另一個重要區(qū)別在于向主機微處理器通知圖形處理器已經完成某任務,或者出現某種可被圖形處理器看見的事件。任務的非限制性例子包含完成命令緩沖區(qū)的執(zhí)行或完成特定命令。事件的非限制性例子包含顯示設備的垂直折回,來自視頻端口的數字化視頻的半幀的完成,或顯示設備中特定掃描線的折回。
一個被稱為輪詢的方法涉及重復探測硬件以確定事件是否出現或任務是否完成。輪詢需要通過IN指令或MMIO讀取來讀取硬件寄存器,或者發(fā)送命令,該命令請求將應答寫入特定存儲器位置,并且接著由主機從該位置讀取應答。所有輪詢方法的共同特性在于,必須執(zhí)行重復檢查,直到任務已經完成或事件已經出現。通常,輪詢比較浪費主機微處理器中的計算資源。
向主機微處理器通知完成的任務或外部事件的可選方法被稱作中斷。中斷是一種硬件機制,該機制將主機微處理器偏離其正在進行的處理,并且將控制轉移到存儲器中的特殊位置。操作系統(tǒng)使用這個機制調用被稱為中斷服務例程的驅動程序代碼以響應中斷。
中斷具有若干優(yōu)于基于輪詢的機制的優(yōu)點。一個優(yōu)點是,設置和響應中斷的代價是固定的,而基于輪詢的機制的代價根據執(zhí)行的輪詢的數量幾乎線性地增加。結果,與基于輪詢的模式相比,基于中斷的模式通常消耗較少的總線帶寬和較少的CPU周期。如果中斷等待時間小于事件出現時刻和執(zhí)行下一次輪詢的時刻之間的時間,中斷也可以導致更及時的通知。
基于上述背景,本發(fā)明提出一組假定,這些假定允許合理地管理圖形處理器中的計算資源。本發(fā)明還指出某些硬件特性,這些硬件特性允許系統(tǒng)更加有效和/或可靠地進行這種管理。
根據本發(fā)明作出的第一個假定是主要使用基于DMA的輸入。這個第一假定在于,大多數針對圖形處理器的命令應當通過DMA機制提交。如上所述,基于DMA的命令緩沖區(qū)提交利于圖形處理器最終使用主機微處理器上運行的多個應用程序產生的多個DMA緩沖區(qū)??梢酝ㄟ^諸如MMIO的方法向硬件發(fā)送頻率較低的命令,例如啟動DMA命令流的執(zhí)行。但是應當通過DMA發(fā)送大部分針對圖形芯片的高頻率命令,例如載入圖像數據,繪出諸如線條和三角的部分的命令,和改變硬件狀態(tài)的命令。
第二個假定是,最好使用基于中斷的通知。于是,根據本發(fā)明,中斷被用于圖形處理器關于事件的大多數通知,例如命令緩沖區(qū)的完成或部分完成,向主處理器可見的存儲器寫數據的DMA操作的完成,顯示設備的垂直折回,或特定命令的完成。于是,主機會設置其需要了解的事件的中斷通知,并且會以及時方式響應那些中斷。
基于這些假定,我們可以從圖形處理器推而廣之,并且考慮具有2個處理器的系統(tǒng)主CPU和通過從CPU發(fā)送命令緩沖區(qū)來控制的協(xié)處理器,其中協(xié)處理器可以向CPU回送數據,并且在各種事件出現時通過向CPU通知該事件來協(xié)同控制。本文中的例子通常假定協(xié)處理器是圖形處理器(例如在描述可能的同步問題,以及系統(tǒng)如何可以被用來有效解決那些問題時),但是這些例子僅用于圖解,并沒有將本發(fā)明的范圍限制到圖形處理器。
根據上述針對圖形處理系統(tǒng)中計算資源的假定,下面描述高效地共享使用協(xié)處理器中的計算資源的非限制性系統(tǒng)。
圖2描述了命令緩沖區(qū)在被應用程序用于向諸如圖形處理器的協(xié)處理器發(fā)送命令時的生命周期。當創(chuàng)建和初始化命令緩沖區(qū)時,緩沖區(qū)進入初始化狀態(tài)201。接著,命令緩沖區(qū)可被希望向圖形處理器發(fā)出命令的線程選擇和寫入。當線程選擇命令緩沖區(qū)時,命令緩沖區(qū)中的存儲器可用于該線程(或者將命令緩沖區(qū)中的存儲器映射到該線程的地址空間),并且命令緩沖區(qū)進入接收狀態(tài)202。本領域的普通技術人員可以理解,這種映射的細節(jié)可以改變。例如,可以使命令緩沖區(qū)存儲器對于用戶模式、內核模式或兩個模式是可見的。另外,存在許多關于被寫入接收命令緩沖區(qū)的可執(zhí)行代碼的性質的選項。在這點上,圖3A-3E描述了若干這樣的選項,即若干用于寫入命令緩沖區(qū)的不同體系結構。
為了描述圖3A-3E,應用程序是進程或進程中的線程,用于實現參與到系統(tǒng)中的某些特定圖形應用程序。運行時刻例程(runtime)是操作系統(tǒng)中提供的、由應用程序使用的中間件。尤其是,運行時刻例程可以驗證應用程序對應用編程接口(API)的使用,將易于使用的高級API調用轉換成更加復雜、更易于轉換成硬件命令的低級構造,等等。
驅動程序是特定于硬件的部件,驅動程序將運行時刻級命令轉換成特定于硬件的命令。圖3A-3E中描述的驅動程序部件是驅動程序中將運行時刻級命令轉換成特定于硬件的命令的部分。驅動程序的某些執(zhí)行除了這種轉換之外的任務,例如中斷處理和命令緩沖區(qū)分配任務的部分可能駐留在內核模式中,并且在圖3A-3E中沒有被涉及到。圖3A-3E中描述的大部分目標代碼可以在用戶模式中運行,雖然如下所述,某些部分可以在內核模式中運行。命令緩沖區(qū)是包含命令的存儲器片段,其中硬件通過某種DMA機制可以直接耗用所述命令。若干附圖還示出了令牌流,令牌流是獨立于硬件的運行時刻級原語流,所述原語流可以被驅動程序轉換成特定于硬件的命令。
最終,一些附圖示出了JIT(運行時)編譯部件,所述編譯部件可以將獨立于硬件的中間語言轉換成由主機微處理器執(zhí)行的目標代碼。在角部具有OBJ的框包含可以被微處理器直接執(zhí)行的目標代碼。在角部具有MSIL的框包含被JIT編譯以便在微處理器上執(zhí)行的中間代碼。如果在客戶端上可得到具有中間形式的應用程序和運行時刻例程,則如圖3C到3E的實現應用程序的應用可執(zhí)行程序324、334和345所示,JIT可以將應用程序和運行時刻例程轉換成統(tǒng)一目標代碼片段。
圖3A示出了應用程序301、運行時刻例程302和驅動程序303,其中應用程序301、運行時刻例程302和驅動程序303均執(zhí)行其相應的功能,調用下層目標代碼直到驅動程序303將特定于硬件的命令寫入命令緩沖區(qū)304。應用程序301可以是可執(zhí)行進程或進程中的線程,而運行時刻例程302和驅動程序303可以均駐留在DLL上。如圖3A所述,所有目標代碼均可以駐留在用戶模式中(雖然運行時刻例程302和/或驅動程序303中的某些或全部可以駐留在內核模式中)。如果運行時刻例程302確定在繼續(xù)執(zhí)行之前必須提交命令緩沖區(qū)304,或者驅動程序303確定命令緩沖區(qū)304空間耗盡,則為了繼續(xù)執(zhí)行,可以請求轉換到內核模式以便提交命令緩沖區(qū)304并且檢索另一個命令緩沖區(qū)304。
圖3B示出了一種變型,其中運行時刻例程312向緩沖區(qū)313發(fā)出獨立于硬件的命令流,接著該命令流被驅動程序314分析并且寫入命令緩沖區(qū)315。應用程序311調用與運行時刻例程312相關的下層目標代碼。圖3B近似示出了DIRECTX軟件構件的當前體系結構,其中運行時刻例程將應用程序活動轉換成DrawPrimitives2(″DP2″)令牌。當提交DP2令牌流時,出現內核切換,并且驅動程序314將DP2令牌流轉換成內核模式中特定于硬件的命令。圖3B對于驅動程序314處于用戶模式還是內核模式不作任何假定,在這點上,驅動程序部件314可以駐留在用戶模式以及內核模式中。
圖3C示出了一種變型,其中應用程序321和運行時刻例程322被JIT編譯器323合成為統(tǒng)一目標代碼片段。所得到的目標代碼片段324接著與驅動程序325交互以便把特定于硬件的命令寫入命令緩沖區(qū)326。
圖3D示出了圖3B描述的情況的JIT變型,其中由驅動程序336上層的軟件334發(fā)出獨立于硬件的令牌流335。驅動程序336接著針對命令緩沖區(qū)337將令牌流轉換成特定于硬件的命令。就象在圖3C中那樣,JIT編譯器333將應用程序331和運行時刻例程332合成為統(tǒng)一目標代碼片段334。
圖3E示出了一個系統(tǒng),其中在客戶端上可得到中間語言形式MSIL的應用程序341、運行時刻例程342和部分驅動程序343。JIT編譯器344將這些部件合成為統(tǒng)一目標代碼片段345,其中專門優(yōu)化統(tǒng)一目標代碼片段345以便在特定客戶端計算機上運行,并且不僅考慮到主機微處理器,而且考慮到協(xié)處理器的硬件結構。
對于參照圖2描述的命令緩沖區(qū)生命周期,無論使用何種方法將命令寫入命令緩沖區(qū),或者由于命令緩沖區(qū)已經填滿,或者由于寫入緩沖區(qū)的繪圖命令被立刻執(zhí)行,使得對接收命令緩沖區(qū)進行寫入的線程最終均受制于命令緩沖區(qū)。此時,命令緩沖區(qū)進入等待狀態(tài)203,并且命令緩沖區(qū)的內容不能被提交到硬件,直到所有被用來執(zhí)行命令緩沖區(qū)的資源均可用。作為可以進入等待的一個例子,如果應用程序繪制一個表面,則必須在該表面可以被選擇作為紋理之前完成繪圖。
一旦滿足了等待準則,命令緩沖區(qū)進入就緒狀態(tài)204,其中調度程序考慮將其提交到協(xié)處理器。在決定應當向硬件提交哪個命令緩沖區(qū)方面,調度程序具有很大的靈活性。調度程序可以考慮命令緩沖區(qū)的優(yōu)先權(如果有),請求方線程的優(yōu)先權,系統(tǒng)的實時要求等等。一旦命令緩沖區(qū)已經被選擇作為下一個要運行的命令緩沖區(qū),該命令緩沖區(qū)進入后備狀態(tài)205。在某些系統(tǒng)上,每個協(xié)處理器只有一個命令緩沖區(qū)可以處于系統(tǒng)中的后備狀態(tài)205。
當可以向硬件提交處于后備狀態(tài)205的命令緩沖區(qū)時,系統(tǒng)將協(xié)處理器上下文交換到命令緩沖區(qū)所需的上下文,并且接著向硬件提交命令緩沖區(qū)。這種操作必須得到驅動程序的某種介入,例如使用命令緩沖區(qū)的基地址和大小初始化DMA操作。命令緩沖區(qū)保持運行狀態(tài)206,直到某種事件搶占命令緩沖區(qū)的執(zhí)行,或者已經讀取和執(zhí)行了命令緩沖區(qū)的整個內容。
如果已經執(zhí)行整個命令緩沖區(qū),則命令緩沖區(qū)進入終止狀態(tài)207,其中可以使系統(tǒng)重新初始化命令緩沖區(qū),并且使命令緩沖區(qū)在初始化狀態(tài)201可被另一個線程使用。
如果命令緩沖區(qū)被搶占,則假定硬件具有保存硬件上下文的能力,使得在出現搶占的情況下可以恢復命令緩沖區(qū)的執(zhí)行。接著,命令緩沖區(qū)可以再循環(huán)進入就緒狀態(tài)204,并且被重新提交到硬件以便從其被終止之處恢復執(zhí)行。下面的描述涉及搶占式命令緩沖區(qū)執(zhí)行。
對于上下文切換,如上所述的系統(tǒng)可以包含硬件加速或至少是借助驅動程序的上下文切換,其中驅動程序維護硬件上下文,并且上下文切換先天上可以得到硬件的支持。例如,上下文可以被高速緩存在本地視頻存儲器或其它高速存儲器中。在這種情況下,操作系統(tǒng)請求驅動程序將指定上下文加載到硬件中?;谛阅艿脑颍梢栽趩蝹€DDI(設備驅動程序接口)中指定上下文切換和命令緩沖區(qū)分配。
可選地,操作系統(tǒng)可以維護典型概念的硬件上下文,并且構造命令緩沖區(qū),其中命令緩沖區(qū)將硬件設置到對應于指定上下文的狀態(tài)。在這種情況下,在從后備狀態(tài)205切換到運行狀態(tài)206期間加載上下文必須將這種構造的命令緩沖區(qū)分配給硬件??蛇x地,可以為可選上下文切換保留命令緩沖區(qū)的頭。如果操作系統(tǒng)認為上下文切換不必要,例如由于硬件已經包含適當的上下文,系統(tǒng)可以將剛好超出上下文切換塊的命令指定成命令緩沖區(qū)的基地址。無論操作系統(tǒng)在開始執(zhí)行之前是否使用單獨命令緩沖區(qū)、命令緩沖區(qū)頭或其它機制向硬件加載上下文,由于驅動程序只知道其正在向硬件分配命令緩沖區(qū),并且不知道它們是否正在加載硬件上下文或導致繪圖命令被執(zhí)行,因此降低了驅動程序的復雜度。然而,由于使用快速存儲器對上下文切換提供的先天硬件支持具有優(yōu)于基于命令緩沖區(qū)的上下文切換的性能優(yōu)勢,驅動程序復雜度的降低付出了潛在的性能代價。然而這種系統(tǒng)更加易于進行創(chuàng)新,例如在現有驅動程序上增加輕型(lightweight)上下文切換。
對于輕型上下文,硬件上下文包含許多可能不被某些類別的應用程序需要的狀態(tài)。例如,如果協(xié)處理器是圖形處理器,則簡單的2D圖形應用程序不需要現代圖形芯片的完全多重紋理貼圖(multitexturing)、頂點光源著色(vetex shading)和象素光源著色(pixelshading)狀態(tài)。為了適應這些應用程序,系統(tǒng)可以定義一或多個輕型上下文類型,其中在開始執(zhí)行命令緩沖區(qū)之前,這些上下文類型可以更加高效地被加載到硬件中。另外,系統(tǒng)可以有可能地記得不受輕型上下文的加載影響的重型上下文狀態(tài)的部分,并且優(yōu)化后續(xù)上下文切換以避免重新加載硬件中已經出現過的狀態(tài)。這種優(yōu)化可以由需要在驅動程序層次提供上下文切換的形式支持的系統(tǒng)來執(zhí)行,也可以由使用命令緩沖區(qū)或其它機制人工加載硬件上下文的系統(tǒng)來執(zhí)行。
對于中斷處理,由于中斷利于在協(xié)處理器硬件正在工作的同時保證主機微處理器的有用工作的性能,中斷可以被用于高效管理協(xié)處理器的計算資源。當前描述的實施例詳細說明了系統(tǒng)中某些涉及中斷的應用程序,以及中斷始終支持的特性。在所有情況下,中斷為操作系統(tǒng)提供向客戶端通知導致中斷的事件的機會,無論是通過寫入存儲器,還是通過通知諸如事件的線程同步對象。
對于有關命令緩沖區(qū)完成的中斷,當命令緩沖區(qū)完成執(zhí)行時,系統(tǒng)得到通知,所以系統(tǒng)可以選擇另一個命令緩沖區(qū)提交到硬件。在協(xié)處理器通知中斷直到提交另一個命令緩沖區(qū)之間無論協(xié)處理器是否空閑,或者在協(xié)處理器開始執(zhí)行先前排隊的命令緩沖區(qū)(如下所述)的情況下,系統(tǒng)一定得到通知,因此可以選擇另一個命令緩沖區(qū)以便提交(或最終提交)到硬件。由于中斷通知命令緩沖區(qū)已經執(zhí)行,系統(tǒng)可以釋放命令緩沖區(qū)需要的所有資源,解鎖需要那些資源的待執(zhí)行命令緩沖區(qū),并且也可以再生(recycle)命令緩沖區(qū)以便被另一個應用程序使用。
對于命令緩沖區(qū)中的通知中斷命令,如果可以寫入指示硬件在前面的命令完成執(zhí)行時通知中斷的命令,系統(tǒng)可以為客戶端應用程序提供粒度精細、受應用程序控制的完成通知,范圍包括從寫入存儲器片段到遇到中斷命令時設置事件或其它線程同步對象。
對于圖形處理器的有關出現VSYNC的中斷,當出現VSYNC(顯示設備垂直折回)時發(fā)生的中斷允許系統(tǒng)中具有各種能力。
如果系統(tǒng)正在組成顯示幀和進行翻頁,VSYNC中斷會通知需要組成顯示幀的后備緩沖區(qū)(即為下一個VSYNC準備)。
系統(tǒng)可以使用VSYNC通知估測未來幀的呈現時間,并且使客戶端可得到這種信息。對于視頻,則允許組成對應于呈現時間的插值和/或去交織輸出幀。對于受連續(xù)時域控制的時間動畫,則允許按照對應于呈現的精確時間呈現動畫。
系統(tǒng)可以使用VSYNC通知以允許客戶端將其幀速率節(jié)制到顯示器刷新頻率,即在以85赫茲的頻率刷新顯示器時,以85赫茲的頻率進行呈現。對于不高明(naive)的客戶端應用程序,可以使呈現調用同步(使線程被阻塞,直到通知事件;通知有關VSYNC的事件)。更加復雜的客戶端會具體等待事件,并且在完成其繪制和等待顯示器刷新之間的時間內進行有用工作。
對于當顯示器刷新到達指定掃描線時出現的中斷,當顯示器刷新達到指定掃描線時進行通知的中斷允許實現定時傳送的系統(tǒng)細致地控制預期的呈現時間。令T=0表示當前顯示的基本內容的呈現時間,T=1表示在下一個VSYNC時、將被切換到并且被最終用戶看見的后備緩沖區(qū)的呈現時間,T=2表示將在下一個VSYNC時組成的后備緩沖區(qū)的呈現時間,而T=3表示再下一個顯示幀的呈現時間。當客戶端請求繪圖的呈現時間時,定時傳送的不高明實現可以指定T=3,以保證在需要將結果組成到后備緩沖區(qū)之前,應用程序有足夠時間完成其繪制。然而如果顯示最近剛啟動刷新,則可能有時間使客戶端在T=2處進行繪圖,并且仍然及時完成,以便參與VSYNC出現之后的后備緩沖區(qū)組成。當顯示器刷新指定掃描線時進行通知的中斷,允許定時傳送子系統(tǒng)根據顯示器是否將要完成刷新為客戶端指定不同的呈現時間。例如,系統(tǒng)可以為客戶端指定T=2以作為預期呈現時間,直到顯示器被刷新一半;接著可以開始為客戶端指定T=3以作為預期呈現時間。甚至可以根據系統(tǒng)負載調節(jié)導致這種行為變化的掃描線數量。
通過設置這種中斷以便在顯示設備刷新要更新的區(qū)域之后立即進行通知,可以實現對基本內容的無斷裂更新。當通知中斷時,可以請求圖形處理器執(zhí)行更新顯示所需的繪圖操作,并且不會觀察到斷裂,除非系統(tǒng)需要很多長的時間執(zhí)行那些命令,以致當發(fā)生更新時顯示器刷新已經到達更新區(qū)域。
對于同步,為了執(zhí)行適當的同步,系統(tǒng)會跟蹤被客戶端應用程序操作的對象之間的相關性,并且保證在命令緩沖區(qū)分配期間那些相關性得到遵守。圖2中的等待狀態(tài)203表示這樣的時機,即進行等待,直到完成命令緩沖區(qū)所依賴的操作。例如,如果應用程序對一個表面進行著色,并且接著選擇該表面作為紋理,則必須在可以進行其它繪圖之前完成著色。類似地,如果應用程序對一個表面進行繪圖,并且接著請求以該表面為源表面的Blt,則在Blt可以開始之前必須完成繪圖。同步要求的另一個例子是翻頁如果應用程序創(chuàng)建覆蓋表面,在覆蓋的后備緩沖區(qū)中繪圖并且請求翻頁,則隨著繪圖被作用到覆蓋的前端緩沖區(qū)中,必須在觀察到翻頁或呈現內容之前完成繪圖。
在如上所述調度命令緩沖區(qū)分配的系統(tǒng)中,可以適應所有這些同步要求。當應用程序向命令緩沖區(qū)寫入命令時,系統(tǒng)可以跟蹤該命令緩沖區(qū)的執(zhí)行需要哪些資源。某種資源可以通過非獨占的方式獲得(例如調色板,要讀取的表面,紋理圖所來自的表面),而其它資源必須以獨占方式獲得(例如要寫入的表面,或對其進行3D著色的表面)。系統(tǒng)可以有可能地影響線程同步原語,以便實施這種命令緩沖區(qū)的同步;例如WindowsNT中存在可以被任何數量的線程非獨占地獲得,或被單線程獨占獲得的線程同步原語。如果命令緩沖區(qū)具有關于需要獲得的資源和是否需要獨占訪問的相關列表,則分配命令緩沖區(qū)的線程通過等待與命令緩沖區(qū)相關的同步對象,可以將命令緩沖區(qū)從等待狀態(tài)切換到就緒狀態(tài)。一旦線程獲得所有需要的同步對象,命令緩沖區(qū)可以被提交到硬件。
系統(tǒng)必須檢測這樣的請求資源的情況,其中該資源取決于其能夠變得可用之前已經執(zhí)行的命令緩沖區(qū)中較早存在的命令。當這種情況發(fā)生時,線程必須提交命令緩沖區(qū),并且開始組成另一個命令緩沖區(qū)。第二個命令緩沖區(qū)可以簡單地指定資源,并且上述同步機制會適應相關性。
對于命令緩沖區(qū)的排隊,由于圖形硬件的高性能,使命令緩沖區(qū)完成和提交另一個命令緩沖區(qū)之間的等待時間最小是關鍵因素。否則,圖形硬件會浪費寶貴的時間以等待提交另一個命令緩沖區(qū)。這個問題的一個可能的解決方案是在當前命令緩沖區(qū)完成執(zhí)行之前使上下文切換和命令緩沖區(qū)分配排隊。接著,假定硬件和驅動程序支持這種能力,當當前命令緩沖區(qū)已經完成時,硬件可以立即開始執(zhí)行另一個命令緩沖區(qū)。于是,系統(tǒng)具有更多時間以準備另一個命令緩沖區(qū)的執(zhí)行如果在另一個命令緩沖區(qū)被排隊之前圖形硬件完成了新命令緩沖區(qū)的執(zhí)行,則圖形硬件只會進入空閑。
對于搶占式命令緩沖區(qū)執(zhí)行,這里描述的系統(tǒng)為硬件提供對搶占的支持。各種事件均可以有可能地導致執(zhí)行期間的命令緩沖區(qū)的搶占,范圍包括從諸如VSYNC的外部事件到具有時間定量的硬件執(zhí)行。為了實現這個特性,硬件和驅動程序必須允許保存硬件上下文,使得在其被放棄時可以恢復被搶占的命令緩沖區(qū)的執(zhí)行;并且必須通知操作系統(tǒng),使得操作系統(tǒng)可以將命令緩沖區(qū)回退到圖2所述的就緒狀態(tài)。實現這種搶占的一個原因是保證在VSYNC之后立即組成顯示幀(保證當出現下一個VSYNC時顯示幀已經就緒)。具有時間定量的硬件執(zhí)行會導致在執(zhí)行了某段設定的時間,例如2毫秒之后搶占命令緩沖區(qū)。如果命令緩沖區(qū)包含非常費時的命令,例如繪制較大的、帶紋理貼圖的、alpha混合的三角,硬件可能必須搶占其執(zhí)行,以便允許其它命令緩沖區(qū)被考慮提交。
對于命令緩沖區(qū)異構性,雖然前面的討論通常認為命令緩沖區(qū)是同構的,然而本發(fā)明的系統(tǒng)沒有理由不能適用于具有對應硬件上下文的專用命令緩沖區(qū)。例如,系統(tǒng)可能希望在命令緩沖區(qū)層次上以不同方式進行2D/3D繪制和視頻解碼,在分配指定類型的命令緩沖區(qū)之前加載不同硬件上下文。
認為命令緩沖區(qū)是異構的思路能夠與輕型上下文的思路形成最優(yōu)配合,因為當在輕型上下文上操作時,只有可用命令的子集可用。
對于用于檢測命令緩沖區(qū)溢出的保護頁面,對命令緩沖區(qū)進行寫入的用戶模式代碼可以跟蹤命令緩沖區(qū)中留下的字節(jié)數量,并且檢測寫入指定命令所需的字節(jié)數量何時會超過可用字節(jié)數量。然而由于大量變量被用于需要寫入這個緩沖區(qū)的命令,人工跟蹤這個字節(jié)計數是一項繁重和易出錯的編程任務。一個降低此任務的復雜度的方法是在剛好超出命令緩沖區(qū)終結處的部分分配保護頁面,并且將該頁面標記成不可寫的。使緩沖區(qū)過載的存儲器寫入會導致異常。對命令緩沖區(qū)進行寫入的用戶模式代碼可以用結構化異常處理塊包圍寫指令,監(jiān)視異常,并且在命令緩沖區(qū)溢出時向運行時刻例程返回錯誤。與在運行時刻例程和用戶模式驅動程序之間傳遞字節(jié)計數的可選實現相比,針對用戶模式驅動程序的接口會更加簡單和高效。
對于不正確的命令緩沖區(qū)內容,在允許用戶模式代碼寫入命令緩沖區(qū)的系統(tǒng)中,惡性寫入可以在命令緩沖區(qū)被提交到硬件之前破壞命令緩沖區(qū)的內容。如果沒有認真進行防范,這種惡化會使系統(tǒng)掛起或行為不定。根據底層的硬件設計,存在若干處理這種可能的方式。
如果硬件具有在讀取和執(zhí)行命令緩沖區(qū)時對其進行驗證的能力,則可以在遇到非法命令時通知中斷或盡早終止命令緩沖區(qū)。系統(tǒng)可以通過錯誤返回、異?;蚰承┢渌鼨C制向客戶端進程通知這種事件。
可選地,如果硬件在執(zhí)行命令緩沖區(qū)時不能對其進行驗證,則可以為系統(tǒng)提供這樣的選項,其中如果系統(tǒng)在某個時段內沒有響應,則復位硬件。
對于選入單線程的設備,一種降低系統(tǒng)中線程同步數量的方式是允許將設備選入線程,并且對于具有″當前設備″概念的線程,使得設備和線程之間存在一一對應。這個方案的優(yōu)點在于,在不必獲得臨界段、互斥或其它確?;コ獾耐皆Z的情況下,可以在設備的范圍內保證互斥。偏離到設備范圍外部的操作(例如在可以全局訪問的表面上執(zhí)行某種操作)仍然必須進行同步。通過允許將諸如表面的全局對象綁定到設備,這種操作甚至可以影響綁定到線程的設備的互斥性質。
實現線程的″當前設備″概念的系統(tǒng)仍然可以允許應用程序訪問任意設備。允許這種訪問的軟件構造只須以某種額外的性能代價與其它線程分離和同步。
對于令牌流和獨立于硬件的繪圖命令的保持,某些應用程序具有在獨立于硬件的存儲器片段中高速緩存用于圖形硬件、被稱作″令牌流″的一系列命令的能力,可以通過允許應用程序分攤(amortize)組成緩沖區(qū)所需的處理量來提高性能。例如,一系列包含旋轉的繪圖命令可以被寫入這種緩沖區(qū)中;因此,只通過改變緩沖區(qū)中的少數數值并重新提交令牌流,應用程序可以按照不同的旋轉角度重繪畫面。DIRECT3D執(zhí)行緩沖區(qū)是實現這個思路的好例子。
在本發(fā)明中,令牌流充當應用程序和硬件之間的重要中間步驟。在某點上,繪圖命令必須被轉換成特定于硬件的命令,以便被硬件執(zhí)行;但是在應用程序進行繪圖調用時實時執(zhí)行該轉換(所謂的″立即模式″)不總是執(zhí)行繪圖的最高效方式。并且,由于轉換成特定于硬件的命令的細節(jié)使得應用程序難以或不能編輯那些緩沖區(qū),特定于硬件的緩沖區(qū)(在本文被稱作″命令緩沖區(qū)″)對應用程序實質上是非透明的。因此,根據系統(tǒng)是否需要實現針對GPU的一系列命令的獨立于硬件、有可能可編輯的描述,令牌流充當可以或不可以被系統(tǒng)實現的重要中間數據結構。
對于顯示列表和保持的硬件相關繪圖命令,在圖形硬件領域存在以非透明于應用程序的方式高速緩存一系列繪圖命令的先例,據稱也可以更有效地執(zhí)行繪圖命令系列。這些高速緩存的繪圖命令通常被稱作″顯示列表″。其思路在于,畫面的靜態(tài)單元(例如剛性對象)可以被″呈現″到顯示列表中,并且當繪制畫面時,應用程序每當進行顯示器更新時會調用適當的顯示列表,而不是執(zhí)行繪圖調用。實際上,顯示列表的執(zhí)行特性在不同實現中的差別很大,使得應用程序為了決定是否使用它們而必須作出繁多的關于底層實現的假設。
通過使用將DDI層次的命令轉換成特定于硬件的命令的用戶模式驅動程序接口,本文中描述的系統(tǒng)可以容易地暴露顯示列表功能。如何構造顯示列表的細節(jié)會有所不同應用程序可以設置導致繪圖命令被記錄在顯示列表中而不是被執(zhí)行的模式(在OpenGL中,通過調用glNewList設置這個模式),或者應用程序可以構造令牌流并且接著請求將其轉換成顯示列表。在任何情況下,系統(tǒng)會請求用戶模式驅動程序部件將命令的DDI對等命令轉換成特定于硬件的命令,并且將其寫入臨時緩沖區(qū)中(由于在已經執(zhí)行轉換之前不知道特定于硬件的命令流的確切容量)。當終止記錄時,或者在已經分析令牌流時,系統(tǒng)可以分配具有適當容量的命令緩沖區(qū),并且將轉換的硬件命令拷貝到命令緩沖區(qū)中,使得硬件可以容易地執(zhí)行命令緩沖區(qū)。
由于已經針對底層硬件實現作出的假設,本發(fā)明中實現顯示列表具有這樣的優(yōu)點,即硬件實現之間存在更加一致的執(zhí)行特性。換言之,如果顯示列表使一個硬件實現具有性能優(yōu)勢,則顯示列表很可能在所有硬件實現上均是非??焖俚摹τ趹瞄_發(fā)者而言,由于使用顯示列表對于應用開發(fā)者是一種負擔,并且應用開發(fā)者必須能夠得知有關何時付出利用顯示列表所需的額外投資的決策,這種一致性是巨大的優(yōu)勢。
對于執(zhí)行多個命令緩沖區(qū)的圖形硬件,可以修改系統(tǒng)以支持可以同時執(zhí)行多個命令緩沖區(qū)的圖形硬件。例如,圖形硬件可以包含多個能夠并行操作的離散圖形處理器。雖然某些這樣的硬件通過″掃描線交錯″使用并行處理提高填充速率,然而也可以通過這種處理器同時執(zhí)行不同的命令緩沖區(qū)。提供這種硬件體系結構需要允許多個命令緩沖區(qū)被設置到后備狀態(tài),并且使內核模式調度程序保證要執(zhí)行的多個命令緩沖區(qū)除非在只讀方式下否則不訪問任何相同的資源(例如紋理貼圖)。
對于虛擬化資源,這里描述的系統(tǒng)能夠虛擬化資源,例如視頻存儲器表面、頂點和索引緩沖區(qū)、調色板和其它有限硬件資源。術語″虛擬化″是指這樣的思路,其中應用程序具有的資源看上去多于系統(tǒng)能夠提供的資源。例如,″虛擬存儲器″允許應用程序分配的存儲器多于系統(tǒng)中物理提供的存儲器,并且操作系統(tǒng)針對本地大容量存儲設備交換(swap)存儲器,以便維持存儲器是物理提供的存儲器的假象。CPU具有允許操作系統(tǒng)監(jiān)視存儲器利用率的手段,使得當前不需要的物理存儲器可以被″換出″到磁盤上,以便為需要的存儲器留出空間。
在本發(fā)明中,通過跟蹤指定命令緩沖區(qū)的執(zhí)行所需的資源,并且保證在向硬件發(fā)出命令緩沖區(qū)時那些資源可用,可以通過類似方式虛擬化諸如視頻存儲器的GPU資源??梢酝ㄟ^類似于上述虛擬存儲器的方式管理視頻存儲器,其中系統(tǒng)將系統(tǒng)存儲器視作用于″換出″視頻存儲器表面的″大容量存儲設備″。當選擇執(zhí)行需要已經換出到系統(tǒng)存儲器的表面的命令緩沖區(qū)時,操作系統(tǒng)必須分配新的視頻存儲器表面(可以通過釋放視頻存儲器表面或將其它表面從視頻存儲器換出到系統(tǒng)存儲器來留出空間),并且將系統(tǒng)存儲器內容拷貝到該表面。所得到的表面可能會位于不同于其初始位置的位置上,因此操作系統(tǒng)在將命令緩沖區(qū)分配給硬件之前必須跟蹤對視頻存儲器表面的引用,并且″固定″命令緩沖區(qū)中的那些引用。
圖4圖解了上述發(fā)明的示例性用戶模式驅動程序DLL實現。在圖4中,應用程序401、運行時刻例程402和部分驅動程序404工作在用戶模式,以便將繪圖命令寫入DMA存儲器中的特定于硬件的命令緩沖區(qū)。在當代的PC系統(tǒng)中,這些寫入通常是針對AGP存儲器的非臨時(non-temporal)寫入;如此實現中所述,應用程序401駐留在EXE中,運行時刻例程402和用戶模式驅動程序403駐留在動態(tài)鏈接到應用程序401的DLL中。如下所述,系統(tǒng)的用戶模式部分的這些細節(jié)可以改變;具體地,應用程序401、應用程序401和運行時刻例程402,或應用程序401、運行時刻例程402和用戶模式驅動程序403可以有可能地是得到管理的代碼。
為了防止未經授權地替換用戶模式驅動程序403,系統(tǒng)針對要加載的用戶模式驅動程序DLL403查詢內核驅動程序405(由于在安全方面內核代碼是可信的)。
命令緩沖區(qū)調度程序404(″調度程序″)和內核驅動程序405一起工作在內核模式,以便向硬件406分配命令緩沖區(qū)(調度程序404決定應當分配哪個命令緩沖區(qū),而內核驅動程序405指示硬件406按照調度程序的請求分配命令緩沖區(qū))。該系統(tǒng)考慮到,驅動程序邏輯的組件會駐留在用戶模式驅動程序DLL403中,而不是駐留在內核驅動程序405中。雖然用戶模式驅動程序可以包含大量將DDI層次調用映射成特定于硬件的命令的代碼(其操作復雜且易出錯,尤其在編譯頂點和/或著色程序時),然而內核驅動程序相對較小和簡單,從而使系統(tǒng)健壯性最大。
圖5說明了在應用程序進行API調用以執(zhí)行圖形操作時出現的事件序列。圖5的模塊圖部件被加上陰影用戶模式部件具有中等陰影,內核模式部件陰影較少,而硬件具有深陰影。圖5中沒有將命令緩沖區(qū)具體描述成硬件部件;根據圖4,用戶模式驅動程序520將特定于硬件的命令寫入設備的當前命令緩沖區(qū),命令緩沖區(qū)調度程序(部分系統(tǒng)內核支持530)通過內核模式驅動程序550向硬件560分配命令緩沖區(qū),而完成的命令緩沖區(qū)被再循環(huán)以便被系統(tǒng)中的應用程序使用。應當注意,多個應用程序500可以有可能共享可用命令緩沖區(qū)池,其中系統(tǒng)內核支持530仲裁對該資源的共享。
當應用程序500初始創(chuàng)建繪圖上下文501時,系統(tǒng)內核支持530進行檢查以確定是否可以創(chuàng)建新命令緩沖區(qū)531。如果是這樣的話,創(chuàng)建532和初始化533新命令緩沖區(qū),并且線程在應用程序500可以執(zhí)行繪圖調用502之前獲得初始化的命令緩沖區(qū)534。如果在步驟531不能創(chuàng)建命令緩沖區(qū),則應用程序500必須等待,直到初始化的命令緩沖區(qū)變得可用534。一旦應用程序500獲得命令緩沖區(qū),應用程序500、運行時刻例程510和用戶模式驅動程序520進入3個部件之間的典型交互,這3個部件使得特定于硬件的命令被寫入命令緩沖區(qū)。運行時刻例程510驗證511應用程序500的繪圖調用502;接著檢查512確定是否需要刷新當前命令緩沖區(qū)。如果不需要,繪圖命令被轉換成簡單和典型的DDI調用513,并且被傳遞到用戶模式驅動程序520。驅動程序將DDI調用轉換成特定于硬件的命令,并且試圖將其寫入命令緩沖區(qū)。如果刷新檢查522確定命令緩沖區(qū)中沒有空間,則必須向系統(tǒng)內核支持530提交命令緩沖區(qū),并且在可以寫入和繼續(xù)執(zhí)行命令之前必須從命令緩沖區(qū)獲得新的命令緩沖區(qū)。如果運行時刻例程510或用戶模式驅動程序520確定需要垢“刷新,則在步驟535將命令緩沖區(qū)加到等待排隊中。該時刻,系統(tǒng)內核可以檢查536是否可以立即提交命令緩沖區(qū)(通常由于沒有命令緩沖區(qū)在運行)。如果不可以,則命令緩沖區(qū)停留在等待排隊中,并且必須獲得534新命令緩沖區(qū)。應當注意,這個進行等待、直到適當的初始化命令緩沖區(qū)可用并且將其分配給設備的功能模塊,與應用程序500在可以開始繪圖之前需要的操作相同。
箭頭也被加上陰影。在應用程序500初始化和執(zhí)行繪圖命令,運行時刻例程510和用戶模式驅動程序520將那些繪圖命令轉換成特定于硬件的命令并且將其寫入命令緩沖區(qū)時,黑箭頭表示應用程序500的″典型″線程執(zhí)行。如果運行時刻例程510或用戶模式驅動程序520確定需要刷新(即必須提交命令緩沖區(qū)),則由綠箭頭指定的執(zhí)行的線程如下所述命令緩沖區(qū)被加到等待隊列并且被提交(如果可以),接著獲得新命令緩沖區(qū)以便可以繼續(xù)執(zhí)行。
中等陰影箭頭表示當命令緩沖區(qū)在步驟535被加到等待隊列之后命令緩沖區(qū)所得到的″典型″路徑。如果可以立即分配命令緩沖區(qū)(檢查536),則命令緩沖區(qū)被標記成就緒537,并且被選擇分配540。否則,當當前運行的命令緩沖區(qū)完成執(zhí)行時,等待命令緩沖區(qū)在普通事件過程中必須被標記成就緒。
當選擇分配540就緒命令緩沖區(qū)時,系統(tǒng)內核支持530使內核驅動程序550將硬件上下文切換到適當的上下文551,并且為硬件分配命令緩沖區(qū)552。硬件接著讀取和執(zhí)行命令緩沖區(qū)561,直到它被搶占或命令緩沖區(qū)完成。如果命令緩沖區(qū)正常完成563,則硬件通知中斷,而中斷服務例程553執(zhí)行。此時ISR可能希望保存硬件上下文554,雖然驅動程序可能希望將此操作延遲到上下文切換551,以防硬件請求連續(xù)執(zhí)行在相同上下文上工作的2個命令緩沖區(qū)。在步驟554之后,內核系統(tǒng)支持530可以釋放命令緩沖區(qū)538需要的資源,并且通知任何諸如事件的通知機制讓有關客戶端知道命令緩沖區(qū)已完成。在步驟538之后,內核系統(tǒng)支持具有2個不同的任務它必須重新初始化重新可用的命令緩沖區(qū)并且將其加到初始化池533中,它必須解鎖任何等待的命令緩沖區(qū)并且將它們移動到就緒隊列539中。在步驟539之后,可以選擇分配540另一個命令緩沖區(qū)。
如橙色箭頭所示,處理搶占的情況略微不同普通命令緩沖區(qū)完成。由于被搶占的命令緩沖區(qū)不被完成,系統(tǒng)不準通知客戶端其完成(步驟538)或解鎖相關命令緩沖區(qū)(步驟539)。驅動程序保存部分執(zhí)行的命令緩沖區(qū)的上下文554以便其可以在發(fā)生搶占時重新啟動,通知任何需要知道關于搶占的情況的客戶端541,并且選擇分配540下一個就緒命令緩沖區(qū)。
出現可以導致搶占的情況的例子包含諸如VSYNC或顯示器刷新到達具體位置(例如掃描線)的外部事件,或時間定量超時。另外,為了管理時間定量,操作系統(tǒng)可以使用一種通過調用內核驅動程序550搶占圖形處理器的機制。這等同于硬件仲裁的時間定量超時,不同之處在于,決定何時搶占圖形處理器的復雜度和責任取決于系統(tǒng)內核支持530而不是硬件560。假定系統(tǒng)已經預先設置對這種事件的響應,例如在刷新通過某個掃描線時執(zhí)行一系列Blt命令(為了無斷裂更新的目的)。
注意,前面提供的許多思路可以被應用于結合圖4和5描述的系統(tǒng)。例如,如上所述,通過使內核驅動程序550分配上下文切換命令緩沖區(qū),系統(tǒng)內核支持540可以有可能地承擔上下文切換任務551。又例如,如上所述,通過區(qū)分上下文類型和可能的命令緩沖區(qū)類型,在這個系統(tǒng)中可以支持輕型上下文。又例如,可以略微修改步驟540(″選擇分配就緒命令緩沖區(qū)″)以利用上述思路,其中一旦運行命令緩沖區(qū)完成,硬件開始執(zhí)行預先選擇的命令緩沖區(qū)。又例如,一個使運行時刻例程510和用戶模式驅動程序520高效檢測命令緩沖區(qū)溢出522的方式是,使系統(tǒng)內核支持530在各個命令緩沖區(qū)的終結處分配不可寫保護頁面,并且使用結構化異常處理檢測何時出現寫入保護頁面的嘗試。最終,通過在非法命令使硬件產生中斷時通知異常,或者通過在硬件長時間沒有響應時通過專門的內核驅動程序550入口點復位硬件,使系統(tǒng)在出現非法命令緩沖區(qū)時健壯的思路可以容易地合并到該系統(tǒng)中。
圖6圖解了示例性的硬件可使用的典型命令緩沖區(qū)格式,并且是本發(fā)明如上所述的具體實現。除了運行時刻例程602(部分操作系統(tǒng))使用典型命令緩沖區(qū)格式將命令寫入緩沖區(qū)之外,這個實現類似于結合圖4描述的實現。在本領域存在這種格式的先例,例如DIRECT3D中使用的″DrawPrimitives2″令牌流。如果這個格式適于硬件的直接耗用,則除了硬件可以直接耗用運行時刻例程602的輸出而不是需要用戶模式驅動程序DLL403中的轉換層之外,如結合圖4描述的那樣進行執(zhí)行。
圖7圖解了中間(非硬件可用)典型命令緩沖區(qū)。圖7描述了系統(tǒng)的另一個變型,其中運行時刻例程702產生具有已知格式的命令緩沖區(qū)703,并且接著調度該緩沖區(qū)。一旦被選擇分配,內核模式驅動程序405必須讀取緩沖區(qū),并且將其轉換成特定于硬件的命令。圖7示出了那些被內核模式驅動程序寫入DMA存儲器707的命令,盡管在這種系統(tǒng)中可以使用任何控制硬件的機制。圖7的系統(tǒng)與DIRECT3D驅動程序結構化的現有技術的類似之處在于,DrawPrimitives2令牌流被傳遞到內核模式驅動程序705。主要區(qū)別在于,圖7的系統(tǒng)考慮對命令緩沖區(qū)進行OS仲裁的調度,而DIRECT3D目前沒有正式調度GPU的時間。
對于線程/GPU上下文的聯系,本領域的技術人員可以理解對CPU上執(zhí)行的線程的定義線程封裝了必須通過操作系統(tǒng)上下文切換的易失CPU寄存器和其它CPU狀態(tài),以便允許多個任務同時工作。通過按照足夠精細的粒度交換線程上下文以進出CPU,并且允許各個線程執(zhí)行一定的時間(通常被稱為″線程定量″),操作系統(tǒng)可以提供線程并行執(zhí)行的假象。
上述系統(tǒng)類似地提供了對CPU線程上下文的GPU模擬。然而應當理解,如果GPU上下文與CPU線程上下文相關,使得只能通過該線程中運行的CPU代碼操作GPU上下文,則存在某些益處。本領域存在CPU和GPU上下文之間的一一對應的先例(參見OpenGL API),其中CPU線程上下文只能具有一個與之相關的GPU上下文(″當前上下文″)。通過有關OpenGL加速器提供商提供的單片驅動程序協(xié)同這種系統(tǒng)中的GPU上下文的管理,其中很少不需要操作系統(tǒng)的參與,因此在OpenGL環(huán)境中由線程/GPU上下文聯系得到的益處明顯不同于這里描述的系統(tǒng)中的益處。
對于效率而言,將GPU上下文與單個CPU線程聯系起來所得到的明顯益處是,由于已知線程是唯一一個可以在GPU上下文上工作的線程,所以修改GPU狀態(tài)不需要線程同步(例如獲得旋轉鎖、臨界段或互斥)。降低線程同步的數量使性能受益。例如,在出現圖5描述的高頻率事件(繪圖調用502、驗證511、刷新檢查512、轉換到DDI513、從DDI轉換到硬件命令521、刷新檢查522和命令寫入523)期間不必獲得線程同步原語。
下面的描述說明了現有線程同步原語的作用。本領域的技術人員可以理解,現代操作系統(tǒng)提供許多線程同步原語,例如旋轉鎖、臨界段、互斥、事件、信號燈、資源(可以被多個線程用于共享訪問,或被單線程用于獨占訪問)等等。這些線程同步原語通常允許線程執(zhí)行到暫停執(zhí)行,直到發(fā)生某種事件(例如外部事件、資源變得可用等等)。如果線程正等待某種這樣的同步原語,則操作系統(tǒng)檢測何時該原語得到″通知″,使得線程可以繼續(xù)執(zhí)行。上面列舉的各種同步原語的語義有很好的文檔支持。為了圖解,我們會描述″互斥″原語,該原語被用來協(xié)同對共享資源的訪問。每次只有一個線程可以獲得″互斥″,并且在另一個線程可以獲得″互斥″之前必須釋放″互斥″。當互斥被釋放時,不止一個線程可能正等待它,在這種情況下操作系統(tǒng)必須將互斥指定給單線程,并且解鎖該線程,直到其接著釋放互斥。將GPU上下文與CPU線程相關的益處獨立于線程同步原語的語義和實現的細節(jié)(本領域的技術人員可以理解),因此我們不會在這里關注這些細節(jié)。
這里的基本觀點在于,如果GPU上下文與系統(tǒng)中的一個CPU線程相關,則使用線程同步原語暫停該線程實質上使得該GPU上下文對于應用程序不可用,直到CPU線程被解鎖。只要線程被暫停,由于只有暫停的線程可以請求GPU上下文執(zhí)行繪圖或其它操作,則不能請求GPU上下文執(zhí)行繪圖或其它操作。如果底層系統(tǒng)提供適當的低級手段(例如將待執(zhí)行繪圖命令刷新到對應GPU),則應用程序可以使用線程同步原語協(xié)同繪圖和其它線程操作。
更加重要的是,存在許多應用程序,這些應用程序使操作系統(tǒng)暫停已經將GPU上下文選入其中的線程,以防止那些GPU被操作,直到所涉及的線程已經被解鎖。例如,為了進行資源管理,可能需要為單個應用程序提供所有GPU資源(例如在Windows中,如果獨占全屏幕的DIRECTX游戲得到應用程序焦點)。操作系統(tǒng)可以暫停其它希望用GPU繪圖的線程,使得它們不浪費寶貴的時間以嘗試繪圖,而繪圖所需的資源對于它們是不可用的。
對于集成CPU和GPU上下文切換,如果加強如上所述的GPU上下文/CPU上下文聯系,使得CPU上下文只能具有一個相關的GPU上下文,則對于CPU和GPU之間存在密切聯系的某些硬件體系結構(例如集成和/或UMA圖形體系結構),可能具有另一個益處。在這種情況下,操作系統(tǒng)的線程上下文切換代碼可以在加載CPU的上下文的同時加載相關GPU上下文。這種實現策略在某些系統(tǒng)中尤其有利,其中CPU代碼不必向駐留在圖5所述的外部存儲器中的命令緩沖區(qū)寫入GPU命令。由于只有線程的當前GPU上下文可以被其上下文位于CPU中的線程的上下文中執(zhí)行的代碼操作,因此與將那些命令寫入緩沖區(qū)以便GPU以后耗用的方式相反,在加載CPU上下文的同時使對應于線程的GPU上下文的硬件寄存器對該線程可用的方式利于立即向GPU分配繪圖命令。例如,在x86體系結構上,硬件寄存器可以被映射到端口I/O空間,因此IN/OUT指令可用來和GPU通信;或者可選地,它們可以作為存儲器映射寄存器被暴露,使得針對特定存儲器位置的讀寫會與GPU通信。這些設施必須伴隨有針對提交到硬件的命令的嚴格驗證,以防止帶缺陷或惡意代碼產生的虛假操作崩潰或破壞操作系統(tǒng)。圖5中的用戶模式驅動程序520接著會簡單地在這些暴露給當前線程的硬件設施上執(zhí)行操作,而不是向命令緩沖區(qū)寫入命令。
這種方案有效地將圖5中解決的多數或所有調度和等待問題合并到操作系統(tǒng)的線程調度機制中。例如,操作系統(tǒng)包含暫停直到指定資源可用之前不能執(zhí)行的線程的設施(例如,在被換入之后變得可用的存儲器片段);必須加強這些設施,使得具有當前GPU上下文的線程會暫停,直到繼續(xù)執(zhí)行所需的所有資源變得可用,其中包含該線程的當前GPU上下文所需的資源。就象操作系統(tǒng)中的虛擬存儲器/頁面調度功能那樣,實現這種系統(tǒng)需要操作系統(tǒng)和底層硬件設施之間的緊密協(xié)同。雖然這種系統(tǒng)的不高明的實現會導致更加費時的線程上下文切換,然而在其上下文當前被加載的CPU線程沒有最新GPU上下文的情況下,可以簡單地實現優(yōu)化,例如不上下文切換GPU。
結合圖4-7描述的系統(tǒng)可以實現得到管理的代碼。例如,2002年1月4日提交、在標題為″Title of Managed Drivers Application″、得到共同授權的待審美國專利申請10/039,035中描述了這樣的系統(tǒng)和方法,所述系統(tǒng)和方法管理具有中間語言形式(獨特的圖形處理方式)的對象和圖形系統(tǒng)。尤其是,圖5的系統(tǒng)可以實現得到管理的代碼,其中應用程序500、運行時刻例程510和/或用戶模式驅動程序520的部分以中間語言形式傳送,并且在客戶端上被JIT編譯。3個部件會以中間語言形式被分別傳送到客戶端。JIT編譯器接著將它們合成為包含所有3個部件的部分的統(tǒng)一目標代碼片段。這種體系結構的潛在優(yōu)勢是可以執(zhí)行更優(yōu)的目標代碼;除了諸如針對客戶端計算機上可用的微處理器的優(yōu)化的優(yōu)點之外,應用程序500的針對入口點的調用中的常數可以被傳遞到運行時刻例程510和用戶模式驅動程序520,可能導致目標代碼只向命令緩沖區(qū)寫入少量常數字,而不是為達到相同結果而越過若干函數調用的邊界。由于用戶模式驅動程序520具體針對客戶端上的圖形硬件,所以應用程序500的中間語言形式仍然獨立于硬件。
雖然通過為所有3個部件(應用程序500、運行時刻例程510和用戶模式驅動程序520)產生得到管理的代碼可以達到最大可能的性能改進,然而系統(tǒng)可以使應用程序500和運行時刻例程510得到管理,并且與分立的用戶模式驅動程序520交互,甚至只使應用程序500得到管理,并且與分立的運行時刻例程510和用戶模式驅動程序520交互。事實上,可以使這些子系統(tǒng)和平共處,其中假定運行時刻例程510和/或用戶模式驅動程序520的中間語言和用戶模式DLL形式均可用。
圖6和7的系統(tǒng)也可以因后綁定的得到管理的代碼而受益,如上所述。如果運行時刻例程502和602被管理,JIT可以執(zhí)行優(yōu)化,例如在運行時刻進行參數驗證檢查。在圖6的系統(tǒng)中,JIT產生的統(tǒng)一目標代碼片段會向可DMA的存儲器寫入典型命令緩沖區(qū)數據,以便最終提交到硬件。在圖7的系統(tǒng)中,JIT產生的目標代碼會向中間緩沖區(qū)發(fā)出數據,以便內核模式驅動程序分析和轉換。
由于多個客戶端應用程序可能希望向硬件發(fā)送命令,并且DMA是使應用程序以彼此之間的干擾或沖突最小的方式并行操作的簡單方式,本文描述的大多數系統(tǒng)假定硬件具有DMA能力。本發(fā)明也可以被修改成在非DMA硬件上運行,其中使用不同模型(例如PIO或MMIO)對這種硬件進行編程。為了實現這種系統(tǒng),驅動程序的用戶模式部分可以將一組獨立于硬件的令牌寫入緩沖區(qū),而不是寫入可被硬件直接耗用的、特定于硬件的令牌流。當調度程序向內核驅動程序提交命令緩沖區(qū)時,內核驅動程序會將獨立于硬件的令牌轉換成特定于硬件的命令,并且通過硬件固有的控制機制發(fā)送它們。為了適應這種實現,系統(tǒng)必須為用戶模式驅動程序的寫入分配非DMA存儲器,并且必須實現用于通知命令緩沖區(qū)完成的適當機制。為了解決分配非DMA存儲器的問題,系統(tǒng)可以為內核驅動程序提供為其用戶模式對等程序的寫入分配命令緩沖區(qū)存儲器的選項。為了解決通知命令緩沖區(qū)完成的問題,針對內核驅動程序的接口可以為驅動程序提供通過返回值通知調度程序硬件已經執(zhí)行命令緩沖區(qū)的選項。
如上所述,雖然前面結合各種計算設備和網絡體系結構描述了本發(fā)明的示例性實施例,然而本發(fā)明的基本構思可以被應用于任何期望管理協(xié)處理資源的計算設備或系統(tǒng)。于是,本發(fā)明的用于管理協(xié)處理器計算資源的技術可以被應用于各種應用和設備。例如,本發(fā)明的管理技術可以被應用于計算設備的操作系統(tǒng),本發(fā)明可作為設備上的單獨對象、另一個對象的一部分、來自服務器的可下載對象、設備或對象與網絡之間的″中間人″、分布式對象等等。雖然示例性的編程語言、名稱和例子在這里被選擇代表各種選項,然而這些語言、名稱和例子不被用來限制本發(fā)明的范圍。
可以結合硬件、軟件或其組合來實現這里描述的各種技術。于是,本發(fā)明的方法和裝置,或其某些方面或部分,可以具有例如軟盤、CD-ROM、硬盤驅動器或任何其他機器可讀存儲介質的有形介質中包含的程序代碼(即指令)的形式,其中當程序代碼被載入諸如計算機的機器并且被機器執(zhí)行時,機器變成實現本發(fā)明的設備。對于可編程計算機上的程序代碼的執(zhí)行,計算設備通常包含處理器、處理器可讀的存儲介質(包含易失和非易失存儲器和/或存儲單元)、至少一個輸入設備和至少一個輸出設備??梢允褂帽景l(fā)明的管理技術(例如通過使用數據處理API等等)的一或多個程序最好通過高級過程或面向對象編程語言實現,以便與計算機系統(tǒng)通信。然而必要時也可以通過匯編或機器語言實現程序。在所有情況下,語言可以是編譯或解釋語言,并且與硬件實現組合。
也可以通過用某種傳輸介質(例如通過電線或電纜、光纖、或任何其他傳輸形式)發(fā)送的程序代碼實現的通信來實現本發(fā)明的方法和裝置,其中當程序代碼被具有示例性實施例中描述的資源管理能力的機器(例如EPROM、門陣列、可編程邏輯設備(PLD)、客戶端計算機、錄像機等等)或接收機器接收、載入和執(zhí)行時,上述裝置變成實現本發(fā)明的設備。當在通用處理器上實現時,程序代碼與處理器組合以提供調用本發(fā)明的功能的獨特設備。另外,與本發(fā)明結合使用的任何存儲技術均可以是硬件和軟件的組合。雖然結合具有各種附圖的優(yōu)選實施例描述了本發(fā)明,然而應當理解,在不偏離本發(fā)明的前提下,可以使用其它類似的實施例,或者可以對執(zhí)行本發(fā)明的相同功能的上述實施例進行修改和增加。例如,雖然在諸如對等網絡環(huán)境的網絡環(huán)境中描述了本發(fā)明的示例性網絡環(huán)境,然而本領域的技術人員會認識到,本發(fā)明不限于此,并且本申請中所描述的方法可以適用于任何諸如游戲控制臺、手持計算機、便攜計算機等等的計算設備或環(huán)境(無論是有線或無線),并且可以被應用于通過通信網絡連接并且在網絡上交互的任何數量的這種計算設備。此外應當強調,本發(fā)明考慮到包含手持設備操作系統(tǒng)和其它專用操作系統(tǒng)的各種計算機平臺,尤其是隨著無線網絡設備數量的繼續(xù)激增。此外,可以在多個處理芯片或器件之中或之上實現本發(fā)明,并且可以類似地在多個器件上實現存儲。因此,本發(fā)明不應限于任何單獨的實施例,而是應當根據所附權利要求書的廣度和范圍來解釋。
權利要求
1.控制具有主處理器的主機計算系統(tǒng)中至少一個協(xié)處理器的計算資源的方法,包括通過由主機計算系統(tǒng)的主處理器提交到至少一個協(xié)處理器的命令緩沖區(qū)控制計算系統(tǒng)的至少一個協(xié)處理器;由至少一個協(xié)處理器根據命令緩沖區(qū)的至少一個命令緩沖區(qū)中的命令向主機計算系統(tǒng)回送數據;和由主機計算系統(tǒng)中包含的管理對象調度命令緩沖區(qū)的發(fā)送,其中主機計算系統(tǒng)上實現的多個應用程序可以同時得到至少一個協(xié)處理器的計算資源。
2.如權利要求1所述的方法,其中所述調度包含由主機計算系統(tǒng)中包含的操作系統(tǒng)調度命令緩沖區(qū)的發(fā)送。
3.如權利要求1所述的方法,其中由協(xié)處理器通知管理對象命令緩沖區(qū)已經完成執(zhí)行。
4.如權利要求1所述的方法,還包含使針對協(xié)處理器的新命令緩沖區(qū)排隊,以便在當前命令緩沖區(qū)完成時開始執(zhí)行。
5.如權利要求1所述的方法,還包含當提交命令緩沖區(qū)時指定協(xié)處理器上下文切換。
6.如權利要求1所述的方法,其中所述管理對象允許多個類型的協(xié)處理器上下文。
7.如權利要求6所述的方法,還包含使協(xié)處理器上下文與主處理器線程上下文相關。
8.如權利要求7所述的方法,還包含由管理對象集成主處理器和協(xié)處理器的上下文切換代碼。
9.如權利要求1所述的方法,還包含由協(xié)處理器通知管理對象命令緩沖區(qū)非法。
10.如權利要求1所述的方法,還包含如果協(xié)處理器在預定時間段內沒有響應,復位至少一個協(xié)處理器的協(xié)處理器。
11.如權利要求1所述的方法,還包含在組成命令緩沖區(qū)期間,由特定于硬件的驅動程序對象通過管理對象的應用編程接口將命令緩沖區(qū)的指令轉換成特定于硬件的指令。
12.如權利要求11所述的方法,其中所述轉換在用戶模式中運行。
13.如權利要求12所述的方法,還包含在命令緩沖區(qū)的終結處分配保護頁面以實現緩沖區(qū)溢出的有效檢測。
14.如權利要求12所述的方法,其中以中間語言形式提供用戶模式驅動程序和對應的運行時刻部件,并且該方法還包含在具有用戶模式驅動程序和運行時刻部件的客戶端設備上進行運行時(JIT)編譯。
15.如權利要求14所述的方法,其中還以中間語言形式提供應用程序,并且所述JIT編譯包含在具有用戶模式驅動程序和運行時刻部件的客戶端設備上對應用程序進行JIT編譯。
16.如權利要求12所述的方法,其中所述驅動程序對象與對應的內核模式驅動程序對象協(xié)同以便在向硬件提交命令緩沖區(qū)之前編輯命令緩沖區(qū)。
17.如權利要求1所述的方法,其中至少一個協(xié)處理器包含至少一個圖形處理單元。
18.如權利要求1所述的方法,還包含由至少一個協(xié)處理器在出現外部事件時進行搶占。
19.如權利要求18所述的方法,其中外部事件是操作系統(tǒng)調用對應內核模式驅動程序對象以搶占至少一個協(xié)處理器。
20.如權利要求18所述的方法,其中主處理器被中斷以便協(xié)同處理時間的調度。
21.如權利要求1所述的方法,還包含在向協(xié)處理器提交命令緩沖區(qū)之前對命令緩沖區(qū)的控制數據流進行編輯期間,由管理對象對至少一個協(xié)處理器的至少一個資源進行虛擬化。
22.如權利要求21所述的方法,其中至少一個協(xié)處理器的被管理對象虛擬化的至少一個資源是存儲器。
23.如權利要求1所述的方法,其中管理對象使用線程同步原語協(xié)同協(xié)處理器命令緩沖區(qū)的構造、調度和提交。
24.一種計算機可讀介質,在其上存儲用于執(zhí)行如權利要求1所述的方法的多個計算機可執(zhí)行指令。
25.一種調制數據信號,傳送用于執(zhí)行如權利要求1所述的方法的計算機可執(zhí)行指令。
26.一種計算設備,包括用于執(zhí)行如權利要求1所述的方法的裝置。
27.至少一個計算機可讀介質,在其上存儲多個計算機可執(zhí)行模塊,所述多個計算機可執(zhí)行模塊控制具有主處理器的主機計算系統(tǒng)中至少一個協(xié)處理器的計算資源,所述計算機可執(zhí)行模塊包括管理對象,用于通過由主機計算系統(tǒng)的主處理器提交到至少一個協(xié)處理器的命令緩沖區(qū)控制計算系統(tǒng)的至少一個協(xié)處理器,并且調度命令緩沖區(qū)的發(fā)送;和通過至少一個協(xié)處理器根據命令緩沖區(qū)的至少一個命令緩沖區(qū)中的命令向主機計算系統(tǒng)回送數據的裝置;其中主機計算系統(tǒng)上實現的多個應用程序可以同時得到至少一個協(xié)處理器的計算資源。
28.如權利要求27所述的至少一個計算機可讀介質,其中所述管理對象被包含在主機計算系統(tǒng)的操作系統(tǒng)中。
29.如權利要求27所述的至少一個計算機可讀介質,其中由協(xié)處理器通知管理對象命令緩沖區(qū)已經完成執(zhí)行。
30.如權利要求27所述的至少一個計算機可讀介質,其中所述管理對象使針對協(xié)處理器的新命令緩沖區(qū)排隊,以便在當前命令緩沖區(qū)完成時開始執(zhí)行。
31.如權利要求27所述的至少一個計算機可讀介質,其中所述管理對象在提交命令緩沖區(qū)時指定協(xié)處理器上下文切換。
32.如權利要求27所述的至少一個計算機可讀介質,其中所述管理對象允許多個類型的協(xié)處理器上下文。
33.如權利要求32所述的至少一個計算機可讀介質,其中所述管理對象使協(xié)處理器上下文與主處理器線程上下文相關。
34.如權利要求33所述的至少一個計算機可讀介質,其中所述管理對象集成主處理器和協(xié)處理器的上下文切換代碼。
35.如權利要求27所述的至少一個計算機可讀介質,其中協(xié)處理器包括用于通知管理對象命令緩沖區(qū)非法的裝置。
36.如權利要求27所述的至少一個計算機可讀介質,其中如果協(xié)處理器在預定時間段內沒有響應,所述管理對象復位至少一個協(xié)處理器的協(xié)處理器。
37.如權利要求27所述的至少一個計算機可讀介質,其中在組成命令緩沖區(qū)期間,所述管理對象允許特定于硬件的驅動程序對象將命令緩沖區(qū)的指令轉換成特定于硬件的指令。
38.如權利要求37所述的至少一個計算機可讀介質,其中驅動程序對象的所述轉換在用戶模式中運行。
39.如權利要求38所述的至少一個計算機可讀介質,其中所述管理對象在命令緩沖區(qū)的終結處分配保護頁面以實現緩沖區(qū)溢出的有效檢測。
40.如權利要求38所述的至少一個計算機可讀介質,其中以中間語言形式提供用戶模式驅動程序和對應的運行時刻部件,并且用戶模式驅動程序和運行時刻部件被運行時(JIT)編譯。
41.如權利要求40所述的至少一個計算機可讀介質,其中還以中間語言形式提供應用程序,并且應用程序、用戶模式驅動程序和運行時刻部件被JIT編譯。
42.如權利要求38所述的至少一個計算機可讀介質,其中所述驅動程序對象與對應的內核模式驅動程序對象協(xié)同以便在向硬件提交命令緩沖區(qū)之前編輯命令緩沖區(qū)。
43.如權利要求27所述的至少一個計算機可讀介質,其中至少一個協(xié)處理器包含至少一個圖形處理單元。
44.如權利要求27所述的至少一個計算機可讀介質,其中管理對象在出現外部事件時被至少一個協(xié)處理器搶占。
45.如權利要求44所述的至少一個計算機可讀介質,其中外部事件是操作系統(tǒng)調用對應內核模式驅動程序對象以搶占至少一個協(xié)處理器。
46.如權利要求27所述的至少一個計算機可讀介質,其中主處理器被中斷以便由管理對象協(xié)同處理時間的調度。
47.如權利要求27所述的至少一個計算機可讀介質,其中在向協(xié)處理器提交命令緩沖區(qū)之前對命令緩沖區(qū)的控制數據流進行編輯期間,管理對象對至少一個協(xié)處理器的至少一個資源進行虛擬化。
48.如權利要求47所述的至少一個計算機可讀介質,其中至少一個協(xié)處理器的被管理對象虛擬化的至少一個資源是存儲器。
49.如權利要求27所述的至少一個計算機可讀介質,其中管理對象使用線程同步原語協(xié)同協(xié)處理器命令緩沖區(qū)的構造、調度和提交。
50.一種調制數據信號,傳送計算機可執(zhí)行指令輸出,所述計算機可執(zhí)行指令輸出是如權利要求27所述的計算機可讀介質的多個計算機可執(zhí)行指令的執(zhí)行結果。
51.一種計算設備,包括用于執(zhí)行如權利要求27所述的計算機可讀介質的多個計算機可執(zhí)行指令的裝置。
52.控制具有主處理器的主機計算系統(tǒng)中至少一個協(xié)處理器的計算資源的計算設備,包括管理對象,用于通過由主機計算系統(tǒng)的主處理器提交到至少一個協(xié)處理器的命令緩沖區(qū)控制計算系統(tǒng)的至少一個協(xié)處理器,并且調度命令緩沖區(qū)的發(fā)送;和通過至少一個協(xié)處理器根據命令緩沖區(qū)的至少一個命令緩沖區(qū)中的命令向主機計算系統(tǒng)回送數據的裝置;其中主機計算系統(tǒng)上實現的多個應用程序可以同時得到至少一個協(xié)處理器的計算資源。
53.如權利要求52所述的計算設備,其中所述管理對象被包含在主機計算系統(tǒng)的操作系統(tǒng)中。
54.如權利要求52所述的計算設備,其中由協(xié)處理器通知管理對象命令緩沖區(qū)已經完成執(zhí)行。
55.如權利要求52所述的計算設備,其中所述管理對象使針對協(xié)處理器的新命令緩沖區(qū)排隊,以便在當前命令緩沖區(qū)完成時開始執(zhí)行。
56.如權利要求52所述的計算設備,其中所述管理對象在提交命令緩沖區(qū)時指定協(xié)處理器上下文切換。
57.如權利要求52所述的計算設備,其中所述管理對象允許多個類型的協(xié)處理器上下文。
58.如權利要求57所述的計算設備,其中所述管理對象使協(xié)處理器上下文與主處理器線程上下文相關。
59.如權利要求58所述的計算設備,其中所述管理對象集成主處理器和協(xié)處理器的上下文切換代碼。
60.如權利要求52所述的計算設備,其中協(xié)處理器包括用于通知管理對象命令緩沖區(qū)非法的裝置。
61.如權利要求52所述的計算設備,其中如果協(xié)處理器在預定時間段內沒有響應,所述管理對象復位至少一個協(xié)處理器的協(xié)處理器。
62.如權利要求52所述的計算設備,其中在組成命令緩沖區(qū)期間,所述管理對象允許特定于硬件的驅動程序對象將命令緩沖區(qū)的指令轉換成特定于硬件的指令。
63.如權利要求62所述的計算設備,其中驅動程序對象的所述轉換在用戶模式中運行。
64.如權利要求63所述的計算設備,其中所述管理對象在命令緩沖區(qū)的終結處分配保護頁面以實現緩沖區(qū)溢出的有效檢測。
65.如權利要求63所述的計算設備,其中以中間語言形式提供用戶模式驅動程序和對應的運行時刻部件,并且用戶模式驅動程序和運行時刻部件被運行時(JIT)編譯。
66.如權利要求65所述的計算設備,其中還以中間語言形式提供應用程序,并且應用程序、用戶模式驅動程序和運行時刻部件被JIT編譯。
67.如權利要求63所述的計算設備,其中所述驅動程序對象與對應的內核模式驅動程序對象協(xié)同以便在向硬件提交命令緩沖區(qū)之前編輯命令緩沖區(qū)。
68.如權利要求52所述的計算設備,其中至少一個協(xié)處理器包含至少一個圖形處理單元。
69.如權利要求52所述的計算設備,其中管理對象在出現外部事件時被至少一個協(xié)處理器搶占。
70.如權利要求69所述的計算設備,其中外部事件是操作系統(tǒng)調用對應內核模式驅動程序對象以搶占至少一個協(xié)處理器。
71.如權利要求52所述的計算設備,其中主處理器被中斷以便由管理對象協(xié)同處理時間的調度。
72.如權利要求52所述的計算設備,其中在向協(xié)處理器提交命令緩沖區(qū)之前對命令緩沖區(qū)的控制數據流進行編輯期間,管理對象對至少一個協(xié)處理器的至少一個資源進行虛擬化。
73.如權利要求72所述的計算設備,其中至少一個協(xié)處理器的被管理對象虛擬化的至少一個資源是存儲器。
74.如權利要求52所述的計算設備,其中管理對象使用線程同步原語協(xié)同協(xié)處理器命令緩沖區(qū)的構造、調度和提交。
全文摘要
提供了管理計算系統(tǒng)中諸如圖形處理器的協(xié)處理器的計算資源的系統(tǒng)和方法。所述系統(tǒng)和方法用于管理協(xié)處理器的計算資源,以利于在多任務環(huán)境中高效執(zhí)行多個應用程序。通過允許執(zhí)行的多個線程并行組成命令緩沖區(qū),提交那些命令緩沖區(qū)以便操作系統(tǒng)調度和分配,并且監(jiān)視通知命令緩沖區(qū)完成的中斷,系統(tǒng)允許多個應用程序高效共享系統(tǒng)中的可用計算資源。
文檔編號G06F15/16GK1549964SQ03800004
公開日2004年11月24日 申請日期2003年1月6日 優(yōu)先權日2002年1月4日
發(fā)明者尼古拉斯·P·威爾特, 塞米爾·A·尼內, 約瑟夫·S·貝達三世, A 尼內, S 貝達三世, 尼古拉斯 P 威爾特 申請人:微軟公司