任务合并

文档序号:1923021 发布日期:2021-12-03 浏览:25次 >En<

阅读说明:本技术 任务合并 (Task merging ) 是由 R·H·布赫 P·韦伦扎斯 R·布罗德赫斯特 X·杨 J·霍森 于 2021-05-26 设计创作,主要内容包括:本发明涉及任务合并。本发明描述了用于在图形流水线中合并任务的方法和设备。该方法包括:在清除标签缓冲器的触发之后,从所清除的标签缓冲器生成一个或多个任务,每个任务包括对程序的引用和要在其上执行所述程序的多个片段,其中,片段是采样位置处的图元的元素。然后确定是否满足合并标准,并且如果满足,将来自下一标签缓冲器清除的一个或多个片段添加到从所清除的标签缓冲器生成的一个或多个任务的最后任务。(The invention relates to task merging. A method and apparatus for merging tasks in a graphics pipeline is described. The method comprises the following steps: after a trigger to clear a tag buffer, one or more tasks are generated from the cleared tag buffer, each task including a reference to a program and a plurality of fragments on which the program is to be executed, wherein a fragment is an element of a primitive at a sampling location. It is then determined whether a merge criterion is satisfied and, if so, one or more fragments from the next tag buffer flush are added to a last task of the one or more tasks generated from the flushed tag buffer.)

任务合并

技术领域

本发明涉及任务合并。

背景技术

当在图形处理系统中渲染3D场景的图像时,可能存在在任何特定采样位置处都重叠的两个或更多个图元,其中,在最终渲染图像中,采样位置与像素位置之间可能存在1:1对应。术语“片段”可以用于指采样位置处的图元的元素。在图元(因此还有片段)在采样位置重叠的情况下,可以利用深度测试来确定在任何采样位置处哪个图元(以及因此哪个片段)可见,并且在最前方图元在采样位置处并非不透明(例如,在最前方片段穿透的情况下)的情况下,可以进行混合以组合用于半透明片段的数据及其部分遮挡的片段(即,组合最前方非不透明片段和其后面的片段的数据,例如颜色数据——其中,“前”和“后”可以是应用特定的)。树叶模拟(Foliage simulation)是其中经常存在许多重叠片段,尤其是重叠穿透和不透明片段的示例。术语“穿透”指除非深度更新被禁用,否则在执行阿尔法测试(alphatest)之后存在深度测试的反馈环路的片段。

渲染3D场景有多种不同的方式,包括基于图块的渲染和即时模式渲染。在使用基于图块的渲染的图形处理系统中,渲染空间被分成一个或多个图块(例如,矩形区域),然后逐个图块地执行渲染。这通常提高了渲染速度,并且减少了所需的帧缓冲存储器带宽、隐藏表面移除(HSR)所需的片上存储量和消耗的功率。

下文所描述的实施例仅作为示例被提供,且并不限制解决已知图形处理系统的缺点中的任一个或全部的实施方式。

发明内容

提供本发明内容是为了以简化的形式介绍下文在

具体实施方式

中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

本发明描述了用于在图形流水线中合并任务的方法和设备。该方法包括:在清除标签缓冲器的触发之后,从所清除的标签缓冲器生成一个或多个任务,每个任务包括对程序的引用和要在其上执行所述程序的多个片段,其中,片段是采样位置处的图元的元素。然后确定是否满足合并标准,并且如果满足,将来自下一标签缓冲器清除的一个或多个片段添加到从所清除的标签缓冲器生成的一个或多个任务的最后任务。

第一方面提供了一种在基于图块的图形流水线中生成任务的方法,所述方法包括,在清除标签缓冲器的触发之后:从所清除的标签缓冲器生成一个或多个任务,每个任务包括对程序的引用以及将在其上执行程序的一个或多个片段,其中,片段是在采样位置处的图元的元素;确定是否满足预定义合并标准;以及响应于确定满足所述合并标准,将来自下一标签缓冲器清除的一个或多个片段添加到从所清除的标签缓冲器生成的一个或多个任务的最后任务。

合并标准可以包括以下条件:用于清除标签缓冲器的触发不是图块的末端。

合并标准可以包括从所清除标签缓冲器生成的最后任务的占用阈值。图元可以被分组成图元块,并且根据以下中的一项或多项来定义占用阈值:任务中的片段的最大数量;任务中的图元的最大数量;以及任务中的图元块的最大数量。

将来自下一标签缓冲器清除的一个或多个片段添加到从所清除标签缓冲器生成的一个或多个任务的最后任务可以包括:存储从所清除标签缓冲器生成的一个或多个任务的最后任务;以及在清除标签缓冲器的下一触发之后,将来自下一标签缓冲器清除的一个或多个片段添加到所存储最后任务。

所述方法还可以包括:响应于清除标签缓冲器的触发,并且在从所清除标签缓冲器生成一个或多个任务之前:确定是否存在来自紧邻先前标签缓冲器清除的所存储最后任务;以及响应于确定存在来自紧邻先前标签缓冲器清除的所存储最后任务,将来自标签缓冲器的一个或多个片段添加到所存储最后任务。

所述图形流水线可以包括深度缓冲器,轮次(pass)可以包括一组一个或多个任务,图形流水线可以强制在来自下一轮次的任何任务更新深度缓冲器之前来自一轮次的所有任务完成更新深度缓冲器,并且方法还可以包括,在将来自标签缓冲器的一个或多个片段添加到所存储最后任务之后,释放所存储最后任务作为独立轮次。

