一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

多核GPU中的重叠几何形状处理的制作方法

2023-03-20 01:00:53 来源:中国专利 TAG:

多核gpu中的重叠几何形状处理
技术领域
1.本发明涉及多核gpu中的重叠几何形状处理。


背景技术:

2.在计算机图形中,“渲染”是将描述虚拟场景的3d模型转换为表示来自特定视点(或若干视点)的场景的视图的一个或多个2d图像的过程。由于这是一个计算密集的过程,对于典型的虚拟场景,通常提供专门进行必要计算的硬件加速器。这种硬件加速器在本领域中称为图形处理单元(gpu)。
3.不同的gpu可以具有不同的硬件架构,反映用于执行3d渲染所必需的计算的不同策略。一个示例性gpu使用“基于图块的延迟渲染”流水线。
4.此方法将渲染过程分成两个不同的阶段。首先,处理描述场景的3-d模型的几何形状数据,以基于要渲染的特定视点将其从3-d空间转换成图像的2-d坐标。这称为几何形状处理阶段(或简称为几何形状阶段)。该阶段的输出是经转换的几何形状,其存储在所称的“参数块”中的“参数缓冲区”中。
5.参数缓冲区中的经转换几何形状将用于确定“片段”。因此,第二阶段被称为“片段着色”或“片段处理”。其也可以被称为“3d”阶段。
6.在第二阶段中,从参数缓冲区读取经转换的几何形状数据并对其进行光栅化,这意味着变换为片段并映射到像素。作为该过程的一部分,执行深度测试以确定每个像素处实际可见哪些片段。在延迟渲染系统中,仅在系统已确定可见哪些片段时,gpu才继续检索相关可见片段的纹理数据(包含颜色信息)。对于每个可见片段运行着色器程序,并且着色片段用于确定要显示的像素值。
7.这种延迟渲染方法的好处是避免针对最终隐藏在场景中其它片段后面的表面(片段)运行纹理化和着色过程。只有最接近虚拟摄像头(即视点)的片段才需要被着色。
8.两个阶段,几何形状和片段着色,可以以流水线式的方式运行。例如,当正处理先前渲染的片段着色时,可以处理与下一渲染相关联的几何形状处理。屏幕上显示的帧可以是多个渲染的输出的组成。因此,应理解,尽管“渲染”有时可产生图像以供显示,但它还可以产生中间产品,例如纹理或光照图。此类中间产品可以用作另一渲染的输入。渲染的流水线处理可以包括将用于相同帧的不同渲染以及将用于不同帧的不同渲染进行流水线处理。
9.基于图块是指渲染空间被细分为多个矩形块或“图块”。正是为了适应这些图块,过程被分成单独的几何形状和片段阶段。更具体地,在几何形状处理阶段期间,可以将经转换的几何形状按图块分开,以生成一组图块列表,也称为图块控制流,指示每个图块中存在哪些几何形状数据项。这些图块列表也存储在上述参数缓冲区中。然后,可以通过片段着色阶段基本上彼此独立地处理图块。对于每个单独的图块执行片段处理和着色,使用图块列表检索图块的相关几何形状,并为对应于该图块的像素块产生像素(颜色)值。
10.基于图块的方法促进了更大的数据局部性。每个图块中的该组几何形状片段通常是该总体组片段中的小子集。因此,与在一个遍次中处理整个图像相比,片段处理可以用小
得多的内存分配来进行。
11.图块还可以在一定程度上促进并行处理。特别地,由于纹理化/着色可以针对不同图块独立地执行,所以不同图块的片段着色可以分配到多核架构中的分开的gpu核。
12.几何形状处理阶段不能简单地以相同的方式并行化,因为不可能事先(即,在进行几何形状处理之前)知道哪个几何形状数据将出现在哪个图块中。


技术实现要素:

13.提供本发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
14.本发明提供了一种多核图形处理单元(gpu)和操作gpu的方法。所述gpu至少包括第一核和第二核。客户端驱动程序在命令缓冲器中写入一系列几何形状命令以及相关联的依赖性数据,所述依赖性数据指示几何形状命令的正确执行在多大程度上依赖于其他命令的执行完成。所述第一核从所述命令缓冲器读取第一几何形状命令并执行第一几何形状命令。所述第二核从所述命令缓冲器读取第二几何形状命令。所述第二核确定所述第二几何形状命令不依赖于所述第一几何形状命令的结果,并且作为响应,执行所述第二几何形状命令。
15.根据一个方面,提供了一种操作多核图形处理单元,下文称为gpu的方法,所述多核图形处理单元被配置成执行基于图块的渲染,以实现几何形状命令的重叠处理,所述多核gpu至少包括第一核和第二核,所述方法包括:
16.在命令缓冲器中提供一系列几何形状命令,所述几何形状命令具有相关联的依赖性数据,所述依赖性数据指示哪个几何形状命令依赖于其它命令的完成;
17.从所述命令缓冲器读取第一几何形状命令;
18.使用所述第一核执行所述第一几何形状命令;
19.从所述命令缓冲器读取第二几何形状命令;
20.确定所述第二几何形状命令不依赖于所述第一几何形状命令的结果;以及
21.作为响应,使用所述第二核执行所述第二几何形状命令。
22.根据另一方面,提供了根据权利要求1所述的操作多核图形处理单元,下文称为gpu的方法。
23.此方法意指来自相同命令缓冲器的多个几何形状命令可以由多个核以重叠方式(及时)处理。也就是说,当第一核仍在执行第一几何形状命令时,第二核至少开始执行第二几何形状命令。这些核共享相同的命令缓冲器。
24.每个几何形状处理命令的结果可包括多个图块控制列表(图块控制流)

