用于曲面细分和几何着色器的电力高效属性处置的制作方法

文档序号:6527003阅读:266来源:国知局
用于曲面细分和几何着色器的电力高效属性处置的制作方法
【专利摘要】公开了用于曲面细分和几何着色器的电力高效属性处置。图形对象的属性在多个图形处理管线中进行处理。流多处理器(SM)从缓冲区的第一集合检索与图形对象的集合相关联的参数的第一集合。SM根据处理的第一阶段对参数的所述第一集合实施操作的第一集合以产生存储在缓冲区的第二集合中的参数的第二集合。SM根据处理的第二阶段对参数的第二集合实施操作的第二集合以产生存储在缓冲区的第三集合中的参数的第三集合。所公开技术的一个优势在于,工作从图形处理的第一阶段到第二阶段进行重新分布而不必须将属性拷贝到高速缓存或系统存储器以及从高速缓存或系统存储器检索属性,这导致功耗降低。
【专利说明】用于曲面细分和几何着色器的电力高效属性处置
【技术领域】
[0001]本发明总地涉及三维(3D)图形处理,并且更具体地,涉及用于曲面细分(tessellation)和几何着色器的电力高效属性处置。
【背景技术】
[0002]包括2D和3D图形对象的计算机生成的图像典型地使用具有一个或多个多级图形处理管线的图形处理单元(GPU)来渲染。这类图形管线包括各种可编程和固定功能级。可编程级包括各种处理单元,该处理单元执行着色器程序以渲染图形对象以及生成与图形对象相关联的各种视觉效果。
[0003]为了高效处理,图形对象典型地分布在多级图形处理管线当中,使得每个图形处理管线具有接近相同量的工作量。随着图形对象在图形处理管线中进行处理,图形处理管线中的一个或多个中可能存在高度的工作量扩张。例如,图形对象的表面在被称为曲面细分的过程中可被再分成大量较小图形对象,诸如三角形。由曲面细分所产生的较小图形对象的数量可从一个图形对象到另一个对象极大地进行变化。作为结果,即使当管线的工作量在曲面细分之前是平衡的时,图形处理管线的工作量也可在曲面细分期间变成不平衡的。具有相对低工作量的图形处理管线可以提早完成处理。这类图形处理管线可以进入空闲状态,挂起具有相对高工作量的图形处理管线的处理的完成。图形处理管线当中的这类不平衡工作量可能降低GPU的效率。
[0004]对于该问题的一个可能解决方案是在曲面细分级处重新平衡图形处理管线当中的工作量。在重新平衡之后,各种图形对象的处理然后可由与在重新平衡之前不同的图形处理管线来处理。在重新平衡之前,图形处理管线将图形对象的属性从本地存储器拷贝到高速缓存或系统存储器。在重新平衡之后,图形处理管线根据经重新平衡的工作量指派从高速缓存或系统存储器检索图形对象的属性并且将属性拷贝到本地存储器。该方法的一个缺点在于,当属性在本地存储器和高速缓存或系统存储器之间转移时消耗电力。在低功率应用中,诸如当GPU与移动设备相关联时,当数据被写到高速缓存或系统存储器以及从高速缓存或系统存储器被读取时所消耗的电力降低移动设备的电池寿命并且因此降低设备的可用操作时间。
[0005]如前述所示,本领域需要的是用于重新平衡图形处理管线中的工作量的经改进技术。

【发明内容】

[0006]本发明的一个实施例阐述用于处理多个图形处理管线中的图形对象的属性。方法包括从缓冲区的第一集合检索与图形对象的集合相关联的参数的第一集合。方法进一步包括根据处理的第一阶段(phase)对参数的第一集合实施操作的第一集合以产生参数的第二集合,并且将参数的第二集合存储在缓冲区的第二集合中。方法进一步包括根据处理的第二阶段对参数的第二集合实施操作的第二集合以产生参数的第三集合,并且将参数的第三集合存储在缓冲区的第三集合中。
[0007]其他实施例包括但不限于,包括指令的计算机可读介质,指令使处理单元能够实现所公开方法的一个或多个方面。其他实施例包括但不限于,包括配置为实现所公开方法的一个或多个方面的处理单元以及配置为实现所公开方法的一个或多个方面的计算设备的子系统。
[0008]所公开技术的一个优势在于,工作从图形处理的第一阶段到图形处理的第二阶段被单个流多处理器系统重新分布而不必须将图形对象的属性拷贝到高速缓存和系统存储器并且然后稍后从这些存储器中的一个检索属性。将属性拷贝到远程存储器以及从远程存储器检索属性典型地涉及激励多级存储器层级中的多个芯片外存储器、控制器以及接口部件,所述远程存储器诸如高速缓存和系统存储器。拷贝到远程存储器以及从远程存储器检索也可涉及将一些部件从低功耗状态转变到高功耗状态。访问本地共享存储器典型地不涉及激励或者改变芯片外部件的电力状态。因此,所公开技术降低总功耗并且起到延长移动设备的电池充电周期之间的操作时间的作用。
【专利附图】

