用于存储共享顶点的技术的制作方法

文档序号:6525051阅读:136来源:国知局
用于存储共享顶点的技术的制作方法
【专利摘要】公开了用于存储共享顶点的技术。图形处理单元包括几何处理单元集,每个几何处理单元配置为彼此并行地处理图形图元。给定的几何处理单元生成一个或多个图形图元或一个或多个几何对象并且本地地缓存相关联的顶点数据。几何处理单元还缓存至那些顶点的不同索引集,其中每个这类集代表不同的图形图元或几何对象。几何处理单元可以之后彼此并行地将所缓存的顶点和索引流传输到全局缓冲区。流输出同步单元通过为每个几何处理单元提供全局顶点缓冲区内的、顶点可以被写入的不同基地址来协调顶点和索引的并行流传输。流输出同步单元还为每个几何处理单元提供全局索引缓冲区内的、索引可以被写入的不同基地址。
【专利说明】用于存储共享顶点的技术
【技术领域】
[0001]本发明涉及处理图形数据,并且更具体地,涉及用于存储共享顶点的技术。
【背景技术】
[0002]常规的图形处理单元(GPU)典型地实现包括图形处理级序列的图形处理管线。在图形处理管线中的每级处,GPU可以实施一个或多个不同的面向图形的处理操作。例如,在一级处,GPU可以集合代表图形场景的图元集,并且在随后的级处GPU可以利用与该图元集相关联的顶点实施着色操作。最后,GPU可以将这些顶点光栅化到代表图形场景的像素中。
[0003]实现诸如以上示例中所描述的常规图形处理管线的GPU典型地包括几何着色单元,该几何着色单元配置为利用顶点和基于几何的信息实施着色操作并且之后将具有相对较大复杂度的一个或多个图形图元或一个或多个几何对象输出到随后的单元用于光栅化。对于每个所生成的图形图元或几何对象,几何着色单元输出和与该图形图元或几何对象相关联的每个顶点相对应的顶点数据。例如,当处理三角形时,几何着色单元将输出用于该三角形的三个顶点中的每一个的顶点数据。用于给定顶点的顶点数据可以描述顶点在场景内的位置,与顶点相关联的覆盖数据或与顶点相关联的属性集等等。当生成图形图元或几何对象时,几何着色单元典型地将每个所生成的图形图元或构成所生成的几何对象的全部或一部分的每个图形图元存储为与该图元相关联的顶点集和与该集中的每个顶点相对应的顶点数据。
[0004]另外,在一些情况下,几何着色单元可以生成包括互相连接的图形图元的集合的几何对象,该互相连接的图形图元共享顶点。几何对象可以是例如扇型、条型或网型的几何对象。例如,给定的图形场景可以包括以扇、条或网相互连接的许多单独的图形图元以创建具有任意形状的表面的外观。表面内的每个图形图元可以由一个或多个顶点连接到邻近的图形图元,该一个或多个顶点在两个图形图元之间共享。在其他情况下,可以由几何着色单元生成共享一个或多个公共顶点的多个几何对象,诸如三角形或条状。
[0005]在这些不同的情况下,几何着色单元典型地存储与在图形图元或几何对象之间共享的每个顶点相关联的顶点数据的冗余拷贝。然而,该方法因为典型的图形场景可能包括数百万共享顶点而成问题。因此,常规的几何着色单元可能存储数百万冗余数据的拷贝。处理该冗余数据低效地消耗GPU资源并且可降低图形场景可被渲染的速度。
[0006]因此,本领域需要用于处理在图形场景内的图形图元或几何对象之间所共享的顶点的改进技术。

【发明内容】

[0007]本发明的一个实施例阐述用于填充多个全局缓冲区的计算机实现的方法,包括从第一处理单元接收指示第一本地索引缓冲区内的、由第一处理单元所生成的若干条目的数据,其中第一处理单元包括在多个处理单元中,以及将全局索引缓冲区内的第一基地址传送到第一处理单元,该全局索引缓冲区内的第一基地址反映全局索引缓冲区内的、第一本地索引缓冲区内的条目应该被写入的第一位置,其中第一全局索引缓冲区内的第一基地址基于全局索引缓冲区内的、已经分配到包括在多个处理单元中的至少一个其他处理单元的若干条目。
[0008]所公开的方法的一个优势是,因为顶点数据被索引,所以顶点数据的冗余拷贝不存储在本地于不同几何着色单元的顶点缓冲区或全局顶点缓冲区中,由此节约了处理单元资源并且增加整体处理效率。
【专利附图】

