在解决存储器访问故障的同时重播存储器事务的制作方法

文档序号:6527075阅读:188来源:国知局
在解决存储器访问故障的同时重播存储器事务的制作方法
【专利摘要】本发明的一个实施例是一种并行处理单元(PPU),其包括一个或多个流式多处理器(SM)并按照SM实施重播单元。一经检测到与由特定SM所发出的存储器事务相关联的页故障,对应的重播单元就令该SM,而非任何未受影响的SM,停滞发出新的存储器事务。重播单元然后将出故障的存储器事务以及任何出故障的飞行中的存储器事务存储在重播缓存器中。页故障被解决时,重播单元对重播缓存器中的存储器事务进行重播——将成功的存储器事务从重播缓存器移除——直到所存储的存储器事务全部都已成功执行为止。有利地,与一经检测到页故障就跨所有被包括在PPU中的SM停止执行存储器事务直到故障解决为止的常规的PPU相比,上述PPU的整体性能得以提高。
【专利说明】在解决存储器访问故障的同时重播存储器事务

【技术领域】
[0001]本发明总体上涉及计算机科学,且更具体地,涉及在解决存储器访问故障的同时重播存储器事务(transact1n )。

【背景技术】
[0002]典型的计算机系统包括中央处理单元(CPU)和并行处理单元(PPU)。当软件应用程序在计算机系统上执行时,CPU和PPU执行存储器操作以对物理存储器位置中的数据进行存储及检索。一些先进的计算机系统实施为CPU和PPU所共用的统一虚拟存储器架构(UVM)0除此之外,该架构还使得CPU和PPU能够使用共用(例如,同一)虚拟存储器地址来访问物理存储器位置,而不管该物理存储器位置是在系统存储器还是PPU本地的存储器(pro存储器)内。
[0003]计算机系统典型地包括存储器管理功能以使虚拟存储器和分页(paging)操作便利。在正常操作过程中,指令可请求对与页出(page out)的数据页相关联的虚拟地址进行访问,从而导致访问故障。对访问故障做出响应,常规的处理单元可完成在出故障的指令之前的指令,并将出故障的指令与在出故障的指令之后开始执行的所有指令一起取消。此时,访问故障处理程序(fau11 handler)对所请求的数据页进行页入(page-1n),并从出故障的指令开始重新启动执行。在一些情况中,相对于典型的指令执行时间,访问故障处理程序会要求相当多的时间来完成。特别是,如果计算机系统实施统一虚拟存储器架构,则访问故障处理程序会执行冗长的出故障的程序(faulting procedure),该程序在系统和PF1U本地的存储器之间迁移(migrate)存储器页。
[0004]在高度并行多线程先进PPU中,成百上千的存储器事务且因而许多地址转译随时都会很突出。因此,很多存储器访问故障随时都会激活。如果PPU是要实施常规的指令取消故障处理技术,则PPU将要频繁地取消所有执行单元上的几千个指令。此外,PPU将要等待冗长的访问故障处理程序,以为每个执行线程内的每个出故障的指令加载被页出的数据。这样的时延(latency)将会极大地并且通常不可接受地使整体系统性能降低。
[0005]如前所述,本领域所需要的是一种更加有效的方法,以处理涉及多线程处理单元的访问故障。


【发明内容】

[0006]本发明的一个实施例是为一种由计算机实施的、用于处理与多线程处理单元相关联的虚拟存储器事务的方法而设。该方法包括:从第一单元接收第一虚拟存储器事务;试图执行第一虚拟存储器事务;检测与第一虚拟存储器事务有关的第一页故障;将第一虚拟存储器事务存储在重播缓存器中;引发停滞条件,所述停滞条件禁止第一单元产生随后的虚拟存储器事务,直到第一页故障已经解决为止;以及一旦第一页故障已经解决,就重新执行第一虚拟存储器事务以及存储在重播缓存器中的至少一个其他虚拟存储器事务。
[0007]所公开的方法的一个优点在于,对页故障未做出贡献的多线程处理单元中所包含的单元在页故障存在时仍可继续发出虚拟存储器事务。此外,由于受影响的单元继续重播出故障的虚拟存储器事务以及出故障的飞行中虚拟存储器事务,所以在解决页故障的同时不取消这些虚拟存储器事务。因此,与常规的多线程处理单元相比,多线程处理单元的整体性能被改善,其中常规的多线程处理单元一经产生页故障,就取消由多处理单元内的所有单元所发出的虚拟存储器事务,直到页故障解决为止。

【专利附图】

【附图说明】
[0008]因此,可以详细地理解本发明的上述特征,并且可以参考示范性实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
[0009]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
[0010]图2是根据本发明的一个实施例的、示出统一虚拟存储器系统(UVM)的框图;
[0011]图3是根据本发明的一个实施例的、示出配置有重播单元的统一虚拟存储器系统(UVM)的框图;
[0012]图4是根据本发明的一个实施例的、示出图3的重播单元的概念图;以及
[0013]图5是根据本发明的一个实施例的、用于管理由流式多处理器(SM)所发出的存储器事务的方法步骤的流程图。

