在许多应用之间共享的图形处理单元.pdf

上传人:r5 文档编号:1480951 上传时间:2018-06-17 格式:PDF 页数:26 大小:10.41MB
返回 下载 相关 举报
摘要
申请专利号:

CN201310169552.0

申请日:

2013.05.09

公开号:

CN103425534A

公开日:

2013.12.04

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06F 9/50申请公布日:20131204|||实质审查的生效IPC(主分类):G06F 9/50申请日:20130509|||公开

IPC分类号:

G06F9/50

主分类号:

G06F9/50

申请人:

辉达公司

发明人:

克里斯托弗·麦克尔·卡梅伦; 蒂莫西·詹姆斯·穆拉伊; 乔尔·亚当·斯凯派尔兹

地址:

美国加利福尼亚州

优先权:

2012.05.09 US 13/467,781

专利代理机构:

北京市磐华律师事务所 11336

代理人:

徐丁峰;魏宁

PDF下载: PDF下载
内容摘要

在许多应用之间共享的图形处理单元。用于在GPU上执行多个应用的技术。技术涉及建立到第一应用的第一连接和到第二应用的第二连接,建立由第一应用和第二应用所共享的通用处理上下文,传送第一工作负载指针到分配给第一应用的第一队列,第一工作负载指针指向由第一应用所生成的第一工作负载,传送第二工作负载指针到分配给第二应用的第二队列,第二工作负载指针指向由第二应用所生成的第二工作负载,传送第一工作负载指针到GPU中的第一GPU队列,以及传送第二工作负载指针到GPU中的第二GPU队列,其中GPU配置为依据通用处理上下文执行第一工作负载和第二工作负载。

权利要求书

1.  一种用于在图形处理单元(GPU)上执行多个应用的计算机实现的方法,所述方法包括:
建立到第一应用的第一连接和到第二应用的第二连接;
建立由所述第一应用和所述第二应用所共享的通用处理上下文;
传送第一工作负载指针到分配给所述第一应用的第一队列,其中所述第一工作负载指针指向由所述第一应用所生成的第一工作负载;
传送第二工作负载指针到分配给所述第二应用的第二队列,其中所述第二工作负载指针指向由所述第二应用所生成的第二工作负载;
传送所述第一工作负载指针到所述GPU中的第一GPU队列;以及
传送所述第二工作负载指针到所述GPU中的第二GPU队列,
其中所述GPU配置为依据所述通用处理上下文执行所述第一工作负载和所述第二工作负载。

2.
  根据权利要求1所述的方法,其中所述通用处理上下文包括要在所述第一应用和所述第二应用之间所共享的存储器池。

3.
  根据权利要求2所述的方法,其中从所述存储器池分配给所述第一应用的存储器的数量不等于从所述存储器池分配给所述第二应用的存储器的数量。

4.
  根据权利要求1所述的方法,其中所述第一工作负载包括由所述GPU的第一组一个或多个处理核心所执行的一个或多个协作线程阵列,并且所述第二工作负载包括由所述GPU的第二组一个或多个处理核心所执行的一个或多个协作线程阵列。

5.
  根据权利要求1所述的方法,其中所述第一连接和所述第二连接经由由所述第一应用和所述第二应用所访问的各自的用户模式驱动程序而建立。

6.
  根据权利要求1所述的方法,其中所述第一指针接收自所述第一应用并且所述第二指针接收自所述第二应用。

7.
  根据权利要求1所述的方法,进一步包括:
建立到第三计算应用的第三连接;
传送第三工作负载指针到分配给所述第三应用的第三队列,其中所述 第三工作负载指针指向由所述第三应用所生成的第三工作负载;以及
传送所述第三工作负载指针到所述GPU中的第三GPU队列,其中所述GPU配置为暂停所述第一工作负载和所述第二工作负载二者的执行并执行所述第三工作负载,而不切换到与所述通用处理上下文不同的处理上下文。

8.
  根据权利要求7所述的方法,其中所述GPU配置为根据所述处理上下文执行所述第三工作负载。

9.
  一种用于在图形处理单元(GPU)上执行多个应用的系统,所述系统包括:
中央处理单元(CPU);
所述GPU;以及
设备驱动程序,配置为:
建立到第一应用的第一连接和到第二应用的第二连接;
建立由所述第一应用和所述第二应用所共享的通用处理上下文;
传送第一工作负载指针到分配给所述第一应用的第一队列,其中所述第一工作负载指针指向由所述第一应用所生成的第一工作负载;
传送第二工作负载指针到分配给所述第二应用的第二队列,其中所述第二工作负载指针指向由所述第二应用所生成的第二工作负载;
传送所述第一工作负载指针到所述GPU中的第一GPU队列;以及
传送所述第二工作负载指针到所述GPU中的第二GPU队列,
其中所述GPU配置为依据所述通用处理上下文执行所述第一工作负载和所述第二工作负载。