所述图形流水线可以包括深度缓冲器,轮次可以包括一组一个或多个任务,图形流水线可以强制在来自下一轮次的任何任务更新深度缓冲器之前来自一轮次的所有任务完成更新深度缓冲器,并且所述方法还可以包括,在将来自标签缓冲器的一个或多个片段添加到所存储最后任务以生成进一步填充的所存储最后任务之后,并且响应于确定在进一步填充的所存储最后任务和包括响应于紧邻先前标签缓冲器清除而生成的至少一个其它任务的轮次中的任何任务之间没有片段重叠,释放进一步填充的所存储最后任务作为轮次的部分。

所述方法还可以包括:响应于确定在进一步填充的所存储最后任务和包括响应于紧邻先前标签缓冲器清除而生成的至少一个其它任务的轮次中的任何任务之间有片段重叠,释放进一步填充的所存储最后任务作为独立轮次。

所述图形流水线可以包括深度缓冲器,轮次可以包括一组一个或多个任务,图形流水线可以强制在来自下一轮次的任何任务更新深度缓冲器之前来自一轮次的所有任务完成更新深度缓冲器,并且所述方法还可以包括,在将来自标签缓冲器的一个或多个片段添加到所存储最后任务以生成进一步填充的所存储最后任务之后,并且响应于确定在进一步填充的所存储最后任务和包括响应于清除标签缓冲器的触发而生成的至少一个其它任务的轮次中的任何任务之间没有片段重叠,释放所存储最后任务作为轮次的部分。

所述方法还可以包括:响应于确定在进一步填充的所存储最后任务和包括响应于清除标签缓冲器的触发而生成的至少一个其它任务的轮次中的任何任务之间有片段重叠,并且在进一步填充的所存储最后任务和包括响应于紧邻先前标签缓冲器清除而生成的至少一个其它任务的轮次中的任何任务之间没有片段重叠,释放进一步填充的所存储最后任务作为包括响应于紧邻先前标签缓冲器清除而生成的至少一个其它任务的轮次的部分。

所述方法还可以包括:响应于确定(a)在进一步填充的所存储最后任务和包括响应于清除标签缓冲器的触发而生成的至少一个其它任务的轮次中的任何任务之间有片段重叠,和/或(b)在进一步填充的所存储最后任务和包括响应于紧邻先前标签缓冲器清除而生成的至少一个其它任务的轮次中的任何任务之间有片段重叠,释放进一步填充的所存储最后任务作为独立轮次。

将来自标签缓冲器清除的一个或多个片段添加到所存储最后任务可以包括:从标签缓冲器清除中选择片段;确定所选择片段是否满足预定义添加标准;以及响应于确定所选择片段满足预定义标准,将所选择片段添加到所存储最后任务。

预定义添加标准可以指定每个任务的图元的最大数量。

图元可以分组成图元块,并且预定义添加标准可以指定每个任务的图元块的最大数量。

预定义添加标准可以防止片段的任务内重叠。

预定义添加标准可以防止片段的任务间重叠。

第二方面提供了一种基于图块的图形流水线,包括:标签缓冲器;以及硬件逻辑,所述硬件逻辑被布置成,在清除标签缓冲器的触发之后:从所清除的标签缓冲器生成一个或多个任务,每个任务包括对程序的引用以及将在其上执行程序的一个或多个片段,其中,片段是在采样位置处的图元的元素;确定是否满足预定义合并标准;以及响应于确定满足所述合并标准,将来自下一标签缓冲器清除的一个或多个片段添加到从所清除的标签缓冲器生成的一个或多个任务的最后任务。

硬件逻辑可以位于标签缓冲器之内。

所述基于图块的图形流水线还可以包括纹理/着色单元,并且其中,所述硬件逻辑位于标签缓冲器与纹理/着色单元之间。

第三方面提供了一种被配置成执行第一方面的方法的基于图块的图形流水线。

所述图形流水线可以体现为集成电路上的硬件。可以提供一种在集成电路制造系统处制造图形流水线的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中被处理时配置该系统以制造图形流水线。可以提供一种非暂态计算机可读存储介质,其上存储有集成电路的计算机可读描述,当被处理时,该计算机可读描述使布局处理系统生成在集成电路制造系统中使用的电路布局描述以制造图形流水线。

可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有描述图形流水线的计算机可读集成电路描述;布局处理系统,该布局处理系统被配置成处理集成电路描述,以便生成体现图形流水线的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置成根据电路布局描述来制造图形流水线。

可以提供一种用于执行本文中描述的任一方法的计算机程序代码。可以提供非暂时性计算机可读存储介质,在其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文中描述的任何方法。

如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。

附图说明

现在将参考附图详细描述示例,在附图中:

图1示出了示例性图形流水线的示意图;

图2是生成可以在图1的流水线100中实施的任务的改进方法的第一示例的流程图;

图3是生成可以在图1的流水线100中实施的任务的改进方法的第二示例的流程图;

图4示出了其中实施图形流水线的计算机系统;以及

图5示出了用于生成体现如本文所述的图形流水线的集成电路的集成电路制造系统。

附图示出各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其它形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同附图标记来指示相似特征。

具体实施方式

通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于所属领域的技术人员而言将是显而易见的。

现在仅通过示例的方式来描述实施例。

