多线程处理单元中的高效存储器虚拟化的制作方法

文档序号:6516654阅读:187来源:国知局
多线程处理单元中的高效存储器虚拟化的制作方法【专利摘要】本发明公开了多线程处理单元中的高效存储器虚拟化。用于同时执行每个具有独立虚拟地址空间的多个任务的技术涉及将地址空间标识符(ASID)指派到每个任务并且构建每个虚拟存储器访问请求以包括虚拟地址和ASID二者。在虚拟到物理地址转译期间,ASID选择相对应的页表,其包括用于ASID和相关联的任务的虚拟到物理地址映射。用于转译后备缓冲区(TLB)的条目包括虚拟地址和ASID二者以完成每个到物理地址的映射。可以实现共享虚拟地址空间的任务的深调度以提高针对TLB和数据高速缓存二者的高速缓存亲和性。【专利说明】多线程处理单元中的高效存储器虚拟化【
技术领域
】[0001]本发明总地涉及多线程计算机架构,并且更具体地,涉及多线程处理单元中的高效存储器虚拟化。【
背景技术
】[0002]在具有中央处理单元(CPU)和图形处理单元(GPU)二者的常规计算系统中,CPU实施应用计算的一部分、分配资源以及管理总体应用执行,而GPU实施由CPU所确定的高吞吐量的计算。在某些应用空间中,诸如高性能计算(HPC)应用,GPU典型地实施与给定的应用相关联的大多数计算。因此,总体应用性能与GPU利用率直接相关。在这种应用中,以高GPU利用率而达到高应用性能,即以GPU处理单元中相对大的一部分并发地执行有用的工作为特征的情况。工作被组织成在处理单元上并行执行的线程程序。[0003]典型的线程程序执行为跨驻留在单个虚拟地址空间中的并行数据集的高度并行、高度相似的操作,所述并行数据集诸如图像或图像集。如果应用需要执行多个不同线程程序,那么GPU常规地一次执行不同线程程序中的一个直到不同线程程序已全部完成它们的经指派的工作为止,其中每个不同线程程序在相对应的虚拟地址空间内。每个线程程序被加载到相对应的上下文中用于在GPU内的执行。上下文包括加载到驻留在GPU内的页表中的虚拟地址空间状态。因为每个不同线程程序常规地要求私有虚拟地址空间,所以在任何一个时间仅一个线程程序可以在GPU上执行。[0004]HPC应用典型地被执行在常规地包括节点集的HPC集群上,每个节点包括CPU和GPU。每个节点典型地被指派任务集,所述任务可经由消息传递接口(MPI)任务与执行在其他节点上的其他任务进行通信。典型的GPU计算任务作为公共虚拟存储器空间内的并行线程程序实例集以高GPU利用率而高效执行。然而,考虑到常规GPU执行模式,一次仅一个MPI任务可以在给定GPU上执行。每个MPI任务可包括一系列用于GPU的工作量,这给出相应范围的GPU利用率。在一个场景中,仅一个线程或小数目的线程作为MPI任务被执行在GPU上,这导致欠佳的GPU利用率和欠佳的总体应用性能。因此,某些HPC应用在基于GPU的HPC处理集群上低效地实施。一般而言,要求GPU顺序执行任务的应用将实施欠佳,其中所述任务包括小数目的线程实例,每个线程实例要求独立的虚拟地址空间。[0005]如前述所示,本领域需要的是使能具有不同虚拟地址空间的任务的并发GPU执行的技术。【
发明内容】[0006]本发明的一个实施例阐述用于在并行处理子系统上并发地执行具有不同虚拟地址空间的两个或更多个线程程序的方法,方法包括检索任务元数据集,所述任务元数据集包括与由第一地址空间标识符(ASID)所标识的第一虚拟地址空间相关联的第一页查找表以及与由第二ASID所标识的第二虚拟地址空间相关联的第二页查找表,调度与第一虚拟地址空间相关联的第一线程程序以在并行处理子系统的第一处理核心内执行,以及调度与第二虚拟地址空间相关联的第二线程程序以在并行处理子系统的第一处理核心或另一个处理核心内执行,其中由第一线程程序当执行时所生成的虚拟地址请求包含第一ASID,并且由第二线程程序所生成的虚拟地址请求包含第二ASID。[0007]本发明的其他实施例包括但不限于包括指令的计算机可读存储介质,所述指令当由处理单元所执行时使处理单元实施本文所描述的技术,以及包括配置为实施本文所描述的技术的处理单元的计算设备。[0008]本发明的一个优势在于,GPU可以同时执行具有不同虚拟地址空间的不同任务,从而提高某些应用中的GPU利用率和性能。本发明的另一个优势在于,GPU任务能够以地址空间隔离来执行,从而提高可靠性并且减少与调试相关联的开发活动。【专利附图】【附图说明】[0009]因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。[0010]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;[0011]图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;[0012]图3A是根据本发明的一个实施例的、图2的前端的框图;[0013]图3B是根据本发明的一个实施例的、图2的并行处理单元之一内的通用处理集群的框图;[0014]图3C是根据本发明的一个实施例的、图3B的流多处理器的一部分的框图;[0015]图4A示出了根据本发明的一个实施例的、配置为实现多个并发虚拟地址空间的并行处理子系统;[0016]图4B示出了根据本发明的一个实施例的地址空间标识符表条目;[0017]图4C示出了根据本发明的一个实施例的页表条目;[0018]图4D示出了根据本发明的一个实施例的转译后备缓冲区(translationlook-asidebuffer)条目;[0019]图5示出了根据本发明的实施例的、将地址空间标识符和虚拟地址转译到物理地址;[0020]图6示出了根据本发明的一个实施例的、在一个物理地址空间内共存的两个并发虚拟地址空间;[0021]图7示出了根据本发明的一个实施例的、将并行处理子系统配置为执行具有不同虚拟地址空间的多个线程程序;[0022]图8是根据本发明的一个实施例的、用于在并行处理子系统上并发地执行具有不同虚拟地址空间的两个或更多个线程程序的方法步骤的流程图;[0023]图9是根据本发明的一个实施例的、用于在多个不同虚拟地址空间之一中实施虚拟到物理地址映射的方法步骤的流程图;以及[0024]图10是根据本发明的一个实施例的、用于针对图形处理单元上下文内的任务而实施深调度的方法步骤的流程图。【具体实施方式】[0025]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。[0026]系统概述[0027]图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(例如常规的基于阴极射线管或液晶显示器的监视器)的图形子系统。系统盘114也连接到I/O桥107。交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字视频光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/0桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PC1-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。[0028]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。[0029]应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、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。[0030]图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PI3U)202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥I。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。[0031]再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PTO可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。[0032]在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。[0033]现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。[0034]在一个实施例中,通信路径113是PCIExpress链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。[0035]有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥I。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。[0036]GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。[0037]存储器接口214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D>I。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。[0038]任何一个GPC208都可以处理要被写到并行处理存储器204内的任何DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任何分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。[0039]另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。[0040]PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCIExpress)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。[0041]如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PI3U从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。[0042]多个并发任务调度[0043]可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。[0044]图3A为根据本发明的一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD322的指针的列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集数个任务。之后可以基于优先级信息或使用其他技术诸如轮叫调度来调度所收集的任务。[0045]工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针的列表以使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD322生成子任务。[0046]不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入入栈缓冲区或传送到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU102。通过入栈缓冲区提供的任务与子任务之间的另一个区别是通过入栈缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间动态生成的。[0047]任务处理概述[0048]图3B为根据本发明的一个实施例的在图2的PPU202之一内的GPC208的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SMD处理机制代表SMT处理机制的功能子集。[0049]经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目的地来控制工作分布交叉开关330。[0050]在一个实施例中,每个GPC208包括M个SM310,其中M≥1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元一在图3C中示出为Exec单元302和LSU303),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、X0R)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。[0051]如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在任何给定时间在GPC208中可以执行多达G*M个线程组。[0052]此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。[0053]每个SM310包含一级(LI)高速缓存(图3C所示)或使用用于实施加载和存储操作的SM310外部的相应LI高速缓存中的空间。每个SM310都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任何存储器可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC208内,其配置为接收并保持由SM310所请求的经由存储器接口214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。[0054]每个GPC208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)328。在其他实施例中,MMU328可以驻留在存储器接口214、多处理器SM310或LI高速缓存320内。MMU328配置为经由页表420将虚拟地址映射到物理地址。MMU328可以包括地址转译后备缓冲区(TLB)或高速缓存以存储部分页表420。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于指示用于闻速缓存行的请求是命中还是未命中。[0055]在图形和计算应用中,GPC208可配置为使得每个SM310耦连到用于实施纹理映射操作例如确定纹理样本位置、读取纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理LI高速缓存(未示出)或者在一些实施例中从SM310内的LI高速缓存读取纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。[0056]应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM310或纹理单元315、preR0P325可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任何数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、LI高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。[0057]本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。[0058]在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。[0059]每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。[0060]图3C为根据本发明的一个实施例的图3B的SM310的框图。SM310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令LI高速缓存370。线程束调度器和指令单元312从指令LI高速缓存370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。[0061]SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302)—个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD322的标识符。[0062]如果TMD322是网格TMD,则TMD322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD322中或TMD322可以存储指向将由CTA所处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。[0063]如果TMD322是队列TMD,那么使用TMD322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD322分开存储,在该情况下TMD322存储指向该队列的队列指针。有利地,当代表子任务的TMD322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。[0064]属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD322相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。[0065]参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM310内的任何exec单元302)可以通过存储器接口214访问全局存储器。可以将全局存储器的各部分存储在LI高速缓存320中。[0066]每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致LI高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通道的一致值或常数值。[0067]共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在LI高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTAID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。[0068]每个SM310中的LI高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在LI高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和LI高速缓存320。[0069]独立虚拟地址空间[0070]本发明的实施例使诸如GPU的并行处理子系统能够同时执行具有不同的、独立的虚拟地址空间的线程程序。每个虚拟地址空间可以与一个或多个其他虚拟地址空间并存,这使GPU能够同时执行线程程序。每个线程程序可以在与相对应的应用进程相关联的虚拟地址空间内操作,所述应用进程可以分配存储器并将虚拟地址引用传递给线程程序。通过使并行处理系统能够同时执行不同虚拟地址空间中的多个线程程序,可以针对更宽广范围的应用达到较高的GPU利用率和性能。[0071]图4A示出了根据本发明的一个实施例的、配置为实现多个并发虚拟地址空间的图1的并行处理子系统112。在某些实施例中,并行处理子系统112包括GPU。对于实现统一虚拟存储器(UVM)的实施例而言,每个应用进程460可以包括要在应用进程460和任何相关联的GPU计算任务之间所统一的虚拟地址空间内被实施的GPU计算任务。该统一允许应用进程460和GPU计算任务无缝地传达存储器引用。一般而言,每个应用进程460在与其他应用进程460不同的虚拟地址空间内操作。每个应用上下文包括由主机操作系统所维持的应用上下文页表用于将与应用相关联的虚拟地址空间映射到典型地由应用进程460所共享的物理地址空间。[0072]给定的应用进程460可以经由到驱动程序103的执行请求而发起GPU计算任务的执行,其通过将用于GPU计算任务的执行信息添加到GPU上下文450和将GPU上下文450添力口至I」用于GPU的工作的队列来响应。GPU上下文450包括任务元数据(TMD)452,所述任务元数据(TMD)452包括用于执行一个或多个线程程序的信息,所述一个或多个线程程序实现可以在GPU内同时执行的一个或多个GPU计算任务。一个或多个线程程序可以与在同一GPU上下文450内所定义的一个或多个不同虚拟地址空间相关联。用于一个虚拟地址空间的页表针对TMD452的一个实例而定义。TMD452的每个实例包括用于一个GPU上下文450内的一个相关联的线程程序的执行信息。[0073]在给定的TMD452内的页表可以来源于相对应的应用上下文页表。可替代地,在给定的TMD452内的页表可以引用相对应的应用上下文页表。在一个实施例中,应用上下文450驻留在系统存储器104内。驱动程序103内的资源管理器(RM)454配置为将每个被指派到TMD452的一个或多个线程程序装入一个GPU上下文450用于在单个GPU上下文内的同时执行。在一个实施例中,代理(proxy)456包括配置为将请求传达到RM454的用户空间进程。例如,某些执行请求和分配请求可以经由代理456被传送到RM454。[0074]如图2先前所描述的,主机206配置为检索驻留在诸如系统存储器104的存储器中的数据。数据可以包括与排队等候执行的一个或多个GPU上下文450相关的信息。主机206顺序地一次选择一个GPU上下文450用于执行。前端212读取GPU上下文450内的TMD452并且将PPU202配置为基于GPU上下文450执行一个或多个线程程序。前端上下文交换器(FECS)407将MMU328配置为将适当的虚拟地址提供到物理地址映射。给定的GPU上下文450的执行需要等待直到与GPU上下文450相关联的所有页表被FECS407配置为止。在一个实现方案中,FECS407生成“完成”(“done”)信号以指示页表和相关的配置步骤完成,从而提示FE212以向任务/工作单元207指示页表配置完成。该指示使任务/工作单元207能够开始调度与页表相关联的任务。[0075]TMD452内的每个页表由FECS407经由绑定命令(bindcommand)传送到MMU328而与地址空间标识符(ASID)相关联。每个线程程序与ASID相关联,所述ASID附属到由线程程序在执行的过程期间所生成的每个虚拟存储器请求。例如,如果给定的GPU上下文450包括用于两个不同线程程序并且每个与不同虚拟地址空间相关联的执行信息,那么两个线程程序中的一个可以与ASID=O相关联,并且两个线程程序中的另一个可以与ASID=I相关联。在该示例中,GPU上下文450还包括用于虚拟地址空间零(ASID=O)的一个页表和用于虚拟地址空间一(ASID=I)的不同页表。在执行的过程期间,由第一线程程序所生成的每个虚拟存储器访问请求包括虚拟地址和为0的ASID。来自该线程程序的页表查找请求针对用于ASID=O的页表。类似地,由第二线程程序所生成的每个虚拟存储器访问请求包括虚拟地址和为I的ASID。来自该线程程序的页表查找请求针对用于ASID=I的页表。[0076]处理核心440配置为实施某个预确定的任务集,诸如将存储器块从一个地址范围拷贝到另一个地址范围。处理核心440从FECS407接收工作并且可以结合SM310来操作,但是可以不要求通用可编程性。在一个实施例中,主机206指导处理核心440的操作。[0077]MMU328包括ASID表410、页表420以及TLB430。ASID表410包括将ASID与相对应的页表420相关联的一个或多个ASID表条目。一般而言,由执行在SM310内的线程程序所生成的每个存储器请求包括虚拟地址和ASID值以选择一个页表420来实施从虚拟地址到物理地址的映射。ASID表410将ASID值映射到相对应的页表420。页表420然后提供从虚拟地址到物理地址的映射。页表420在MMU328内示出,但可以驻留在任何技术上可行的存储器子系统内,诸如系统存储器104或PP存储器204。[0078]TLB430配置为对虚拟地址到物理地址映射进行高速缓存,每个映射表示为高速缓存条目。每个高速缓存条目标签(tag)包括ASID和虚拟地址。每个高速缓存条目值包括物理地址。当TLB430包括与用于存储器访问请求的ASID和虚拟地址输入这二者匹配的高速缓存条目时,TLB命中发生。在TLB命中的情况下,TLB针对存储器访问请求提供相对应的物理地址。当TLB430不包括与ASID和虚拟地址输入这二者匹配的高速缓存条目时,TLB未命中发生。TLB430可以实现任何技术上可行的技术来确定ASID输入和虚拟地址输入是否一起表示TLB命中或TLB未命中。在一个实施例中,内容可寻址存储器电路配置为将ASID和虚拟地址对存储为搜索标签用于确定命中或未命中。当内容可寻址存储器将输入ASID和虚拟地址对匹配到先前所存储的标签时,这指示TLB命中,则TLB内所存储的相对应的物理地址被选择以完成虚拟到物理映射。这种技术关于搜索标签可以是充分关联的。其他技术可以实现不同程度的关联性。在TLB未命中的情况下,MMU328选择由组成存储器访问请求的ASID所标识的一个页表420,并且基于用于虚拟地址的存储器访问请求、经由所标识的页表420实施虚拟地址到物理地址转译。一旦一个页表420被标识以提供用于转译操作的页表信息,则任何技术上可行的技术可以用来实施虚拟到物理转译。如果页表420不能将虚拟地址映射到物理地址,那么存储器访问请求会产生指示存储器访问请求无效的错误。[0079]由SM310内的线程程序所使用的特定ASID可以经由绑定命令而与具体页表430相关联,所述绑定命令从FECS407生成并被传送到MMU328。绑定命令还可以用来使驻留在TLB430内的虚拟到物理映射数据无效。以这种方式,ASID值可以在顺序地执行的GPU上下文450上被重新使用。[0080]图4B示出了根据本发明的一个实施例的ASID表条目412。ASID表条目412包括ASID字段414以及相对应的页数据绑定标识符(PDBID)字段416,其指向用于ASID字段414中所指定的ASID值的、驻留在存储器中的页表。在一个实施例中,PDBID416是页目录基址(PDB),其与用于存储器中的页表420的物理地址引用相对应。页表可以驻留在PPU存储器204或系统存储器104中。[0081]图4C示出了根据本发明的一个实施例的页表条目422。页表条目(PTE)422包括虚拟地址字段424和相对应的物理地址字段426。给定的页表与特定ASID相关联,其隐含地与虚拟地址字段424中所指定的虚拟地址相关联。[0082]图4D示出了根据本发明的一个实施例的TLB条目432。TLB条目422包括ASID字段434、虚拟地址字段436以及相对应的物理地址字段438。ASID字段434和虚拟地址字段436组成用于找到物理地址字段438的查找标签。给定的TLB430可以包括多个TLB条目432,具有ASID字段434内的ASID值的混合。在由TLB条目432所指定的虚拟到物理映射操作中TLB430能够通过将ASID字段434包括作为查找标签的一部分来对用于独立虚拟地址空间的虚拟地址到物理地址映射进行高速缓存。[0083]图5示出了根据本发明的一个实施例的、将ASID和虚拟地址(VA)转译到物理地址(PA)。该操作可响应于TLB430内的未命中来实施。ASID510和VA520包括查找请求。ASID510用来在ASID表410内实施查找。在该示例中,查找与存储在ASID表条目412(1)内的ASID匹配,其引用页表420(I)。由此处,VA520用来在页表420(I)内实施查找。在该示例中,查找与PTE422(e)的VA字段424匹配。PTE422(e)内的相对应的PA字段426完成到PA530的映射操作,其被设定为PTE422Ce)内的PA字段426的值。多个页表420可以在任何一个时间保持活跃,并且TLB430可以在TLB未命中时从多个页表420中的任何一个检索虚拟到物理地址映射。维持每虚拟地址空间的不同页表420,如由ASID所指定的,使多个虚拟地址空间能够共存并映射到公共物理地址空间,如下文图6所示出的。在一个实施例中,ASID指定GPU上下文和与GPU上下文相关联的特定页表标识符。[0084]图6示出了根据本发明的一个实施例的、在一个物理地址空间620内共存的两个并发虚拟地址空间610(0),610(I)。VA空间610(0)包括经由映射函数630而映射到PA空间620内的相对应的物理地址页的多个虚拟地址页。类似地,VA空间610(I)包括映射到PA空间620中的相对应的物理地址页的多个虚拟地址页。[0085]如所示,VA空间610(0)包括映射到PA页0x0..0000的在0x0..0000处的VA页,以及映射到PA页0x0.?0001的在0x0.?0001处的VA页。VA空间610(I)还包括在0x0.?0000和0x0.?0001处的VA页,但这些VA页分别映射到PA页0x0.?0002和0x0.?0003。应用上下文405可以包括分配在虚拟地址空间610(0)内的存储器,并且不同应用上下文可以包括分配在虚拟地址空间610(I)内的存储器。通过维持由ASID所标识的不同虚拟地址空间,资源可以通过在并行处理子系统112上执行线程程序而始终从执行在CPU102上的应用代码被管理和分配。在一个使用模型中,特定PA页映射到两个或更多个VA空间。在这种使用模型中,PA页包括具有在相对应的执行上下文中的两个或更多个不同虚拟地址表示的共享存储器页。[0086]图7示出了根据本发明的一个实施例的、将并行处理子系统112初始化为执行具有包括一个上下文的不同虚拟地址空间的多个线程程序。FE212读取图4A的TMD452,图4A包括经选择用于由主机206执行的GPU上下文450。每个TMD452包括ASID714。在一个实施例中,RM454将ASID714指派到每个不同TMD452。调度器710确定特定TMD452应被调度以执行并传送执行请求到计算工作分布器(CWD)720,所述计算工作分布器(CWD)720在一个或多个SM310之中分布用于TMD452的工作来建立由TMD452所指定的一个或多个CTA的网格。如图3B先前所论述的,每个CTA可以包括一个或多个线程组。CTA的每个线程组绑定到公共ASID714。在一个实施例中,调度器710包括图3A的任务管理单元300,以及CWD720包括工作分布单元340。[0087]可以实现不同分布策略用于将CTA的网格映射到可用SM310上。一个在本文中被称为“深分配(de印allocation)”的方法优先地将与同一网格相关联的CTA指派到最小数目的不同SM310以一般针对进行TLB高速缓存以及进行数据高速缓存二者来最大化高速缓存亲和性(affinity)。例如,如果`一个SM310能够容纳完整的网格,那么CWD720将用于网格的全部CTA指派在一个SM310上。继续该示例,网格760包括被指派到SM310(0)的CTA750。类似地,网格762包括被指派到SM310(I)的CTA752,并且网格764包括被指派到SM310(n)的CTA754。CTA750很可能针对TLB查找和进行数据高速缓存这二者展示高速缓存亲和性。类似地,CTA752和754很可能展示类似的高速缓存亲和性,其一般提高总体性能。[0088]深分配适合于其中需要多个不同虚拟地址空间以容纳被多路复用到公共GPU上下文中的不同线程程序的同时执行的场景。深分配一般通过同时允许多个较小网格来最大化GPU利用率。深分配由允许由不同网格所要求的多个虚拟地址空间在TLB430和MMU328内共存的本发明的实施例所使能。宽分配(wideallocation)将与特定网格相关联的CTA扩散在可用SM310之上。宽分配适合于其中一个网格配置为要求全部在同一虚拟地址空间内操作的大数目CTA的场景。一般地,宽分配通过一般最大化在与任务相关联的线程之中的并行性来最大化单个任务的性能。由每个TMD452的属性ASID714来促进应使用深分配的检测。例如,当多个不同ASID值被表示在正被调度用于执行的一个GPU上下文450内的多个TMD452之中时,那么深分配可以优先于宽分配。[0089]图8是根据本发明的一个实施例的、用于在并行处理子系统上并发地执行具有不同虚拟地址空间的两个或更多个线程程序的方法800的流程图。尽管结合图1、2、3A、3B、3C、4A、5和7的系统描述了方法800,但是本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。在一个实施例中,方法800由PPU实施,所述PPU诸如图2的PPU202。[0090]方法800开始于步骤810,其中PI3U检索用于与GPU上下文相关联的任务的TMD描述集,所述GPU上下文诸如图4A的GPU上下文450。每个TMD包括用于在PPU上执行任务的信息。信息包括对实现任务的线程程序的引用以及用于将由任务所生成的虚拟地址转译成物理地址的相对应的页表。在步骤820,PPU内的调度器调度每个任务以在可用SM上执行,所述可用SM诸如图3B的SM310。在步骤830,在PPU内的前端上下文交换器单元将每个不同页表和GPU上下文内的相对应的ASID绑定到SM和TLB。绑定具有将页表和用于页表的ASID关联到配置为使用由ASID所标识并由页表所映射的虚拟地址空间的线程程序的作用。绑定还可具有使准备用于执行GPU上下文的TLB无效的作用,所述GPU上下文表示与先前所高速缓存的、驻留在TLB内的映射无关的新上下文。[0091]在步骤840,PPU执行在相对应的SM上所调度的每个任务。在执行的过程期间,每个任务可以对相关联的虚拟地址空间生成一个或多个存储器访问请求。虚拟地址空间由被绑定到任务的ASID值来标识。对虚拟地址的存储器访问请求最初将引起TLB未命中。第一TLB未命中将发生,作为第一SM第一次对第一虚拟地址生成第一存储器访问请求的结果。第二TLB未命中将发生,作为第二SM第一次对第二虚拟地址生成第二存储器访问请求的结果。每个存储器访问请求包括虚拟地址和ASID。虚拟地址和ASID二者必须针对目标TLB与驻留在该TLB内的TLB条目标签匹配以生成命中。TLB命中指示组成存储器访问请求的虚拟地址和ASID具有在目标TLB内的经高速缓存的映射。TLB未命中指示TLB针对所请求的虚拟地址和ASID当前不具有经高速缓存的映射。在步骤850,PPU内的MMU响应于来自第一SM的第一TLB未命中而实施第一页表查找,所述PPU内的MMU诸如图3B的MMU328。该第一页表查找产生从第一虚拟地址和第一ASID的组合到相对应的物理地址的第一映射。第一映射被高速缓存在第一目标TLB内。在步骤852,MMU响应于第二TLB未命中而实施第二页表查找。第二存储器访问请求包括第二ASID,要求MMU使用由第二ASID所标识的第二页表来实施第二页表查找。第二映射被高速缓存在第二目标TLB内。第一目标TLB和第二目标TLB可以包括同一TLB单元,诸如TLB430。在一个实施例中,每个页表查找涉及页表遍历(pagetablewalking)以在相对应的虚拟地址空间内针对每个虚拟地址找到适合的映射。可以实现任何技术上可行的页表遍历技术而不脱离本发明的范围和精神。[0092]方法终止于步骤890。[0093]图9是根据本发明的一个实施例的、用于在多个不同虚拟地址空间之一中实施虚拟到物理地址映射的方法步骤的流程图。尽管结合图1、2、3A、3B、3C、4A、5和7的系统描述了方法900,但是本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。在一个实施例中,方法900由PI3U实施,所述PPU诸如图2的PPU202。[0094]方法900开始于步骤910,其中PPU内的MMU接收包括虚拟地址和ASID的虚拟地址到物理地址映射请求以指定多个不同虚拟地址空间中的哪一个应被用来实施映射。在步骤920,如果映射请求不包括TLB命中,那么方法前进到步骤930。在步骤930,MMU经由ASID表将ASID映射到页表引用,所述ASID表诸如ASID表410。在步骤940,MMU使用由页表引用所引用的页表来将虚拟地址映射到物理地址。在步骤950,MMU将虚拟地址到物理地址映射传送到目标TLB用于进行高速缓存和以后使用。在步骤960,MMU将物理地址关联到映射请求来使能关联存储器访问请求以继续进行。方法终止于步骤990。[0095]返回到步骤920,如果映射请求不包括TLB命中,那么方法继续进行到步骤960。[0096]图10是根据本发明的一个实施例的、用于针对图形处理单元上下文内的任务实施深调度的方法步骤的流程图。尽管结合图1、2、3A、3B、3C、4A、5和7的系统描述了方法1000,但是本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。在一个实施例中,方法1000由PPU实施,所述PPU诸如图2的PPU202。[0097]方法1000开始于步骤1010,其中PPU内的计算工作分布器(CWD)接收包括多个任务以在PPU内并发执行的GPU上下文,所述GPU上下文诸如GPU上下文450。在步骤1020,CffD从包括GPU上下文的多个任务中选择任务。在步骤1030,CWD基于用于所选择的任务的执行要求和SM池中的当前可用的资源来从SM池中选择一个或多个SM。在该步骤中,CWD尝试最小化在其内调度以执行所选择的任务的不同SM的数目。可以实现任何技术上可行的技术来将任务要求映射到可用资源上以满足任务要求。在步骤1040,CWD调度所选择的任务用于从SM池所选择的一个或多个SM的执行。在步骤1050,如果所选择的任务不是驻留在GPU上下文中的最后的任务,那么方法继续进行到步骤1020。否则,方法终止于步骤1060。[0098]在一个实施例中,CWD配置为根据深调度或宽调度技术、基于明确的指令来调度整个GPU上下文。明确的指令可以以编程方式或经由一个或多个环境变量来转达。在其他实施例中,CWD可以根据深调度或宽调度技术、根据明确的指令来单个地调度GPU竞争内的每个任务。可替代地,CWD可以基于与每个任务相关联的不同ASID值来推断哪些调度技术来实现以及针对哪些任务。[0099]虽然以上讨论致力于将用于执行的不同任务组织成公共GPU上下文,但是配置为执行具有不同虚拟地址空间的多个同时上下文的并行协处理器在本发明的实施例的范围和精神内。[0100]在某些实施例中,数据高速缓存关于物理地址而被加标签。在可替代实施例中,数据高速缓存关于虚拟地址而被加标签并且要求ASID作为每个标签的一部分。这两个加标签的机制可以组合在单个GPU内。[0101]总而言之,公开了用于在同一GPU上并发地执行具有不同虚拟地址空间的不同任务的技术。每个任务经由地址空间标识符(ASID)与虚拟地址空间相关联。由执行的任务所生成的虚拟存储器请求包括用来选择相对应的页表的ASID。所选择的页表随后用来将组成虚拟存储器请求的虚拟地址映射到物理地址。页表从由操作系统所维持的相对应的页表来建立用于调用任务的用户应用进程。转译后备缓冲区(TLB)对虚拟存储器请求地址映射进行高速缓存用于将来使用。TLB条目包括标签和数据字段,所述标签包括ASID和虚拟地址,所述数据字段包括相对应的物理地址。在一个实施例中,任务被组织成公共上下文用于执行。可以根据深调度机制来调度任务,由此共享公共虚拟地址空间的任务在最小数目的不同SM上执行。[0102]本发明的一个优势在于,GPU可以同时执行具有不同虚拟地址空间的不同任务,从而提高某些应用中的GPU利用率和性能。[0103]本发明的实施例的另一个优势在于,GPU任务能够以地址空间隔离来执行,其提高可靠性并且减少与调试相关联的开发活动。[0104]虽然上述内容针对本发明的实施例,但可对本发明的其他和进一步的实施例进行设计而不脱离其基本范围。例如,可以以硬件或软件或硬件和软件的组合来实现本发明的各方面。本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示出的计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的CD-ROM盘、闪存、ROM芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息;和(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。当承载针对本发明的功能的计算机可读指令时,这样的计算机可读存储介质是本发明的实施例。[0105]因此,本发明的范围由下面的权利要求来确定。【权利要求】1.一种用于在并行处理子系统上并发地执行具有不同虚拟地址空间的两个或更多个线程程序的方法,所述方法包括:检索与由第一地址空间标识符(ASID)所标识的第一虚拟地址空间相关联的第一页表,以及与由第二ASID所标识的第二虚拟地址空间相关联的第二页表;调度与所述第一虚拟地址空间相关联的第一线程程序以在所述并行处理子系统的第一处理核心内执行;以及调度与所述第二虚拟地址空间相关联的第二线程程序以在所述并行处理子系统的所述第一处理核心或另一个处理核心内执行,其中由所述第一线程程序当执行时所生成的虚拟访问请求包含所述第一ASID,以及由所述第二线程程序所生成的虚拟访问请求包含所述第二ASID。2.一种并行处理子系统,其配置为:检索与由第一地址空间标识符(ASID)所标识的第一虚拟地址空间相关联的第一页表,以及与由第二ASID所标识的第二虚拟地址空间相关联的第二页表;调度与所述第一虚拟地址空间相关联的第一线程程序以在所述并行处理子系统的第一处理核心内执行;以及调度与所述第二虚拟地址空间相关联的第二线程程序以在所述并行处理子系统的所述第一处理核心或另一个处理核心内执行,其中由所述第一线程程序当执行时所生成的虚拟访问请求包含所述第一ASID,以及由所述第二线程程序所生成的虚拟访问请求包含所述第二ASID。3.根据权利要求2所述的并行处理子系统,其中所述并行处理子系统进一步配置为在所述第一处理核心内执行所述第一线程程序以生成包括所述第一虚拟地址空间内的第一虚拟地址和所述第一ASID的第一访问请求。4.根据权利要求3所述的并行处理子系统,其中所述并行处理子系统进一步配置为在所述第一处理核心或所述另一个处理核心内执行所述第二线程程序以生成包括所述第二虚拟地址空间内的第二虚拟地址和所述第二ASID的第二访问请求。5.根据权利要求4所述的并行处理子系统,其中所述并行处理子系统进一步配置为:响应于由与所述第一处理核心相关联的第一转译后备缓冲区(TLB)所生成的第一未命中,经由所述第一页表来实施第一查找操作以生成从所述第一虚拟地址到第一物理地址的第一映射;以及将所述第一映射存储为所述第一TLB内的第一条目。6.根据权利要求5所述的并行处理子系统,其中所述并行处理子系统进一步配置为:响应于由与所述第一处理核心或所述另一个处理核心相关联的第二TLB所生成的第二未命中,经由所述第二页表来实施第二查找操作以生成从所述第二虚拟地址到第二物理地址的第二映射;以及将所述第二映射存储为所述第二TLB内的第二条目。7.根据权利要求6所述的并行处理子系统,其中所述第一映射包含包括所述第一ASID和所述第一虚拟地址的标签,以及所述第二映射包含包括所述第二ASID和所述第二虚拟地址的标签。8.根据权利要求2所述的并行处理子系统,其中用于所述并行处理子系统的执行上下文包括所述第一页表、所述第一线程程序、所述第二页表以及所述第二线程程序。9.根据权利要求2所述的并行处理子系统,其中所述第一页表生成自第一应用上下文页表,所述第二页生成自第二应用上下文页表。10.根据权利要求2所述的并行处理子系统,其中所述第一线程程序和所述第二线程程序在所述第一处理核心内执行。【文档编号】G06F9/50GK103777926SQ201310512294【公开日】2014年5月7日申请日期:2013年10月25日优先权日:2012年10月25日【发明者】尼克·巴罗威廉姆斯,布雷恩·法斯,杰尔姆·F·小杜鲁克,詹姆士·勒罗伊·德明,蒂莫西·约翰·珀塞尔,卢森·邓宁,马克·海尔格罗夫申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1