图形处理单元可编程着色器的纹元数据结构和其操作方法

文档序号:6510939阅读:179来源:国知局
图形处理单元可编程着色器的纹元数据结构和其操作方法
【专利摘要】本发明提供了用于图形处理单元可编程着色器的纹元数据结构和其操作方法。一种图形处理子系统和着色的方法。在一个实施例中,子系统包括:(1)存储器,配置为包含纹元数据结构,根据该结构,与特定复合纹元相对应的多个基元纹元包含在存储器的单个页中,以及(2)图形处理单元,配置为经由数据总线与存储器进行通信,并执行着色器以获取包含在单个页中的多个基元纹元来创建特定复合纹元。
【专利说明】图形处理单元可编程着色器的纹元数据结构和其操作方法
[0001]相关申请的交叉引用
[0002]本申请要求于2012年9月11日由Everitt等人所提交的序列号为13/609,698的、标题为 “TEXTEL DATA STRUCTURE FOR GRAPHICS PROCESSING UNIT PROGRAMMABLESHADER AND METHOD OF OPERATION THEREOF”的美国申请的优先权,在先申请与本申请共同受让,并在本文通过援弓I的方式加以合并。
【技术领域】
[0003]本申请总地涉及计算机图形,并且,更具体地,涉及用于图形处理单元(GPU)的数据结构。
【背景技术】
[0004]许多计算机图形图像是通过将光与给定视角的三维场景的交互数学地建模来创建的。该处理称为“渲染”,生成该给定视角的该场景的二维图像,并类似于对真实世界场景进行拍照。
[0005]随着对于计算机图形、具体来讲对于实时计算机图形的需求的增加,适用于加速渲染过程的具有图形处理子系统的计算机系统已广泛使用。在这些计算机系统中,渲染过程在计算机的通用中央处理单元(CPU)和图形处理子系统之间被分开。典型地,CPU实施高级操作,诸如在给定场景中确定对象的位置、运动和碰撞。从这些高级操作中,CPU生成限定图像或期望渲染图像的渲染命令和数据的集合。例如,渲染命令和数据可限定场景几何、光照、着色、纹理、运动和/或用于场景的相机参数。图形处理子系统依据渲染命令和数据的集合创建一个或多个经渲染图像。
[0006]场景几何典型地由诸如点、线、多边形(例如三角形和四边形)的几何基元和由一个或多个二维或三维顶点所限定的曲面所表示。每个顶点可具有附加的标量或矢量属性,用来确定诸如顶点和其相关联的几何基元的动画、颜色、透明度、光照和着色的质量。
[0007]许多图形处理子系统是通过应用编程接口(API)高度可编程的,使能复杂的光照和着色算法的实现方案和其他方面。为开拓该可编程性,应用可包括一个或多个图形处理子系统程序,其可随着主程序由CPU的执行由图形处理子系统并行执行。虽然不仅限制于实现着色和光照算法,这些图形处理子系统程序通常称为“着色程序”、“可编程着色器”或简称“着色器”。

【发明内容】

[0008]一个方面提供图形处理子系统。在一个实施例中,子系统包括:(I)存储器,配置为包含纹元数据结构,根据该结构,与特定复合纹元相对应的多个基元纹元包含在存储器的单个页中,以及(2)图形处理单元,配置为经由数据总线与存储器进行通信,并执行着色器以获取包含在单个页中的多个基元纹元来生成特定复合纹元。
[0009]在另一个实施例中,子系统包括:(1)存储器,配置为包含纹元数据结构,根据该结构,与特定复合纹元相对应的多个基元纹元包含在存储器的单个页中,以及(2)图形处理单元,配置为经由数据总线与存储器进行通信并包括多个流多处理器,流多处理器中的至少一个配置为执行着色器。在一个实施例中,着色器配置为:(2a)发起多个基元纹元的获取,该发起包括单个地址转译,以及(2b )采用多个基元纹元以渲染特定复合纹元。
[0010]另一方面提供着色的方法。在一个实施例中,方法包括:(I)初始化着色器以实施针对特定复合纹元的着色操作,(2)发起多个基元纹元的获取,该发起产生与包含多个基元纹元的单个页相对应的地址转译,(3)从单个页获取多个基元纹元,以及(4)采用多个基元纹元以实施着色操作。
【专利附图】