图1示出了示例性图形处理单元(GPU)流水线100的示意图,其可以在GPU内在硬件中实施,并且使用基于图块的渲染方法。如图1中所示,流水线100包括几何形状处理单元102、平铺单元104、深度测试单元106(其也可以被称为隐藏表面移除单元)和纹理化/着色单元(TSU)108。流水线100还包括一个或多个存储器和缓冲器,例如第一存储器110、第二存储器112(其可以称为参数存储器)、深度缓冲器113和一个或多个标签缓冲器114。这些存储器和缓冲器中的一些可以在芯片上实现(例如,在与GPU 102、平铺单元104、深度测试单元106和TSU 108中的一些或全部相同的一块硅上),并且其它可以单独实现。应当理解,流水线100可以包括图1中未示出的其它元件。

几何形状处理单元102接收用于应用的图像几何数据,并将其变换到域空间(例如,UV纹理坐标)以及在需要时执行镶嵌。除镶嵌之外,由图形处理单元102执行的操作包括由顶点着色器对顶点属性(其中位置仅为这些属性中的一个)执行的每顶点变换,并且这些操作也可以被称为“变换和照明”(或“变换和着色”)。几何形状处理单元102可以例如包括镶嵌单元和顶点着色器,并且输出被存储在存储器110中的数据。输出的此数据可以包括图元数据,其中,图元数据可以包括每个图元的多个顶点索引(例如,三个顶点索引)和顶点数据的缓冲器(例如,对于每个顶点、UV坐标以及在各种示例中包括其它顶点属性)。在不使用索引的情况下,对于每个图元图元数据可以包括多个域顶点(例如,三个域顶点),其中,域顶点可以仅包括UV坐标或者可以包括UV坐标加上其它参数(例如,位移因子和可选地父UV坐标)。

平铺单元104从存储器110读取由几何形状处理单元102(例如,由几何形状处理单元102内的镶嵌单元)生成的数据,生成每图块显示列表,并将这些输出到参数存储器112。对于特定图块,每个每图块显示列表都标识至少部分位于该图块内或与该图块重叠的那些图元。这些显示列表可以由平铺单元104使用平铺算法来生成。然后,GPU流水线内的后续元件(例如深度测试单元106)可以从参数存储器112读取数据。平铺单元104的后端还可以将图元分组到图元块中。

深度测试单元106访问来自参数存储器112的每图块显示列表,并对图块中的图元的片段执行深度测试。当前深度值(其可以称为“深度状态”)可以存储在深度缓冲器113中且从该深度缓冲器访问。如果深度测试单元106确定一片段对图像数据有贡献,则与该片段相关联的一个或多个标识符(均被称为标签)被写入标签缓冲器114。所述一个或多个标识符可以包括标识该图元的标签和标识所述图元是其一部分的图元块的标签。然而,如果发现该片段对图像数据无贡献(例如,因为其深度指示片段更远离已经存储在标签缓冲器中的不透明片段或被不透明片段遮挡,所述不透明片段可以被称为遮挡者),则与该片段相关联的标签不被写入标签缓冲器114。

标签缓冲器114为来自图块中的每个采样位置的最前方图元(即,最接近视点的那些,也可以称为“最近”)的片段保存标签。为了将片段的标签存储在标签缓冲器114中,将片段所属的图元的标识符存储在对应于该片段的位置,并且在片段和标签缓冲器中的位置之间存在1:1的关联。因此,由图元标识符(或标签)和该标识符在标签缓冲器中存储的位置的组合来定义片段。因此,将片段存储在标签缓冲器中的动作是指将片段所属的图元的标识符存储在标签缓冲器中对应于该片段的采样位置的位置中。

纹理化/着色单元(TSU)108执行纹理化和/或着色任务。术语“任务”在本文中用于指代一个或多个数据项(例如,像素或样本)的群组以及要对那些数据项执行的工作。例如,除了要根据程序处理的数据集合之外,任务还可以包括或与程序(例如,着色器)或所述程序的引用相关联,其中此数据集合可以包括一个或多个数据项。术语“实例”(或“程序实例”)在本文中用于指代路径经过代码的各个实例。因此,实例是指单个数据项(例如,单个片段或像素,其中在本文中所描述的方法的上下文中,当片段已经更新输出缓冲器时,它变成像素,所述输出缓冲器可替代地称为片上帧缓冲器或分区储存库)和对将在数据项上执行的程序(例如,着色器)的援引(例如,指针)。因此,任务包括一个或多个实例,并且通常包括多个实例。在本文所述的方法的上下文中,几乎所有实例(例如,除平铺实例的结束之外)都对应于片段。

当标签缓冲器114被清除到TSU 108时,生成任务。有多种情况触发标签缓冲器114的清除,在下文描述这些情况。当标签缓冲器114被清除时,通过扫描输出(或收集)与来自标签缓冲器114的片段有关的数据并将其放入任务中(其中每个片段对应于如上所述的单独实例)来形成任务。任务之内的最大实例数量(因此还有片段的数量)受到图形架构中SIMD结构的宽度的限制。通过尽可能满地填充任务来提高TSU 108(以及因此图形流水线100)的效率;然而,也存在控制片段如何打包到任务中的若干约束。在当前系统中,由单次标签缓冲器清除操作生成的任务群组被统称为轮次,并且TSU 108实施机制,确保来自某一轮次的所有任务在来自下一轮次的任何任务之前完成对深度缓冲器的更新(例如,在阿尔法测试之后进行晚期深度测试或对深度测试提供反馈)。这确保了按照正确的次序处理像素,并避免了不按次序执行读或写等危险。然而,当轮次中的任务未被完全占用(即,它们含有少于最大数量的实例)时,流水线的效率会被降低,并且随着SIMD结构的宽度增加,对此的影响会增加(例如,对于128宽度的SIMD结构的影响大于对32宽度的SIMD结构)。通常,至少轮次中的最后一个任务将不被完全占用(例如,在SIMD宽度为128的流水线中,最后任务通常包含少于128个实例)。