【具体实施方式】
[0014]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
[0015]系统概述
[0016]图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU) 102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106 (例如超传输(HyperTransport)链路)连接到I/O (输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108 (例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113 (例如外围部件互连(PCI )Express、加速图形端口或超传输链路)连接到存储器桥105 ;在一个实施例中,并行处理子系统112是将像素传送到显示设备110的图形子系统,显示设备110可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等。系统盘114也可连接到I/O桥107,并且可配置为存储由CPU102和并行处理子系统112所使用的应用程序和数据以及内容。系统盘114为应用程序和数据提供非易失性存储空间,并且可包含固定式或可移除式硬盘驱动器、闪存驱动器和CD-ROM (压缩光盘只读存储器)、DVD-ROM (数字通用光盘-ROM)、蓝光、HD-DVD (高分辨率DVD)或者其他磁性、光学或固态存储设备。
[0017]交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字通用光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PC1-EXpreSS、AGP (加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
[0018]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成一个或多个平行处理单元(PPU)202。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。众所周知,许多图形处理单元(GPU)设计为执行并行操作和计算,因而被视为一类并行处理单元(PPU)。
[0019]在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PI3U从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等。
[0020]PPU202有利地实现高度并行处理架构。PPU202包括大量通用处理集群(GPC)。每个GPC均能够并发执行大量的(例如,几百或几千)线程,其中每个线程均为程序的实例(instance )。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。
[0021]GPU包括大量流式多处理器(SM),其中每个SM均配置为处理一个或多个线程组。传送到特定GPC208的一系列指令构成线程,并且跨SM内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM内的不同处理引擎。另外,多个相关线程组可以在SM内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。
[0022]在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
[0023]工作时,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一个实施例中,通信路径113是PCIExpress链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。PPU202有利地实现高度并行处理架构。PPU202可配备有任何容量(amount)的本地并行处理存储器(PPU存储器)。
[0024]在一些实施例中,系统存储器104包括统一虚拟存储器(UVM)驱动器101。UVM驱动器101包括用于执行与为CPU102和PPU202所共用的统一虚拟存储器(UVM)有关的各种任务的指令。除此之外,该架构还使得CPU102和PPU202能够用共用的(common)虚拟存储器地址来访问物理存储器位置,而不管该物理存储器位置是在系统存储器104还是PPU202本地的存储器(PI3U存储器)内。
[0025]应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或更多个CPU102以及两个或更多个并行处理系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
[0026]统一虚拟存储器系统架构
[0027]图2是根据本发明的一个实施例的、示出统一虚拟存储器(UVM)系统200的框图。如图所示,统一虚拟存储器系统200包括而不限于CPU102、系统存储器104以及与并行处理单元存储器(PPU存储器)204相连的并行处理单元(PTO)202。CPU102和系统存储器104彼此相连且经由存储器桥105而与PPU202相连。
[0028]CPU102经由虚拟存储器地址来执行可请求存储在系统存储器104或PPU存储器204中的数据的线程。根据对存储器系统的内部工作方式的了解,虚拟存储器地址屏蔽(shield)正在CPU102中执行的线程。因而,线程可仅知晓虚拟存储器地址,并可通过经由虚拟存储器地址而请求数据来对数据进行访问。
[0029]CPU102包括CPU MMU209,其处理来自CPU102的用于将虚拟存储器地址转译成物理存储器地址的请求。对存储在诸如系统存储器104和PPU存储器204这类物理存储器单元中的数据进行访问,需要物理存储器地址。CPU102包括CPU故障处理程序211,其响应于产生页故障的CPUMMU209而执行步骤,以使所请求的数据对于CPU102是可用的。CPU故障处理程序211通常为驻存(reside)在系统存储器104中且在CPU102上执行的软件,该软件通过对CPU102的中断而被唤醒。
[0030]系统存储器104存储包含各种存储器页(未示出),这些存储器页供在CPU102或PPU202上执行的线程所使用。如图所示,系统存储器104存储CPU页表206,其包含虚拟存储器地址和物理存储器地址之间的映射。系统存储器104还存储页状态目录210,其充当用于UVM系统200的“主页表”,如下面更为详细讨论的。系统存储器104存储故障缓存器216,其包含由PPU202写入以便通知CPU102P由PU202产生的页故障的条目。在一些实施例中,系统存储器104包括统一虚拟存储器(UVM)驱动器101,其包含这样的指令,这些指令在被执行时令CPU102此外还执行用于修复页故障的命令。在替代性实施例中,页状态目录210和一个或多个命令队列214的任何组合都可存储在PI3U存储器204中。此外,PI3U页表208可存储在系统存储器104中。
[0031]以与CPU102类似的方式,PPU202执行可经由虚拟存储器地址来请求存储在系统存储器104或PPU存储器204中的数据的指令。PPU202包括PPU MMU213,其处理来自PPU202的用于将虚拟存储器地址转译成物理存储器地址的请求。PPU202还包括复制引擎212,其执行存储在命令队列214中的用于复制存储器页、修改PTO页表208中的数据的命令以及其他命令。PPU故障处理程序215响应于PPU202上的页故障而执行步骤。PI3U故障处理程序215可以是在处理器或PPU202中的专用微控制器上运行的软件。替代地,PTO故障处理程序215可以是彼此通信的在CPU102上运行的软件和在PPU202中的专用微控制器上运行的软件的组合。在一些实施例中,CPU故障处理程序211和PPU故障处理程序215可以是通过CPU102或PPU202任一者上的故障而被调用(invoke)。命令队列214可在PPU存储器204或系统存储器104中,但优选位于系统存储器104中。
[0032]在一些实施例中,CPU故障处理程序211和UVM驱动器101可以是统一软件程序。在这类情况中,所述统一软件程序可以是驻存在系统存储器104中且在CPU102上执行的软件。PTO故障处理程序215可以是在处理器或PPU202中的专用微控制器上运行的单独的软件程序,或者PPU故障处理程序215可以是在CPU102上运行的单独的软件程序。
[0033]在其他实施例中,PI3U故障处理程序215和UVM驱动器101可以是统一软件程序。在这类情况中,所述统一软件程序可以是驻存在系统存储器104中且在CPU102上执行的软件。CPU故障处理程序211可以是驻存在系统存储器104中且在CPU102上执行的软件。
[0034]在其他实施例中,CPU故障处理程序211、PPU故障处理程序215和UVM驱动器101可以是统一软件程序。在这类情况中,所述统一软件程序可以是驻存于系统存储器104中且在CPU102上执行的软件。
[0035]在一些实施例中,如上所述,CPU故障处理程序211、PPU故障处理程序215和UVM驱动器101可全部驻存在系统存储器104中。如图2所示,UVM驱动器101驻存在系统存储器104中,而CPU故障处理程序211和PPU故障处理程序215驻存在CPU102中。
[0036]CPU故障处理程序211和PF1U故障处理程序215可对源自(emanate from)CPU102或PPU202的硬件中断例如由于页故障而导致的中断做出响应。如下面进一步描述的,UVM驱动器101包含用于执行与UVM系统200的管理有关的各种任务的指令,包括而不限于修复页故障以及访问CPU页表206、页状态目录210和/或故障缓存器216。
[0037]在一些实施例中,CPU页表206和PPU页表208具有不同格式,且内含不同信息;例如,PPU页表208可内含而CPU页表206不含下列信息:原子禁用位(atomic disable bit);压缩标签(compress1n tag);和存储器揽和类型(memory swizzling type)。
[0038]以与系统存储器104类似的方式,PTO存储器204存储各种页(未示出)。如图所示,PPU存储器204还包括PPU页表208,其包含虚拟存储器地址和物理存储器地址之间的映射。替代地,PPU页表208可存储在系统存储器104中。
[0039]转译虚拟存储器地址
[0040]当在CPU102中执行的线程经由虚拟存储器地址来请求数据时,CPU102从CPU存储器管理单元(CPU MMU) 209请求将虚拟存储器地址转译成物理存储器地址。作为响应,CPUMMU209试图将虚拟存储器地址转译成物理存储器地址,所述物理存储器地址指定存储器单元中存储CPU102所请求的数据的位置,例如系统存储器104。
[0041]为了将虚拟存储器地址转译成物理存储器地址,CPU MMU209执行查找操作,以确定CPU页表206是否包含于虚拟存储器地址相关联的映射。除虚拟存储器地址外,访问数据的请求还可指明虚拟存储器地址空间。统一虚拟存储器系统200可实现多个虚拟存储器地址空间,每个空间均被指派一个或多个线程。虚拟存储器地址在任何给定的虚拟存储器地址空间中都是唯一的。此外,给定的虚拟存储器地址内的虚拟存储器地址跨CPU102和PPU202连续,从而允许同一虚拟存储器地址跨CPU102和PPU202指向同一数据。在一些实施例中,两个虚拟存储器地址可以指向同一数据,但可以不映射到同一物理存储器地址(例如,CPU102和PPU202每个均可具有数据的本地只读副本)。
[0042]对于任何给定的虚拟存储器地址,CPU页表206可以包含或可以不包含虚拟存储器地址和物理存储器地址之间的映射。如果CPU页表206包含映射,则CPU MMU209读取该映射,以确定与虚拟存储器地址相关联的物理存储器地址并提供物理存储器地址给CPU102。然而,如果CPU页表206不包含与虚拟存储器地址相关联的映射,则CPU MMU209不能将虚拟存储器地址转译成物理存储器地址,且CPU MMU209产生页故障。为了修复页故障并使所请求的数据对于CPU102是可用的,执行“页故障序列(sequence)”。更具体地,CPU102读取PSD210以找出页的当前映射状态且然后确定适当的页故障序列。页故障序列通常映射与所请求的虚拟存储器地址相关联的存储器页或者改变许可的访问类型(例如,读取访问、写入访问、原子访问)。下面更加详细地讨论在UVM系统200中实现的不同类型的页故障序列。
[0043]在UVM系统200内,与给定的虚拟存储器地址相关联的数据可存储在系统存储器104,PPU存储器204或者系统存储器104和PPU存储器204两者中作为同一数据的只读副本。此外,对于任何这类数据,CPU页表206和PPU页表208中任一者或两者都可包含与该数据相关联的映射。请注意,存在一些数据,针对其的映射存在于一个页表中但不存在于另一个中。然而,PSD210包含存储在PI3U页表208中的所有映射以及存储在CPU页表206中的PPU相关映射。PSD210因而用作用于统一虚拟存储器系统200的“主”页表。因此,当CPU MMU209在与特定的虚拟存储器地址相关联的CPU页表206中没有找到映射时,CPU102读取PSD210以确定PSD210是否包含于该虚拟存储器地址相关联的映射。除与虚拟存储器地址相关联的映射外,PSD210的各种实施例还可包含与虚拟存储器地址相关联的不同类型的信息。
[0044]当CPU MMU209产生页故障时,CPU故障处理程序211执行针对适当的页故障序列的一系列操作以修复页故障。而且,在页故障序列过程中,CPU102读取PSD210并执行附加操作以便改变CPU页表206和PPU页表208内的映射或许可(permiss1n)。这类操作可包含读取和/或修改CPU页表206,读取和/或修改页状态目录210和/或在存储器单元(例如,系统存储器104和PPU存储器204)之间迁移被称为“存储器页”的数据块。
[0045]为了确定哪些操作将在页故障序列中执行,CPU102识别与虚拟存储器地址相关联的存储器页。CPU102然后从与和引发页故障的存储器访问请求相关联的虚拟存储器地址有关的PSD210中读取关于该存储器页的状态信息。这类状态信息此外还可包含关于与虚拟存储器地址相关联的存储器页的所有权状态。对于任何给定的存储器页,若干所有权状态都是可能的。例如,存储器页可以是“CPU所有”、“PPU所有”或“CPU共享”。如果CPU102能经由虚拟地址访问存储器页而不引发页故障,且如果PPU202不能在不引发页故障的情况下经由虚拟地址访问存储器页,则该存储器页被视为是CPU所有。优选地,CPU所有的页驻存在系统存储器104中,但也可驻存在PI3U存储器204中。如果PPU202能经由虚拟地址访问存储器页,且如果CPU102不能在不引发页故障的情况下经由虚拟地址访问该页,则该存储器页被视为是PPU所有。优选地,PTO所有的页驻存在PTO存储器204中,但当不进行从系统存储器104到PPU存储器204的迁移时,也可驻存在系统存储器104中。最后,如果CPU102和PPU202能经由虚拟地址访问存储器页而不引发页故障,则该存储器被视为是CPU共享。CPU共享的页可驻存在系统存储器104或PPU存储器204任一者中。
[0046]CPU页表206可基于各种因素包括存储器页的使用历史而将所有权状态指派给存储器页。使用历史可包含关于CPU102或PPU202最近是否访问过存储器页以及这类访问进行了多少次的信息。例如,如果基于给定的存储器页的使用历史,UVM系统200确定该存储器页可能主要或仅仅被CPU102所使用,则UVM系统200可对该存储器页指派“CPU所有”的所有权状态,并将该页置于系统存储器104中。类似地,如果基于给定的存储器页的使用历史,UVM系统200确定该存储器页可能主要或仅仅被PPU202所使用,则UVM系统200可对该存储器页指派“PPU所有”的所有权状态,并将该页置于PTO存储器204中。最后,如果基于给定的存储器页的使用历史,UVM系统200确定该存储器页可能被CPU102和PPU202两者都使用,并确定将存储器页从系统存储器104到PPU存储器204来回迁移将会耗费太多时间,则UVM系统200可对该存储器页指派“CPU共享”的所有权状态。
[0047]作为示例,故障处理程序211和215可实施下列用于迁移的启发法(heuristics)中的任何或全部:
[0048](a)关于对映射至PPU202且最近未迁移的被取消映射(unmap)的页的CPU102访问,将出故障的页从PPU202取消映射,将该页迁移到CPU102,并将该页映射至CPU102 ;
[0049](b)关于对映射至CPU102且最近未迁移的被取消映射的页的PPU202访问,将出故障的页从CPU102取消映射,将该页迁移到PPU202,并将该页映射至PPU202 ;
[0050](C)关于对映射至PPU202且最近经迁移的被取消映射的页的CPU102访问,将出故障的页迁移到CPU102并将该页映射在CPU102和PPU202两者上;
[0051 ] (d)关于对映射在CPU102上且最近经迁移的被取消映射的页的PPU202访问,将该页映射至CPU102和PPU202两者;
[0052](e)关于对映射至CPU102和PPU202两者但对于PPU202所进行的原子操作未启用的页的PPU202原子访问,将该页从CPU102取消映射,并映射至PPU202且启用原子操作;
[0053](f)关于对映射在CPU102和PPU202上作为写入时复制(copy-on-write) (COff)的页的PPU202写入访问,将该页复制到PPU202,从而制作该页的独立副本,将新的页作为读写(read-write)映射在PPU上,并保留当前页映射在CPU102上;
[0054](g)关于对映射在CPU102和PPU202上作为按需填零(zero-fill-on-demand)(ZFOD)的页的PPU202读取访问,分配PPU202上的物理存储器页并用零填充,且将该页映射在PI3U上,但将其改变为在CPU102上被取消映射;
[0055](h)关于由第一 PPU202 (I)对映射在第二 PPU202 (2)上且最近未迁移的被取消映射的页的访问,将出故障的页从第二 PPU202(2)取消映射,将该页迁移到第一 PPU202(1),并将该页映射至第一 PPU202(1);以及
[0056](i)关于由第一 PPU202(1)对映射在第二 PPU202 (2)上且最近经迁移的被取消映射的页的访问,将出故障的页映射至第一 PPU202 (I),并保持该页在第二 PPU202 (2)上的映射。
[0057]总之,许多启发法规则都是可能的,且本发明的范围不限于这些示例。
[0058]另外,任何迁移启发法都可“向上取整(round up)”以包含较多的页或较大的页尺寸,例如:
[0059](j )关于对映射至PPU202且最近未迁移的被取消映射的页的CPU102访问,将出故障的页外加在虚拟地址空间中与该出故障的页相邻的额外的页从PPU202取消映射,将这些页迁移到CPU102,并将这些页映射至CPU102 (在更详细的示例中:对于4kB故障页,迁移包含4kB故障页的对准的(aligned) 64kB区域);
[0060](k)关于对映射至CPU102且最近未迁移的被取消映射的页的PPU202访问,将出故障的页外加在虚拟地址空间中与该出故障的页相邻的额外的页从CPU102取消映射,将这些页迁移到PPU202,并将这些页映射至PPU202 (在更详细的示例中:对于4kB故障页,迁移包含4kB故障页的对准的64kB区域);
[0061 ] (I)关于对映射至PPU202且最近未迁移的被取消映射的页的CPU102访问,将出故障的页外加在虚拟地址空间中与该出故障的页相邻的额外的页从PPU202取消映射,将这些页迁移到CPU102,将这些页映射至CPU102,并将所有迁移的页作为CPU102上的一个或多个较大的页对待(在更详细的示例中:对于4kB故障页,迁移包含4kB故障页的对准的64kB区域,并将该对准的64kB区域作为64kB页对待);
[0062](m)关于对映射至CPU102且最近未迁移的被取消映射的页的PPU202访问,将出故障的页外加在虚拟地址空间中与该出故障的页相邻的额外的页从CPU102取消映射,将这些页迁移到PPU202,将这些页映射至PPU202,并将所有迁移的页作为PPU202上的一个或多个较大的页对待(在更详细的示例中:对于4kB故障页,迁移包含4kB故障页的对准的64kB区域,并将该对准的64kB区域作为64kB页对待);
[0063](η)关于由第一 PPU202⑴对映射至第二 PPU202⑵上且最近未迁移的被取消映射的页的访问,将出故障的页外加在虚拟地址空间中与该出故障的页相邻的额外的页从第二 PPU202(2)取消映射,将这些页迁移到第一 PPU202(1),并将这些页映射至第一PPU202(1);以及
[0064](ο)关于由第一 PPU202 (I)对映射在第二 PPU202 (2)上且最近经迁移的被取消映射的页的访问,将出故障的页外加在虚拟地址空间中与该出故障的页相邻的额外的页映射至第一 PPU202 (I),并保持这些页在第二 PPU202 (2)上的映射。
[0065]总之,许多启发法规则都是可能的,且本发明的范围不限于这些示例。
[0066]在一些实施例中,PSD条目可包含过渡(transit1nal)状态信息,以确保由CPU102和PPU202内的单元所做出的各种请求之间的适当的同步化。例如,PSD210条目可包含这样的过渡状态信息,即特定页处于正在从CPU所有过渡到PI3U所有的过程中。CPU102和PPU202中的各种单元,例如CPU故障处理程序211和PPU故障处理程序215,一经确定页处于这类过渡状态,就可放弃(forego)部分页故障序列,以避免由之前对同一虚拟存储器地址的虚拟存储器访问所触发的页故障序列中的步骤。作为具体示例,如果页故障导致页从系统存储器104迁移到PTO存储器204,则检测到将会引发同一迁移的不同的页故障且不引发另一页迁移。此外,CPU102和PPU202中的各种单元可实施原子操作,用于对PSD210上的操作进行适当的排序。例如,关于对PSD210条目的修改,CPU故障处理程序211或PPU故障处理程序215可发出原子比较和交换(swap)操作,以修改PSD210中的特定条目的页状态。因此,该修改可以在不受来自其他单元的操作干扰的情况下完成。
[0067]系统存储器104中可存储多个PSD210——每个虚拟地址空间一个。CPU102或PPU202任一者产生的存储器访问请求因而可包含虚拟存储器地址并且还识别与该虚拟存储器地址相关联的虚拟存储器地址空间。
[0068]正如CPU102可执行包含虚拟存储器地址的存储器访问请求(即,包含经由虚拟存储器地址访问数据的请求的指令)一样,PPU202也可执行类似类型的存储器访问请求。更具体地,PPU202包括上面结合图1描述的配置为执行多个线程和线程组的多个执行单元,例如GPC和SM。在操作中,那些线程可通过制定虚拟存储器地址而从存储器请求数据(例如,系统存储器104或PPU存储器204)。正如CPU102和CPU MMU209 一样,PPU202包括PPU存储器管理单元(MMU)213。PPU MMU213接收来自PPU202的关于虚拟存储器地址转译的请求,并试图为虚拟存储器地址从PI3U页表208提供转译。
[0069]与CPU页表206类似地,PI3U页表208包含虚拟存储器地址和物理存储器地址之间的映射。CPU页表206的情况也如此,对于任何给定的虚拟地址,PPU页表208可以不包含将虚拟存储器地址映射至物理存储器地址的页表条目。与CPU MMU209—样,当PPU MMU213从PPU页表208请求对虚拟存储器地址的转译并且PI3U页表208中不存在任何映射或该访问类型是PI3U页表208所不允许的时,PPU MMU213产生页故障。随后,PI3U故障处理程序215触发页故障序列。而且,下面将更详细描述在UVM系统200中实施的不同类型的页故障序列。
[0070]在页故障序列过程中,CPU102或PPU202可将命令写入命令队列214,用于由复制引擎212执行。这种方法使CPU102或PPU202在复制引擎212读取并执行存储在命令队列214中的命令的同时得以空出以执行其他任务,并允许关于故障序列的所有命令同时被排队,从而避免对故障序列的进度的监视。由复制引擎212执行的命令此外还可包括删除、生成或修改PPU页表208中的页表条目,从系统存储器104读取或写入数据,以及将数据读取或写入到PPU存储器204。
[0071]故障缓存器216存储指明与由PPU202产生的页故障有关的信息的故障缓存器条目。故障缓存器条目可包括例如试图进行的访问的类型(例如,读取、写入或原子的)、引发了页故障的试图进行的访问所针对的虚拟存储器地址、虚拟地址空间以及对引发了页故障的单元或线程的指示。在操作中,当PPU202引发页故障时,PTO202可将故障缓存器条目写入故障缓存器216中,以通知PPU故障处理程序215有关出故障的页和引发该故障的访问的类型。PPU故障处理程序215然后执行动作以修复页故障。因为PPU202正在执行多个线程,所以故障缓存器216可存储多个故障,其中每个线程由于PPU202的存储器访问的管线性质均可引发一个或多个故障。
[0072]页故障序列
[0073]如上所述,响应于收到关于虚拟存储器地址转译的请求,如果CPU页表206不包含与所请求的虚拟存储器地址相关联的映射或者不许可正被请求的访问的类型,则CPUMMU209产生页故障。类似地,响应于收到关于虚拟存储器地址转译的请求,如果PTO页表208不包含与所请求的虚拟存储器地址相关联的映射或者不许可正被请求的访问的类型,则PPU MMU213产生页故障。当CPU MMU209或PPU MMU213产生页故障时,请求了虚拟存储器地址处的数据的线程停滞(stall),且“本地故障处理程序”一用于CPU102的CPU故障处理程序211或用于PPU202的PPU故障处理程序215——试图通过执行“页故障序列”来修复页故障。如上面所指出的,页故障序列包含使得出故障的单元(即,引发了该页面故障的单元——CPU102或PPU202任一者)能够访问与虚拟存储器地址相关联的数据的一系列操作。在页故障序列结束之后,经由虚拟存储器地址请求了数据的线程继续执行。在一些实施例中,通过允许故障恢复逻辑跟踪与出故障的指令相反的出故障的存储器访问,故障恢复得以简化。
[0074]如果存在任何与页故障相关联的存储器页不得不经历的所有权状态的变化或访问许可的变化,则在页故障序列过程中所执行的操作取决于这些变化。从当前的所有权状态到新的所有权状态的过渡或者访问许可的变化可以是页故障序列的一部分。在一些实例中,将与页故障相关联的存储器页从系统存储器104迁移到PPU存储器204也是页故障序列的一部分。在其他实例中,将与页故障相关联的存储器页从PPU存储器204迁移到系统存储器104也是页故障序列的一部分。本文中较为充分描述的各种启发法可用于配置UVM系统200以改变存储器页所有权状态或者以按照各种操作条件和图案的集合迁移存储器页。下面将更详细描述的是关于下列四种存储器页所有权状态过渡的页故障序列=CPU所有到CPU共享、CPU所有到PPU所有、PPU所有到CPU所有以及PI3U所有到CPU共享。
[0075]由PPU202所产生的故障可开始从CPU所有到CPU共享的过渡。在这种过渡之前,正在PPU202中执行的线程试图访问在PI3U页表208中没被映射的虚拟存储器地址处的数据。此访问试图引发基于PPU的页故障,该页故障然后致使故障缓存器条目被写入到故障缓存器216。作为响应,PI3U故障处理程序215读取与该虚拟存储器地址相对应的PSD210条目,并识别与该虚拟存储器地址相关联的存储器页。在对PSD210进行读取之后,PPU故障处理程序215确定与该虚拟存储器地址相关联的存储器页的当前所有权状态为CPU所有。基于当前所有权状态以及其他因素,例如关于存储器页的使用特性或存储器访问的类型,PPU故障处理程序215确定该页的新的所有权状态应当为CPU共享。
[0076]为了改变所有权状态,PI3U故障处理程序215在PPU页表208中写入新条目,与虚拟存储器地址相对应且将虚拟存储器地址与经由PSD210条目所识别的存储器页关联起来。PI3U故障处理程序215还修改关于该存储器页的PSD210条目以指明所有权状态为CPU共享。在一些实施例中,使PPU202中的转译后备(look-aside)缓存器(TLB)无效,以将其中至无效页的转译被高速缓存(cache)的情况加以考虑。此时,页故障序列结束。存储器页的所有权状态为CPU共享,意味着存储器页对于CPU102和PPU202都是可访问的。CPU页表206和PPU页表208两者都包含将虚拟存储器地址关联到存储器页的条目。
[0077]由PPU202所产生的故障可开始从CPU所有到PPU所有的过渡。在这种过渡之前,正在PPU202中执行的操作试图访问在PI3U页表208中没被映射的虚拟存储器地址处的数据。此存储器访问试图引发基于PPU的页故障,该页故障然后致使故障缓存器条目被写入到故障缓存器216。作为响应,PTO故障处理程序215读取与该虚拟存储器地址相对应的PSD210条目,并识别与该虚拟存储器地址相关联的存储器页。在对PSD210进行读取之后,PPU故障处理程序215确定与该虚拟存储器地址相关联的存储器页的当前所有权状态为(PU所有。基于当前所有权状态以及其他因素,例如关于该页的使用特性或存储器访问的类型,PPU故障处理程序215确定该页的新的所有权状态应当为PI3U所有。
[0078]PPU202将指明PPU202产生了页故障且指明与该页故障相关联的虚拟存储器地址的故障缓存器条目写入故障缓存器216中。正在CPU102上执行的PTO故障处理程序215读取该故障缓存器条目,且作为响应,CPU102将CPU页表206中与引发该页故障的虚拟存储器地址相关联的映射移除。CPU102可在移除映射之前和/或之后清理(flush)高速缓存。CPU102还将指示PPU202将页从系统存储器104复制到PPU存储器204中的命令写入到命令队列214中。PPU202中的复制引擎212读取命令队列214中的命令并将页从系统存储器104复制到PPU存储器204。PPU202将页表条目写入PI3U页表208中,与该虚拟存储器地址相对应且将该虚拟存储器地址与PPU存储器204中的新复制的存储器页关联起来。对PPU页表208的写入可经由PPU202来完成。替代地,CPU102可更新PI3U页表208。PPU故障处理程序215还修改关于该存储器页的PSD210,以指明所有权状态为PTO所有。在一些实施例中,可使PPU202或CPU102中的TLB中的条目无效,以将其中转译被高速缓存的情况纳入考虑。此时,页故障序列结束。存储器页的所有权状态为PPU所有,意味着该存储器页仅对于PPU202是可访问的。仅PI3U页表208包含将虚拟存储器地址与该存储器页关联起来的条目。
[0079]由CPU102所产生的故障可开始从PI3U所有到CPU所有的过渡。在这种过渡之前,正在CPU102中执行的操作试图访问在CPU页表206中没被映射的虚拟存储器地址处的数据,这引发基于CPU的页故障。CPU故障处理程序211读取与该虚拟存储器地址相对应的PSD210条目,并识别与该虚拟存储器地址相关联的存储器页。在对PSD210进行读取之后,CPU故障处理程序211确定与该虚拟存储器地址相关联的存储器页的当前所有权状态为PPU所有。基于当前所有权状态以及其他因素,例如关于该页的使用特性或访问的类型,CPU故障处理程序211确定该页的新的所有权状态为CPU所有。
[0080]CPU故障处理程序211将与存储器页相关联的所有权状态改变到CPU所有。CPU故障处理程序211将命令写入命令队列214中,以令复制引擎212从PPU页表208移除将虚拟存储器地址与该存储器页关联起来的条目。可使各种TLB条目无效。CPU故障处理程序211还将存储器页从PTO存储器204复制到系统存储器104中,这可经由命令队列214和复制引擎212来完成。CPU故障处理程序211在CPU页表206中写入将虚拟存储器地址与被复制到系统存储器104中的存储器页关联起来的页表条目。CPU故障处理程序211还更新PSD210以将虚拟存储器地址与新复制的存储器页关联起来。此时,页故障序列结束。存储器页的所有权状态为CPU所有,意味着该存储器页仅对于CPU102是可访问的。仅CPU页表206包含将虚拟存储器地址与该存储器页关联起来的条目。
[0081]由CPU102所产生的故障可开始从PI3U所有到CPU共享的过渡。在这种过渡之前,正在CPU102中执行的操作试图访问在CPU页表206中没被映射的虚拟存储器地址处的数据,这引发基于CPU的页故障。CPU故障处理程序211读取与该虚拟存储器地址相对应的PSD210条目,并识别与该虚拟存储器地址相关联的存储器页。在对PSD210进行读取之后,CPU故障处理程序211确定与该虚拟存储器地址相关联的存储器页的当前所有权状态为PPU所有。基于当前所有权状态以及其他因素,例如关于该页的使用特性,CPU故障处理程序211确定该页的新的所有权状态为CPU共享。
[0082]CPU故障处理程序211将与存储器页相关联的所有权状态改变到CPU共享。CPU故障处理程序211将命令写入命令队列214中,以令复制引擎212从PPU页表208移除将虚拟存储器地址与该存储器页关联起来的条目。可使各种TLB条目无效。CPU故障处理程序211还将存储器页从PTO存储器204复制到系统存储器104中。此复制操作可经由命令队列214和复制引擎212来完成。CPU故障处理程序211然后将命令写入命令队列214中,以令复制引擎212改变PPU页表208中的条目,使得虚拟存储器地址与系统存储器104中的存储器页关联起来。CPU故障处理程序211将页表条目写入CPU页表206,以将虚拟存储器地址与系统存储器104中的存储器页关联起来。CPU故障处理程序211还更新PSD210以将虚拟存储器地址与系统存储器104中的存储器页关联起来。此时,页故障序列结束。该页的所有权状态为CPU共享,且该存储器页已被复制到系统存储器104中。由于CPU页表206包含将虚拟存储器地址与系统存储器104中的存储器页关联起来的条目,所以该页对于CPU102是可访问的。由于PI3U页表208包含将虚拟存储器地址与系统存储器104中的存储器页关联起来的条目,所以该页对于PPU202也是可访问的。
[0083]页故障序列的详细示例
[0084]在此情境下,现在提供对倘若从CPPU所有到CPU共享过渡则由PI3U故障处理程序215执行的页故障序列的详细描述以展示原子操作和过渡状态是如何用来更有效地管理序列的。页故障序列被试图访问在PI3U页表208中不存在相关映射的虚拟地址的PPU202线程所触发。当线程试图经由虚拟存储器地址访问数据时,PPU202 (具体地,用户级线程)从PPU页表208请求转译。因为PI3U页表208不包含于所请求的虚拟存储器地址相关联的映射,所以作为响应,发生PPU页故障。
[0085]在页故障发生之后,上述线程被困、停滞,并且PTO故障处理程序215执行页故障序列。PI3U故障处理程序215对PSD210进行读取,以确定哪个存储器页与虚拟存储器地址相关联,以及确定虚拟存储器地址的状态。PPU故障处理程序215从PSD210确定存储器页的所有权状态是CPU所有。因此,由PPU202所请求的数据经由虚拟存储器地址对于PPU202是可访问的。存储器页的状态信息还指明所请求的数据不能被迁移到PPU存储器204。
[0086]基于从PSD210获得的状态信息,PI3U故障处理程序215确定存储器页的新的状态应当为CPU共享。PPU故障处理程序215将状态改变到“过渡到CPU共享”。此状态指明页当前处于正过渡到CPU共享的过程中。当PTO故障处理程序215在存储器管理单元中的微控制器上运行时,则两个处理器将异步地更新PSD210,对PSD210使用原子比较-交换(“CAS”)操作而将状态改变到“过渡到GPU可见(visible)”(CPU共享)。
[0087]PPU202更新PPU页表208以将虚拟存储器地址与存储器页关联起来。PPU202还使TLB高速缓存条目无效。接着,PTO202对PSD210执行另一原子比较-交换,以将与存储器页相关联的所有权状态改变到CPU共享。最后,页故障序列终止,且经由虚拟存储器地址请求了数据的线程继续执行。
[0088]UVM系统架构变形例
[0089]对统一虚拟存储器系统200的各种修改都是可能的。例如,在一些实施例中,在将故障缓存器条目写入故障缓存器216中,PPU202可触发CPU中断,以令CPU102读取故障缓存器216中的故障缓存器条目并响应于该故障缓存器条目而执行任何适当的操作。在其他实施例中,CPU102可周期性地轮询(poll)故障缓存器216。倘若CPU102在故障缓存器216中找到故障缓存器条目,则CPU102响应于该故障缓存器条目而执行一系列操作。
[0090]在一些实施例中,系统存储器104,而不是PPU存储器204,存储PPU页表208。在其他实施例中,可实施单级或多级高速缓存层级架构(hierarchy),例如单级或多级转译后备缓存器(TLB)层级架构(未示出),以供CPU页表206或PPU页表208高速缓存虚拟地址转译。
[0091]在又一些实施例中,倘若正在PPU202中执行的线程引发PTO故障(“出故障的线程”)则PPU202可采取一个或多个动作。这些动作包含:使整个PPU202停滞,使正在执行出故障的线程的SM停滞,使PPU MMU213停滞,仅使出故障的线程停滞或者使一级或多级TLB停滞。在一些实施例中,在PPU页故障发生之后,并且统一虚拟存储器系统200已执行页故障序列,则出故障的线程继续执行,且出故障线程再次试图引发了该页故障的存储器访问请求。在一些实施例中,TLB处的停滞是以表现为对出故障的SM或出故障的线程的长时延(1ng-1atency)存储器访问这样的方式来进行的,从而无需SM针对故障做出任何特殊操作。
[0092]最后,在其他替代性实施例中,UVM驱动器101可包含令CPU102执行一个或多个操作用于管理UVM系统200并修复页故障的指令,例如访问CPU页表206、PSD210和/或故障缓存器216。在其他实施例中,操作系统内核(未示出)可配置为通过访问CPU页表206、PSD210和/或故障缓存器216来管理UVM系统200并修复页故障。在又一些实施例中,操作系统内核可连同UVM驱动器101 —起操作,以通过访问CPU页表206、PSD210和/或故障缓存器216来管理UVM系统200并修复页故障。
[0093]停滞和重播故障
[0094]如上所述,UVM系统200典型地至少部分地依靠CPU102来修复由PPU202所产生的存储器访问故障(即,页故障)。倘若发生存储器访问故障,则常规的PPU将出故障的存储器事务与PPU内在出故障的存储器事务之后才开始执行的所有存储器事务一起取消。这类常规PPU中的SM不再继续发出存储器事务,直到存储器访问故障被解决为止。相反,为了减小与出故障的存储器事务相关联的整体性能降低,PPU202配置为仅使发出该出故障的存储器事务的SM停滞。在该SM被停滞的同时,PPU202执行SM在出故障的存储器事务之前发出了的“飞行中的”存储器事务。此外,SM继续重播出故障的存储器事务以及没有成功完成的任何飞行中的存储器事务,直到所有这些存储器事务成功为止。有利地,没有引发任何未解决的存储器访问故障的SM继续发出存储器事务,且在UVM系统200修复突出的存储器访问故障的同时,PPU202继续执行这些存储器事务。
[0095]通常,本文所描述的技术仅是例示性而非限制性的,并且在不脱离本发明的较宽的精神和范围的情况下,可经修改以反映各种实施方式。例如,SM是可发出存储器事务的众多单元其中之一。当前发明的实施例可包括任何数目和类型的执行单元来代替SM或与之结合。此外,在解决存储器访问故障的同时仅选择性停止PPU内的特定单元并修复存储器事务,可以任何技术上灵活的方式来实施。例如,PPU可重播由某些“可重播的”单元发出的出故障的存储器事务,并丢弃由其他单元发出的出故障的存储器事务。
[0096]本文所描述的选择性停滞和重播功能可在PPU MMU213、不同的存储器管理单元、专用硬件单元或者在可编程硬件单元上执行的软件中加以实施——以任何组合。此外,PPU202可包含在任何类型的计算机系统中。例如,Pro202可包含在没有实施统一虚拟存储器架构的计算机系统中。
[0097]带有重播单元的PPU
[0098]图3是根据本发明的一个实施例的、示出配置有重播单元350的统一虚拟存储器系统(UVM)200的框图。PPU202包括任一数目N的流式多处理器(SM)310和N个重播单元350——每SM310 一个重播单元350。例如,如果PPU202是要包括32个SM310 (0:31),则PPU202将包括32个重播单元350 (0:31)。每个重播单元350均使得PPU202能够在重播所选的存储器事务的同时使对应的SM310停止,而无需使其他SM310延迟。
[0099]图4是根据本发明的一个实施例的、示出图3的重播单元350(0)的概念图。如图所示,重播单元350 (O)包括而不限于事务多路复用器(事务Mux)420、微型转译后备缓存器(uTLB) 430、飞行中缓存器440、故障检测器450和重播缓存器460。
[0100]通常,正在SM310 (O)内执行的线程每个均从SM310 (O)产生虚拟存储器事务流。在SM310(0)从SM310(0)发出特定的虚拟存储器事务之后,来自SM310(0)的虚拟存储器事务在到达UTLB430和飞行中缓存器440之前通过事务Mux420。
[0101]UTLB430执行一个或多个查找操作以将虚拟存储器事务的虚拟存储器地址从SM310(0)映射到PI3U存储器204中的物理存储器地址。请注意,UTLB430配置为对映射进行高速缓存,其进一步由TLB高速缓存的层级架构表示。页表或全局TLB数据结构(未示出)配置为存储与包括一个或多个PPU202和一个或多个CPU102的处理器复合体(complex)相关联的所有虚拟地址空间上的所有映射。
[0102]本领域技术人员将认识到,倘若发生高速缓存失误,则由UTLB430执行的查找操作会耗时很长。因此,飞行中缓存器440按照先进先出次序对来自SM310 (O)的虚拟存储器事务进行排队,从而保持来自SM310(0)的虚拟存储器事务相对于UTLB430的查找操作的情境。
[0103]如果uTLB成功地处理来自SM310 (O)的虚拟存储器事务,则故障检测器450将对应的物理存储器事务路由(route)到PPU存储器204。在至PPU存储器204的物理存储器事务中,用由UTLB430查找操作而得到的物理地址更换来自SM310(0)的虚拟存储器事务所包含的虚拟地址。
[0104]相反,如果UTLB430不能够映射由来自SM310(0)的虚拟存储器事务所指定的虚拟地址,或者如果虚拟地址需要改变存储器的目标页的部署(disposit1n),则UTLB430产生存储器访问故障。故障检测器450处理存储器访问故障一发送故障信号到CPU102并暂时禁止SM310(0)发出新的虚拟存储器事务。有利地,故障检测器450没有令PPU202中所包括的任何其他SM310停止发出新的虚拟存储器事务。
[0105]作为处理虚拟存储器故障的一部分,故障检测器450令故障缓存器条目被写入到图2的故障缓存器216。而且故障检测器450执行写入操作,将来自SM310 (O)的出故障的虚拟存储器事务存储在重播缓存器460中。此外,故障检测器450令排队在飞行中缓存器440中的来自SM310 (O)的任何虚拟存储器事务完成执行。如果任何这些虚拟存储器事务也出故障,则故障检测器450执行写入操作,将另外的出故障的虚拟存储器事务存储在重播缓存器460中。非必选但优选地,故障检测器450令与另外的出故障的虚拟存储器事务相对应的故障缓存器条目被写入到故障缓存器216。
[0106]PPU故障处理程序215然后执行经设计以解决存储器访问故障的页故障序列。一经解决一个或多个存储器访问故障,CPU102就发送重播信号到重播单元350(0)。CPU102可在任何时间以任何技术上灵活的方式产生重播信号。优选地,CPU102中所包含的PPU故障处理程序215产生重播信号,通常经由命令队列214产生。以此方式,具有很高开销(overhead cost)的访问故障解决程序可一起执行,从而提高整体性能。经由命令队列214产生重播信号也允许重播操作与解决故障的命令同步化,使故障解决操作和重播操作管线化,从而允许PPU故障处理程序215以“自主导引(fire-and-forget)”的方式操作。在替代性实施例中,CPU102或PPU202可以任何技术上灵活的方式产生重播信号。例如,PTO202可以预定的时间间隔产生重播信号,致使以固定频率周期性重播。
[0107]一经收到重播信号,重播单元350 (O)就使UTLB430无效,且事务Mux420将重播缓存器460中的出故障的虚拟存储器事务路由到UTLB430。对于这些出故障的虚拟存储器事务中的每一个,UTLB430试图将虚拟存储器地址映射至可访问的物理存储器地址。如果UTLB430成功地映射重播缓存器460中所包含的虚拟存储器事务,则故障检测器450将对应的物理存储器事务路由至PPU存储器204。然而,如果UTLB430不能够映射重播缓存器460中所包含的特定的虚拟存储器事务,则故障检测器450执行写入操作,重新请求重播缓存器460中的虚拟存储器事务。请注意,由于CPU102成功地修复每个特定页故障的原因,则对应的虚拟存储器事务成功,物理存储器事务产生,并且虚拟存储器事务从重播缓存器460移除。
[0108]重播单元350 (O)继续重新执行重播缓存器460中所包含的存储器事务,直到重播缓存器460为空为止。在重播单元350 (O)确定重播缓存器460为空之后,重播单元350令SM310(0)继续从SM310(0)发出虚拟存储器事务。在SM310 (O)继续发出虚拟存储器事务之后,事务Mux420 (O)将虚拟存储器事务路由至UTLB430用于处理。
[0109]在替代性实施例中,虚拟存储器事务可被路由至对于PPU202是可访问的任何物理存储器,而不是PPU存储器204。例如,虚拟存储器事务可被路由至系统存储器104中所包含的共享页。
[0110]图5是根据本发明的一个实施例的、用于管理由流式多处理器(SM)发出的存储器事务的方法步骤的流程图。虽然本文结合图1-4对这些方法步骤进行了描述,但本领域技术人员将理解,以任何次序配置为实施这些方法步骤的任何系统都落入本发明的范围内。
[0111]如图所示,方法500在步骤502开始,其中重播单元350(0)接收来自SM310(0)的虚拟存储器事务。作为对收到来自SM310(0)的虚拟存储器事务的响应,重播单元350 (O)中所包含的事务Mux420将虚拟存储器事务路由至UTLB430,并将虚拟存储器事务排队在飞行中缓存器440中。如果在步骤504,UTLB430成功地处理虚拟存储器事务,则方法500前进至步骤506。在步骤506,重播单元350 (O)中所包含的故障检测器450将对应的物理存储器事务路由至PPU存储器204,且方法500返回到步骤502。重播单元350 (O)通过步骤502-506循环,接收并处理来自SM310 (O)的虚拟存储器事务,直到UTLB430不能够成功地处理来自SM310(0)的虚拟存储器事务为止。
[0112]在步骤504,如果UTLB430没有成功地将虚拟存储器事务映射至物理地址,则方法500前进至步骤508。在步骤508,重播单元350 (O)中所包含的故障检测器450发送故障信号到CPU102,使SM310 (O)停滞,并将出故障的虚拟存储器事务添加到重播缓存器460。在步骤510,故障检测器450处理排队在飞行中缓存器440中的任何虚拟存储器事务。这类存储器事务对应由SM310(0)发出的存储器事务,并且在出故障的虚拟存储器事务之前开始执行。如果任何来自SM310(0)的这些虚拟存储器事务也出故障,则故障检测器450执行一个或多个写入操作,将另外的出故障的虚拟存储器事务存储在重播缓存器460中。
[0113]在步骤512,重播单元350(0)等待CPU102经由重播信号而信令(signal) —个或多个故障已经解决。一经收到该重播信号,重播单元350 (O)就使UTLB430无效,并重新执行存储在重播缓存器460中的虚拟存储器事务。如果UTLB430成功地映射重播缓存器460中所包含的虚拟存储器事务,则重播单元350 (O)将对应的物理存储器事务路由至PPU存储器204。然而,如果UTLB430不能够映射重播缓存器460中所包含的特定的虚拟存储器事务,则故障检测器450执行写入操作,将该虚拟存储器事务重新排队在重播缓存器460中。如果在步骤514,重播单元350(0)确定重播缓存器460不为空,则方法500返回到步骤512。重播单元350 (O)通过步骤512-514循环,重新执行重播缓存器460中所包含的虚拟存储器事务,直到重播单元350(0)确定重播缓存器460为空为止。
[0114]在步骤514,如果重播单元350 (O)确定重播缓存器460为空,则方法500前进至步骤516。在步骤516,重播单元350 (O)令SM310(0)继续从SM310(0)发出虚拟存储器事务,且方法500返回到步骤502。重播单元350(0)继续通过步骤502-516循环,接收并处理来自SM310(0)的虚拟存储器事务。
[0115]总之,并行处理单元(PPU)实施故障处理技术,该技术使得某些流式多处理器(SM)在令其他SM暂时停止执行线程的同时能够继续执行线程。在操作中,如果发生可归属于在特定SM上执行的线程的存储器访问故障,则在计算机系统解决故障的同时,与SM相对应的重播单元使特定SM停滞。请注意,重播单元令对应的SM停止产生另外的存储器事务,直到引发故障的存储器事务得以解决为止。此外,重播单元将由对应的SM在故障之前所发出的任何飞行中存储器事务排队在重播缓存器中。故障一经解决,重播单元就令存储在重播缓存器中的存储器事务重新执行。在成功地执行存储在重播单元中的所有存储器事务之后,重播单元启用对应的SM以继续产生另外的存储器事务。
[0116]有利地,在存在存储器访问故障时使受到影响的SM停滞的同时允许未受影响的SM继续执行,减小了与存储器访问故障相关联的执行惩罚(penalty)。请注意,因为未受影响的SM继续执行且出故障的存储器事务被存储和重播,所以指令无需取消。而且,由于计算机系统一起执行针对飞行中的出故障的存储器事务的故障解决程序,所以与单独解决每个故障相比,整体系统性能得到提高。相反,存储器访问故障一经产生,常规的PPU就使PPU中所包括的所有SM都停滞,并取消由SM产生的所有随后的存储器事务。这类PPU中所包括的SM不继续发出存储器事务,直到存储器访问故障得到解决为止。因此,与常规的PPU相比,在实施选择性存储器事务和重播技术的PPU中,与存储器访问故障相关联的性能降低被减小。
[0117]虽然上述内容针对本发明的实施例,但可对本发明的其他以及进一步的实施例进行设计而不脱离其基本范围。例如,可以硬件或软件或硬件和软件的组合来实现本发明的各方面。本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的光盘只读存储器(CD-ROM)盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息;和(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。当承载针对本发明的功能的计算机可读指令时,这样的计算机可读存储介质是本发明的实施例。
[0118]以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和变化而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是例示性而非限制性的意义。
[0119]因此,本发明的范围由随附的权利要求书加以界定。
【权利要求】
1.一种用于处理与多线程处理单元相关联的虚拟存储器事务的计算机实现方法,该方法包括: 从第一单元接收第一虚拟存储器事务; 试图执行所述第一虚拟存储器事务; 检测到与所述第一虚拟存储器事务有关的第一页故障; 将所述第一虚拟存储器事务存储在重播缓存器中; 引发停滞条件,所述停滞条件禁止所述第一单元产生随后的虚拟存储器事务,直到所述第一页故障已经解决为止;以及 一旦第一页故障已经解决,就重新执行所述第一虚拟存储器事务以及存储在所述重播缓存器中的至少一个其他虚拟存储器事务。
2.根据权利要求1所述的方法,还包括:确定所述重播缓存器为空,并启用所述第一单元以产生随后的虚拟存储器事务。
3.根据权利要求1所述的方法,还包括:在所述第一页故障未被解决的同时,从第二单元接收第二虚拟存储器事务,且成功地执行所述第二虚拟存储器事务。
4.根据权利要求1所述的方法,还包括: 在检测到所述第一页故障之前,从所述第一单元接收第二虚拟存储器事务; 检测到与所述第二虚拟存储器事务有关的第二页故障;以及 将所述第二虚拟存储器事务存储在所述重播缓存器中。
5.根据权利要求1所述的方法,还包括:在重新执行所述第一虚拟存储器事务之前使转译后备缓存器无效。
6.根据权利要求1所述的方法,其中,重新执行所述第一虚拟存储器事务包括: 确定在转译后备缓存器中是否存在与所述第一虚拟存储器事务相对应的条目;以及 如果所述条目存在,则完成所述第一虚拟存储器事务,否则 如果所述条目不存在,则将所述第一虚拟存储器事务重新存储在所述重播缓存器中。
7.根据权利要求1所述的方法,其中,解决所述第一页故障包括: 基于全局转译表,而将与所述第一虚拟存储器事务有关的存储器页置于第一存储器子系统内;以及 将用于所述存储器页的虚拟映射添加到转译后备缓存器。
8.根据权利要求7所述的方法,其中,解决所述第一页故障还包括:从所述第一存储器子系统将所述存储器页复制到第二存储器子系统。
9.根据权利要求8所述的方法,其中,所述第一存储器子系统包括与中央处理单元相耦连的存储器,且所述第二存储器子系统包括与所述多线程处理单元相耦连的存储器。
10.一种配置为处理虚拟存储器事务的系统,该系统包括: 存储器;和 多线程处理器,所述多线程处理器与所述存储器相耦连且经配置以: 从第一单元接收第一虚拟存储器事务; 试图执行所述第一虚拟存储器事务; 检测到与所述第一虚拟存储器事务有关的第一页故障; 将所述第一虚拟存储器事务存储在重播缓存器中;引发停滞条件,所述停滞条件禁止所述第一单元产生随后的虚拟存储器事务,直到所述第一页故障已经解决为止;以及 一旦第一页故障已经解决,就重新执行所述第一虚拟存储器事务以及存储在所述重播缓存器中的至少一个 其他虚拟存储器事务。
【文档编号】G06F11/00GK104049951SQ201310752957
【公开日】2014年9月17日 申请日期:2013年12月31日 优先权日:2013年3月15日
【发明者】詹姆士·勒罗伊·德明, 杰尔姆·F·小杜鲁克, 约翰·马谢, 马克·海尔格罗夫, 卢森·邓宁, 乔纳森·斯图尔特·拉姆齐·埃文斯, 桑缪尔·H·邓肯, 卡梅伦·布沙特, 布雷恩·法斯 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1