欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

在異構(gòu)處理器之間遷移不同尺寸的頁的制作方法

文檔序號:6527067閱讀:245來源:國知局
在異構(gòu)處理器之間遷移不同尺寸的頁的制作方法
【專利摘要】本發(fā)明的一個(gè)實(shí)施例提出一種由計(jì)算機(jī)實(shí)施的、用于從第一存儲器將存儲器頁遷移至第二存儲器的方法。該方法包括:確定所述第一存儲器所支持的第一頁尺寸。該方法還包括:確定所述第二存儲器所支持的第二頁尺寸。該方法進(jìn)一步包括:基于與所述存儲器頁相關(guān)聯(lián)的頁狀態(tài)目錄中的條目,來確定所述存儲器頁的使用歷史。該方法還包括:基于所述第一頁尺寸、所述第二頁尺寸和所述使用歷史,來在所述第一存儲器和所述第二存儲器之間遷移所述存儲器頁。
【專利說明】在異構(gòu)處理器之間遷移不同尺寸的頁

【技術(shù)領(lǐng)域】
[0001]本發(fā)明總體上涉及計(jì)算機(jī)科學(xué),且更具體地,涉及在異構(gòu)(heterogeneous)處理器之間遷移不同尺寸的頁。

【背景技術(shù)】
[0002]典型的計(jì)算機(jī)系統(tǒng)包括中央處理單元(CPU)和一個(gè)或多個(gè)并行處理單元(GPU)。一些先進(jìn)的計(jì)算機(jī)系統(tǒng)實(shí)施為CPU和GPU所共用的統(tǒng)一虛擬存儲器架構(gòu)。除此之外,該架構(gòu)還使得CPU和GPU能夠使用共用(例如,同一)虛擬存儲器地址來訪問物理存儲器位置,而不管該物理存儲器位置是在系統(tǒng)存儲器還是GPU本地的存儲器內(nèi)。
[0003]在這類統(tǒng)一虛擬存儲器架構(gòu)中,存儲器頁可有利地依據(jù)存儲器頁是存儲在與CPU還是GPU相關(guān)聯(lián)的存儲器單元中而被不同地尺寸化。具有不同尺寸化的存儲器頁的一個(gè)缺點(diǎn)在于,在那些不同的存儲器單元之間遷移存儲器頁變得較為復(fù)雜。例如,會出現(xiàn)的一個(gè)難題是,將大存儲器頁遷移至僅存儲小存儲器頁的存儲器單元。在這種情形下,統(tǒng)一虛擬存儲器架構(gòu)必須決定如何容許頁尺寸的這種差異。
[0004]如前所述,本領(lǐng)域所需要的是一種更加有效的方法,以在實(shí)施統(tǒng)一虛擬存儲器架構(gòu)的系統(tǒng)中遷移不同尺寸的存儲器頁。


【發(fā)明內(nèi)容】

[0005]本發(fā)明的一個(gè)實(shí)施例提出一種由計(jì)算機(jī)實(shí)施的、用于從第一存儲器將存儲器頁遷移至第二存儲器的方法。該方法包括:確定所述第一存儲器所支持的第一頁尺寸。該方法還包括:確定所述第二存儲器所支持的第二頁尺寸。該方法進(jìn)一步包括:基于與所述存儲器頁相關(guān)聯(lián)的頁狀態(tài)目錄中的條目,來確定所述存儲器頁的使用歷史。該方法還包括:基于所述第一頁尺寸、所述第二頁尺寸和所述使用歷史,來在所述第一存儲器和所述第二存儲器之間遷移所述存儲器頁。
[0006]所公開的技術(shù)的一個(gè)優(yōu)點(diǎn)在于,可以在虛擬存儲器架構(gòu)中的不同存儲器單元之間有效地來回遷移不同尺寸的存儲器頁。該技術(shù)通過允許統(tǒng)一虛擬存儲器系統(tǒng)與許多不同類型的存儲器架構(gòu)一起工作來提高統(tǒng)一虛擬存儲器系統(tǒng)的靈活性。另一相關(guān)優(yōu)點(diǎn)在于,通過允許大存儲器頁被分割成較小存儲器頁并且允許小存儲器頁被合并成較大存儲器頁,具有不同尺寸的存儲器頁可以存儲在配置為存儲不同存儲器頁尺寸的不同存儲器單元中。此特征允許統(tǒng)一虛擬存儲器系統(tǒng)在可能的情況下將頁歸組(group),以便減小在頁表和/或轉(zhuǎn)譯后備緩存器(TLB)中占用的空間量。該特征還允許存儲器頁被分割開并遷移至不同的存儲器單元,只要這種分割將會改進(jìn)存儲器本地性(locality)并減少存儲器訪問時(shí)間。

【專利附圖】

【附圖說明】
[0007]因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考示范性實(shí)施例得到對如上面所簡要概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對其范圍的限制,本發(fā)明可以具有其他等效的實(shí)施例。
[0008]圖1是示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的框圖;
[0009]圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、示出統(tǒng)一虛擬存儲器系統(tǒng)(UVM)的框圖;
[0010]圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于從系統(tǒng)存儲器將小存儲器頁傳送至PPU存儲器的操作;
[0011]圖4示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于從系統(tǒng)存儲器將小存儲器頁和相關(guān)的“同級”存儲器頁傳送至PPU存儲器的操作;
[0012]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于從PTO存儲器將小存儲器頁傳送至系統(tǒng)存儲器的操作;
[0013]圖6示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于從PTO存儲器204將小存儲器頁以及同級存儲器頁傳送至系統(tǒng)存儲器104的操作;以及
[0014]圖7是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于在虛擬存儲器架構(gòu)中的存儲器單元之間遷移不同尺寸的存儲器頁的方法步驟的流程圖。