如图1中所示,可以存在多于一个标签缓冲器114。这使得能够并行实施两个操作:(i)从已经清除的第一标签缓冲器扫描输出数据以形成任务,以及(ii)将标签存储(或累积)到第二标签缓冲器中。这种并行操作可以被称为“双重缓冲”,由于无需在将更多标签写入标签缓冲器(即操作(ii))之前等待完成清除(即操作(i)),因此提高了流水线100的操作效率。

如上所述,存在触发标签缓冲器114的清除的多种情况,并且这些情况中的一种是在图块末端。当标签缓冲器已满或出现标签缓冲器重叠时,标签缓冲器114也被清除。当发现非不透明片段(例如,半透明或穿透片段)在标签缓冲器中存储的先前片段前方(即,非不透明片段与所存储片段处于相同的采样位置并且比所存储的片段更接近视点)时,发生标签缓冲器重叠,而不管(已经存储的)先前片段是不透明的还是非不透明的。如果重叠(即,最前)片段不透明,则不会发生标签缓冲器重叠,因为在这种情况下,允许最前片段盖写(即,替换)较远片段,因为较远片段在最终渲染图像中将不可见。标签缓冲器重叠触发了标签缓冲器清除,因为片段的混合和/或确定是否更新深度值(例如,针对穿透片段)是由TSU108执行的。

当标签缓冲器已满时,即当达到图元标签的数量极限或标签缓冲器中的图元块标签的数量极限时,标签缓冲器114也被清除。存在触发清除的其它情况,并且这些情况包括从穿透到不透明/半透明以及对象之前/之后(可以称为“每个对象清除”)的图元类型转变。

如上所述,存在控制片段如何被打包到任务中的多种约束。任务中的实例以及因此片段的最大数量由SIMD宽度(例如128)设定,并且另外单个任务中不能存在来自多于预定义数量的图元(例如,来自不超过8个图元)的片段,并且这些图元不能来自多于预定义数量的图元块(例如,它们可能全部需要来自相同的图元块,其中,图元块例如可以包括最多80个图元)。对图元数量的约束是这些图元的TSU处理(例如,计算平面方程)期间保留(或将保留)的存储器量的结果。

本文描述了将片段打包到任务中的改进方法,所述方法可以响应于标签缓冲器清除而被实施。如下文更详细所述,如果标签缓冲器清除产生的最后任务满足某个预定义标准(在本文中称为合并标准),并且标签缓冲器清除发生在图块末端之前,则它被搁置。然后,将来自后续轮次的附加片段(即,在标签缓冲器清除之后添加到标签缓冲器的片段)添加到被搁置的任务,使得其变得被更完全占用。这一更完全填充的任务可以接着作为单独的轮次被传递到TSU 108,或者任务可以被合并到下一轮次(例如,向前合并,使得原本可能在轮次P中的任务反而被合并到轮次P+1中)或初始轮次(例如,向后合并,使得任务保留在轮次P中)。通过这种方式,任务占用率增加,这提高了流水线100的整体效率。在实施这种方法的情况下,消除了当前系统中存在的限制,即,任务只能含有来自单次标签缓冲器清除的片段。

虽然在基于图块的渲染的上下文中描述了将片段打包到任务中的改进方法,但该方法还可以与其它渲染方法(例如,其它延迟渲染方法)一起使用。

图2是生成可以在图1的流水线100中实施的任务的改进方法的第一示例的流程图。该方法可由标签缓冲器114(例如,由标签缓冲器114的后端中的硬件)或由位于标签缓冲器114与TSU 108之间的硬件实施。

该方法包括接收用于清除标签缓冲器的触发(框202),以及响应于此,通过从清除的标签缓冲器扫描输出片段来生成一个或多个任务(框204)。一旦从清除的标签缓冲器生成最后任务(在框204中),就确定是否满足预定义的合并标准(框206)。如果不满足合并标准(框206中的“否”),那么已生成的所有任务(包括最后一个任务)都作为轮次P的一部分而被发布(框208);然而,如果满足合并标准(框206中的“是”),则最后一个任务被搁置,并且一个或多个片段(在可能的情况下)被添加到来自下一次标签缓冲器清除的最后任务(框210)。

(在框206中)应用的合并标准包括一个条件,即清除不在图块末端,使得如果在图块末端发生清除,则无论与所生成的最后任务相关(在框204中)也可以定义的任何其它标准如何,都不满足合并标准(框206中的“否”)。这是因为将没有后续片段可以用于填充由此特定标签缓冲器清除(在框204中)产生的最后任务。