一个图块控制列表用于构成渲染空间的多个图块中的每个图块。每个图块控制列表可写入存储器,用于在片段处理阶段进行后续处理(由相同核或另一核)。
25.所述第二几何形状命令在所述命令缓冲器中的所述第一几何形状命令之后。第一几何形状命令和第二几何形状命令可以是连续几何形状命令。也就是说,在命令缓冲器中第一几何形状命令与第二几何形状命令之间可能不存在其它几何形状命令。然而,在第一几何形状命令与第二几何形状命令之间,在命令缓冲器中可能存在其它项目。这些其他项
目可能包括更新命令和依赖性指示符,如下文所论述。
26.一般来说,几何形状命令可能依赖的“其它”命令可以是其它几何形状命令或其它类型的其它命令。
27.本方法的范围不限于两个核。一般来说,任何数量的核可被配置成在首先检查这些命令的依赖性后以重叠方式执行几何形状命令。
28.所述方法可包括维持写入偏移,所述写入偏移表示新命令应由客户端驱动程序写入在所述命令缓冲器中的位置。
29.所述方法可包括维持:第一读取偏移,所述第一读取偏移表示所述第一核应读取其要执行的下一个几何形状命令的位置;第二读取偏移,所述第二读取偏移表示所述第二核应读取其要执行的下一个几何形状命令的位置;以及依赖性偏移,所述依赖性偏移表示所述一系列几何形状命令中尚未得到满足的最早依赖性。
30.所述依赖性偏移小于或等于所述写入偏移。所述依赖性偏大于或等于最早的读取偏移。当相应核已完成执行几何形状命令时,可以推进读取偏移。
31.确定第二几何形状命令不依赖于第一几何形状命令的结果可以基于依赖性数据。确定所述第二几何形状命令不依赖于所述第一几何形状命令的结果可选地包括:推进所述第二读取偏移直到其到达所述第二几何形状命令或所述依赖性偏移;将所述第二读取偏移与所述依赖性偏移进行比较;如果所述第二读取偏移小于所述依赖性偏移,则确定所述第二几何形状命令不依赖于所述第一几何形状命令的结果。
32.所述方法还可包括:当所述第一核完成执行所述第一几何形状命令时:将所述第一读取偏移推进到所述第二读取偏移之外,直到其到达第三几何形状命令或所述依赖性偏移;如果所述第一读取偏移到达所述第三几何形状命令,则确定所述第三几何形状命令不依赖于所述第二几何形状命令的结果;以及作为响应,使用所述第一核执行所述第三几何形状命令。
33.可以采用与之前解释的相同方式确定依赖性。
34.所述命令缓冲器还可包括至少一个依赖性指示符,所述依赖性指示符指示所述依赖性指示符之后的几何形状命令依赖于另一个命令。(在这种情况下,应理解,先前提及的依赖性数据包括至少一个依赖性指示符。)所述方法还可包括将所述依赖性偏移推进到所述命令缓冲器中尚未满足依赖性的最早依赖性指示符。
35.所述命令缓冲器可选地还包括至少一个更新命令,其中所述至少一个更新命令由已执行所述系列中的最早未执行几何形状命令的核执行。这将是具有最早(最低)读取偏移的核。
36.更新命令不由读取偏移大于最早读取偏移的核执行。更新命令也称为“围栏更新”。
37.更新命令可用于通知客户端驱动程序已执行某些命令和/或已满足某些依赖性。通过确保仅由“结尾”核更新依赖关系更新,所述方法可以避免过早地执行更新命令。过早执行更新命令可能会导致错误渲染,因为客户端驱动程序将假定更新命令之前的所有命令均已执行。在单核实施中,情况会是这样,但在当前多核情况下可能并非如此。
38.任选地:所述第一核被配置成将其执行的几何形状命令的结果写入第一参数缓冲区;并且所述第二核被配置成将其执行的几何形状命令的结果写入第二参数缓冲区,所述
第二参数缓冲区与所述第一参数缓冲区分离。
39.参数缓冲区是存储几何形状处理命令的结果的内存区域。它可以在几何形状处理期间分配并且在片段处理期间消耗。分配可以是动态的。每个参数缓冲区可以包括以下中的任何一个或两个或更多个组合:图块控制流数据、参数块数据和分配列表数据。参数块数据描述经转换的基元。图块控制流数据定义参数块数据的次序和其它格式化细节。分配列表数据跟踪参数块数据和图块控制流数据的内存分配。
40.每个参数缓冲区可以细分并且由多个渲染使用。这允许在读取参数缓冲区的另一部分(例如,由另一个核执行片段处理)的同时写入参数缓冲区的一部分(由相关联的核)。
41.片段处理可以由多核gpu的核执行以基于由第一核执行的几何形状命令的结果来执行片段处理命令。第一核和另一核两者可以被配置成基于由第一核执行的几何形状命令的结果来执行片段处理命令。另一个核可以是第二核。
42.同样,第二核和另一核两者可以被配置成基于由第二核执行的几何形状命令的结果来执行片段处理命令。在这种情况下,另一个核可以是第一核。
43.当处理给定几何形状命令的结果时,每个核可以针对渲染空间的图块的不同子集执行片段处理。也就是说,每个核可以读取和处理由给定几何形状命令产生的图块控制列表的不同子集。
44.每个核可以被配置成执行几何形状处理和片段处理。在一些示例中,核的构造可以相同。也就是说,它们可能含有相同的硬件,并且它们可能仅在它们被配置成(通过软件或固件)执行的功能上不同。
45.gpu可包括被配置成执行片段处理命令的一个或多个额外核。
46.另一核可被配置成当其完成处理由第一核执行的几何形状命令的结果时,将此发信号至所述第一核;其中所述第一核被配置成响应于从另一核接收该信号,释放用于存储相应结果的内存。
47.当另一核是第二核时,第二核将信号发送至第一核。同样地,当完成对由第二核执行的几何形状命令的结果的处理时,另一核可以将此发信号至第二核。作为响应,第二核可以释放用于存储相应结果的内存。在这种情况下,当另一核是第一核时,第一核将信号发送至第二核。
48.在每种情况下,负责释放内存的核是执行相应几何形状命令的核。负责释放内存的核可等待直到所有其他核都已完成处理几何形状命令的结果,之后释放用于存储该几何形状命令的结果的内存。也就是说,执行几何形状命令的核可以等到完成相关联的片段处理(由所有核执行片段处理)之后,再释放存储该几何形状命令的结果的内存。
49.为了启用该功能,应注意,执行几何形状命令的核可以是执行相关联的片段处理的核之一。
50.任选地:为所述第一几何形状命令设置第一亲和性,使得如果所述第一核在执行所述第一几何形状命令时被中断,所述第一几何形状命令将仅恢复在所述第一核上的处理,并且为所述第二几何形状命令设置第二亲和性,使得如果所述第二核在执行所述第二几何形状命令时被中断,所述第二几何形状命令将仅恢复在所述第二核上的处理。
51.换句话说,一旦第一几何形状命令已经开始执行该核,就不会恢复在除了第二核以外的任何核上的处理。同样地,一旦第二几何形状命令已经开始在该核上执行,就不会恢
复在除了第二核以外的任何核上的处理。这确保第一核始终可以保留对与第一几何形状命令相关联的内存的分配和解除分配的责任。基于第一几何形状命令的输出执行片段处理的任何核仅需要向第一核发出信号以通知其片段处理完成。(第二几何形状命令和第二核也各自如此。)设定亲和性也可以有助于减少内存访问带宽。如果几何形状命令对已经部分处理的特定核具有亲和性,则与几何形状命令相关联的图元数据可能已经由所述核加载到本地高速缓存中,并且当处理恢复时仍可用在所述本地高速缓存中。
52.任何给定核上的几何形状处理可由于例如多任务和上下文切换而中断。
53.第一几何形状命令和第二几何形状命令可以涉及不同的帧。例如,不同帧可以是视频序列或动画序列的连续帧。
54.第一几何形状命令和第二几何形状命令可以涉及相同帧。在某些情况下,单个帧可以包括多个几何形状突跳(命令)。如果这些突跳(kick)之间没有依赖性,则可以重叠的方式处理它们。
55.命令缓冲器可以是环形命令缓冲器。在此情况下,读取、写入和依赖性偏移中的每一个可被配置成从缓冲器的末端绕到缓冲器的开始。应理解,凡提及“较早”或“较迟”命令和“较低”或“较高”读取、写入或依赖度偏移之处,均应考虑此类绕接的可能性。
56.还提供了多核图形处理单元,下文称为gpu,所述多核图形处理单元被配置成在基于图块的渲染期间实现几何形状命令的重叠处理,所述多核gpu至少包括第一核和第二核,以及命令缓冲器,
57.其中所述命令缓冲器被配置成保持由客户端驱动程序写入的一系列几何形状命令,所述几何形状命令具有相关联的依赖性数据,所述依赖性数据指示所述几何形状命令中的哪个依赖于其它命令的完成;
58.其中所述第一核被配置成:
59.从所述命令缓冲器读取第一几何形状命令,以及
60.执行所述第一几何形状命令;
61.并且其中所述第二核被配置成:
62.从所述命令缓冲器读取第二几何形状命令,
63.确定所述第二几何形状命令不依赖于所述第一几何形状命令的结果,以及
64.作为响应,执行所述第二几何形状命令。
65.还提供了根据权利要求12所述的多核图形处理单元,下文称为gpu。
66.可选地:所述第一核被配置成维持第一读取偏移,所述第一读取偏移表示所述第一核应读取其要执行的下一个几何形状命令的位置;所述第二核被配置成维持第二读取偏移,所述第二读取偏移表示所述第二核应读取其要执行的下一个几何形状命令的位置;以及所述gpu被配置成维持依赖性偏移,所述依赖性偏移表示所述一系列几何形状命令中尚未得到满足的最早依赖性。
67.所述命令缓冲器还包括至少一个更新命令,其中所述第一核和所述第二核中的每一个被配置成仅在所述核刚刚执行所述系列中的最早未执行几何形状命令时才执行所述至少一个更新命令。
68.所述核可以通过将其自身的读取偏移与进行几何形状处理的其它核的读取偏移进行比较来确定这一点。具有最早(最低)读取偏移的核应执行更新命令。
69.还提供了一种操作多核图形处理单元,下文称为gpu的方法,所述多核图形处理单元被配置成执行基于图块的渲染,以实现几何形状命令的重叠处理,所述多核gpu至少包括第一核和第二核,所述方法包括:
70.在多个命令缓冲器中的每一个中提供一系列几何形状命令,所述几何形状命令具有相关联的依赖性数据,所述依赖性数据指示所述几何形状命令中的哪个依赖于其它命令的完成;
71.从所述命令缓冲器中的一个读取第一几何形状命令;
72.使用所述第一核执行所述第一几何形状命令;
73.从所述命令缓冲器中的一个读取第二几何形状命令;
74.确定所述第二几何形状命令不依赖于所述第一几何形状命令的结果;以及
75.作为响应,使用所述第二核执行所述第二几何形状命令。第二几何形状命令可以从与第一几何形状命令相同的命令缓冲器读取,或者可以从不同的命令缓冲器读取。所述确定可基于所述依赖性数据和/或所述命令是否来自相同缓冲器。
76.还提供了一种操作多核图形处理单元,下文称为gpu的方法,所述多核图形处理单元被配置成执行基于图块的渲染,以实现几何形状命令的重叠处理,所述多核gpu至少包括第一核和第二核,所述方法包括:
77.在多个命令缓冲器中的每一个中提供一系列几何形状命令;
78.从所述命令缓冲器中的一个读取第一几何形状命令;
79.使用所述第一核执行所述第一几何形状命令;
80.从所述命令缓冲器中的另一个读取第二几何形状命令;以及
81.使用所述第二核执行所述第二几何形状命令。
82.还提供一种图形处理系统,所述图形处理系统包括如上文概述的和/或被配置成执行如上概述的方法的gpu。所述图形处理系统可以在集成电路上的硬件中体现。
83.还提供了一种使用集成电路制造系统来制造如上概述的图形处理系统的方法。
84.还提供了一种使用集成电路制造系统制造如上概述的图形处理系统的方法,该方法包括:使用布局处理系统对图形处理系统的计算机可读描述进行处理,以生成包含图形处理系统的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造图形处理系统。
85.还提供了一种计算机可读代码,该计算机可读代码被配置为使得当代码被运行时执行如上概述的方法。还提供了一种计算机可读存储介质(可选地是非暂时性的),在其上编码有所述计算机可读代码。
86.还提供了一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中处理时将该集成电路制造系统配置为制造如上文概述的图形处理系统。
87.还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有如上概述的图形处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时使集成电路制造系统制造包含该图形处理系统的集成电路。
88.还提供了一种计算机可读存储介质(任选为非瞬态),在其上存储有如上文概述的图形处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时使集成电路制造系统:使用布局处理系统来处理图形处理系统的计算机可读描述,以便生成包含
图形处理系统的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造图形处理系统。
89.还提供了一种集成电路制造系统,所述集成电路制造系统被配置成制造如上概述的图形处理系统。
90.还提供一种集成电路制造系统,所述集成电路制造系统包括:计算机可读存储介质(任选为非瞬态),所述计算机可读存储介质上存储有如上概述的图形处理系统的计算机可读描述;布局处理系统,所述布局处理系统被配置为处理计算机可读描述,以便生成包含图形处理系统的集成电路的电路布局描述;以及集成电路生成系统,所述集成电路生成系统被配置为根据电路布局描述来制造图形处理系统。
91.布局处理系统可以被配置成确定从集成电路描述导出的电路的逻辑部件的位置信息,以生成包含该图形处理系统的集成电路的电路布局描述。
92.如对本领域的技术人员将显而易见,上述特征可以适当地组合,并且可与本文中所描述的示例的各方面中的任一方面进行组合。
附图说明
93.现在将参考附图详细描述示例,在附图中:
94.图1是根据示例的gpu的框图;
95.图2示出了根据示例的用于几何形状处理的环形命令缓冲器的一部分;
96.图3是示出根据示例的方法的流程图;
97.图4是示出根据示例的另一方法的流程图;
98.图5a示出根据比较示例依序处理几何形状的示例;
99.图5b示出根据示例并行地处理几何形状的示例;
100.图6示出在其中实现图形处理系统的计算机系统;以及
101.图7示出用于生成包含图形处理系统的集成电路的集成电路制造系统。
102.附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
103.借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文中所描述的实施方案,并且对所公开实施方案的各种修改对于本领域的技术人员将显而易见。
104.现在将仅借助于示例来描述实施方案。
105.在示例性基于图块的延迟渲染架构中,几何形状处理通常在一个核上执行,而片段着色可以分布在多个核上。这种并行化有助于加快渲染过程。然而,在具有非常复杂的几何形状并且因此具有大量几何形状数据的场景中,几何形状处理阶段可以是速率限制步骤,因为它需要在单个核上执行。
106.随着核数量的增加,问题变得更加突出。由于在更多数量的核中划分片段着色,并
行处理的好处意味着可以更快地完成。因此,几何形状处理(其不能简单地以相同方式并行化)更可能变成瓶颈。因此,可扩展性会受到影响,因为增加核数量在加速整体渲染过程方面带来越来越少的益处。
107.由于图形流水线与其服务的应用程序之间的关系,还产生了进一步的挑战。应用程序和客户端驱动程序将按特定顺序向gpu发出命令。应用程序/客户端驱动程序有权依赖于gpu将按发出命令的顺序处理命令的这一理解。如果命令被错序处理,则可能导致意外(和错误)行为。
108.尽管存在与并行化几何形状处理相关联的困难,但期望加速具有复杂几何形状的帧的渲染。尤其需要的是,无需对硬件流水线进行重大更改,并且以对客户端驱动程序透明的方式进行这一操作。具体而言,需要继续满足现有客户端驱动程序满足的所有条件,以便不必重新编写使用客户端驱动程序的软件。
109.有些命令依赖于较早前命令的完成,但有些则不然。例如,在一些情况下,与连续帧相关联的命令可以彼此独立。此外,在某些情况下,客户端驱动程序可在单个帧内发布多个命令,这些命令也彼此独立。
110.在根据本公开的示例中,gpu的固件可以分析由客户端驱动程序发出的命令序列,以确定哪些命令依赖于先前命令的结果,哪些不是。该信息可从应用程序或客户端驱动程序设置的“围栏”中提取。当固件找到不依赖于先前命令的结果(尚未完成执行)的几何形状命令时,它将在下一个可用核上执行该命令。在基于图块的渲染的上下文中,应理解,几何形状命令是激励几何形状阶段处理的命令。因此,这允许独立几何形状处理同时在多个核上并行进行。
111.特别地,固件检查命令缓冲器(其在本实施方式中是环形命令缓冲器或ccb)。根据示例性gpu架构,环形命令缓冲器具有与其相关联的三个指针:写入偏移、读取偏移和依赖性偏移。
112.写入偏移表示客户端驱动程序应写入下一个命令的位置。读取偏移指示待执行的缓冲器中的下一个几何形状命令的位置。依赖性偏移提供了这样一种保证,即在依赖性偏移之前没有什么正等待任何未满足的围栏。在实践中,如果依赖性偏移已经由固件更新以尽可能地推进它,则依赖性偏移通常指示依赖于完成一个或多个先前命令的下一命令的位置。
113.根据示例性gpu架构,可能存在若干环形命令缓冲器

