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

用于减少发散的计算单元排序的制作方法

2022-02-25 18:33:50 来源:中国专利 TAG:

用于减少发散的计算单元排序
1.相关申请的交叉引用
2.本技术要求2019年6月28日提交的美国非临时申请号16/457,873的权益,其内容在此通过引用并入本文。


背景技术:

3.单指令多数据(“simd”)处理器通过使用具有多个数据项的单个控制流模块来实现执行的并行化。当控制流依赖于数据时,控制流可能会发散,因为不同的执行线程对于控制流所依赖的数据可能具有不同的值。在此类情况下,不同的控制流路径会被串行化,从而导致减速。
附图说明
4.可从结合附图以举例的方式给出的以下描述中获得更详细的理解,在附图中:
5.图1是其中可以实现本公开的一个或多个特征的示例性装置的框图;
6.图2是根据示例的装置的框图,示出了与在加速处理装置上执行处理任务相关的额外细节;
7.图3示出了根据示例的使用光线跟踪技术渲染图形的光线跟踪流水线;
8.图4示出了根据示例的由发散控制流导致的串行化;
9.图5a示出了根据示例的通过跨工作组的波前重组执行项来减少控制流发散的技术;
10.图5b示出了在没有重组的情况下可能发生的控制流发散;
11.图6a示出了根据示例的通过在波前内重组执行项来减少控制流发散的技术;
12.图6b示出了在没有重组的情况下可能发生的控制流发散;以及
13.图7是根据示例的用于在apd中重组执行项的方法的流程图。
具体实施方式
14.本文描述用于减少单指令多数据处理器中的控制流发散的技术。所述方法包括在发散控制流的点处识别不同执行项的控制流目标,基于所述控制流目标对所述执行项进行排序,基于所述排序重组所述执行项,以及在所述发散控制流的点之后以重组的执行项来执行。
15.图1是其中可以实现本公开的一个或多个特征的示例性装置100的框图。装置100包括例如计算机、游戏装置、手持式装置、机顶盒、电视、移动电话或平板电脑。装置100包括处理器102、存储器104、存储装置106、一个或多个输入装置108以及一个或多个输出装置110。装置100还可选地包括输入驱动器112和输出驱动器114。应理解,装置100包括图1中未示出的附加部件。
16.在各种替代方案中,处理器102包括中央处理单元(cpu)、图形处理单元(gpu)、位于同一管芯上的cpu和gpu、或一个或多个处理器核,其中每个处理器核可能是cpu或gpu。在
各种替代方案中,存储器104与处理器102定位在同一管芯上,或者与处理器102分开地定位。存储器104包括易失性或非易失性存储器,例如随机存取存储器(ram)、动态ram或高速缓存。
17.存储装置106包括固定或可移动存储装置,例如硬盘驱动器、固态驱动器、光盘或快闪驱动器。输入装置108包括但不限于键盘、小键盘、触摸屏、触摸板、检测器、麦克风、加速计、陀螺仪、生物特征扫描仪或网络连接(例如,用于传输和/或接收无线ieee 802信号的无线局域网卡)。输出装置110包括但不限于显示装置118、扬声器、打印机、触觉反馈装置、一个或多个灯、天线或网络连接(例如,用于传输和/或接收无线ieee 802信号的无线局域网卡)。
18.输入驱动器112与处理器102和输入装置108通信,并且容许处理器102接收来自输入装置108的输入。输出驱动器114与处理器102和输出装置110通信,并且容许处理器102将输出发送到输出装置110。注意,输入驱动器112和输出驱动器114为任选部件,并且装置100在不存在输入驱动器112和输出驱动器114的情况下将以相同方式操作。输出驱动器114包括耦合至显示装置118的加速处理装置(“apd”)116。apd 116被配置成接受来自处理器102的计算命令和图形渲染命令,以处理那些计算命令和图形渲染命令,并且向显示装置118提供像素输出以供显示。如下面进一步详细描述,apd 116包括一个或多个并行处理单元,所述一个或多个并行处理单元被配置成根据单指令多数据(“simd”)范例执行计算。因此,尽管各种功能在本文中被描述为由apd 116执行或结合apd 116执行,但是在各种替代方案中,被描述为由apd 116执行的功能另外地或替代地由具有类似能力的其他计算装置执行,所述其他计算装置不由主处理器(例如,处理器102)驱动并且未被配置为向显示装置118提供(图形)输出。例如,可以设想,根据simd范例执行处理任务的任何处理系统可以被配置成执行本文所描述的功能。
19.图2是根据示例的装置100的框图,示出了与在apd 116上执行处理任务有关的额外细节。处理器102在系统存储器104中维持一个或多个控制逻辑模块,以供处理器102执行。控制逻辑模块包括操作系统120、驱动器122和应用程序126。这些控制逻辑模块控制处理器102和apd 116的操作的各种特征。例如,操作系统120直接与硬件通信,并且为在处理器102上执行的其他软件提供到硬件的接口。驱动器122通过例如向软件(例如,应用程序126)提供应用程序编程接口(“api”)来控制apd 116的操作,所述软件在处理器102上执行以访问apd 116的各种功能。在一些实现方式中,驱动器122包括即时编译器,所述即时编译器编译程序以供apd 116的处理部件(例如下面进一步详细讨论的simd单元138)执行。在其他实现方式中,不使用即时编译器来编译程序,并且普通应用程序编译器编译着色器程序以供在apd 116上执行。
20.apd 116执行针对选定功能的命令和程序,例如适于并行处理和/或无序处理的图形操作和非图形操作。apd 116用于执行图形流水线操作,例如像素操作、几何计算,并且基于从处理器102接收的命令向显示装置118渲染图像。apd 116还基于从处理器102接收的命令执行与图形操作不相关或不直接相关的计算处理操作,例如与视频、物理模拟、计算流体动力学或其他任务相关的操作。apd 116还执行与基于光线跟踪的图形渲染相关的计算处理操作。
21.apd 116包括计算单元132,所述计算单元包括一个或多个simd单元138,其根据
simd范例按照处理器102的请求以并行方式执行操作。simd范例是这样一种范例:多个处理元件共享单个程序控制流单元和程序计数器,并且因此执行相同的程序,但是能够用不同的数据执行所述程序。在一个示例中,每个simd单元138包括十六个通道,其中每个通道与simd单元138中的其他通道同时执行相同的指令,但是用不同的数据执行所述指令。如果并非所有通道都需要执行给定指令,则可以利用断言关闭通道。断言也可用于执行具有发散控制流的程序。更具体地,对于具有条件分支或其他指令的程序,其中控制流是基于由单个通道执行的计算,与当前未执行的控制流路径相对应的通道的断言以及对不同控制流路径的串行执行允许任意控制流。在一个实现方式中,计算单元132中的每一个可以具有本地l1高速缓存。在一个实现方式中,多个计算单元132共享l2高速缓存。
22.计算单元132中的基本执行单元是工作项。每个工作项代表将在特定通道中并行执行的程序的单个实例。可以在单个simd处理单元138上将工作项一起作为“波前”执行。simd处理单元138的simd特性意味着多个工作项可以同时并行执行。在单个simd单元上以这种方式一起执行的工作项是同一波前的一部分。在一些实现方式或操作模式中,simd单元138通过同时执行波前的每个工作项来执行波前。在其他实现方式或操作模式中,simd单元138并行执行波前中的工作项的不同子集。在一个示例中,波前包括64个工作项,并且simd单元138具有16个通道(其中每个通道是硬件的大小设计成执行单个工作项的单元)。在此示例中,simd单元138通过同时执行16个工作项4次来执行波前。
23.一个或多个波前包括在“工作组”中,所述工作组包括被指定来执行同一程序的工作项集合。应用程序或其他实体(“主机”)请求着色器程序由加速处理装置116执行,从而指定“大小”(工作项的数量),并且命令处理器136生成一个或多个工作组来执行所述工作。工作组的数量、每个工作组中波前的数量以及每个波前中工作项的数量与主机请求的工作大小相关。在一些实现方式中,主机可以针对执行工作的特定请求指定每个工作组中工作项的数量,并且此规范规定了由命令处理器136生成以执行工作的工作组的数量。如上所述,命令处理器136将工作组分派到一个或多个计算单元132,所述计算单元执行适当数量的波前以完成工作组。
24.由计算单元132提供的并行性适合于与图形有关的操作,例如像素值计算、顶点变换和其他图形操作。因此,在一些实例中,从处理器102接受图形处理命令的图形流水线134将计算任务提供给计算单元132以并行执行。
25.在一些实现方式中,加速处理装置116实现光线跟踪,所述光线跟踪是通过测试场景中的模拟光线与对象之间的相交来渲染3d场景的技术。光线跟踪中涉及的许多工作由可编程着色器程序来执行,所述可编程着色器程序在计算单元132中的simd单元138上执行。尽管在apd 116上执行光线跟踪工作的上下文中描述了本文中呈现的一些教导,但是应理解,本文中呈现的各种教导可以应用于除光线跟踪工作负载之外的工作负载中。
26.图3示出了根据示例的使用光线跟踪技术渲染图形的光线跟踪流水线300。光线跟踪流水线300提供利用光线跟踪渲染场景所涉及的操作和实体的概述。光线生成着色器302、任何命中着色器306、最近命中着色器310和未命中着色器312是着色器实现的阶段,其表示光线跟踪流水线阶段,其功能由在simd单元138中执行的着色器程序来执行。在每个特定的着色器实现的阶段处的任何特定着色器程序由应用程序提供的代码(即,由应用程序开发者提供的代码,所述代码由应用程序编译器预编译和/或由驱动器122编译)来限定。光
线跟踪阶段304执行光线相交测试以确定光线是否命中三角形。光线跟踪阶段304可由在simd单元138中执行的着色器程序或由配置成执行光线相交测试的固定功能硬件执行。
27.各种可编程着色器阶段(光线生成着色器302、任何命中着色器306、最近命中着色器310、未命中着色器312)被实现为在simd单元138上执行的着色器程序。命令处理器136协调光线跟踪流水线300的执行。具体地,命令处理器136是可编程单元,其执行指令以使得在apd 116上执行光线跟踪流水线300的各个阶段。本文其他地方提供了额外细节。
28.光线跟踪流水线300按以下方式操作。一个或多个计算单元132执行光线生成着色器302。光线生成着色器302请求光线跟踪阶段304执行一个或多个光线相交测试。每个光线相交测试定义了光线跟踪操作的原点和方向,这确定光线是否击中一个或多个三角形,或者光线是否没有击中任何三角形。
29.光线跟踪阶段304识别与光线相交的一个或多个三角形以进行光线相交测试,或者,如果在给定距离内没有三角形与光线相交,则确定光线没有命中任何三角形(即,光线“未命中”)。光线跟踪阶段304可以以任何技术上可行的方式实现。在一个示例中,光线跟踪阶段304被实现为在一个或多个计算单元132上执行的着色器程序。在另一示例中,光线跟踪阶段304被实现为固定功能硬件。
30.光线跟踪阶段304针对光线所命中的最接近光线原点的三角形触发最近命中着色器310的执行,或者,如果没有命中三角形,则触发未命中着色器。最近命中着色器310的典型用途是基于材质的纹理对材质进行着色。未命中着色器312的典型用途是用由天空盒(skybox)设置的颜色对像素进行着色。应理解,为最近命中着色器310和未命中着色器312限定的着色器程序可以实现用于对像素进行着色和/或执行其他操作的多种技术。
31.光线生成着色器302生成光线的典型方式是用被称为反向光线跟踪的技术。在反向光线跟踪中,光线生成着色器302生成具有位于与相机对应的点处的原点的光线。光线与被限定为与屏幕对应的平面相交的点限定屏幕上使用光线确定其颜色的像素。如果射线命中对象,则基于最近命中着色器310对所述像素进行着色。如果射线没有命中对象,则基于未命中着色器312对像素进行着色。每个像素可以投射多条光线,其中像素的最终颜色由为像素的每条光线确定的颜色的某种组合(或平均值)确定。任何特定的光线生成着色器302(或任何其他着色器)还可以指定针对光线与三角形之间的任何命中执行任何命中着色器306,即使此类命中不是最近命中。
32.最近命中着色器310和/或未命中着色器312有可能产生它们自己的光线,所述光线在光线测试点处进入光线跟踪流水线300。这些光线可以用于任何目的。一个常见的用途是实现环境照明或反射。在示例中,当调用最近命中着色器310时,最近命中着色器310在各个方向上产生光线。对于由产生的光线命中的每个对象或光,最近命中着色器310在命中位置将照明强度和颜色添加到对应于产生光线的最近命中着色器310的像素。应理解,尽管已经描述了可以使用光线跟踪流水线300的各种部件来渲染场景的方式的一些示例,但是可以替代地使用各种各样的技术中的任一种。
33.应理解,为最近命中着色器阶段310、未命中着色器阶段312或任何命中着色器阶段306编写的任何着色器程序可以实现本文别处描述的由为光线生成阶段302编写的着色器程序执行的任何操作。例如,除了在光线跟踪阶段304产生要提供给光线测试点进行测试的新光线之外,此类着色器程序可以指定是应在未命中还是在命中时产生额外光线以进行
跟踪(再次在光线测试点开始)、为任何此类额外管线执行什么着色器程序、如何组合由此类额外着色器程序执行生成的颜色和/或亮度值,以及可由光线生成着色器302执行的任何其他操作。
34.着色器程序在apd 116上作为“内核”启动。内核指定特定的着色器程序(例如,拼接的着色器程序),以及将作为内核的一部分执行的许多工作项。调度器136将内核分成工作组并将工作组分配给一个或多个计算单元132以供执行。内核的工作组开始执行,执行其指令,然后终止执行。工作组作为计算单元132内的一个或多个波前执行。波前在simd单元138上作为并发执行的多个工作项执行。
35.每个波前包括以单指令多数据(“simd”)方式同时执行的工作项。更具体地,simd单元138以使用单个指令指针来控制多个工作项的程序执行的方式执行着色器程序,因此多个指令可以同时执行。在示例中,波前的四个工作项在simd单元上执行。执行控制流的一部分从以下伪代码所示段开始:
[0036][0037]
表1:示例性simd伪代码
[0038]
第一指令将r2中的值与r3中的值相加,并将结果存储在r1中。第二指令将r1至r5中的值相加,并将结果存储在r4中。第三指令将r4中的值存储到r6中指定的地址。执行此伪代码的波前通道同时执行,以便针对每个通道同时执行多个加法、乘法和存储一次。“r1”到“r6”表示寄存器名称。
[0039]
控制流有可能在simd单元138中的通道之间发散,并因此在波前的工作项之间发散。更具体地,一些指令基于特定变量的值修改指令指针。在示例中,条件分支是其跳转目标基于条件的评估结果的指令。在另一示例中,跳转可能以变量中指定的地址为目标。当控制流以这种方式发散时,simd单元138串行化至少一个通道要执行的可能路径中的每一个。以下示例性伪代码说明了可能导致控制流发散的情况。
[0040][0041]
表2:示例simd发散
[0042]
在表2中,每个通道执行指令add r1,r2,5,其将值5与r2相加,并将结果存入r1。blz指令是一个条件分支,如果r1中的值小于零,则所述条件分支分叉。如果r1中的值大于零,则控制流将落入第1段,其包括一些指令,然后是到“重聚”标签的跳转指令。回到条件分
支,如果r1中的值不大于零,则控制流继续到标签less_than_zero,并执行第2段。在标签“reconverge”处,控制流重聚。
[0043]
如果在所示的第一指令被执行时在波前执行的第一通道具有存储在r2中的值-10,则所述通道的寄存器r1将在所述第一指令之后存储值-5,这将导致第一通道在“less_than_zero”执行第2段。如果在执行第一指令时在同一波前执行的第二通道具有在r2中的值1,则所述通道的寄存器r1将存储值6,这将导致所述通道不分叉并执行第1段。将通过依次执行每个段来完成不同通道对第1段和第2段的执行,其中不执行特定段的通道将关闭。更具体地,发散将导致simd单元138在关闭第一通道的情况下针对第二通道执行第1段,然后在关闭第二通道的情况下针对第一通道执行第2段,这因为可能原本同时执行的多个通道现在被串行化而降低了处理效率。
[0044]
关于表3呈现发散控制流的另一示例。
[0045][0046]
表3:示例simd发散—功能指针
[0047]
在表3的示例中,每个通道执行跟踪光线以检测三角形相交。然后每个通道识别相交三角形的材质,并将已识别材质的材质着色器地址存储在寄存器r1中。然后每个通道跳转到r1中存储的地址。这些地址可以是所示的各种材质着色器(“material_shader_1”、“material_shader_2等)。执行材质着色器之后,通道跳转到“end_material_shaders”。如果每个通道使用不同的材质着色器命中三角形,则这些材质着色器中的每一个都将被串行化,从而导致与波前通道数量相等的减速—这将表示完全去并行化。应注意,材质着色器是用于光线跟踪的代码段,执行所述代码段可为与三角形相交(例如,在最近命中着色器阶段)或未命中三角形并因此由天空盒着色(例如,在未命中阶段)的光线提供颜色。
[0048]
在一些示例中,在simd处理器上,存在分支指令的点是“分支点”。分支点的分支指向一个或多个分支目标。具有固定目标的分支具有单个分支目标,而具有可变目标的分支可能具有多于一个分支目标。还存在重聚点,这些点是由于采取不同的分支路径而发散的
通道必然会重聚的点。在分支目标处开始的指令序列在本文中被称为“所采用路径”。从紧跟在条件分支之后的指令(“未采用点”)开始的指令序列在本文中被称为“未采用路径”。在本文中,所采用路径和未采用路径统称为“代码路径”。每个代码路径从分支目标或未采用点延伸到重聚点或分支点。本质上,每个代码路径定义了指令序列,在这些指令序列中,执行所述代码路径的通道组合不能改变(这种改变会由于分支或重聚而发生)。
[0049]
为了执行包含分支的指令序列,simd处理器评估每个通道的分支指令,并基于结果,为可以从分支到达的每个代码路径设置执行位掩码内的位值。位掩码中的每一位与正在执行的波前的一个通道相关联。位掩码中的一个位值(例如“1”)表示对应通道将执行所述代码路径。位掩码中的另一个位值(例如“0”)表示对应通道将不执行所述代码路径。
[0050]
在为不同代码路径确定位掩码后,simd处理器根据需要推进或修改指令指针,直到至少一个通道要执行的所有代码路径实际上都已被执行。对于位掩码指示没有通道执行代码路径的所述代码路径,simd处理器修改指令指针以跳过所述代码路径。一般而言,根据需要修改指令指针包括将指令指针从至少一个通道执行的一个代码路径的最后一个指令的地址修改为至少一个通道执行的另一代码路径的地址。如果要执行的两个代码路径在存储器中按顺序排列,则这种修改可包括简单地递增指令指针,或者这种修改可能涉及“真分支”,这意味着通过将指令指针设置为要执行的代码路径的第一指令的地址,以不同于简单地递增指令指针的方式修改指令指针。
[0051]
图4示出了根据示例的由发散控制流导致的串行化。表400示出了若干代码段,列为“聚合段”、“f1”、“f2”、“f3”和“f4”。在图中,时间向下推进。给定框中的标记“o”指示通道在给定的时间段执行所述代码段。在聚合段,假设通道1至4中的每一个一起执行所述段。因此,聚合段的每个通道有一个标记“o”。由于聚合段的结果,确定通道1将执行f1而不执行f2、f3或f4,通道2将执行f2而不执行f1、f3或f4,通道3将执行f3而不执行f1、f2或f4,并且通道4将执行f4而不执行f1、f2或f3。可以看出,f1、f2、f3和f4中的每一个在不同的时间段中执行,因此包括通道1到4的波前的执行被去并行化。更具体地,在第一时间段,在通道2至4关闭的情况下,通道1执行功能f1。在第二时间段,在通道1和3至4关闭的情况下,通道2执行功能f2。在第三时间段,在通道1至2和4关闭的情况下,通道3执行功能f3。在第四时间段,在通道1至3关闭的情况下,通道4执行功能f4。
[0052]
为了减少控制流发散,计算单元132在控制流发散点重组执行项。在一些实现方式中,术语“执行项”是指工作项。在其他实现方式中,术语“执行项”是指比工作项更细粒度的执行线程。更具体地,通过顺序执行此类多个逻辑线程,可以在单个工作项中执行多个逻辑执行线程。在此类示例中,多个逻辑执行线程中的每一个都是执行项。用于在发散点重组执行项的两种技术包括计算单元132跨工作组的不同波前重组执行项的技术和计算单元132在波前内重组执行项的技术。
[0053]
图5a示出了根据示例的通过跨工作组的波前重组执行项来减少控制流发散的技术。在此示例中,在工作项与执行项之间存在一一对应的关系——每个工作项执行一个执行项。在图5a的场景中,一个工作组502包括两个波前—波前1 504(1)和波前2 504(2)。工作组502是在单个计算单元132中一起执行的工作项的集合。工作组502的工作项作为波前一起执行。波前包括在simd单元138上同时执行的工作项,例如关于图4所描述。波前的所有工作项可以在simd单元138中同时执行,但是波前也可能包括比simd单元138中的数据通道
数量更多的工作项数量。通常,此类波前将包括等于simd单元138中的数据通道数量的整数倍的工作项数量。此类波前的执行将通过顺序执行波前的工作项的子集而进行。在示例中,波前包括64个工作项并且simd单元138包括16个数据通道。在此示例中,通过执行工作项1至16,然后17至32,然后33至48,然后49至64来执行波前。
[0054]
单个工作组的不同波前不以本文描述的同时simd方式执行,尽管此类波前可以在单个计算单元132的不同simd单元138上同时执行。然而,工作组的一个特征是计算单元132支持不同工作组之间的同步。“同步”是指波前执行屏障的能力,所述屏障停止执行屏障中涉及的所有波前,直到满足某一条件为止。工作组中的波前还具有在执行期间经由计算单元132中的本地存储器进行通信的能力。
[0055]
在图5a中,表500示出工作组502的执行。所示的工作组502包括两个波前504。波前1 504(1)包括工作项1至4,而波前2 504(2)包括工作项5至8。指令指针指示每个波前504在给定时间点执行的代码段。时间从上到下向前推进。表中的某些条目对应于特定工作项可能会或可能不会执行的代码部分。这些部分包括由一个或多个工作项执行的功能f1至f4。聚合部分由波前504的所有工作项执行。“o”标记指示特定工作项执行这些代码部分中的一个,且空白矩形指示特定工作项不执行这些代码部分中的一个。
[0056]
在聚合部分,每个工作项确定所述工作项要执行的功能f1至f4中的哪一个。注意,术语“功能”是指工作组502正在执行的着色器程序的一部分。在聚合部分之后执行屏障和重组阶段。屏障和重组阶段使每个波前504的执行停止,直到对于正在发生重组的每个波前504已经完成屏障和重组阶段。在图5a的示例中,这些波前504包括波前1 504(1)和波前2 504(2)。屏障和重组阶段基于指示工作项将执行功能f1至f4中的哪一个的聚合部分的结果而跨不同波前504重组工作项。通常,重组的目标是通过在波前之间交换工作项来减少波前的发散(在示例中,较高的发散与要执行的较高功能总数相关联)。一般来说,通过减少至少一个波前的控制流目标的数量来实现减少发散。
[0057]
在所示的示例中,波前1 504(1)和波前2 504(2)两者中的工作项执行所有功能f1至f4。这被认为是4倍发散,因为执行那些工作项的计算单元132必须串行化功能f1至f4中的每一个。通过将分支到同一控制流目标的工作项分组在一起,重组减少了在波前执行的功能总数。示例重组导致波前1 504(1)具有指定执行功能f1和f2而不执行f3和f4的工作项,并且波前2 504(2)具有指定执行功能f3和f4而不执行f1和f2的工作项。具体而言,波前1 504(1)包括工作项1、2、5和6,其中每一个都被指定执行f1或f2,而不执行f3或f4,并且波前2 504(2)包括工作项3、4、7和8,其中每一个都被指定执行f3或f4,而不执行f1或f2。通过这种重组,每个波前504只有两倍发散。应注意,由每个波前504执行的代码仍然包括不由特定工作项执行的功能,但是此代码被跳过,导致对于具有不执行那些功能的工作项的波前504,很少或没有执行时间专用于那些功能。
[0058]
尽管示出了特定示例性指令序列,其中此特定序列包括确定要为每个工作项执行的功能,并且由工作项执行所述功能,但是应理解,关于图5a描述的技术可以应用于导致发散控制流的任何指令序列。在任何情况下,屏障和重组阶段将检查工作组502中的发散控制流目标的总数量,并尝试将尽可能少的发散控制流目标分配给每个波前504。控制流目标可以通过分支指令所针对的指令指针地址、通过是否采用条件分支的决定、或通过任何其他技术上可行的方式来识别。可以通过基于目标对波前进行排序、将排序列表按每个波前504
中的工作项的数量划分并将划分的工作项分配到不同的波前504来实现将尽可能少的发散控制流目标分配给每个波前504。通过任何技术上可行的方式,例如通过修改分配给每个波前504的工作项列表,以及通过将例如寄存器值、标志值等执行状态数据从工作项先前执行的位置复制到工作项将被移动到的位置,可以完成将工作项从一个波前504移动到另一个波前。
[0059]
屏障和重组阶段可以例如通过由运行时或离线编译器插入的指令完全在软件中实现,或者可以通过特殊的硬件支持来实现。在示例中,可以通过由工作组502的每个波前504执行特殊指令触发的固定功能硬件来实现按目的地排序和按执行项的重组排序中的任一个或两个。
[0060]
图5b示出了在没有图5a所示的重组的情况下会发生的执行。如上所述,每个波前502包括执行功能f1至f4的工作项。因此,在没有重组的情况下这些功能的执行是4倍发散的,因为每个功能都依次执行。
[0061]
图6a示出了根据示例的通过在波前内重组执行项来减少控制流发散的技术。在所示的示例中,每个工作项执行两个执行项。更具体地,由波前执行的着色器程序被配置为使得特定工作负载的两个实例—两个执行项—按顺序执行。作为特定工作项的一部分执行的每个执行项在特定时隙中执行。应注意,多个不同的工作项当然可以同时执行。因此,多个工作项可以同时执行其时隙1,然后同时执行其时隙2。在光线跟踪的示例中,每个时隙可以对应于不同光线。在示例中,着色器程序确定光线相交的三角形。着色器程序基于相交三角形的材质执行材质着色器。工作项的每个时隙对应于不同光线,因此可以在单个工作项的不同时隙中执行不同的材质着色器。
[0062]
两个执行项的顺序性能允许在时隙之间进行交换以减少发散。图6a中的示例示出此类交换。在示例中,波前602的四个通道各自执行两个执行项。通道1执行执行项1和2,通道2执行执行项3和4,通道3执行执行项5和6,并且通道4执行执行项7和8。通道执行聚合部分以识别每个执行项应执行功能f1、f2、f3和f4中的哪一个。虽然未示出,但可以针对每个执行项执行一次聚合部分。
[0063]
示出聚合部分的结果:执行项1将执行功能f1,执行项2将执行功能f2,执行项3将执行功能f2,执行项4将执行功能f3,执行项5将执行功能f1,执行项6将执行功能f4,执行项7将执行功能f3,执行项8将执行功能f4。在时隙1中将总共执行三个功能,且在时隙2中将总共执行三个功能。这意味着在每个时隙中,发散因子将为3。在重组阶段,计算单元132在不同的通道之间重组执行项以减少发散。具体地,重组阶段按执行项的目标对执行项进行排序,对排序后的执行项进行划分,并将划分后的所排序执行项分配给时隙。在所示的示例中,排序目标为f1(项1)、f1(项5)、f2(项2)、f2(项3)、f3(项4)、f3(项7)、f4(项6)和f4(项8)。重组阶段将执行功能f1和f3的执行项分配给时隙一,并将执行功能f2和f4的执行项分配给时隙二。时隙一执行,然后时隙二执行,其各自有两个功能—发散因子为2。具体地,功能f1至f4将按顺序执行,如图所示。此序列发生两次—每个时隙一次。在时隙一中,项1和5同时执行功能f1,且项4和7同时执行功能f3。在时隙一中,跳过功能f2和f4,因为没有通道执行这些功能。在时隙二中,项2和3同时执行f2,且项6和8同时执行功能f4,其中功能f1和f3被跳过。
[0064]
尽管示出了特定的示例性指令序列,但通常如下执行波前内技术。编译器生成具
有两个或更多时隙的着色器程序,每个时隙是要为不同执行项执行的特定工作负载的副本。在控制流发散的点,编译器插入重组代码以跨时隙重组执行项。重组代码按控制流目的地将执行项分类为执行项组。重组代码尝试为每个时隙分配尽可能少的组。这种重组减少了至少一个时隙中的发散,从而减少了总执行时间。
[0065]
重组阶段可以通过软件(例如,通过由运行时或离线编译器插入着色器程序的指令)或通过至少部分硬件支持来实现。在示例中,着色器程序执行特殊指令,所述指令使固定功能硬件如所描述的那样跨时隙重组执行项。
[0066]
应注意,虽然时隙中的功能显示为在每个时隙中顺序执行,但每个功能可能会针对每个时隙重复执行。在时隙中,时隙1执行功能1,然后时隙2执行功能1,然后时隙1执行功能2,时隙2执行功能2,以此类推。本文的教示适用于执行发散控制流的特定段的多次迭代的任何技术。在各种示例中,运行时或离线编译器转换着色器程序,从而如所描述的那样执行发散控制流的各段的多次迭代。
[0067]
图6b示出了在没有图6a的重组的情况下会发生的执行。具体地,因为在每个时隙中存在执行三个不同功能的通道,所以每个时隙以3倍的发散执行,这与图6a中发生的执行相比减速。
[0068]
图7是根据示例的用于在apd 116中重组执行项的方法700的流程图。虽然关于图1到图6的系统进行了描述,但是应理解,被配置成以任何技术上可行的顺序执行方法700的步骤的任何系统都落入本公开的范围内。
[0069]
方法700开始于步骤702,其中计算单元132在发散控制流的点处识别不同执行项的控制流目标。如本文别处所述,公开了用于重组执行项的两种技术。在第一种技术中,在单个波前内的时隙之间重组执行项。此第一种技术在本文中可以被称为“波前内技术”。在第二种技术中,跨波组的波前重组执行项。此第二种技术在本文中可以被称为“波前间技术”。在任一技术中,正在执行的着色器程序到达发散控制流的点,所述点是不同执行项由于具有不同的分支目标(例如,由于不同的条件结果或由于可变目标跳转指令的不同地址目标)而执行着色器程序的不同部分的点。在步骤702,针对不同执行项识别这些不同分支目标。在一些示例中,特定执行项的分支目标包括所述执行项的目的地的地址。在其他示例中,分支目标包括是否采用条件分支的指示(即,是否满足条件)。
[0070]
在示例中,每个执行项执行跟踪光线操作以识别与光线相交的三角形的材质。此时,不同的执行项遇到了具有不同材质的不同三角形,从而执行不同的材质着色器。应注意,不同的材质着色器被内联到正在执行的着色器程序中,因此执行特定材质着色器是通过跳转到适当的内联功能来完成的,而不是通过停止执行当前着色器并启动材质着色器来完成的。换句话说,光线跟踪流水线的至少一部分由单个“单体”着色器程序实现,所述着色器程序包括光线跟踪流水线的不同阶段的着色器,以及用于控制不同阶段之间的执行流和用于在不同阶段之间移动数据的指令。
[0071]
在步骤704,计算单元132基于控制流目标对执行项进行排序。在发散基于向可变目标的跳转的示例中,控制流目标是跳转的目标。在发散基于条件分支的示例中,控制流目标是条件的结果。基于控制流目标的排序包括对执行项进行排序,使得具有相同控制流目标的执行项被分组在一起。排序的结果是指示执行项的排序次序的数据。在示例中,执行项1到8存在并执行条件分支。执行项1、3、4、7采用分支且执行项2、5、6、8不采用分支。指示排
序后的次序的数据指示执行项1、3、4和7在第一组中,且执行项2、5、6和8在第二组中。
[0072]
在步骤706,计算单元132基于排序操作重组执行项。在跨时隙重组执行项的波长内技术中,重组执行项包括将每组排序后的执行项分配给特定时隙。在以上示例中,执行项1、3、4和7将分配给第一时隙,且执行项2、5、6和8将分配给第二时隙。如本文别处所述,时隙是着色器程序的顺序重复部分的迭代。更具体地,为了能够重组波前内的执行项,着色器程序的至少一些部分被配置为以两个或两个或更多个迭代执行,其中每个迭代对应于不同的时隙。由于发散与在特定时间执行的不同代码段的数量有关,因此具有多个时隙允许在时隙之间重组执行项,以便在同一时隙中执行具有相同控制流目标的更多执行项。当然,每个排序后的组中的执行项数量可能与波前中的执行项数量不同。然而,即使在将两个或更多个组分配给特定时隙的这种情形下,排序也会减少发散,从而减少总执行时间。
[0073]
在一些实现方式中,编译器将时隙构造引入着色器程序中。编译器的一个示例是例如作为驱动程序122的一部分执行的运行时编译器。编译器的另一个示例是作为应用编译器的一部分执行的离线编译器,所述应用编译器编译触发着色器程序的执行的应用。编译器通过使着色器程序的至少一部分执行两次或更多次迭代—每个时隙一次迭代—来引入时隙构造。在每次迭代中,不同的执行项执行着色器程序的一部分。此外,由于时隙的目的是允许减少由不同执行项采用不同控制流路径导致的控制流发散,因此每次迭代都能够选择任何可能的发散路径(即使每个执行项可能只采用一个此类路径)。在示例中,如果有四个不同的代码段可以在着色器程序的给定部分中执行,其中变量跳转针对其中一个可能的代码段,则在每个时隙中,执行项可以执行任何可能的代码段。发散控制流仍然可以在给定的时隙内发生,并且这通过将不同的可能控制流路径中的每一个串行化的simd单元138来实现,这对于发散控制流来说是常见的。
[0074]
在波前间技术中,执行项的重组跨波前发生。更具体地,上述排序数据仍用于对执行项进行分组。然而,不是在单个波前中跨时隙重组执行项,而是将组一起分配给特定波前。在每个波前的宽度为四个工作项的以上示例中,执行项1、3、4和7将被分配给第一波前,且执行项2、5、6和8将被分配给第二波前。与波前内技术一样,可以为每个波前分配多个组,但仍然会减少发散。在步骤708,着色器程序在经过发散控制流的点后以重组的执行项来执行。
[0075]
应理解,基于本文的公开内容,许多变型是可能的。虽然上面以特定的组合描述了特征和要素,但是每个特征或要素能够单独使用而无需其他特征和要素,或者以具有或不具有其他特征和要素的各种组合使用。在一个示例中,虽然已经在simd处理器的上下文中描述了这些技术,但是这些技术也可以用于多指令多数据(“mimd”)处理器。在另一个示例中,虽然排序被陈述为基于要执行的代码段来完成,但也可以替代地基于其他标准进行排序,例如基于通道要获取的纹理或与通道相关联的光线的方向。基于此类标准的排序与基于通道将执行哪些代码段的排序没有直接关系。然而,这种排序更有可能导致具有相似执行流的通道被组合在一起。在示例中,具有相似光线方向的通道很可能会命中相同的三角形并因此执行相同的材质着色器。获取相同纹理的通道也有可能执行类似的指令序列,因为获取相同纹理可能指示通道执行相同的着色器(例如,材质着色器)。
[0076]
图中所示和/或本文描述的各种功能单元(包括但不限于处理器102、输入驱动器112、输入装置108、输出驱动器114、输出装置110、加速处理装置116、调度器136、图形处理
流水线134、计算单元132、simd单元138、光线跟踪流水线300、光线生成着色器302、光线跟踪阶段304、任何命中着色器306、未命中着色器312、或最近命中着色器310)可以实现为通用计算机、处理器或处理器核心,或者实现为存储在非暂时性计算机可读介质或其他介质中且可由通用计算机、处理器或处理器核心执行的程序、软件或固件。所提供的方法可在通用计算机、处理器或处理器核心中实现。举例来说,合适的处理器包括通用处理器、专用处理器、常规处理器、数字信号处理器(dsp)、多个微处理器、与dsp核相关联的一个或多个微处理器、控制器、微控制器、专用集成电路(asic)、现场可编程门阵列(fpga)电路、任何其他类型的集成电路(ic)和/或状态机。能够通过以下方式制造这种处理器:使用处理后的硬件描述语言(hdl)指令的结果和其他中间数据(包括网表)(这种指令能够存储在计算机可读介质上)来配置制造过程。此类处理的结果可以是掩模作品,然后在半导体制造过程中使用所述掩模作品来制造实现实施方案的各方面的处理器。
[0077]
本文提供的方法或流程图能够在并入非暂时性计算机可读存储介质的计算机程序、软件或固件中实现,以便由通用计算机或处理器执行。非暂时性计算机可读存储介质的示例包括只读存储器(rom)、随机存取存储器(ram)、寄存器、高速缓存存储器、半导体存储器装置、磁性介质(例如内部硬盘和可移除磁盘)、磁光介质,以及光学介质(例如cd-rom盘和数字多功能盘(dvd))。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献