(在框206中)用于确定是否试图更充分地填充搁置的最后一项任务的合并标准可以另外包括关于最后任务定义的任何合适的标准。在示例中,合并标准包括最后任务的阈值占用率,这可以被称为满度标准。满度标准可以例如根据任务中的实例数量(以及因此还有片段数量)和/或实例相关的图元数量来定义。例如,满度标准可以设置为实例的70%占用率和/或图元的70%占用率。

当(在框210中)从下一标签缓冲器清除向来自先前标签缓冲器清除的最后(并且不完整)任务添加一个或多个片段时,可以预定义一个或多个标准以确定是否可以添加特定片段。这些标准可以被称为添加标准,可以与用于触发标签缓冲器清除(例如,除图块的末端之外)的那些标准相同(或是其子集)。

在各种示例中,从下一次标签缓冲器清除添加到任务的任何片段不得对应于相同像素或每个像素存在多于一个采样位置的情况下的相同采样位置,因为在该任务中已经有任何其它片段,即不得有任何任务内片段重叠。另外,如上所述,单个任务中可能存在预定义的最大数量的图元(例如,不超过8个图元)和/或图元块(例如,不超过一个图元块)(例如,添加到搁置的最后任务的任何片段可能需要来自与任务中的现有片段相同的图元块中的图元)。当从标签缓冲器中扫描输出数据时,这可以按照先到先服务次序分批(例如,8个图元的批)完成,但保留图元块次序,因此,要添加到搁置的最后任务的任何片段具有来自相同图元块的高概率。

在各种示例中,除了防止片段的任务内重叠的添加标准之外(即,在片段将与任务中的现有片段重叠的情况下,不能添加片段),添加标准还可以防止片段的任务间重叠(即,仅在与进一步填充的搁置的最后任务同一轮次中将释放的任何其它任务中的片段不存在重叠的情况下,才能添加片段)。

此外,如上所述,任务由实例形成,并且每个实例是指片段(数据项)和对在片段上执行的程序(例如,着色器)的援引。因此,如果与任务之内的现有片段相同的程序(例如,相同着色器)在被添加的片段上被执行,并且符合上述标准,才能向该任务添加片段。在各种示例中,可能存在限制(在框210中)可以将哪些片段添加到任务中的其它标准,例如,在来自多于一个图元块的片段可以包括在任务中的情况下,那么图元块(因此也包括片段)将需要具有相同的状态(其中,状态可以包括程序和其它参数)。对于图元块中的所有图元,状态是固定的(即,相同),片段与它们来自的图元具有相同状态。

如果可能,向来自先前标签缓冲器清除的最后任务添加片段,直到该任务被完全占用(例如,任务中的实例数量对应于SIMD宽度),但是,在任务已满之前,就可能达到每个任务的图元或图元块的数量的限制,并且一旦达到该限制,就不会将另外的片段添加到任务。在某些情况下,可能没有足够多的合适片段(即,符合上述标准的片段)来填充来自先前标签缓冲器清除的最后任务,并且另外在这种情况下,不向任务添加另外的片段。在三角形较小且因此每个图元具有更少片段的情况下,更可能达到此类限制。

图3是生成任务的改进方法的第二示例的流程图,其提供了更多实施细节。类似于图2的方法,图3的方法始于清除标签缓冲器的触发(框202)。

如果存在由先前的标签缓冲器清除生成的存储的最后任务(框306中的“是”),则来自当前标签缓冲器清除的一个或多个片段被添加到存储的任务(在可能的情况下)(框312)。如上所述,如果片段要添加到所存储的任务中(在框312中),则可能存在必须由片段满足的一个或多个预定义标准(称为“添加标准”)。

一旦所存储的任务已满或由于另一原因(例如,由于对图元或图元块和/或重叠片段的数量限制)不可能将任何另外的片段添加到任务中,则所述方法可以通过三种方式(图3中标记为1、2和3)之一进行下去,不同的实施方式可以利用这三种方式中的固定一种,或者可以包括被布置成根据特定环境在这些方式中任意两种或所有三种方式之间切换的决策逻辑(例如,如果可能,可以使用第二种或第三种方式,仅当由于下文所述原因不能使用第二和/或第三种方式时,方可使用第一种方式)。

在要进行的三种不同方式中的第一种方式1中,释放进一步(即,更满地)填充的所存储最后任务作为单独的轮次,轮次(P-1)’(框314)。此轮次(轮次(P-1)’)位于含有来自先前标签缓冲器清除(轮次(P-1))的其它任务的轮次紧后方。然后,将来自当前标签缓冲器清除的其余片段形成为任务(框308a),并且确定是否满足合并标准(框206a)。这些标准如上文参考图2所描述,并且首先确定(在框202中接收的)触发是否不在图块的末端,并且接着定义关于(在框308a中)所生成的最后任务的一些标准。如果不满足合并标准(框206a中的“否”),则(框308a中形成的)任务被释放为下一轮次,即轮次P(框310)。如果满足合并标准(框206a中的“是”),则存储最后任务(框316a),并且来自当前标签缓冲器清除的其它任务被释放为轮次P(框322)。

在要进行的三种不同方式的第二种2中,从剩余片段创建多个任务(框308b),并且确定是否满足合并标准(框206b)。这些标准如上文参考图2和框206a所述。如果不满足合并标准(框206b中的“否”),则任务,包括所存储的任务,被释放为下一轮次,轮次P(框318)。如果满足合并标准(框206b中的“是”),则新创建的最后任务被存储(框316b),其它任务,包括先前存储的任务,以及现在进一步填充的任务被释放为轮次P(框324)。如上所述,仅在该任务与轮次P中的任何其它任务之间不存在片段重叠的情况下,才能将进一步填充的所存储(在框312中生成的)最后任务向前合并到轮次P中(即,才能使用第二种方式2)。