【附图说明】
[0009]因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
[0010]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
[0011]图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
[0012]图3是根据本发明的一个实施例的、图2的通用处理集群内的流多处理器的一部分的框图;
[0013]图4是根据本发明的一个实施例的、图2的并行处理单元中的一个或多个可以配置为实现其的图形处理管线的示意图;
[0014]图5是根据本发明的一个实施例的、几何处理单元的集合的示意图;
[0015]图6是根据本发明的一个实施例的、用于将顶点数据和索引数据存储在多个本地缓冲区内的方法步骤的流程图;
[0016]图7是根据本发明的一个实施例的、用于将顶点和索引流传输(stream)到多个全局缓冲区的方法步骤的流程图;
[0017]图8是根据本发明的一个实施例的、用于填充多个全局缓冲区的方法步骤的流程图;
[0018]图9是根据本发明的一个实施例的、示出了配置为本地地缓存索引和顶点的示例性几何处理单元的示意图;以及
[0019]图10是根据本发明的一个实施例的、示出了配置为存储索引或顶点的示例性全局缓冲区的示意图。
【具体实施方式】
[0020]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他实例中,未描述公知特征以避免对本发明造成混淆。
[0021]系统概述
[0022]图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提供非易失性存储用于应用和数据并且可以包括固定的或可移动的硬盘驱动器、闪存设备和⑶-ROM (光盘只读存储器)、DVD-R0M (数字多功能光盘ROM)、蓝光、HD-DVD (高清DVD)或其他磁性、光学或固态存储设备。[0023]交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(⑶)驱动器、数字多功能光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PC1-EXpreSS、AGP (加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
[0024]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
[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]图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
[0027]再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PPU202可以是同样的或不同的,并且每个PPU202可具有一个或多个专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
[0028]在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
[0029]现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
[0030]在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
[0031]有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
[0032]GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
[0033]存储器接口 214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D > I。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM) 220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的普通技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
[0034]任何一个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之间的业务流。
[0035]另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
[0036]PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
[0037]如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PI3U从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
[0038]可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。
[0039]图3是根据本发明的一个实施例的、图2的GPC208内的流多处理器(SM)310的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(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、OR、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可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD322的标识符。
[0046]如果TMD322是网格TMD,则TMD322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD322中或TMD322可以存储指向将由CTA所处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。
[0047]如果TMD322是队列TMD,那么使用TMD322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD322分开存储,在该情况下TMD322存储指向该队列的队列指针。有利地,当代表子任务的TMD322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
[0048]属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD322相关联用于一个或多个任务的并发执行。此外,单个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-3所描述的架构不以任何方式限制本发明的范围并且本文所教导的技术可以在任何经恰当配置的处理单元上加以实现,包括但不限于一个或多个CPU、一个或多个多核心CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等,而不脱离本发明的范围。[0055]图形管线架构
[0056]图4是根据本发明的一个实施例的、图2的PPU202中的一个或多个可以配置为实现其的图形处理管线400的示意图。例如,SM310之一可以配置为实施顶点处理单元415、几何处理单元425和片段处理单元460中的一个或多个的功能。数据汇编器410、图元汇编器420、光栅化器455和光栅操作单元465的功能还可以由GPC208内的其他处理引擎和相应的分区单元215。可替代地,可以使用针对一个或多个功能的专用处理单元实现图形处理管线400。
[0057]数据汇编器410处理单元收集顶点数据用于高阶表面、图元等并且将顶点数据包括顶点属性输出到顶点处理单元415。顶点处理单元415是可编程的执行单元,其配置为执行顶点着色器程序、照明和转换如由顶点着色器程序所指定的顶点数据。例如,顶点处理单元415可以经编程为将顶点数据从基于对象的坐标表示(对象空间)转换为基于其他的坐标系,诸如世界空间或规格化设备坐标(NDC)空间。顶点处理单元415可以读由数据汇编器410存储在LI高速缓存320、并行处理存储器204或系统存储器104中的数据用于在处理顶点数据时使用。
[0058]图元汇编器420从顶点处理单元415接收顶点属性,根据需要读所存储的顶点属性,以及构建图形图元用于由几何处理单元425处理。图形图元包括三角形、线段、点等等。几何处理单元425是配置为执行几何着色器程序的可编程执行单元,如由几何着色器程序所指定的转换从图元汇编器420所接收的图形图元。例如,几何处理单元425可以经编程以将图形图元细分为一个或多个新的图形图元并且计算用来光栅化新的图形图元的参数,诸如平面方程系数。图元处理单元425还可以经编程以基于从图元汇编器420所接收的图形图元生成附加的图形图元或由一个或多个图形图元所构成的一个或多个几何对象。
[0059]在一些实施例中,几何处理单元425还可以在几何流中添加或删除元素。几何处理单元425将指定新的图形图元的参数和顶点输出到视窗(Vi ewport)缩放、剔除(cu11)和裁剪(clip)单元450。几何处理单元425可以读存储在并行处理存储器204或系统存储器104中的数据用于在处理几何数据时使用。视窗缩放、剔除和裁剪单元450实施裁剪、剔除和视窗缩放并且将经处理的图形图元输出到光栅化器455。
[0060]光栅化器455扫描转化新的图形图元并且将片段和覆盖数据输出到片段处理单元460。此外,光栅化器455可以配置为实施z剔除和其他基于z的优化。
[0061]片段处理单元460是配置为执行片段着色器程序的可编程执行单元,如由片段着色器程序所指定的转换从光栅化器455所接收的片段。例如,片段处理单元460可以经编程以实施诸如透视校正、纹理映射、着色、混合等的操作以产生被输出到光栅操作单元465的经着色片段。片段处理单元460可以读存储在并行处理存储器204或系统存储器104中的数据用于在处理片段数据时使用。片段可以取决于经编程的采样速率而以像素、样本或其他粒度被着色。
[0062]光栅操作单元465是实施诸如模板(stencil)、z测试、混合等光栅操作并且将像素数据作为经处理的图形数据输出用于存储在图形存储器中的处理单元。经处理的图形数据可以存储在图形存储器中用于显示在显示设备Iio上或用于进一步由CPU102或并行处理子系统112进行处理,该图形存储器例如并行处理存储器204和/或系统存储器104。在本发明的一些实施例中,光栅操作单元465配置为压缩被写到存储器的z或颜色数据以及解压缩从存储器读取的Z或颜色数据。
[0063]在图形图元之间共享的处理顶点
[0064]图5是根据本发明的一个实施例的、示出了包括几何处理单元550-0至550-N的子系统500的示意图。如所示的,几何处理单元550-0至550-N中的每一个耦连到流输出同步(SSYNC)单元514、全局索引缓冲区516和全局顶点缓冲区518。每个几何处理单元550包括几何着色单元504、包括本地索引缓冲区508和本地顶点缓冲区510的缓冲区506以及流输出单元512。
[0065]如所示的,几何着色单元504-0包括几何着色单元504-0、包括本地索引缓冲区508-0和本地顶点缓冲区510-0的缓冲区506-0以及流输出单元512-0。同样地,几何着色单元504-1包括几何着色单元504-1、包括本地索引缓冲区508-1和本地顶点缓冲区510-1的缓冲区506-1以及流输出单元512-1,并且几何着色单元504-N包括几何着色单元504-N、包括本地索引缓冲区508-N和本地顶点缓冲区510-0的缓冲区506-N以及流输出单元512-N。在下面的描述中,类似对象的多个实例用标识对象的参考标号以及当需要时用标识实例的带有连字符的参考标号表示。
[0066]几何处理单元550配置为处理图形图元或几何对象502以及生成一个或多个几何图元或由一个或多个图形图元所构成的一个或多个图形对象。图形处理单元550进一步配置为之后将与所生成的图形图元或几何对象相关联的顶点数据和索引信息分别流传输到全局顶点缓冲区518和全局索引缓冲区516。SSYNC单元514配置为协调跨不同的几何处理单元550的对该数据的流传输。
[0067]几何处理单元550可以由图3所示的SM310实现并且可以代表图4所示的图形处理管线400内的处理级。在一个实施例中,几何处理单元550类似于图4所示的几何处理单元425。几何处理单元550内的几何着色单元504配置为从诸如图4所示的图元汇编器420的上游处理单元接收图形图元或几何对象502。图形图元可以代表例如三角形、矩形、线段、点或其他类型的图形图元。几何对象可以代表较高级图形结构,该较高级图形结构可以由单个图形图元组成或可以被分解为图形图元的集合,其中该集合可以代表条型、扇型或网型几何对象。在各实施例中,图形图元或几何对象502可以代表图形场景的一部分或可以和与几何处理单元550相关联的显示屏的特定区域相对应。
[0068]当几何处理单元550接收图形图元或几何对象502时,几何着色单元504配置为对与图形图元或几何对象502相关联的顶点和其他信息实施一个或多个几何着色操作。与给定图形图元或几何对象502相关联的顶点和其他信息可以代表例如三角形或其他多边形的角。那些顶点和其他信息还可以包括与图形图元或几何对象502相关联的顶点属性以及其他类型的顶点数据。几何着色单元504配置为将与由几何着色单元504所生成的一个或多个图形图元或一个或多个几何对象相关联的顶点数据存储在本地顶点缓冲区510内。
[0069]在几何着色单元504生成共享给定顶点的不同的图形图元或几何对象的情况下,诸如当将几何对象502细分为较小的图形图元时,几何着色单元504配置为仅在本地顶点缓冲区510内缓存所共享的顶点和相关联的顶点数据一次。利用该方法,几何着色单元504有利地避免缓存顶点和相关联的顶点数据的冗余拷贝。例如,几何着色单元504可以接收单个的图形图元502并且之后基于图形图元502生成彼此共享顶点的图形图元的集合。所生成的图形图元的集合将是“条”、“扇”或“网”结构。在该情况下,几何着色单元504仅在本地顶点缓冲区510内存储每个唯一的顶点一次。
[0070]几何着色单元504还配置为通过生成到本地顶点缓冲区510的索引集来维护用于图形图元502的连接信息,该索引集引用与由几何着色单元504所生成的图形图元或图形对象相关联的顶点。在一个实施例中,几何着色单元504可以确定给定顶点已经驻留在本地顶点缓冲区510内,并且可以之后生成索引集以包括引用给定顶点的索引,即不在本地顶点缓冲区510内重新存储该顶点。几何着色单元504配置为将用于每个所生成的图形图元或几何对象的索引集存储在本地索引缓冲区508的条目内。一般地,本地索引缓冲区508中的条目内的每个顶点可以与存储在本地顶点缓冲区510中的不同顶点相对应,并且存储在本地索引缓冲区508中的条目内的索引集可以与特定的图形图元、特定的几何对象或代表图形场景内的对象的任何顶点集合相对应。例如,几何着色单元504还可以存储代表较高级几何对象的索引集,该较高级几何对象诸如可被分解为多个相互连接的图形图元的“大”多边形,多个相互连接的图形图元包括条型、扇型和网型对象。
[0071]本地索引缓冲区508内的索引集可以直接引用本地顶点缓冲区510内的不同顶点,即通过指定本地顶点缓冲区510内的各地址。可替代地,索引集还可以通过指定本地顶点缓冲区510内的本地偏移或本地顶点缓冲区510内的本地索引来引用不同顶点。
[0072]在不同时间,耦连到缓冲区506的流输出单元512可以分别将存储在本地顶点缓冲区510内的顶点和存储在本地索引缓冲区508内的索引流传输到全局顶点缓冲区518和全局索引缓冲区516。然而,在这样做之前,流输出单元512配置为首先确定存储在本地顶点缓冲区510中的顶点的数目以及存储在本地索引缓冲区508中的索引的数目。流输出单元512之后将这些数目传达给SSYNC单元514。
[0073]SSYNC单元514利用全局顶点缓冲区518内的基地址和全局索引缓冲区516内的基地址对流输出单元512进行响应。全局顶点缓冲区518内的基地址代表该缓冲区内的、流输出单元512可以安全地写入由流输出单元512传达给SSYNC单元514的顶点的数目的位置。同样地,全局索引缓冲区516内的基地址代表该缓冲区内的、流输出单元512可以安全地写入由流输出单元512传达给SSYNC单元514的索引的数目的位置。
[0074]SSYNC单元514配置为使用以下所更详细地描述的技术来生成这些基地址。一旦接收到全局顶点缓冲区内的基地址,流输出单元512之后就可以从该基地址开始将本地顶点缓冲区510内的顶点拷贝到全局顶点缓冲区518。此外,一旦接收到全局索引缓冲区内的基地址,流输出单元512之后就可以从该基地址开始将本地索引缓冲区508内的索引拷贝到全局索引缓冲区516。
[0075]当将索引从本地索引缓冲区508拷贝到全局索引缓冲区516时,流输出单元512配置为更新那些索引以反映在全局顶点缓冲区518内的所引用的顶点的新位置。在一个实施例中,流输出单元512将每个索引增量等于全局顶点缓冲区518内的基地址的值。
[0076]利用以上的方法,几何处理单兀550-0至550-N中的每一个配置为彼此并行地处理图形图元或几何对象并且之后将该处理的结果以及相关联的索引缓存在本地缓冲区内。之后可以将本地缓存的顶点和索引数据流传输到全局缓冲区。
[0077]如以上所提及的,SSYNC单元514配置为协调不同几何处理单元550之间的、顶点和索引分别到全局顶点缓冲区518和全局索引缓冲区516的流传输。实际上,SSYNC单元514配置为根据序列为流输出单元512-0至512-N中的每一个服务。这样做时,SSYNC单元514根据该序列将全局顶点缓冲区518内的基地址和全局索引缓冲区516内的基地址传达给每个流输出单元512-0至512-N。在一个实施例中,序列是应用编程接口(API)顺序。在进一步的实施例中,序列由在几何处理单元550上执行的软件应用所定义,并且该软件应用的编程器确定序列。
[0078]SSYNC单元514配置为,当顺序地为那些流输出单元512服务时,向每个流输出单元512提供全局索引缓冲区516内的不同的基地址和本地索引缓冲区518内的不同的基地址。因此,每个不同的流输出单元512能够分别将顶点和索引写到全局顶点缓冲区518和全局索引缓冲区516的不同部分。在一个实施例中,每个流输出单元512能够分别将顶点和索引写到全局顶点缓冲区518和全局索引缓冲区516,这与其他流输出单元512将顶点和索引写到那些缓冲区并行进行。
[0079]SSYNC单元514基于由序列中的先前流输出单元512写到全局顶点缓冲区518的顶点的数目确定用于序列中的给定流输出单元512的全局顶点缓冲区518内的基地址。更具体地,SSYNC单元514维护全局顶点缓冲区518内的“当前”基地址,其指示全局顶点缓冲区518内的、顶点可以被安全地写入的位置。一旦接收到指示将要由特定流输出单元512写到全局顶点缓冲区518的顶点的数目的数据,SSYNC单元514就将全局顶点缓冲区518内的“当前”基地址传送到该流输出单元512用于当写顶点时使用。SSYNC单元514之后基于该顶点的数目并且基于那些顶点的大小更新全局顶点缓冲区518内的“当前”基地址。随后,全局顶点缓冲区518内的经更新的基地址代表该缓冲区内的、流输出单元512的序列中的随后流输出单元512可以安全地将顶点数据写入的位置。
[0080]SSYNC单元514还基于由序列中的先前流输出单元512写到全局索引缓冲区516的索引的数目确定用于序列中的给定流输出单元512的全局索引缓冲区516内的基地址。更具体地,SSYNC单元514维护全局索引缓冲区516内的“当前”基地址,其指示全局索引缓冲区516内的、索引可以被安全地写入的位置。一旦接收到指示将要由特定流输出单元512写到全局索引缓冲区516的索引的数目的数据,SSYNC单元514就将全局索引缓冲区516内的“当前”基地址传送到该流输出单元512用于当写索引时使用。SSYNC单元514之后基于该索引的数目并且基于那些索引的大小更新全局索引缓冲区516内的“当前”基地址。随后,全局索引缓冲区516内的经更新的基地址代表该缓冲区内的、流输出单元512的序列中的随后流输出单元512可以安全地将索引数据写入的位置。
[0081]通过实现以上所描述的方法,SSYNC单元514配置为维护可被提供到给定流输出单元512的、全局顶点缓冲区518内的“当前”基地址和全局索引缓冲区516内的“当前”基地址。SSYNC单元514还配置为之后更新那些“当前”基地址以包容(accommodate)尝试将顶点和索引流传输到全局顶点缓冲区518和全局索引缓冲区516的、随后的流输出单元512。
[0082]以下结合关于不同流程图的图6-8更详细地描述用于实现本文所描述的功能性的各种方法。以下还通过示例的方式结合图9-10示出了本文所描述的功能性。
[0083]图6是根据本发明的一个实施例的、用于分别将顶点数据和索引数据存储在本地顶点缓冲区510和本地索引缓冲区508内的方法步骤的流程图。尽管结合图1-3的系统描述了该方法步骤,但是本领域普通技术人员将理解配置为以任何顺序实施该方法步骤的任何系统均在本发明的范围内。[0084]如所示的,方法600始于步骤602,其中几何处理单元550接收图形图元或几何对象502。在步骤604,几何处理单元550内的几何着色单元504对图形图元或几何对象502实施一个或多个几何着色操作。这样做时,几何着色单元504可以经编程以基于所接收的图形图元或几何对象502生成附加的图形图元或由一个或多个图形图元所构成的一个或多个几何对象。在一个实施例中,例如,几何处理单元550可以接收几何对象并且之后通过将几何对象细分为彼此共享一个或多个顶点的、相互连接的图形图元的集合来生成多个图形图元。
[0085]在步骤606,几何着色单元504将与由几何着色单元504所生成的图形图元或几何对象相关联的顶点存储在本地顶点缓冲区510内。在特定的所生成的图形图元或几何对象与已经存储在本地顶点缓冲区510内的顶点相关联(例如该顶点与另一个所生成的图形图元或几何对象相关联)的情况下,几何着色单元504可以跳过关于该顶点的步骤606。利用该方法,几何着色单元504有利地避免缓存所生成的顶点和它们的相关联的顶点数据的冗余拷贝。
[0086]在步骤608,几何着色单元504将引用本地顶点缓冲区510内的顶点的索引存储在本地索引缓冲区508内。本地索引缓冲区508内的索引可以直接引用本地顶点缓冲区510内的不同顶点,即通过指定本地顶点缓冲区510内的各地址。可替代地,索引还可以通过指定本地顶点缓冲区510内的本地偏移或本地顶点缓冲区510内的本地索引来引用不同顶点。一般地,在步骤608存储在本地索引缓冲区508内的索引代表与在步骤604所生成的图形图元或几何对象相对应的顶点。之后方法600结束。
[0087]通过实现以上所描述的方法,与所生成的图元或几何对象相关联的、由几何处理单元550所生成的顶点可以被本地地缓存并且本地地索引,由此防止顶点和相关联的顶点数据的多个拷贝被冗余地存储。此外,当系统包括多个几何处理单元550时,那些几何处理单元550中的每一个可以与其他几何处理单元550并行地生成图形图元或几何对象并且之后将与那些图形图元或几何对象相关联的顶点和索引本地地缓存。本领域技术人员将认识到方法600还可以应用于处理包括顶点的集合的几何对象或任何其他较高级图形结构。例如,方法600可以应用于存储用于多边形的顶点和相关联的索引,其中该多边形可以分解为共享一个或多个顶点的相互连接的图形图元的集合。
[0088]如以下结合图7所更详细描述的,几何处理单元550中的每一个还配置为与SSYNC单元514通信以协调顶点和索引分别到全局顶点缓冲区518和全局索引缓冲区516的流传输。
[0089]图7是根据本发明的一个实施例的、用于将顶点和索引流传输到多个全局缓冲区的方法步骤的流程图。尽管结合图1-3的系统描述了该方法步骤,但是本领域普通技术人员将理解配置为以任何顺序实施该方法步骤的任何系统均在本发明的范围内。
[0090]如所示的,方法700始于步骤700,其中几何处理单元550内的流输出单元512确定本地顶点缓冲区510内的顶点的数目和本地索引缓冲区508内的索引的数目。通过实现以上结合图6所论述的方法600可以将分别在本地顶点缓冲区510和本地索引缓冲区508内的顶点和索引弓I入那些缓冲区。
[0091 ] 在步骤704,流输出单元512将本地顶点缓冲区510内的顶点的数目和本地索弓丨缓冲区508内的索引的数目传达给SSYNC单元514。在步骤706,流输出单元512从SSYNC单元514接收全局顶点缓冲区518内的基地址和全局索引缓冲区516内的基地址。全局顶点缓冲区518内的基地址代表该缓冲区内的、流输出单元512可以安全地写入由流输出单元512传达给SSYNC单元514的顶点的数目的位置。同样地,全局索引缓冲区516内的基地址代表该缓冲区内的、流输出单元512可以安全地写入由流输出单元512传达给SSYNC单元514的索引的数目的位置。SSYNC单元514配置为通过实现以上结合图5所描述的技术来生成这些基地址,该技术还在以下结合图8进行描述。
[0092]在步骤708,流输出单元512从由SSYNC单元514所提供的全局顶点缓冲区518内的基地址开始将顶点从本地顶点缓冲区510流传输到全局顶点缓冲区518。在步骤712,流输出单元512将从由SSYNC单元514所提供的全局索引缓冲区516内的基地址开始将索引从本地索引缓冲区508流传输到全局索引缓冲区516。这样做时,流输出单元512配置为更新那些索引以反映全局顶点缓冲区518内的所引用的顶点的新位置。在一个实施例中,流输出单元512将每个索引增量等于由SSYNC单元514在步骤706所提供的全局顶点缓冲区518内的基地址的值。之后方法结束。
[0093]通过实现以上所描述的方法,几何处理单元550-0至550-N中的每一个配置为分别将所缓存的顶点和索引本地地流传输到全局顶点缓冲区518和全局索引缓冲区516。此夕卜,每个这类的几何处理单元550可以与其他几何处理单元550并行地分别将顶点和索引流传输到全局顶点缓冲区518和全局索引缓冲区516。以下结合图8描述可以由SSYNC单元514所实现以将那些缓冲区内的基地址提供到几何处理单元550的技术。
[0094]图8是根据本发明的一个实施例的、用于填充多个全局缓冲区的方法步骤的流程图。尽管结合图1-3的系统描述了该方法步骤,但是本领域普通技术人员将理解配置为以任何顺序实施该方法步骤的任何系统均在本发明的范围内。
[0095]如所示的,方法800始于步骤802,其中SSYNC单元514从几何处理单元550内的流输出单元512接收指定存储在本地顶点缓冲区510内的顶点的数目和存储在本地索引缓冲区508内的索引的数目的数据。在步骤804,SSYNC单元514将全局顶点缓冲区518内的当前基地址和全局索引缓冲区516内的当前基地址传送到流输出单元514。全局顶点缓冲区518内的基地址代表该缓冲区内的、流输出单元512可以安全地写入由流输出单元512传达给SSYNC单元514的顶点的数目的位置。同样地,全局索引缓冲区516内的基地址代表该缓冲区内的、流输出单元512可以安全地写入由流输出单元512传达给SSYNC单元514的索引的数目的位置。
[0096]在步骤806,SSYNC单元514基于由流输出单元514所指定的顶点的数目更新全局顶点缓冲区518内的当前基地址。SSYNC单元514还可以基于那些顶点的大小更新全局顶点缓冲区518内的当前基地址。在步骤808,SSYNC单元514基于由流输出单元514所指定的索引的数目更新全局索引缓冲区516内的当前基地址。SSYNC单元514还可以基于那些索引的大小更新全局索引缓冲区516内的当前基地址。之后方法800结束。
[0097]通过实现以上所描述的方法,SSYNC单元514能够维护全局顶点缓冲区518和全局索引缓冲区516内的基地址,其代表那些缓冲区内的、数据可以被安全地写入的位置。当顺序地为几何处理单元550服务时,SSYNC单元514因此能够将那些缓冲区内的不同基地址提供到序列中的每个几何处理单元550。
[0098]通过示例的方式结合图9-10示出以上结合图5-8所描述的各技术。[0099]图9是根据本发明的一个实施例的、示出了配置为存储索引和顶点的示例性几何处理单元550-0和550-1的示意图。如所示的,几何处理单元550-0包括几何着色单元504-0、本地索引缓冲区508-0和本地顶点缓冲区510-0。同样地,几何处理单元502-1包括几何着色单元504-1、本地索引缓冲区508-1和本地顶点缓冲区510-1。几何处理单元550-0和550-1还在图5中被示出,尽管在该示例中,那些几何处理单元550的某些元件已经出于简洁的目的而被省略。
[0100]几何处理单元550-0配置为接收与图形图元或几何对象502相关联的顶点数据库和相关几何信息。之后几何着色单元504-0生成代表一条三角形的几何对象502-0,其中顶点A、B、C、D和E是与那些三角形相关联的顶点。几何着色单元504-0进一步配置为之后将那些顶点和相关联的顶点数据存储在本地顶点缓冲区510-0内。因为与几何对象502-0相关联的不同三角形共享顶点,所以那些共享的顶点可以仅被包括在本地顶点缓冲区510-0内一次。如所示的,几何着色单元504-0还配置为将引用那些顶点的索引存储在本地索引缓冲区508-0内。在给定顶点已经驻留在本地顶点缓冲区510-0内的情况下,几何着色单元504-0可以将至该顶点的索引引入本地索引缓冲区508-0而不将该顶点重新存储在本地顶点缓冲区510-0中,由此避免顶点数据的冗余拷贝。在本文所论述的示例性场景中,几何着色单元504-0基于顺时针或逆时针绕向(winding direction)从几何对象502-0生成三角形。本领域技术人员将认识到几何着色单元504-0可以使用任何特定的绕向或绕向的组合生成三角形和/或其他图形图元。
[0101]此外,几何着色单元504-0还可以引入代表不包括在几何对象502-0内的三角形(例如与索引O、2和3相对应的三角形A⑶)的索引集。在一个实施例中,几何着色单元504-0配置为通过将复杂的几何对象502细分为那些不同的三角形来生成由顶点A、B、C、D和E所形成的不同三角形。在另一个实施例中,几何着色单元504-0可以配置为通过复制诸如单个三角形的简单几何对象502来生成由顶点A、B、C、D和E所形成的不同三角形。几何着色单元504-0还可以将作为整体代表几何对象502-0的索引存储在本地索引缓冲区508-0内,该索引即代表所有顶点A、B、C、D和E的索引。
[0102]像几何处理单元550-0 —样,几何处理单元550-1配置为接收与图形图元或几何对象502相关联的顶点数据和相关几何信息。之后几何着色单元504-1生成代表一条三角形的几何对象502-1,其中顶点J、K、L、M、N和O是与那些三角形相关联的顶点。几何着色单元504-1进一步配置为之后将那些顶点和相关联的顶点数据存储在本地顶点缓冲区
501-1内。因为与几何对象502-1相关联的不同三角形共享顶点,所以那些共享的顶点可以仅被包括在本地顶点缓冲区510-1内一次。如所示的,几何着色单元504-1还配置为将引用那些顶点的索引存储在本地索引缓冲区508-1内。在给定顶点已经驻留在本地顶点缓冲区510-1内的情况下,几何着色单元504-1可以将至该顶点的索引引入本地索引缓冲区508-1而不将该顶点重新存储在本地顶点缓冲区510-1中,由此避免顶点数据的冗余拷贝。在本文所论述的示例性场景中,几何着色单元504-1基于顺时钟或逆时针绕向从几何对象
502-1生成三角形。本领域技术人员将认识到几何着色单元504-1可以使用任何特定的绕向或绕向的组合生成三角形和/或其他图形图元。
[0103]在一个实施例中,几何着色单元504-1配置为通过将复杂的几何对象502细分为由顶点J、K、L、M、N和O所形成的不同三角形来生成那些不同三角形。在另一个实施例中,几何着色单元504-1可以配置为通过复制诸如单个三角形的简单几何对象502来生成由顶点J、K、L、M、N和O所形成的不同三角形。几何着色单元504-1还可以将作为整体代表几何对象502-1的索引存储在本地索引缓冲区508-1内,该索引即代表所有顶点J、K、L、M、N和O的索引。
[0104](图5所示的)流输出单元512-0和512-1可以之后基于由SSYNC单元514所提供的基地址分别将存储在各自的本地顶点缓冲区510和本地索引缓冲区508中的顶点和索引流传输到全局顶点缓冲区518和全局索引缓冲区516。图10示出了示例性的全局顶点缓冲区518和示例性的全局索引缓冲区516。
[0105]图10是根据本发明的一个实施例的、示出了分别配置为存储顶点和索引的示例性的全局顶点缓冲区518和示例性的全局索引缓冲区516的示意图。
[0106]如所示的,全局顶点缓冲区518包括与图9所示的图形图元502-0和502_1相关联的每个不同顶点。具体地,全局顶点缓冲区518包括与图形图元502-0相对应的顶点A、B、C、D、E,以及与图形图元502-1相对应的顶点J、K、L、M、N和O。几何处理单元550-0配置为基于从SSYNC单元514所接收的基地址将顶点A-E写到全局索引缓冲区518。同样地,图形处理单元550-1配置为基于从SSYNC单元514所接收的不同基地址将顶点J-O写到全局索引缓冲区518。还如所示的,全局索引缓冲区516包括至存储在全局顶点缓冲区518内的顶点的索引。几何处理单元550-0和550-1配置为分别基于存储在本地索引缓冲区508-0和508-1内的索引并且基于从SSYNC单元514所接收的基地址将这些索引写到全局索引缓冲区516。
[0107]在该示例中,SSYNC单元514从几何处理单元550_0开始顺序地为几何处理单元550-0和550-1服务。SSYNC单元514从几何处理单元550-0接收指示将被写到全局顶点缓冲区518的顶点A-E的数目(在该示例中该数目是5)的数据。SSYNC单元514利用全局顶点缓冲区518内的当前基地址对几何处理单元550-0做出响应。初始地,SSYNC单元514维护全局顶点缓冲区518内的初始基地址为“O”。SSYNC单元514之后基于几何处理单元550-0将写到全局顶点缓冲区518的顶点的数目更新该当前基地址,以反映全局顶点缓冲区518内的、附加的顶点和相关联的数据可以被安全地写入的新的基地址(在该示例中基地址是“5”)。
[0108]在从几何处理单元550-0接收到指示顶点A-E的数目的数据之后,SSYNC单元514可以之后从几何处理单元550-0接收指示将被写到全局索引缓冲区516的不同索引集的数目(在该示例中该数目是4)的附加数据。另外,每个索引集可以与图形图元502-0内的不同三角形相对应。SSYNC单元514利用全局索引缓冲区516内的当前基地址对几何处理单元550-0做出响应。初始地,SSYNC单元514维护全局索引缓冲区516内的初始基地址为“O”。SSYNC单元514之后基于几何处理单元550-0将写到全局索引缓冲区516的索引的数目更新该当前基地址,以反映全局索引缓冲区516内的、附加的索引可以被安全地写入的新的基地址(在该示例中基地址是“ 4 ”)。
[0109]随后,SSYNC单元514可以为几何处理单元550-1服务。SSYNC单元514从几何处理单元550-1接收指示将被写到全局顶点缓冲区518的顶点J-O的数目(在该示例中该数目是6)的数据。SSYNC单元514利用全局顶点缓冲区518内的当前基地址“6”对几何处理单元550-1做出响应。SSYNC单元514之后基于几何处理单元550-1将写到全局顶点缓冲区518的顶点的数目更新该当前基地址,以反映全局顶点缓冲区518内的、顶点和相关联的数据可以被安全地写入的新的基地址(在该示例中基地址是“11”)。
[0110]在从几何处理单元550-1接收到指示顶点J-O的数目的数据之后,SSYNC单元514可以之后从几何处理单元550-1接收指示将被写到全局索引缓冲区516的不同索引集的数目(在该示例中该数目是4)的附加数据。此外,每个索引集可以与图形图元502-1内的不同三角形相对应。SSYNC单元514利用全局索引缓冲区516内的当前基地址“4”对几何处理单元550-1做出响应。SSYNC单元514之后基于几何处理单元550-1将写到全局索引缓冲区516的索引的数目更新该当前基地址,以反映全局索引缓冲区516内的、附加的索引可以被安全地写入的新的基地址(在该示例中基地址是“8”)。
[0111]当几何处理单元550-0或550-1根据以上所描述的技术将索引写到全局索引缓冲区516时,那些几何处理单元550中的每一个配置为基于从SSYNC单元514所接收的、全局顶点缓冲区518内的基地址更新索引。因此,几何处理单元550-0可以将每个索引增量“0”,即当为几何处理单元550-0服务时由SSYNC单元514所提供的全局顶点缓冲区518内的基地址。同样地,几何处理单元550-1可以将每个索引增量“5”,即当为几何处理单元550-1服务时由SSYNC单元514所提供的全局顶点缓冲区518内的基地址。利用该方法,每个几何处理单元550更新被流传输到全局索引缓冲区516的索引以反映存储在全局顶点缓冲区518内的正确顶点。
[0112]本领域技术人员将理解结合图9和10所描述的示例仅代表可以在其中实现本发明的功能性的一种可能情况,本发明还可以在多种其他情况中实现。
[0113]总之,图形处理单元包括几何处理单元集,每个几何处理单元配置为彼此并行地处理图形图元或几何对象。给定的几何处理单元生成一个或多个图形图元或一个或多个几何对象并且将与图形图元或几何对象相关的顶点数据本地地缓存。几何处理单元还缓存至那些顶点的不同索引集,其中每个这类集代表不同的图形图元或几何对象。几何处理单元可以之后将所缓存的顶点和索引流传输到全局缓冲区。流输出同步单元通过为每个几何处理单元提供全局顶点缓冲区内的、顶点可以被写入的不同基地址来协调跨不同的几何处理单元的顶点和索引的流传输。流输出同步单元还为每个几何处理单元提供全局索引缓冲区内的、索引可以被写入的不同基地址。
[0114]有利地,利用所公开的方法,因为顶点数据可以被本地地索引,所以几何处理单元不存储顶点数据的冗余拷贝,由此保存GPU资源。此外,每个这类的几何处理单元可以将所生成的顶点数据本地地存储在也被索引的全局顶点缓冲区中。用于全局索引缓冲区的索引被跨所有几何处理单元合理化,以使得顶点缓冲区的大小可针对整体系统被优化。因为经索引的全局顶点缓冲区被索引,所以该缓冲区可以大致小于常规的非经索引的全局顶点缓冲区。因此,利用较小的全局顶点缓冲区,将全局顶点缓冲区反馈到几何处理单元的图形处理管线上游的级成为相对于现有架构更加高效的运用,由此增加整体系统处理效率。
[0115]本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的光盘只读存储器(CD-ROM)盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息;和(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
[0116]以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和变化而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是示例性而非限制性的意义。
[0117]因此,本发明的实施例的范围在随附的权利要求中进行阐述。
【权利要求】
1.一种用于填充多个全局缓冲区的计算机实现方法,所述方法包括: 从第一处理单元接收指示第一本地索引缓冲区内的、由所述第一处理单元所生成的若干条目的数据,其中所述第一处理单元包括在多个处理单元中;以及 将全局索引缓冲区内的第一基地址传送到所述第一处理单元,所述全局索引缓冲区内的所述第一基地址反映所述全局索引缓冲区内的、所述第一本地索引缓冲区的所述条目应该被写入的第一位置,其中所述第一全局索引缓冲区内的所述第一基地址基于所述全局索引缓冲区内的、已经分配到包括在所述多个处理单元中的至少一个其他处理单元的若干条目。
2.一种图形子系统,包括: 流同步单元,配置为: 从第一处理单元接收指示第一本地索引缓冲区内的、由所述第一处理单元所生成的若干条目的数据,其中所述第一处理单元包括在多个处理单元中;以及 将全局索引缓冲区内的第一基地址传送到所述第一处理单元,所述全局索引缓冲区内的所述第一基地址反映所述全局索引缓冲区内的、所述第一本地索引缓冲区的所述条目应该被写入的第一位置,其中所述第一全局索引缓冲区内的所述第一基地址基于所述全局索引缓冲区内的、已经分配到包括在所述多个处理单元中的至少一个其他处理单元的若干条目。
3.如权利要求2所述的图形子系统,其中所述流同步单元进一步配置为基于所述全局索引缓冲区内的、已经分配到所述第一处理单元的若干条目更新所述全局索引缓冲区内的所述第一基地址,以生成所述全局索引缓冲区内的第二基地址。
4.如权利要求3所述的图形子系统,其中所述流同步单元进一步配置为: 从第二处理单元接收指示第二本地索引缓冲区内的、由所述第二处理单元所生成的若干条目的数据,其中所述第二处理单元包括在所述多个处理单元中; 将所述全局索引缓冲区内的所述第二基地址传送到所述第二处理单元,所述全局索引缓冲区内的所述第二基地址反映所述全局索引缓冲区内的、所述第二本地索引缓冲区内的所述条目应该被写入的第二位置;以及 通过基于所述全局索引缓冲区内的、分配到所述第二处理单元的若干条目更新所述全局索引缓冲区内的所述第二基地址来生成所述全局索引缓冲区内的第三基地址。
5.如权利要求2所述的图形子系统,其中所述流同步单元进一步配置为: 从所述第一处理单元接收指示第一本地顶点缓冲区内的、由所述第一处理单元所生成的若干条目的数据;以及 将全局顶点缓冲区内的第一基地址传送到所述第一处理单元,所述全局顶点缓冲区内的所述第一基地址反映所述全局顶点缓冲区内的、所述第一本地顶点缓冲区内的所述条目应该被写入的第一位置,其中所述全局顶点缓冲区内的所述第一基地址基于所述全局顶点缓冲区内的、已经分配到包括在所述多个处理单元中的所述至少一个其他处理单元的若干条目。
6.如权利要求5所述的图形子系统,其中所述流同步单元进一步配置为基于所述全局顶点缓冲区内的、已经分配到所述第一处理单元的若干条目更新所述全局顶点缓冲区内的所述第一基地址,以生成所述全局顶点缓冲区内的第二基地址。
7.如权利要求6所述的图形子系统,其中所述流同步单元进一步配置为: 从第二处理单元接收指示第二本地顶点缓冲区内的、由所述第二处理单元所生成的若干条目的数据,其中所述第二处理单元包括在所述多个处理单元中; 将所述全局顶点缓冲区内的所述第二基地址传送到所述第二处理单元,所述全局顶点缓冲区内的所述第二基地址反映所述全局顶点缓冲区内的、所述第二本地顶点缓冲区内的所述条目应该被写入的第二位置;以及 通过基于所述全局顶点缓冲区内的、分配到所述第二处理单元的若干条目更新所述全局顶点缓冲区内的所述第二基地址来生成所述全局顶点缓冲区内的第三基地址。
8.如权利要求4所述的图形子系统,其中所述流同步单元处理从所述第一处理单元和所述第二处理单元所接收的数据的顺序基于应用编程接口(API)顺序。
9.一种配置为填充多个全局缓冲区的计算设备,包括: 图形处理子系统,所述图形处理子系统包括流同步单元,所述流同步单元配置为: 从第一处理单元接收指示第一本地索引缓冲区内的、由所述第一处理单元所生成的若干条目的数据,其中所述第一处理单元包括在多个处理单元中;以及 将全局索引缓冲区内的第一基地址传送到所述第一处理单元,所述全局索引缓冲区内的所述第一基地址反映所述全局索引缓冲区内的、所述第一本地索引缓冲区的所述条目应该被写入的第一位置,其中所述第一全局索引缓冲区内的所述第一基地址基于所述全局索引缓冲区内的、已经分配到包括在所述多个处理单元中的至少一个其他处理单元的若干条目。
10.如权利要求9所述的计 算设备,其中所述流同步单元进一步配置为: 从所述第一处理单元接收指示第一本地顶点缓冲区内的、由所述第一处理单元所生成的若干条目的数据; 将全局顶点缓冲区内的第一基地址传送到所述第一处理单元,所述全局顶点缓冲区内的所述第一基地址反映所述全局顶点缓冲区内的、所述第一本地顶点缓冲区内的所述条目应该被写入的第一位置,其中所述全局顶点缓冲区内的所述第一基地址基于所述全局顶点缓冲区内的、已经分配到包括在所述多个处理单元中的所述至少一个其他处理单元的若干条目;以及 通过基于所述全局顶点缓冲区内的、已经分配到所述第一处理单元的若干条目更新所述全局顶点缓冲区内的所述第一 基地址来生成所述全局顶点缓冲区内的第二基地址。
【文档编号】G06F17/30GK103886547SQ201310714610
【公开日】2014年6月25日 申请日期:2013年12月20日 优先权日:2012年12月20日
【发明者】杰尔姆·F·小杜鲁克, 济亚德·S·哈库拉, 亨利·帕尔德·莫尔顿 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1