【附图说明】
[0011]现在将结合附图对接下来采取的描述进行参考,其中:
[0012]图1是其中可实现本发明的一个或多个方面的计算系统的一个实施例的框图;
[0013]图2是存在于图1的GPU内的可编程图形管线的一个实施例的框图;
[0014]图3是图2的图形管线的几何着色引擎的一个实施例的框图;
[0015]图4是图1的片上GPU存储器的一部分的一个实施例的框图;以及
[0016]图5是着色的方法的一个实施例的流程图。
【具体实施方式】
[0017]本文应理解的是,在实行其着色算法中,可编程着色器通常从虚拟存储器空间读取或“获取”多个基元纹元元素或“纹元”以创建一个或多个复合纹元。
[0018]然而,因为虚拟存储器空间是物理存储器空间的抽象,所以要求地址转译的过程,以将虚拟存储器空间中的每个基元纹元的地址转译成物理地址。随后采用物理地址以从物理存储器获取基元纹元。由于现代计算机系统采用高速缓存存储器以更快地运行,所以包括包含基元纹元的地址的页还被加载到高速缓存存储器(或简称“被高速缓存”),以提供可从高速缓存存储器读取处于附近地址的数据的可能性。
[0019]不幸的是,地址转译是相对复杂的并且很消耗处理资源。针对该原因,减少要求采取的地址转译的量是有利的。就该点而言,使用转译后备缓冲区(TLB)以存储新近转译的地址并因此提供包含在TLB中的地址转译可通过其来重新使用的机制,已被发现是有利的。不幸的是,随着地址转译的频率增加,“命中”(即TLB包含用于要求转译的虚拟地址的入口)的可能性变小,降低了 TLB的效力。
[0020]进一步地,用来自主存储器的页加载高速缓存存储器消耗总线带宽。针对该原因,减少要求采取的高速缓存的量是有利的。
[0021]本文应理解的是,用于存储基元纹元的、其中基元纹元由对象所分组的常规数据结构几乎不变地致使与特定复合纹元相对应的多个基元纹元跨存储器的多个页。因此,获取创建特定复合纹元所需的多个基元纹元通常不仅包括过多的地址转译还包括过多的页高速缓存。
[0022]本文应理解的是,基元纹元数据结构重组,使得涉及特定复合纹元的多个基元纹元被包含在单个存储器页中,地址转译可能显著减少。因此,本文所引入的是基元纹元数据结构的各种实施例,以及操作基元纹元数据结构的方法,其中与特定复合纹元相对应的多个基元纹元包含或“交错”在单个存储器页中。因此,单个地址转译(或TLB命中)允许检索多个基元纹元。在某些实施例中,与特定复合纹元相对应的所有基元纹元交错在单个存储器页中,允许要随着单个地址转译(或TLB命中)所获取的、涉及特定复合纹元的所有基元纹元的检索。
[0023]还应理解的是,当多个基元纹元交错时,特定复合纹元在给定的页中占据的空间的部分随着纹元大小的增加而增加。换句话说,交错减少了给定的页能够包含的复合纹元的数目。因此,当获取特定页时,可能包含更少的不需要的基元纹元。这是有利的,因为获取不需要的基元纹元浪费了带宽和临时存储(例如高速缓存)空间。当创建稀疏纹理的图像或其部分时(即具有更简单的复合纹元的那些),交错是特别有利的。在这种情况下,可使基元纹元更小(其粒度减小),增加可包含在存储器页中的基元纹元的数目并进一步减少浪费。例如,如果非交错的基元纹元具有256x256图块(tile)大小,将其与四个其他基元纹元交错允许图块大小减少到128x128。如果着色器仅要求初始256x256图块的一个象限来创建特定复合纹元,那么基元纹元可在初始空间的一个象限中表示。类似地,更容易保持对已被获取的基元纹元的跟踪。
[0024]基元纹元数据结构和方法的一些实施例需要基元纹元基于2的幂在页内交错。例如,如果基元纹元交错在4kB的块中,并且4kB基元纹元块之间的距离或“步幅”也是4kB的2次幂倍数,那么构建用于在给定页中的基元纹元块中的每一个的地址包括插入一个或多个最高有效位(MSB)到最低的4kB基元纹元块的地址。可适当地将最低的4kB基元纹元块的地址认作基地址,并且可适当地将被插入的MSB认作偏移。因此,例如插入单个“0”MSB将寻址偶数步,插入单个“ I ” MSB寻址奇数步。
[0025]在描述基元纹元数据结构和方法的各种实施例以前,将描述基元纹元数据结构可具体化或实行在其内的计算系统。
[0026]图1是其中可实现本发明的一个或多个方面的计算系统100的一个实施例的框图。计算系统100包括系统数据总线132、中央处理单元(CPU)102、输入设备108、系统存储器104、图形处理子系统106和显示设备110。在可替代实施例中,CPU 102、图形处理子系统106的部分、系统数据总线132或其任何组合可集成到单个处理单元中。进一步地,图形处理子系统106的功能性可包括在芯片组或一些其他类型的专用处理单元或协处理器中。
[0027]如所示,系统数据总线132连接CPU 102、输入设备110、系统存储器104和图形处理子系统106。在可替代实施例中,系统存储器104可直接连接到CPU 102。CPU 102从输入设备108接收用户输入、执行存储在系统存储器104中的编程指令、操作存储在系统存储器104上的数据,并配置图形处理子系统106在图形管线中实施具体任务。系统存储器104典型地包括用来存储用于由CPU 102和图形处理子系统106处理的数据和编程指令的动态随机存取存储器(DRAM)。图形处理子系统106接收由CPU 102所传送的指令并处理指令以在显示设备110上渲染和显示图形图像。
[0028]还如所示,系统存储器110包括应用程序112、应用编程接口(API) 114和图形处理单元(GPU)驱动程序116。应用程序112生成对API 114的调用来典型地以产生图形图像序列的形式的期望的结果集合。应用程序112还传送零个或更多个高级着色程序到API114用于在GPU驱动程序116内进行处理。高级着色程序典型地是设计为在图形处理子系统106内的一个或多个着色引擎上运行的高级编程指令的源代码文本。API 114功能性典型地实现在GPU驱动程序116内。GPU驱动程序116配置为将高级着色程序转译成典型地经优化用于具体类型的着色引擎(例如顶点、几何或片段)的机器码着色程序。
[0029]图形处理子系统106包括图形处理单元(GPU) 118、片上GPU存储器122、片上GPU数据总线136、GPU本地存储器120和GPU数据总线134。GPU 118配置为经由片上GPU数据总线136与片上GPU存储器122进行通信,以及经由GPU数据总线134与GPU本地存储器120进行通信。GPU 118可接收由CPU 102所传送的指令、处理指令以渲染图形数据和图像并将这些图像存储在GPU本地存储器120中。随后,GPU 118可在显示设备110上显示存储在GPU本地存储器120中的某些图形图像。
[0030]GPU 118包括一个或多个流多处理器124。流多处理器124中的每一个能够并发执行相对大数目的线程。有利地,流多处理器124中的每一个可经编程以执行与多种应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如对确定对象的位置、速度和其他属性的物理性质的应用)等。此外,流多处理器124中的每一个可配置为包括一个或多个可编程着色器的着色弓丨擎,这些可编程着色器中的每一个执行机器码着色程序(即线程)以实施图像渲染操作。GPU 118可装备有任何数量(包括零个)的片上GPU存储器122和GPU本地存储器120,并可以任何组合形式使用片上GPU存储器122、GPU本地存储器120和系统存储器104用于存储器操作。
[0031]片上GPU存储器122配置为包括GPU编程代码128和片上缓冲区130。GPU编程代码128可经由系统数据总线132从GPU驱动程序116传送到片上GPU存储器122。GPU编程代码128可包括机器码顶点着色程序、机器码几何着色程序、机器码片段着色程序或每一个的任何数目的变形。片上缓冲区130典型地用于存储要求快速访问的着色数据以减少图形管线中的着色引擎的时延。由于片上GPU存储器122占用宝贵的裸片面积,其是相对昂贵的。
[0032]GPU本地存储器120典型地包括较便宜的片外动态随机存取存储器(DRAM)并且也用于存储由GPU 118所使用的数据和编程。如所示,GPU本地存储器120包括帧缓冲区126。帧缓冲区126存储用于可用来驱动显示设备110的至少一个二维表面的数据。此外,帧缓冲区126可包括多于一个二维表面,使得GPU 118可渲染到一个二维表面,同时第二二维表面用来驱动显示设备110。
[0033]显示设备110是能够发出与输入数据信号相对应的视觉图像的一个或多个输出设备。例如,显示设备可使用阴极射线管(CRT)监视器、液晶显示器或其他任何适合的显示系统来建立。到显示设备110的输入数据信号典型地通过扫描出存储在帧缓冲区126中的图像数据的一个或多个帧的内容来生成。
[0034]图2是存在于图1的GPU 118内的可编程图形管线200的一个实施例的框图。图形管线200配置为将3-D图像变换成2-D图像。如所示,图形管线200包括数据汇编器202、顶点着色引擎204、基元汇编器206、几何着色引擎208、光栅器210、片段着色引擎212、光栅操作单元214和图1的帧缓冲区126。
[0035]数据汇编器202是固定功能单元,其收集用于高阶表面、基元等的顶点数据,并将顶点数据输出到顶点着色引擎204。数据汇编器202可从缓冲区采集存储在系统存储器104,GPU本地存储器120和片上GPU存储器122内的数据,也可从用来指定顶点属性的、来自应用程序112的API调用采集数据。顶点着色引擎204是诸如流多处理器124-1的可编程执行单元,配置为执行机器码顶点着色程序,处理如由顶点着色程序所指定的顶点数据。例如,顶点着色引擎204可经编程以将顶点数据从基于对象的坐标表示(对象空间)变换成替代坐标系,诸如世界空间或规格化设备坐标系(NDC)空间。顶点处理单元204可读取或写入存储在GPU本地存储器120和片上GPU存储器122中的数据。
[0036]基元汇编器206是固定功能单元,其从顶点着色引擎204接收经处理的顶点数据并构建图形基元,例如点、线、三角形等等,用于由几何着色引擎208进行处理。在可替代实施例中,在穿过GPU 118的数据流中第二基元汇编器(未示出)可包括在几何着色引擎208之后。几何着色引擎208是诸如流多处理器124-1的可编程执行单元,其配置为执行机器码几何着色程序,处理如由几何着色程序所指定的从基元汇编器206所接收的图形基元。几何着色引擎208可经编程以生成零个或更多个新图形基元并计算诸如平面方程系数的、用来光栅化新图形基元的参数。例如,为了用在立方图(cube-map)渲染中,几何着色引擎208可配置为处理输入基元、将输入基元变成六倍并发出输出基元的多达六个集合,每个用于立方体的一个面。几何着色引擎208可读取和写入存储在GPU本地存储器120和片上GI3U存储器122中的数据。几何着色引擎208输出参数和新图形基元到光栅器210。光栅器210是固定功能单元,其扫描新图形基元并输出片段和覆盖数据(coverage data)到片段着色引擎212。
[0037]片段着色引擎212是诸如流多处理器124-1的可编程执行单元,其配置为执行机器码片段着色程序,处理如由机器码片段着色程序所指定的从光栅器210所接收的片段。例如,片段着色引擎212可经编程以实施诸如透视校正、纹元映射、着色、混合等操作,以产生输出到光栅操作单元214的经着色的片段。片段着色引擎212可读取和写入存储在GPU本地存储器120和片上GPU存储器122中的数据。光栅操作单元214可选地实施诸如近和远平面剪切和诸如模板(stencil)、z测试等的光栅操作的固定功能的计算,并将像素数据输出为经处理的图形数据用于存储在GPU本地存储器120中的缓冲区中,诸如帧缓冲区126。
[0038]图形管线200的某些实施例包括配置为将低细节细分表面转换成较高细节基元的曲面细分(tesselation)引擎(未示出)。总而言之,曲面细分将高阶表面拼贴成更适合于渲染的结构。
[0039]图3是图2的图形管线200的几何着色引擎208的一个实施例的框图。如所示,几何着色引擎208是配置为根据几何着色程序实施几何着色操作的流多处理器124。流多处理器124中的每个流处理器配置为执行单个线程的单独的几何着色器302,该单个线程是几何着色程序的实例。在一个实施例中,流多处理器124包括32个流处理器,从而为几何着色引擎208提供32个单独的几何着色器302。在可替代实施例中,可以存在多于或少于32个流处理器,几何着色器302也如此。
[0040]已描述基元纹元数据结构可具体化或实行在其内的计算系统,下面将描述基元纹元数据结构和方法的各种实施例。
[0041]图4是图1的片上GPU存储器122的一部分的一个实施例的框图。GPU存储器122被分成页。一个页410包含与特定复合纹元相对应的基元纹元的多个块。在各种实施例中,基元纹元包括至少一个基元纹元属性,诸如:正常、漫射或高光颜色、日照、反射、透明、白炽、半透明、折射和凹凸。[0042]在图4的实施例中,页410包含与特定复合纹元I相对应的基元纹元的多个块(即块411-415)。因此与复合纹元I相对应的多个(两个或更多个)基元纹元可采用单个地址转译或TLB命中来获取。在图4的实施例中,页410还包含与纹元I相对应的所有基元纹元。因此,只要求单个地址转译,以使与复合纹元I相对应的块411-415被获取。
[0043]页410还包含与另一个特定复合纹元、复合纹元2相对应的多个基元纹元(即块421-425)。页410的某些实施例包含与其他复合纹元相对应的多个基元纹元(未示出)。在块421-425随着与纹元I相对应的基元纹元一起被获取的同时,典型地期待采用本文所描述的基元纹元数据结构的优点减少了页410浪费的程度。进一步地,当针对纹元2实施着色时,与页410相对应的入口仍可存在于TLB中。因此,可避免为了获取块421-425所另外要求的地址转译。
[0044]在图4的实施例中,块411-415和块421-425各自包含在一致的(例如4kB)块中。其相互交错使得块421存储在块411和块422之间等等。进一步地,在图4的实施例中,411的地址也是页410的地址。因此,充足长度的MSB被预添加到(例如在4-kB块大小的情况下12位的)基地址。例如,如果每个复合纹元具有八个相对应的基元纹元,三个MSB足以寻址包含八个相对应的基元纹元的块。不要求以该方式寻址基元纹元块,但要求较少的地址转译。
[0045]图4还示出包含与复合纹元N相对应的块431-435的页430。在图4的实施例中,块431-435包含在4kB块中。块431-435是交错的,使得块432存储在块431和433之间等等。进一步地,在图4的实施例中,块431的地址从页430的地址偏移2的幂的倍数。因此,充足长度的MSB被预添加到12位的基地址。
[0046]在上文所描述的实施例中,基元纹元中的每一个与单个复合纹元相对应。然而,情况可以不是这样。在可替代实施例中,特定基元纹元与多个复合纹元相对应,并且经采用以创建该多个复合纹元。例如,包含在块431-435中的基元纹元中的一个或多个与例如四个复合纹元相对应。该实施例因此采用更少的基元纹元来构建相同数目的复合纹元,要求更少的存储器来存储基元纹元,并降低针对给定数目的复合纹元实施着色操作所必须的地址转译或TLB查找的数目。
[0047]在上文所描述的实施例中,还假定基元纹元大小相同。然而,情况也可以不是这样。在可替代实施例中,基元纹元大小不同。例如,有些基元纹元可能覆盖4x8的图块,而其他的可能覆盖2x4的图块。相似地,复合纹元可以大小不同。进一步地,基元纹元的大小不需要等于其相对应的复合纹元的大小。
[0048]因为通过强大的空间局部性对基元纹元加以引用,相关领域的技术人员应理解的是,邻近的基元纹元可能跨其中GPU支持多线程执行的实施例中的多个线程被并发地使用。因此,邻近地存储基元纹元是有利的。然而,当使用给定的页内的多个基元纹元创建复合纹元时,基元纹元有利地在页内粗糙地并非精细地交错。这可称为“阵列(array )的结构阵列”。“结构阵列”是复合纹元,结构是存储器页,“阵列的结构”是单独的基元纹元。
[0049]图5是着色的方法的一个实施例的流程图。方法开始于步骤510。在步骤520中,与特定复合纹元相对应的多个基元纹元存储在单个页中。在步骤530中,至少一个着色器经初始化以针对特定复合纹元实施至少一个着色操作。在某个点处,着色器需要获得对与特定复合纹元相对应的至少一些基元纹元的访问。因此,在步骤540中,着色器发起基元纹元的获取,产生与单个页相对应的地址转译。在可替代实施例中,从代替地址转译的TLB检索入口。在步骤550中,从单个页中获取多个基元纹元。在一个实施例中,页包含着色器要求的所有基元纹元,使着色器不必发起任何进一步的页的获取。在步骤560中,采用至少一个偏移来寻址包含在页中的多个基元纹元中的至少一个。在步骤570中,着色器随后采用多个基元纹元以实施着色操作。方法结束于结束步骤580。
[0050]与本申请相关领域的技术人员应理解的是,可对所描述的实施例进行其他和进一步的附加、删除、替换和修改。
【权利要求】
1.一种图形处理子系统,包括: 存储器,配置为包含纹元数据结构,根据该结构,与特定复合纹元相对应的多个基元纹元包含在所述存储器的单个页中;以及 图形处理单元,配置为经由数据总线与所述存储器进行通信,并执行着色器以获取包含在所述单个页中的所述多个基元纹元来创建所述特定复合纹元。
2.根据权利要求1所述的子系统,其中所述单个页包含所述着色器为创建所述特定复合纹元要求的所有基元纹元。
3.根据权利要求1所述的子系统,其中所述图形处理单元配置为采用偏移以构建用于所述多个基元纹元中的至少一些的虚拟地址。
4.根据权利要求1所述的子系统,其中所述多个基元纹元包含在所述单个页内的一致的块中。
5.根据权利要求1所述的子系统,其中所述单个页包含与多个复合纹元相对应的多个基元纹元。
6.根据权利要求5所述的子系统,其中与所述多个复合纹元相对应的所述多个基元纹元是交错的。
7.根据权利要求1所述的子系统,其中所述图形处理单元配置为执行多个着色器。
8.一种着色的方法,包括: 初始化着色器以实施针对特定复合纹元的着色操作; 发起多个基元纹元的获取,所述发起产生与包含所述多个基元纹元的单个页相对应的地址转译; 从所述单个页获取所述多个基元纹元;以及 采用所述多个基元纹元以实施所述着色操作。
9.根据权利要求8所述的方法,其中所述页包含所述着色器实施所述着色操作要求的所有基元纹元。
10.根据权利要求8所述的方法,进一步包括采用偏移以构建用于所述多个基元纹元中的至少一些的虚拟地址。
【文档编号】G06T1/20GK103679786SQ201310409272
【公开日】2014年3月26日 申请日期:2013年9月10日 优先权日:2012年9月11日
【发明者】卡斯·W·艾弗里特, 亨利·P·莫尔顿 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1