高效卷积运算的制作方法



1.本发明涉及高效卷积运算。


背景技术:



2.图形处理通常涉及执行大量计算以最终定义所渲染的每个像素的特性。片段着器(也称为像素着器)可用于计算这些特性(例如,颜和其他属性),其中术语“片段”可用于指样本位置处的图元的元素,并且最终渲染图像中的样本位置与像素位置之间可存在1:1对应。输出像素的特性可取决于来自源纹理的许多纹理像素(其中该源纹理可以是由图形处理流水线内的较早操作生成的中间渲染目标),并且因此计算输出像素的特性可涉及卷积运算(例如,计算来自源纹理的纹理像素组的加权和)。
3.下文所描述的实施方案仅作为示例被提供,且并不限制解决已知图形处理系统的缺点中的任一个或全部的实施方式。


技术实现要素:



4.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
5.描述了一种在gpu流水线中操作纹理化/着单元的方法。该方法使用纹理硬件来集体获取计算输出像素组的特性所需的所有纹理像素,而无需任何重复。该方法然后绕过纹理硬件中的双线性滤波器硬件,并且将所获取和未过滤的纹理像素数据从纹理硬件单元传递到纹理化/着单元中的着器硬件。着器硬件使用所获取的纹理像素数据来执行多个卷积运算以计算输出像素中的每一者的特性。
6.第一方面提供了一种在gpu流水线中操作纹理化/着单元的方法,该方法包括:由纹理化/着单元中的纹理硬件集体获取计算输出像素组的特性所需的所有纹理像素;绕过纹理硬件中的双线性滤波器硬件并且将所获取和未过滤的纹理像素数据从纹理硬件单元传递到纹理化/着单元中的着器硬件;以及使用纹理像素数据在着器硬件中执行多个卷积运算以计算输出像素组中的输出像素中的每一者的特性。
7.该方法还可包括计算输出像素组的特性所需的每个纹理像素仅被获取一次。
8.该方法还可包括在执行多个卷积运算之前:将纹理像素数据广播到分配给对应于输出像素中的每一者的实例的寄存器。可将输出像素组的所有获取的纹理像素数据广播到分配给实例中的每一者的寄存器。
9.使用纹理像素数据执行多个卷积运算以计算输出像素组的特性可包括对于每个输出像素:访问存储在分配给对应实例的寄存器中的纹理像素数据;以及使用所访问的纹理像素数据和权重集合来执行多个卷积运算以计算输出像素的特性,其中在输出像素的卷积的内核外部的任何纹理像素的权重被设置为零。
10.所获取的纹理像素数据可被选择性地广播到分配给对应于输出像素中的每一者
的实例的寄存器,使得实例的寄存器仅接收用于对该实例执行卷积运算的纹理像素数据。
11.使用纹理像素数据执行多个卷积运算以计算输出像素组的特性可包括对于每个输出像素:访问存储在分配给对应实例的寄存器中的纹理像素数据;以及使用所访问的纹理像素数据来执行多个卷积运算以计算输出像素的特性。
12.所获取的纹理像素数据可以存储在输出像素组的共享寄存器中。
13.使用纹理像素数据执行多个卷积运算以计算输出像素组的特性可包括对于每个输出像素:从共享寄存器访问输出像素组的所获取的纹理像素数据的子集,该子集与具有零的输出像素的卷积的内核相对应;以及使用所访问的纹理像素数据在着器硬件中执行卷积运算以计算输出像素的特性。
14.使用纹理像素数据执行多个卷积运算以计算输出像素组的特性可包括对于每个输出像素:访问所获取的纹理像素数据中的每个纹理像素的权重,其中在输出像素的卷积的内核外部的任何纹理像素的权重被设置为零;以及使用所获取的纹理像素数据和所访问的权重在着器硬件中执行卷积运算以计算输出像素的特性。
15.访问所获取的纹理像素数据中的每个纹理像素的权重可包括选择权重阵列的子集,该子集取决于输出像素,并且其中在所选择的子集中,在输出像素的卷积的内核外部的任何纹理像素的权重可被设置为零。
16.访问所获取的纹理像素数据中的每个纹理像素的权重可包括访问多个预定义权重阵列中的一者,权重阵列中的每一者对应于多个输出像素中的不同一者,并且其中权重的不同子集被设置为零。
17.集体获取计算输出像素组的特性所需的所有纹理像素可包括:对于不同样本位置执行多个获取操作,每个样本位置从纹理像素中心偏移,以及定义要获取的相邻纹理像素的不同非重叠面片。
18.集体获取计算输出像素组的特性所需的所有纹理像素可包括:对于不同样本位置执行多个收集操作,每个样本位置从输出像素中的一者的中心偏移整数值,以及定义要获取的相邻纹理像素的不同非重叠面片。
19.第二方面提供了一种用于gpu流水线中的纹理化/着单元,该纹理化/着单元包括:纹理硬件,该纹理硬件包括获取单元和双线性滤波器硬件;以及着器硬件,其中纹理硬件被布置成在获取单元中获取计算输出像素组的特性所需的所有纹理像素,绕过双线性滤波器硬件并将所获取和未过滤的纹理像素数据输出到着器硬件,并且着器硬件被布置成使用纹理像素数据执行多个卷积运算以计算输出像素组中的输出像素中的每一者的特性。
20.计算输出像素组的特性所需的每个纹理像素可以仅获取一次。
21.着器硬件可被布置成在执行多个卷积运算之前将纹理像素数据广播到分配给对应于输出像素中的每一者的实例的寄存器。
22.可将输出像素组的所有获取的纹理像素数据广播到分配给实例中的每一者的寄存器。
23.着器硬件可被布置成使用纹理像素数据执行多个卷积运算以计算输出像素组的特性,包括对于每个输出像素:访问存储在分配给对应实例的寄存器中的纹理像素数据;以及使用所访问的纹理像素数据和权重集合来执行多个卷积运算以计算输出像素的特
性,其中在输出像素的卷积的内核外部的任何纹理像素的权重被设置为零。
24.第三方面提供了一种被配置为执行本文所述的方法的纹理化/着单元。
25.第四方面提供了一种方法,该方法包括:接收着器;确定着器是否为内核着器;以及响应于确定着器是内核着器,修改着器以对于输出像素组执行卷积运算中使用的所有纹理像素的集体获取,而不是对于输出像素组中的每个输出像素执行纹理像素的独立获取。
26.纹理化/着单元可以在集成电路上的硬件中体现。可以提供一种在集成电路制造系统处制造根据本文所述的任何纹理化/着单元的纹理化/着单元的方法。可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集将系统配置为制造根据本文所述的任何纹理化/着单元的纹理化/着单元。可以提供一种非暂时性计算机可读存储介质,其上存储有集成电路的计算机可读描述,当被处理时,该计算机可读描述致使布局处理系统生成在集成电路制造系统中使用的电路布局描述以制造根据本文所述的任何纹理化/着单元的纹理化/着单元。可以提供一种被配置为制造根据本文所述的任何纹理化/着单元的纹理化/着单元的集成电路制造系统。
27.可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有描述根据本文所述的任何纹理化/着单元的纹理化/着单元的计算机可读集成电路描述;布局处理系统,该布局处理系统被配置为处理集成电路描述,以便生成体现纹理化/着单元的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造纹理化/着单元。
28.可提供用于执行本文所述的任一方法的计算机程序代码。可以提供非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有计算机可读指令,这些计算机可读指令当在计算机系统处被执行时使计算机系统执行本文所述的任一方法。
29.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
30.现在将参考附图详细描述示例,在附图中:
31.图1示出示例性图形处理单元(gpu)流水线的示意图;
32.图2示出在gpu流水线内执行卷积的示例性方法的流程图;
33.图3示出示例性3
×
3内核的图形表示;
34.图4和图5示出使用图3的内核为输出像素的2
×
2组获取的纹理像素的两个不同图形表示;
35.图6示出示例性1
×
7内核的图形表示;
36.图7示出使用图6的内核为输出像素的2
×
2组获取的纹理像素的图形表示;
37.图8示出对于图3的内核执行集体获取的第一方法的图形表示;
38.图9示出对于图6的内核执行集体获取的第一方法的图形表示;
39.图10示出对于图3的内核执行集体获取的第二方法的图形表示;
40.图11示出对于图6的内核执行集体获取的第二方法的图形表示;
41.图12示出对于19
×
1内核执行集体获取的第一方法的图形表示;
42.图13是生成经转换的着器以实现图2的方法的第一示例性方法的流程图;
43.图14是生成经转换的着器以实现图2的方法的第二示例性方法的流程图;
44.图15a和图15b示出双线性插值反转的图形表示;
45.图16示出在gpu流水线内执行卷积的第二示例性方法的流程图,该方法是图2所示的方法的变型形式;
46.图17a、图17b和图17c示出图16的方法中的数据查操作的图形表示;
47.图18示出了实现图形处理系统的计算机系统;以及
48.图19示出了用于生成体现图形处理系统的集成电路的集成电路制造系统。
49.附图示出了各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
50.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施方案,并且对所公开的实施方案的各种修改对于本领域的技术人员将是显而易见的。
51.现在仅通过示例的方式来描述实施方案。
52.图1示出了示例性图形处理单元(gpu)流水线100的示意图,其可以在gpu内在硬件中实施,并且使用基于图块的渲染方法。如图1中所示,流水线100包括几何形状处理单元102、平铺单元104、深度测试单元106(其也可以被称为隐藏表面移除单元)和纹理化/着单元(tsu)108。流水线100还包括一个或多个存储器和缓冲器,例如第一存储器110、第二存储器112(其可以称为参数存储器)、深度缓冲器113和一个或多个标签缓冲器114。这些存储器和缓冲器中的一些可以在芯片上实现(例如,在与gpu 102、平铺单元104、深度测试单元106和tsu 108中的一些或全部相同的一块硅上),并且其他可以单独实现。应当理解,流水线100可以包括图1中未示出的其他元件。
53.几何形状处理单元102接收用于应用程序的图像几何数据,并将其变换到域空间(例如,uv坐标)以及在需要时执行镶嵌。除镶嵌之外,由图形处理单元102执行的操作包括由顶点着器对顶点属性(其中位置仅为这些属性中的一个)执行的每顶点变换,并且这些操作也可以被称为“变换和照明”(或“变换和着”)。几何形状处理单元102可以例如包括镶嵌单元和顶点着器,并且输出被存储在存储器110中的数据。输出的该数据可以包括图元数据,其中,图元数据可以包括每个图元的多个顶点索引(例如,三个顶点索引)和顶点数据的缓冲器(例如,对于每个顶点、uv坐标以及在各个示例中包括其他顶点属性)。在不使用索引的情况下,对于每个图元图元数据可以包括多个域顶点(例如,三个域顶点),其中,域顶点可以仅包括uv坐标或者可以包括uv坐标加上其他参数(例如,位移因子和可选地父uv坐标)。
54.平铺单元104从存储器110读取由几何形状处理单元102(例如,由几何形状处理单元102内的镶嵌单元)生成的数据,生成按图块显示列表,并将这些输出到参数存储器112。
108可包括除了纹理硬件116和着器硬件118之外(或代替其中的任一者)的元件。
61.如上所述,卷积是图像处理算法中的常见运算(例如,执行模糊运算,诸如高斯模糊,执行边缘检测或使图像锐化)。卷积通常不需要执行复杂的数学,而是需要为每个输出像素获取许多纹理像素,如内核所定义的。当获取由纹理硬件116执行时,这可能导致纹理硬件116(其相对于当硬件被设计时所预期的正常使用具有高工作负载)与着器硬件118(其相对于当硬件被设计时所预期的正常使用具有低工作负载)的工作负载之间的不平衡。本文中所描述的方法通过既减少由纹理硬件116执行的获取操作的数量,又增加由着器硬件118执行的工作来减少不平衡。
62.本文描述了操作gpu流水线(诸如图1中所示),并且特别是tsu 108的改进方法。如下文详细描述,该方法减少或消除由tsu执行的纹理像素获取中的冗余,由此减少tsu 108内的纹理硬件116的工作负载。如图1所示,纹理硬件116包括获取单元120(其执行纹理像素获取),并且还可以包括双线性滤波器硬件122(其被配置为执行双线性内插)。在本文所述的方法中,双线性滤波器硬件122被绕过,这进一步增加了纹理硬件116的吞吐量。当双线性滤波器硬件122被绕过时,本文所述的方法可在纹理像素与采样点之间存在1:1对应(即,采样点与纹理像素中心对准)的情况下使用。所述方法还可用于其中不存在1:1对应的情况,然而,在这些情况下,需要额外的操作来撤销可能已使用的导致纹理像素与采样点之间缺乏1:1对应的任何着器优化(例如,如下文参考图14所述)。
63.图2示出在诸如图1所示的gpu流水线100内执行卷积的示例性方法的流程图。如图2所示,方法的第一部分(框202、204)由纹理硬件116执行,而方法的第二部分(框206、208)由着器硬件118执行。该方法可参考图3至图7中以图形方式示出的两个示例进行描述。图3示出示例性3
×
3内核302的图形表示。在该实例中,使用9个纹理像素来计算每个输出像素304的特性。图6示出示例性1
×
7内核602的图形表示。在该实例中,使用7个纹理像素来计算每个输出像素604的特性。应当理解,本文所述的方法可与任何内核一起使用,并且图3和图6中所示的那些仅作为示例。尽管图6中的示例示出竖直1
×
7内核,但应当理解,本文所述的方法也适用于水平内核(例如,7
×
1内核)。此外,本文所述的方法可用于可分离的内核,例如分成n
×
1和1
×
n通道的n
×
n内核。
64.在该方法的第一部分中,纹理硬件116内的获取单元120获取输出像素组所需的所有纹理像素(框202),其中输出像素组包括两个或更多个输出像素,并且其中输出像素组所需的纹理像素中的每一者仅获取一次。这与已知方法形成对比,其中获取单元120针对输出像素组内的每个输出像素执行独立获取操作,这导致一些纹理像素被获取多次。受到集体获取(在框202中)的输出像素组可对应于tsu 108与相同pc并行地处理的实例组。
65.可参考图3中所示的示例性内核302来描述纹理像素获取操作中的保存。对于输出像素402的2
×
2组,如图4所示,每个输出像素需要获取9个纹理像素,并且因此使用已知方法(即,在对每个输出像素执行独立获取的情况下),将获取4
×
9个纹理像素。在所获取的这36个纹理像素中,存在相当大的重复(即,相同的纹理像素被获取不止一次)。如图4所示,计算左上输出像素(在2
×
2网格中)的特性所需的纹理像素中的6个纹理像素也被要求计算右上输出像素(如图4中的交叉着所指示)的特性。然而,如果输出像素402的整个组的纹理像素被集体获取(在可视为“收集”操作的操作中),则仅获取16个纹理像素。如图5所
示,在该组中的输出像素被表示为所获取的16个纹理像素502的组中的0-3个的情况下,仅四个纹理像素用于计算单个输出像素的特性,并且纹理像素中的四个纹理像素(来自16的组的中心四个)用于计算输出像素402的组中的输出像素中的每一者的特性。
66.图6所示的示例性内核602的保存略少。对于输出像素402的2
×
2组,每个输出像素需要获取7个纹理像素,并且因此对每个输出像素使用独立获取,将获取4
×
7个纹理像素。在所获取的这些28个纹理像素中,存在相当多的重复;然而,如果输出像素402的整个组的纹理像素被集体获取(在可视为“收集”操作的操作中),则仅获取16个纹理像素。如图7所示,在该组中的输出像素被再次表示为所获取的16个纹理像素702的组中的0-3个的情况下,仅四个纹理像素用于计算单个输出像素的特性,并且所获取的纹理像素中的其余纹理像素各自用于计算输出像素402的组中的输出像素中的两者的特性。
67.任何合适的方法可用于实现输出像素组的集体获取(在框202中),并且下文描述各种示例。在已执行集体获取(在框202中)之后,纹理硬件116跳过双线性滤波器硬件122(框204),并且将所获取的纹理像素输出到着器硬件118。
68.在图2的方法的第二部分中,着器硬件118内的样本流水线124从纹理硬件116接收纹理像素数据并将数据广播到分配给每个实例的寄存器(框206),其中每个实例对应于输出像素组中的输出像素中的一者。以硬件实现的广播(在框206中)可包括对于所有实例将所有纹理像素数据广播到所有寄存器,并且着器然后负责将非零加权应用于纹理像素数据的适当子集(并且将零加权应用于特定实例不需要的纹理像素数据)。着器可使用所获取的纹理像素与计算每个输出像素的特性所需的纹理像素之间的预定义映射(例如,如图5和图7中以图形方式示出的映射)来应用适当的加权。
69.替代地,以硬件实现的广播(在框206中)可以是选择性的,使得并非针对所有实例将所有纹理像素数据广播到所有寄存器,而是将计算特定输出像素的特性所需的纹理像素数据广播到分配给对应实例(即,分配给对应于特定输出像素的实例)的寄存器。这样的选择性广播操作(在框206中)使用所获取的纹理像素与计算每个输出像素的特性所需的纹理像素之间的预定义映射(例如,如图5和图7中以图形方式示出的映射)。与非选择性广播(上文描述)相比,使用选择性广播操作降低了寄存器压力和访问复杂性;然而,与使用选择性广播相比,非选择性广播导致不太复杂的硬件。
70.通过使用集合获取(在框202中),随后广播(在框206中),避免了获取操作中的冗余,但是在存储在寄存器中的数据中仍存在冗余。这进一步将工作的平衡从纹理硬件116转移到着器硬件118。
71.在已执行广播(在框206中)后,纹理像素数据如在已知系统中一样位于寄存器中,并且卷积可由着器硬件118中的执行流水线126执行(框208),而不需要任何修改。执行流水线126从分配给实例的寄存器访问对应于特定输出像素的该实例的卷积运算中使用的纹理像素数据。
72.应当理解,尽管图4、图5和图7示出输出像素的2
×
2组,但在其他示例中,可存在输出像素的不同组(例如,就像素的数量和/或布置而言),且将进一步理解,可以使用除图3至图7的示例中所示的那些内核以外的其他内核。
73.为了实现也可称为“统一收集”的集体获取操作(在框202中),着器(即,片段着器)可以由编译器修改。存在可在着器内实现集体获取操作(在框202中)的许多不同方
式,并且下文描述两个示例。
74.实现集体获取的第一示例性方法涉及修改如着器内指定的样本位置的坐标,使得样本位置不是在输出像素中的每一者的中心(其与纹理像素802、902的中心1:1匹配)内,而是在多个纹理像素的交点(例如,四个纹理像素804、904的交点)处。这在图8和图9中针对上述两个示例性内核302、602以图形方式示出。通过修改样本坐标,使得其不位于纹理像素中心上,获取单元120自动获取相邻的纹理像素(即,四个相邻的纹理像素)。在已知的系统中,纹理硬件116然后将执行所获取的多个纹理像素的双线性滤波;然而,如上文所详述,在图2的方法中,跳过双线性滤波器硬件122,并且将获取单元120所获取的原始纹理像素数据输出到着器硬件118。虽然图8和图9中的示例示出经修改的样本坐标正好在四个纹理像素的交点处(即,正好在四个相邻纹理像素的拐角上),这触发了四个相邻纹理像素的获取,但是经修改的样本坐标可以从该位置略微偏移而不影响获取单元120的操作(即,使得获取相同的四个纹理像素)。经修改的样本坐标仅需要使得与经修改的样本坐标最接近的纹理像素是需要作为集体获取操作的一部分而获取的那些纹理像素,并且图8和图9中示出两个示例性替代的经修改的样本坐标806、906。
75.使用用于集体获取操作的第一示例性方法,修改着器,使得其包括用于m个输出像素的组的n个获取指令,每个指令在经修改的样本坐标处,从而导致获取单元120获取n
×
n个纹理像素,其中在所示示例中,n=m=n=4。相比之下,未修改的着器包括用于每个输出像素的f个获取指令,每个获取指令在对应于纹理像素中心的样本坐标处,其中对于图3所示的内核302,f=9,并且对于图6所示的内核602,f=7。虽然在所示的示例中,由于偏移而获取的纹理像素的数目是四个(即,n=4),但在其他示例中,根据偏移的方式,仅可获取两个纹理像素(n=2)。
76.根据该第一示例性方法对样本坐标的修改涉及由图8中的小箭头指示的非整数偏移的计算,该非整数偏移可用固定功能硬件计算或作为着器程序的一部分计算,其中前者最有可能以几乎可忽略的硬件复杂性成本避免任何性能损失。下文描述的第二示例性方法避免了执行非整数偏移的这些计算的需要。
77.实现集体获取的第二示例性方法涉及已知收集指令gather4的新用途,其通常获取2
×
2纹理像素的组,并且即使对于样本上坐标也保证返回所有四个纹理像素。gather4指令可用于获取2
×
2纹理像素的组,其中(2
×
2组的)左上纹理像素的中心位于样本坐标处。当在第二示例性方法中使用时,包括来自输出像素中心的样本坐标的整数偏移,其中样本坐标的整数偏移对应于输出像素中的每个输出像素,以便获取所需的像素布置。这在图10和图11中针对上述两个示例性内核302、602以图形方式示出。如图10和图11所示,不同的整数偏移应用于收集操作中的每个收集操作,如小箭头1004、1104所指示,例如对于图10中的示例,偏移对于输出像素0为(-1,+1),对于输出像素1为(0,+1),对于输出像素2为(-1,0),并且对于输出像素3为(0,0),并且对于图11中的示例,偏移对于输出像素0为(0,+1),对于输出像素1为(-1,+3),对于输出像素2为(0,0),并且对于输出像素3为(-1,-2)。纹理查功能具有对整数坐标偏移的内置支持,其中偏移形成指令的一部分。收集指令启用可编程偏移,并且因此通过使用收集指令,可以为2
×
2组内的获取操作中的每个获取操作指定不同的偏移。
78.与图8和图9所示的方法相比,图10和图11中所示的方法具有以最小硬件变化实现
的益处,但需要注意样本位置的准确性足以证明在纹理像素上的放置是合理的(其中轻微错误可导致选择错误的面片)。
79.标准已知收集操作限于从mip映射的顶层获取纹理像素,因此为了在第二示例性方法中使用,修改收集操作,使得它可以从mip映射的任何层级获取纹理像素,即从不一定是顶层mip映射的层级获取纹理像素。
80.使用用于集体获取操作的第二示例性方法,修改着器,使得其包括用于m个输出像素的组的具有偏移的n个收集指令,从而导致获取单元120获取n
×
n个纹理像素,其中在所示示例中,n=m=n=4。相比之下,未修改的着器包括用于每个输出像素的f个获取指令,每个获取指令在对应于纹理像素中心的样本坐标处,其中对于图3所示的内核302,f=9,并且对于图6所示的内核602,f=7。
81.尽管对于所示的两个示例性内核,n=m,但对于其他内核可能不是这样(例如,对于较大的内核,n可以大于m)。在n》m的示例中,集体获取操作(在框202中)可以根据第一方法或第二方法在逻辑上分成多个子操作,每个子操作包括不超过m个的获取指令。示例在图12中以图形方式示出,其对应于具有19
×
1个内核1200的上述第一示例性方法,其中n=4,m=10。如图12所示,集体获取操作在逻辑上分成三个子操作1201-1203,每个子操作包括四个获取指令,但请求存在一些重叠。在针对特定实例存在重叠请求的情况下,该实例的重复数据被丢弃,但数据仍可被发送到其他实例。对于每个子操作,每个实例接收1
×
7个面片,并且在图12中,实例0的1
×
7个面片通过着示出。在需要较小面片的实例中(如图12中的第三子操作1203中),可以(由着器)向硬件提供额外信息以使其了解将仅使用所获取的数据的子集。这可以减少在以下地方中的一个或多个地方对系统的需求:(i)硬件可执行减少数目的获取(例如,图12的示例中的第三子操作1203中的仅三个获取),从而减小存储器带宽,但在其他情况下,硬件仍可执行所有获取,(ii)广播操作工作负载可以减少,因为不需要的数据可能未被广播(例如,在下面的示例中,所获取的纹理像素44-47可以不被广播),以及(iii)不需要的数据可以不写入寄存器,从而降低寄存器压力。
82.无论用于实现集体获取操作的方法如何,该方法都限定了所获取的纹理像素与输出像素中的每一者的内核之间的映射,并且该映射随后在执行广播操作(在框206中)时被着器硬件118使用。对于每个所获取的纹理像素,映射定义其涉及的实例(例如,对于该实例,输出像素是用于计算输出像素的特性的纹理像素)及其在每个实例的内核内的位置。
83.例如,映射可定义如何需要将从n个收集操作中的每个收集操作接收的数据拼接在一起以形成集体收集所需的纹理像素的面片(例如,图5所示的纹理像素502的4
×
4面片或图7所示的纹理像素702的2
×
8面片)。拼接的方式可由纹理硬件116在子带(例如,2位子带,其可指示诸如8
×
2,2
×
8和4
×
4之类的选项的预定义集合中的一者以及指示该方法未被使用的选项)中与所获取的纹理像素数据一起传送到着器硬件118。
84.参见图12所示的示例,如果内核1200中的位置被表示为a-s,并且以顺序0-39获取纹理像素,则定义以2
×
20条获取纹理像素的映射实际上可提供映射如下的短形式指示(其中广播位置被表示为实例,具有标记为0-3的实例的位置对应于输出像素的标签):
[0085][0086]
如上所述,当双线性滤波器硬件122被绕过时,本文所述的方法可在原始(未修改)着器中的纹理像素与采样点之间存在1:1对应(即,采样点与纹理像素中心对准)的情况下使用。因此,编译器可在转换着器以修改获取指令来对输出像素组执行集体获取(框1304)之前执行对该1:1对应的检查(框1302,其中具有1:1对应的着器被称为内核着器),如图13所示。除了检查1:1对应(在框1302中)之外,检查还可以涉及检查相邻实例请求相邻纹理像素。这可通过检查(i)输入坐标与2
×
2戳记中的其他实例中的每一者偏移1个纹理像素以及(ii)纹理分辨率等于渲染目标分辨率(即,lod处的纹理大小=渲染大小)来确定。另外,检查(在框1302中)可涉及检查样本被布置成使得多个样本可以组合到单个收集操作中,即它们全部落入可收集面片大小内。(i)和(ii)的确定可取决于使用了除基本层级区域之外的mipmap层级的情况下的采样参数。特别地,该确定可以涉及检查选择整数细节级别(lod),或者因为使用了最近相邻mipmap滤波,或者因为lod本身是整数值,并且考虑lod钳位和偏置。如果检查失败(框1302中的“否”),那么不以此方式修改着器(框1306),使得在执行着器时针对每个输出像素执行独立获取。
[0087]
除了检查着器是内核着器(在框1302中)之外,检查还可应用限制图2的方法的适用性的一个或多个附加约束。例如,可以应用附加约束,使得图2的方法仅用于某些数据类型,或用于具有某些特性(例如,就纹理像素数据的大小而言)的数据。在示例中,附加检查可以将图2的方法的应用仅限制于低动态范围(ldr)图像,以便限制由着器硬件118广播的数据的量(在框206中)。例如,可以应用这些附加约束以确保工作负载从纹理硬件116移动到着器硬件118不会导致相反的不平衡(即,使得纹理硬件116不被有效地使用)。
[0088]
除了在转换着器(在框1304中)之前的检查(在框1302中)之外,可能需要执行后续检查以验证新的着器(框1308)。如果验证通过(框1308中的“是”),那么可以使用经转换的着器(框1310),如果没有,则使用原始的、未转换的着器(框1312)。如图13所示,该辅助检查(在框1308中)可由编译器(在编译时间)执行,或者可替代地,可以在运行时间处由辅助着器执行,该辅助着器可周期性地运行(例如,每渲染或每图块)。在辅助检查由辅助着器执行的情况下,作为着器的转换的一部分或在其之后(在框1304中),编译器生成该辅助着器。
[0089]
在示例中,在编译时间处可能没有足够的信息可用来100%确定着器是内核着器,例如因为一些信息(例如,从中获取纹理像素的纹理的大小)不可用。在此类示例中,经转换的着器可由编译器生成(在框1304中),并且然后由辅助着器在运行时间处执行检查(在框1308中)以确定使用哪个着器(例如,在框1304中生成的原始着器或经修改的着器)。
[0090]
由辅助着器执行的检查(在框1308中)可以如上文参考框1302所述。检查可以特别包括检查样本被布置成使得多个样本可以组合到单个收集操作中,即它们全部落入可收集面片大小内(例如,预定义的最大面片大小内)。该检查可以或可以不最初由编译器执行(在框1302中)。可被称为“范围检查”的这种检查估计着器正尝试覆盖的面片。例如,对于具有9个样本的内核着器,辅助着器可估计其以正向或反向顺序从-4到+4进行采样(因此也检查+4到-4)。如果在编译时不知道偏移,则不能在该时间执行该检查(即,不能在框1302中执行该检查),而是在运行时间处(在框1308中)对此进行检查以确认值落入边界的这些预期集合中的一者内,例如,偏移_0==-4个纹理像素+/-公差,偏移_1==-3个纹理像素+/-公差等。
[0091]
一些着器可能已经优化以通过使用纹理硬件116中的双线性滤波器硬件122执行双线性内插(双线性插值)来减少卷积算法中的样本数量。在这样的示例中,样本位置在两个相邻纹理像素中心之间偏移,使得两个相邻纹理像素被获取单元120获取,并且双线性滤波器硬件122对两个所获取的纹理像素执行双线性滤波,以基于偏移生成单个纹理像素值。这使卷积算法中的样本数量和权重减半,并且修改卷积算法中使用的权重以考虑已经发生的双线性滤波。
[0092]
在使用这样的优化的情况下,着器可被称为双线性插值内核着器(因为它是具有双线性内插优化的内核着器),并且这样的着器将使检查失败(在框1302中),因为样本位置从纹理像素中心偏移。因此,上述方法不能在没有修改的情况下使用。
[0093]
图14是图13中所示的方法的修改版本的流程图,其使得本文所述的方法(包括图2的方法)能够用于双线性插值内核着器。如图14所示,如果未发现着器是内核着器(框1302中的

否’),则执行检查以识别是否已使用这样的优化(框1402)。如果该检查也失
败,则着器未被修改(框1306);然而,如果该检查通过(框1402中的“是”),则编译器使用双线性滤波器硬件来修改着器以撤消优化(框1404),并且经修改的着器然后可被优化以使用输出像素组的集体获取(框1304),如上所述。这意味着在运行时间处,仍跳过双线性滤波器硬件(图2的框204)。
[0094]
可使用各种试探法来确定着器是否为双线性插值内核着器(在框1402中)。例如,在样本位置全部散布在特定坐标周围(具有偏移,其例如可以全部沿着一个轴,x或y)和/或着器每个输出像素获取偶数数目的纹理像素的情况下,可以假设着器是双线性插值内核着器(因为尽管正常内核将具有奇数数目的纹理像素,因为它将具有高于n、低于n和中心纹理像素,从而给出总是奇数的2n+1,线性插值优化将这些与与众不同者配对,因此它将具有可以是偶数或奇数的n+1个样本)。此外,偏移中的一者可以不同于所有其他偏移(例如,其可以是零),并且卷积权重可以一致地分布,除了一之外。相比之下,在着器每个输出像素获取奇数数目的纹理像素的情况下,在没有附加信息(例如,坐标偏移,纹理尺寸等)的情况下,可能无法确定着器是内核着器还是双线性插值内核着器。在此类示例中,可以生成着器的两个不同的经转换版本(在框1304中),一者不撤销双线性内插,并且一者在撤销双线性内插之后(在框1404中)。
[0095]
双线性插值反转(在框1404中)使已在着器中引入的优化反转。如上所述,对于除了样本位置中的一者之外的所有样本位置,经优化的着器(即,双线性插值内核着器)可以定义样本位置,该样本位置在两个相邻纹理像素中心之间的线上,但是从纹理像素中心和对应权重(用于卷积中)偏移。在一些示例中,权重可以直接在着器中定义,并且在其他示例中,它们可经由对编译器不透明的参数来提供。除非反转,否则偏移样本位置致使纹理硬件116在执行着器时获取相邻纹理像素中的两者。因此,为了使优化反转,针对偏移样本位置中的每一者修改着器,以明确地获取两个相邻纹理像素中的每一者,并分别定义对于该对纹理像素中的每一者在卷积中使用的权重。对该对纹理像素中的每一者的权重的计算涉及取原始的单个权重并将其分配给两个纹理像素,并且然后基于样本位置的偏移来修改每个权重以补偿没有执行双线性内插的事实。如上所述,可能存在一个未偏移的样本位置,因此该获取和对应的卷积权重在双线性插值反转期间保持不变。如果在编译时间处已知权重和样本分布两者,则可以在编译时间处计算经修改的权重,否则可以在运行时间处在辅助着器中评估经修改的权重。
[0096]
图15a和图15b示出双线性插值反转的两个图形表示(在框1404中):在第一图形表示中,如图15a所示,未偏移的样本位置1502位于顶部处;并且在第二图形表示中,如图15b所示,未偏移的样本位置1504位于底部处。尽管配对布置中的与众不同者可出现在列表中的任何地方,但是顶部和底部是实践中唯一使用的位置。可以使用模数学来确定算出样本位置在哪些纹理像素之间。如果原始四个样本位置(其可表示为位置a-d)的卷积权重是w_a、w_b、w_c和w_d,则所得7个样本位置(其可表示为1-7)的修改权重可由下式给出:
[0097][0098]
如上所述,可以使用各种标准来识别着器是否为双线性插值内核着器(在框1402中);然而,在开始时可能无法完全确信着器是否为双线性插值内核着器。因此,在可使用经转换的着器之前,可由编译器对经转换的着器执行检查(在框1308中)。
[0099]
如上文参考图13所述,由辅助着器执行的检查(在框1308中)可特别包括检查样本被布置成使得多个样本可以组合到单个收集操作中,即它们全部落入可收集面片大小内。估计着器试图覆盖的面片的该范围检查可以或可以不最初由编译器执行(在框1302中)。例如,对于具有9个样本的双线性插值内核着器,辅助着器可以估计范围是-9个纹理像素<偏移_0《-7个纹理像素、-7个纹理像素<偏移_1《-5个纹理像素等,其中每个纹理像素覆盖2个纹理像素的范围以说明线性插值。辅助着器可在方向上进行猜测,并且也猜测与众不同者(不能配对者)是处于开始还是结束。
[0100]
另外或替代地,在编译时间处,可能无法完全确信着器是或不是双线性插值内核着器(或内核着器)。因此,检查可以由辅助着器在运行时间处执行(在框1308中)并且作出关于是使用原始着器还是使用经转换的着器的决策。在一些示例中,如上所述,编译器可生成经转换的着器的两个不同版本:包括可疑双线性插值优化的反转的一个版本和不包括可疑双线性插值优化的反转的一个版本(其中两者均实现集体收集和广播),并且然后基于辅助着器的执行结果(其可以设置一个或多个着器选择位的值),运行三个着器中的一者:(i)原始的未修改的着器、(ii)没有双线性插值反转的经修改的着器、或(iii)具有双线性插值反转的经修改的着器。
[0101]
尽管图14示出开始时的两个检查(在框1302和1402中),但是在一些示例中,可以不同地配置这些检查。例如,可能存在附加初始检查(在框1302之前),其过滤掉可被确定为肯定不是内核着器或双线性插值内核着器的那些着器,然后执行更详细的检查(在框1302和1402中)以确定着器是否为或可能为内核着器或双线性插值内核着器。在实现的情况下,这些初始检查(在框1302之前)包括检查以下中的一项或多项:
[0102]
着器使用过少的样本(例如,着器具有少于4个样本)
[0103]
作为样本的指令的分数过低(例如,10个指令中少于1个是样本)
[0104]
样本不以中心点周围为基础(例如,样本位置不是(frag_coordinate+offset))
[0105]
样本不被求和树消耗
[0106]
偏移模式不允许将多个样本减少到一个收集
[0107]
在这五个可能的检查中,前两者排除了既不是内核着器也不是双线性插值内核着器的绝大多数着器。
[0108]
如上所述,在一些情境中,在编译时间处或者在不进行附加分析的情况下,着器是内核着器还是双线性插值内核着器可能不能100%确定。在此类情况下,该方法可以
继续生成一个或多个经修改的着器(在框1304中,例如,在框1304中具有和/或不具有双线性插值反转),并且然后在编译结束时或运行时间处(在框1308中)随后的检查可确定应使用哪个着器。
[0109]
在图2的方法用于双线性插值内核着器的情况下,优化的反转可能增加纹理硬件116的工作;然而,集体收集的效果导致纹理硬件116的工作显著减少,并且因此,总体而言,与简单地使用双线性插值优化相比,通过撤销双线性插值优化并且然后使用图2的方法,存在更大的益处。
[0110]
在上述方法中,通过使用集体获取(在框202中)消除输出像素组的获取操作中的冗余,但是存储在寄存器中的数据中存在冗余,其中纹理像素数据被广播到一个或多个寄存器位置(在框206中)。然而,替代地,广播步骤可被省略,并且存储在输出像素组或广播的共享寄存器中的所获取的纹理像素数据仍然可以以简化的形式出现,使得所有所获取的纹理像素(例如,在3
×
3内核的示例中的所有16个纹理像素)被置于每个实例的单独寄存器中,而无需针对哪个实例是哪一者进行调整(例如,使得寄存器n包含用于所有四个实例的相同数据,而不调整实例的偏移)。这避免了数据冗余,但增加了卷积运算的冗余和复杂性。在此类示例中,修改每个输出像素的卷积运算以访问共享寄存器,并且进一步修改以使得使用正确的权重和纹理像素数据,如图16所示,这是对图2所示且上文所述的方法的变型。对卷积运算的修改主要涉及访问卷积运算本身中使用的数据(框1608),并且该数据查可以以多种不同方式实现。下面参考图17a至图17c描述数据查的三个示例(框1606a-1606c),其针对图3所示的内核302以及输出像素的2
×
2组示出(如图4和图5所示)。在所有这些示例中,作为输出像素中的每一者的卷积运算的一部分(在框1608中)而执行的乘法的数量对应于在集体收集中获取的纹理像素的数量(例如,对于图3至图5中所示的示例为16)。
[0111]
在图17a所示的示例中,执行查(框1606a),使得所需的9个纹理像素(即,输出像素的内核中的那些纹理像素)的纹理像素数据被提取并用于卷积,并且剩余的7个纹理像素的数据未被使用。在图17b所示的示例中,执行查(框1606b)以从5
×
5权重阵列中选择右4
×
4权重阵列。所选择的4
×
4阵列包括所需9个纹理像素的卷积权重,并且剩余的7个纹理像素的卷积权重被替换为零(使得它们对输出像素的特性没有任何影响)。在图17c所示的示例中,执行权重阵列的查(框1606c),其中每个输出像素存储一个权重阵列。权重阵列中的每一者包括所需9个纹理像素的卷积权重,其中剩余的7个纹理像素的卷积权重被设置为零(使得它们对输出像素的特性没有任何影响)。在另外的选项(图中未示出)中,函数可用于在运行时间处计算着器中的权重。这可在以下情况下使用:在编译时间处,权重是已知的,并且编译器能够将函数拟合到那些权重(例如,作为纹理像素索引的函数),使得未使用的纹理像素的权重为零。在该选项中,在经修改的着器中定义函数并且在运行时间处执行该函数,使得可针对每个纹理像素(例如,基于纹理像素索引)计算权重。
[0112]
使用本文所述的方法,通过平衡纹理硬件116和着器硬件118之间的工作负载来增加tsu 108的效率。同时,使用集合收集(如上所述)不会显著影响由于高速缓存一致性而可能已经存在的效率,因为纹理像素仍然以大致相同的顺序被获取。
[0113]
虽然上文参考图1所示的示例性gpu流水线100描述该方法,但应当理解,该方法可用于包括tsu的其他gpu流水线中,该tsu包括纹理硬件和着器硬件两者。特别地,虽然图1
所示的gpu流水线100包括平铺单元104并且因此使用基于图块的渲染,但是本文所述的方法也可以与其他渲染方案(例如,不基于图块的渲染方案,诸如即时模式渲染)一起使用。
[0114]
图18示出了计算机系统,其中可实现本文所描述的图形处理系统。计算机系统包括cpu 1802、gpu 1804、存储器1806和其他装置1814,诸如显示器1816、扬声器1818和相机1820。本文所述的方法可在gpu 1804内实现。计算机系统的部件可经由通信总线1822彼此进行通信。
[0115]
图1的gpu流水线100被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文中描述为由gpu流水线100内的元件中的任一者形成的中间值不需要由gpu流水线在任何点处物理地生成,并且可以仅表示方便地描述由gpu流水线在其输入和输出之间执行的处理的逻辑值。
[0116]
本文所描述的纹理可体现在集成电路上的硬件中。本文所描述的纹理化/着单元可被配置为执行本文所描述的方法中的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或它们的任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件实施方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,该程序码在处理器上执行时执行指定任务。本文中所述的算法和方法可以由执行代码的一个或多个处理器执行,该代码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
[0117]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
[0118]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)、物理处理单元(ppu)、无线电处理单元(rpu)、数字信号处理器(dsp)、通用处理器(例如通用gpu)、微处理器、旨在加速cpu之外的任务的任何处理单元等。计算机或计算机系统可以包括一个或多个处理器。本领域技术人员将认识到,这种处理能力被结合到许多不同的设备中,因此术语“计算机”包括机顶盒、媒体播放器、数字收音机、pc、服务器、移动电话、个人数字助理和许多其他设备。
[0119]
本发明还意图包围限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种其上编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介
质,当在集成电路制造系统中处理(即,运行)时,该计算机可读程序代码将该系统配置为制造被配置为执行本文所述的方法中的任一种方法的纹理化/着单元,或者制造包括本文所述任何设备的纹理化/着单元。集成电路定义数据集可以是例如集成电路描述。
[0120]
因此,可以提供一种在集成电路制造系统处制造如本文所描述的纹理化/着单元的方法。此外,可提供一种集成电路定义数据集,其在集成电路制造系统中处理时使制造纹理化/着单元的方法得以执行。
[0121]
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传输级(rtl)代码、作为例如verilog或vhdl的高级电路表示,和作为例如oasis(rtm)和gdsii的低级电路表示。在逻辑上定义集成电路的更高级表示法(诸如rtl)可以在配置为在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合这些元件以便生成由表示定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成集成电路的制造定义的码。
[0122]
现在将参考图19描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置为制造纹理化/着单元的示例。
[0123]
图19示出了集成电路(ic)制造系统1902的示例,该集成电路制造系统被配置为制造如本文任何示例中描述的纹理化/着单元。特别地,ic制造系统1902包括布局处理系统1904和集成电路生成系统1906。ic制造系统1902被配置为接收ic定义数据集(例如,定义如本文任何示例中描述的纹理化/着单元)、处理ic定义数据集并且根据ic定义数据集来生成ic(例如,其体现如本文任何示例中所述的纹理化/着单元)。ic定义数据集的处理将ic制造系统1902配置为制造体现如本文任何示例中描述的纹理化/着单元的集成电路。
[0124]
布局处理系统1904被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1904确定了电路布局时,它可以将电路布局定义输出到ic生成系统1906。电路布局定义可以是例如电路布局描述。
[0125]
如本领域已知的,ic生成系统1906根据电路布局定义来生成ic。例如,ic生成系统1906可以实现生成ic的半导体器件制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩码的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代性地,提供给ic生成系统1906的电路布局定义可以是计算机可读代码的形式,ic生成系统1906可以使用该计算机可读代码来形成用于生成ic的合适掩码。
[0126]
由ic制造系统1902执行的不同过程可以全部在一个位置例如由一方来实现。替代地,ic制造系统1902可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示
ic定义数据集的rtl代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩码来制造集成电路。
[0127]
在其他示例中,在集成电路制造系统中对集成电路定义数据集的处理可以将该系统配置为在不处理ic定义数据集以确定电路布局的情况下制造纹理化/着单元。例如,集成电路定义数据集可以定义可重新配置的处理器诸如fpga的配置,并且对该数据集的处理可以将ic制造系统配置为(例如,通过将配置数据加载到fpga)生成具有该定义的配置的可重新配置的处理器。
[0128]
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集,以上面参考图19描述的方式对集成电路制造系统的配置,可以制造出如本文所述的装置。
[0129]
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图19所示的示例中,ic生成系统还可以由集成电路定义数据集进一步配置,以在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
[0130]
本领域技术人员将认识到用来存储程序指令的存储设备可分布在网络上。例如,远程计算机可以将所描述的过程的示例存储为软件。本地或终端计算机可以访问远程计算机,并下载软件的一部分或全部以运行程序。替代地,本地计算机可以根据需要下载软件片段,或者在本地终端处执行一些软件指令,并在远程计算机(或计算机网络)处执行一些软件指令。本领域技术人员还将认识到通过利用本领域技术人员已知的常规技术,软件指令的全部或一部分可以由诸如dsp、可编程逻辑阵列等的专用电路执行。
[0131]
本文描述的方法可以由配置有存储在有形存储介质上的机器可读形式的软件的计算机执行,例如,软件采用包括用于将计算机配置为执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或采用包括计算机程序代码装置的计算机程序的形式,当程序在计算机上运行时以及在计算机程序可以在计算机可读存储介质上实现的情况下,所述代码装置适于执行本文所述任何方法的所有步骤。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,并且不包括传播信号。软件可适于在并行处理器或串行处理器上执行,使得所述方法步骤可以任何适当顺序执行或同时执行。
[0132]
本文描述的硬件部件可以由其上编码有计算机可读程序代码的非暂时性计算机可读存储介质生成。
[0133]
存储用于实现所公开方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,诸如sram或dram。可用于实现非易失性存储器的技术的示例包括光学和磁存储器技术、闪存存储器、相变存储器、电阻ram。
[0134]
对“逻辑”的特定引用是指执行一个或多个功能的结构。逻辑的示例包括被布置成执行这些功能的电路系统。例如,这样的电路系统可以包括在制造过程中可用的晶体管和/或其他硬件元件。作为示例,此类晶体管和/或其他元件可用于形成实现和/或包含存储器的电路系统或结构,诸如寄存器、触发器或锁存器,逻辑运算器,诸如布尔运算,数学运算器,诸如加法器、乘法器,或者,移位器和互连。此类元件可以作为定制电路或标准单元库、
宏来提供或在其他抽象级别提供。这些元件可以特定布置互连。逻辑可以包括具有固定功能的电路系统,并且电路系统可以被编程为执行一个或多个功能;可以从固件或软件更新或控制机制提供这样的编程。被标识为执行一个功能的逻辑还可以包括实现组成功能或子过程的逻辑。在一个示例中,硬件逻辑具有实现一个或多个固定功能操作,状态机或过程的电路系统。
[0135]
与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包含计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。这例如可以通过在预定义面积预算内制造模块的多个实例来完成。
[0136]
如对本领域技术人员显而易见的,可以延长或改变本文给出的任何范围或设备值而不丧失所寻求的效果。
[0137]
应当理解,上述益处和优点可以涉及一个实施方案,或者可以涉及多个实施方案。实施方案不限于解决任何或所有所述问题的那些或具有任何或所有所述益处和优点的那些。
[0138]
对“一个”项目的任何引用都指的是这些项目中的一个或多个。术语“包括”在本文中用于表示包括所标识的方法块或元件,但是这些块或元件不包括排他列表,并且设备可以包括附加的块或元件,并且方法可以包括附加的操作或元件。此外,并不暗示块、元件和操作本身是关闭的。
[0139]
本文所述的方法的步骤可以任何合适的顺序或在适当时被同时执行。图中框之间的箭头示出方法步骤的一个示例序列,但并不旨在排除其他序列或并行执行多个步骤。另外,在不脱离本文描述的主题的实质和范围的情况下,可以从任何方法中删除单个块。上述任何示例的一些方面可以与所描述的任何其他示例的一些方面组合以形成进一步的示例而不会丧失所寻求的效果。在图的元件被示出通过箭头连接的情况下,应当理解,这些箭头仅示出元件之间的通信(包括数据和控制消息)的一个示例流向。元件之间的流向可以是任一方向或两个方向。
[0140]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