在要进行的三种不同方式中的第三种3中,进一步填充的所存储最后任务(如框312中生成的)被向后合并到轮次P-1中。这是通过如下方式实现的:一旦被创建就释放进一步填充的所存储最后任务作为与由先前标签缓冲器清除中的片段形成的其它任务相同的轮次的一部分(框320)。然后,将来自当前标签缓冲器清除的其余片段形成为任务(框308a),并且确定是否满足合并标准(框206a)。这些标准如上文参考图2和要进行的第一种方式1所述。如果不满足合并标准(框206a中的“否”),则如上所述,(框308a中形成的)任务被释放为下一轮次,即轮次P(框310)。如果满足合并标准(框206a中的“是”),则存储最后任务(框316a),并且来自当前标签缓冲器清除的其它任务被释放为轮次P(框322)。

仅在该任务与轮次P-1中的任何其它任务之间不存在片段重叠的情况下,才能将进一步填充的所存储最后任务向后合并到轮次P-1中(即,才能使用第三种方式3)。由于在(在框312中)将片段添加到所存储的最后任务时已经释放了轮次P-1中的其它任务,所以在释放轮次P-1中的其它任务之前(例如,在图3的方法的先前迭代中)生成了额外的数据结构,以便能够在(在框312中)将额外片段添加到所存储的最后任务时进行检查。此数据结构可以被称为先前轮次掩码,标识包括在轮次中的所有片段,并且针对添加到所存储最后任务的片段进行检查以识别任何重叠(即,相同采样位置处的任何片段)。如果出现重叠,则无法向后合并更完整填充的最后任务。在本文所述方法的变化中,此额外数据结构可以另外或替代地用于帮助识别要在框312中添加到所存储的任务的片段(例如,以便增加使用上述第二种方式2的可能性);然而,这还可能需要跟踪未选择的片段(例如,使得已跳过的那些片段可在稍后被重新访问)。

如图3中所示,针对后续的标签缓冲器清除重复该方法。

如上所述,图3的方法示出了所述方法的一部分(图3中标记为1-3)的三种替代实施方式。在第一选项(1)中,更完全填充的所存储最后任务作为独立的轮次而进行(即,与含有来自先前标签缓冲器清除的其它片段的轮次和含有来自下一标签缓冲器清除的其它片段的轮次独立)。这需要最少的额外逻辑来实施,因为除了在添加片段以更完全地填充所存储的任务时执行的检查之外,没有额外的重叠检查。然而,添加轮次可能导致额外延迟,因为如上所述,在后续轮次中的任何任务之前,轮次中的所有任务都必须完成。例如,当释放轮次P-1的最后任务作为轮次P-1的一部分时,那么该任务可以与轮次P-1中的其它任务同时执行,而如果根据选项(1),该最后任务不是作为任务P-1的一部分释放,而是被存储并随后被释放为独立的轮次,即轮次(P-1)’(在框314中),那么,该任务必须要等待,直到释放时在轮次P-1中的所有任务都已经完成深度缓冲器的更新。第二和第三选项(2,3)均涉及将更完全填充的所存储最后任务向前或向后合并,消除了对额外轮次的需要,并且第二选项(向前合并,2)的实施比第三选项(向后合并,3)复杂度更低,因为它不需要额外数据结构(先前轮次掩码)以便能够执行重叠检查。

在各种示例中,流水线可以被布置成实施三种选项(1-3)中的多于一种,这提供了额外灵活性。例如,在能够实施所有三种选项的流水线中,如果可能,将更完全填充的所存储最后任务向前合并(选项2);但是,如果这是不可能的,则检查附加数据结构,以查看更完全填充的所存储最后任务是否可以向后合并(选项3)。仅当更完全填充的所存储最后任务不能被向前或向后合并时,才会将其作为单独的轮次发送(选项1)。在另一示例中,流水线可以能够实施第一选项(1)和第二选项(2)或第三选项(3)。

当更完全填充的所存储最后任务被向前合并(选项2)或向后合并(选项3)时,可能需要变换图元索引和/或合并来自独立查找表(LUT)的数据。例如,为了减小标签缓冲器的大小,存储在标签缓冲器中的图元索引可以不是唯一的(并且因此可以被称为LUT索引,其中这些索引涉及图元),并且可以在标签缓冲器清除之后重复使用图元索引(但不是数据)。如果标签缓冲器具有N个图元的限制,则索引0至N-1可以存储在标签缓冲器中(其中,这些索引可以包括比唯一图元标识符更少的位),并且标签缓冲器中使用的索引与实际(唯一)图元标识符之间的映射可以存储在LUT中,其中,每个轮次具有独立的LUT(其中,这些LUT可以被称为图元LUT,以将它们与可以用于GPU流水线中的其它LUT区分开)。因此,一次标签缓冲器清除中的图元0未必是指与后续或先前标签缓冲器清除中的图元0相同的图元。在此类示例中,当更完全填充的所存储最后任务向后或向前合并时,如果需要,可以将更完全填充的所存储最后任务所需的(例如,从LUT索引到图元ID的)映射数据进行变换,并且添加到其合并入的轮次的LUT。在示例中,如果某一图元在第一标签缓冲器清除中具有LUT索引3,并且在后续标签缓冲器清除中具有LUT索引1,则如果更完全填充的所存储最后任务向后合并(选项3),则可以将此图元的映射从1更新为3,如果更完全填充的所存储最后任务向前合并(选项2),则从3更新为1。更一般地,当映射数据被变换时,更新它以包括该任务正被合并到的轮次中的图元的LUT索引,而不论先前轮次中是否存在该图元(因此没有在先LUT索引)。

