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

用于工作负载处理的任务图生成的制作方法

2023-02-02 04:36:47 来源:中国专利 TAG:

用于工作负载处理的任务图生成
1.相关申请的交叉引用
2.本技术要求2020年5月29日提交的美国非临时专利申请号16/888,521的权益,该专利申请以引用方式并入,如同在本文完整阐述一样。


背景技术:

3.三维(“3d”)图形处理管线执行一系列步骤以将输入几何形状转换成二维(“2d”)图像以用于在屏幕上显示。在一些示例中,这些步骤被指定为由主机(诸如运行应用程序的中央处理单元)执行的命令。许多渲染工作负载需要大命令序列,并且因此生成和处理这些序列是复杂任务。
附图说明
4.可以从以下描述中获得更详细的理解,通过示例结合附图给出,其中:
5.图1是可实现本公开的一个或多个特征的示例设备的框图;
6.图2示出了根据一个示例的图1的设备的细节;
7.图3是展示了图2所示的图形处理管线的另外细节的框图;
8.图4a至图4c示出了用于生成任务图并且在处理设备(诸如图2的加速处理设备)上调度工作负载的任务图指定处理器402和命令调度器404的配置;
9.图5示出了示例性任务图;
10.图6a至图6b示出了根据示例性技术的从任务图指定程序生成任务图;
11.图7a和图7b示出了根据另一个示例性技术的从任务图指定程序生成任务图;
12.图8a和图8b示出了根据任务图的在处理设备上调度任务;
13.图9是用于从任务图指定程序生成任务图的方法的流程图;并且
14.图10是用于根据任务图在处理设备上调度任务的方法的流程图。
具体实施方式
15.本发明提供了用于基于任务图指定程序来生成用于工作负载调度的任务图的技术。该技术包括:执行该任务图指定程序的控制流指令以遍历该任务图指定程序;基于该任务图指定程序的通道指令来生成该任务图的通道节点;基于该任务图指定程序的资源声明来生成资源节点和有向边缘;以及将该任务图指定程序输出到命令调度器以用于调度。
16.图1是可实现本公开的一个或多个特征的示例设备100的框图。设备100可以是例如计算机、游戏设备、手持设备、机顶盒、电视、移动电话、平板计算机或其他计算设备中的一者但不限于这些项。设备100包括处理器102、存储器104、存储装置106、一个或多个输入设备108以及一个或多个输出设备110。设备100还包括一个或多个输入驱动器112和一个或多个输出驱动器114。输入驱动器112中的任一者具体体现为硬件、硬件与软件的组合或软件,并且用于控制输入设备112的目的(例如,控制操作、从输入驱动器112接收输入以及向输入驱动器提供数据)。类似地,输出驱动器114中的任一者具体体现为硬件、硬件与软件的
组合或软件,并且用于控制输出设备114的目的(例如,控制操作、从输出驱动器114接收输入以及向输出驱动器提供数据)。应当理解,设备100可包括图1中未示出的另外部件。
17.在各种另选方案中,处理器102包括中央处理单元(cpu)、图形处理单元(gpu)、位于同一管芯上的cpu和gpu、或一个或多个处理器核心,其中每个处理器核心可为cpu或gpu。在各种另选方案中,存储器104位于与处理器102相同的管芯上,或与处理器102分开定位。存储器104包括易失性或非易失性存储器,例如随机存取存储器(ram)、动态ram或高速缓存。
18.存储器106包括固定或可移动存储器,例如但不限于硬盘驱动器、固态驱动器、光盘或闪存驱动器。输入设备108包括但不限于键盘、小键盘、触摸屏、触摸板、检测器、麦克风、加速度计、陀螺仪、生物扫描仪或网络连接(例如,用于发射和/或接收无线ieee 802信号的无线局域网卡)。输出设备110包括但不限于显示器、扬声器、打印机、触觉反馈设备、一个或多个灯、天线或网络连接(例如,用于发射和/或接收无线ieee802信号的无线局域网卡)。
19.输入驱动器112和输出驱动器114包括被配置为分别与输入设备108和输出设备110交接并驱动它们的一个或多个硬件、软件和/或固件部件。输入驱动器112与处理器102和输入设备108通信,并允许处理器102从输入设备108接收输入。输出驱动器114与处理器102和输出设备110通信,并允许处理器102向输出设备110发送输出。输出驱动器114包括耦接到显示设备118的加速处理设备(“apd”)116,在一些示例中,显示设备是使用远程显示协议来显示输出的物理显示设备或模拟设备。apd 116被配置为从处理器102接收计算命令和图形渲染命令,处理那些计算和图形渲染命令,并将像素输出提供给显示设备118用于显示。如下文所详述,apd 116包括被配置为根据单指令多数据(“simd”)范式来执行计算的一个或多个并行处理单元。因此,尽管这里将各种功能描述为由apd 116执行或与其结合执行,但在各种另选方案中,被描述为由apd 116执行的功能另外地或另选地由具有类似能力的其他计算设备执行,该其他计算设备不由主机处理器(例如,处理器102)驱动并且被配置为向显示设备118提供图形输出。例如,可以设想根据simd范式执行处理任务的任何处理系统都可被配置为执行本文所述的功能。另选地,可以设想不根据simd范式执行处理任务的计算系统执行本文所述的功能。
20.图2示出了根据一个示例的设备100和apd 116的细节。处理器102(图1)执行操作系统120、驱动器122和应用程序126,并且还可另选地或另外地执行其他软件。操作系统120控制设备100的各个方面,诸如管理硬件资源、处理服务请求、调度并控制进程执行以及执行其他操作。apd驱动器122控制apd 116的操作,向apd 116发送诸如图形渲染任务的任务或其他作业以进行处理。apd驱动器122还包括即时编译器,该即时编译器编译程序以供apd 116的处理部件(诸如下文所详述的simd单元138)执行。
21.apd 116执行用于所选功能的命令和程序,诸如可适于并行处理的图形操作和非图形操作。apd 116可用于执行图形流水线操作,诸如像素操作、几何计算和基于从处理器102接收的命令将图像呈现给显示设备118。apd 116还基于从处理器102接收的命令来执行与图形操作不直接相关的计算处理操作,诸如与视频、物理模拟、计算流体动力学或其他任务相关的操作。
22.apd 116包括计算单元132,该计算单元包括被配置为根据simd范式以并行方式在
处理器102(另一单元)的请求下执行操作的一个或多个simd单元138。simd范式是这样一种范式,其中多个处理元件共用单个程序控制流单元和程序计数器并由此执行相同的程序,但能够执行具有不同数据的该程序。在一个示例中,每个simd单元138包括十六个通道,其中每个通道与simd单元138中的其他通道同时执行相同的指令,但可执行具有不同数据的该指令。如果不是所有通道都需要执行给定指令,则可通过预测来关闭通道。还可使用预测来执行具有发散控制流的程序。更具体地,对于具有条件分支或其中控制流基于由单个通道执行的计算的其他指令的程序,预测对应于当前未被执行的控制流路径的通道,并且不同控制流路径的串行执行可实现任意控制流。
23.计算单元132中的基本执行单元是工作项。每个工作项表示要在特定通道中并行执行的程序的单个实例。可在单个simd处理单元138上作为“波前”同时(或部分同时并且部分顺序)执行工作项。一个或多个波前包括在一个“工作组”中,该“工作组”包括被指定执行相同程序的工作项的集合。可通过执行构成工作组的波前中的每一者来执行工作组。在另选方案中,波前在单个simd单元138上执行,或在不同simd单元138上执行。波前可被视为可在单个simd单元138上同时(或伪同时)执行的工作项的最大集合。“伪同时”执行发生在波前大于simd单元138中的通道数的情况下。在这种情况下,波前在多个周期中执行,工作项的不同集合在不同周期中执行。apd调度器136被配置为执行涉及调度计算单元132和simd单元138上的各种工作组和波前的操作。
24.由计算单元132提供的并行性适合图形相关操作,诸如像素值计算、顶点变换和其他图形操作。因此,在一些实例中,接受来自处理器102的图形处理命令的图形流水线134将计算任务提供给计算单元132以供并行执行。
25.计算单元132还用于执行不涉及图形或不作为图形流水线134的“正常”操作(例如,所执行的用以补充针对图形流水线134的操作执行的处理的自定义操作)的一部分而执行的计算任务。在处理器102上执行的应用程序126或其他软件将定义此类计算任务的程序发送到apd 116以供执行。
26.图3是展示了图2所示的图形处理管线134的另外细节的框图。图形处理管线134包括各自执行图形处理管线134的特定功能的阶段。每一阶段部分或全部实现为在可编程计算单元132中执行的着色器程序,或部分或全部实现为处于计算单元132外部且功能固定的不可编程硬件。
27.输入汇编器阶段302从用户填写型缓存(例如,在处理器102所执行的软件(诸如应用程序126)的请求下所填写的缓存)中读取图元数据,并且将该数据汇编成图元以供管线的其余部分使用。基于包括在用户填写型缓存中的图元数据,输入汇编器阶段302可以生成不同类型的图元。输入汇编器阶段302格式化所汇编的图元以供管线的其余部分使用。
28.顶点着色器阶段304处理由输入汇编器阶段302汇编的图元的顶点。顶点着色器阶段304执行各种逐顶点操作,诸如变换、去皮、变形和逐顶点光照。变换操作包括变换顶点坐标的各种操作。这些操作包括以下中的一者或多者:建模变换、观察变换、投影变换、透视除法和视区变换,其修改顶点坐标,以及修改非坐标属性的其他操作。
29.顶点着色器阶段304部分或完全实现为将在一个或多个计算单元132上执行的顶点着色器程序。顶点着色器程序由处理器102提供并且基于计算机程序员所预写的程序。驱动器122编译此类计算机程序以生成顶点着色器程序,该顶点着色器程序具有适合于在计
算单元132内执行的格式。
30.外壳着色器阶段306、曲面细分器阶段308和域着色器阶段310一起工作以实现曲面细分,其通过细分图元而将简单图元转换成更复杂图元。基于输入图元,外壳着色器阶段306生成修补程式以供曲面细分。曲面细分器阶段308为修补程式生成一组样本。域着色器阶段310计算与修补程式的样本对应的顶点的顶点位置。外壳着色器阶段306和域着色器阶段310可被实现为将在计算单元132上执行的着色器程序,该计算单元由驱动器122编译(如通过顶点着色器阶段304)。
31.几何着色器阶段312逐个图元执行顶点操作。可以由几何着色器阶段312执行各种不同类型的操作,包括诸如以下操作:点精灵扩展、动态粒子系统操作、毛皮-鳍生成、阴影体积生成、单通道渲染到立方图、逐图元材料交换和逐图元材料设置。在一些实例中,由驱动器122编译并且在计算单元132上执行的几何着色器程序执行几何着色器阶段312的操作。
32.光栅化器阶段314接受光栅化器阶段314的上游生成的简单图元(三角形)并将其光栅化。光栅化由确定哪些屏幕像素(或子像素样本)被特定图元覆盖组成。光栅化由固定功能硬件来执行。
33.基于上游生成的图元和光栅化的结果,像素着色器阶段316计算屏幕像素的输出值。像素着色器阶段316可应用来自纹理存储器中的纹理。像素着色器阶段316的操作由像素着色器程序执行,该像素着色器程序由驱动器122编译并且在计算单元132上执行。
34.输出合并器阶段318接受来自像素着色器阶段316的输出并且将这些输出合并到帧缓存中,从而执行诸如z测试和α混合等操作,以确定屏幕像素的最终颜色。
35.通常,apd 116上的处理工作负载涉及执行多个“通道”。“通道”是接受一些输入(例如,从另一个通道或作为整个处理工作负载的输入)、处理输入并且生成输出的处理单元。一些输出包括到其他通道的输出,并且其他输出包括处理工作负载的最终输出,诸如要在屏幕上显示的图像。因此,通道的特定顺序、那些通道使用的输入和那些通道生成的输出指定整个处理工作负载。
36.通道的一个示例是通过以特定方式(例如,启用或禁用特定阶段,通过具有特定的选定着色器程序以用于执行的特定可编程阶段)配置的图形处理管线134处理数据。通过图形处理管线134的任何特定通道的输入或输出可基于图形处理管线134的指定操作来配置。示例性图形处理通道包括将网格绘制到渲染目标集和深度缓存的几何通道,以及通过顶点和像素着色器程序绘制屏幕空间四极的后处理通道。通道的另一个示例是执行特定计算着色器程序的计算工作负载。计算着色器程序是在计算单元132上执行但不作为图形处理管线134的一部分的着色器程序。计算工作负载是针对特定输入数据集执行计算着色器程序以生成特定输出数据集。
37.可以“手动”指定处理工作负载的通道的每个单独命令。更具体地,应用程序126(或其他实体诸如驱动器122)可向驱动器122和/或加速处理设备116发出命令以便以专门方式执行通道。然而,本公开提出了用于指定多通处理工作负载的更自动化方式的技术。
38.具体地,本公开提出了用于编程地指定处理工作负载作为任务组的技术。图4a示出了图2的apd调度器136,该apd调度器被配置为执行任务图指定程序以生成任务图并且基于所生成的任务图来调度用于在apd116上执行的操作。
39.apd调度器136包括任务图指定处理器402和命令调度器404。任务图指定处理器402接受任务图指定程序作为输入。任务图指定程序编程地指定如何生成描述处理工作负载的任务图。处理工作负载包括如本文将进一步描述(例如,相对于图5)的任务和资源的图。任务图指定处理器402执行任务图指定程序,该任务图指定程序在被执行时生成将处理工作负载指定为任务图的任务图。
40.命令调度器404接受任务图作为输入,执行操作的调度以执行由任务图指定的处理工作负载,并且引导apd 116执行那些操作。在一些具体实施中,命令调度器404接受apd反馈信息并且使用该反馈信息来调度apd116上的操作。apd反馈信息包括关于apd 116的状态的各种信息,诸如性能度量、占用度量、资源利用和其他类型的信息。关于apd 116的状态的一些示例性信息项包括当工作进入图形处理管线134以及由其完成时的时间戳、simd单元138的硬件性能计数器、各种硬件单元忙碌的时间百分比和存储器带宽利用率。命令调度器404利用时间戳来评估任务调度的总体有效性。此外,时间戳指示通道502的总持续时间。因此,在一些具体实施中,命令调度器404在调度时优先化较长通道。硬件块利用计数器用于帮助在不同硬件块处遇到瓶颈的组通道以一起实现较好的总利用率。在一些示例中,命令调度器404是apd 116的一部分,并且能够直接从apd的其他部件获得此类性能度量而无需由处理器102、应用程序、驱动器或操作系统进行干预。
41.在图4a的示例中,任务图指定处理器402和命令调度器404中的任一者或两者被实现为在处理器上执行的软件、被配置成执行本文描述的操作的硬件电路、或其组合。尽管被描述为两个单独单元,但在一些具体实施中,任务图指定处理器402和命令调度器404是相同单元。图4a示出了其中任务图指定处理器402和命令调度器404在apd 116内的示例。图4b示出了其中任务图指定处理器402是在处理器102上执行的软件,并且如相对于图4a所述,命令调度器404在apd 116内实现的示例。图4c示出了任务图指定处理器402和命令调度器404是在处理器102上执行的程序的示例。
42.尽管命令调度器404被描述为输出用于在apd 116上执行的命令,但应当理解,可应用本文描述的技术以生成用于在除apd 116之外的处理器(诸如中央处理单元(例如,处理器102)或另一个单元)上执行的命令。
43.图5示出了示例性任务图500。任务图500将处理工作负载指定为通道502和缓存504的有向无环图。如上所述,通道502包括特定工作单元,诸如通过以特定方式配置的图形处理管线134处理某些数据,或计算着色器程序。缓存504包括用作通道502的输入和/或用作通道502的输出的数据。缓存504可以是一个通道502的输入以及到另一个通道的输出,或可以是整个处理工作负载(其对应于单个任务图)的输入或输出。缓存的一些示例包括由特定通道502通道图形处理管线134产生的图像、由计算着色器程序生成的数据、或除了由通道502生成通过图形处理管线134生成的图像之外的数据。
44.任务图500包括通道502和缓存504之间的箭头。从缓存504到通道502的箭头意味着通道502接受该缓存504中的数据作为输入。从通道502到缓存504的箭头意味着通道502产生缓存504中的数据作为输出。因此,任务图500指定通道502之间的依赖性。更具体地,接受由另一个通道502生成的缓存504作为输入的通道502必须等待执行,直到已经实际生成缓存504。因此,接受缓存504作为输入的通道502取决于产生那些缓存504作为输出的其他通道502。如果第三通道502取决于第二通道502并且第一通道502取决于第三通道502,则第
一通道502也被认为取决于第二通道502。换句话说,依赖性通过任务图500的箭头传播。如果一者不取决于另一者,则两个通道502是独立的。
45.如上所述,任务图指定程序是指定如何构建任务图500的程序。因此,任务图指定程序指示将进行哪些通道502以及哪些缓存504是通道502的输入和输出。在做出关于是否要在任务图500中包括某些通道502和/或缓存504以及通道502如何消耗和/或产生缓存504的决策时,任务图指定程序能够考虑运行时数据,诸如用户定义的运行时数据、由apd 116生成的数据或其他数据。因此,任务图指定程序不只是由任务图指定处理器402评估的任务图500的静态描述。相反,任务图指定程序能够基于运行时参数可变地构建任务图500。
46.图6a和图6b示出了一个示例性任务图指定程序格式,并且图7a和图7b示出了另选任务图指定程序格式。在图6a中,任务图指定程序包括通道定义605、通道调取606和程序控制流指令604。通道定义605定义在apd 116上执行通道所涉及的操作和方式。通道调取606表示使任务图指定处理器402生成输出的任务图500的通道502的指令。控制流指令604是用于控制何时和如何进行通道调取606的指令。如上文所描述,任务图指定处理器402执行控制流指令604和通道调取606以构建任务图500,该任务图用于命令调度器404进行的调度和apd 116进行的执行。
47.在一些具体实施中,通道定义605包括资源导入/导出指令608、状态指令610和通道命令612。在一些具体实施中,通道定义605省略状态指令610。资源导入/导出指令608指定当在apd 116上执行时由通道定义605导入(读取)和/或导出(写入)的一个或多个资源。术语“资源”具有与术语“缓存”(即,图5的缓存504)相同的含义。在一些具体实施中,状态指令610指示以下中的一者或两者:在apd 116上执行通道时哪些着色器将用于通道的图形或计算操作的,或者在apd 116上执行通道时哪些图形管线状态将用于通道,但也可考虑其他状态。通道命令612是针对通道606执行的实际工作。通道命令612从一个或多个导入资源输入,处理该一个或多个导入资源,并且输出到一个或多个导出资源。在一些具体实施中,通道命令612包括命令,诸如绘制命令(绘制几何形状,例如通过特定配置的图形处理管线134发送几何形状)、调度命令(调度通用计算工作负载以用于执行)、复制命令(将存储器的一个或多个部分复制到一个或多个其他位置)、清除命令(清除存储器的一个或多个部分)、资源布局转变(修改一个或多个资源的布局)、高速缓存动作(例如,刷新或预取高速缓存数据)、同步操作(诸如apd 116硬件或事件之间的同步;例如,绘制命令和调度命令可能为了存储器带宽竞争,尽管这些项目可在逻辑上并行地运行,但编程器有时插入用于迫使一者在另一者已经完成之后才启动的显式同步命令)或可由apd 116执行的其他命令。对于高速缓存动作和同步操作,命令调度器404能够并且有时自动生成此类动作/操作。然而,编程器还可显式地指定这些动作。
48.控制流指令604在由任务图指定处理器402执行期间控制任务图指定程序600的程序流。控制流指令604包括诸如条件语句(例如,如果语句)、循环等的控制流指令。控制流指令604允许任务图指定程序600在运行时基于运行时参数建立任务图500。循环允许从单通道定义605生成多个通道502,每一者具有可能不同的参数(导入/导出数据和着色器/管线配置)。条件能够指定特定节点定义605是否实际上被实例化为节点。
49.在一些情况下,通道调取606指定资源导入/导出指令608或状态指令610中的一者或多者的参数。在此类情况下,参数指定以下中的一者或多者:何种状态(例如,着色器程
序、图形处理管线134配置)将用于由于通道调取606而生成的特定通道、将导入到由于通道调取606而生成的通道的一个或多个资源、或者用于从由于通道调取606而生成的通道导出的一个或多个资源。此外,在一些情况下,参数被指定为变量,这意味着参数的值是在运行时决定的(例如,基于可用于任务图指定程序600的数据和/或由于来自控制流指令604执行的特定结果)。总而言之,参数并且因此状态、导入数据和导出数据是可在运行时(也就是说,运行任务图指定程序600的时间,这意味着写入任务图指定程序600的编程器不需要对此类信息进行硬码)指定的元素。
50.图6b示出了基于图6a中描述的格式的任务图指定程序600生成的示例性任务图650。现在提供以代码示出的示例性任务图指定程序:
[0051][0052][0053]
表1:示例性任务图指定程序
[0054]
上述任务图指定程序指定两个通道定义:一个针对passa,其调用draw1(),并且一个针对通道passb,其调用draw2()和draw3()。通道调取将图上的passa实例化为输入资源r1和输出资源r2。基于某些条件,通道调取实例化passb的零个、一个或两个实例,从而输入资源r2和输出r3。应当注意,draw3()使用由draw2()在内部生成的数据,但由于数据完全在passb内生成和消耗,该数据不被指定为资源。
[0055]
图6b示出了从表1的任务图指定的两个不同执行生成的两个不同任务图650。在第一任务图650(1)中,条件a和条件b均为真。因此,所生成的图包括从资源1 654(1)读取并输出到资源2 654(2)的passa 652(1),并且从资源2 654(2)读取并输出到资源3 654(3)的passb 652(2)的两个实例退出。对于任务图650(2),仅条件a为真。因此,仅生成passb 652(2)的一个实例。
[0056]
图7a和图7b示出了根据另一个格式的任务图指定程序700,以及由于任务图指定处理器402执行任务图指定程序700而生成的任务图750。
[0057]
任务图指定程序700包括控制流指令702、资源导入/导出指令704、状态指令706和通道命令708。通道命令708是可由apd 116执行的单独命令。一些示例性通道命令708包括资源导入/导出指令704绘制命令(绘制几何形状,例如通过特定配置的图形处理管线134发送几何形状)、调度命令(调度通用计算工作负载以用于执行)、复制命令(将存储器的一个或多个部分复制到一个或多个其他位置)、清除命令(清除存储器的一个或多个部分)、资源布局转变(修改一个或多个资源的布局)、高速缓存动作(例如,刷新或预取高速缓存数据)、同步操作(诸如apd 116硬件或事件之间的同步;例如,绘制命令和调度命令可能为了存储器带宽竞争,尽管这些项目可在逻辑上并行地运行,但编程器有时插入用于迫使一者在另一者已经完成之后才启动的显式同步命令)或可由apd 116执行的其他命令。对于高速缓存动作和同步操作,命令调度器404能够并且有时自动生成此类动作/操作。然而,编程器还可显式地指定这些动作。
[0058]
资源导入/导出命令704指定由通道命令708读取和/或写入的资源。状态指令706是定义和/或修改apd 116的状态(诸如图形处理管线134状态、哪些着色器程序用于图形处理管线134或计算着色器调度、或其他状态)的指令。当任务图指定处理器402执行任务图指定程序700时,控制流指令702控制程序流。
[0059]
在执行期间,任务图指定处理器402遍历任务图指定程序700以识别通道块710,任务图指定程序700从其生成对应任务图的通道502。在一些示例中,通道块710是任务图指定程序700的一部分,其包括一个(或指定数量)的通道命令并且以通道命令终止,并且不包括用于由任务图指定处理器402执行的控制流指令。在其他示例中,通道块710包括不同固定数量的通道命令708,或可变数量的通道命令708。在一些示例中,通道块710不需要以通道命令708终止。在一些示例中,任务图指定处理器402识别任务图指定程序700的部分,该部分包括至少一个通道命令708并且以通道命令708终止并且基于通道命令708的位置将每个这样的部分划分成通道块710。更具体地,从部分中,任务图指定程序700根据指定数量的通道命令708生成一个通道块710。在一些示例中,每个此类通道块710包括从先前通道块710到通道块710中的最后通道命令708的所有指令,但没有控制流指令702。
[0060]
在已识别通道块710的情况下,任务图指定处理器702如下生成任务图500。每个通道块710包括一个或多个导入资源和一个或多个输出资源的定义。这些资源构成任务图的缓存504。资源读取和写入构成任务图的有向边缘。从缓存504指向通道502的边缘是资源读取,并且从通道502指向缓存504的边缘是资源写入。
[0061]
下表包括图7a所述的格式的任务图指定程序的示例性代码列表。图7b示出了从程序生成的示例性任务图750。
[0062][0063]
表2:示例性任务图指定程序
[0064]
在此示例中,通道块仅包括一个通道命令。通道命令被识别为是指定为通道命令的命令集中的一者的命令,诸如本文其他地方描述的那些。换句话说,任务图指定处理器402能够访问被认为是通道命令的命令类型的列表并且识别在列表内发现的程序的所有命令作为通道命令。表2的示例性任务图指定程序包括三个不同的通道块。第一通道块是从setstate(state1)语句到第一通道命令draw1()的部分。第二通道块是以setstate(state2)语句开始并在draw2()通道命令处结束的如果语句中的部分。第三通道块是以setresource(read:r5,write:r3)开始并以draw3()结束的如果语句中的部分。
[0065]
在表2的任务图指定程序的一个示例性执行(被示为任务图750(1))中,条件b为真。因此,任务图指定处理器402在任务图750(1)中生成通道,该通道包括:通道1,其输入资源1 754(1)并输出资源2 754(2);通道2,其输入资源2 754(2)并输出资源5 754(5);和通告3,其输入资源5754(5)并输出资源3 754(3)。
[0066]
在表2的任务图指定程序的另一个示例性执行中,被示为任务图750(2),条件b为假。因此,任务图指定处理器402生成输入资源1 754(1)并输出资源2 754(2)754(2)的通道1,但不生成通道2或3。
[0067]
如上所述,命令调度器404基于由任务图指定处理器402输出的任务图来调度用于在apd 116上执行的任务。命令调度器404基于某些考虑因素来确定通道的执行顺序。一个考虑因素集包括通道502的依赖性。更具体地,具有一个或多个依赖性的通道502不能相对于彼此重新排序。例如,如果第一通道502取决于第二通道502,则命令调度器404致使第一通道502在第二通道502已经完成之后执行。在一些示例中,命令调度器404插入适当的指令或标记(诸如屏障指令或图元)以实施通道502之间的排序。如果第一通道502不取决于第二通道502并且第二遍不取决于第一通道502,则命令调度器404自由地并且在一些情况下确实以任何技术上可行的方式将第一通道502和第二通道502的执行相对于彼此排序。例如,在一些实例中,命令调度器404致使独立通道一者接一者地执行,并且在其他情况下,命令
调度器404致使独立通道在至少部分重叠的时间段期间执行。通常,命令调度器404选择要一起执行以优化某些期望资源(诸如存储器使用、处理单元资源、寄存器使用)或最小化执行时间的通道502。
[0068]
图8a示出了根据一个示例的任务图800。第一通道802(1)读取资源1804(1)并输出资源2 804(2)。通道2 802(2)输入资源2 804(2)并输出资源3804(3)。通道3 802(3)输入资源2 804(2)并输出资源4 804(4)。通道4 802(4)输入资源2 804(2)并输出资源5 804(5)。通道5输入802(5)并输出资源6804(6)。
[0069]
通道2 802(2),通道3 802(3)和通道4 802(4)是独立的并且取决于通道2 802(1)。通道5 802(5)取决于通道1 802(1)、通道2 804(2)、通道3 802(3)和通道4 802(4)。因为通道2 802(2)、通道3 802(3)和通道4 802(4)是独立的,所以命令调度器404能够将这些通道802的执行相对于彼此重新排序。然而,命令调度器404实施相关通道之间的排序,这意味着通道1402(1)在通道2 802(2)、通道3 802(3)和通道4 802(4)之前执行,并且通道2802(2),通道3 802(3)和通道4 802(4)在通道5 802(5)之前执行。
[0070]
图8b示出了由命令调度器404调度的通道802的示例性执行顺序850。如图所示,时间向右侧前进。在示例1 850(1)中,通道1 802(1)在通道2 802(2)、通道3 802(3)和通道4 802(4)之前执行,并且通道2 802(2)、通道3 802(3)和通道4 802(4)同时执行。在示例2 850(2)中,通道1 802(1)在通道2 802(2)和通道3 802(3)之前执行。通道4 802(4)在通道2 802(2)和通道3802(3)之后执行并且在通道5 802(5)之前执行。在示例3 850(3)中,通道802顺序执行。
[0071]
在一些具体实施中,特定编程语言用于图7a和图7b的技术的整个任务图指定程序以及用于图6a和图6b的控制流指令604和通道调取606(但不用于通道定义605)。在此类具体实施中,在图6a和图6b的示例中,通道定义605以编译的不同编程语言写入。当执行对应通道时,这些通道定义605由apd 116调用。
[0072]
为了确定如何调度独立通道802,命令调度器404考虑apd 116的状态和通道802的性能度量。存在构成apd 116的“状态”的多个不同信息项目。性能度量的一些示例包括资源使用和执行速度。资源包括存储器、寄存器和处理单元(诸如simd单元138)。在一些示例中,命令调度器404在执行期间记录通道802的性能度量以用于在将来调度相同通道802期间使用。更具体地,命令调度器404基于那些通道的先前见证的资源使用来更新特定通道的估计资源使用数据,并且利用此类更新的估计资源使用数据来进行将来的调度决定。
[0073]
如上所述,命令调度器404有时调度独立通道502以用于在一个或多个计算单元132上同时执行。命令调度器404基于通道502的性质以及apd 116的能力和状态来确定是否同时调度不同通道502。更具体地,在一些情况下,有利的是同时调度独立通道502,并且在其他情况下,有利的是不同时调度独立通道502。术语“同时”意味着两个(或更多个)通道502在至少部分重叠的时间段内执行。
[0074]
通道502消耗诸如存储器、处理单元(例如,simd单元138)、寄存器等的资源。因此,在apd 116在某些资源方面受到限制,并且同时执行通道502将超过可用资源的数量的情况下,命令调度器404不同时调度此类通道502。相反,在资源可用于同时执行的情况下,命令调度器404有时可同时调度此类通道502。此外,在操作中,命令调度器404确定是否强调诸如速度或资源使用的方面并且基于此类确定来调度独立通道502。在一个示例中,同时执行
多个通道502减小了那些通道502的总执行时间,但在任何给定时间增加了总资源使用。连续地执行多个通道502增加了总执行时间,但在给定时间减小了总资源使用。相反,同时执行多个通道502减小了总执行时间,但在给定时间增加了总资源使用。
[0075]
命令调度器404的另一个考虑因素是不同通道502是否使用不同资源。更具体地,如果不同通道502使用不同类型的资源,或者如果一个通道502使用少量的特定资源并且另一个通道502使用大量的资源,则调度这些通道将是有益的。在一个示例中,一个通道502具有simd单元138的非常重度使用,而另一个通道502具有simd单元138的轻度使用。在这种情况下,在一些实例中,命令调度器404调度这两个通道以用于同时执行。
[0076]
此外,命令调度器404能够通过减小使用特定缓存504的时间段来减小在给定时间的存储器使用。更具体地,通过分析任务图500,命令调度器能够确定任何特定缓存504的寿命。缓存504的寿命是生成缓存504的通道502和消耗该缓存504的最后通道502之间的时间段。在一些具体实施中,并且在一些情况下,诸如在存储器使用较高的情况下,命令调度器404通过同时调度其完成趋向于结束该寿命的通道502来最小化缓存504的寿命。换句话说,为了减小缓存504的寿命,命令调度器404识别作为使用缓存504的可能最后通道502的通道502,并且命令调度器404识别可能最后通道502取决于的通道502。然后,命令调度器404尝试调度此类识别的通道502以用于在可能的情况下同时执行(例如,可调度独立通道502以用于同时执行)。“可能最后通道”是作为在拓扑排序次序中使用缓存504的最后通道的通道,或者可以是在拓扑排序次序中使用缓存504的最后通道的独立通道502中的一者。也可以使用这种技术来保持资源工作集处于存储器层级的特定部分中,诸如高速缓存或其他存储器。换句话说,可以使用上述技术来限制通道502的存储器利用,使得存储器利用配合在存储器层级的特定部分内(例如,全部处于0级高速缓存、全部处于1级高速缓存等)。
[0077]
拓扑排序是一种技术,由此基于图形的有向边缘对有向无环图的节点进行排序。在排序中,在有向边缘开始处的节点始终在那些有向边缘结束处的节点之前。在其间没有有向边缘的节点的任何排序产生了有效拓扑排序。因此,如果多个通道502使用缓存504但为独立的,并且任何此类通道502可以是在有效拓扑排序次序中使用缓存504的最后一个通道,则每个此类通道502是可能最后通道502。
[0078]
在一些具体实施中,在该寿命期间存在的通道502包括全部使用缓存504的多个独立通道502。通过积极地调度缓存504的消费者以早期执行,减小了缓存504的寿命。
[0079]
在附加的调度技术中,命令调度器404自动地将大通道分解成几个较小通道并且独立地调度那些通道。
[0080]
图9是根据一个示例的用于改造任务图以调度的方法900的流程图。尽管参照图1至图8b的系统进行了描述,但本领域的技术人员将认识到,被配置为按任何技术上可行的顺序执行方法900的步骤的任何系统都属于本公开的范围。
[0081]
方法900开始于步骤902处,其中任务图指定处理器402接收用于执行的任务图指定程序902。任务图指定程序编程地指定如何生成用于在apd 116上调度和执行的任务图。在步骤904处,任务图指定程序902执行如任务图指定程序902中指定的控制流指令以遍历任务图指定程序902。这些控制流指令包括诸如条件指令、循环等的指令。应当注意,如图9内的步骤904在步骤906到910之前的排序不一定意味着步骤904以该顺序执行仅一次。相反,应当理解,步骤904指示控制流指令如任务图指定程序所指定的那样,以在该程序内发
现它们的任何顺序执行。
[0082]
在步骤906处,任务图指定处理器402基于任务图指定程序的通道指令来生成节点(其对应于通道502)。在图6a到图6b的格式中,通道指令是通道调取606。以控制流指令所指定的顺序执行通道调取生成了任务图的节点。对于图7a到图7b的格式,通道指令是通道块710。具体地,任务图指定处理器402以本文其他地方指定的方式识别这些通道块710,并且从这些通道块710生成节点。
[0083]
在步骤908处,在所生成的任务图中,任务图指定处理器402来生成资源和基于每个节点的资源利用率的所生成的节点之间的有向边缘。对于由节点读取的资源,任务图指定处理器402生成从该资源指向节点的有向边缘。对于由节点写入的资源,任务图指定处理器402生成从节点指向该资源的有向边缘。在步骤910处,任务图指定处理器402将任务图输出到命令调度器404以用于在apd 116或其他设备上调度。
[0084]
图10是根据一个示例的用于基于任务图在处理设备上调度操作的方法1000的流程图。尽管参照图1至图8b的系统进行了描述,但本领域的技术人员将认识到,被配置为按任何技术上可行的顺序执行方法1000的步骤的任何系统都属于本公开的范围。
[0085]
方法1000开始于步骤1002,其中命令调度器404接收任务图。在一些示例中,任务图由任务图指定处理器402生成。在一些示例中,命令调度器404在与任务图指定处理器402相同的处理设备上或在与任务图指定处理器402的不同处理设备上。在图4a至图4c中示出了各种示例性配置。
[0086]
在步骤1004处,命令调度器404识别任务图的独立和相关通道。用于识别此类通道的技术在本文其他地方描述。在步骤1006处,命令调度器404基于性能标准来确定如何调度用于在处理设备上执行的通道。本文其他地方(诸如在图9的描述之前,并且包括与图8a和图8b相关的描述)描述了用于调度通道的许多技术和考虑因素。调度步骤1006涉及执行这些技术中的任一者或多者。通常,命令调度器404调度独立通道以提供被认为是处理设备的特定资源(例如,存储器、寄存器、处理时间等)和/或其他因素(例如,硬件单元)的最佳利用的利用。此外,对于必须由于依赖性而连续进行的通道,命令调度器404致使此类通道连续进行。在一些示例中,命令调度器404致使此类通道经由屏障命令连续发生,该屏障命令致使一个通道的所有操作在相关通道可开始之前完成。在步骤1008处,命令调度器404将已调度命令传输到处理设备以用于在调度时执行。
[0087]
在本文提供的本公开中,最终执行被调度以用于执行任务图的命令的设备是apd 116。然而,应当理解,本说明书考虑了其中除具体描述的处理设备之外的处理设备执行这些命令的具体实施。在一些示例中,类似于apd 116但没有图形能力的设备(例如,没有图形处理管线134并且能够执行计算工作负载)是处理设备。在其他示例中,中央处理单元是处理设备。在其他示例中,任何其他处理单元是处理设备。
[0088]
附图的任何单元(包括处理器102、存储装置106、存储器104、输入驱动器112、输入设备108、输出驱动器114、apd 116、显示设备118、输出设备110、驱动器122、操作系统120、应用程序126、图形处理管线134、计算单元132、simd单元138、apd调度器136以及图3的图形处理管线134的每个阶段)在适当的情况下可实现为被配置为执行所描述的操作的硬件电路,可实现为在处理器上执行的软件(该软件被配置为执行所描述的操作)、或者硬件和软件的组合。
[0089]
应当理解,基于本文的公开内容,可能有许多变化。尽管上述特征和元素在特定组合中进行了描述,但每个特征或元素可以在没有其他特征和元素的情况下单独使用,或者在有或没有其他特征或元素的各种组合中使用。
[0090]
所提供的方法可以在通用计算机、处理器或处理器核心中实现。举例来说,合适的处理器包括通用处理器、专用处理器、常规处理器、数字信号处理器(dsp)、多个微处理器、与dsp核相关联的一个或多个微处理器、控制器、微控制器、专用集成电路(asic)、现场可编程门阵列(fpga)电路,任何其他类型的集成电路(ic)和/或状态机。可以通过使用处理的硬件描述语言(hdl)指令和包括网表的其他中间数据(能够存储在计算机可读介质上的此类指令)的结果来配置制造过程来制造此类处理器。这种处理的结果可以是掩码,然后在半导体制造过程中使用这些掩码来制造实现本公开的特征的处理器。
[0091]
本文提供的方法或流程图可以在并入非暂态计算机可读存储介质中的计算机程序、软件或固件中实现,以供通用计算机或处理器执行。非暂态计算机可读存储介质的示例包括只读存储器(rom)、随机存取存储器(ram)、寄存器、高速缓存存储器、半导体存储器设备、磁性介质(例如内部硬盘和可移动磁盘)、磁光介质和光学介质(例如cd-rom磁盘)以及数字多功能磁盘(dvd)。
再多了解一些

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

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

相关文献