一个用于由gpu执行的每种类型的工作。例如,和几何形状ccb一样,可以存在用于片段处理命令的片段ccb,以及用于计算命令的计算ccb。依赖性偏移促进不同ccb之间的同步。例如,片段处理命令将依赖于相应几何形状处理命令的完成。将在片段ccb中插入依赖性指示符以反映这一点。片段处理命令或几何形状处理命令可依赖于计算命令的结果。如果是,则片段ccb或几何形状ccb将酌情包含反映这一点的依赖性指示符。还可能存在相同类型的多个命令缓冲器,例如多个几何形状ccb。当不同(不相关)应用程序对同一gpu发布工作时,可能会发生这种情况,为每个不同应用程序创建不同的命令缓冲器。为简单起见,以下描述假设存在单个几何形状命令缓冲器,但应理解,当存在多个几何形状命令缓冲器时,它们可各自按所述进行处理。
114.在根据本公开的示例中,利用这种跟踪不同ccb中的不同命令之间的条件依赖性的能力来确定和尊重相同ccb中的不同命令(即几何形状ccb中的几何形状命令)之间的条
件依赖性。
115.在根据本公开的示例中,引入第二读取偏移。当给定几何形状命令的几何形状处理被发送(“突跳”)到第一核时,第一读取偏移在该命令处停止。固件持续向前移动第二读取偏移。如果在遇到依赖性偏移之前找到另一几何形状命令,那么它知道该命令不依赖于目前由第一核执行的计算。因此,它将另一几何形状命令突跳到第二核,以与第一核中进行中的处理并行地处理几何形状。
116.换句话说,每个核提供分配给几何形状处理的一个读取偏移。每当相应核空闲时,固件推进(即,向前移动)该核的读取偏移,搜索要执行的另一几何形状处理,直到遇到依赖性偏移。以此方式,可以在多个核上并行地执行几何形状处理。实施对于客户端驱动程序来说在很大程度上是透明的。客户端驱动程序不应在几何形状命令之间插入不必要的围栏(因为这可能阻止实现并行化的全部益处)。与此同时,客户端驱动程序应明确强调ccb内部的任何隐含依赖性,并在适当情况下使用依赖性围栏。换言之,客户端驱动程序预期清楚ccb内的依赖性,并在必要时很少使用它们。如果客户端驱动程序夸大了依赖性,这可能对性能产生负面影响;如果客户端驱动程序低估了依赖性,则可能会产生错误渲染的可能性。否则,客户端驱动程序以与它始终执行的方式相同的方式将命令写入环形命令缓冲器。它仍然不知道几何形状处理是由单个核还是由多个核执行。
117.处理命令时没有间隙。换句话说,每个读取偏移仅前进,直到其找到第一个未执行命令,然后其由相关联的核执行。
118.通常,当与特定命令相关联的几何形状处理已完成执行时,固件执行“围栏更新”,以更新客户端驱动程序关于驱动程序现在可以重新使用哪些内存。这种行为是根据本发明的示例修改的,因为通常,围栏更新将引导客户端驱动程序相信命令缓冲器中的所有命令到目前为止已完成执行。当与不同命令相关联的几何形状处理正由不同核处置时,就不再是这种情况。稍后命令的几何形状处理可在较早命令的几何形状处理仍在进行时完成执行。
119.为了在多核情况下适应这一点,固件仅基于结尾读取偏移执行围栏更新。对于结尾读取偏移之前的任何读取偏移,当几何形状处理完成时不执行围栏更新。这避免了向客户端驱动程序发出错误信号的风险。
120.内存管理机制也需要一些其它修改。处置几何形状处理的每个核被分配其自身的参数缓冲区,使得独立于其它核,每个核都具有对其自身内存池的控制。如上文所解释,通过执行几何形状处理(包括图块化)填充参数缓冲区,并且在片段着色期间消耗内容。
121.在多核情况下,由进行几何形状处理的一个核填充的参数缓冲区可以被执行片段着色的若干核消耗(可能包括进行几何形状处理的核)。这些核中的每一个执行片段着色任务,所述任务涉及一个或多个图块的片段着色。由于处置片段着色的单个(其它)核将不完全了解在一个参数缓冲区中内存的使用,并且由于它们在不同时间处置多于一个几何形状核的片段着色(并且因此使用多于一个参数缓冲区),因此只允许最初进行几何形状处理的核解除分配内存。因此,解除分配留给负责该特定参数缓冲区的核。这确保了只有对参数缓冲区的内容具有完整预览的核才能解除分配该参数缓冲区内的内存。
122.当片段着色核完成片段着色任务时,其向相关“主”几何形状核发信号表明其已完成。一旦所有片段着色核完成其处理,“主”几何形状核接着解除分配/释放参数缓冲区中的
相关联内存空间。
123.在核上运行时可能中断几何形状处理任务。这可特别由于多任务处理和上下文切换而发生。例如,如果固件需要执行来自更重要的软件应用程序的较高优先级的几何形状命令,则可以对交换几何形状命令进行上下文切换。这是在运行时决定的,固件稍后将返回中断的几何形状命令。当这种情况发生时,中断的几何形状处理任务可以维持对其正在运行的核的亲和性,使得其将仅在相同核上恢复执行。这有助于简化片段着色核与几何形状核之间的信号传输——用于内存解除分配的信号传输始终回到作为相关参数缓冲区的“主”的核。在片段着色核正在工作时,参数缓冲区的所有权没有在几何形状核之间切换的风险。
124.图1是根据示例的示出gpu 10的简化示意图框图。gpu包括第一核12;第二核14;以及环形命令缓冲器(ccb)18。注意,图中所示的ccb 18是用于几何形状命令的ccb。gpu具有用于其他类型的命令的其他ccb(未显示)。
125.图2示出了ccb 18的一部分的内容。第一核的第一读取偏移roff指向第一几何形状命令geom0;第二核的第二读取偏移roff2指向第二几何形状命令geom1。ccb 18还包括更新命令u0、u1、u2(也称为“围栏更新”)和依赖性指示符d1、d2。这些由客户端驱动程序设置。依赖性偏移doff指向第一个尚未满足的依赖性指示符d2。在图2所示的示例中,第二几何形状命令geom1之前的依赖性指示符d1已经满足(例如,可能由正在处理的单独计算命令满足)。因此,第二几何形状命令geom1不依赖于第一几何形状命令geom0的结果,并且这两个几何形状命令可以重叠的方式分别由第一核和第二核处理。
126.图3示出了由gpu 10基于处理图2中所示的ccb而执行的方法。在步骤102中,客户端驱动程序将几何形状命令写入ccb 18。每个几何形状命令写入由写入偏移woff(图2中未示出)指向的位置处的ccb。写入偏移在写入每个命令之后推进。在该示例中,命令缓冲器是环形命令缓冲器,当写入偏移到达缓冲器的末端时,其再次环绕回到开始。(每个偏移指针都是这样。)
127.在步骤104中,gpu将依赖性偏移doff推进到尚未满足d2的第一依赖性指示符。在步骤106中,第一核12读取第一读取偏移roff处的第一几何形状命令geom0。同时,第二核14将第二读取偏移roff2推进到下一个几何形状命令geom1。这里,它读取第二个几何形状命令geom1。因为它在到达依赖性偏移doff之前到达第二几何形状命令geom1,第二核可以确定(在步骤117中)第二几何形状命令geom1不依赖于第一几何形状命令geom0的输出。一旦确定这一点,第二核14知道执行第二几何形状命令geom1是安全的(无论第一核是否完成执行第一几何形状命令)。在步骤117中作出此确定后,在步骤118中第二核执行第二几何形状命令。在本实施方式中,第二几何形状命令(由第二核)的执行在第一几何形状命令(由第一核)的执行之后不久开始,并且两者并行进行。哪一个执行首先完成并不重要。
128.在步骤109中,第一核12将其几何形状处理的结果(执行第一几何形状命令)写入第一参数缓冲区。第一参数缓冲区保留用于由第一核写入,并且第一核保留分配和解除分配此参数缓冲区中的内存的责任。同时,在步骤119中,第二核14将其几何形状处理的结果(执行第二几何形状命令)写入第二参数缓冲区。第二参数缓冲区保留用于由第二核写入,并且第二核保留分配和解除分配此参数缓冲区中的内存的责任。
129.如果没有被分配足够的内存来写入,则每一个核在需要写入数据(特别是图块控
制流和参数块)时要求为其参数缓冲区分配内存。内存的稍后解除分配将依赖于来自执行片段处理的其它核的信号传递。将参考图4对此进行描述。
130.如上文已经解释,已知其使片段处理并行。例如,在本基于图块的架构中,片段处理可以通过将图块的子集分配给每个核而分布在多个核之间。通常若干核将处置片段处理。在本示例中,至少第一核12涉及对其几何形状处理的结果处置片段处理。也就是说,第一核针对第一几何形状命令的结果进行至少一些片段处理。同样,第二核针对第二几何形状命令的结果进行至少一些片段处理。另外,系统中可存在被配置成执行片段处理但不执行几何形状处理的核。在其它示例中,除了执行上文和下文提及的内存解除分配之外,针对命令执行几何形状处理所涉及的核可能不涉及片段处理。
131.在步骤202中,执行片段处理。片段处理基于在几何形状处理阶段中作为输出产生的数据。也就是说,片段处理消耗在几何形状处理阶段中写入的参数缓冲区的内容。当给定的片段处理命令已完成执行时,不再需要它已消耗的参数缓冲区内容,并且可以释放相关联的内存。根据本实施方案,进行几何形状处理工作的核也进行一些片段处理工作。正在执行片段处理的任何其它核在已经完成片段处理的一部分时,即当在该另一核上完成片段处理命令的执行时给一开始进行几何形状处理工作的核发信号。特别地,在第二核基于第一几何形状命令的结果完成执行片段处理之后,第二核将此(在步骤204中)发信号通知第一核。作为响应,一旦基于第一几何形状命令的结果处理片段处理的所有核(包括第一核)都已完成片段处理,第一核将释放第一参数缓冲区中的相关分配的内存(步骤206)。同样地,在第一核基于第二几何形状处理命令的结果完成执行片段处理之后,它将此(在步骤214中)发信号通知第二核。作为响应,一旦基于第二几何形状命令的结果处理片段处理的所有核(包括第二核)都已完成片段处理,第二核将释放第二参数缓冲区中的相关分配的内存(在步骤216中)。因为每个核都有自己的参数缓冲区,所以不存在一个核解除配置和释放仍由另一核使用的内存的风险。
132.再次参考图2中所示的示例性ccb内容,让我们考虑在第一核完成执行第一几何形状命令geom0,第二核完成执行第二几何形状命令geom1之后会发生什么。让我们假设第一核首先完成其工作。在图2的示例中,第一核将第一读取偏移roff推进到更新命令u0。因为roff《roff2(即在ccb中roff在roff2后面),所以第一核执行围栏更新命令u0。也就是说,由于第一核目前具有结尾读取偏移,所以执行围栏更新命令(图3中的步骤110)。更新命令只应执行一次,并且应由读取偏移当前处于结尾的核执行。然后再次推进第一读取偏移roff,以到达第二几何形状命令geom1。(注意,在推进roff时忽略了依赖性指示符d1

在定位依赖性偏移doff时已经考虑了这一点。)此时,roff=roff2和roff2《doff;因此,第一核知道第二核将已经执行第二几何形状命令geom1。因此,第一核跳过第二几何形状命令并且再次推进第一读取偏移roff。现在,roff到达下一个更新命令u1。因为此时的roff》roff2(即在ccb中roff在roff2之前),第一核知道它必须跳过围栏更新。此围栏更新稍后将由第二核(其读取偏移roff2现在在结尾)在完成第二几何形状命令geom1的执行时执行。第一次读取偏移roff再次推进。它到达依赖性偏移doff;因此它停止,因为任何核都不应执行除依赖性偏移之外的任何几何形状命令。
133.如果依赖性偏移doff此时可以向前移动,超出第三几何形状命令geom2,那么第一核将roff推进到该命令geom2并且读取和执行。
134.同时,第二核完成第二几何形状命令geom1的执行。第二核将第二读取偏移roff2推进到围栏更新命令u1。因为roff2是该阶段的结尾读取偏移(即roff2《roff),第二核执行更新命令u1。
135.注意,在一些示例中,几何形状命令可以由客户端驱动程序拆分为两个或更多个部分。在此情况下,这些部分以与当在核上运行时几何形状处理被中断相同的方式运转