如上所述,确定来自标签缓冲器清除的片段是否可以添加到来自紧邻的先前标签缓冲器清除的所存储最后任务的标准之一为是否超过对每个任务的图元块数量的限制。在许多示例中,此限制被设置为每个任务一个图元块。在各种示例中,此限制可以替代地设定为每个任务两个图元块,并且在此类示例中,有更高概率将片段添加到所存储最后任务,因此有更高概率可以利用片段完全填充所存储最后任务。然而,允许每个任务两个图元块需要任务能够存储指向两个不同图元块的指针(例如,指向本地存储装置的两个分配单元的指针,其可以被称为“系数存储”,每个图元块一个分配单元)并且可能需要额外的本地存储装置(例如,因为后续轮次的任务无法重复使用所存储最后任务的分配单元,即使它们与来自相同图元块的相同图元相关)。在各种示例中,对每个任务的图元块数量的限制从一个放松到两个可以仅适用于所存储最后任务,而不适用于在标签缓冲器清除之后生成的其它任务。在其它示例中,可以为生成的所有任务使用对每个任务的图元块数量的相同限制。在所添加的片段可以从不同的图元块到所存储最后任务中的原始片段的情况下(即,与来自先前标签缓冲器清除的所添加片段不同的图元块),可能不需要变换图元LUT中的数据,因为图元索引的任何差异可以由第二图元块指针适应,例如,图元可以由两个LUT索引唯一地标识:图元LUT的索引和图元块LUT的索引。

虽然上述方法限制了任务,使得任何任务均不能含有重叠片段,但如果实施方法的流水线强制按顺序处理任务之内(例如,TSU之内)并且关于输出缓冲器和深度缓冲器更新(使得按照与将实例添加到任务中的相同顺序执行更新)的实例(即片段),那么,在向所存储的任务添加片段时,可以放松此要求,并省去重叠检查。

通过允许每个任务多个图元块和/或任务内片段重叠,提高了通过使用本文所述的方法实现的总体效率增加,因为有更高概率更完全地填充所存储最后任务。

在上文所描述的方法的变化中,(在框210和312中)添加片段以进一步填充所存储的任务可以以预定义粒度,例如以片段的块(例如,片段的2x2块)来实施,这可以实现更简单的计算(并且因此执行这些计算的硬件减少),并且先前轮次的掩码可以更小(并且因此需要更少的存储器来存储)。然而,通过减小添加片段的粒度(即,一次添加多于一个片段),并且为了确定片段(或其群组)是否可以被添加到所存储的任务而进行的评估降低了效率,因为进一步填充的任务将比逐个添加片段的情况更可能较不完整。

图4示出了其中可以实现本文所述的方法的计算机系统。计算机系统包括CPU402、GPU 404、存储器406和其它装置414,诸如显示器416、扬声器418和相机420。GPU 404可以包括实施如本文所述的方法的流水线(例如,如图1中所示)。所述计算机系统的部件可通过通信总线422彼此通信。

图4的系统和图1的流水线100被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文中描述的由功能块形成的中间值不需要由特定功能块在任何时间点物理地生成,并且可以仅仅表示方便地描述由系统或流水线在其输入与输出之间执行的处理的逻辑值。

如本文中所描述的图形流水线可以体现为集成电路上的硬件。本文所描述的图形流水线可以被配置成执行本文所描述的任一方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。

如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。

处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如通用GPU)、微处理器、旨在加速CPU之外的任务的任何处理单元等。计算机或计算机系统可以包括一个或多个处理器。本领域技术人员将认识到,这种处理能力被结合到许多不同的设备中,因此术语“计算机”包括机顶盒、媒体播放器、数字收音机、PC、服务器、移动电话、个人数字助理和许多其它设备。

本发明还意图包围限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种计算机可读存储介质,所述计算机可读存储介质上编码有呈集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中处理(即,运行)时,所述集成电路定义数据集将系统配置成制造被配置成执行本文所描述的任何方法的图形流水线,或者制造包括本文所描述的任何设备的图形流水线。集成电路定义数据集可以是例如集成电路描述。

因此,可以提供一种在集成电路制造系统处制造如本文所描述的图形流水线的方法。此外,可以提供一种集成电路定义数据集,其在集成电路制造系统中处理时使制造图形流水线的方法得以执行。

集成电路定义数据集可呈计算机码形式,例如作为网表、用于配置可编程芯片的码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传输级(RTL)码、作为例如Verilog或VHDL的高级电路表示,和作为例如OASIS(RTM)和GDSII的低级电路表示。在逻辑上定义集成电路的更高级表示法(例如RTL)可以在配置成在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合那些元件以便生成由所述表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的码。

现在将参照图5描述在集成电路制造系统处处理集成电路定义数据集以便配置系统制造图形流水线的示例。