10.
  根据权利要求9所述的系统,其中所述通用处理上下文包括要在所述第一应用和所述第二应用之间所共享的、所述GPU中的存储器池。

说明书

在许多应用之间共享的图形处理单元
技术领域
本发明总地涉及计算应用,并且,更具体地,涉及在具有多核心的图形处理单元(GPU)上同时执行复数个计算应用。
背景技术
用于在复数个计算应用之间共享GPU上的可用硬件资源的当前方法要求计算应用与中央资源管理器通信。具体来讲,中央资源管理器从计算应用接收工作负载(workload)并将工作负载传送到GPU用于执行。反过来,GPU控制在计算应用之间的同步并许可GPU每次仅执行单个计算应用的线程。在同步操作期间这些线程可能变得无响应,这使软件开发者难以维持总体系统响应性和适当的负载均衡。此外,GPU被要求针对每一次转变到执行不同计算应用的执行线程中而执行上下文切换,这导致了GPU闲置时间。该问题被与计算应用相关联并且必须在上下文切换发生时被存储(并且随后重新加载)的典型性的大型状态集所加重。
因此,本领域中所需要的是用于在GPU上执行复数个计算应用的更有效的技术。
发明内容
本发明的一个实施例阐述用于在图形处理单元(GPU)上执行多个应用的计算机实现的方法。方法包括以下步骤:建立到第一应用的第一连接和到第二应用的第二连接,建立由第一应用和第二应用所共享的通用处理上下文,传送第一工作负载指针到分配给第一应用的第一队列,其中第一工作负载指针指向由第一应用所生成的第一工作负载,传送第二工作负载指针到分配给第二应用的第二队列,其中第二工作负载指针指向由第二应用所生成的第二工作负载,传送第一工作负载指针到GPU中的第一GPU队列,以及传送第二工作负载指针到GPU中的第二GPU队列,其中GPU配置为依据通用处理上下文执行第一工作负载和第二工作负载。
本发明的所公开的实施例的一个优点是其使得软件开发者能够选择复数个计算应用如何同时共享GPU。具体来讲,本发明的实施例使得多个计算应用和与其相关联的线程能够真正同时地由GPU所执行。计算应用中的每一个具有对由GPU驱动程序内的服务器所管理的通用处理上下文的访问权限,计算应用配置为与该GPU驱动程序通信。结果,上下文切换—其由常规GPU所实现以引起“同时”执行多应用的错觉—的数目可减少,这降低开销并提高GPU的总体性能。
附图说明
因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
图1是示出配置为实现本发明的一个或多个方面的计算机系统的框图;
图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
图3A是根据本发明的一个实施例的、图2的前端的框图;
图3B是根据本发明的一个实施例的、图2的并行处理单元之一内的通用处理集群的框图;
图3C是根据本发明的一个实施例的、图3B的流多处理器的一部分的框图;以及
图4示出根据本发明的一个实施例的、详细说明在多个计算应用、设备驱动程序和并行处理子系统之间的通信路径和交互的框图。
图5A和5B示出根据本发明的实施例所配置的、在常规设备驱动程序和设备驱动程序之间的性能比较。
图6示出根据本发明的一个实施例的、用于建立用户模式驱动程序和设备驱动程序之间的通信的方法。
图7示出根据本发明的一个实施例的、用于在配置为从复数个用户模式驱动程序接收工作请求的设备驱动程序内建立服务器的方法。
图8示出根据本发明的一个实施例的、用于将由复数个用户模式驱动程序所生成的工作请求发出到并行处理子系统的方法。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
系统概述
图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。系统存储器104包括操作系统(未示出)的执行图像、设备驱动程序103、以及配置为用于由并行处理子系统112所执行的代码101。在一个实施例中,代码101代表包含意图在并行处理子系统112上执行的编程指令的CUDATM代码。在本描述的上下文中,术语“代码”指任何可使用处理器所执行的计算机代码、指令、和/或函数。例如,在各种实施例中,代码可包括C代码、C++代码等。在一个实施例中,代码可包括计算机语言的语言扩展(例如C、C++的扩展等)。
操作系统提供用于对计算机系统100的操作进行管理和协调的详细指令。设备驱动程序103提供用于对并行处理子系统112特别是其中所包括的并行处理单元的操作进行管理和协调的详细指令。此外,设备驱动程序103可提供编译设施用于生成经具体优化用于包括在并行处理子系统112中的并行处理单元的机器代码。可结合由NVIDIA公司所提供的CUDATM框架来提供设备驱动程序103。
存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等等的显示设备110的图形子系统。系统盘114也连接到I/O桥107并可配置为存储内容和由CPU102和并行处理子系统112所使用的应用和数据。系统盘114提供用于应用和数据的非易失性存储并可包括固定的或可移动的硬盘驱动器、闪存设备、以及CD-ROM(压缩光盘只读存储器)、DVD-ROM(数 字通用光盘ROM)、蓝光、HD-DVD(高分辨率DVD)、或其他磁性、光学或固态存储设备。
交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字通用光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、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。
图2示出了根据本发明一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要 时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作负载而变化。
GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
存储器接口214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲 染目标的各部分以有效地使用并行处理存储器204的可用带宽。
任何一个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之间的业务流。
另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数 目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
多个并发任务调度
可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。
图3A为根据本发明一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD322的指针的列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集数个任务。之后可以基于优先级信息或使用其他技术诸如轮叫调度来调度所收集的任务。
工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针的列表以使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD322生成子任务。
不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入入栈缓冲区或传送到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU102。通过入栈缓冲区提供的任务与子任务之间的另一个区别是通过入栈缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间动态生成的。
任务处理概述
图3B为根据本发明一个实施例的在图2的PPU202之一内的GPC208的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。
经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC208包括M个SM310,其中M≥1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元—在图3C中示出为Exec单元302和LSU303),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在任何给定时间在GPC208中可以执行多达G*M个线程组。
此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
每个SM310包含一级(L1)高速缓存(图3C所示)或使用用于实施加载和存储操作的SM310外部的相应L1高速缓存中的空间。每个SM310都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任何存储器可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC208内,其配置为接收并保持由SM310所请求的经由存储器接口214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。
每个GPC208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)328。在其他实施例中,MMU328可以驻留在存储器接口214内。MMU328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存行索引。MMU328可以包括地址转换后备缓冲区(TLB)或可以驻留在多处理器SM310或L1高速缓存或GPC208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。
在图形和计算应用中,GPC208可配置为使得每个SM310耦连到用于实施纹理映射操作例如确定纹理样本位置、读取纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SM310内的L1高速缓存读取纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310将所处理的任务输出 到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM310或纹理单元315、preROP325可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任何数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、L1高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。
本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如 果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
图3C为根据本发明一个实施例的图3B的SM310的框图。SM310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令L1高速缓存370。线程束调度器和指令单元312从指令L1高速缓存370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。
SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302)一个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD322的标识符。
如果TMD322是网格TMD,则TMD322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD322中或TMD322可以存储指向将由CTA所处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。
如果TMD322是队列TMD,那么使用TMD322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD322分开存储,在该情况下TMD322存储指向该队列的队列指针。有利地,当代表子任务的TMD322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD322相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM310内的任何exec单元302)可以通过存储器接口214访问全局存储器。可以将全局存储器的各部分存储在L1高速缓存320中。
每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致L1高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通道的一致值或常数值。
共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在L1高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域 还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。
每个SM310中的L1高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在L1高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和L1高速缓存320。
在许多应用之间共享的GPU
图4示出根据本发明的一个实施例的、详细说明在多个计算应用401、设备驱动程序103和PPU202之间的通信路径和交互的框图。在图4中,每个计算应用401代表在CPU102控制之下并与设备驱动程序103交互的不同的经编译的用户代码101,该设备驱动程序103将由计算应用401所生成的工作引导到PPU202内的GPC208用于处理。具体来讲,如本文所描述的,GPC208内的SM310执行所生成的经由TMD322所递送的工作负载。如所示,每个计算应用401与用户模式驱动程序(UMD)402相关联并使得UMD402能够与设备驱动程序103通信,该UMD402在一些情况下包括由设备驱动程序103所提供的功能的子集。如下文将结合图6所进一步详细描述的,当由CPU102所初始化时,每个计算应用401经由包括在代码101中的应用编程接口(API)调用与相关联的UMD402通信,其中计算应用401源自该代码101。
图4中还示出服务器404,其在设备驱动程序103的控制之下执行并与多个UMD402交互。具体来讲,一旦从UMD402接收对执行PPU202内的工作的初始请求,则服务器404创建UMD402能够将要被执行的工作推入到其上的特定队列406,其细节在下文结合图7加以描述。服务器404还管理在计算应用之间所共享的通用处理上下文407,其对计算应用401提供存储器池。计算应用401可根据其产生的用于处理的工作的要求来分配存储器池的变化的部分。设备驱动程序103配置为例如使用轮叫技术来从队列406中的每一个弹出(pop)工作,并推入工作到有容量接收新工作的TMD322,其细节在下文结合图8加以描述。本文所描述的技术提供超 过常规方法的各种性能增益,其示例在下文结合图5A-5B加以描述。
图5A示出在使用常规方法来将工作从复数个计算应用401分布到PPU202的设备驱动程序的控制之下的示例性PPU202。如本文先前所描述的,常规设备驱动程序使得仅单个计算应用的线程能够由包括在PPU202中的GPC208的SM310所执行。结果,计算应用401的“同时”执行要求PPU202频繁地执行上下文切换,该上下文切换是引入时延例如时间T2、T4和T6的高开销操作。此外,当计算应用并未生成足够的工作来利用包括在GPC208中的SM310中的每一个时,那些未被利用的SM310闲置,即使另一个计算应用可能已经发出要执行的工作。
如图5A所示,多计算应用发出工作到在传统设备驱动程序控制之下的PPU202。在时间T1,由计算应用CA_1所生成的工作利用GPC208(1-3)的SM310(1-6),但因为没有用于GPC208(4)的SM310(7-8)执行的工作而将GPC208(4)的SM310(7-8)保持闲置。这甚至当工作已经由计算应用CA_2所生成时也适用,在图5A所示出的示例中,其要求两个SM310用于执行(例如闲置的GPC208(4)的SM310(7-8))。反而,为了处理由计算应用CA_2所生成的工作,PPU202必须在时间T2发出上下文切换,其如上文所述是高开销操作,该高开销操作要求用于计算应用CA_1的处理上下文被转储(flush)出去并存储到存储器中,接下来将用于计算应用CA_2的处理上下文加载到存储器中。
在时间T3,SM310(1-2)处理由计算应用CA_2所生成的工作,并且SM310(3-8)保持闲置,即使用于计算应用CA_3和CA_4的工作可能已经被发出并且正挂起执行。时间T4-T7示出为了在由计算应用CA_2所生成的工作执行后执行由CA_3和CA_4所生成的剩余工作而由并行处理子系统112所实行的示例性操作。如所示,这些操作包括附加的上下文切换和闲置GPC208内的SM310,这带来低效率。
图5B示出在多计算应用发出工作到在设备驱动程序103控制之下的PPU202的情况下的比较示范场景,其配置为实现本发明的实施例。具体来讲,本发明的实施例使得多计算应用的线程能够真正同时地由包括在PPU202中的GPC208内的SM310所执行。例如,在图5B中的时间T1,与计算应用CA_1相关联的线程由SM310(1-7)所执行,同时与计算应用CA_2相关联的线程由SM310(7-8)所执行。在计算应用CA_1与CA_2 之间对于SM310(7)的重叠示出由本发明的实施例所提供的功能,其涉及由于每个SM310可包括多个执行单元302,如上文结合图3B所述,而在单个SM310内执行由两个不同的计算应用所生成的工作。因为在本发明的实施例的配置下,每个计算应用共享相同的通用处理上下文407,所以PPU202能够转变到处理计算应用CA_3和CA_4,其由时间T2所示出,其中与计算应用CA_3相关联的线程由SM310(1-4)所执行,并且与计算应用CA_4相关联的线程由SM310(5-8)所执行。因此,常规技术所要求的上下文切换的开销减少,并且进一步地,在一些情况下,当计算应用401生成满足或超过PPU202的容量的工作量时包括在PPU202中的每个GPC208可被完全利用。
图6示出根据本发明的一个实施例的、用于建立UMD402和设备驱动程序103之间的通信的方法。尽管结合图1、2、3A、3B、3C和4的系统来描述方法步骤,但本领域的普通技术人员将理解的是配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。
如所示,方法600在步骤602开始,其中UMD402从正在CPU102的控制之下执行的计算应用401接收初始化请求。在一个示例中,计算应用401是引用包括在与其相关联的UMD402和设备驱动程序103二者中的功能的CUDA应用,其中UMD402的功能由CPU102所执行并且设备驱动程序103的功能由并行处理子系统112所实行。
在步骤604,UMD402请求建立到设备驱动程序103的连接,该设备驱动程序103例如通过静态参数而对UMD402是已知的。在步骤606,UMD402从设备驱动程序103请求例如由设备驱动程序103所执行的服务器404的服务器地址,由计算应用401所生成的对设备驱动程序103的工作请求可被排队用于由PPU202处理。在步骤608,UMD402识别由计算应用401所创建的工作负载。在步骤610,UMD402将指向工作负载的指针传达到服务器404,其如下文结合图7所详细描述的,随后被推入与UMD402相对应的服务器404的队列406中。在步骤612,UMD402进入用于由计算应用401所生成的附加的工作负载的监听模式。随后根据步骤610将指向所生成的每个附加的工作负载的指针传达到队列406。当计算应用401终止时,相关联的UMD402也终止,并且方法600结束。
图7示出根据本发明的一个实施例的、用于在配置为在从复数个UMD 402接收工作请求的设备驱动程序103内建立服务器404的方法。尽管结合图1、2、3A、3B、3C、4和6的系统来描述方法步骤,但本领域的普通技术人员将理解的是配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。
如所示,方法700在步骤702开始,其中设备驱动程序103从UMD402接收建立连接的请求。该请求与上文结合图6所描述的步骤604相对应,其中UMD402请求建立到设备驱动程序103的连接。在步骤704,设备驱动程序103建立到UMD402的连接。
在步骤706,设备驱动程序103从UMD402接收针对活动服务器即服务器404的地址的请求。在步骤708,设备驱动程序103确定服务器404是否已在执行,即服务器404是否已被初始化。在步骤708,如果设备驱动程序103确定服务器404未在执行,那么设备驱动程序103前进到步骤710,其中设备驱动程序103激活服务器404并生成用于服务器404的地址使得服务器404可由UMD402(以及随后请求到服务器404的连接的任何附加的UMD402)所访问。
在步骤712,设备驱动程序103建立由UMD402和发出针对要由并行处理子系统112所处理的工作的请求的任何随后的UMD402所共享的通用处理上下文407。如本文先前所述,通用处理上下文407使得计算应用401能够真正同时地由PPU202所执行。在步骤714,设备驱动程序103生成与要求在步骤702所建立的连接的UMD402相对应的队列406。在步骤716,设备驱动程序103返回服务器404的服务器地址到UMD402。
在步骤718,设备驱动程序103从UMD402接收指向工作负载的指针,例如在图6中的方法600的步骤610由UMD402所发出的指针。在步骤720,设备驱动程序103推入指针到队列406上。被推入到各自队列406上的指向工作请求的指针—与由设备驱动程序103为了(on behalf of)其他UMD402而推入到其他队列406上的指向其他工作请求的指针一起—随后被发出到PPU202用于处理,其细节在下文结合图8加以描述。
图8示出根据本发明的一个实施例的、用于将由复数个UMD402所生成的工作请求发出到PPU202的方法。尽管结合图1、2、3A、3B、3C、4、6和7的系统来描述方法步骤,但本领域的普通技术人员将理解的是配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。
如所示,方法800在步骤802开始,其中设备驱动程序103确定在服务器404内是否建立有一个或多个队列406。
在步骤804,设备驱动程序103将第一队列406设置为当前队列406。在步骤805,设备驱动程序103确定当前队列406是否为空。在步骤805,如果设备驱动程序103确定当前队列406不为空,那么方法前进到步骤806。在步骤806,设备驱动程序103从当前队列406弹出工作负载指针。在步骤808,设备驱动程序103将所弹出的工作负载指针传达到TMD322。根据上文结合图1、2、3A、3B、3C和4所描述的技术,所弹出的指针所导向的工作负载随后由PPU202所处理。
在步骤810,设备驱动程序103确定在服务器404内是否存在附加的队列406。在步骤810,如果设备驱动程序103确定在服务器404内存在下一个队列406,那么方法800前进到步骤812,其中设备驱动程序103将下一个队列406设置为当前队列406。随后针对当前队列406重复方法步骤805-810,使得存储在不同队列406中的指针以所组织的方式传送到TMD322。
然而,如果设备驱动程序103确定没有下一个队列406,即没有计算应用401正在执行,那么方法800结束。
尽管在方法800中设备驱动程序103实现轮叫方法来发出由复数个UMD402所生成的工作请求,但本发明的实施例不限于此并可实现其他类型的方法,例如其中设备驱动程序103是多线程的并可并行发出由复数个UMD402所生成的工作请求。
总而言之,本发明的所公开的实施例使得软件开发者能够选择复数个计算应用401如何同时共享并行处理子系统112内的PPU202,并进一步使得多个计算应用401和与其相关联的线程能够真正同时地由PPU202所执行。计算应用401中的每一个具有对由设备驱动程序103内的服务器404所管理的通用处理上下文407的访问权限,计算应用401配置为与该设备驱动程序103通信。
所公开的实施例的一个优点是上下文切换—其由常规设备驱动程序所实现以引起“同时”执行多应用的错觉—的数目可减少,这降低开销并提高PPU202的总体性能。此外,当处理由复数个计算应用401所生成的工作时,本发明的实施例可增加包括于PPU202中的GPC208内的被活跃利 用(actively-utilized)的SM310的平均数目。具体来讲,在常规方法下当单个计算应用401无法完全利用所有SM310时将被闲置的GPC208内的SM310,现在被许可执行与不同的计算应用401相关联的线程。因此本发明的实施例与现有技术相比较可产生PPU202的总体性能的显著提高。
本发明的一个实施例可实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上永久性地存储信息;和(ii)可写的存储介质(例如,软盘驱动器内的软盘或硬盘驱动器或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和变化,而不脱离如所附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是示例性的而非限制性的意义。
因此,本发明的实施例的范围在接下来的权利要求中阐述。

在许多应用之间共享的图形处理单元.pdf_第1页
第1页 / 共26页
在许多应用之间共享的图形处理单元.pdf_第2页
第2页 / 共26页
在许多应用之间共享的图形处理单元.pdf_第3页
第3页 / 共26页
点击查看更多>>
资源描述

《在许多应用之间共享的图形处理单元.pdf》由会员分享,可在线阅读,更多相关《在许多应用之间共享的图形处理单元.pdf(26页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103425534 A(43)申请公布日 2013.12.04CN103425534A*CN103425534A*(21)申请号 201310169552.0(22)申请日 2013.05.0913/467,781 2012.05.09 USG06F 9/50(2006.01)(71)申请人辉达公司地址美国加利福尼亚州(72)发明人克里斯托弗麦克尔卡梅伦蒂莫西詹姆斯穆拉伊乔尔亚当斯凯派尔兹(74)专利代理机构北京市磐华律师事务所 11336代理人徐丁峰 魏宁(54) 发明名称在许多应用之间共享的图形处理单元(57) 摘要在许多应用之间共享的图形处理单元。用于在GPU上。

2、执行多个应用的技术。技术涉及建立到第一应用的第一连接和到第二应用的第二连接,建立由第一应用和第二应用所共享的通用处理上下文,传送第一工作负载指针到分配给第一应用的第一队列,第一工作负载指针指向由第一应用所生成的第一工作负载,传送第二工作负载指针到分配给第二应用的第二队列,第二工作负载指针指向由第二应用所生成的第二工作负载,传送第一工作负载指针到GPU中的第一GPU队列,以及传送第二工作负载指针到GPU中的第二GPU队列,其中GPU配置为依据通用处理上下文执行第一工作负载和第二工作负载。(30)优先权数据(51)Int.Cl.权利要求书2页 说明书13页 附图10页(19)中华人民共和国国家知识。

3、产权局(12)发明专利申请权利要求书2页 说明书13页 附图10页(10)申请公布号 CN 103425534 ACN 103425534 A1/2页21.一种用于在图形处理单元(GPU)上执行多个应用的计算机实现的方法,所述方法包括:建立到第一应用的第一连接和到第二应用的第二连接;建立由所述第一应用和所述第二应用所共享的通用处理上下文;传送第一工作负载指针到分配给所述第一应用的第一队列,其中所述第一工作负载指针指向由所述第一应用所生成的第一工作负载;传送第二工作负载指针到分配给所述第二应用的第二队列,其中所述第二工作负载指针指向由所述第二应用所生成的第二工作负载;传送所述第一工作负载指针到所。

4、述GPU中的第一GPU队列;以及传送所述第二工作负载指针到所述GPU中的第二GPU队列,其中所述GPU配置为依据所述通用处理上下文执行所述第一工作负载和所述第二工作负载。2.根据权利要求1所述的方法,其中所述通用处理上下文包括要在所述第一应用和所述第二应用之间所共享的存储器池。3.根据权利要求2所述的方法,其中从所述存储器池分配给所述第一应用的存储器的数量不等于从所述存储器池分配给所述第二应用的存储器的数量。4.根据权利要求1所述的方法,其中所述第一工作负载包括由所述GPU的第一组一个或多个处理核心所执行的一个或多个协作线程阵列,并且所述第二工作负载包括由所述GPU的第二组一个或多个处理核心所。

5、执行的一个或多个协作线程阵列。5.根据权利要求1所述的方法,其中所述第一连接和所述第二连接经由由所述第一应用和所述第二应用所访问的各自的用户模式驱动程序而建立。6.根据权利要求1所述的方法,其中所述第一指针接收自所述第一应用并且所述第二指针接收自所述第二应用。7.根据权利要求1所述的方法,进一步包括:建立到第三计算应用的第三连接;传送第三工作负载指针到分配给所述第三应用的第三队列,其中所述第三工作负载指针指向由所述第三应用所生成的第三工作负载;以及传送所述第三工作负载指针到所述GPU中的第三GPU队列,其中所述GPU配置为暂停所述第一工作负载和所述第二工作负载二者的执行并执行所述第三工作负载,。

6、而不切换到与所述通用处理上下文不同的处理上下文。8.根据权利要求7所述的方法,其中所述GPU配置为根据所述处理上下文执行所述第三工作负载。9.一种用于在图形处理单元(GPU)上执行多个应用的系统,所述系统包括:中央处理单元(CPU);所述GPU;以及设备驱动程序,配置为:建立到第一应用的第一连接和到第二应用的第二连接;建立由所述第一应用和所述第二应用所共享的通用处理上下文;传送第一工作负载指针到分配给所述第一应用的第一队列,其中所述第一工作负载指权 利 要 求 书CN 103425534 A2/2页3针指向由所述第一应用所生成的第一工作负载;传送第二工作负载指针到分配给所述第二应用的第二队列,。

7、其中所述第二工作负载指针指向由所述第二应用所生成的第二工作负载;传送所述第一工作负载指针到所述GPU中的第一GPU队列;以及传送所述第二工作负载指针到所述GPU中的第二GPU队列,其中所述GPU配置为依据所述通用处理上下文执行所述第一工作负载和所述第二工作负载。10.根据权利要求9所述的系统,其中所述通用处理上下文包括要在所述第一应用和所述第二应用之间所共享的、所述GPU中的存储器池。权 利 要 求 书CN 103425534 A1/13页4在许多应用之间共享的图形处理单元技术领域0001 本发明总地涉及计算应用,并且,更具体地,涉及在具有多核心的图形处理单元(GPU)上同时执行复数个计算应用。

8、。背景技术0002 用于在复数个计算应用之间共享GPU上的可用硬件资源的当前方法要求计算应用与中央资源管理器通信。具体来讲,中央资源管理器从计算应用接收工作负载(workload)并将工作负载传送到GPU用于执行。反过来,GPU控制在计算应用之间的同步并许可GPU每次仅执行单个计算应用的线程。在同步操作期间这些线程可能变得无响应,这使软件开发者难以维持总体系统响应性和适当的负载均衡。此外,GPU被要求针对每一次转变到执行不同计算应用的执行线程中而执行上下文切换,这导致了GPU闲置时间。该问题被与计算应用相关联并且必须在上下文切换发生时被存储(并且随后重新加载)的典型性的大型状态集所加重。000。

9、3 因此,本领域中所需要的是用于在GPU上执行复数个计算应用的更有效的技术。发明内容0004 本发明的一个实施例阐述用于在图形处理单元(GPU)上执行多个应用的计算机实现的方法。方法包括以下步骤:建立到第一应用的第一连接和到第二应用的第二连接,建立由第一应用和第二应用所共享的通用处理上下文,传送第一工作负载指针到分配给第一应用的第一队列,其中第一工作负载指针指向由第一应用所生成的第一工作负载,传送第二工作负载指针到分配给第二应用的第二队列,其中第二工作负载指针指向由第二应用所生成的第二工作负载,传送第一工作负载指针到GPU中的第一GPU队列,以及传送第二工作负载指针到GPU中的第二GPU队列,。

10、其中GPU配置为依据通用处理上下文执行第一工作负载和第二工作负载。0005 本发明的所公开的实施例的一个优点是其使得软件开发者能够选择复数个计算应用如何同时共享GPU。具体来讲,本发明的实施例使得多个计算应用和与其相关联的线程能够真正同时地由GPU所执行。计算应用中的每一个具有对由GPU驱动程序内的服务器所管理的通用处理上下文的访问权限,计算应用配置为与该GPU驱动程序通信。结果,上下文切换其由常规GPU所实现以引起“同时”执行多应用的错觉的数目可减少,这降低开销并提高GPU的总体性能。附图说明0006 因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具。

11、体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。说 明 书CN 103425534 A2/13页50007 图1是示出配置为实现本发明的一个或多个方面的计算机系统的框图;0008 图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;0009 图3A是根据本发明的一个实施例的、图2的前端的框图;0010 图3B是根据本发明的一个实施例的、图2的并行处理单元之一内的通用处理集群的框图;0011 图3C是根据本发明的一个实施例的、图3B的流多处理器的一部分的框图;以及00。

12、12 图4示出根据本发明的一个实施例的、详细说明在多个计算应用、设备驱动程序和并行处理子系统之间的通信路径和交互的框图。0013 图5A和5B示出根据本发明的实施例所配置的、在常规设备驱动程序和设备驱动程序之间的性能比较。0014 图6示出根据本发明的一个实施例的、用于建立用户模式驱动程序和设备驱动程序之间的通信的方法。0015 图7示出根据本发明的一个实施例的、用于在配置为从复数个用户模式驱动程序接收工作请求的设备驱动程序内建立服务器的方法。0016 图8示出根据本发明的一个实施例的、用于将由复数个用户模式驱动程序所生成的工作请求发出到并行处理子系统的方法。具体实施方式0017 在下面的描述。

13、中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。0018 系统概述0019 图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。系统存储器104包括操作系统(未示出)的执行图像、设备驱动程序103、以及配置为用于由并行处理子系统112所执行的代码101。在一个实施例中,代码101代表包含意图在并行处理子系统112上执行的编程指令的CUDATM代码。在本描述的上下文中,术语“代码。

14、”指任何可使用处理器所执行的计算机代码、指令、和/或函数。例如,在各种实施例中,代码可包括C代码、C+代码等。在一个实施例中,代码可包括计算机语言的语言扩展(例如C、C+的扩展等)。0020 操作系统提供用于对计算机系统100的操作进行管理和协调的详细指令。设备驱动程序103提供用于对并行处理子系统112特别是其中所包括的并行处理单元的操作进行管理和协调的详细指令。此外,设备驱动程序103可提供编译设施用于生成经具体优化用于包括在并行处理子系统112中的并行处理单元的机器代码。可结合由NVIDIA公司所提供的CUDATM框架来提供设备驱动程序103。0021 存储器桥105可以是例如北桥芯片,。

15、经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路说 明 书CN 103425534 A3/13页6径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等等的显示设备110的图形。

16、子系统。系统盘114也连接到I/O桥107并可配置为存储内容和由CPU102和并行处理子系统112所使用的应用和数据。系统盘114提供用于应用和数据的非易失性存储并可包括固定的或可移动的硬盘驱动器、闪存设备、以及CD-ROM(压缩光盘只读存储器)、DVD-ROM(数字通用光盘ROM)、蓝光、HD-DVD(高分辨率DVD)、或其他磁性、光学或固态存储设备。0022 交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字通用光盘(DVD)驱动器、胶片录制设备及。

17、类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。0023 在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个。

18、其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。0024 应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个。

19、芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或两个以上的CPU102以及两个或两个以上的并行处理子系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。0025 图2示出了根据本发明一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U1。(本文中,类似对象的多个实例需要时以标识对象的参考数。

20、字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。0026 再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生说 明 书CN 103425534 A4/13页7成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer)交互以。

21、存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。0027 在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些。

22、实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。0028 现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接。

23、连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。0029 在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信。

24、路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。0030 有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C1。每个GPC208能够并发执行大量的(例如,几百或几千)线程。

25、,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作负载而变化。0031 GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207。

26、从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来说 明 书CN 103425534 A5/13页8调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。0032 存储器接口214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215。

27、的数目也可以不等于存储器设备的数目。本领域的技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。0033 任何一个GPC208都可以处理要被写到并行处理存储器204内的任何DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任何分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进。

28、行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。0034 另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染。

29、操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。0035 PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形。

30、处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。0036 如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU。

31、202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。说 明 书CN 103425534 A6/13页90037 多个并发任务调度0038 可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。0039。

32、 图3A为根据本发明一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD322的指针的列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集数个任务。之后可以基于优先级信息或使用其他技术诸如轮叫调。

33、度来调度所收集的任务。0040 工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针的列表以使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD322生成子任务。0041 不同于由任务/工作单元207从前端2。

34、12接收的任务,子任务从处理集群阵列230接收。子任务不被插入入栈缓冲区或传送到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU102。通过入栈缓冲区提供的任务与子任务之间的另一个区别是通过入栈缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间动态生成的。0042 任务处理概述0043 图3B为根据本发明一个实施例的在图2的PPU202之一内的GPC208的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行。

35、执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。0044 经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目的地来控制工作分布交叉开关330。0045 在一个实施例中,每个GPC。

36、208包括M个SM310,其中M1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元在图3C中示出为Exec单元302和LSU303),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施说 明 书CN 103425534 A7/13页10例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的。

37、操作。0046 如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在任何。

38、给定时间在GPC208中可以执行多达G*M个线程组。0047 此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。0048 每个SM310包含一级(L1)高速缓存(图3C所示)或使用用于实施加载和存储操作的SM310外部的相应L1高速缓存中的空间。每个SM310都还有权访问在。

39、所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任何存储器可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC208内,其配置为接收并保持由SM310所请求的经由存储器接口214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。0049 每个G。

40、PC208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)328。在其他实施例中,MMU328可以驻留在存储器接口214内。MMU328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存行索引。MMU328可以包括地址转换后备缓冲区(TLB)或可以驻留在多处理器SM310或L1高速缓存或GPC208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。0050 在图形和计算应用中,GPC208可配置为使得每个SM310耦连到用于实施纹理映射操作例如确定纹理样本位置、读取纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SM310内的L1高速缓存读取纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操说 明 书CN 103425534 A10。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1