后续部分维持对处理第一部分的核的亲和性。客户端驱动程序的拆分可能因各种原因而发生。例如,客户端驱动程序可能希望暂停一个几何形状命令,开始另一个几何形状命令,稍后返回第一个几何形状命令。
136.进行几何形状处理的两个核可以以这种方式进行,彼此跳过,直到所有几何形状处理工作完成。这种重叠执行模式有可能显著增加几何形状处理的吞吐量。这将通过参考图5a中示意性地示出的比较示例以及图5b中示出的示例来解释。在图5a中,几何形状命令由单个核依序执行。所花费的总时间是执行单个命令所花费的时间的总和。geom0分两部分执行。这可能是由于上下文切换的结果,或由客户端驱动程序将命令拆分成两部分的结果,如上文所解释。在图5b中,根据上文解释的模式,独立的几何形状命令由两个核执行。本示例中花费的总时间是geom0的两个部分所花费时间的总和(因为这些现在由核1按顺序执行,这比由核2执行geom1、geom2和geom3的时间更长)。注意,geom0的第二部分遵循关于在下文解释的亲和性的规则,在与第一部分相同的核上执行。
137.因此,可以看到,根据本示例,可以在多个核之间有效地缩放几何形状处理。这可以无需客户端驱动程序就如何划分工作作出任何决定来完成。
138.如上文前面所述,一旦核已开始执行给定几何形状命令,该命令就具有针对该核的“亲和性”集。这意味着,如果执行被中断(例如,由于多任务处理和/或上下文切换),则其将仅在该相同核上恢复,而不是在任何其他核上恢复。这简化了内存管理,也可以有助于减少内存访问带宽的使用。执行片段处理的核不需要检查几何形状处理是否已在第一核上中断并且在第二核上恢复(在这种情况下,第二核将负责解除分配和释放相关联的参数缓冲空间)。执行片段处理的核保证了一个特定核负责几何形状处理,并且同一核仍负责整理内存管理。另外,如果几何形状处理命令被中断且在同一核上恢复,则正由该命令处理的一些基元数据可能仍会存留在该核的高速缓存中。这可以有助于避免在恢复后第二次从外部存储器读取它。
139.应当理解,本公开的范围不限于上面的示例。许多变化是可能的,包括但不限于以下所述。
140.上文描述的示例使用两个核进行几何形状处理;然而,应理解,这是非限制性的,可在其它示例中使用更多数量的几何形状核。
141.尽管本实施方式中的命令缓冲器是环形命令缓冲器,但这并非必需。例如,其它合适的内存结构可包括链接列表。
142.在本实施方式中,严格地按顺序启动几何形状核。也就是说,每个核仅在其它核已启动其几何形状处理之后才启动。这对于简化设计和实施可能是有益的;然而,这并非必需。在一些实施方式中,几何形状核可以同时启动其几何形状处理。
143.如前所述,可能存在多个几何形状命令缓冲器,并且每个缓冲器可以由如上所述的多个核处理。也就是说,多个不同核可以同时对不同命令缓冲器起作用(即,因为在一个
几何形状ccb和另一个几何形状ccb中的命令之间不存在依赖性)。
144.此外,取决于工作负荷和核可用性,不同的缓冲器可以各自并行地由不同的单个核处理。甚至可能的情况是,这些核交换工作负荷,例如,如果优选在其它核忙碌时仅使用特定核进行几何形状处理。因此,在示例场景中,第一核