图5示出了配置成制造如本文的任一个示例中所描述的图形流水线的集成电路(IC)制造系统502的示例。具体地说,IC制造系统502包括布局处理系统504和集成电路生成系统506。IC制造系统502被配置成接收IC定义数据集(例如,定义如本文中的任一个示例中所描述的图形流水线),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如本文中的任一个示例中所描述的图形流水线)。IC定义数据集的处理将IC制造系统502配置成制造体现如本文中的任一个示例中所描述的图形流水线的集成电路。

布局处理系统504配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统504确定了电路布局,布局处理系统可将电路布局定义输出到IC生成系统506。电路布局定义可以是例如电路布局描述。

如所属领域中已知,IC生成系统506根据电路布局定义生成IC。例如,IC生成系统506可实施生成IC的半导体装置制造工艺,此工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可以呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1006的电路布局定义可呈计算机可读代码的形式,IC生成系统1006可使用所述计算机可读代码来形成用于生成IC的合适掩模。

由IC制造系统502执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统1002可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩模来制造集成电路。

在其它示例中,集成电路定义数据集在集成电路制造系统处的处理可以将系统配置成制造其中IC定义数据集不进行处理以便确定电路布局的图形流水线。例如,集成电路定义数据集可以定义例如FPGA的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将IC制造系统配置成(例如,通过将配置数据加载到FPGA)生成具有所述定义的配置的可重新配置的处理器。

在一些实施例中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集以上文相对于图5所描述的方式对集成电路制造系统进行配置可制造出如本文所描述的装置。

在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图5中所示的示例中,IC生成系统还可由集成电路定义数据集配置成在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或以其它方式向集成电路提供与集成电路一起使用的程序代码。

本领域技术人员将认识到用来存储程序指令的存储装置可分布在网络上。例如,远程计算机可以将所描述的过程的示例存储为软件。本地或终端计算机可以访问远程计算机,并下载软件的一部分或全部以运行程序。替代地,本地计算机可以根据需要下载软件的片段,或者在本地终端处执行一些软件指令,而在远程计算机(或计算机网络)处执行另一些软件指令。本领域技术人员还将认识到通过利用本领域技术人员已知的常规技术,软件指令的全部或一部分可以由诸如DSP、可编程逻辑阵列等的专用电路执行。

本文描述的方法可以由配置有存储在有形存储介质上的机器可读形式的软件的计算机执行,例如,软件采用包括用于将计算机配置为执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或采用包括计算机程序代码装置的计算机程序的形式,当程序在计算机上运行时以及在计算机程序可以在计算机可读存储介质上实现的情况下,所述代码装置适于执行本文所述任何方法的所有步骤。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,并且不包括传播信号。软件可适于在并行处理器或串行处理器上执行,使得所述方法步骤可以任何适当顺序执行或同时执行。

本文描述的硬件部件可以由其上编码有计算机可读程序代码的非暂时性计算机可读存储介质生成。

存储用于实现所公开方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,诸如SRAM或DRAM。可用于实现非易失性存储器的技术的示例包括光学和磁存储器技术、闪存存储器、相变存储器、电阻RAM。

对“逻辑”的特定引用是指执行一个或多个功能的结构。逻辑的示例包括被布置成执行这些功能的电路。例如,这种电路可以包括在制造过程中可用的晶体管和/或其它硬件元件。这种晶体管和/或其它元件可用于形成实现和/或包含存储器的电路或结构,例如寄存器、触发器或锁存器,逻辑运算器,例如布尔运算,数学运算器,例如加法器、乘法器,或者,移位器和互连,作为示例。这些元件可以作为定制电路或标准单元库、宏来提供或在其它抽象级别提供。这些元件可以特定布置互连。逻辑可以包括具有固定功能的电路,并且电路可以被编程为执行一个或多个功能;可以从固件或软件更新或控制机制提供这样的编程。被标识为执行一个功能的逻辑还可以包括实现组成性功能或子过程的逻辑。在一个示例中,硬件逻辑具有实现一个或多个固定功能操作,状态机或过程的电路。

与已知的实现方式相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。这例如可以通过在预定义面积预算内制造模块的多个实例来完成。

如对本领域技术人员显而易见的,可以延长或改变本文给出的任何范围或设备值而不丧失所寻求的效果。

应当理解,上述益处和优点可以涉及一个实施方案,或者可以涉及多个实施方案。实施方案不限于解决任何或所有所述问题的那些或具有任何或所有所述益处和优点的那些。

对“一个”项目的任何引用都指的是这些项目中的一个或多个。术语“包括”在本文中用于表示包括所标识的方法块或元件,但是这些块或元件不包括排他列表,并且设备可以包括附加的块或元件,并且方法可以包括附加的操作或元件。此外,并不暗示块、元件和操作本身是关闭的。

本文所述的方法的步骤可以任何合适的顺序或在适当时被同时执行。图中框之间的箭头示出方法步骤的一个示例序列,但并不旨在排除其它序列或并行执行多个步骤。另外,在不脱离本文描述的主题的实质和范围的情况下,可以从任何方法中删除单个块。上述任何示例的一些方面可以与所描述的任何其它示例的一些方面组合以形成进一步的示例而不会丧失所寻求的效果。在图的元件被示出通过箭头连接的情况下,应当理解,这些箭头仅示出元件之间的通信(包括数据和控制消息)的一个示例流向。元件之间的流向可以是任一方向或两个方向。

申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

22页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种用于核电厂SVDU的多图层显示协处理器

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!