【具體實(shí)施方式】
[0015]在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒有一個(gè)或多個(gè)這些具體細(xì)節(jié)的情況下得以實(shí)施。
[0016]系統(tǒng)概述
[0017]圖1為示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括經(jīng)由可以包括存儲器橋105的互連路徑通信的中央處理單元(CPU) 102和系統(tǒng)存儲器104。存儲器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106 (例如超傳輸(HyperTransport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個(gè)或多個(gè)用戶輸入設(shè)備108 (例如鍵盤、鼠標(biāo))接收用戶輸入并且經(jīng)由通信路徑106和存儲器橋105將該輸入轉(zhuǎn)發(fā)到CPU102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113 (例如外圍部件互連(PCI )Express、加速圖形端口或超傳輸鏈路)連接到存儲器橋105 ;在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112是將像素傳送到顯示設(shè)備110的圖形子系統(tǒng),顯示設(shè)備110可以是任何常規(guī)的陰極射線管、液晶顯示器、發(fā)光二極管顯示器等。系統(tǒng)盤114也可連接到I/O橋107,并且可配置為存儲由CPU102和并行處理子系統(tǒng)112所使用的應(yīng)用程序和數(shù)據(jù)以及內(nèi)容。系統(tǒng)盤114為應(yīng)用程序和數(shù)據(jù)提供非易失性存儲空間,并且可包含固定式或可移除式硬盤驅(qū)動器、閃存驅(qū)動器和CD-ROM (壓縮光盤只讀存儲器)、DVD-ROM (數(shù)字通用光盤-ROM)、藍(lán)光、HD-DVD (高分辨率DVD)或者其他磁性、光學(xué)或固態(tài)存儲設(shè)備。
[0018]交換器116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其他端口連接、壓縮光盤(CD)驅(qū)動器、數(shù)字通用光盤(DVD)驅(qū)動器、膠片錄制設(shè)備及類似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其他總線或點(diǎn)到點(diǎn)通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。
[0019]在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構(gòu)成一個(gè)或多個(gè)平行處理單元(PPU)202。在另一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時(shí)保留底層(underlying)的計(jì)算架構(gòu),本文將更詳細(xì)地進(jìn)行描述。在又一個(gè)實(shí)施例中,可以將并行處理子系統(tǒng)112與一個(gè)或多個(gè)其他系統(tǒng)元件集成在單個(gè)子系統(tǒng)中,諸如結(jié)合存儲器橋105、CPU102以及I/O橋107,以形成片上系統(tǒng)(SoC)。眾所周知,許多圖形處理單元(GPU)設(shè)計(jì)為執(zhí)行并行操作和計(jì)算,因而被視為一類并行處理單元(PPU)。
[0020]在并行處理子系統(tǒng)112中可以包括任何數(shù)目的PPU202。例如,可在單個(gè)插卡上提供多個(gè)PPU202、或可將多個(gè)插卡連接到通信路徑113、或可將一個(gè)或多個(gè)??似02集成到橋式芯片中。在多PPU系統(tǒng)中的PPU202可以彼此同樣或不同。例如,不同的PPU202可能具有不同數(shù)目的處理內(nèi)核、不同容量的本地并行處理存儲器等等。在存在多個(gè)PPU202的情況下,可并行操作那些PI3U從而以高于單個(gè)PPU202所可能達(dá)到的吞吐量來處理數(shù)據(jù)。包含一個(gè)或多個(gè)PPU202的系統(tǒng)可以以各種配置和形式因素來實(shí)現(xiàn),包括臺式電腦、筆記本電腦或手持式個(gè)人計(jì)算機(jī)、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等。
[0021]PPU202有利地實(shí)現(xiàn)高度并行處理架構(gòu)。PPU202包括大量通用處理集群(GPC)。每個(gè)GPC均能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個(gè)線程均為程序的實(shí)例(instance )。在一些實(shí)施例中,單指令、多數(shù)據(jù)(SIMD)指令發(fā)出技術(shù)用于在不提供多個(gè)獨(dú)立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實(shí)施例中,單指令、多線程(SIMT)技術(shù)用于使用配置為向G PC208中的每一個(gè)內(nèi)的處理引擎集發(fā)出指令的公共指令單元來支持大量一般來說同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行同樣指令的SMD執(zhí)行機(jī)制,SIMT執(zhí)行通過給定線程程序允許不同線程更容易跟隨分散執(zhí)行路徑。
[0022]GPU包括大量流式多處理器(SM),其中每個(gè)SM均配置為處理一個(gè)或多個(gè)線程組。傳送到特定GPC208的一系列指令構(gòu)成線程,并且跨SM內(nèi)的并行處理引擎(未示出)的某一數(shù)目的并發(fā)執(zhí)行線程的集合在本文中稱為“線程束(warp)”或“線程組”。如本文所使用的,“線程組”是指對不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,所述組的一個(gè)線程被指派到SM內(nèi)的不同處理引擎。另外,多個(gè)相關(guān)線程組可以在SM內(nèi)同時(shí)活動(在執(zhí)行的不同階段)。該線程組集合在本文中稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。
[0023]在本發(fā)明的實(shí)施例中,使用計(jì)算系統(tǒng)的PPU202或其他處理器來使用線程陣列執(zhí)行通用計(jì)算是可取的。為線程陣列中的每個(gè)線程指派在線程的執(zhí)行期間對于線程可訪問的唯一的線程標(biāo)識符(“線程ID”)??杀欢x為一維或多維數(shù)值的線程ID控制線程處理行為的各方面。例如,線程ID可用于確定線程將要處理輸入數(shù)據(jù)集的哪部分和/或確定線程將要產(chǎn)生或?qū)戄敵鰯?shù)據(jù)集的哪部分。
[0024]工作時(shí),CPU102是計(jì)算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)部件的操作。具體地,CPU102發(fā)出控制PPU202的操作的命令。在一個(gè)實(shí)施例中,通信路徑113是PCIExpress鏈路,如本領(lǐng)域所知的,其中專用通道被分配到每個(gè)PPU202。也可以使用其他通信路徑。PPU202有利地實(shí)現(xiàn)高度并行處理架構(gòu)。PPU202可配備有任何容量(amount)的本地并行處理存儲器(PPU存儲器)。
[0025]在一些實(shí)施例中,系統(tǒng)存儲器104包括統(tǒng)一虛擬存儲器(UVM)驅(qū)動器101。UVM驅(qū)動器101包括用于執(zhí)行與為CPU102和PPU202所共用的統(tǒng)一虛擬存儲器(UVM)有關(guān)的各種任務(wù)的指令。除此之外,該架構(gòu)還使得CPU102和PPU202能夠用共用的(common)虛擬存儲器地址來訪問物理存儲器位置,而不管該物理存儲器位置是在系統(tǒng)存儲器104還是PPU202本地的存儲器(PI3U存儲器)內(nèi)。
[0026]應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)?,包括橋的?shù)目和布置、CPU102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲器104直接連接到CPU102而不是通過橋,并且其他設(shè)備經(jīng)由存儲器橋105和CPU102與系統(tǒng)存儲器104通信。在其他替代性拓?fù)渲校⑿刑幚碜酉到y(tǒng)112連接到I/O橋107或直接連接到CPU102,而不是連接到存儲器橋105。而在其他實(shí)施例中,I/O橋107和存儲器橋105可能被集成到單個(gè)芯片上而不是作為一個(gè)或多個(gè)分立設(shè)備存在。大型實(shí)施例可以包括兩個(gè)或更多個(gè)CPU102以及兩個(gè)或更多個(gè)并行處理系統(tǒng)112。本文所示的特定部件是可選的;例如,任何數(shù)目的插卡或外圍設(shè)備都可能得到支持。在一些實(shí)施例中,交換器116被去掉,網(wǎng)絡(luò)適配器118和插卡120、121直接連接到I/O橋107。
[0027]統(tǒng)一虛擬存儲器系統(tǒng)架構(gòu)
[0028]圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、示出統(tǒng)一虛擬存儲器(UVM)系統(tǒng)200的框圖。如圖所示,統(tǒng)一虛擬存儲器系統(tǒng)200包括而不限于CPU102、系統(tǒng)存儲器104以及與并行處理單元存儲器(PPU存儲器)204相連的并行處理單元(PTO)202。CPU102和系統(tǒng)存儲器104彼此相連且經(jīng)由存儲器橋105而與PPU202相連。
[0029]CPU102經(jīng)由虛擬存儲器地址來執(zhí)行可請求存儲在系統(tǒng)存儲器104或PPU存儲器204中的數(shù)據(jù)的線程。根據(jù)對存儲器系統(tǒng)的內(nèi)部工作方式的了解,虛擬存儲器地址屏蔽(shield)正在CPU102中執(zhí)行的線程。因而,線程可僅知曉虛擬存儲器地址,并可通過經(jīng)由虛擬存儲器地址而請求數(shù)據(jù)來對數(shù)據(jù)進(jìn)行訪問。
[0030]CPU102包括CPU MMU209,其處理來自CPU102的用于將虛擬存儲器地址轉(zhuǎn)譯成物理存儲器地址的請求。對存儲在諸如系統(tǒng)存儲器104和PPU存儲器204這類物理存儲器單元中的數(shù)據(jù)進(jìn)行訪問,需要物理存儲器地址。CPU102包括CPU故障處理程序211,其響應(yīng)于產(chǎn)生頁故障的CPUMMU209而執(zhí)行步驟,以使所請求的數(shù)據(jù)對于CPU102是可用的。CPU故障處理程序211通常為駐存(reside)在系統(tǒng)存儲器104中且在CPU102上執(zhí)行的軟件,該軟件通過對CPU102的中斷而被喚醒。
[0031]系統(tǒng)存儲器104存儲包含各種存儲器頁(未示出),這些存儲器頁供在CPU102或PPU202上執(zhí)行的線程所使用。如圖所示,系統(tǒng)存儲器104存儲CPU頁表206,其包含虛擬存儲器地址和物理存儲器地址之間的映射。系統(tǒng)存儲器104還存儲頁狀態(tài)目錄210,其充當(dāng)用于UVM系統(tǒng)200的“主頁表”,如下面更為詳細(xì)討論的。系統(tǒng)存儲器104存儲故障緩存器216,其包含由PPU202寫入以便通知CPU102P由PU202產(chǎn)生的頁故障的條目。在一些實(shí)施例中,系統(tǒng)存儲器104包括統(tǒng)一虛擬存儲器(UVM)驅(qū)動器101,其包含這樣的指令,這些指令在被執(zhí)行時(shí)令CPU102之外還執(zhí)行用于修復(fù)頁故障的命令。在替代性實(shí)施例中,頁狀態(tài)目錄210和一個(gè)或多個(gè)命令隊(duì)列214的任何組合都可存儲在PI3U存儲器204中。此外,PI3U頁表208可存儲在系統(tǒng)存儲器104中。
[0032]以與CPU102類似的方式,PPU202執(zhí)行可經(jīng)由虛擬存儲器地址來請求存儲在系統(tǒng)存儲器104或PPU存儲器204中的數(shù)據(jù)的指令。PPU202包括PPU MMU213,其處理來自PPU202的用于將虛擬存儲器地址轉(zhuǎn)譯成物理存儲器地址的請求。PPU202還包括復(fù)制引擎212,其執(zhí)行存儲在命令隊(duì)列214中的用于復(fù)制存儲器頁、修改PTO頁表208中的數(shù)據(jù)的命令以及其他命令。PPU故障處理程序215響應(yīng)于PPU202上的頁故障而執(zhí)行步驟。PI3U故障處理程序215可以是在處理器或PPU202中的專用微控制器上運(yùn)行的軟件。替代地,PTO故障處理程序215可以是彼此通信的在CPU102上運(yùn)行的軟件和在PPU202中的專用微控制器上運(yùn)行的軟件的組合。在一些實(shí)施例中,CPU故障處理程序211和PPU故障處理程序215可以是通過CPU102或PPU202任一者上的故障而被調(diào)用(invoke)。命令隊(duì)列214可在PPU存儲器204或系統(tǒng)存儲器104中,但優(yōu)選位于系統(tǒng)存儲器104中。
[0033]在一些實(shí)施例中,CPU故障處理程序211和UVM驅(qū)動器101可以是統(tǒng)一軟件程序。在這類情況中,所述統(tǒng)一軟件程序可以是駐存在系統(tǒng)存儲器104中且在CPU102上執(zhí)行的軟件。PTO故障處理程序215可以是在處理器或PPU202中的專用微控制器上運(yùn)行的單獨(dú)的軟件程序,或者PPU故障處理程序215可以是在CPU102上運(yùn)行的單獨(dú)的軟件程序。
[0034]在其他實(shí)施例中,PI3U故障處理程序215和UVM驅(qū)動器101可以是統(tǒng)一軟件程序。在這類情況中,所述統(tǒng)一軟件程序可以是駐存在系統(tǒng)存儲器104中且在CPU102上執(zhí)行的軟件。CPU故障處理程序211可以是駐存在系統(tǒng)存儲器104中且在CPU102上執(zhí)行的軟件。
[0035]在其他實(shí)施例中,CPU故障處理程序211、PPU故障處理程序215和UVM驅(qū)動器101可以是統(tǒng)一軟件程序。在這類情況中,所述統(tǒng)一軟件程序可以是駐存于系統(tǒng)存儲器104中且在CPU102上執(zhí)行的軟件。
[0036]在一些實(shí)施例中,如上所述,CPU故障處理程序211、PPU故障處理程序215和UVM驅(qū)動器101可全部駐存在系統(tǒng)存儲器104中。如圖2所示,UVM驅(qū)動器101駐存在系統(tǒng)存儲器104中,而CPU故障處理程序211和PPU故障處理程序215駐存在CPU102中。
[0037]CPU故障處理程序211和PPU故障處理程序215可對源自CPU102或PPU202的硬件中斷例如由于頁故障而導(dǎo)致的中斷做出響應(yīng)。如下面進(jìn)一步描述的,UVM驅(qū)動器101包含用于執(zhí)行與UVM系統(tǒng)200的管理有關(guān)的各種任務(wù)的指令,包括而不限于修復(fù)頁故障以及訪問CPU頁表206、頁狀態(tài)目錄210和/或故障緩存器216。
[0038]在一些實(shí)施例中,CPU頁表206和PPU頁表208具有不同格式,且內(nèi)含不同信息;例如,PPU頁表208可內(nèi)含而CPU頁表206不含下列信息:原子禁用位(atomic disable bit);壓縮標(biāo)簽(compress1n tag);和存儲器攬和類型(memory swizzling type)。
[0039]以與系統(tǒng)存儲器104類似的方式,PTO存儲器204存儲各種頁(未示出)。如圖所示,PPU存儲器204還包括PPU頁表208,其包含虛擬存儲器地址和物理存儲器地址之間的映射。替代地,PPU頁表208可存儲在系統(tǒng)存儲器104中。
[0040]轉(zhuǎn)譯虛擬存儲器地址
[0041]當(dāng)在CPU102中執(zhí)行的線程經(jīng)由虛擬存儲器地址來請求數(shù)據(jù)時(shí),CPU102從CPU存儲器管理單元(CPU MMU) 209請求將虛擬存儲器地址轉(zhuǎn)譯成物理存儲器地址。作為響應(yīng),CPUMMU209試圖將虛擬存儲器地址轉(zhuǎn)譯成物理存儲器地址,所述物理存儲器地址指定存儲器單元中存儲CPU102所請求的數(shù)據(jù)的位置,例如系統(tǒng)存儲器104。
[0042]為了將虛擬存儲器地址轉(zhuǎn)譯成物理存儲器地址,CPU MMU209執(zhí)行查找操作,以確定CPU頁表206是否包含于虛擬存儲器地址相關(guān)聯(lián)的映射。除虛擬存儲器地址外,訪問數(shù)據(jù)的請求還可指明虛擬存儲器地址空間。統(tǒng)一虛擬存儲器系統(tǒng)200可實(shí)現(xiàn)多個(gè)虛擬存儲器地址空間,每個(gè)空間均被指派一個(gè)或多個(gè)線程。虛擬存儲器地址在任何給定的虛擬存儲器地址空間中都是唯一的。此外,給定的虛擬存儲器地址內(nèi)的虛擬存儲器地址跨CPU102和PPU202連續(xù),從而允許同一虛擬存儲器地址跨CPU102和PPU202指向同一數(shù)據(jù)。在一些實(shí)施例中,兩個(gè)虛擬存儲器地址可以指向同一數(shù)據(jù),但可以不映射到同一物理存儲器地址(例如,CPU102和PPU202每個(gè)均可具有數(shù)據(jù)的本地只讀副本)。
[0043]對于任何給定的虛擬存儲器地址,CPU頁表206可以包含或可以不包含虛擬存儲器地址和物理存儲器地址之間的映射。如果CPU頁表206包含映射,則CPU MMU209讀取該映射,以確定與虛擬存儲器地址相關(guān)聯(lián)的物理存儲器地址并提供物理存儲器地址給CPU102。然而,如果CPU頁表206不包含與虛擬存儲器地址相關(guān)聯(lián)的映射,則CPU MMU209不能將虛擬存儲器地址轉(zhuǎn)譯成物理存儲器地址,且CPU MMU209產(chǎn)生頁故障。為了修復(fù)頁故障并使所請求的數(shù)據(jù)對于CPU102是可用的,執(zhí)行“頁故障序列(sequence)”。更具體地,CPU102讀取PSD210以找出頁的當(dāng)前映射狀態(tài)且然后確定適當(dāng)?shù)捻摴收闲蛄?。頁故障序列通常映射與所請求的虛擬存儲器地址相關(guān)聯(lián)的存儲器頁或者改變許可的訪問類型(例如,讀取訪問、寫入訪問、原子訪問)。下面更加詳細(xì)地討論在UVM系統(tǒng)200中實(shí)現(xiàn)的不同類型的頁故障序列。
[0044]在UVM系統(tǒng)200內(nèi),與給定的虛擬存儲器地址相關(guān)聯(lián)的數(shù)據(jù)可存儲在系統(tǒng)存儲器104,PPU存儲器204或者系統(tǒng)存儲器104和PPU存儲器204兩者中作為同一數(shù)據(jù)的只讀副本。此外,對于任何這類數(shù)據(jù),CPU頁表206和PPU頁表208中任一者或兩者都可包含與該數(shù)據(jù)相關(guān)聯(lián)的映射。請注意,存在一些數(shù)據(jù),針對其的映射存在于一個(gè)頁表中但不存在于另一個(gè)中。然而,PSD210包含存儲在PI3U頁表208中的所有映射以及存儲在CPU頁表206中的PI3U相關(guān)映射。PSD210因而用作用于統(tǒng)一虛擬存儲器系統(tǒng)200的“主”頁表。因此,當(dāng)CPU MMU209在與特定的虛擬存儲器地址相關(guān)聯(lián)的CPU頁表206中沒有找到映射時(shí),CPU102讀取PSD210以確定PSD210是否包含于該虛擬存儲器地址相關(guān)聯(lián)的映射。除與虛擬存儲器地址相關(guān)聯(lián)的映射外,PSD210的各種實(shí)施例還可包含與虛擬存儲器地址相關(guān)聯(lián)的不同類型的信息。
[0045]當(dāng)CPU MMU209產(chǎn)生頁故障時(shí),CPU故障處理程序211執(zhí)行針對適當(dāng)?shù)捻摴收闲蛄械囊幌盗胁僮饕孕迯?fù)頁故障。而且,在頁故障序列過程中,CPU102讀取PSD210并執(zhí)行附加操作以便改變CPU頁表206和PPU頁表208內(nèi)的映射或許可(permiss1n)。這類操作可包含讀取和/或修改CPU頁表206,讀取和/或修改頁狀態(tài)目錄210和/或在存儲器單元(例如,系統(tǒng)存儲器104和PPU存儲器204)之間遷移被稱為“存儲器頁”的數(shù)據(jù)塊。
[0046]為了確定哪些操作將在頁故障序列中執(zhí)行,CPU102識別與虛擬存儲器地址相關(guān)聯(lián)的存儲器頁。CPU102然后從與和引發(fā)頁故障的存儲器訪問請求相關(guān)聯(lián)的虛擬存儲器地址有關(guān)的PSD210中讀取關(guān)于該存儲器頁的狀態(tài)信息。這類狀態(tài)信息此外還可包含關(guān)于與虛擬存儲器地址相關(guān)聯(lián)的存儲器頁的所有權(quán)狀態(tài)。對于任何給定的存儲器頁,若干所有權(quán)狀態(tài)都是可能的。例如,存儲器頁可以是“CPU所有”、“PPU所有”或“CPU共享”。如果CPU102能經(jīng)由虛擬地址訪問存儲器頁而不引發(fā)頁故障,且如果PPU202不能在不引發(fā)頁故障的情況下經(jīng)由虛擬地址訪問存儲器頁,則該存儲器頁被視為是CPU所有。優(yōu)選地,CPU所有的頁駐存在系統(tǒng)存儲器104中,但也可駐存在PI3U存儲器204中。如果PPU202能經(jīng)由虛擬地址訪問存儲器頁,且如果CPU102不能在不引發(fā)頁故障的情況下經(jīng)由虛擬地址訪問該頁,則該存儲器頁被視為是PPU所有。優(yōu)選地,PPU所有的頁駐存在PPU存儲器204中,但當(dāng)不進(jìn)行從系統(tǒng)存儲器104到PPU存儲器204的遷移時(shí),也可駐存在系統(tǒng)存儲器104中。最后,如果CPU102和PPU202能經(jīng)由虛擬地址訪問存儲器頁而不引發(fā)頁故障,則該存儲器被視為是CPU共享。CPU共享的頁可駐存在系統(tǒng)存儲器104或PPU存儲器204任一者中。
[0047]CPU頁表206可基于各種因素包括存儲器頁的使用歷史而將所有權(quán)狀態(tài)指派給存儲器頁。使用歷史可包含關(guān)于CPU102或PPU202最近是否訪問過存儲器頁以及這類訪問進(jìn)行了多少次的信息。例如,如果基于給定的存儲器頁的使用歷史,UVM系統(tǒng)200確定該存儲器頁可能主要或僅僅被CPU102所使用,則UVM系統(tǒng)200可對該存儲器頁指派“CPU所有”的所有權(quán)狀態(tài),并將該頁置于系統(tǒng)存儲器104中。類似地,如果基于給定的存儲器頁的使用歷史,UVM系統(tǒng)200確定該存儲器頁可能主要或僅僅被PPU202所使用,則UVM系統(tǒng)200可對該存儲器頁指派“PPU所有”的所有權(quán)狀態(tài),并將該頁置于PPU存儲器204中。最后,如果基于給定的存儲器頁的使用歷史,UVM系統(tǒng)200確定該存儲器頁可能被CPU102和PPU202兩者都使用,并確定將存儲器頁從系統(tǒng)存儲器104到PPU存儲器204來回遷移將會耗費(fèi)太多時(shí)間,則UVM系統(tǒng)200可對該存儲器頁指派“CPU共享”的所有權(quán)狀態(tài)。
[0048]作為示例,故障處理程序211和215可實(shí)施下列用于遷移的啟發(fā)法(heuristics)中的任何或全部:
[0049](a)關(guān)于對映射至PPU202且最近未遷移的被取消映射(unmap)的頁的CPU102訪問,將出故障的頁從PPU202取消映射,將該頁遷移到CPU102,并將該頁映射至CPU102 ;
[0050](b)關(guān)于對映射至CPU102且最近未遷移的被取消映射的頁的PPU202訪問,將出故障的頁從CPU102取消映射,將該頁遷移到PPU202,并將該頁映射至PPU202 ;
[0051](C)關(guān)于對映射至PPU202且最近經(jīng)遷移的被取消映射的頁的CPU102訪問,將出故障的頁遷移到CPU102并將該頁映射在CPU102和PPU202兩者上;
[0052](d)關(guān)于對映射在CPU102上且最近經(jīng)遷移的被取消映射的頁的PPU202訪問,將該頁映射至CPU102和PPU202兩者;
[0053](e)關(guān)于對映射至CPU102和PPU202兩者但對于PPU202所進(jìn)行的原子操作未啟用的頁的PPU202原子訪問,將該頁從CPU102取消映射,并映射至PPU202且啟用原子操作;
[0054](f)關(guān)于對映射在CPU102和PPU202上作為寫入時(shí)復(fù)制(copy-on-write) (COff)的頁的PPU202寫入訪問,將該頁復(fù)制到PPU202,從而制作該頁的獨(dú)立副本,將新的頁作為讀寫(read-write)映射在PPU上,并保留當(dāng)前頁映射在CPU102上;
[0055](g)關(guān)于對映射在CPU102和PPU202上作為按需填零(zero-fill-on-demand)(ZFOD)的頁的PPU202讀取訪問,分配PPU202上的物理存儲器頁并用零填充,且將該頁映射在PI3U上,但將其改變?yōu)樵贑PU102上被取消映射;
[0056](h)關(guān)于由第一 PPU202(1)對映射在第二 PPU202 (2)上且最近未遷移的被取消映射的頁的訪問,將出故障的頁從第二 PPU202(2)取消映射,將該頁遷移到第一 PPU202(1),并將該頁映射至第一 PPU202(1);以及
[0057](i)關(guān)于由第一 PPU202(1)對映射在第二 PPU202 (2)上且最近經(jīng)遷移的被取消映射的頁的訪問,將出故障的頁映射至第一 PPU202 (I),并保持該頁在第二 PPU202 (2)上的映射。
[0058]總之,許多啟發(fā)法規(guī)則都是可能的,且本發(fā)明的范圍不限于這些示例。
[0059]另外,任何遷移啟發(fā)法都可“向上取整(round up)”以包含較多的頁或較大的頁尺寸,例如:
[0060](j )關(guān)于對映射至PPU202且最近未遷移的被取消映射的頁的CPU102訪問,將出故障的頁外加在虛擬地址空間中與該出故障的頁相鄰的額外的頁從PPU202取消映射,將這些頁遷移到CPU102,并將這些頁映射至CPU102 (在更詳細(xì)的示例中:對于4kB故障頁,遷移包含4kB故障頁的對準(zhǔn)的(aligned) 64kB區(qū)域);
[0061](k)關(guān)于對映射至CPU102且最近未遷移的被取消映射的頁的PPU202訪問,將出故障的頁外加在虛擬地址空間中與該出故障的頁相鄰的額外的頁從CPU102取消映射,將這些頁遷移到PPU202,并將這些頁映射至PPU202 (在更詳細(xì)的示例中:對于4kB故障頁,遷移包含4kB故障頁的對準(zhǔn)的64kB區(qū)域);
[0062](I)關(guān)于對映射至PPU202且最近未遷移的被取消映射的頁的CPU102訪問,將出故障的頁外加在虛擬地址空間中與該出故障的頁相鄰的額外的頁從PPU202取消映射,將這些頁遷移到CPU102,將這些頁映射至CPU102,并將所有遷移的頁作為CPU102上的一個(gè)或多個(gè)較大的頁對待(在更詳細(xì)的示例中:對于4kB故障頁,遷移包含4kB故障頁的對準(zhǔn)的64kB區(qū)域,并將該對準(zhǔn)的64kB區(qū)域作為64kB頁對待);
[0063](m)關(guān)于對映射至CPU102且最近未遷移的被取消映射的頁的PPU202訪問,將出故障的頁外加在虛擬地址空間中與該出故障的頁相鄰的額外的頁從CPU102取消映射,將這些頁遷移到PPU202,將這些頁映射至PPU202,并將所有遷移的頁作為PPU202上的一個(gè)或多個(gè)較大的頁對待(在更詳細(xì)的示例中:對于4kB故障頁,遷移包含4kB故障頁的對準(zhǔn)的64kB區(qū)域,并將該對準(zhǔn)的64kB區(qū)域作為64kB頁對待);
[0064](η)關(guān)于由第一 PPU202⑴對映射至第二 PPU202⑵上且最近未遷移的被取消映射的頁的訪問,將出故障的頁外加在虛擬地址空間中與該出故障的頁相鄰的額外的頁從第二 PPU202 (2)取消映射,將這些頁遷移到第一 PPU202 (I),并將這些頁映射至第一PPU202(1);以及
[0065](ο)關(guān)于由第一 PPU202 (I)對映射在第二 PPU202 (2)上且最近經(jīng)遷移的被取消映射的頁的訪問,將出故障的頁外加在虛擬地址空間中與該出故障的頁相鄰的額外的頁映射至第一 PPU202 (I),并保持這些頁在第二 PPU202 (2)上的映射。
[0066]總之,許多啟發(fā)法規(guī)則都是可能的,且本發(fā)明的范圍不限于這些示例。
[0067]在一些實(shí)施例中,PSD條目可包含過渡(transit1nal)狀態(tài)信息,以確保由CPU102和PPU202內(nèi)的單元所做出的各種請求之間的適當(dāng)?shù)耐交@?,PSD210條目可包含這樣的過渡狀態(tài)信息,即特定頁處于正在從CPU所有過渡到PI3U所有的過程中。CPU102和PPU202中的各種單元,例如CPU故障處理程序211和PPU故障處理程序215,一經(jīng)確定頁處于這類過渡狀態(tài),就可放棄(forego)部分頁故障序列,以避免由之前對同一虛擬存儲器地址的虛擬存儲器訪問所觸發(fā)的頁故障序列中的步驟。作為具體示例,如果頁故障導(dǎo)致頁從系統(tǒng)存儲器104遷移到PPU存儲器204,則檢測到將會引發(fā)同一遷移的不同的頁故障且不引發(fā)另一頁遷移。此外,CPU102和PPU202中的各種單元可實(shí)施原子操作,用于對PSD210上的操作進(jìn)行適當(dāng)?shù)呐判?。例如,關(guān)于對PSD210條目的修改,CPU故障處理程序211或PPU故障處理程序215可發(fā)出原子比較和交換(swap)操作,以修改PSD210中的特定條目的頁狀態(tài)。因此,該修改可以在不受來自其他單元的操作干擾的情況下完成。
[0068]系統(tǒng)存儲器104中可存儲多個(gè)PSD210——每個(gè)虛擬地址空間一個(gè)。CPU102或PPU202任一者產(chǎn)生的存儲器訪問請求因而可包含虛擬存儲器地址并且還識別與該虛擬存儲器地址相關(guān)聯(lián)的虛擬存儲器地址空間。
[0069]正如CPU102可執(zhí)行包含虛擬存儲器地址的存儲器訪問請求(即,包含經(jīng)由虛擬存儲器地址訪問數(shù)據(jù)的請求的指令)一樣,PPU202也可執(zhí)行類似類型的存儲器訪問請求。更具體地,PPU202包括上面結(jié)合圖1描述的配置為執(zhí)行多個(gè)線程和線程組的多個(gè)執(zhí)行單元,例如GPC和SM。在操作中,那些線程可通過制定虛擬存儲器地址而從存儲器請求數(shù)據(jù)(例如,系統(tǒng)存儲器104或PPU存儲器204)。正如CPU102和CPU MMU209 一樣,PPU202包括PPU存儲器管理單元(MMU)213。PPU MMU213接收來自PPU202的關(guān)于虛擬存儲器地址轉(zhuǎn)譯的請求,并試圖為虛擬存儲器地址從PI3U頁表208提供轉(zhuǎn)譯。
[0070]與CPU頁表206類似地,PI3U頁表208包含虛擬存儲器地址和物理存儲器地址之間的映射。CPU頁表206的情況也如此,對于任何給定的虛擬地址,PPU頁表208可以不包含將虛擬存儲器地址映射至物理存儲器地址的頁表?xiàng)l目。與CPU MMU209—樣,當(dāng)PPU MMU213從PPU頁表208請求對虛擬存儲器地址的轉(zhuǎn)譯并且PI3U頁表208中不存在任何映射或該訪問類型是PI3U頁表208所不允許的時(shí),PPU MMU213產(chǎn)生頁故障。隨后,PPU故障處理程序215觸發(fā)頁故障序列。而且,下面將更詳細(xì)描述在UVM系統(tǒng)200中實(shí)施的不同類型的頁故障序列。
[0071]在頁故障序列過程中,CPU102或PPU202可將命令寫入命令隊(duì)列214,用于由復(fù)制引擎212執(zhí)行。這種方法使CPU102或PPU202在復(fù)制引擎212讀取并執(zhí)行存儲在命令隊(duì)列214中的命令的同時(shí)得以空出以執(zhí)行其他任務(wù),并允許關(guān)于故障序列的所有命令同時(shí)被排隊(duì),從而避免對故障序列的進(jìn)度的監(jiān)視。由復(fù)制引擎212執(zhí)行的命令此外還可包括刪除、生成或修改PPU頁表208中的頁表?xiàng)l目,從系統(tǒng)存儲器104讀取或?qū)懭霐?shù)據(jù),以及將數(shù)據(jù)讀取或?qū)懭氲絇PU存儲器204。
[0072]故障緩存器216存儲指明與由PPU202產(chǎn)生的頁故障有關(guān)的信息的故障緩存器條目。故障緩存器條目可包括例如試圖進(jìn)行的訪問的類型(例如,讀取、寫入或原子的)、引發(fā)了頁故障的試圖進(jìn)行的訪問所針對的虛擬存儲器地址、虛擬地址空間以及對引發(fā)了頁故障的單元或線程的指示。在操作中,當(dāng)PPU202引發(fā)頁故障時(shí),PTO202可將故障緩存器條目寫入故障緩存器216中,以通知PPU故障處理程序215有關(guān)出故障的頁和引發(fā)該故障的訪問的類型。PPU故障處理程序215然后執(zhí)行動作以修復(fù)頁故障。因?yàn)镻PU202正在執(zhí)行多個(gè)線程,所以故障緩存器216可存儲多個(gè)故障,其中每個(gè)線程由于PPU202的存儲器訪問的管線性質(zhì)均可引發(fā)一個(gè)或多個(gè)故障。
[0073]頁故障序列
[0074]如上所述,響應(yīng)于收到關(guān)于虛擬存儲器地址轉(zhuǎn)譯的請求,如果CPU頁表206不包含與所請求的虛擬存儲器地址相關(guān)聯(lián)的映射或者不許可正被請求的訪問的類型,則CPUMMU209產(chǎn)生頁故障。類似地,響應(yīng)于收到關(guān)于虛擬存儲器地址轉(zhuǎn)譯的請求,如果PTO頁表208不包含與所請求的虛擬存儲器地址相關(guān)聯(lián)的映射或者不許可正被請求的訪問的類型,則PPU MMU213產(chǎn)生頁故障。當(dāng)CPU MMU209或PPU MMU213產(chǎn)生頁故障時(shí),請求了虛擬存儲器地址處的數(shù)據(jù)的線程停滯(stall),且“本地故障處理程序”一用于CPU102的CPU故障處理程序211或用于PPU202的PTO故障處理程序215——試圖通過執(zhí)行“頁故障序列”來修復(fù)頁故障。如上面所指出的,頁故障序列包含使得出故障的單元(即,引發(fā)了該頁面故障的單元——CPU102或PPU202任一者)能夠訪問與虛擬存儲器地址相關(guān)聯(lián)的數(shù)據(jù)的一系列操作。在頁故障序列結(jié)束之后,經(jīng)由虛擬存儲器地址請求了數(shù)據(jù)的線程繼續(xù)執(zhí)行。在一些實(shí)施例中,通過允許故障恢復(fù)邏輯跟蹤與出故障的指令相反的出故障的存儲器訪問,故障恢復(fù)得以簡化。
[0075]如果存在任何與頁故障相關(guān)聯(lián)的存儲器頁不得不經(jīng)歷的所有權(quán)狀態(tài)的變化或訪問許可的變化,則在頁故障序列過程中所執(zhí)行的操作取決于這些變化。從當(dāng)前的所有權(quán)狀態(tài)到新的所有權(quán)狀態(tài)的過渡或者訪問許可的變化可以是頁故障序列的一部分。在一些實(shí)例中,將與頁故障相關(guān)聯(lián)的存儲器頁從系統(tǒng)存儲器104遷移到PPU存儲器204也是頁故障序列的一部分。在其他實(shí)例中,將與頁故障相關(guān)聯(lián)的存儲器頁從PPU存儲器204遷移到系統(tǒng)存儲器104也是頁故障序列的一部分。本文中較為充分描述的各種啟發(fā)法可用于配置UVM系統(tǒng)200以改變存儲器頁所有權(quán)狀態(tài)或者以按照各種操作條件和圖案的集合遷移存儲器頁。下面將更詳細(xì)描述的是關(guān)于下列四種存儲器頁所有權(quán)狀態(tài)過渡的頁故障序列=CPU所有到CPU共享、CPU所有到PPU所有、PPU所有到CPU所有以及PI3U所有到CPU共享。
[0076]由PPU202所產(chǎn)生的故障可開始從CPU所有到CPU共享的過渡。在這種過渡之前,正在PPU202中執(zhí)行的線程試圖訪問在PI3U頁表208中沒被映射的虛擬存儲器地址處的數(shù)據(jù)。此訪問試圖引發(fā)基于PPU的頁故障,該頁故障然后致使故障緩存器條目被寫入到故障緩存器216。作為響應(yīng),PPU故障處理程序215讀取與該虛擬存儲器地址相對應(yīng)的PSD210條目,并識別與該虛擬存儲器地址相關(guān)聯(lián)的存儲器頁。在對PSD210進(jìn)行讀取之后,PPU故障處理程序215確定與該虛擬存儲器地址相關(guān)聯(lián)的存儲器頁的當(dāng)前所有權(quán)狀態(tài)為CPU所有?;诋?dāng)前所有權(quán)狀態(tài)以及其他因素,例如關(guān)于存儲器頁的使用特性或存儲器訪問的類型,PPU故障處理程序215確定該頁的新的所有權(quán)狀態(tài)應(yīng)當(dāng)為CPU共享。
[0077]為了改變所有權(quán)狀態(tài),PI3U故障處理程序215在PPU頁表208中寫入新條目,與虛擬存儲器地址相對應(yīng)且將虛擬存儲器地址與經(jīng)由PSD210條目所識別的存儲器頁關(guān)聯(lián)起來。PI3U故障處理程序215還修改關(guān)于該存儲器頁的PSD210條目以指明所有權(quán)狀態(tài)為CPU共享。在一些實(shí)施例中,使PPU202中的轉(zhuǎn)譯后備(look-aside)緩存器(TLB)無效,以將其中至無效頁的轉(zhuǎn)譯被高速緩存(cache)的情況加以考慮。此時(shí),頁故障序列結(jié)束。存儲器頁的所有權(quán)狀態(tài)為CPU共享,意味著存儲器頁對于CPU102和PPU202都是可訪問的。CPU頁表206和PPU頁表208兩者都包含將虛擬存儲器地址關(guān)聯(lián)到存儲器頁的條目。
[0078]由PPU202所產(chǎn)生的故障可開始從CPU所有到PPU所有的過渡。在這種過渡之前,正在PPU202中執(zhí)行的操作試圖訪問在PI3U頁表208中沒被映射的虛擬存儲器地址處的數(shù)據(jù)。此存儲器訪問試圖引發(fā)基于PPU的頁故障,該頁故障然后致使故障緩存器條目被寫入到故障緩存器216。作為響應(yīng),PTO故障處理程序215讀取與該虛擬存儲器地址相對應(yīng)的PSD210條目,并識別與該虛擬存儲器地址相關(guān)聯(lián)的存儲器頁。在對PSD210進(jìn)行讀取之后,PPU故障處理程序215確定與該虛擬存儲器地址相關(guān)聯(lián)的存儲器頁的當(dāng)前所有權(quán)狀態(tài)為(PU所有?;诋?dāng)前所有權(quán)狀態(tài)以及其他因素,例如關(guān)于該頁的使用特性或存儲器訪問的類型,PPU故障處理程序215確定該頁的新的所有權(quán)狀態(tài)應(yīng)當(dāng)為PI3U所有。
[0079]PPU202將指明PPU202產(chǎn)生了頁故障且指明與該頁故障相關(guān)聯(lián)的虛擬存儲器地址的故障緩存器條目寫入故障緩存器216中。正在CPU102上執(zhí)行的PTO故障處理程序215讀取該故障緩存器條目,且作為響應(yīng),CPU102將CPU頁表206中與引發(fā)該頁故障的虛擬存儲器地址相關(guān)聯(lián)的映射移除。CPU102可在移除映射之前和/或之后清理(flush)高速緩存。CPU102還將指示PPU202將頁從系統(tǒng)存儲器104復(fù)制到PPU存儲器204中的命令寫入到命令隊(duì)列214中。PPU202中的復(fù)制引擎212讀取命令隊(duì)列214中的命令并將頁從系統(tǒng)存儲器104復(fù)制到PPU存儲器204。PPU202將頁表?xiàng)l目寫入PI3U頁表208中,與該虛擬存儲器地址相對應(yīng)且將該虛擬存儲器地址與PPU存儲器204中的新復(fù)制的存儲器頁關(guān)聯(lián)起來。對PPU頁表208的寫入可經(jīng)由PPU202來完成。替代地,CPU102可更新PI3U頁表208。PPU故障處理程序215還修改關(guān)于該存儲器頁的PSD210,以指明所有權(quán)狀態(tài)為PTO所有。在一些實(shí)施例中,可使PPU202或CPU102中的TLB中的條目無效,以將其中轉(zhuǎn)譯被高速緩存的情況納入考慮。此時(shí),頁故障序列結(jié)束。存儲器頁的所有權(quán)狀態(tài)為PPU所有,意味著該存儲器頁僅對于PPU202是可訪問的。僅PPU頁表208包含將虛擬存儲器地址與該存儲器頁關(guān)聯(lián)起來的條目。
[0080]由CPU102所產(chǎn)生的故障可開始從PI3U所有到CPU所有的過渡。在這種過渡之前,正在CPU102中執(zhí)行的操作試圖訪問在CPU頁表206中沒被映射的虛擬存儲器地址處的數(shù)據(jù),這引發(fā)基于CPU的頁故障。CPU故障處理程序211讀取與該虛擬存儲器地址相對應(yīng)的PSD210條目,并識別與該虛擬存儲器地址相關(guān)聯(lián)的存儲器頁。在對PSD210進(jìn)行讀取之后,CPU故障處理程序211確定與該虛擬存儲器地址相關(guān)聯(lián)的存儲器頁的當(dāng)前所有權(quán)狀態(tài)為PPU所有?;诋?dāng)前所有權(quán)狀態(tài)以及其他因素,例如關(guān)于該頁的使用特性或訪問的類型,CPU故障處理程序211確定該頁的新的所有權(quán)狀態(tài)為CPU所有。
[0081]CPU故障處理程序211將與存儲器頁相關(guān)聯(lián)的所有權(quán)狀態(tài)改變到CPU所有。CPU故障處理程序211將命令寫入命令隊(duì)列214中,以令復(fù)制引擎212從PPU頁表208移除將虛擬存儲器地址與該存儲器頁關(guān)聯(lián)起來的條目??墒垢鞣NTLB條目無效。CPU故障處理程序211還將存儲器頁從PTO存儲器204復(fù)制到系統(tǒng)存儲器104中,這可經(jīng)由命令隊(duì)列214和復(fù)制引擎212來完成。CPU故障處理程序211在CPU頁表206中寫入將虛擬存儲器地址與被復(fù)制到系統(tǒng)存儲器104中的存儲器頁關(guān)聯(lián)起來的頁表?xiàng)l目。CPU故障處理程序211還更新PSD210以將虛擬存儲器地址與新復(fù)制的存儲器頁關(guān)聯(lián)起來。此時(shí),頁故障序列結(jié)束。存儲器頁的所有權(quán)狀態(tài)為CPU所有,意味著該存儲器頁僅對于CPU102是可訪問的。僅CPU頁表206包含將虛擬存儲器地址與該存儲器頁關(guān)聯(lián)起來的條目。
[0082]由CPU102所產(chǎn)生的故障可開始從PI3U所有到CPU共享的過渡。在這種過渡之前,正在CPU102中執(zhí)行的操作試圖訪問在CPU頁表206中沒被映射的虛擬存儲器地址處的數(shù)據(jù),這引發(fā)基于CPU的頁故障。CPU故障處理程序211讀取與該虛擬存儲器地址相對應(yīng)的PSD210條目,并識別與該虛擬存儲器地址相關(guān)聯(lián)的存儲器頁。在對PSD210進(jìn)行讀取之后,CPU故障處理程序211確定與該虛擬存儲器地址相關(guān)聯(lián)的存儲器頁的當(dāng)前所有權(quán)狀態(tài)為PPU所有?;诋?dāng)前所有權(quán)狀態(tài)以及其他因素,例如關(guān)于該頁的使用特性,CPU故障處理程序211確定該頁的新的所有權(quán)狀態(tài)為CPU共享。
[0083]CPU故障處理程序211將與存儲器頁相關(guān)聯(lián)的所有權(quán)狀態(tài)改變到CPU共享。CPU故障處理程序211將命令寫入命令隊(duì)列214中,以令復(fù)制引擎212從PPU頁表208移除將虛擬存儲器地址與該存儲器頁關(guān)聯(lián)起來的條目??墒垢鞣NTLB條目無效。CPU故障處理程序211還將存儲器頁從PTO存儲器204復(fù)制到系統(tǒng)存儲器104中。此復(fù)制操作可經(jīng)由命令隊(duì)列214和復(fù)制引擎212來完成。CPU故障處理程序211然后將命令寫入命令隊(duì)列214中,以令復(fù)制引擎212改變PPU頁表208中的條目,使得虛擬存儲器地址與系統(tǒng)存儲器104中的存儲器頁關(guān)聯(lián)起來。CPU故障處理程序211將頁表?xiàng)l目寫入CPU頁表206,以將虛擬存儲器地址與系統(tǒng)存儲器104中的存儲器頁關(guān)聯(lián)起來。CPU故障處理程序211還更新PSD210以將虛擬存儲器地址與系統(tǒng)存儲器104中的存儲器頁關(guān)聯(lián)起來。此時(shí),頁故障序列結(jié)束。該頁的所有權(quán)狀態(tài)為CPU共享,且該存儲器頁已被復(fù)制到系統(tǒng)存儲器104中。由于CPU頁表206包含將虛擬存儲器地址與系統(tǒng)存儲器104中的存儲器頁關(guān)聯(lián)起來的條目,所以該頁對于CPU102是可訪問的。由于PI3U頁表208包含將虛擬存儲器地址與系統(tǒng)存儲器104中的存儲器頁關(guān)聯(lián)起來的條目,所以該頁對于PPU202也是可訪問的。
[0084]頁故障序列的詳細(xì)示例
[0085]在此情境下,現(xiàn)在提供對倘若從CPPU所有到CPU共享過渡則由PI3U故障處理程序215執(zhí)行的頁故障序列的詳細(xì)描述以展示原子操作和過渡狀態(tài)是如何用來更有效地管理序列的。頁故障序列被試圖訪問在PI3U頁表208中不存在相關(guān)映射的虛擬地址的PPU202線程所觸發(fā)。當(dāng)線程試圖經(jīng)由虛擬存儲器地址訪問數(shù)據(jù)時(shí),PPU202 (具體地,用戶級線程)從PPU頁表208請求轉(zhuǎn)譯。因?yàn)镻I3U頁表208不包含于所請求的虛擬存儲器地址相關(guān)聯(lián)的映射,所以作為響應(yīng),發(fā)生PPU頁故障。
[0086]在頁故障發(fā)生之后,上述線程被困、停滯,并且PTO故障處理程序215執(zhí)行頁故障序列。PI3U故障處理程序215對PSD210進(jìn)行讀取,以確定哪個(gè)存儲器頁與虛擬存儲器地址相關(guān)聯(lián),以及確定虛擬存儲器地址的狀態(tài)。PPU故障處理程序215從PSD210確定存儲器頁的所有權(quán)狀態(tài)是CPU所有。因此,由PPU202所請求的數(shù)據(jù)經(jīng)由虛擬存儲器地址對于PPU202是可訪問的。存儲器頁的狀態(tài)信息還指明所請求的數(shù)據(jù)不能被遷移到PPU存儲器204。
[0087]基于從PSD210獲得的狀態(tài)信息,PI3U故障處理程序215確定存儲器頁的新的狀態(tài)應(yīng)當(dāng)為CPU共享。PPU故障處理程序215將狀態(tài)改變到“過渡到CPU共享”。此狀態(tài)指明頁當(dāng)前處于正過渡到CPU共享的過程中。當(dāng)PTO故障處理程序215在存儲器管理單元中的微控制器上運(yùn)行時(shí),則兩個(gè)處理器將異步地更新PSD210,對PSD210使用原子比較-交換(“CAS”)操作而將狀態(tài)改變到“過渡到GPU可見(visible)”(CPU共享)。
[0088]PPU202更新PPU頁表208以將虛擬存儲器地址與存儲器頁關(guān)聯(lián)起來。PPU202還使TLB高速緩存條目無效。接著,PTO202對PSD210執(zhí)行另一原子比較-交換,以將與存儲器頁相關(guān)聯(lián)的所有權(quán)狀態(tài)改變到CPU共享。最后,頁故障序列終止,且經(jīng)由虛擬存儲器地址請求了數(shù)據(jù)的線程繼續(xù)執(zhí)行。
[0089]UVM系統(tǒng)架構(gòu)變形例
[0090]對統(tǒng)一虛擬存儲器系統(tǒng)200的各種修改都是可能的。例如,在一些實(shí)施例中,在將故障緩存器條目寫入故障緩存器216中,PPU202可觸發(fā)CPU中斷,以令CPU102讀取故障緩存器216中的故障緩存器條目并響應(yīng)于該故障緩存器條目而執(zhí)行任何適當(dāng)?shù)牟僮?。在其他?shí)施例中,CPU102可周期性地輪詢(poll)故障緩存器216。倘若CPU102在故障緩存器216中找到故障緩存器條目,則CPU102響應(yīng)于該故障緩存器條目而執(zhí)行一系列操作。
[0091]在一些實(shí)施例中,系統(tǒng)存儲器104,而不是PPU存儲器204,存儲PPU頁表208。在其他實(shí)施例中,可實(shí)施單級或多級高速緩存層級架構(gòu)(hierarchy),例如單級或多級轉(zhuǎn)譯后備緩存器(TLB)層級架構(gòu)(未示出),以供CPU頁表206或PPU頁表208高速緩存虛擬地址轉(zhuǎn)譯。
[0092]在又一些實(shí)施例中,倘若正在PPU202中執(zhí)行的線程引發(fā)PI3U故障(“出故障的線程”)則PPU202可采取一個(gè)或多個(gè)動作。這些動作包含:使整個(gè)PPU202停滯,使正在執(zhí)行出故障的線程的SM停滯,使PPU MMU213停滯,僅使出故障的線程停滯或者使一級或多級TLB停滯。在一些實(shí)施例中,在PPU頁故障發(fā)生之后,并且統(tǒng)一虛擬存儲器系統(tǒng)200已執(zhí)行頁故障序列,則出故障的線程繼續(xù)執(zhí)行,且出故障線程再次試圖引發(fā)了該頁故障的存儲器訪問請求。在一些實(shí)施例中,TLB處的停滯是以表現(xiàn)為對出故障的SM或出故障的線程的長時(shí)延(1ng-1atency)存儲器訪問這樣的方式來進(jìn)行的,從而無需SM針對故障做出任何特殊操作。
[0093]最后,在其他替代性實(shí)施例中,UVM驅(qū)動器101可包含令CPU102執(zhí)行一個(gè)或多個(gè)操作用于管理UVM系統(tǒng)200并修復(fù)頁故障的指令,例如訪問CPU頁表206、PSD210和/或故障緩存器216。在其他實(shí)施例中,操作系統(tǒng)內(nèi)核(未示出)可配置為通過訪問CPU頁表206、PSD210和/或故障緩存器216來管理UVM系統(tǒng)200并修復(fù)頁故障。在又一些實(shí)施例中,操作系統(tǒng)內(nèi)核可連同UVM驅(qū)動器101 —起操作,以通過訪問CPU頁表206、PSD210和/或故障緩存器216來管理UVM系統(tǒng)200并修復(fù)頁故障。
[0094]遷移不同尺寸的存儲器頁
[0095]存儲在系統(tǒng)存儲器104中的存儲器頁被許可具有與存儲在PPU存儲器204中的存儲器頁不同的尺寸。例如,存儲在系統(tǒng)存儲器104中的存儲器頁可具有4KB的尺寸,而存儲在PI3U存儲器204中的存儲器頁可具有128KB的尺寸。作為另一示例,存儲在系統(tǒng)存儲器104中的存儲器頁可具有4KB的尺寸,而存儲在PI3U存儲器204中的存儲器頁可具有4KB頁和128KB頁的混合。作為又一示例,存儲在系統(tǒng)存儲器104中的存儲器頁可具有4KB和IMB頁的混合,而存儲在PPU存儲器204中的存儲器頁可具有4KB頁和128KB頁的混合。在頁故障序列過程中,UVM系統(tǒng)200可從一個(gè)存儲器單元將存儲器頁傳送至另一存儲器單元(例如,從PPU存儲器204到系統(tǒng)存儲器104)。為了容許存儲器頁的尺寸上的差異,當(dāng)UVM系統(tǒng)200傳送存儲器頁時(shí),UVM系統(tǒng)200可分割開大存儲器頁或組合多個(gè)小存儲器頁。UVM系統(tǒng)200還可將一個(gè)或多個(gè)另外的“同級(slibling)”存儲器頁與要傳送的存儲器頁一起傳送。在一些實(shí)施例中,同級存儲器頁是具有較小尺寸的存儲器頁(例如,存儲器頁在存儲4KB和128KB存儲器頁兩者的系統(tǒng)中具有4KB尺寸),其能容納在較大頁的對準(zhǔn)的地址跨度(span)內(nèi)。對準(zhǔn)的地址跨度是指較大尺寸的存儲器頁的從開始到結(jié)束的地址范圍。位于這樣的地址跨度內(nèi)的較小頁被視為同級存儲器頁。
[0096]下面參照圖3-7來描述與將大存儲器頁分割成多個(gè)較小存儲器頁或?qū)⒍鄠€(gè)小存儲器頁組合成較大存儲器頁并且在存儲器單元之間傳送這些存儲器頁相關(guān)聯(lián)的若干操作。例如,描述在下列情境下發(fā)生的操作:從系統(tǒng)存儲器104將小存儲器頁傳送至PTO存儲器204 (圖3);從系統(tǒng)存儲器104將小存儲器頁和同級存儲器頁傳送至PI3U存儲器204中的大存儲器頁(圖4);將PPU存儲器204中的大存儲器頁分割成小存儲器頁,并從PI3U存儲器204將這些小存儲器頁其中之一傳送至系統(tǒng)存儲器104 (圖5);以及從PPU存儲器204將小存儲器頁以及該小存儲器頁的同級存儲器頁傳送至系統(tǒng)存儲器104中(圖6)。
[0097]圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于從系統(tǒng)存儲器104將小存儲器頁傳送至PI3U存儲器204的操作。在該操作中,系統(tǒng)存儲器104存儲小存儲器頁302且PPU存儲器204存儲小存儲器頁304和大存儲器頁306兩者。根據(jù)該操作,UVM驅(qū)動器101確定系統(tǒng)存儲器104中的特定小存儲器頁302(0)將要遷移至PI3U存儲器204。因?yàn)镻I3U存儲器204能夠存儲小尺寸或大尺寸的存儲器頁,則經(jīng)遷移后的存儲器頁被存儲為小存儲器頁304(1)。經(jīng)遷移后的小存儲器頁304(1)可緊挨著PI3U存儲器204中的其他小存儲器頁304存儲。PI3U存儲器204中也可存儲大存儲器頁306。在遷移之后,系統(tǒng)存儲器中被遷移的小存儲器頁所占用的空間被解除分配(deallocate)且可用于將來的分配。
[0098]UVM驅(qū)動器101針對相關(guān)聯(lián)的存儲器頁而更改PSD條目以執(zhí)行操作。更改PSD條目可包括針對相關(guān)聯(lián)的存儲器頁而設(shè)置PSD條目,以指明中間和/或鎖定狀態(tài)。更具體地,UVM驅(qū)動器101設(shè)置與存儲器頁302 (O)相關(guān)聯(lián)的PSD條目,以指明存儲器頁302(0)處于傳送中且僅能讀取。隨后,UVM驅(qū)動器101設(shè)置與目標(biāo)大存儲器頁306相關(guān)聯(lián)的PSD條目,以指明該大存儲器頁306處于傳送中且不能訪問。UVM驅(qū)動器101將小存儲器頁302(0)復(fù)制到目標(biāo)大存儲器頁306。隨后,UVM驅(qū)動器101設(shè)置PSD條目,以指明目標(biāo)大存儲器頁306能訪問(讀取和寫入)。
[0099]如以上參照圖2所描述的,特定存儲器頁可由于各種各樣的理由而被遷移。當(dāng)在PPU存儲器204中需要存儲在系統(tǒng)存儲器104中的單個(gè)小存儲器頁302、但系統(tǒng)存儲器104中還需要包圍單個(gè)所需要的存儲器頁的“同級”存儲器頁時(shí),可執(zhí)行圖3中所示操作。當(dāng)單個(gè)小存儲器頁302頻繁地被例如PPU202訪問、同時(shí)同級存儲器頁中的一個(gè)或多個(gè)頻繁地被例如CPU102訪問時(shí),會出現(xiàn)這種情形。通常,當(dāng)包含單個(gè)小存儲器頁和同級存儲器頁的存儲器頁組“被強(qiáng)烈主張”、意味著該存儲器頁組中的各種存儲器頁被不同的處理單元例如CPU102和PPU202訪問時(shí),UVM驅(qū)動器101可分割該存儲器頁組。
[0100]圖4示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于從系統(tǒng)存儲器104將小存儲器頁和相關(guān)的“同級”存儲器頁傳送至PPU存儲器204的操作。在該操作中,如參照圖3描述的操作一樣,系統(tǒng)存儲器104存儲小存儲器頁402且PPU存儲器204存儲小存儲器頁404和大存儲器頁406兩者。根據(jù)圖4中所示操作,UVM驅(qū)動器101確定特定小存儲器頁402(1)以及同級存儲器頁402(0)、同級存儲器頁402(2)和同級存儲器頁402(3)將要從系統(tǒng)存儲器104遷移至PPU存儲器204。UVM驅(qū)動器101令這些存儲器頁從系統(tǒng)存儲器104遷移至PPU存儲器204。因?yàn)镻PU存儲器204通常與較大存儲器頁一起工作效率較高,所以UVM驅(qū)動器101可將從系統(tǒng)存儲器104復(fù)制的小存儲器頁402合并(coalesce)成包含來自小存儲器頁的全部數(shù)據(jù)的一個(gè)大的合并存儲器頁405。
[0101]另外,如上所述,參照圖2和圖3,遷移特定存儲器頁的理由可以是各種各樣的,比如使用歷史。當(dāng)在PPU存儲器204中需要特定存儲器頁且移動同級存儲器頁被認(rèn)為是有利的時(shí),可執(zhí)行圖4中所示操作。在一個(gè)示例中,這樣的頁基于最近最少使用(least-recently-used)跟蹤方案來進(jìn)行合并。不經(jīng)常訪問的小的頁合并在一起。
[0102]如上所述,UVM驅(qū)動器101針對相關(guān)聯(lián)的存儲器頁而更改PSD條目以執(zhí)行操作。更改PSD條目可包括針對相關(guān)聯(lián)的存儲器頁而設(shè)置PSD條目,以指明中間和/或鎖定狀態(tài)。更具體地,UVM驅(qū)動器101設(shè)置與存儲器頁420 (O)、存儲器頁420 (I)、存儲器頁420 (2)和存儲器頁420(3)相關(guān)聯(lián)的PSD條目,以指明這些存儲器頁處于傳送中且僅能讀取。隨后,UVM驅(qū)動器101設(shè)置與目標(biāo)大存儲器頁406相關(guān)聯(lián)的PSD條目,以指明該大存儲器頁406處于傳送中且不能訪問。然后UVM驅(qū)動器101將這些小存儲器頁復(fù)制到目標(biāo)大存儲器頁406。隨后,UVM驅(qū)動器101設(shè)置PSD條目,以指明目標(biāo)大存儲器頁406能訪問(讀取和寫入)。
[0103]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于從PPU存儲器204將小存儲器頁傳送至系統(tǒng)存儲器104的操作。在該操作中,與以上參照圖3和圖4描述的操作一樣,系統(tǒng)存儲器104存儲小存儲器頁502,且PPU存儲器204存儲大存儲器頁504和小存儲器頁506兩者。根據(jù)該操作,UVM驅(qū)動器101確定存儲在PI3U存儲器204中的大存儲器頁的特定部分將要遷移至系統(tǒng)存儲器104。UVM驅(qū)動器101令該大存儲器頁分解(break up)成小存儲器頁,然后令與上述部分相關(guān)聯(lián)的小存儲器頁遷移至系統(tǒng)存儲器104。另外,如上所述,遷移特定存儲器頁的理由可以是各種各樣的,包括使用歷史。
[0104]如上所述,可分割“被強(qiáng)烈主張”的存儲器頁。換言之,對于特定大存儲器頁,如果該大存儲器頁內(nèi)的小存儲器頁頻繁地被多個(gè)不同的處理單元例如CPU102或PPU202訪問,則可分割該大存儲器頁。此分析是基于使用歷史的一類分析。
[0105]如上所述,UVM驅(qū)動器101針對相關(guān)聯(lián)的存儲器頁更改PSD條目以執(zhí)行圖5中所示操作。更具體地,UVM驅(qū)動器101設(shè)置與將要分割的大存儲器頁相關(guān)聯(lián)的PSD條目,以指明該存儲器頁處于傳送中且僅能讀取。隨后,UVM驅(qū)動器101設(shè)置與目標(biāo)小存儲器頁502相關(guān)聯(lián)的PSD條目,以指明該小存儲器頁502處于傳送中且不能訪問。然后UVM驅(qū)動器101將大存儲器頁506的上述部分復(fù)制到目標(biāo)目標(biāo)小存儲器頁502。隨后,UVM驅(qū)動器101設(shè)置PSD條目,以指明目標(biāo)目標(biāo)小存儲器頁502能訪問(讀取和寫入)。
[0106]圖6示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于從PTO存儲器204將小存儲器頁以及同級存儲器頁傳送至系統(tǒng)存儲器104的操作。在該操作中,如以上參照圖3-5描述的操作一樣,系統(tǒng)存儲器104存儲小存儲器頁602且PPU存儲器204存儲大存儲器頁604和小存儲器頁606兩者。根據(jù)該操作,UVM驅(qū)動器101確定大存儲器頁606的特定部分將要從PPU存儲器204遷移至系統(tǒng)存儲器104。UVM驅(qū)動器101令UVM驅(qū)動器101分割成小存儲器頁604,并且令小存儲器頁604(1)以及同級存儲器頁——小存儲器頁604(0)、小存儲器頁604(2)和小存儲器頁604(3)——遷移至系統(tǒng)存儲器104。如圖3_5 —樣,特定存儲器頁比如小存儲器頁604(1)可由于各種各樣的理由而從PTO存儲器204遷移至系統(tǒng)存儲器104,如以上參照圖1和圖2所描述的。
[0107]同樣如上所述,UVM驅(qū)動器101針對相關(guān)聯(lián)的存儲器頁而更改PSD條目以執(zhí)行操作。更具體地,UVM驅(qū)動器101設(shè)置與將要分割的大存儲器頁相關(guān)聯(lián)的PSD條目,以指明該存儲器頁處于傳送中且僅能讀取。隨后,UVM驅(qū)動器101設(shè)置于目標(biāo)小存儲器頁602相關(guān)聯(lián)的PSD條目,以指明該小存儲器頁602處于傳送中且不能訪問。然后UVM驅(qū)動器101將現(xiàn)在分解成了小存儲器頁的大存儲器頁606復(fù)制到目標(biāo)小存儲器頁602。隨后,UVM驅(qū)動器101設(shè)置PSD條目以指明目標(biāo)小存儲器頁602能訪問(讀取和寫入)。
[0108]圖7是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于在虛擬存儲器架構(gòu)中的存儲器單元之間遷移不同尺寸的存儲器頁的方法步驟的流程圖。雖然結(jié)合圖1-6描述了這些方法步驟,但本領(lǐng)域技術(shù)人員將理解,以任何次序經(jīng)配置以執(zhí)行這些方法的任何系統(tǒng)都落入本發(fā)明的范圍內(nèi)。
[0109]如圖所示,方法700在步驟702開始,其中UVM驅(qū)動器101確定存儲器頁要遷移。在步驟704,UVM驅(qū)動器101確定該存儲器頁是否為大存儲器頁。如果該存儲器頁為大存儲器頁,則方法700前進(jìn)至步驟706。在步驟706,UVM驅(qū)動器101確定是否分割大存儲器頁。如果UVM驅(qū)動器101確定大存儲器頁應(yīng)當(dāng)被分割,則該方法前進(jìn)至步驟708。在步驟708,UVM驅(qū)動器101分割大存儲器頁并從一個(gè)存儲器單元將來自大存儲器頁的小存儲器頁復(fù)制到另一存儲器單元。如果在步驟708,UVM驅(qū)動器101確定不要分割大存儲器頁,則該方法前進(jìn)至步驟710。在步驟710,UVM驅(qū)動器101從一個(gè)存儲器單元將大存儲器頁復(fù)制到另一存儲器單元。
[0110]返回步驟704,如果UVM驅(qū)動器101確定存儲器頁不是大存儲器頁,則存儲器頁為小存儲器頁且方法前進(jìn)至步驟712。在步驟712,UVM驅(qū)動器101確定是否要合并小存儲器頁和同級存儲器頁。如果UVM驅(qū)動器101確定小存儲器頁應(yīng)當(dāng)被合并,則UVM驅(qū)動器101前進(jìn)至步驟714。在步驟714,UVM驅(qū)動器101從一個(gè)存儲器單元將小存儲器頁和同級存儲器復(fù)制到另一存儲器單元。如果在步驟712,UVM驅(qū)動器101確定不要合并存儲器頁和同級存儲器頁,則該方法前進(jìn)至步驟716。在步驟716,UVM驅(qū)動器101從一個(gè)存儲器單元將小存儲器頁復(fù)制到另一存儲器單元。
[0111]總之,提供一種方法,通過該方法可將駐存在存儲不同尺寸的存儲器頁的存儲器單元中的存儲器頁在不同的存儲器單元之間遷移。UVM驅(qū)動器101確定哪些存儲器將要遷移。如果存儲器頁是小存儲器頁,則UVM驅(qū)動器101確定是否還要遷移同級存儲器頁。如果存儲器頁是大存儲器頁,則UVM驅(qū)動器101確定是否要分割該大存儲器頁,或者是否要遷移整個(gè)存儲器頁。在遷移過程中,UVM驅(qū)動器101阻止對遷移中所涉及的存儲器頁的訪問。
[0112]所公開的技術(shù)的一個(gè)優(yōu)點(diǎn)在于,在虛擬存儲器架構(gòu)中的不同存儲器單元之間可以有效地來回遷移不同尺寸的存儲器頁。該技術(shù)通過允許統(tǒng)一虛擬存儲器系統(tǒng)與許多不同類型的存儲器架構(gòu)一起工作來提高統(tǒng)一虛擬存儲器系統(tǒng)的靈活性。另一相關(guān)優(yōu)點(diǎn)在于,通過允許大存儲器頁被分割成較小存儲器頁并且允許小存儲器頁被合并成較大存儲器頁,具有不同尺寸的存儲器頁可以存儲在配置為存儲不同存儲器頁尺寸的不同存儲器單元中。此特征允許統(tǒng)一虛擬存儲器系統(tǒng)在可能的情況下將頁歸組,以便減小在頁表和/或轉(zhuǎn)譯后備緩存器中占用的空間量。該特征還允許存儲器頁被分割開并遷移至不同的存儲器單元,只要這種分割將會改進(jìn)存儲器本地性并減少存儲器訪問時(shí)間。
[0113]雖然上述內(nèi)容針對本發(fā)明的實(shí)施例,但可對本發(fā)明的其他以及進(jìn)一步的實(shí)施例進(jìn)行設(shè)計(jì)而不脫離其基本范圍。例如,可以硬件或軟件或硬件和軟件的組合來實(shí)現(xiàn)本發(fā)明的各方面。本發(fā)明的一個(gè)實(shí)施例可被實(shí)施為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品。該程序產(chǎn)品的程序定義實(shí)施例的各功能(包括本文中描述的方法)并且可以被包含在各種計(jì)算機(jī)可讀存儲介質(zhì)上。示例性計(jì)算機(jī)可讀存儲介質(zhì)包括但不限于:(i)不可寫的存儲介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲器設(shè)備,諸如可由CD-ROM驅(qū)動器讀取的光盤只讀存儲器(CD-ROM)盤、閃存、只讀存儲器(ROM)芯片或任何類型的固態(tài)非易失性半導(dǎo)體存儲器),在其上存儲永久性信息jP(ii)可寫的存儲介質(zhì)(例如,磁盤驅(qū)動器或硬盤驅(qū)動器內(nèi)的軟盤或者任何類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲器),在其上存儲可更改的信息。當(dāng)承載針對本發(fā)明的功能的計(jì)算機(jī)可讀指令時(shí),這樣的計(jì)算機(jī)可讀存儲介質(zhì)是本發(fā)明的實(shí)施例。
[0114]以上已參照特定實(shí)施例對本發(fā)明進(jìn)行了描述。然而,本領(lǐng)域普通技術(shù)人員將理解的是,可對此做出各種修改和變化而不脫離如隨附權(quán)利要求書中所闡述的本發(fā)明的較寬精神和范圍。因此,前面的描述以及附圖應(yīng)被視為是例示性而非限制性的意義。
[0115]因此,本發(fā)明的范圍由隨附的權(quán)利要求書加以界定。
【權(quán)利要求】
1.一種用于將存儲器頁從第一存儲器遷移至第二存儲器的計(jì)算機(jī)實(shí)現(xiàn)方法,該方法包括: 確定所述第一存儲器所支持的第一頁尺寸; 確定所述第二存儲器所支持的第二頁尺寸; 基于與所述存儲器頁相關(guān)聯(lián)的頁狀態(tài)目錄(PSD)中的條目,來確定所述存儲器頁的使用歷史;以及 基于所述第一頁尺寸、所述第二頁尺寸和所述使用歷史,在所述第一存儲器和所述第二存儲器之間遷移所述存儲器頁。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述第一頁尺寸比所述第二頁尺寸小,且遷移所述存儲器頁包括:將所述存儲器頁從系統(tǒng)存儲器傳送至并行處理單元(PPU)本地的存儲器。
3.根據(jù)權(quán)利要求2所述的方法,還包括:將至少一個(gè)同級存儲器頁從所述系統(tǒng)存儲器傳送至所述PPU本地的存儲器,其中,所述至少一個(gè)同級存儲器頁將要與所述存儲器頁組合,以生成所述PPU本地的存儲器中的較大存儲器頁的至少一部分。
4.根據(jù)權(quán)利要求1所述的方法,其中,所述第一尺寸比所述第二尺寸大,且遷移所述存儲器頁包括:將第一存儲器頁從并行處理單元(PPU)本地的存儲器傳送至系統(tǒng)存儲器。
5.根據(jù)權(quán)利要求4所述的方法,其中,遷移所述存儲器頁進(jìn)一步包括:將所述PTO存儲器中的存儲器頁分割成包括第二存儲器頁的多個(gè)較小存儲器頁,并將所述第二存儲器頁從所述PTO本地的存儲器傳送至所述系統(tǒng)存儲器。
6.一種用于遷移存儲器頁的計(jì)算裝置,該計(jì)算裝置包括: 第一存儲器; 第二存儲器; 頁狀態(tài)目錄(PSD);和 統(tǒng)一虛擬存儲器(UVM)驅(qū)動器,經(jīng)配置以: 確定所述第一存儲器所支持的第一頁尺寸; 確定所述第二存儲器所支持的第二頁尺寸; 基于與所述存儲器頁相關(guān)聯(lián)的頁狀態(tài)目錄中的條目,來確定所述存儲器頁的使用歷史;以及 基于所述第一頁尺寸、所述第二頁尺寸和所述使用歷史,在所述第一存儲器和所述第二存儲器之間遷移所述存儲器。
7.根據(jù)權(quán)利要求6所述的計(jì)算裝置,其中,所述第一頁尺寸比所述第二頁尺寸小,且遷移所述存儲器頁包括:將所述存儲器頁從系統(tǒng)存儲器傳送至并行處理單元(PPU)本地的存儲器。
8.根據(jù)權(quán)利要求7所述的計(jì)算裝置,其中,所述UVM驅(qū)動器進(jìn)一步經(jīng)配置以:將至少一個(gè)同級存儲器頁從所述系統(tǒng)存儲器傳送至所述PPU本地的存儲器,其中,所述至少一個(gè)同級存儲器頁將要與所述存儲器頁組合,以生成所述PPU本地的存儲器中的較大存儲器頁的至少一部分。
9.根據(jù)權(quán)利要求6所述的計(jì)算裝置,其中,所述第一尺寸比所述第二尺寸大,且遷移所述存儲器頁包括:將第一存儲器頁從并行處理單元(PPU)本地的存儲器傳送至系統(tǒng)存儲器。
10.根據(jù)權(quán)利要求9所述的計(jì)算裝置,其中,遷移所述存儲器頁進(jìn)一步包括:將所述PPU存儲器中的存 儲器頁分割成包括第二存儲器頁的多個(gè)較小存儲器頁,并將所述第二存儲器頁從所述PPU本地的存儲器傳送至所述系統(tǒng)存儲器。
【文檔編號】G06F3/06GK104049905SQ201310752862
【公開日】2014年9月17日 申請日期:2013年12月31日 優(yōu)先權(quán)日:2013年3月14日
【發(fā)明者】杰爾姆·F·小杜魯克, 卡梅倫·布沙特, 詹姆士·勒羅伊·德明, 盧森·鄧寧, 布雷恩·法斯, 馬克·海爾格羅夫, 賈承歡, 約翰·馬舍, 詹姆斯·M·范·戴克 申請人:輝達(dá)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
准格尔旗| 界首市| 华坪县| 大埔县| 嘉峪关市| 始兴县| 惠水县| 鄂伦春自治旗| 柘城县| 龙井市| 乌什县| 天长市| 武穴市| 楚雄市| 广昌县| 湖北省| 绥中县| 乐业县| 唐海县| 共和县| 儋州市| 海淀区| 白河县| 马山县| 张家口市| 兴化市| 宕昌县| 江都市| 奇台县| 龙州县| 尖扎县| 邯郸市| 克山县| 长治县| 正蓝旗| 远安县| 兴和县| 徐水县| 江都市| 德江县| 绩溪县|