專利名稱:基于塊的非透明高速緩存的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及集成電路領(lǐng)域,并且更具體地涉及具有片上存儲器的集成電路。
背景技術(shù):
各種類型的集成電路包含有片上存儲器。例如,集成電路可以包括高速緩存。包括處理器的集成電路常常包括高速緩存以提供對還存儲在片外存儲器中的數(shù)據(jù)的子集的低延遲訪問。通常,高速緩存是存儲最近使用數(shù)據(jù)的硬件管理的存儲器,高速緩存管理硬件將由處理器(或者集成電路中的其它存儲器讀取設(shè)備)訪問的數(shù)據(jù)的副本寫入高速緩存。 已修改數(shù)據(jù)在高速緩存中可以由較新的數(shù)據(jù)來替代,高速緩存管理硬件可以將所修改的數(shù)據(jù)寫回主存儲器。在一些情況下,處理器可以包括預(yù)取指令和其它高速緩存提示以影響高速緩存管理硬件的操作并且可以標(biāo)記不可高速緩存的存儲器以阻止高速緩存,但軟件通常不能控制高速緩存管理硬件。另一種類型的片上存儲器是嵌入式存儲器或者“本地存儲器”。這類存儲器處于軟件控制之下(即,軟件對存儲器進(jìn)行讀取和寫入并因此直接控制哪一個(gè)數(shù)據(jù)存儲在嵌入式存儲器中)。嵌入式存儲器可以具有比外部存儲器更低的延遲,并且如果頻繁地訪問嵌入式存儲器中存儲的數(shù)據(jù),則與訪問外部存儲器相比可以達(dá)到省電的效果。
發(fā)明內(nèi)容
在一個(gè)實(shí)施例中,提供了一種包括非透明存儲器和控制電路的非透明存儲器單元??刂齐娐房梢詫⒎峭该鞔鎯ζ髯鳛橐唤M非透明存儲塊來管理。在一個(gè)或更多個(gè)處理器上執(zhí)行的軟件可以請求在其中處理數(shù)據(jù)的非透明存儲塊。控制電路可以分配第一塊,并且可以返回所分配塊的地址(或者其它指示),以便軟件可以訪問該塊??刂齐娐愤€可以提供非透明存儲器和非透明存儲器單元所耦合的主存儲器系統(tǒng)之間的自動數(shù)據(jù)移動。例如,自動數(shù)據(jù)移動可以包括從主存儲器系統(tǒng)向所分配塊填充數(shù)據(jù),或者在所分配塊的處理完成之后將所分配塊中的數(shù)據(jù)清除(flush)到主存儲器系統(tǒng)。當(dāng)軟件請求塊時(shí),軟件可以提供一種類型的請求。這種類型可以控制非透明存儲器單元是否提供自動數(shù)據(jù)移動。例如,一種類型可以指定自動填充數(shù)據(jù)到所分配塊中。另一種類型可以指定在處理完成后自動清除數(shù)據(jù)。又一種類型可以是組合的自動填充和自動清除。
下面的詳細(xì)描述參考了現(xiàn)在所簡要描述的附圖。圖1是包括一個(gè)或更多個(gè)透明/非透明組合高速緩存的系統(tǒng)的一個(gè)實(shí)施例的框圖。圖2是透明/非透明組合高速緩存的一個(gè)實(shí)施例的框圖。圖3是包括非透明屬性的頁表?xiàng)l目的一個(gè)實(shí)施例的框圖。
圖4是限定非透明地址范圍的可編程寄存器的框圖。圖5是例示響應(yīng)于存儲器請求的透明/非透明組合存儲器的一個(gè)實(shí)施例的操作的流程圖。圖6是例示可以使用透明/非透明組合存儲器的非透明部分的代碼的一個(gè)實(shí)施例的操作的流程圖。圖7是例示存儲器地址空間的一個(gè)實(shí)施例的框圖。圖8是例示響應(yīng)于塊請求的基于塊的非透明高速緩存的一個(gè)實(shí)施例的操作的流程圖。圖9是例示基于塊的非透明高速緩存的一個(gè)實(shí)施例中每塊的各種狀態(tài)以及狀態(tài)之間的轉(zhuǎn)換的框圖。圖10是例示可以請求非透明存儲塊并且處理塊中的數(shù)據(jù)的代碼的一個(gè)實(shí)施例的操作的流程圖。圖11是系統(tǒng)的一個(gè)實(shí)施例的框圖。圖12是計(jì)算機(jī)可訪問存儲介質(zhì)的一個(gè)實(shí)施例的框圖。雖然容易對本發(fā)明進(jìn)行各種修改和各種形式的替代,但在附圖中以示例的方式示出了本發(fā)明的特定實(shí)施例,并且在此將對這些實(shí)施例進(jìn)行詳細(xì)描述。然而,應(yīng)當(dāng)理解,附圖及其詳細(xì)說明并不旨在將本發(fā)明限制為所公開的特定形式,而是相反,其目的是要覆蓋落在由所附權(quán)利要求限定的本發(fā)明的精神和范圍內(nèi)的所有修改、等同物和替代方案。在此使用的標(biāo)題僅用于組織的目的,并不意味著要用于限制描述的范圍。如整個(gè)申請中所使用的那樣,單詞“可以”表示許可的含義(即,意味著具有可能),而非強(qiáng)制的含義(即,意味著必須)。類似地,單詞“包括”、“包含”和“具有”意味著包括但不限于。各種單元、電路或者其它組件可被描述為“配置成”執(zhí)行一個(gè)或更多個(gè)任務(wù)。在這樣的上下文中,“配置成”是對結(jié)構(gòu)的寬泛表述,一般意為“具有這樣的電路”,該電路在操作期間執(zhí)行一個(gè)或者更多個(gè)任務(wù)。依此,即使在單元/電路/組件當(dāng)前未開啟時(shí),該單元/電路/組件也可以被配置成執(zhí)行該任務(wù)。一般而言,構(gòu)成與“配置成”相對應(yīng)的結(jié)構(gòu)的電路可以包括硬件電路。類似的,為了便于描述,可以將各種單元/電路/組件描述為執(zhí)行一個(gè)或更多個(gè)任務(wù)。這樣的描述應(yīng)當(dāng)被理解為包括用語“配置成”。被配置成執(zhí)行一個(gè)或更多個(gè)任務(wù)的單元/電路/組件的描述明確地不是為了援引35U. S. C § 112第6段對單元/電路/ 組件的解釋。
具體實(shí)施例方式透明/非透明組合高速緩沖存儲器在一個(gè)實(shí)施例中,集成電路包括內(nèi)部數(shù)據(jù)存儲器和關(guān)聯(lián)標(biāo)簽存儲器,所述關(guān)聯(lián)標(biāo)簽存儲器被配置成存儲與數(shù)據(jù)存儲器中的位置的至少一個(gè)子集對應(yīng)的一組標(biāo)簽。由標(biāo)簽所覆蓋的數(shù)據(jù)存儲器部分可以被用作透明緩沖存儲器。透明存儲器通??赡苡捎布芾?,而軟件因此可能不直接讀取/寫入透明存儲器。如果在透明存儲器中存儲由軟件讀取/寫入 (例如,加載或存儲指令)來尋址的數(shù)據(jù),則硬件將從透明存儲器提供數(shù)據(jù)(對于讀取)或者更新透明存儲器中的數(shù)據(jù)(對于寫入)。盡管可以減少完成存儲器操作的延遲,但軟件可能不具有存儲器操作在透明存儲器中完成(與在外部主存儲器系統(tǒng)中的完成相對)的任何
6其它指示。從另一個(gè)角度看,透明存儲器可以不被單獨(dú)地映射到存儲器地址空間中的存儲器地址,而是可以存儲來自外部存儲器的數(shù)據(jù)的副本,其中外部存儲器位置被映射到關(guān)聯(lián)存儲器地址??梢詫⑼该鞔鎯ζ髋R時(shí)地映射到透明存儲器中存儲的數(shù)據(jù)的地址(例如,經(jīng)由標(biāo)簽存儲器),但相應(yīng)的主存儲器位置總是也被映射到每個(gè)地址。硬件還會保證數(shù)據(jù)的一致性(如果實(shí)施一致性),并且在通過硬件修改透明存儲器中的數(shù)據(jù)以及從透明存儲器中刪除數(shù)據(jù)的情況下更新相應(yīng)的主存儲器副本。沒有被標(biāo)簽所覆蓋的數(shù)據(jù)存儲器的剩余部分可以被用作非透明存儲器。軟件可以將非透明存儲器映射到存儲器地址空間的一部分。例如,可能不存在與映射到非透明存儲器的存儲器地址空間的一部分相關(guān)聯(lián)的主存儲器位置。替代地,如果存在與映射到非透明存儲器的存儲器地址空間的一部分相關(guān)聯(lián)的主存儲器位置,則這些位置將不會由耦合到非透明存儲器的請求者所生成的請求來訪問。因此,軟件可以使用對映射到非透明存儲器的存儲器地址空間的一部分中的地址進(jìn)行尋址的加載/存儲指令來直接讀取/寫入非透明存儲器。在一個(gè)實(shí)施例中,軟件可以管理非透明存儲器的內(nèi)容。例如,軟件可以根據(jù)存儲指令或者通過對直接存儲器訪問(DMA)單元進(jìn)行編程以從另一個(gè)源向非透明存儲器傳輸數(shù)據(jù)來初始化非透明存儲器的內(nèi)容。同樣,軟件可以讀取內(nèi)容并且將它們寫入一些其它位置 (或者使用DMA傳輸)以將數(shù)據(jù)移出非透明存儲器。在下面針對基于塊的非透明存儲器所更加詳細(xì)描述的另一個(gè)實(shí)施例中,非透明存儲器可以具有相關(guān)硬件以響應(yīng)于來自軟件的塊請求將數(shù)據(jù)自動移入或移出非透明存儲器。在一個(gè)實(shí)施例中,透明存儲器的大小可以是可編程的。因而,可以改變分配給透明存儲器的數(shù)據(jù)存儲器數(shù)量以針對集成電路中正在經(jīng)受的工作負(fù)荷來優(yōu)化透明存儲器。例如,對于由工作負(fù)荷(其“存儲器占用量”)所操作的給定大小的數(shù)據(jù)集以及對于操作期間對數(shù)據(jù)的給定類型的訪問而言,增加一定大小之上的透明存儲器通常不會導(dǎo)致性能上的顯著增加。對于數(shù)據(jù)集的訪問的特定大小上的命中率可以達(dá)到足夠高的百分比,對于該百分比而言進(jìn)一步的大小增加僅僅使命中率少量增加。因此,通過對透明部分的大小進(jìn)行編程, 可以優(yōu)化專用于透明存儲器的數(shù)據(jù)存儲器的數(shù)量并且存儲器的剩余部分可以用作非透明存儲器。在一個(gè)實(shí)施例中,標(biāo)簽存儲器可以具有用于標(biāo)簽的容量以僅僅覆蓋數(shù)據(jù)存儲器的一部分,即使將透明存儲器編程為其最大大小。標(biāo)簽存儲器常??梢员葦?shù)據(jù)存儲器占據(jù)更多的每一存儲位的空間,并因而限制標(biāo)簽為數(shù)據(jù)存儲器的一部分可以限制透明/非透明存儲器的總體大小。因此,在一些實(shí)施例中,可以實(shí)現(xiàn)半導(dǎo)體面積的高效使用。替代地,標(biāo)簽存儲器可以具有用于數(shù)據(jù)存儲器的每個(gè)高速緩存塊的標(biāo)簽的容量。這些實(shí)施例可以允許整個(gè)數(shù)據(jù)存儲器被分配為透明存儲器。在這些實(shí)施例中,與數(shù)據(jù)存儲器的非透明部分對應(yīng)的標(biāo)簽存儲器可以被用來存儲相應(yīng)塊、相應(yīng)塊所映射的存儲器地址等的狀態(tài)信息。在又一個(gè)其它替代方案中,如果期望的話,可以提供單獨(dú)的標(biāo)簽表來存儲與非透明存儲器中的塊對應(yīng)的地址和狀態(tài)信息。數(shù)據(jù)存儲器(其具有分配給透明和非透明存儲器的部分)仍然可以是單個(gè)存儲器陣列,具有解碼地址以訪問陣列的單個(gè)解碼器?;趯ν该骱头峭该鞯姆峙洌獯a器可以修改其地址解碼以保證將透明訪問解碼到透明部分??梢杂绍浖芾矸峭该鞑糠?,以便非透明訪問使用被自然地解碼到非透明部分的地址。替代地,解碼器可以被配置成將非透明訪問的地址解碼到非透明部分。使用單個(gè)存儲器在空間方面也是高效的,同時(shí)提供期望的透明和非透明功能。在一些實(shí)施例中,可能存在與硬件在透明存儲器中可能進(jìn)行的處理相比而言軟件在非透明存儲器中可能處理得更好的一些類型的工作負(fù)荷。例如,硬件可以在透明存儲器中保持最近訪問的數(shù)據(jù)。不涉及大量的對在前訪問數(shù)據(jù)的重新訪問的數(shù)據(jù)集處理可能不會從透明存儲器中受益,但軟件可能能夠高效地管理非透明片上存儲器以提供對數(shù)據(jù)的更低延遲的訪問(平均值)。即使對于被頻繁地重新訪問的數(shù)據(jù)而言,非透明存儲器有時(shí)可能比透明存儲器更高效和/或提供更好的性能。例如,在不影響/干擾其它高速緩存操作的情況下從透明高速緩存中清除地址范圍可能是富有挑戰(zhàn)性的,而在一個(gè)實(shí)施例中,可以通過非透明存儲器中的硬件清除地址范圍。在另一個(gè)示例中,高速緩存中實(shí)施的替換策略可能不適合特定的工作負(fù)荷,而允許軟件控制分配并且從非透明存儲器中收回則可以使非透明存儲器中的數(shù)據(jù)存儲與工作負(fù)荷相匹配。涉及更多的數(shù)據(jù)的重新訪問的其它訪問類型可以受益于透明存儲器?,F(xiàn)在轉(zhuǎn)向圖1,顯示了包括一個(gè)或更多個(gè)透明/非透明組合片上存儲器的系統(tǒng)的一個(gè)實(shí)施例的框圖。在圖1的實(shí)施例中,系統(tǒng)包括一個(gè)或更多個(gè)圖形處理單元 (GPU)IOA-ION、相應(yīng)的2級(L2)高速緩存12A-12N和多核管理塊(MCMB) 14A。MCMB 14A包括共享高速緩沖存儲器16A(其一部分可以是3級(L3)透明高速緩沖存儲器并且其一部分可以是非透明存儲器)。MCMB 14A還包括耦合到共享存儲器16A的控制單元18A。MCMB 14A 耦合到L2高速緩存12A-12N(其耦合到相應(yīng)的GPU 10A_1 ON)。MCMB 14A還耦合到主存儲器系統(tǒng)20。該系統(tǒng)進(jìn)一步包括一個(gè)或更多個(gè)中央處理單元(CPU)22A-22M、相應(yīng)的2級(L2) 高速緩存24A-24M和多核管理塊(MCMB) 14B。MCMB 14B包括共享高速緩沖存儲器16B (其一部分可以是3級(L3)透明高速緩沖存儲器并且其一部分可以是非透明存儲器)。MCMB 14B 還包括耦合到共享存儲器16B的控制單元18B。MCMB14B耦合到L2高速緩存24A_24M(其耦合到相應(yīng)的CPU 22A-22M)。MCMB 14B還耦合到主存儲器系統(tǒng)20。在此通過跟隨有字母的附圖標(biāo)記來引用的組件可以與具有相同附圖標(biāo)記但不同字母的其它組件類似(但并非必須完全相同)。可以通過單獨(dú)的附圖標(biāo)記來共同引用具有相同附圖標(biāo)記但不同字母的組件(例如,可以將GPU 10A-10N共同地稱為GPU 10)。一般而言,每一個(gè)共享高速緩沖存儲器16可以耦合成從一個(gè)或更多個(gè)請求源接收存儲器請求。例如,在圖1中,GPU 10可以是存儲器16A的請求源,CPU 22可以是存儲器 16B的請求源。如圖1中所示,存儲器請求可以穿過其它組件(例如,分別穿過圖1中的L2 高速緩存12和24)以到達(dá)共享存儲器,并且如果存儲器請求在L2高速緩存12或24中命中,則它們可能不到達(dá)共享存儲器。GPU 10和CPU 22可以被配置成響應(yīng)于執(zhí)行加載/存儲指令、響應(yīng)于指令獲取以及響應(yīng)于諸如地址轉(zhuǎn)換的輔助支持操作而生成存儲器請求。盡管在該實(shí)施例中將處理器用作請求源,但可以使用能夠生成存儲器請求的任何電路。存儲器請求可以包括將請求識別為非透明或透明的非透明屬性。例如,非透明屬性可以是指示非透明被設(shè)置而透明被清除的情況的位。在其它實(shí)施例中可以使用該位的設(shè)置和清除狀態(tài)的相反含義,并且可以使用其它屬性編碼。如果指示存儲器請求為非透明,則高速緩沖存儲器16可以被配置成將地址解碼到存儲器的非透明部分。可以響應(yīng)于存儲器請求(如果請求為讀取)提供存儲在所識別位置的數(shù)據(jù)或者響應(yīng)于存儲器請求(如果請求為寫入)更新存儲在所識別位置的數(shù)據(jù)。也就是說,存儲器請求的地址可以直接對存儲器進(jìn)行尋址,而無需執(zhí)行任何標(biāo)簽比較或者地址的其它鑒定(qualification)。另一方面,可以解碼透明存儲器請求以對存儲器的透明部分進(jìn)行尋址。如果檢測到標(biāo)簽匹配并且高速緩存中的高速緩存塊為有效,則可以提供/更新來自該一個(gè)位置或者更多個(gè)位置的數(shù)據(jù)。檢測到有效標(biāo)簽匹配可以被稱為高速緩存命中 (所尋址的數(shù)據(jù)存儲在高速緩存中)。沒有檢測到有效標(biāo)簽匹配可以被稱為高速緩存未命中(所尋址的數(shù)據(jù)沒有存儲在高速緩存中)??刂茊卧?8可以被配置成啟動高速緩存填充以響應(yīng)于高速緩存未命中而將所尋址的數(shù)據(jù)復(fù)制到高速緩存??梢赃x擇高速緩存中的位置來存儲未命中的高速緩存塊,并且如果有效的、所修改的(臟的)高速緩存塊存儲在所選擇的位置中,則控制單元18可以被配置成將所修改的高速緩存塊寫回主存儲器系統(tǒng)20。另一方面,存儲器的非透明部分中不存在未命中的概念,因此不存在由控制單元18為非透明部分啟動的高速緩存填充??梢砸愿鞣N方式來確定非透明屬性。在一個(gè)實(shí)施例中,非透明屬性可以包含在用來將虛擬地址轉(zhuǎn)換為用于訪問存儲器的物理地址的頁表?xiàng)l目中。例如,主存儲器系統(tǒng)20 中存儲的頁表26可以包括頁表?xiàng)l目,所述頁表?xiàng)l目包括頁表所轉(zhuǎn)換的每一頁的非透明屬性??刂铺摂M地址轉(zhuǎn)換的軟件可以給每一頁指定非透明屬性。軟件可以在CPU22A-22M、GPU 10A-10N或者兩者之上執(zhí)行。在一個(gè)實(shí)施例中,軟件可以在用于訪問主存儲器系統(tǒng)20的存儲器地址空間內(nèi)指定非透明地址范圍,并且可以將該非透明地址范圍映射到存儲器16的非透明部分。對非透明地址范圍中頁的轉(zhuǎn)換可以具有指示非透明的非透明屬性,并且其他頁可以具有指示透明的非透明屬性。其它實(shí)施例可以使用其它機(jī)制來確定非透明屬性。例如,可以將非透明地址范圍編程到存儲器請求路徑中可訪問的一個(gè)或更多個(gè)寄存器中(例如,GPU 10或22的存儲器管理單元中;處理器10或22的地址生成單元中;存儲器16中或其控制單元18中等)。其它實(shí)施例可以將非透明屬性指定為指令的操作數(shù)(經(jīng)由特定指令編碼等)。GPU 10A-10N可以實(shí)現(xiàn)針對圖形操作(例如,將圖像渲染到幀緩沖器中、像素操作等)而優(yōu)化的指令集架構(gòu)。GPU 10A-10N可以實(shí)現(xiàn)任何微架構(gòu),包括標(biāo)量的、超標(biāo)量的、 流水線的、超級流水線的、無序的、有序的、推測的、非推測的等等,或者它們的組合。GPU 10A-10N可以包括電路,并且可選地,可以實(shí)現(xiàn)微編碼技術(shù)。類似地,CPU22A-22M可以實(shí)現(xiàn)通用指令集架構(gòu)并且可以實(shí)現(xiàn)任何微架構(gòu),包括上述可能中的任何一個(gè)。GPU和CPU可以是示例或者處理器(其可以是被配置成執(zhí)行指令的任何電路)。處理器可以是分立集成電路、 集成在集成電路上的內(nèi)核等等。例如,圖1中,可以將GPU 10、L2高速緩存12和MCMB 14A 集成在圖形芯片上,并且可以將CPU 22、L2高速緩存24和MCMB 14B集成在多內(nèi)核CPU芯片上。在另一個(gè)實(shí)施例中,可以將GPU 10、CPU 22、L2高速緩存12和24以及MCMB14集成在集成電路中。在一些實(shí)施例中,集成電路還可以包括與GPU/CPU和相關(guān)電路集成在一塊的其它組件。GPU 10和CPU 22可以包括Ll高速緩存(未示出),因此在該實(shí)施例中,高速緩存 12和24是L2高速緩存。L2高速緩存可以具有任意大小和配置(例如,關(guān)聯(lián)設(shè)置、直接映射等等)。L2高速緩存還可以實(shí)現(xiàn)任意的高速緩存塊大小(例如,32字節(jié)或64字節(jié),或者更大或更小)。高速緩存塊大小可以是高速緩存中進(jìn)行分配和解除分配的單位。
除了包括組合高速緩沖存儲器16之外,MCMB 14通??梢蕴峁┫鄳?yīng)處理器和主存儲器系統(tǒng)20之間的互連。如果實(shí)施高速緩存一致性,則MCMB 14可以負(fù)責(zé)發(fā)送探測(例如, 來自一個(gè)處理器的請求可能導(dǎo)致對其它處理器的探測以獲得其它處理器的Ll或L2高速緩存中的任何已修改數(shù)據(jù)、針對任何更新請求使已高速緩存的副本無效等等)。MCMB可以相互通信和/或與主存儲器系統(tǒng)20中的存儲器控制器通信。在一個(gè)實(shí)施例中,存儲器控制器可以與MCMB 14 —同實(shí)現(xiàn)在芯片上,和/或可以是一個(gè)MCMB 14的一部分。主存儲器系統(tǒng)20可以包括任何類型的存儲器。例如,存儲器可以包含動態(tài)隨機(jī)訪問存儲器(DRAM)、同步DRAM (SDRAM)、雙速率(DDR、DDR2、DDR3等等)SDRAM (包括諸如mDDR3 的 SDRAM 的移動版本)、RAMBUS DRAM (RDRAM)、靜態(tài) RAM(SRAM)等等。圖1的系統(tǒng)的其它實(shí)施例可以包括僅僅一個(gè)共享高速緩沖存儲器(例如,或者存儲器16A/控制單元18A或者存儲器16B/控制單元18B)。而其它實(shí)施例可以具有對于CPU 22A-22M和GPU 10A-10N兩者而言可訪問的共享存儲器(其可以類似于上述的存儲器16/ 控制單元18)。注意,各個(gè)實(shí)施例中每種組件的數(shù)量可以變化。例如,可以提供一個(gè)或更多個(gè)GPU 10A-10N,并且可以提供一個(gè)或更多個(gè)CPU22A-22M。在其它實(shí)施例中,可以沒有GPU和/或沒有CPU。如ION和22M所示,一種處理器的數(shù)量可以不同于其它處理器的數(shù)量。圖1中, L2高速緩存12和M被顯示為與相應(yīng)的處理器相關(guān)聯(lián),但在其它實(shí)施例中可以由處理器的子集所共享。又在其它實(shí)施例中,可以沒有L2高速緩存。現(xiàn)在轉(zhuǎn)向圖2,顯示了存儲器16A和控制單元18A的一個(gè)實(shí)施例的框圖。存儲器 16B和控制單元18B可以類似。在所示實(shí)施例中,存儲器16A包括解碼器30A-30B、標(biāo)簽存儲器32、數(shù)據(jù)存儲器;34和比較器36??刂茊卧?8A包括邊界(delineation)寄存器38。解碼器30A-30B被耦合成接收存儲器請求的地址(圖2中的地址)、請求的非透明屬性(圖2 中的NT)和請求的其它屬性(圖2中的其它屬性)。在各個(gè)實(shí)施例中,控制單元18A被耦合成接收非透明屬性,并且還可以接收其它屬性或者其它屬性中的一部分。比較器被耦合成接收非透明屬性、其它屬性(或者其它屬性的至少一部分)以及地址(或者與來自標(biāo)簽存儲器32的標(biāo)簽進(jìn)行比較的地址的至少一部分)。解碼器30A耦合至標(biāo)簽存儲器32和控制單元18A,解碼器30B耦合至數(shù)據(jù)存儲器34和控制單元18A。數(shù)據(jù)存儲器34耦合至控制單元18A,以提供到L2高速緩存和主存儲器系統(tǒng)的讀數(shù)據(jù)輸出,以及從L2高速緩存接收寫數(shù)據(jù)。標(biāo)簽存儲器32耦合至比較器36 (比較器36耦合至數(shù)據(jù)存儲器34和控制單元18A)。解碼器30A-30B可以被配置成解碼存儲器請求的地址以選擇標(biāo)簽存儲器32和數(shù)據(jù)存儲器34中各自要被訪問的存儲器位置。標(biāo)簽存儲器32中的位置可以存儲要與透明存儲器請求的地址的標(biāo)簽部分進(jìn)行比較的一個(gè)或更多個(gè)標(biāo)簽。位置中存儲的標(biāo)簽數(shù)量可以取決于透明高速緩存的配置。例如,如果透明高速緩存是直接映射的,則可以存儲一個(gè)標(biāo)簽。 如果透明高速緩存是N路關(guān)聯(lián)設(shè)置的,則可以存儲N個(gè)標(biāo)簽。標(biāo)簽可以由標(biāo)簽存儲器32與諸如有效位的各種狀態(tài)一同輸出到比較器36。比較器36可以比較標(biāo)簽和地址的標(biāo)簽部分, 并且將命中或未命中通知給數(shù)據(jù)存儲器34和控制單元18A。如果高速緩存是N路關(guān)聯(lián)設(shè)置的,則比較器36還可以識別命中的路。數(shù)據(jù)存儲器34可以從命中的路輸出數(shù)據(jù)(或者針對寫入,可以向命中的路寫入寫數(shù)據(jù))。地址的標(biāo)簽部分可以是除了標(biāo)識高速緩存塊中存儲器請求的偏移的位以及還除了由解碼器30A-30B解碼以選擇位置的索引位之外的地址部分。
10
比較器36可以接收非透明屬性,并且可以被配置成禁止針對非透明存儲器訪問發(fā)送命中信號。替代地,數(shù)據(jù)存儲器34可以響應(yīng)于非透明存儲器請求訪問數(shù)據(jù)存儲器34 的非透明部分中所識別的位置。類似地,存儲器請求的其它屬性也可以影響比較。例如,其它屬性可以包括不可緩存的屬性和/或高速緩存旁路屬性。如果存儲器訪問是不可緩存的或者高速緩存被旁路,則比較器36還可以禁止斷言對于訪問的命中??刂茊卧?8A可以與 MCMB 14A中的其它電路連接以啟動存儲器請求(來自/到圖2中的主存儲器系統(tǒng))的主存儲器訪問。替代地,在一些實(shí)施例中,可以為非一致性部分保持標(biāo)簽并且比較器36可以進(jìn)行比較。類似地,解碼器30B可以被配置成解碼地址并且選擇要被訪問的位置。如圖2中水平虛線40所示,可以將數(shù)據(jù)存儲器34劃分為透明高速緩存部分(圖2中虛線40以上) 和非透明存儲器部分(圖2中虛線40以下)。因此,可以將非透明存儲器地址解碼到非透明部分中的位置并且可以將透明存儲器地址解碼到透明部分中的位置。例如,在一個(gè)實(shí)施例中,可以將數(shù)據(jù)存儲器334的透明部分映射到索引的最低數(shù)值。在這樣一個(gè)實(shí)施例中,解碼器30B可以對針對透明存儲器請求而被映射到透明部分的范圍之外的索引的地址位進(jìn)行掩碼,保證將任一透明存儲器請求地址解碼到透明部分。也就是說,如果非透明屬性指示透明,則解碼器30B可以將索引的較高有效位掩碼為零,迫使該索引被解碼到透明部分??梢圆粚Ψ峭该鞔鎯ζ髡埱蟮刂愤M(jìn)行掩碼,并因此可以將非透明存儲器請求地址解碼到非透明部分。在一個(gè)實(shí)施例中,軟件可以控制非透明存儲器地址范圍的分配,以使該范圍中的任何地址具有針對透明存儲器請求而掩碼的索引部分中的非零地址位(并因此在解碼器30B 中無需正常地址解碼之外的任何特定邏輯的情況下將非透明存儲器請求地址解碼到非透明部分)。例如,數(shù)據(jù)存儲器M可以包括4096個(gè)可尋址存儲器位置,由此數(shù)據(jù)存儲器的索引可以包括12個(gè)地址位。如果將存儲器位置中的256個(gè)分配給透明高速緩存,則可以針對透明存儲器請求對最低有效的8個(gè)地址位進(jìn)行解碼(可以對最高有效的4個(gè)位進(jìn)行掩碼)并且非透明存儲器地址范圍可以包括索引的4個(gè)最高有效位中的非零位。其它實(shí)施例可以將透明和非透明地址映射到其它路上的數(shù)據(jù)存儲器位置。在一個(gè)實(shí)施例中,透明高速緩存的大小在邊界寄存器38中是可編程的。在這樣一個(gè)實(shí)施例中,控制單元18A可以向解碼器30A-30B提供掩碼控制以針對高速緩存的可編程大小而對附加地址位進(jìn)行掩碼。繼續(xù)以上示例,如果將透明高速緩存編碼為1/2大小(1 個(gè)存儲器位置),則對一個(gè)附加最高有效位(即,第5個(gè)最高有效位)進(jìn)行掩碼。在此情況下,解碼器30A還可以對索引進(jìn)行掩碼,以減少匹配高速緩存的已編程大小的標(biāo)簽訪問。因?yàn)榭梢詫?dāng)前沒有被用于透明高速緩沖存儲器的部分用于非透明存儲器,所以已編程邊界還可以增加非透明存儲器的大小。其它實(shí)施例可以使用不同的解碼器30A-30B配置。例如,可以將非透明存儲器范圍自由地分配給任何基址,并且解碼器30B可以通過將基址解碼到非透明部分中的第一位置、將基址加第一位置的大小解碼到第二位置等等來將該范圍解碼到數(shù)據(jù)存儲器的非透明部分。另一個(gè)實(shí)施例還可以使用將透明高速緩存和非透明存儲器映射到數(shù)據(jù)存儲器34中的位置的不同方案。在一些實(shí)施例中,可以對數(shù)據(jù)存儲器34進(jìn)行分組(bank)。例如,可以橫穿數(shù)據(jù)存儲器34中的八個(gè)8字節(jié)存儲體來存儲64字節(jié)的高速緩存塊。在這樣一個(gè)實(shí)施例中,非透明存儲器可以具有比高速緩存塊更精細(xì)的粒度。例如,非透明存儲器訪問可以是存儲體大小的(例如,在上述示例中8字節(jié))。如圖2中所示,數(shù)據(jù)存儲器34可以是由單個(gè)解碼器管理單存儲器陣列。也就是說,解碼器可以解碼地址以生產(chǎn)一組字線,每一字線選擇形成數(shù)據(jù)存儲器34的存儲器陣列中的不同位置。位置中的一部分可以是透明高速緩沖存儲器的高速緩存塊存儲位置,而其它位置可以是非透明存儲器位置。在另一個(gè)實(shí)施例中,也可以標(biāo)簽存儲器的非透明部分。這樣的實(shí)施例可以允許將多個(gè)地址范圍指定為非透明地址。然而,在這樣一個(gè)實(shí)施例中,非透明存儲器的標(biāo)簽存儲器可以由軟件讀取和寫入,以致軟件可以管理非透明部分的內(nèi)容。注意,盡管圖2例示了輸入到存儲器16A的一個(gè)地址,但其它實(shí)施例可以在多端口配置中并行地支持多于一個(gè)的地址。針對每一個(gè)端口可以包括類似于30A-30B的解碼器?,F(xiàn)在轉(zhuǎn)向圖3,顯示了可以存儲在頁表沈中的頁表?xiàng)l目50的一個(gè)實(shí)施例的框圖。 頁表?xiàng)l目50可以用作任何地址轉(zhuǎn)換機(jī)制的一部分。在一些實(shí)施例中,可以使用分級方式的多頁表訪問將虛擬地址映射到物理地址。在這樣的實(shí)施例中,可能不需要虛擬地址標(biāo)簽(VA 標(biāo)簽)。在其它實(shí)施例中,可以將沒有用來查找頁表?xiàng)l目的虛擬地址部分與條目50的虛擬地址標(biāo)簽字段進(jìn)行匹配。物理頁編號(PPN)字段可以存儲物理地址的頁部分(其可以與虛擬地址的偏移部分連接來形成物理地址)??梢灾С秩魏蔚捻摯笮?例如,4千字節(jié)、8千字節(jié)或者諸如1-4兆字節(jié)的更大,或者甚至更大)。在一些實(shí)施例中,可以支持多于一頁的大小。頁表?xiàng)l目50還包括非透明屬性(NT),并且可以包括其它屬性(其它屬性字段)。例如,其它屬性可以包括可緩存性、直寫或?qū)懟?、?quán)限等級要求、有效位、讀/寫許可等等。因此,使用諸如條目50的頁表?xiàng)l目,軟件可以使用NT屬性將一定范圍的物理地址分配為非透明。該范圍之外的其它頁可以具有指示透明的NT屬性。圖4是可以編程有非透明地址范圍的寄存器52的實(shí)施例的框圖。可以以任何方式表達(dá)地址范圍。例如,如圖4中所示,地址范圍可以表示為基址和界限。該范圍還可以表示為基址和大小,或者可以以定義范圍的任何其它方式來表示??梢栽谟糜诖鎯ζ髡埱蟮牡刂飞珊娃D(zhuǎn)換(如果可應(yīng)用)的任一點(diǎn)處使用諸如寄存器52的寄存器來確定存儲器請求的非透明屬性。例如,處理器中的存儲器管理單元(MMU)可以包括寄存器52,并且可以將所轉(zhuǎn)換的地址與基址及范圍字段進(jìn)行比較來確定該地址是位于非透明地址范圍內(nèi)還是位于非透明地址范圍之外。在一些實(shí)施例中,通過包括多于一個(gè)的寄存器52可以定義多于一個(gè)的地址范圍。接下來轉(zhuǎn)向圖5,顯示了例示響應(yīng)于提供給存儲器16A/控制單元18A的存儲器請求的存儲器16A/控制單元18A的一個(gè)實(shí)施例的操作的流程圖。盡管為了易于理解而以特定順序顯示了流程塊,但可以使用其它順序。也可以通過控制單元18A內(nèi)的組合邏輯并行地執(zhí)行流程塊??梢酝ㄟ^多個(gè)時(shí)鐘周期將流程塊、流程塊的組合和/或?qū)⒘鞒虉D作為整體來流水線化。如果請求的非透明屬性指示透明(判決塊54,“否”分支),則可以配置解碼器 30A-30B以對存儲器請求的地址進(jìn)行掩碼來保證將地址解碼到數(shù)據(jù)存儲器34的透明部分 (塊56)。如果非透明屬性指示非透明(判決塊M,“是”分支),則不進(jìn)行掩碼。在這兩種情況下,可以配置解碼器30A-30B來解碼地址(塊58)并且選擇標(biāo)簽存儲器32和數(shù)據(jù)存儲器34中的存儲器位置。如果存儲器請求為透明并且是存儲器16A的透明部分中的未命中 (判決塊60,“是”分支),則可以配置控制單元18A來生成高速緩存填充以獲得未命中高速緩存塊(塊62)??梢耘渲每刂茊卧?8A來選擇塊以從高速緩存收回,并且如果所收回的塊被修改,則可以配置控制單元18A來將高速緩存塊寫回主存儲器系統(tǒng)20。如果存儲器請求為命中或者為非透明(判決塊60,“否”分支),則可以訪問數(shù)據(jù)存儲器34中的存儲器位置。如果存儲器請求是讀取(判決塊64,“是”分支),則存儲器16A可以輸出來自數(shù)據(jù)存儲器34中所訪問位置的數(shù)據(jù)(塊66)。否則,存儲器請求是寫入(判決塊64,“否”分支),而存儲器16A可以用寫入數(shù)據(jù)更新所訪問的位置(塊68)。接下來轉(zhuǎn)向圖6,顯示了例示可以由CPU 22或者GPU 10中的一個(gè)或兩者執(zhí)行以控制存儲器16A的控制代碼的一個(gè)實(shí)施例的操作的流程圖。可以針對存儲器16B執(zhí)行類似操作??刂拼a可以包含當(dāng)被執(zhí)行時(shí)可以導(dǎo)致系統(tǒng)實(shí)現(xiàn)圖6中所示操作的指令。盡管按照圖 6中的特定順序顯示了流程塊,但可以使用其它順序。該代碼可以確定存儲器16A的透明高速緩存部分的期望大小(塊70)。期望大小可以是最大大小,或者小于最大大小。各種因素可以影響該確定。例如,要執(zhí)行的工作負(fù)荷可以影響大小。如果工作負(fù)荷受益于較大的高速緩存大小(例如,因?yàn)轭A(yù)期的命中率將上升),則可以選擇較大的高速緩存大小。如果工作負(fù)荷將不會受益于較大的高速緩存(例如,工作負(fù)荷執(zhí)行時(shí)沒有太多的數(shù)據(jù)重用),則可以使用較小的高速緩存大小。該代碼可以將大小編程到控制單元18A中(例如,在邊界寄存器38中-塊72)。取決于所選的透明高速緩存大小和數(shù)據(jù)存儲器34的大小,該代碼可以確定基址和非透明存儲器的大小(塊74)。例如,如果選擇1兆字節(jié)的高速緩存大小,則非透明存儲器范圍的基址可以位于1兆字節(jié)邊界上。非透明存儲器的大小可以是比透明高速緩存的大小小的數(shù)據(jù)存儲器大小(例如,如果數(shù)據(jù)存儲器是8兆字節(jié)并且高速緩存大小是1兆字節(jié), 則非透明存儲器是開始于1兆字節(jié)邊界的7兆字節(jié))。取決于實(shí)施例,該代碼可以對配置寄存器或頁表?xiàng)l目進(jìn)行編程來標(biāo)識非透明存儲器(塊76)。該代碼可以管理非透明存儲器的內(nèi)容(塊78)。例如,該代碼可以將非透明存儲器初始化為已知值、可以在非透明存儲器和其它存儲器位置或外設(shè)之間移動數(shù)據(jù)等等。在一些實(shí)施例中,可以在硬件電路中處理非透明存儲器和其它存儲器位置或外設(shè)之間的數(shù)據(jù)移動。接下來轉(zhuǎn)向圖7,顯示了存儲器地址空間80的一個(gè)實(shí)施例的框圖。存儲器地址空間可以包含被映射到系統(tǒng)存儲器的一組數(shù)值。也就是說,存儲器地址空間80內(nèi)的每個(gè)數(shù)值唯一地標(biāo)識系統(tǒng)存儲器中的特定存儲位置。在一些情況下,可以將存儲器地址空間80的一部分映射到外圍設(shè)備(存儲器映射輸入/輸出(1/0)),但將存儲器地址空間的剩余部分映射到存儲器位置。不同地址空間中的地址可以是不能與存儲器地址空間中的地址進(jìn)行比較的。如圖7中所示,將存儲器地址空間80的一部分映射到存儲器16A的非透明部分 (附圖標(biāo)記82)。存儲器地址空間內(nèi)非透明范圍82的位置可以通過軟件確定,并且在一些實(shí)施例中可以開始于基于透明高速緩存部分的大小的特定邊界。可以將存儲器地址空間中的其它存儲器地址(例如,非透明范圍82之下的地址(示為附圖標(biāo)記84)和非透明范圍82之上的地址(示為附圖標(biāo)記86))映射到主存儲器系統(tǒng)20。如果在頁表中被指示為可緩存的或者經(jīng)由用于確定可緩存性的其它機(jī)制(諸如CPU 22或者GPUlO中可支持的存儲器類型區(qū)域寄存器),范圍84和86中的地址可以具有用于存儲器16A的透明高速緩存部分中的高速緩存的資格。圖7中,在空間的左側(cè)顯示了存儲器地址空間80的數(shù)字地址。因此,下面的主存儲器地址范圍84開始于地址0并且延伸到地址N。地址N可以是作為存儲器16A的透明高速緩存部分的大小的邊界的任何地址。因而,非透明地址范圍開始于地址N+1并且延伸到地址N+M(其中M是非透明范圍的大小)。上面的主存儲器地址范圍開始于地址N+M+1并且延伸到N+M+Q。因此,將0和N+M+Q之間的每個(gè)地址映射到主存儲器系統(tǒng)20或者存儲器 16A的非透明部分中的特定存儲器位置。地址N+M+Q或者是系統(tǒng)中的最大可能地址,或者大于N+M+Q的地址可能導(dǎo)致生成地址的指令中的錯(cuò)誤。基于塊的非誘明存儲器存儲器16A的非透明部分可以足以存儲GPU 10的非透明數(shù)據(jù)集(也就是說,軟件期望映射到存儲器16A中的非透明存儲器的數(shù)據(jù)集)。類似地,非透明存儲器16B可以足以存儲CPU 22的非透明數(shù)據(jù)集。在其它實(shí)施例中,期望的非透明數(shù)據(jù)集可以超過非透明存儲器的大小。對于這樣的實(shí)施例,軟件可能需要相當(dāng)頻繁地將數(shù)據(jù)傳入非透明存儲器以及從非透明存儲器傳出??刂茊卧?8A(或者18B)的一個(gè)實(shí)施例被預(yù)期為在執(zhí)行數(shù)據(jù)移動時(shí)提供輔助??梢栽趫D1實(shí)施例的情境中實(shí)現(xiàn)一些實(shí)施例,其中還將存儲器16A的一部分分配給透明高速緩沖存儲器。然而,可以在不與同一存儲器陣列中的透明高速緩沖存儲器共享的非透明存儲器中實(shí)現(xiàn)其它實(shí)施例(但其仍然與向非透明存儲器生成存儲器請求的請求源位于片上)??梢詫⒎峭该鞔鎯ζ鞯刂贩秶鷦澐譃槎鄠€(gè)非透明存儲塊。非透明存儲塊是可以由請求源(例如,GPU 10A-10N或者CPU 22A-22M)請求的非透明存儲器的連續(xù)(存儲器地址空間中)塊。非透明存儲塊可以是任何期望的大小,并且不需要與高速緩存塊的大小相關(guān)聯(lián)。例如,非透明存儲塊可以是系統(tǒng)中實(shí)施的地址轉(zhuǎn)換機(jī)制中頁的大小,或者可以是頁大小的整數(shù)倍。如果期望的話,其它實(shí)施例也可以使用比頁大小更小的大小。為了讓說明書的剩余部分簡明,將使用GPU 10A-10N作為請求源的示例并且將存儲器16A的非透明部分和控制單元18A作為非透明存儲器的示例。然而,其它實(shí)施例可以具有其它請求源和非透明存儲器,包括CPU 22A-22M和存儲器16B/控制單元18B(或者用于CPU和GPU請求者源的單個(gè)共享存儲器)。在執(zhí)行對非透明存儲器的各種讀取和寫入之外,GPU 10可以被配置成向控制單元 18A傳輸塊請求。塊請求可以標(biāo)識塊的使用模式,并且還可以標(biāo)識主存儲器地址(也就是說,沒有映射到非透明存儲器的地址)??刂茊卧?8A可以被配置成響應(yīng)于塊請求而分配非透明存儲塊中的一個(gè),并且可以被配置成向塊返回指針(例如,非透明存儲塊的基址)。基于使用模式,控制單元18A可以自動地在主存儲器和所分配塊之間移動數(shù)據(jù)。例如,控制單元18A可以自動地從主存儲器向所分配塊填充數(shù)據(jù)、在GPU 10指示其用完(finish with) 所分配塊時(shí)自動地將數(shù)據(jù)從所分配的塊清除到主存儲器或者以上兩者??梢砸匀魏畏绞奖磉_(dá)塊請求。例如,塊請求可以是被指定為塊請求地址的已定義地址的存儲指令,其后跟隨有同一地址的加載指令。存儲指令所存儲的數(shù)據(jù)可以是作為所分配塊的數(shù)據(jù)的源/目的地的主存儲器地址并且還可以包括下述使用模式的指示??梢詫K地址(所指定塊的基址)作為加載指令的結(jié)果來返回,因此GPU上執(zhí)行的軟件可以使用塊地址來訪問該塊。替代地,可以在GPU的指令集架構(gòu)中定義特定的指令來傳輸塊請求??梢允褂糜糜趥鬏攭K請求和接收塊地址的任何機(jī)制。在一個(gè)實(shí)施例中,存在用于非透明存儲塊的三種可能使用模式靜態(tài)讀取、靜態(tài)寫入和靜態(tài)讀取/寫入。其它實(shí)施例可以定義所期望的兩個(gè)或更多使用模式的任一集合。靜態(tài)讀取使用模式包括當(dāng)塊請求者用完該塊時(shí)自動地將數(shù)據(jù)從所分配塊清除到主存儲器。因此,靜態(tài)讀取塊可以是塊請求者期望對塊的每一字節(jié)進(jìn)行寫入(或者塊的未寫字節(jié)上的內(nèi)容是“無關(guān)的”)的塊。靜態(tài)寫入使用模式包括自動地從主存儲器填充數(shù)據(jù)。靜態(tài)讀取/寫入模式包括自動地填充和自動地清除二者。通過提供塊分配和自動數(shù)據(jù)移動,控制單元18A可以將GPU上執(zhí)行的軟件從數(shù)據(jù)移動任務(wù)中釋放出來。在一些情況下,因?yàn)檐浖恍枰褂眉虞d/存儲指令來移動數(shù)據(jù),所以可以提高性能。現(xiàn)在轉(zhuǎn)向圖8,顯示了例示響應(yīng)于非透明存儲塊的塊請求的控制單元18A的一個(gè)實(shí)施例的操作的流程圖。盡管為了易于理解而以特定順序顯示了流程塊,但可以使用其它順序??梢砸钥刂茊卧?8A中的組合邏輯并行地執(zhí)行流程塊??梢酝ㄟ^多個(gè)時(shí)鐘周期將流程塊、流程塊的組合和/或?qū)⒘鞒虉D作為整體來流水線化。在一個(gè)實(shí)施例中,特定請求者的塊請求還可以是請求者用完在此前所分配的非透明存儲塊的指示。如果在前非透明存儲塊分配給了請求者(判決塊90,“是”分支),并且在前非透明存儲塊是靜態(tài)讀取類型(判決塊92,“是”分支),則控制單元18A可以被配置成開始在前非透明存儲塊的清除(塊94)。控制單元18A可以被配置成將非透明存儲塊的狀態(tài)改成清除。當(dāng)請求在前非透明存儲塊時(shí),如果使用模式被指示為靜態(tài)讀取或者靜態(tài)讀取/寫入,則在前非透明存儲塊可以具有靜態(tài)讀取類型。如果在前非透明存儲塊不是靜態(tài)讀取類型,則控制單元18A可以被配置成將非透明存儲塊的狀態(tài)改成可用(塊96)。在其它實(shí)施例中,可以支持明確的塊完成命令,并且請求者可以傳輸塊完成命令到控制單元ISA0控制單元18A可以被配置成響應(yīng)于塊完成命令執(zhí)行通過塊92、94和96所示的相同處理??刂茊卧?8A可以被配置成響應(yīng)于塊請求而確定非透明存儲塊是否可用于分配 (判決塊98)。如果否(判決塊98,“否”分支),則控制單元18A可以等待非透明存儲塊變?yōu)榭捎?塊100)。替代地,控制單元18A可以被配置成如果非透明存儲塊不可用于分配, 則返回“沒有塊可用”響應(yīng)給塊請求。“沒有塊可用”響應(yīng)可以是零塊地址,或者可以在可能為塊內(nèi)偏移的塊地址的最低有效位中指出。如果非透明存儲塊可用或者在等待之后變?yōu)榭捎茫瑒t控制單元18A可以被配置成分配非透明存儲塊(塊10幻。控制單元18A還可以被配置成記錄塊請求中提供的相應(yīng)主存儲器地址,并且可以關(guān)聯(lián)相應(yīng)主存儲器地址和所分配塊 (塊 104)。如果塊請求包括靜態(tài)寫入類型(例如,使用模式是靜態(tài)寫入或者靜態(tài)讀取/寫入-判決塊106,“是”分支),則控制單元18A可以被配置成啟動來自相應(yīng)主存儲器地址的所分配塊的填充(塊108)??刂茊卧?8A可以被配置成將所分配塊的狀態(tài)改成填充(塊110)。如果塊請求沒有包括靜態(tài)寫入類型(判決塊106,“否”分支),則控制單元18A可以被配置成將塊的狀態(tài)改成活動的(塊11幻。無論在何種情況下,控制單元18A可以被配置成將所分配塊的塊地址返回給請求者(塊114)?,F(xiàn)在轉(zhuǎn)向圖9,顯示了例示可以由用于非透明存儲塊的控制單元18A的一個(gè)實(shí)施例來實(shí)現(xiàn)的狀態(tài)機(jī)的框圖??梢圆⑿械貫槊總€(gè)非透明存儲塊實(shí)現(xiàn)圖9的狀態(tài)機(jī)。狀態(tài)機(jī)包括可用狀態(tài)120、填充狀態(tài)122、活動狀態(tài)IM和清除狀態(tài)126。上面關(guān)于圖8提到了圖9所
示的一些轉(zhuǎn)換。如果非透明存儲塊處于可用狀態(tài)120,則其響應(yīng)于來自請求者的塊請求而可用于分配。如果控制單元18A為具有靜態(tài)寫入類型(例如,靜態(tài)寫入或者靜態(tài)讀取/寫入使用模式)的塊請求分配塊,則控制單元18A可以被配置成將塊的狀態(tài)從可用狀態(tài)120改成填充狀態(tài)122。在一個(gè)實(shí)施例中,控制單元18A可以被配置成在塊處于填充狀態(tài)122時(shí)拖延或者拒絕對塊的讀取存儲器請求(因?yàn)閿?shù)據(jù)仍然在由控制單元18A寫入塊,將來自請求者所提供的相應(yīng)主存儲器地址的數(shù)據(jù)移入)。在填充狀態(tài)122,控制單元18A可以被配置成讀取相應(yīng)主存儲器地址(以及與相應(yīng)主存儲器地址連續(xù)的地址)并且將數(shù)據(jù)寫入到所分配塊。一旦填充完成,控制單元18A可以被配置成將塊的狀態(tài)從填充狀態(tài)122改成活動狀態(tài)124。另一方面,如果控制單元18A響應(yīng)于不具有靜態(tài)寫入類型的塊請求而分配塊,則控制單元18A 可以將塊的狀態(tài)從可用狀態(tài)改成活動狀態(tài)124。在活動狀態(tài)124,將非透明存儲塊分配給請求者并且請求者可以在需要時(shí)訪問非透明存儲塊。一旦請求者已經(jīng)完成非透明存儲塊中數(shù)據(jù)的處理,則請求者可以指示用完該塊(例如,通過請求另一個(gè)塊或者使用如上所述的明確的塊完成命令)。如果請求者在該塊完成并且其并非靜態(tài)讀取類型(例如,靜態(tài)讀取或者靜態(tài)讀取/寫入使用模式),則控制單元18A可以將塊的狀態(tài)從活動狀態(tài)IM改成可用狀態(tài)120。如果塊是靜態(tài)讀取類型,則控制單元18A可以被配置成將塊的狀態(tài)從活動狀態(tài)IM改成清除狀態(tài)126。在清除狀態(tài)126,控制單元18A可以被配置成將數(shù)據(jù)從塊寫入到相應(yīng)主存儲器地址。當(dāng)清除完成時(shí),控制單元 18A可以被配置成將塊的狀態(tài)從清除狀態(tài)1 改成可用狀態(tài)120。接下來轉(zhuǎn)向圖10,顯示了例示GPU 10上執(zhí)行的使用非透明存儲塊來處理數(shù)據(jù)的代碼的一個(gè)實(shí)施例的操作的流程圖。該代碼可以包括當(dāng)被執(zhí)行時(shí)導(dǎo)致圖1的系統(tǒng)實(shí)現(xiàn)圖10 所示的操作的指令。盡管為了易于理解而以特定順序顯示了流程塊,但可以使用其它順序。代碼可以確定塊類型和要被處理的塊的主存儲器地址(塊130)。塊類型可以基于代碼要在塊上進(jìn)行的處理。例如,如果代碼要?jiǎng)?chuàng)建寫入塊的新數(shù)據(jù),則使用模式可以是靜態(tài)讀取。如果代碼要從塊讀取數(shù)據(jù)而不是對其進(jìn)行寫入,則使用模式可以是靜態(tài)寫入。如果代碼要從塊讀取數(shù)據(jù)并且寫入數(shù)據(jù),則使用模式可以是靜態(tài)讀取/寫入??梢曰谝幚淼臄?shù)據(jù)的位置確定主存儲器地址。例如,GPU 10可能正在處理主存儲器系統(tǒng)的幀緩存中的圖像片。圖像片可以是整個(gè)圖像的分段。GPU可以選擇要處理的下一個(gè)圖像片,并且主存儲器地址可以是所選圖像片的地址。代碼可以請求非透明存儲塊(塊13 并且可以使用塊地址來執(zhí)行非透明存儲塊中的處理(塊134)??蛇x地,在包括明確的塊完成命令的實(shí)施例中,代碼可以傳輸塊完成命令(塊136)。如果主存儲器中存在額外的要被處理的塊(判決塊138,“是”分支),則代碼返回至塊130以開始下一個(gè)塊的處理。
注意,盡管在此描述了軟件或硬件中實(shí)現(xiàn)的特定功能,但軟件和硬件中實(shí)現(xiàn)的功能可以根據(jù)實(shí)施例而變化。例如,軟件可以分配被定義為非透明存儲器的一個(gè)或更多個(gè)地址區(qū)域,并且硬件可以被配置成將數(shù)據(jù)移入非透明存儲器和從非透明存儲器移出數(shù)據(jù)。注意,在一些實(shí)施例中,硬件電路和正在執(zhí)行的軟件代碼之間的通信可以采用塊請求的形式并且檢查返回塊的內(nèi)容。更進(jìn)一步,通信可以采用加載/存儲命令的形式,所述加載/存儲命令具有識別特定通信的各種屬性。系統(tǒng)和計(jì)算機(jī)可訪向存儲介質(zhì)接下來轉(zhuǎn)向圖11,顯示了系統(tǒng)150的一個(gè)實(shí)施例的框圖。系統(tǒng)150可以是圖1所示系統(tǒng)的另一個(gè)實(shí)施例。在所示實(shí)施例中,系統(tǒng)150包括耦合到一個(gè)或更多個(gè)外設(shè)IM和外部存儲器158的集成電路152的至少一個(gè)實(shí)例。集成電路152可以包括GPU 10,CPU 22、 L2高速緩存12和24、MCMB 14、存儲器16和控制單元18。外部存儲器158可以包括主存儲器系統(tǒng)20。還提供電源156,所述電源156向集成電路152提供電源電壓以及向存儲器 158和/或外設(shè)IM提供一個(gè)或更多個(gè)電源電壓。在一些實(shí)施例中,可以包括多于一個(gè)的集成電路152的實(shí)例(并且還可以包括多于一個(gè)的外部存儲器158)。取決于系統(tǒng)150的類型,外設(shè)IM可以包括任何期望的電路。例如,在一個(gè)實(shí)施例中,系統(tǒng)150可以是移動設(shè)備(例如,個(gè)人數(shù)字助理(PDA)、智能手機(jī)等)并且外設(shè)IM可以包括用于各種類型的無線通信(諸如wifi、藍(lán)牙、蜂窩、全球定位系統(tǒng)等)的設(shè)備。外設(shè)巧4還可以包括附加存儲器,包括RAM存儲器、固態(tài)存儲器或者磁盤存儲器。外設(shè)巧4可以包括用戶接口設(shè)備,諸如顯示屏(包括觸摸顯示屏或者多點(diǎn)觸摸顯示屏)、鍵盤或者其它輸入設(shè)備、麥克風(fēng)揚(yáng)聲器等。在其它實(shí)施例中,系統(tǒng)150可以是任何類型的計(jì)算系統(tǒng)(例如, 桌面?zhèn)€人計(jì)算機(jī)、膝上型計(jì)算機(jī)、工作站、輕省臺式機(jī)(net top)等)?,F(xiàn)在轉(zhuǎn)向圖12,顯示了計(jì)算機(jī)可訪問存儲介質(zhì)200的框圖。一般而言,計(jì)算機(jī)可訪問存儲介質(zhì)可以包括在用來向計(jì)算機(jī)提供指令和/或數(shù)據(jù)期間可由計(jì)算機(jī)訪問的任何存儲介質(zhì)。例如,計(jì)算機(jī)可訪問存儲介質(zhì)可以包括諸如磁介質(zhì)或光介質(zhì)的存儲介質(zhì),例如,磁盤(固定的或者可移除的)、磁帶、CD-ROM或者DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW。存儲介質(zhì)可以進(jìn)一步包括易失性或者非易失性存儲介質(zhì),諸如RAM(例如,同步動態(tài)RAM(SDRAM)、 Rambus DRAM (RDRAM)、靜態(tài)RAM(SRAM)等)、R0M、閃存、經(jīng)由諸如通用串行總線(USB)接口、 閃存接口(FMI)、串行外設(shè)接口(SPI)等的外設(shè)接口可訪問的非易失性存儲器(例如,閃存)。存儲介質(zhì)可以包括微機(jī)電系統(tǒng)(MEMS)、以及經(jīng)由諸如網(wǎng)絡(luò)和/或無線電線路的通信介質(zhì)可訪問的存儲介質(zhì)。圖12中的計(jì)算機(jī)可訪問存儲介質(zhì)200可以存儲控制代碼202 (其可以包括以上關(guān)于圖6和/或10所述的代碼)。通常,計(jì)算機(jī)可訪問存儲介質(zhì)200可以存儲當(dāng)被執(zhí)行時(shí)實(shí)現(xiàn)圖6和10中所示操作的一部分或全部的任何指令集。載體介質(zhì)可以包括計(jì)算機(jī)可訪問存儲介質(zhì)和諸如有線或無線傳輸?shù)膫鬏斀橘|(zhì)。一旦完全理解了上述公開,則對于本領(lǐng)域技術(shù)人員而言,各種變化和修改將變得清楚。下附權(quán)利要求旨在被解釋為包括所有的這類變化和修改。
權(quán)利要求
1.一種方法,包含控制單元接收針對所述控制單元所耦合的非透明存儲器的塊的請求,所述控制單元將所述非透明存儲器作為多個(gè)非透明存儲塊來管理,其中所述非透明存儲器可由軟件使用與所述非透明存儲器相關(guān)聯(lián)的已定義存儲器地址范圍內(nèi)的存儲器地址來直接尋址;所述控制單元響應(yīng)于所述請求分配所述多個(gè)非透明塊中的第一塊;所述控制單元將所述已定義存儲器地址范圍內(nèi)的所述第一塊的第一地址返回給請求者;以及響應(yīng)于所述請求中指示的類型,所述控制單元自動地將數(shù)據(jù)從所述已定義存儲器地址范圍之外的第二存儲器地址移入所述第一塊,其中所述第二存儲器地址在所述請求中指示。
2.如權(quán)利要求1所述的方法,其中所述類型是靜態(tài)寫入。
3.如權(quán)利要求1或2所述的方法,進(jìn)一步包含所述控制單元接收針對非透明存儲器的塊的第二請求,其中所述第二請求包括靜態(tài)讀取類型;所述控制單元響應(yīng)于所述第二請求分配所述多個(gè)非透明塊的第二塊;所述控制單元將所述已定義存儲器地址范圍內(nèi)的所述第二塊的第三地址返回給所述請求者;以及響應(yīng)于所述類型為靜態(tài)讀取,所述控制單元不自動地將數(shù)據(jù)從所述第二請求中指示的第四存儲器地址移入所述第二塊。
4.如權(quán)利要求3所述的方法,進(jìn)一步包含所述控制單元確定所述請求者用完所述第二塊;以及所述控制單元響應(yīng)于所述類型為靜態(tài)讀取而自動地將所述第二塊中的數(shù)據(jù)寫入所述第四存儲器地址。
5.如權(quán)利要求1-4中任一項(xiàng)所述的方法,進(jìn)一步包含所述控制單元確定所述請求者用完所述第一塊;以及所述控制單元響應(yīng)于所述第一塊在所述請求者處理期間被寫入而將所述第一塊中的數(shù)據(jù)寫入與所述第一塊相關(guān)聯(lián)的所述第二存儲器地址。
6.一種裝置,包含非透明存儲器,包含可由軟件使用已定義存儲器地址范圍內(nèi)的地址來直接尋址的多個(gè)存儲器位置;以及控制單元,被配置成將所述非透明存儲器作為多個(gè)非透明存儲塊來管理,其中所述控制單元被耦合成從請求者接收針對塊的請求,并且其中所述控制單元被配置成響應(yīng)于所述請求分配所述多個(gè)非透明存儲塊的第一塊,并且其中所述控制單元被配置成響應(yīng)于為所述請求提供的類型來選擇性地自動將數(shù)據(jù)填充到所述第一塊以及將數(shù)據(jù)從所述第一塊中清除。
7.如權(quán)利要求6所述的裝置,其中,響應(yīng)于第一類型,所述控制單元被配置成自動地將數(shù)據(jù)填充到所述第一塊,并且其中,響應(yīng)于第二類型,所述控制單元被配置成不將數(shù)據(jù)移入所述第一塊。
8.如權(quán)利要求7所述的裝置,其中所述第一類型是靜態(tài)寫入類型。
9.如權(quán)利要求7所述的裝置,其中所述第二類型是靜態(tài)讀取類型。
10.如權(quán)利要求7-9中任一項(xiàng)所述的裝置,其中所述請求包括不在所述預(yù)定存儲器地址范圍內(nèi)的第一存儲器地址,并且其中所述控制單元被配置成將存儲在所述第一存儲器地址處的數(shù)據(jù)填充到所述第一塊。
11.如權(quán)利要求7-10中任一項(xiàng)所述的裝置,其中,所述控制單元被配置成響應(yīng)于所述第二類型以及所述請求者用完所述第一塊,自動地將數(shù)據(jù)從所述第一塊清除到主存儲器子系統(tǒng)。
12.如權(quán)利要求11所述的裝置,其中所述請求包括不在所述預(yù)定存儲器地址范圍內(nèi)的第一存儲器地址,并且其中所述控制單元被配置成將數(shù)據(jù)從所述第一塊清除到所述第一存儲器地址所指示的位置。
13.如權(quán)利要求11或12所述的裝置,其中所述控制單元被配置成響應(yīng)于所述請求者已經(jīng)修改所述數(shù)據(jù)而從所述第一塊清除所述數(shù)據(jù)。
14.如權(quán)利要求6-13中任一項(xiàng)所述的裝置,其中所述非透明存儲器是存儲器陣列的一部分,所述存儲器陣列還包括作為用作高速緩存的透明存儲器的第二部 分。
15.如權(quán)利要求14所述的裝置,進(jìn)一步包含對應(yīng)于所述第二部分的高速緩存標(biāo)記存儲器,所述高速緩存標(biāo)記存儲器被配置成存儲所述第二部分中可存儲的多個(gè)高速緩存塊的標(biāo)記。
16.一種系統(tǒng),包含一個(gè)或更多個(gè)處理器,被配置成請求在其中處理數(shù)據(jù)的非透明存儲器的塊;主存儲器系統(tǒng);以及非透明存儲器單元,包含權(quán)利要求6-15中任一項(xiàng)所述的裝置,其中所述非透明存儲器單元耦合到所述一個(gè)或更多個(gè)處理器以接收請求并且耦合到所述主存儲器系統(tǒng),并且其中所述非透明存儲器被配置成將所述非透明存儲器內(nèi)的塊分配給所述請求,并且其中所述非透明存儲器單元被配置成響應(yīng)于所述請求的類型而自動地在所述非透明存儲器和所述主存儲器系統(tǒng)之間移動數(shù)據(jù)。
17.如權(quán)利要求16所述的系統(tǒng),其中映射到所述非透明存儲器的地址和映射到所述主存儲器系統(tǒng)的地址是同一存儲器地址空間的一部分。
18.如權(quán)利要求17所述的系統(tǒng),其中所述非透明存儲器單元被配置成將針對所述非透明存儲器中第一請求的分配塊的第一地址返回給發(fā)起第一請求的處理器,其中所述第一地址在指定給所述非透明存儲器的存儲器地址范圍之內(nèi)。
19.如權(quán)利要求17或18所述的系統(tǒng),其中映射到所述主存儲器系統(tǒng)的存儲器地址不在指定給所述非透明存儲器的存儲器地址范圍之內(nèi)。
20.如權(quán)利要求18所述的系統(tǒng),其中所述第一請求包括用于所述非透明存儲器和所述主存儲器系統(tǒng)之間的移動的所述主存儲器系統(tǒng)中的第二地址。
21.如權(quán)利要求20所述的系統(tǒng),其中所述第一請求的類型指示要把數(shù)據(jù)從所述主存儲器系統(tǒng)移動到所述第一塊,并且其中所述非透明存儲器單元被配置成執(zhí)行所述移動。
22.如權(quán)利要求20所述的系統(tǒng),其中所述第一請求的類型指示要把數(shù)據(jù)從所述第一塊移動到所述主存儲器系統(tǒng),并且其中所述非透明存儲器單元被配置成執(zhí)行所述移動。
23.如權(quán)利要求16-22中任一項(xiàng)所述的系統(tǒng),其中所述一個(gè)或更多個(gè)處理器是圖形處理器,并且其中所述系統(tǒng)進(jìn)一步包含耦合到第二非透明存儲器單元的一個(gè)或更多個(gè)通用處理器,所述第二非透明存儲器單元還耦合到所述主存儲器系統(tǒng)。
全文摘要
在一個(gè)實(shí)施例中,提供了一種包括非透明存儲器和控制電路的非透明存儲器單元??刂齐娐房梢詫⒎峭该鞔鎯ζ髯鳛橐唤M非透明存儲塊來管理。在一個(gè)或更多個(gè)處理器上執(zhí)行的軟件可以請求在其中處理數(shù)據(jù)的非透明存儲塊??刂齐娐房梢苑峙湟粋€(gè)第一塊,并且可以返回所分配塊的地址(或者其它指示),以便軟件可以訪問該塊。控制電路還可以提供非透明存儲器和非透明存儲器單元所耦合的主存儲器系統(tǒng)之間的自動數(shù)據(jù)移動。例如,自動數(shù)據(jù)移動可以包括從主存儲器系統(tǒng)向所分配塊填充數(shù)據(jù),或者在所分配塊的處理完成之后將所分配塊中的數(shù)據(jù)清除到主存儲器系統(tǒng)。
文檔編號G06F12/08GK102483719SQ201080038192
公開日2012年5月30日 申請日期2010年7月9日 優(yōu)先權(quán)日2009年7月10日
發(fā)明者J·B·科勒, J·王, T·J·米萊特, 陳宗健 申請人:蘋果公司