core0’可能正在对第一命令缓冲器

ccb0’起作用,并且因此第二核

core1’开始对另一个命令缓冲器

ccb1’起作用。当core0停止对ccb0(因为所有ccb0命令均已处理,或者因为满足未履行的依赖性)起作用时,它可以开始处理ccb1。该处理可以继续与核1并行地处理ccb1,或者,如果期望将core1用于其他目的,则core1可以停止处理ccb1,使得core0单独地处理ccb1。此外,假设core0由于未满足的依赖性而停止处理ccb0,并且在两个core0开始对ccb1起作用并且core1已停止对ccb1起作用之后满足依赖性,那么core1可以接着开始处理ccb0,使得两个命令缓冲器现在再次被并行处理,但现在由与场景的开始相比不同的核处理。
145.图6展示了计算机系统,其中可以实施本文所描述的图形处理系统。计算机系统包括cpu 902、gpu 904、存储器906和其他设备914,诸如显示器916、扬声器918和相机919。处理块910(对应于gpu 10)在gpu 904上实施。计算机系统的部件可经由通信总线920彼此进行通信。
146.图1中的gpu示为包括数个功能块。这仅仅是示意性的,并且不旨在限定这类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式来提供。应理解,在本文中被描述为由gpu形成的中间值不需要由所述gpu在任何时间点物理地生成,并且可以仅仅表示方便地描述由所述gpu在其输入和输出之间执行的处理的逻辑值。
147.本文所描述的gpu可体现在集成电路上的硬件中。本文所描述的gpu可配置成执行本文所描述的任一方法。一般来说,上文所描述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如固定逻辑电路系统)或它们的任何组合中实施。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件具体实施的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,当在处理器上被执行时,所述程序代码执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码促使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。
148.如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器(具体是gpu)执行由所述代码指定的任务。
149.处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或它们的具有处理能力以使得其可执行指令的集合或部分。处理器可以是任何种类的通用或专用处理器,诸如cpu、gpu、nna、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑
阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可包括一个或多个处理器。
150.其还旨在涵盖限定如本文中所描述的硬件的配置的软件,诸如hdl(硬件描述语言)软件,如用于设计集成电路或用于配置可编程芯片以实现所需功能。也就是说,可以提供一种计算机可读存储介质,所述计算机可读存储介质上编码有集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中处理(即,运行)时,所述集成电路定义数据集将系统配置成制造被配置成执行本文中所描述的任何方法的gpu,或者制造包括本文中所描述的任何设备的gpu。集成电路定义数据集可以是例如集成电路描述。
151.因此,可提供一种在集成电路制造系统处制造本文所描述的gpu的方法。此外,可提供一种集成电路定义数据集,其在集成电路制造系统中处理时使制造gpu的方法得以执行。
152.集成电路定义数据集可呈计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何层级进行制造的硬件描述语言,包括作为寄存器传输级(rtl)代码;作为高级电路表示法,诸如verilog或vhdl;以及作为低级电路表示法,诸如oasis(rtm)和gdsii。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可在计算机系统处进行处理,所述计算机系统被配置成用于在软件环境的上下文中产生集成电路的制造定义,所述软件环境包括电路元件的定义以及用于组合这些元件以便产生由所述表示法如此定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如提供命令、变量等),以便将计算机系统配置成用于产生集成电路的制造定义,以执行定义集成电路以便产生所述集成电路的制造定义的代码。
153.现将相对于图7描述在集成电路制造系统处处理集成电路定义数据集以配置系统来制造gpu的示例。
154.图7示出集成电路(ic)制造系统1002的示例,所述系统被配置成如本文中的任一示例所描述的那样来制造gpu。具体地说,ic制造系统1002包括布局处理系统1004和集成电路产生系统1006。ic制造系统1002被配置成接收ic定义数据集(例如,限定如本文的任一示例中所描述的gpu),处理ic定义数据集,并且根据ic定义数据集生成ic(例如,其体现如本文的任一示例中所描述的gpu)。ic定义数据集的处理将ic制造系统1002配置成制造体现如本文的任一示例中所描述的gpu的集成电路。
155.布局处理系统1004被配置成接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可涉及合成rtl代码以确定待产生电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到ic产生系统1006。电路布局定义可以是例如电路布局描述。
156.如本领域中所已知,ic产生系统1006根据电路布局定义来产生ic。例如,ic产生系统1006可实施用以产生ic的半导体设备制造工艺,所述半导体设备制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,掩模可在光刻工艺中用于根据电路定义来产生ic。可替代地,提供给ic产生系统1006的电路布局定义可呈计算机可读代码的形式,ic产生系统1006
可使用所述计算机可读代码来形成用于产生ic的合适的掩模。
157.由ic制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1002可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些节段可在不同位置中以及/或者由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成待产生电路的门级表示;(ii)基于门级表示来产生电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
158.在其它示例中,在集成电路制造系统处对集成电路定义数据集进行处理可将系统配置成制造gpu,而无需对ic定义数据集进行处理来确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器(诸如fpga)的配置,并且对所述数据集的处理可将ic制造系统配置成(例如通过将配置数据加载到fpga)产生具有所述定义的配置的可重新配置的处理器。
159.在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集以上文参考图7描述的方式对集成电路制造系统进行配置,可以制造出如本文描述的设备。
160.在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图7所示的示例中,ic产生系统可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
161.与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这种设备、装置、模块和系统(例如在集成电路中)期间,可在性能改进与物理具体实施之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知具体实施的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,本技术中所阐述的引起设备、装置、模块和系统的物理具体实施的改进(诸如硅面积减小)的概念可与性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
162.申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献