【附图说明】
[0009]因此,可以详细地理解本发明的上述特征,并且可以参考示范性实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
[0010]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
[0011]图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
[0012]图3A是根据本发明的一个实施例的、图2的PPU中的一个内的分区单元的框图;
[0013]图3B是根据本发明的一个实施例的、图2的通用处理集群(GPC)内的流多处理器(SM)的一部分的框图;
[0014]图4是根据本发明的一个实施例的、图2的并行处理单元中的一个或多个可配置为实现其的图形处理管线的示意图;
[0015]图5示出了根据本发明的一个实施例的、图3B的共享存储器的分配图;
[0016]图6示出了根据本发明的另一个实施例的、图3B的共享存储器的分配图;
[0017]图7A-7B阐述了根据本发明的一个实施例的、用于重新分布由图形处理管线所处理的图形对象的属性的方法步骤的流程图。
【具体实施方式】
[0018]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实践。
[0019]系统概述
[0020]图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-R0M (数字多用光盘-ROM)、蓝光、HD-DVD (高清晰度DVD)或其他磁性、光学或固态存储设备。
[0021]交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(⑶)驱动器、数字多用光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PC1-EXpreSS、AGP (加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
[0022]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
[0023]应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、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。
[0024]图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
[0025]再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PTO可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
[0026]在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
[0027]现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
[0028]在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
[0029]有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥I。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
[0030] GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
[0031]存储器接口 214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D > I。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM) 220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的普通技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
[0032]任何一个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之间的业务流。
[0033]另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
[0034]PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
[0035]如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PI3U从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
[0036]图3A是根据本发明的一个实施例的、图2的PPU中的一个内的分区单元215的框图。如所示,分区单元215包括L2高速缓存350、帧缓冲区(FB)DRAM接口 355以及光栅操作单元(R0P)360。L2高速缓存350是配置为实施从交叉开关单元210和R0P360所接收的加载和存储操作。读未命中和紧急回写请求由L2高速缓存350输出到FB DRAM接口 355用于处理。脏(dirty)更新也发送到FB355用于伺机性(opportunistic)处理。FB355直接与DRAM220配合,输出读和写请求以及接收从DRAM220所读取的数据。
[0037]在图形应用中,R0P360是实施光栅操作以及输出像素数据作为经处理的图形数据用于图形存储器中的存储的处理单元,所述光栅操作诸如模板、z测试、混合等等。在本发明的实施例中,ROP包括在每个GPC208而不是分区单元215内,并且像素读和写请求在交叉开关单元210而不是像素片段数据之上进行传送。
[0038]经处理的图形数据可以显示在显示设备110上或者被路由用于由CPU102或由并行处理子系统112内的处理实体中的一个进一步处理。每个分区单元215包括R0P360以分布光栅操作的处理。在一些实施例中,R0P360可配置为压缩被写到存储器的z或颜色数据以及解压缩从存储器所读取的z或颜色数据。
[0039]图3B为根据本发明的一个实施例的、图2的通用处理集群(GPC) 208内的流多处理器(SM)310的一部分的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SMD处理机制代表SMT处理机制的功能子集。
[0040]经由将处理任务分布到一个或多个流多处理器(SM)310的管线管理器(未示出)来有利地控制GPC208的操作。其中每个SM310配置为处理一个或多个线程组。每个SM310包括配置为经由GPC208内的L1.5高速缓存(未示出)从存储器接收指令和常量的LI高速缓存370。线程束(warp)调度器和指令单元312从指令LI高速缓存370接收指令和常量并且根据指令和常量来控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec (执行或处理)单元302和P个加载-存储单元(LSU) 303。SM功能单元可以是管线化的,其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、0R、X0R)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
[0041]如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是包括M个流多处理器310的GPC208中的系统在任何给定时间在GPC208中可以执行多达G*M个线程组。
[0042]此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
[0043]在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
[0044]每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
[0045]SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302) —个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由任务元数据(TMD)(未示出)所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD的标识符。
[0046]如果TMD是网格TMD,则TMD的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD中或TMD可以存储指向将由CTA所处理的数据的指针。TMD还存储由CTA所执行的程序的开始地址。[0047]如果TMD是队列TMD,那么使用TMD的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD中或与TMD分开存储,在该情况下TMD存储指向该队列的队列指针。有利地,当代表子任务的TMD正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
[0048]属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
[0049]参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU303)读取但不可由其写入的运行时间参数(常量)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM310内的任何exec单元302)可以通过存储器接口 214访问全局存储器。可以将全局存储器的各部分存储在LI高速缓存320中。
[0050]每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致LI高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通道的一致值或常量值。
[0051]共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在LI高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。[0052]每个SM310中的LI高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在LI高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和LI高速缓存320。
[0053]应该理解,本文所描述的核心架构是示例性的并且变化和修改是可能的。任何数目的处理单元例如SM310可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任何数目的GPC208,其有利地功能上彼此类似使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开并且各异的处理单元、LI高速缓存独立于其他GPC208进行操作以执行用于一个或多个应用程序的任务。
[0054]本领域普通技术人员将理解的是,图1-3B所描述的架构决不限制本发明的范围并且本文所教导的技术可以实现在任何经适当配置的处理单元上而不脱离本发明的范围,所述处理单元包括但不限于一个或多个CPU、一个或多个多核心CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
[0055]图形管线架构
[0056]图4是根据本发明的一个实施例的、图2的PPU202中的一个或多个可配置为实现其的图形处理管线400的示意图。例如,SM310中的一个可配置为实现以下各项中的一个或多个的各功能:顶点处理单元415、曲面细分初始化处理单元420、曲面细分处理单元440、几何处理单元445以及片段处理单元460。基元分布器和顶点属性获取410、任务生成单元425、任务分布器430、拓扑生成单元435、视口缩放、剔除以及修剪单元450、光栅器455以及光栅操作单元465的各功能也可由GPC208内的其他处理引擎以及相应的分区单元215来实施。替代地,图形处理管线400可以使用用于一个或多个功能的专用处理单元来实现。
[0057]图形处理管线400还包括在图形处理管线400当中共享的本地存储器。例如,图形处理管线可以使用SM310内的共享存储器306作为这类本地存储器。如下文进一步所描述的,共享存储器306内的级间缓冲区(未示出)由图形处理管线400内的各处理单元按需要进行分配和解除分配。处理单元从一个或多个级间缓冲区读取输入数据,处理输入数据以产生输出数据,以及将产生的输出数据存储在一个或多个级间缓冲区中。随后的处理单元处理数据并且将输出数据存储在一个或多个级间缓冲区中等等。共享存储器306和图形处理管线的各其他级经由存储器接口 214与外部存储器连接。
[0058]基元分布器和顶点属性获取410处理单元采集用于高阶表面的顶点数据、基元等等,并且将包括顶点属性的顶点数据输出到顶点处理单元415。在一些实施例中,基元分布器和顶点属性获取410可以包括经由存储器接口 214检索顶点属性和存储顶点属性的顶点属性获取单元。在其他实施例中,基元分布器和顶点属性获取410可以包括顶点属性获取单元,其从共享存储器306检索顶点属性并且将顶点属性存储在共享存储器306中。顶点处理单元415是可编程执行单元,其配置为执行顶点着色器程序,照明和变换如由顶点着色器程序所指定的顶点数据。例如,顶点处理单元415可被编程以将顶点数据从基于对象的坐标表示(对象空间)变换到可替代地基于的坐标系,诸如世界空间或规格化设备坐标(NDC)空间。顶点处理单元415可通过基元分布器和顶点属性获取410来读取存储在共享存储器306、LI高速缓存320、并行处理存储器204或系统存储器104中的数据用于在处理顶点数据中使用。顶点处理单元415将经处理的顶点存储在共享存储器306内的级间缓冲区中。[0059]曲面细分初始化处理单元420是配置为执行曲面细分初始化着色器程序的可编程执行单元。曲面细分初始化处理单元420处理由顶点处理单元415所产生的顶点并且生成被称为补丁(patch)的图形基元。曲面细分初始化处理单元420还生成各种补丁属性。曲面细分初始化处理单元420然后将补丁数据和补丁属性存储在共享存储器306内的级间缓冲区中。在一些实施例中,曲面细分初始化着色器程序可以叫做外壳(hull)着色器或曲面细分控制着色器。
[0060]任务生成单元425检索用于来自共享存储器306的级间缓冲区的顶点和补丁的数据和属性。任务生成单元425生成用于处理顶点的任务以及用于由图形处理管线400中的稍后的级处理的补丁。
[0061]任务分布器430重新分布由任务生成单元425所产生的任务。由顶点着色器程序和曲面细分初始化程序的各实例所产生的任务可以在一个图形处理管线400和另一个图形处理管线400之间显著地变化。任务分布器430重新分布这些任务,使得每个图形处理管线400在稍后管线级期间具有接近相同的工作量。
[0062]拓扑生成单元435检索由任务分布器430所分布的任务。拓扑生成单元435对包括与补丁相关联的顶点的顶点进行索引并且计算用于连接经曲面细分的顶点以形成图形基元的索引和曲面细分顶点的(U、V)坐标。拓扑生成单元435然后将经索引的顶点存储在共享存储器306内的级间缓冲区中。
[0063]曲面细分处理单元440是配置为执行曲面细分着色器程序的可编程执行单元。曲面细分处理单元440从共享存储器306的级间缓冲区读取输入数据并且将输出数据写到共享存储器306的级间缓冲区。级间缓冲区中的该输出数据被移交到下一个着色器级几何处理单元445作为输入数据。在一些实施例中,曲面细分着色器程序可以叫做域着色器或曲面细分评估着色器。
[0064]几何处理单元445是配置为执行几何着色器程序从而变换图形基元的可编程执行单元。顶点被分组以构建图形基元用于处理,其中图形基元包括三角形、线段、点等等。例如,几何处理单元445可经编程以将图形基元再分成一个或多个新图形基元以及计算用来将新图形基元进行光栅化的参数,诸如平面方程系数。
[0065]在一些实施例中,几何处理单元445也可以添加或删除几何流中的元素。几何处理单元445将指定新图形基元的参数和顶点输出到视口缩放、剔除以及修剪单元450。几何处理单元445可以读取存储在共享存储器306、并行处理存储器204或系统存储器104中的数据用于在处理几何数据中使用。视口缩放、剔除和修剪单元450实施修剪、剔除和视口变换并且将经处理的图形基元输出到光栅器455。
[0066]光栅器455扫描对新图形基元进行转换并且将片段和覆盖数据输出到片段处理单元460。此外,光栅器455可配置为实施z剔除以及其他基于z的优化。
[0067]片段处理单元460是配置为执行片段着色器程序的可编程执行单元,其变换由片段着色器程序所指定、从光栅器455所接收的片段。例如,片段处理单元460可被编程以实施诸如透视校正、纹理映射、着色、混合等等的操作以产生被输出到光栅操作单元465的经着色片段。片段处理单元460可以读取存储在共享存储器306、并行处理存储器204或系统存储器104中的数据用于在处理片段数据中使用。片段可以在像素、样本或其他粒度(granularity)上进行着色,这取决于所编程的采样率。[0068]光栅操作单元465是实施光栅操作以及输出像素数据作为经处理的图形数据用于图形存储器中的存储的处理单元,所述光栅操作诸如模板、z测试、混合等等。经处理的图形数据可以包括在图形存储器例如并行处理存储器204和/或系统存储器104中用于显示设备110上的显示或者用于由CPU102或并行处理子系统112进一步处理。在本发明的一些实施例中,光栅操作单元465配置为压缩写到存储器的z或颜色数据以及解压缩从存储器读取的z或颜色数据。在各实施例中,R0P465可以位于存储器接口 214、GPC208、GPC外的处理集群阵列230或PPU202内的分开的单元(未示出)中。
[0069]用于曲面细分和几何着色器的电力高效属性处置
[0070]如上文结合图4所描述的,图2的PPU202中的一个或多个内的SM310可配置为实现图形处理管线400中的至少一部分。SM310可配置为实施以下各项中的一个或多个的各功能:顶点处理单元415、曲面细分初始化处理单元420、曲面细分处理单元440、几何处理单元445以及片段处理单元460。基元分布器和顶点属性获取410、任务生成单元425、任务分布器430、拓扑生成单元435、视口缩放、剔除和修剪单元450、光栅器455以及光栅操作单元465的各功能也可以由GPC208内的其他处理引擎和相应的分区单元215来实施。
[0071]在一些实施例中,每个图形处理管线400可以分成世界空间管线和屏幕空间管线。世界空间管线处理3D空间中的图形对象,其中每个图形对象的位置相对于其他图形对象以及相对于3D坐标系是已知的。屏幕空间管线处理已被从3D坐标系投射到表示显示设备110的表面的2D平面上的图形对象。例如,世界空间管线可以包括从基元分布器和顶点属性获取410到视口缩放、剔除和修剪单元450的图形处理管线400中的管线级。屏幕空间管线可以包括从光栅器455到光栅操作单元465的图形处理管线400中的管线级。
[0072]在一些实施例中,世界空间管线可以进一步分成阿尔法(alpha)阶段管线和贝塔(beta)阶段管线。例如,阿尔法阶段管线可以包括从基元分布器和顶点属性获取410到任务生成单元425的图形处理管线400中的管线级。贝塔阶段管线可以包括从拓扑生成单元435到视口缩放、剔除和修剪单元450的图形处理管线400中的管线级。包括相关联的SM310的图形处理管线400在阿尔法阶段管线中的处理期间实施操作的第一集合,以及在贝塔阶段管线中的处理期间实施操作的第二集合。如本文所使用的,操作的集合定义为由单个线程、线程组或CTA所执行的一个或多个指令。
[0073]与图形对象的集合相关联的属性可被划分,使得每个图形处理管线400通过阿尔法阶段具有接近相同量的工作量。阿尔法阶段处理可以显著地扩张图形对象属性的数量,使得由任务生成单元425所产生的属性的数量显著地比由基元分布器和顶点属性获取410所检索的属性的数量更大。进一步地,即使在两个图形处理管线400在阿尔法阶段管线的开始处理相同数量的管线,与一个图形处理管线400相关联的任务生成单元425也可以比与另一个图形处理管线400相关联的任务生成单元425产生显著更大数量的属性。在这种情况下,任务分布器430重新分布由阿尔法阶段管线所产生的属性,使得每个图形处理管线400在贝塔阶段管线的开始具有接近相同的工作量。
[0074]图5示出了根据本发明的一个实施例的、图3B的共享存储器306的分配图500。如所示,分配图500包括阿尔法阶段期间的分配510和贝塔阶段期间的分配540。
[0075]阿尔法阶段期间的分配510示出了在顶点着色器程序由顶点处理单元415执行之前共享存储器306的分配。如所示,分配包括用于顶点着色器输入520的片段和用于顶点着色器输出530的区段。顶点着色器输入520包括与由基元分布器和顶点属性获取410所指派到顶点着色器程序的图形对象相关联的参数。顶点处理单元415根据顶点着色器程序检索来自顶点着色器输入520的参数并且处理相关联的图形对象。顶点处理单元415然后将经修改的属性存储在顶点着色器输出530中。在一些实施例中,图形对象可能不经历曲面细分。在这种情况下,曲面细分输入处理单元420和曲面细分处理单元440被绕过,任务生成单元425直接检索顶点着色器输出530。如上文结合图4所描述的,任务生成单元准备用于贝塔阶段管线的任务。
[0076]因为顶点着色器程序的各实例可以生成数量彼此不同的工作量,所以任务分布器430在贝塔阶段管线处理之前重新分布图形处理管线400当中的任务。作为结果,由给定的图形处理管线在阿尔法阶段期间所处理的图形对象可能不一定在贝塔阶段期间由相同图形处理管线400来处理。例如,顶点处理单元415可以在阿尔法阶段期间处理单个图形对象,并且作为结果,产生大量产生的图形对象。在这种情况下,任务分布器430可将图形对象重新分布到一个或多个图形处理管线400用于贝塔阶段,其可以或可以不包括在阿尔法阶段期间处理图形对象的图形处理管线400。如果针对贝塔阶段被指派以处理图形对象的所有图形处理管线400与针对阿尔法阶段所指派的图形处理管线在相同SM310中,那么顶点着色器输出530不需要被拷贝到外部存储器诸如L2高速缓存350中。而是,顶点着色器输出530仍然保持驻留在本地共享存储器306中用于贝塔阶段期间的处理。
[0077]贝塔阶段期间的分配540示出了几何着色器程序由几何处理单元445执行之前的共享存储器306的分配。如所示,分配包括用于顶点着色器输出530的片段和用于几何着色器输出550的区段。顶点着色器输出530包括与由任务分布器430所指派到几何着色器程序的图形对象相关联的参数。拓扑生成单元435对来自顶点着色器输出530的顶点进行索引并且计算与顶点相应的纹理坐标。几何处理单元445根据几何着色器程序检索来自顶点着色器输出530的经索引参数以及处理相关联的图形对象。几何处理单元445然后将经进一步修改的属性存储在几何着色器输出550中。几何着色器输出550然后被转移到屏幕空间管线。
[0078]在具有单个SM310的系统中,同一 SM310处理阿尔法和贝塔工作量二者。因此,与图形对象相关联的属性可以在阿尔法和贝塔阶段之间仍然保持驻留在本地于SM310的存储器诸如共享存储器306中。阿尔法阶段数据仍然恰当地保持在SM310的共享存储器306中并且不被拷贝到L2高速缓存350。图形处理管线400从本地共享存储器306检索重新分布在SM310内的图形处理管线400当中的贝塔工作量。
[0079]在一些实施例中,可以使用先进先出(FIFO)分配策略来配置共享存储器306的顶点着色器输出520、顶点着色器输出530以及几何着色器输出550区域,提供简化的硬件实现方案并且避免死锁。第一区域可以在阿尔法阶段期间针对顶点着色器输入520进行分配,并且可以在贝塔阶段期间针对几何着色器输出550进行分配。一旦顶点着色器程序的实例已完成处理,则顶点着色器输入520可以解除分配。在顶点着色器输入520被解除分配之后,第一区域可以针对几何着色器输出550进行分配。第二区域可以针对来自阿尔法阶段的顶点着色器输出530进行分配以存储由最后的阿尔法级着色程序所生成的属性。顶点着色器输出530区域中的数据可以仍然保持驻留在共享存储器306中并且在所有阿尔法线程束已完成执行之后被分配。在贝塔阶段期间,几何着色器程序的实例可以直接访问来自分配在第二区域中的着色器输出530的输入属性。一旦几何着色器程序的实例已完成处理,则顶点着色器输出530可以解除分配。一旦几何着色器输出550中的数据被转移到屏幕空间管线,则几何着色器输出550可以解除分配。
[0080]在完成贝塔阶段处理之后,共享存储器306的顶点着色器输出530和几何着色器输出500区域二者针对其他图形对象可用于随后的阿尔法阶段。处理以在阿尔法和贝塔直接交替的图形管线继续用于图形对象的不同集合,转移使用本地共享存储器306内的两个区域的属性。
[0081]在一些实施例中,顶点着色器程序可能具有比可存储在顶点着色器输入520中的数据更多的顶点数据要处理。在这种情况下,顶点着色器程序可以处理存储在顶点着色器输入520中的顶点数据,将结果存储在顶点着色器输出530中,直到顶点着色器输入520几乎空。顶点着色器输入520的各部分可以解除分配,并且然后被重新分配以接收附加的顶点数据用于处理。顶点着色器程序可以继续访问顶点数据直到顶点着色器输出530几乎满。图形处理管线400然后可以进入贝塔阶段以处理存储在顶点着色器输出530中的数据。
[0082]在一些实施例中,处理顶点着色器输出530可以导致产生比可存储在几何着色器输出550中的数据更多的数据。在这种情况下,几何着色器程序可以处理图形对象并且将输出数据存储在几何着色器输出550中直到几何着色器输出550几乎满。几何着色器输出550然后可被转移到屏幕空间管线,并且几何着色器输出550可以解除分配。几何着色器程序可以继续处理图形对象并且将输出数据存储在几何着色器输出550中,直到几何着色器输出550再次几乎满。几何着色器输出550可再次被转移到屏幕空间管线。过程可以继续直到贝塔处理完成。
[0083]在这种情况下,顶点着色器输出530区域的大小可经调整大小以存储来自顶点着色器程序的单个线程束的数据输出的最大大小。顶点着色器输入520/几何着色器输出550区域可经调整大小以存储来自顶点着色器程序的单个线程束的数据输入的最大大小或来自几何着色器程序的单个线程束的数据输出的最大大小。例如,顶点着色器输出530区域的大小可以是16.75kb (千字节),顶点着色器输入520/几何着色器输出550区域的大小可以是31.25kb。共享存储器306的总大小将是48kb。
[0084]图6示出了根据本发明的另一个实施例的、图3B的共享存储器306的分配图600。如所示,分配图600包括阿尔法阶段期间的分配610和贝塔阶段期间的分配640。除如下文所进一步描述的,阿尔法阶段期间的分配610和贝塔阶段期间的分配640功能与图5中的相似分配相同。
[0085]阿尔法阶段期间的分配示出了顶点着色器程序由顶点处理单元415执行之前共享存储器306的分配。如所示,分配包括用于顶点着色器输入和顶点着色器输出620的片段和用于曲面细分初始化着色器输出530的区段。顶点处理单元415根据顶点着色器程序检索来自顶点着色器输入和顶点着色器输出620的参数并且处理相关联的图形对象。顶点处理单元415然后将经修改的属性存储在顶点着色器输入和顶点着色器输出620中。曲面细分初始化处理单元420根据曲面细分初始化程序从顶点着色器输入和顶点着色器输出620检索由顶点处理单元415所处理的图形对象并且处理相关联的图形对象。曲面细分输入处理单元420然后将与图形对象相关联的经修改属性存储在曲面细分初始化着色器输出630中。任务生成单元425检索曲面细分初始化着色器输出630。如上文结合图4所描述的,任务生成单元准备用于贝塔阶段管线的任务。
[0086]因为曲面细分初始化着色器程序的各实例可以生成数量彼此不同的工作量,所以任务分布器430在贝塔阶段管线处理之前重新分布图形处理管线400当中的任务。作为结果,由给定的图形处理管线在阿尔法阶段期间所处理的图形对象可能不一定在贝塔阶段期间由相同图形处理管线400来处理。例如,曲面细分初始化处理单元420可以在阿尔法阶段期间处理单个图形对象,并且作为结果,产生大量产生的图形对象。在这种情况下,任务分布器430可将图形对象重新分布到一个或多个图形处理管线400用于贝塔阶段,其可以或可以不包括在阿尔法阶段期间处理图形对象的图形处理管线400。如果针对贝塔阶段被指派以处理图形对象的所有图形处理管线400与针对阿尔法阶段所指派的图形处理管线在相同SM310中,那么曲面细分初始化着色器输出630不需要被拷贝到外部存储器诸如L2高速缓存350中。而是,曲面细分初始化着色器输出630仍然保持驻留在本地共享存储器306中用于贝塔阶段期间的处理。
[0087]贝塔阶段期间的分配640示出了曲面细分着色器程序由曲面细分处理单元440执行之前的共享存储器306的分配。如所示,分配包括用于曲面细分初始化着色器输出630的片段和用于曲面细分着色器输出和几何着色器输出650的区段。曲面细分初始化着色器输出630包括与由任务分布器430所指派到曲面细分着色器程序的图形对象相关联的参数。拓扑生成单元435对来自曲面细分初始化着色器输出630的顶点进行索引并且计算用于连接经曲面细分的顶点以形成图形基元的索引和曲面细分顶点的(U、V)坐标。曲面细分处理单元440根据曲面细分着色器程序检索来自曲面细分初始化着色器输出630的经索引参数以及处理相关联的图形对象。曲面细分处理单元440然后将结果存储在曲面细分着色器输出和几何着色器输出650的曲面细分着色器输出部分中。几何处理单元445然后根据几何着色器程序从曲面细分着色器输出和几何着色器输出650的曲面细分着色器输出部分检索曲面细分着色器结果并且处理相关联的图形对象。几何处理单元445然后将经进一步修改的属性存储在曲面细分着色器输出和几何着色器输出650的几何着色器输出部分中。几何着色器输出然后被转移到屏幕空间管线。
[0088]应该理解,本文所描述的架构仅是示例性的并且变化和修改是可能的。在一个示例中,本文在具有48kb的存储容量的共享存储器以及共享存储器306的两个部分之间的具体分段的上下文中对技术进行描述。然而,可使用任何技术上可行的大小的共享存储器306和分段分割来采用所描述的技术。在另一个示例中,共享存储器的两个部分之间的分段可以是固定的或者可在图形处理期间动态地进行改变。
[0089]图7A-7B阐述了根据本发明的一个实施例的、用于重新分布由图形处理单元所处理的图形对象的属性的方法步骤的流程图。尽管结合图1-6的系统描述了方法步骤,但是本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。
[0090]如所示,方法700开始于步骤702,在该处SM310从共享存储器的第一部分内的缓冲区的第一集合检索与图形对象的集合相关联的参数的第一集合,其中缓冲区的第一集合先前已被分配。在步骤704,SM310处理利用由顶点处理单元所执行的顶点着色器程序来处理参数的第一集合,产生顶点输出数据。在步骤706,SM310将顶点输出数据存储在缓冲区的第一集合中。在步骤708,SM310利用由曲面细分初始化处理单元所执行的曲面细分着色器程序来处理所存储的顶点输出数据,产生曲面细分初始化输出数据。在步骤710,SM310将参数的第二集合设定为曲面细分初始化输出数据。在步骤712,SM310为共享存储器的第二部分内的缓冲区的第二集合分配空间用于参数的第二集合的存储。在步骤714,SM310将参数的第二集合存储在缓冲区的第二集合中。在步骤716,SM310将缓冲区的第一集合解除分配。
[0091]在步骤718,SM310在进一步处理之前将参数的第二集合重新分布在多个图形处理管线中的图形处理管线当中。在步骤720,SM310利用由曲面细分处理单元所执行的曲面细分着色器程序来处理参数的第二集合,产生曲面细分输出数据。在步骤722,SM310为共享存储器的第一部分内的缓冲区的第三集合分配空间用于存储。在步骤724,SM310将曲面细分输出数据存储在缓冲区的第三集合中。在步骤726,SM310利用由几何处理单元所执行的几何着色器程序来处理所存储的曲面细分输出数据,产生几何输出数据。在步骤728,SM310将参数的第三集合设定为几何输出数据。在步骤730,SM310将参数的第三集合存储在缓冲区的第三集合中。在步骤732,SM310将缓冲区的第二集合解除分配。在步骤734,SM310将缓冲区的第三集合转移到SM310内的一个或多个图形处理管线400中的管线级中的稍后的级。例如,SM310将缓冲区的第三集合转移到图形处理管线400的视口缩放、剔除和修剪单元450。在步骤736,SM310将缓冲区的第三集合解除分配。方法700然后终止。
[0092]总而言之,与一个或多个图形对象相关联的属性存储在本地于流多处理器(SM)的共享存储器的第一部分中。SM将属性分布到图形处理管线用于处理。图形处理管线从共享存储器的第一部分检索属性。图形处理管线实施与图形处理的第一阶段相关的操作,创建经修改的属性用于在图形处理的第二阶段中使用。图形处理管线将经修改的属性存储在共享存储器的第二部分中。SM然后将经修改的属性重新分布到图形处理管线来为图形处理的第二阶段作准备。图形处理管线从共享存储器的第二部分检索经修改的属性。图形处理管线实施与图形处理的第二阶段相关的操作,创建经进一步修改的属性用于附加的图形处理。图形处理管线将经进一步修改的属性存储在共享存储器的第一部分中。经进一步修改的属性然后从共享存储器的第一部分被转移到图形处理管线中的稍后的级。
[0093]所公开技术的一个优势在于,工作从图形处理的第一阶段到图形处理的第二阶段被重新分布在单个流多处理器系统中而不必须将图形对象的属性拷贝到高速缓存或系统存储器以及然后稍后从这些存储器中的一个检索属性。将属性拷贝到远程存储器以及从远程存储器检索属性典型地涉及激励多级存储器层级中的多个芯片外存储器、控制器和接口部件,所述远程存储器诸如高速缓存或系统存储器。将属性拷贝到远程存储器以及从远程存储器检索属性还涉及将一些部件从低功耗状态转变到高功耗状态。访问本地共享存储器典型地不涉及激励或改变芯片外部件的电力状态。因此,所公开技术降低总功耗并且起延长移动设备中的电池充电周期之间的操作时间的作用。
[0094]本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的光盘只读存储器(CD-ROM)盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息jP(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
[0095]以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和变化而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是例示性而非限制性的意义。
[0096]因此,本发明的实施例的范围由下面的权利要求书进行阐述。
【权利要求】
1.一种用于在多个图形处理管线中处理图形对象的属性的方法,所述方法包括: 从缓冲区的第一集合检索与图形对象的集合相关联的参数的第一集合; 根据处理的第一阶段对所述参数的第一集合实施操作的第一集合以产生参数的第二集合; 将所述参数的第二集合存储在缓冲区的第二集合中; 根据处理的第二阶段对所述参数的第二集合实施操作的第二集合以产生参数的第三集合;以及 将所述参数的第三集合存储在缓冲区的第三集合中
2.根据权利要求1所述的方法,进一步包括: 在共享存储器的第一部分内为所述缓冲区的第一集合分配空间;以及 在所述共享存储器的第二部分内为所述缓冲区的第二集合分配空间。
3.根据权利要求2所述的方法,进一步包括: 针对所述缓冲区的第一集合解除分配所述空间;以及 在所述共享存储器的所述第一部分内为所述缓冲区的第三集合分配空间。
4.根据权利要求1所述的方法,进一步包括,在实施操作的所述第二集合之前,跨所述多个图形处理管线将所述参数的第二集合进行重新分布。
5.根据权利要求1所述的方法,进一步包括将所述缓冲区的第三集合的内容转移到包括在所述多个图形处理管线中的第一图形处理管线中的稍后的级。
6.根据权利要求1所述的方法,其中实施操作的所述第一集合包括: 利用由顶点处理单元所执行的顶点着色器程序处理参数的所述第一集合以产生顶点输出数据;以及将参数的所述第二集合指定为所述顶点输出数据。
7.根据权利要求6所述的方法,其中实施操作的所述第二集合包括: 利用由几何处理单元所执行的几何着色器程序处理参数的所述第二集合以产生几何输出数据;以及 将参数的所述第三集合指定为所述几何输出数据。
8.根据权利要求1所述的方法,其中实施操作的所述第一集合包括: 利用由顶点处理单元所执行的顶点着色器程序处理参数的所述第一集合以产生顶点输出数据; 将所述顶点输出数据存储在缓冲区的所述第一集合中; 利用由曲面细分初始化处理单元所执行的曲面细分初始化着色器程序处理所述所存储的顶点输出数据以产生曲面细分初始化输出数据;以及 将参数的所述第二集合指定为所述曲面细分初始化输出数据。
9.根据权利要求8所述的方法,其中实施操作的所述第二集合包括: 利用由曲面细分处理单元所执行的曲面细分着色器程序处理参数的所述第二集合以产生曲面细分输出数据; 将所述曲面细分输出数据存储在缓冲区的所述第三集合中; 利用由几何处理单元所执行的几何着色器程序处理所述所存储的曲面细分输出数据以产生几何输出数据;以及 将参数的所述第三集合指定为所述几何输出数据。
10.一种子系统,包括: 流多处理器,其配置为通过实施以下步骤在第一处理阶段和第二处理阶段之间重新分布图形处理管线中的图形对象的属性: 从缓冲区的第一集合检索与图形对象的集合相关联的参数的第一集合; 根据处理的第一阶段对参数的所述第一集合实施操作的第一集合以产生参数的第二集合; 将参数的所述第二集合存储在缓冲区的第二集合中; 根据处理的第二阶段对参数的所述第二集合实施操作的第二集合以产生参数的第三集合;以及 将参数的所述 第三集合存储在缓冲区的第三集合中。
【文档编号】G06T15/00GK103996216SQ201310752252
【公开日】2014年8月20日 申请日期:2013年12月31日 优先权日:2013年2月20日
【发明者】济亚德·S·哈库拉, 戴尔·L·柯克兰 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1