国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      線程處理器中緩沖區(qū)在多個客戶間的動態(tài)分配的制作方法

      文檔序號:6651524閱讀:170來源:國知局
      專利名稱:線程處理器中緩沖區(qū)在多個客戶間的動態(tài)分配的制作方法
      技術(shù)領(lǐng)域
      所要求保護(hù)的發(fā)明的實現(xiàn)方案一般涉及存儲器的分配,并且特別地,涉及存儲器在進(jìn)程(process)間的動態(tài)分配。
      背景技術(shù)
      在數(shù)據(jù)處理中,有時候?qū)⒋鎯ζ髟谶壿嬌蟿澐?,供很多個進(jìn)程使用。例如,如果四個進(jìn)程正在運行,則可將存儲器劃分為與每一個進(jìn)程對應(yīng)的四個部分。如果這些進(jìn)程是相關(guān)的(例如作為流水線進(jìn)程的一部分),則這樣的劃分方案可以給每一個進(jìn)程分配某個最小的存儲器量以防止死鎖(deadlock)。可以在進(jìn)程間分配超過所述匯總的最小量的剩余存儲器量,以有助于通過所述進(jìn)程來獲得更好的性能。
      當(dāng)使用存儲器的進(jìn)程數(shù)量改變時,人們可能期望改變存儲器的分配,以便針對新的進(jìn)程數(shù)量(例如三個或五個,而非上面實施例中的四個進(jìn)程)來優(yōu)化。但是,一些或全部的現(xiàn)有進(jìn)程在存儲器中可能具有相關(guān)聯(lián)的數(shù)據(jù),并且這樣的數(shù)據(jù)可能落入存儲器的另一個進(jìn)程的部分;或者,如果其進(jìn)程被停止(discontinue),則這些數(shù)據(jù)可能被孤立。因此,在存儲器可以在新數(shù)量的進(jìn)程間劃分之前,它通常被沖洗(flush)(例如清空數(shù)據(jù))。在一些情況中,進(jìn)程內(nèi)(in-process)數(shù)據(jù)可以立刻從存儲器中被刪除/沖洗,并且在新的劃分方案下被適當(dāng)?shù)刂匦录虞d。在其他情況中,通過在重新劃分存儲器之前允許進(jìn)程完全地處理進(jìn)程內(nèi)數(shù)據(jù),可以將其從存儲器中隱含地沖洗。
      但是,無論用于沖洗的方案如何,沖洗存儲器可能負(fù)面影響進(jìn)程的性能。在劃分或分配之前沖洗存儲器可能延遲由舊進(jìn)程、新進(jìn)程或兩者對數(shù)據(jù)的處理。

      發(fā)明內(nèi)容
      根據(jù)本發(fā)明的一個方面,提供了一種系統(tǒng),包括存儲器;以及多個可配置的功能塊,所述功能塊被分配了部分的所述存儲器,每一個所述功能塊包括地址界限單元,用于儲存定義了被所述功能塊當(dāng)前所使用的所述存儲器中的范圍的值,以及記分板單元,用于跟蹤所述當(dāng)前使用范圍的使用。
      根據(jù)本發(fā)明的另一個方面,提供了一種方法,包括在第一流水線的第一組函數(shù)間分布存儲器中地址的范圍;由所述第一流水線中的所述第一組函數(shù)使用所述地址范圍對數(shù)據(jù)進(jìn)行操作;以及不等待所述第一組函數(shù)的數(shù)據(jù)被沖洗,將所述存儲器中不同的地址范圍在第二流水線的第二組函數(shù)間進(jìn)行重新分布。
      根據(jù)本發(fā)明的又一個方面,提供了一種方法,包括使用地址界限將存儲器在很多個進(jìn)程間劃分;將存儲器空間從所述很多個進(jìn)程中的一個動態(tài)地重新分配到所述很多個進(jìn)程中的另一個,同時所述很多個進(jìn)程持續(xù)地使用所述存儲器。
      根據(jù)本發(fā)明的再一個方面,提供了一種方法,包括在一組固定函數(shù)間分配與先前在圖形處理設(shè)備中所分配的量不同量的物理存儲器而不執(zhí)行對數(shù)據(jù)的完全沖洗,所述數(shù)據(jù)與所述一組固定函數(shù)相關(guān)聯(lián)。


      附圖包含在本說明書中,并且構(gòu)成了它的一部分,附圖示出了一個或更多個符合本發(fā)明原理的實現(xiàn)方案,并且與描述一起說明了這些實現(xiàn)方案。附圖不一定按比例,而是將重點放在示出本發(fā)明的原理。在附圖中,圖1示出了一個示例性的系統(tǒng);圖2示出了圖1的示例性系統(tǒng)中的線程分派器(thread dispatcher);圖3示出了圖2的線程分派器中的功能塊;圖4是示出最開始在功能塊間分配緩沖區(qū)中的地址的過程的流程圖;圖5是示出功能塊利用緩沖區(qū)中的地址的過程的流程圖;圖6是示出功能塊動態(tài)地改變地址界限(address fence)的過程的流程圖;以及圖7示出了示范性消息格式。
      具體實施方案下列詳細(xì)描述參考了附圖。在不同的圖中可能使用相同的參考數(shù)字,以標(biāo)識相同或者類似的組成部件。在下列描述中,為了說明而非限制的目的,給出了具體細(xì)節(jié),例如特定結(jié)構(gòu)、體系結(jié)構(gòu)、接口、技術(shù)等,以提供對所要求保護(hù)的發(fā)明的各個方面的透徹理解。但是,受益于本公開的熟練技術(shù)人員將很清楚,可以在其他不依照這些具體細(xì)節(jié)的實施例中實踐所要求保護(hù)的發(fā)明的各個方面。在某些實例中,省略了對公知器件、電路和方法的描述,以免以不必要的細(xì)節(jié)模糊了對本發(fā)明的描述。
      圖1示出了示范性系統(tǒng)100。系統(tǒng)100可以包括存儲器分層結(jié)構(gòu)(memory hierarchy)110、線程分派器120、總線130和處理核心140-1到140-n(總起來說為“處理核心140”)。系統(tǒng)100可以包括多個支持多線程執(zhí)行的多個處理核心140。在一些實現(xiàn)方案中,處理核心140中的每一個均支持一個或更多個線程。通過允許活動線程被執(zhí)行而其他線程處于不活動狀態(tài),單處理器上的多線程(例如核心140-1)可以實現(xiàn)有效率的執(zhí)行。
      存儲器分層結(jié)構(gòu)110可以儲存一個或更多個處理核心140執(zhí)行期間要使用的數(shù)據(jù)和指令。存儲器分層結(jié)構(gòu)110可以包括動態(tài)隨機訪問存儲器(DRAM)、一層或更多層的指令緩存(cache)、一層或更多層的數(shù)據(jù)緩存,和/或一層或更多層的共享指令和數(shù)據(jù)緩存。
      耦合到存儲器分層結(jié)構(gòu)110的線程分派器120可以接收信息(例如指令指針以及數(shù)據(jù)和/或數(shù)據(jù)指針),所述信息與新線程相關(guān)聯(lián)。線程分派器120可以通過總線130與處理核心140耦合。線程分派器120可以管理處理核心140的線程資源。在接收到新的未決線程(pending thread)后,線程分派器120可以選擇一個具有可用于執(zhí)行未決線程的資源的處理核心(例如核心140-3),并通過總線130將所述線程分派到被選擇的核心。在處理核心完成現(xiàn)有線程后,線程分派器120得到通知,并且釋放該處理核心上的線程資源,用于將來的線程。
      圖2示出了線程分派器120的一個可能的實現(xiàn)方案。線程分派器120可以包括命令解析器210、多個功能塊220-1、220-2...220-n(總起來說為“功能塊220”)、高優(yōu)先權(quán)總線接口(HPBI)230、低優(yōu)先權(quán)總線接口(LPBI)240、統(tǒng)一返回緩沖區(qū)(URB)250以及分派器260。
      命令解析器210可以將某些命令和請求轉(zhuǎn)換為功能塊220可以處理的格式。例如,命令解析器210可以將牽涉到很多個功能塊220的單個命令分解為很多個命令和/或指令,所述很多個命令和/或指令可以被路由到各功能塊220。
      功能塊220可以執(zhí)行不同的函數(shù),可能是以流水線的方式。在一些實現(xiàn)方案中,功能塊220可以實現(xiàn)固定的圖形函數(shù),例如一個或更多個頂點著色器(vertex shader)、多邊形細(xì)分器(tessalator)、幾何著色器(geometry shader)、裁減器(clipper)、設(shè)置模塊以及窗口器(windower)。在任意給定時間,這些固定函數(shù)中的一些(例如一些功能塊220)可以是活動的,并且其他函數(shù)(例如其他的功能塊220)可以是不活動的。每一個活動的功能塊220可以使用統(tǒng)一返回緩沖區(qū)250的某個被指定部分(例如統(tǒng)一返回緩沖區(qū)250的地址組)用于其輸出。
      圖3示出了功能塊220的一個可能的實現(xiàn)方案。功能塊220可以包括一組地址界限310、一組記分板320、地址/索引計算單元330,以及狀態(tài)機340。
      地址界限310可以包括一組ping/pong地址界限,每一個界限具有頂部寄存器(topregister)和底部寄存器(bottom register)。頂部和底部寄存器可以儲存定義URB 250中的地址范圍的地址,其中功能塊220可以在URB 250中儲存項目。如這里所使用的,和表示另一組(例如“舊”組或以前的組)的“ping”相反,“pong”可以表示替代組(例如“新”的組)。在地址界限310的上下文中,初始的一組頂部和底部界限值可以儲存在Ping界限寄存器中,并且當(dāng)替代的一組值到達(dá)時,它可以儲存在Pong界限寄存器中。如果另一組替代的頂部和底部值到達(dá),則它可以儲存在Ping界限寄存器中,Pong界限具有最近的值,等等。
      記分板320可以包括ping記分板和pong記分板,每一個記分板對每個地址具有一位被記錄在URB 250中。記分板可以足夠大,以便對于該功能塊220,它可以容納URB 250的記錄(entry)的最大可預(yù)見分配。因此,如果給定的功能塊220可能僅僅被分配了URB250的20%,則可以將記分板320大小調(diào)整為每個該數(shù)量的URB250的記錄2位(Ping和Pong各一位)。
      地址/索引計算單元330可以包括用于由索引計算地址或反過來進(jìn)行計算的邏輯。如這里所使用的,“索引”可以表示數(shù)字(例如從0開始,并在地址界限310的大小處結(jié)束),所述數(shù)字表示由地址界限310定義的地址范圍內(nèi)的相對位置。對于功能塊220的地址界限310內(nèi)的地址,可以按如下計算和該地址對應(yīng)的索引索引=地址-頂部,其中頂部表示地址界限310的上端。類似地,單元330可以按如下從索引值計算地址地址=頂部+索引。下面將描述使用地址/索引計算單元330的實例。
      一旦在地址界限310之間發(fā)生改變,狀態(tài)機340,可以在記分板320上執(zhí)行重分配。下面將更詳細(xì)地描述這種重分配。狀態(tài)機340也可以執(zhí)行其他的地址處理,例如確定保留還是沿著給定地址傳遞。狀態(tài)機340還可以為功能塊220執(zhí)行其他的控制和/或簿記功能。
      回到圖2,功能塊220可以由兩個雙向總線,即HPBI 230和LPBI 240互連。在HPBI230和LPBI 240的每一個中,在每一個功能塊220之間可能橫跨兩個點到點接口,一個往“北”,另一個往“南”。例如,地址可以通過HPBI 230和/或LPBI 240的向南的接口,從第n個功能塊220FB[n]向下傳遞到第(n+1)個功能塊220FB[n+1]。類似地,F(xiàn)B[n+1]可以通過HPBI 230和/或LPBI 240的往北的接口將地址向上傳遞到FB[n]。被發(fā)出的在功能塊220之間轉(zhuǎn)移所有權(quán)的地址可以在HPBI 230上傳遞。被發(fā)出的產(chǎn)生有效載荷和/或被返回到產(chǎn)生者功能塊220的地址可以在LPBI上傳遞。
      可以用幾種方法在物理上實現(xiàn)HPBI 230和LPBI 240。在一些實現(xiàn)方案中,在每一個方向上可以并行使用兩個接口。在一些實現(xiàn)方案中,每個方向上的一個接口可以與其中的2個虛擬通道一起使用。如果實現(xiàn)了虛擬通道機制,則例如第1虛擬通道(例如HPBI 230)可以是比第0虛擬通道更高的優(yōu)先權(quán),第0虛擬通道可用于LPBI 240。在一些實現(xiàn)方案中,HPBI 230、LPBI 240或兩者可以是流控制的。
      URB 250可以被安排成保持這樣的的數(shù)據(jù),即所述數(shù)據(jù)為在處理核心140處理之前和/或之后與功能塊220相關(guān)聯(lián)的數(shù)據(jù)。如這里所描述的,利用其中各自的地址界限310,URB250可以由功能塊220劃分和共享。在一些實現(xiàn)方案中,URB 250可能具有1024個記錄或者更少,盡管所要求保護(hù)的發(fā)明在這個方面不一定受限制。
      分派器260可以通過總線130將線程從功能塊220分派到處理核心140。在一些實現(xiàn)方案中,分派器260可以確定向核心中的哪一個發(fā)送特定線程。在一些實現(xiàn)方案中,分派器260可以將線程路由到由發(fā)信功能塊220指定的特定處理核心140。
      回到圖1,總線130可以包括在存儲器分層結(jié)構(gòu)110、線程分派器120和處理核心140間的很多個通訊鏈路。為了便于說明,將總線130顯示為單條線,但是實際上總線130可以包括一個或更多個控制總線、數(shù)據(jù)總線等??偩€130可以從線程分派器120輸送數(shù)據(jù)供核心140處理,并且它也可以將經(jīng)過處理的數(shù)據(jù)從核心140輸送到線程分派器120和/或存儲器分層結(jié)構(gòu)110。
      系統(tǒng)100還可以包括多個處理核心140,每一個處理核心140均包括帶有相關(guān)聯(lián)的控制電路的執(zhí)行電路。處理核心140可以是相同的,或者可以具有不同功能。系統(tǒng)100中可以包括任意數(shù)量的處理核心140-1到140-n。在一些實現(xiàn)方案中,處理核心140可以按行排列,每一行均具有相關(guān)聯(lián)的行控制器。
      圖4是示出最開始在功能塊(FB)220間分配緩沖區(qū)250中地址的過程400的流程圖。在系統(tǒng)100啟動以后,或者在復(fù)位和/或沖洗之后,可以假設(shè)FB 200中所有的記分板320被清空,并且頂部/底部界限寄存器310處于“不關(guān)心”狀態(tài)。從線程分派器120中的命令流讀出的第一數(shù)據(jù)序列可以包括每一個FB 220的頂部/底部界限值的列表。
      處理可以通過在FB 220間分布這些頂部/底部界限值開始[動作410]。也可以通過HPBI230將這些頂部/底部界限寄存器值相繼以流水線方式傳過FB 220。例如,在一些實現(xiàn)方案中,F(xiàn)B 220-1可以在其地址界限310中儲存第一頂部/底部對,并且可以將界限值的剩余部分向下傳遞到FB 220-2。FB 220-2可以將所述剩余值的最上面的對儲存在其地址界限310中,并將剩余部分通過HPBI 230傳遞到FB 220-3,如此繼續(xù)。最后的功能塊220-n可以消耗最后的頂部/底部對。
      接下來,命令流中可能是地址列表,所述地址正在FB 220間分配[動作420]。地址列表可以通過HPBI 230被輸入第一FB 220-1。FB 220-1可以查看給定地址,并確定它是否處于地址界限310中它的地址范圍內(nèi)[動作430]。
      如果地址不在FB 220-1的地址界限310內(nèi),則它被傳遞到下一個FB[動作440]。如果地址在FB 220-1的范圍內(nèi)(或者,如果被傳遞,在另一個FB(例如220-2)的范圍內(nèi)),則該FB可以處理所述地址[動作450]。
      在這種地址處理中,F(xiàn)B可以通過計算單元330計算相關(guān)聯(lián)的索引,索引=地址-基數(shù)。對于這個計算出的索引值,隨后可以在該FB的Ping記分板320中設(shè)置一位。如從動作440和450返回的箭頭所指示,這種地址處理可以繼續(xù),直到所有地址已經(jīng)和適當(dāng)?shù)腇B 220相關(guān)聯(lián)為止。
      在序列400的末尾,所有的FB 220可以使其Ping地址界限310有效,以及用允許它們使用的地址來更新它們的PING記分板320。在一些實現(xiàn)方案中,這些索引地址可以從零開始,并遞增計數(shù)(0、1、2...)到序列中最后的地址,盡管所要求保護(hù)的發(fā)明在這個方面不受限制。
      如果在相應(yīng)的記分板320中設(shè)置了一位,則這表示特定地址不是“未定的(in-flight)”(例如,在傳輸?shù)搅硪粋€目的地中)。因此,記分板320(在特定的地址界限區(qū)域內(nèi))中的零(例如未被設(shè)置的位)可以表示特定地址未定。非未定的地址可以被回收,并被重新用于新的去往URB 250的輸出緩沖區(qū)。相反,不可以回收未定的地址用作新的輸出緩沖區(qū)的一部分。
      盡管,就在啟動時設(shè)置記分板320而言,過程400看起來好像是不那么直接的方式,但是這樣的方案可以使得重新劃分地址界限310類似于啟動序列的方案。不在FB 220-1之前發(fā)出地址以便用這些地址開始流水線的優(yōu)化是可能的。為了便于理解,描述了上面的特定方案400,并且其細(xì)節(jié)不一定限制所要求保護(hù)的發(fā)明。
      圖5是示出功能塊(FB)利用緩沖區(qū)250中的地址的過程500的流程圖。在初始化序列400之后,F(xiàn)B 220-1可以將其記分板讀指針設(shè)置為零。FB 220-1可以從命令流(例如命令解析器210)接收任務(wù)(例如,函數(shù)或函數(shù)的一部分)。根據(jù)該任務(wù)的緩沖要求(例如,在URB 250中所需的空間量),F(xiàn)B 220-1可以在URB 250中分配這樣的空間[動作510]。
      在動作510中,例如,F(xiàn)B 220-1可以將當(dāng)前記分板讀指針與URB 250中針對該任務(wù)的期望記錄數(shù)量(例如,工作計數(shù)(WC))一起儲存在寄存器中(例如,工作指針(WP))。盡管在圖3中沒有顯式地示出,但是在一些實現(xiàn)方案中,WP和WC寄存器可以包括在記分板320中。FB 220-1可以檢查記分板320是否從其記分板讀指針開始,將“工作計數(shù)”設(shè)為連續(xù)的1。如果記分板320中未設(shè)置那么多連續(xù)的1,則FB 220-1可以一直等待到設(shè)置了這樣的數(shù)字為止。但是,如果有這樣的“工作計數(shù)”空間可用,則FB 220-1可以清空在當(dāng)前讀指針處的位,并可以將記分板指針向前加一??梢灾貜?fù)這樣的清空和前進(jìn),直到分配了URB 250中任務(wù)所需的記錄數(shù)量(例如WC中的數(shù)字),完成動作510。動作510的其他實現(xiàn)方案是可能的,并且上面主要是為了便于理解而給出的。
      通過地址計算單元330,從工作指針可以如下計算URB 250中與記分板320中的記錄對應(yīng)的地址URB地址=WP+頂部,其中從活動(例如Ping或Pong)地址界限310獲得頂部。如果處理核心140要求多于一個返回地址,則可以為多個返回地址重復(fù)上面的計算。在完成了針對這部分任務(wù)的計算之后,可以將URB 250中的這些返回地址作為返回地址發(fā)到處理核心140[動作520]。FB 220-1也可以結(jié)合動作520,將其他和任務(wù)相關(guān)的信息分派到處理核心140。
      所有的FB 220,在把工作分配到處理核心140之后,當(dāng)其各自的數(shù)據(jù)在處理后已經(jīng)返回URB 250時,可以由URB 250發(fā)信令回到原態(tài)(signaled back)。這種信令可以在數(shù)據(jù)被寫入URB 250時通過URB 250自動發(fā)生。例如,F(xiàn)B 220-1可以通過LPBI 240接收這樣的通知[動作530]。
      當(dāng)在動作530中接收到其數(shù)據(jù)在緩沖區(qū)250中的通知后,F(xiàn)B 220-1可以為下游的功能塊(例如FB 220-3)產(chǎn)生地址列表,用作其輸入[動作540]。一般,F(xiàn)B 220-n可以和URB250產(chǎn)生地址+計數(shù)的列表,供接下來的FB 220-(n+x)消耗。這種地址列表消息的格式可以包括起始URB地址和字計數(shù)。這些地址(和字計數(shù))可以以FIFO(先進(jìn)先出)的方式通過LPBI 240傳輸?shù)脚彽南掠喂δ軌K(例如FB 220-(n+1))。如果FB 220-(n+1)是空函數(shù)(例如未用于任何給定的任務(wù)),則它可以將信息繼續(xù)傳遞,直到信息到達(dá)任務(wù)中的下一個功能塊220,即FB 220-(n+x)為止。
      在FB 220-(n+x)已經(jīng)消耗了URB地址所指向的完整字計數(shù)長度的數(shù)據(jù)以后,在發(fā)送FB 220-n中記分板320中的對應(yīng)記錄可被“釋放”。因此,F(xiàn)B 220-n等待它發(fā)送的與地址列表相關(guān)聯(lián)的數(shù)據(jù)被下一個FB 220-(n+x)消耗[動作550]。如這里所使用的,術(shù)語“消耗”表示已經(jīng)從URB 250讀取了所討論的地址。但是應(yīng)該注意,這些地址可以被視作被消耗,但是也可能在去往另一個目的地FB 220的途中。例如,如果地址已經(jīng)被并非其最終目的地的FB 220讀取,則它可以被視作被消耗,同時也正在去往其目的地的途中。
      在地址已經(jīng)被另一個FB 220消耗之后,F(xiàn)B 220-n可以將地址放回其記分板320上的自由列表(例如,它可以“釋放”該地址)[動作560]。這種“自由”記錄可供在URB 250中的新返回緩沖操作中再次使用。為了釋放地址,其在記分板320中的索引可以由計算單元330如下計算索引=URB地址-活動頂部界限。可以針對和此第一地址相關(guān)聯(lián)的地址的所有“計數(shù)”數(shù)字執(zhí)行這種索引計算。地址加計數(shù)數(shù)字的這種擴展可被稱作“原子化”。例如,為10的地址和為4的計數(shù)可以被原子化為地址10、11、12和13。接著,可以如下設(shè)置索引處記分板320的特定值(例如,地址+計數(shù)),以指示地址是自由的記分板[索引]=1。
      在接收到“自由”URB地址和計數(shù)(例如,或者自我產(chǎn)生的,或者通過向北或向南LPBI240接收到的)之后,F(xiàn)B 220-n可以將該地址與其當(dāng)前活動界限310的頂部/底部對相比,并且,或者保留信息,或者將其通過LPBI 240適當(dāng)?shù)叵蚰匣蛳虮眰鬟f[動作570]。如果地址(忽略字計數(shù))位于該FB 220的頂部/底部范圍內(nèi),則它被該功能塊保留。如果地址(忽略字計數(shù))小于該FB 220的頂部值,則它可以通過向北的LPBI 240向上傳遞,并且如果它大于FB 220的底部值,則它可以通過向南的LPBI 240向下傳遞。在動作560中“自由”URB+計數(shù)信息的原子化之后,在動作570中做出比較以及做出將地址向上還是向下傳遞的決定是有意的,并且允許界限310的動態(tài)改變而無需沖洗所有的FB 220。這也允許界限310在先前的相鄰URB分配之間移動,這將在下面進(jìn)一步描述。
      盡管主要針對FB 220-1描述,但是也可以由其他的功能塊以類似的方式執(zhí)行過程500,例如FB 220-2、FB 220-3等。
      在一些實現(xiàn)方案中,F(xiàn)B 220可以將相同的URB 250記錄(和字計數(shù))多次發(fā)到下游FB 220。例如,一些FB 220可以使用URB 250的記錄作為緩存,并且緩存命中可以使得給定的URB記錄被另一個FB讀取超過一次。因此,該URB記錄可以多次成為未完結(jié)的(outstanding)。標(biāo)明地址是否未定的記分板320不應(yīng)該將這樣的記錄當(dāng)作“自由”,一直到它已經(jīng)被多次消耗為止。
      因此,在一些實例中,某些FB 220可以維持分離的簿記,以跟蹤在地址能夠被重新放入記分板320之前需要多少“釋放”的實例。具有這種行為的那些功能塊220可以包括每當(dāng)發(fā)出給定的URB記錄時向上計數(shù)的機制,以及每當(dāng)“釋放”給定的URB記錄時向下計數(shù)的互補機制。盡管沒有顯式地示出,但是在一些實現(xiàn)方案中,這種計數(shù)機制可以包括在記分板320和/或狀態(tài)機340中。如果計數(shù)字段保持相同,則該計數(shù)機制只需要追蹤其發(fā)出的基URB地址而非URB 250中所有相關(guān)聯(lián)的記錄(例如地址+計數(shù))。
      已描述了利用存儲器中的地址的過程500,現(xiàn)在將描述存儲器在函數(shù)間的動態(tài)重分配。在某些時刻,可能是FB 220“改變狀態(tài)”的時間(例如,當(dāng)將一個或更多個FB 220加入給定的函數(shù)鏈或流水線或者從其中刪除時)。例如,給定FB 220的流水線結(jié)構(gòu)(即頂點著色器后面是多邊形細(xì)分器,多邊形細(xì)分器后面是裁減器、設(shè)置以及窗口器。),則在這種結(jié)構(gòu)中假定存在一種URB 250在功能塊220間的理想劃分。對于新的流水線結(jié)構(gòu)(例如,頂點著色器后面是幾何著色器,幾何著色器后面是裁減器、設(shè)置以及窗口器,或者是FB 220的另一種結(jié)構(gòu),例如頂點著色器后面是裁減器、設(shè)置以及窗口器),則可能存在URB在FB 220間的不同的理想劃分。這種狀態(tài)上的變化通??赡苌婕癠RB 250在FB 220間的重新劃分(例如FB 220內(nèi)地址界限的改變)。
      一種實現(xiàn)這種重新劃分的方法可以是在改變地址界限之前,一直等待到?jīng)_洗了每一個連續(xù)的FB 220的數(shù)據(jù)為止。但是,這種方案將導(dǎo)致“暗含沖洗(implied flush)”,其中,在沖洗連續(xù)的FB 220的同時,整個流水線將在改變狀態(tài)中被延遲。另一種重新劃分的方法將是根據(jù)FB 220的新地址界限,從一個FB 220開始傳遞地址,但是,如果只有一個“向南”的通道并且如果它是流控制的,則這種方案可能死鎖。
      根據(jù)一些實現(xiàn)方案,為了避免死鎖而且同時改變狀態(tài)并在新狀態(tài)中處理,第一個FB220不等待下游的FB 220來沖洗。而且它也不等到任一級(stage)的記分板320被填成全1(例如,被清空)。來自舊狀態(tài)的地址在狀態(tài)改變期間可以仍在傳送中,但是FB 220不盲目地繼續(xù)向上和向下傳遞地址。相反,地址可以向上流動以完成其從先前狀態(tài)的正常流動,同時其他的地址也通過系統(tǒng)被傳遞,以便將它們重新映射到新狀態(tài)中。如進(jìn)一步描述的那樣,HPBI 239有助于這種不會死鎖的動態(tài)狀態(tài)改變(例如存儲器的重新劃分)。
      圖6是示出功能塊動態(tài)地改變地址界限的過程600的流程圖。盡管針對鏈或流水線中的第一個功能塊(例如FB 220-1)描述,但是過程600也可以由后續(xù)的FB 220執(zhí)行,以完成URB 250的動態(tài)重分配。
      處理可以以FB 220-1接收新的一組地址界限值[動作610]來開始。這些新的值可以儲存在地址界限310的ping或pong部分中,取決于哪一個目前容納當(dāng)前操作狀態(tài)的界限。用于所有的FB 220的新的頂部/底部界限的列表可以由命令流發(fā)出,并且FB 220-1可以從列表取出第一頂部/底部組,并把它們置入其(例如pong)地址界限310。然后,F(xiàn)B 220-1可以將剩余的頂部/底部界限通過HPBI 230傳遞到下一個FB 220(例如FB 220-2)。
      處理可以繼續(xù),其中FB 220-1完成它在其接收到新的地址界限之前開始的處理/工作[動作620]。這些工作可以包括還沒有返回URB 250的要處理的數(shù)據(jù),但是可能不包括URB250中的與FB 220-1相關(guān)聯(lián)的數(shù)據(jù)(例如在記分板320中)。不允許FB 220-1在它仍正工作于其舊狀態(tài)時就將地址“退入(retire)”其新記分板(例如記分板320的“pong”部分)。如果FB 220-1仍正工作于其舊狀態(tài),則任何未被標(biāo)明正針對所有權(quán)傳遞的地址應(yīng)該與FB220-1的當(dāng)前工作界限進(jìn)行關(guān)于界限的比較,并根據(jù)舊工作狀態(tài)向上、向下傳遞或保留。
      FB 220-1完成其當(dāng)前工作后,它可以從零開始掃描其舊記分板320,以得到在舊狀態(tài)中分配的記錄。對于記分板中每一個這樣的記錄,它可以執(zhí)行地址轉(zhuǎn)換地址=記分板索引+舊頂部。如果地址在新的頂部/底部界限內(nèi),則它執(zhí)行轉(zhuǎn)換索引=地址-新頂部,并將新記分板320中的位設(shè)置在該索引處[動作630]。
      如果地址在新地址界限的底部值以下或頂部值以上,則FB 220-1可以通過HPBI 230將地址與“傳遞所有權(quán)”指示符一起向下傳遞[動作640]。注意,頂部值比較只和頂部FB220-1以下的FB有關(guān)。這樣的傳遞所有權(quán)指示符可以指示其他的FB 220(例如FB 220-2),該地址不應(yīng)該被傳遞回FB 220-1,而是應(yīng)該與接收FB的新地址界限比較(并且,如果在新界限內(nèi),則設(shè)置接收FB的新記分板中的對應(yīng)記錄)。對在動作630中已經(jīng)轉(zhuǎn)換的地址或動作640中已傳遞的地址,F(xiàn)B 220-1可以清空其舊記分板320中對應(yīng)的記錄(例如通過將其設(shè)置為零)。圖6中的虛線指示可以針對在舊記分板320中找到的所有記錄重復(fù)動作620和動作640。
      如果舊記分板320在給定索引處為零(例如,指示沒有地址),則在動作630和640中,在該索引上可以不執(zhí)行操作。索引可以增加,將零傳遞。如果執(zhí)行了地址計算并且地址映射到新記分板320中,則FB 220可以將零寫入該新記分板記錄而不是僅僅將其傳遞。注意,只要舊記分板320一被掃描,則FB 220-1可以為新記分板記錄將記分板讀指針復(fù)位到零,并且可以開始搜索連續(xù)的1,以便在URB 250中產(chǎn)生新的有效載荷要求記錄。
      和動作630和640同時,地址可以通過向北的LPBI 240到達(dá)FB 220-1。這些到達(dá)的地址可以由FB 220-1針對新界限310和記分板320來處理[動作650]。例如,如果進(jìn)入的地址在新頂部/底部界限310內(nèi)映射,則它可以被引用到新記分板索引,并且新記分板記錄可以被置為1。如果地址在新界限310的范圍以外(在第一個FB 220-1的情況下,它可能只比底部值大),則地址可以在HPBI 230上與“傳遞所有權(quán)”指示符一起,被向下發(fā)送回FB 220-2(或者不管哪一個,只要是流水線中的下一個FB 220)。
      當(dāng)FB 220-1準(zhǔn)備好將新狀態(tài)的第一工作量發(fā)送到下一個FB 220(例如FB 220-2)時,它在向南的LPBI 240上發(fā)送“翻轉(zhuǎn)狀態(tài)”消息[動作660]。這樣的翻轉(zhuǎn)狀態(tài)消息指示流水線中的下一個FB開始過程600。盡管顯示在動作650之后,但是在一些實現(xiàn)方案中,動作660可以在動作620之后立刻發(fā)生。當(dāng)FB 220-2看到此消息并完成了先前狀態(tài)的工作時(例如在完成動作620之后),它可以按順序在其向南的LPBI 240上發(fā)出另一個“翻轉(zhuǎn)狀態(tài)”消息。
      為了防止不合時宜的狀態(tài)變化,人們期望一種機制,所述機制防止FB 220-1在引擎/流水線的剩余部分就緒之前就根據(jù)新狀態(tài)發(fā)出數(shù)據(jù)。因此,F(xiàn)B 220-1可以一直等待到它從最下游的單元(例如FB 220-n,其中n表示流水線中的最后一個單元)接收到某個信號為止,所述信號指示它已經(jīng)到達(dá)其新狀態(tài)[動作670]。在一些實現(xiàn)方案中,當(dāng)最下游的FB 220-n響應(yīng)它通過其LPBI 240接收到的“翻轉(zhuǎn)狀態(tài)”作用時,它可以將確認(rèn)信號通過向北的HPBI230發(fā)送回FB 220-1。流水線中所有其他的FB 220可以忽略此消息。在這些實現(xiàn)方案中,F(xiàn)B 220-1可以不發(fā)出新的狀態(tài)分組(packet),直到接收到確認(rèn)分組為止。但是其他的確認(rèn)和/或延遲機制既是可能的,也是預(yù)期中的。
      然后,F(xiàn)B 220-1可以開始發(fā)出新狀態(tài)中的工作[動作680]。
      現(xiàn)在將針對下游單元,例如FB 220-2來討論過程600。FB 220-1可能已經(jīng)改變了狀態(tài)而FB 220-2仍處于舊狀態(tài)。FB 220-2“釋放”的任何落入舊界限的地址自然也落入舊記分板。FB 220-2“釋放”的任何落在其舊界限以外的地址使用向北的LPBI 240向上傳遞。FB 220-2通過其向北的LPBI 240從下游單元(例如FB 220-3)接收的任何地址的情況也是如此。當(dāng)FB 220-2完成了分派其來自舊狀態(tài)的工作,它可以執(zhí)行動作630和640,掃描其舊記分板320,并使用向北或向南的HPBI將地址與“傳遞所有權(quán)”語義一起按需要傳遞。剩余的單元220可以重復(fù)過程600,以便在它們中間動態(tài)地重分配URB 250。
      圖7示出了HPBI 230和LPBI 240上的示范性消息格式。消息710示出了HPBI 230上向南的(例如到后續(xù)FB 220)消息的格式。消息720示出了HPBI 230上向北的(例如到前面的FB 220)消息的格式。類似地,消息730和消息740示出了LPBI 240上分別向南和向北的消息的格式。
      可以注意到,消息710到740中所有的URB地址被示為10位的字段。這個數(shù)據(jù)長度假設(shè)URB 250將具有1024個記錄或更少,并且可能基于被尋址的存儲器的大小有所不同。如URB 250或其他的要被重新劃分的存儲器需要更多或更少的地址空間,則如果要求,可以進(jìn)行調(diào)整。
      如這里所描述的那樣,地址界限機制310可以包含在每一個功能塊220中。每一個功能塊220對于其自己到250中的輸出,可以使用其自己的界限范圍內(nèi)的任何地址。這些地址被傳遞到下游功能220,用于后續(xù)讀以及進(jìn)一步處理。在執(zhí)行了后續(xù)讀之后,地址或者被該功能塊保留(例如,當(dāng)?shù)刂吩谠摴δ軌K的地址范圍內(nèi)時),或者被向下傳遞(例如,當(dāng)?shù)刂反笥谠摴δ軌K的范圍時),或者被向上傳遞(例如,當(dāng)?shù)刂沸∮谠摴δ軌K的地址范圍時)。當(dāng)功能塊220中發(fā)生狀態(tài)變化時,地址界限310可以被動態(tài)地重新配置,而不會死鎖或需要完全沖洗功能塊220的相關(guān)聯(lián)數(shù)據(jù)。
      前面對一個或更多個實現(xiàn)的描述提供了說明和描述,但是并非打算是窮盡性的或者將本發(fā)明的范圍限于所公開的精確形式。根據(jù)上面的教導(dǎo),修改和變化是可能的,并且可以從本發(fā)明的各種實現(xiàn)方案的實踐中獲得。
      例如,盡管已經(jīng)針對返回緩沖區(qū)250和功能塊220描述了這里的存儲器重分配方案,但是一般它也適用于計算函數(shù)和/或線程對存儲器的動態(tài)重分配,或者是針對所述計算函數(shù)和/或線程的存儲器動態(tài)重分配。并且,對于這里所描述的由地址界限310和記分板320執(zhí)行的地址排序和簿記,其他方案不但可能,而且也在預(yù)期之中。此外,盡管對于功能塊220,地址界限310假設(shè)連續(xù)的地址,但是,如果期望,緩沖區(qū)中不連續(xù)的地址也可以與給定的功能塊220相關(guān)聯(lián)其中,所述功能塊220具有與界限不同的關(guān)聯(lián)邏輯。
      此外,在圖4到6中的動作不需要按所示順序來實現(xiàn),并且也不一定要執(zhí)行所有的動作。而且,不依賴于其他動作的那些動作可以與其他動作并行執(zhí)行。此外,至少圖中動作中的一些可以被實現(xiàn)為指令或指令群,在機器可讀介質(zhì)中實現(xiàn)。
      除非在這里被顯式地描述,否則在本申請的描述中使用的元件、指令都不應(yīng)該被理解為對于本發(fā)明是關(guān)鍵的或必不可少的。而且,如這里所使用的,冠詞“a”旨在包括一個或更多個項目。不偏離本發(fā)明的精神和原理,可以對所要求保護(hù)的發(fā)明的上述實現(xiàn)作出修改和變化。本文旨在將所有這些修改和變化包括在本公開中,并且受所附的權(quán)利要求書的保護(hù)。
      權(quán)利要求
      1.一種系統(tǒng),包括存儲器;以及多個可配置的功能塊,所述功能塊被分配了部分的所述存儲器,每一個所述功能塊包括地址界限單元,用于儲存定義了被所述功能塊當(dāng)前所使用的所述存儲器中的范圍的值,以及記分板單元,用于跟蹤所述當(dāng)前使用范圍的使用。
      2.如權(quán)利要求1所述的系統(tǒng),其中,除了所述當(dāng)前所使用的范圍以外,所述地址界限單元還包括用于所述存儲器中的至少一個范圍的儲存器。
      3.如權(quán)利要求2所述的系統(tǒng),其中,除了所述當(dāng)前所使用的范圍以外,所述記分板單元還包括用于跟蹤所述存儲器中的所述至少一個范圍的使用的儲存器。
      4.如權(quán)利要求1所述的系統(tǒng),其中,每一個所述功能塊還包括計算單元,用于基于所述地址界限單元中的值,在所述存儲器中的地址值和所述記分板單元中的索引之間進(jìn)行轉(zhuǎn)換。
      5.如權(quán)利要求4所述的系統(tǒng),其中,每一個所述功能塊還包括邏輯,用于根據(jù)來自所述計算單元的索引,設(shè)置或清空所述記分板單元中的值。
      6.如權(quán)利要求1所述的系統(tǒng),還包括一個或更多個處理器,所述處理器用于從所述功能塊或者所述存儲器接收數(shù)據(jù),處理所述數(shù)據(jù),并將經(jīng)過處理的數(shù)據(jù)寫入所述存儲器。
      7.如權(quán)利要求1所述的系統(tǒng),還包括連接所述多個可配置的功能塊的高優(yōu)先權(quán)雙向總線;以及連接所述多個可配置的功能塊的低優(yōu)先權(quán)雙向總線。
      8.一種方法,包括在第一流水線的第一組函數(shù)間分布存儲器中地址的范圍;由所述第一流水線中的所述第一組函數(shù)使用所述地址范圍對數(shù)據(jù)進(jìn)行操作;以及不等待所述第一組函數(shù)的數(shù)據(jù)被沖洗,將所述存儲器中不同的地址范圍在第二流水線的第二組函數(shù)間進(jìn)行重新分布。
      9.如權(quán)利要求8所述的方法,其中,所述分布步驟包括在所述第一組函數(shù)間分布一組地址界限。
      10.如權(quán)利要求9所述的方法,其中,所述分布步驟還包括確定地址是否在地址界限內(nèi),如果所述地址落入所述地址界限,則處理所述地址,以及如果所述地址落在所述地址界限以外,則將所述地址傳遞到另一個函數(shù)。
      11.如權(quán)利要求8所述的方法,其中,所述操作步驟包括為處理任務(wù)在存儲器中分配空間,將所述任務(wù)分派到處理器,以及產(chǎn)生所述存儲器中地址的列表,所述列表和下一個函數(shù)的任務(wù)對應(yīng)。
      12.如權(quán)利要求11所述的方法,其中所述操作步驟還包括一直等待到和所述地址列表相關(guān)聯(lián)的數(shù)據(jù)被消耗,以及釋放記分板中的所述地址列表。
      13.如權(quán)利要求8所述的方法,其中所述重新分布步驟包括在所述第二組函數(shù)間分布新的一組地址界限,如果所述地址落入新地址界限,則將地址從舊記分板轉(zhuǎn)換到新記分板,以及如果所述地址落在新地址界限以外,則傳遞所述舊記分板中的所述地址的所有權(quán)。
      14.如權(quán)利要求13所述的方法,其中,所述重新分布步驟還包括向下一個函數(shù)發(fā)送消息,以便針對其新地址界限,開始針對其舊的和新的記分板的所述轉(zhuǎn)換和所述傳遞。
      15.如權(quán)利要求8所述的方法,還包括在執(zhí)行過所述重新分布以后,由所述第二流水線中的所述第二組函數(shù)使用所述不同的地址范圍進(jìn)行操作。
      16.一種方法,包括使用地址界限將存儲器在很多個進(jìn)程間劃分;將存儲器空間從所述很多個進(jìn)程中的一個動態(tài)地重新分配到所述很多個進(jìn)程中的另一個,同時所述很多個進(jìn)程持續(xù)地使用所述存儲器。
      17.如權(quán)利要求16所述的方法,其中所述動態(tài)地重新分配的步驟包括接收新的一組地址界限,如果地址落在所述新的一組地址界限內(nèi),則保留所述地址的所有權(quán),以及如果所述地址落在所述新的一組地址界限以外,則傳遞所述地址的所有權(quán)。
      18.如權(quán)利要求17所述的方法,其中,所述傳遞所有權(quán)的步驟包括通過高優(yōu)先權(quán)總線將所述地址發(fā)送到另一個進(jìn)程。
      19.如權(quán)利要求17所述的方法,其中,所述重新分布的步驟還包括發(fā)送消息到下一個進(jìn)程,以便利用其新的一組地址界限,針對其對應(yīng)的地址執(zhí)行所述保留和所述傳遞。
      20.一種方法,包括在一組固定函數(shù)間分配與先前在圖形處理設(shè)備中所分配的量不同量的物理存儲器而不執(zhí)行對數(shù)據(jù)的完全沖洗,所述數(shù)據(jù)與所述一組固定函數(shù)相關(guān)聯(lián)。
      21.如權(quán)利要求20所述的方法,其中,所述一組固定函數(shù)在所述分配期間持續(xù)地使用和訪問所述物理存儲器。
      22.如權(quán)利要求20所述的方法,其中,所述分配步驟包括在所述一組固定函數(shù)的舊的一組地址界限和新的一組地址界限之間轉(zhuǎn)移所述存儲器中的地址。
      23.如權(quán)利要求22所述的方法,其中,所述分配步驟包括根據(jù)所述新的一組地址界限,在高優(yōu)先權(quán)總線上,在固定函數(shù)之間傳遞所述存儲器中地址的所有權(quán)。
      全文摘要
      本發(fā)明涉及線程處理器中緩沖區(qū)在多個客戶間的動態(tài)分配。一種方法可以包括在第一流水線的第一組函數(shù)間分布存儲器中的地址范圍。所述第一流水線中的所述第一組函數(shù)可以使用所述地址范圍對數(shù)據(jù)進(jìn)行操作。存儲器中不同的地址范圍可以在第二流水線的第二組函數(shù)間重新分布,而不必等待所述第一組函數(shù)的數(shù)據(jù)被沖洗。
      文檔編號G06F12/00GK1831778SQ20051013250
      公開日2006年9月13日 申請日期2005年12月23日 優(yōu)先權(quán)日2004年12月23日
      發(fā)明者托馬斯·派亞扎 申請人:英特爾公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1