技术特征:


1.一种在gpu流水线中操作纹理化/着单元的方法,所述方法包括:由所述纹理化/着单元中的纹理硬件集体获取计算输出像素组的特性所需的所有纹理像素;绕过所述纹理硬件中的双线性滤波器硬件并且将所获取和未过滤的纹理像素数据从所述纹理硬件单元传递到所述纹理化/着单元中的着器硬件;以及使用所述纹理像素数据在所述着器硬件中执行多个卷积运算以计算所述输出像素组中的输出像素中的每一者的所述特性。2.根据权利要求1所述的方法,其中计算所述输出像素组的特性所需的每个纹理像素仅被获取一次。3.根据权利要求1所述的方法,还包括在执行所述多个卷积运算之前:将所述纹理像素数据广播到分配给对应于所述输出像素中的每一者的实例的寄存器。4.根据权利要求3所述的方法,其中将输出像素组的所有所获取的纹理像素数据广播到分配给所述实例中的每一者的寄存器。5.根据权利要求3所述的方法,其中使用所述纹理像素数据执行多个卷积运算以计算所述输出像素组的所述特性包括对于每个输出像素:访问存储在分配给对应实例的寄存器中的纹理像素数据;以及使用所访问的纹理像素数据和权重集合来执行多个卷积运算以计算所述输出像素的所述特性,其中在所述输出像素的所述卷积的内核外部的任何纹理像素的所述权重被设置为零。6.根据权利要求3所述的方法,其中所获取的纹理像素数据被选择性地广播到分配给对应于所述输出像素中的每一者的实例的寄存器,使得实例的寄存器仅接收用于对所述实例执行卷积运算的纹理像素数据。7.根据权利要求3所述的方法,其中使用所述纹理像素数据执行多个卷积运算以计算所述输出像素组的所述特性包括对于每个输出像素:访问存储在分配给对应实例的寄存器中的纹理像素数据;以及使用所访问的纹理像素数据来执行多个卷积运算以计算所述输出像素的所述特性。8.根据权利要求1所述的方法,其中所获取的纹理像素数据存储在所述输出像素组的共享寄存器中。9.根据权利要求8所述的方法,其中使用所述纹理像素数据执行多个卷积运算以计算所述输出像素组的所述特性包括对于每个输出像素:从所述共享寄存器访问所述输出像素组的所获取的纹理像素数据的子集,所述子集与具有零的所述输出像素的所述卷积的内核相对应;以及使用所访问的纹理像素数据在所述着器硬件中执行卷积运算以计算所述输出像素的所述特性。10.根据权利要求8所述的方法,其中使用所述纹理像素数据执行多个卷积运算以计算所述输出像素组的所述特性包括对于每个输出像素:访问所获取的纹理像素数据中的每个纹理像素的权重,其中在所述输出像素的所述卷积的内核外部的任何纹理像素的所述权重被设置为零;以及使用所获取的纹理像素数据和所访问的权重在所述着器硬件中执行卷积运算以计
算所述输出像素的所述特性。11.根据权利要求10所述的方法,其中访问所获取的纹理像素数据中的每个纹理像素的权重包括选择权重阵列的子集,所述子集取决于所述输出像素,并且其中在所选择的子集中,在所述输出像素的所述卷积的内核外部的任何纹理像素的所述权重被设置为零。12.根据权利要求10所述的方法,其中访问所获取的纹理像素数据中的每个纹理像素的权重包括访问多个预定义权重阵列中的一者,所述权重阵列中的每一者对应于多个输出像素中的不同一者,并且其中所述权重的不同子集被设置为零。13.根据权利要求1所述的方法,其中集体获取计算输出像素组的特性所需的所有纹理像素包括:对于不同样本位置执行多个获取操作,每个样本位置从纹理像素中心偏移,以及定义要获取的相邻纹理像素的不同非重叠面片。14.根据权利要求1所述的方法,其中集体获取计算输出像素组的特性所需的所有纹理像素包括:对于不同样本位置执行多个收集操作,每个样本位置从所述输出像素中的一者的中心偏移整数值,以及定义要获取的相邻纹理像素的不同非重叠面片。15.一种用于gpu流水线(100)中的纹理化/着单元(108),所述纹理化/着单元包括:纹理硬件(116),所述纹理硬件包括获取单元(120)和双线性滤波器硬件(122);以及着器硬件(118),其中所述纹理硬件被布置成在所述获取单元中获取计算输出像素组的特性所需的所有纹理像素,绕过所述双线性滤波器硬件并将所获取和未过滤的纹理像素数据输出到着器硬件,并且所述着器硬件被布置成使用所述纹理像素数据执行多个卷积运算以计算所述输出像素组中的输出像素中的每一者的所述特性。16.根据权利要求15所述的纹理化/着单元,其中计算所述输出像素组的特性所需的每个纹理像素仅被获取一次。17.根据权利要求15或16所述的纹理化/着单元,其中所述着器硬件被布置成在执行所述多个卷积运算之前将所述纹理像素数据广播到分配给对应于所述输出像素中的每一者的实例的寄存器。18.根据权利要求17所述的纹理化/着单元,其中将输出像素组的所有所获取的纹理像素数据广播到分配给所述实例中的每一者的寄存器。19.根据权利要求17所述的纹理化/着单元,其中所述着器硬件被布置成使用所述纹理像素数据执行所述多个卷积运算以计算所述输出像素组的所述特性,包括对于每个输出像素:访问存储在分配给对应实例的寄存器中的纹理像素数据;以及使用所访问的纹理像素数据和权重集合来执行多个卷积运算以计算所述输出像素的所述特性,其中在所述输出像素的所述卷积的内核外部的任何纹理像素的所述权重被设置为零。20.一种纹理化/着单元,其被配置为执行根据权利要求6至14中任一项所述的方法。

技术总结


本发明涉及高效卷积运算。描述了一种在GPU流水线中操作纹理化/着单元的方法。这种方法用于高效卷积运算。该方法使用纹理硬件来集体获取计算输出像素组的特性所需的所有纹理像素,而无需任何重复。该方法然后绕过纹理硬件中的双线性滤波器硬件,并且将所获取和未过滤的纹理像素数据从纹理硬件单元传递到纹理化/着单元中的着器硬件。着器硬件使用所获取的纹理像素数据来执行多个卷积运算以计算输出像素中的每一者的特性。算以计算输出像素中的每一者的特性。算以计算输出像素中的每一者的特性。


技术研发人员:

R

受保护的技术使用者:

想象技术有限公司

技术研发日:

2022.06.23

技术公布日:

2022/12/26

本文发布于:2024-09-23 16:16:47,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/49297.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:纹理   像素   所述   卷积
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议