用于执行交织的方法和设备与流程

文档序号:12472205阅读:289来源:国知局
用于执行交织的方法和设备与流程

技术领域

本公开涉及利用图形着色器和计算着色器的图形图像的渲染,更具体地,涉及一种交织图形着色器操作和计算着色器操作的方法。



背景技术:

通常通过几个步骤产生图形图像。例如,图像可被产生,然后可被读取以通过渲染目标(RT)的序列产生另一图像。RT是渲染三维(3D)图像的中间存储器面(intermediate memory surface)。可执行步骤的序列以产生RT“A”,然后读取RT A以便产生RT“B”。例如,在第一步,将照明参数写入到G缓冲器以便渲染图像,在第二步,可通过读取G缓冲器并进行照明相关的计算来渲染明亮的图像。可在对不同的RT执行操作的序列(即,步骤的序列)之后产生最终的输出图像。

然而,这些渲染目标步骤需要图形处理单元(GPU)访问外部存储器。在图形应用产生中间图像A并且随后图像A被读取以便产生图像B的情况下,图像大小(例如,1920×3080像素)通常被应用于此,并且每个像素是4字节(RGBA8888格式),如果高速缓冲存储器不能存储8兆字节(MB)的数据,则中间图像A必须被写入到外部存储器。

因此,图形处理器渲染所有的第一RT(例如,RT A),然后从外部存储器读取渲染的结果以便产生第二RT(例如,RT B)。



技术实现要素:

提供用于执行交织的方法和设备。还提供一种非暂时性计算机可读记录介质,其上记录有用于使用计算机来执行所述方法的程序。

另外的方面将会部分地在以下描述中阐述,并将会部分地从描述中清楚,或可通过对呈现的实施例的实践而领会。

根据实施例的方面,一种执行交织的方法可包括:处理相互依赖的渲染目标的图块化的图形着色器操作和图块化的计算着色器操作的组合;根据处理的结果,对图块化的图形着色器操作和图块化的计算着色器操作的组合进行交织。

根据实施例的另一方面,一种在图形处理系统中执行的方法可包括:重新编译计算着色器以使其具有图块化的访问模式;针对相互依赖的图像的集合对图形着色器和重新编译的计算着色器的处理进行交织,其中,所述交织针对相互依赖的图像在逐图块基础上被执行。

根据实施例的另一方面,一种非暂时性计算机可读记录介质,其上记录有程序,当使用处理器执行所述程序时,执行以下方法,包括:确定相互依赖的渲染目标操作的集合的图形着色器操作和计算着色器操作的依赖性;调度对交织的图形着色器操作和计算着色器操作的图块进行处理的交织次序,以便通过将交织的图形着色器操作和计算着色器操作的中间图块处理计算中的至少一个子集保持在图形处理单元(GPU)的片上存储器中来减少与图形系统的外部存储器的流量。

附图说明

通过以下结合附图的实施例的描述,这些和/或其他方面将变得清楚和更容易理解,在附图中:

图1示出根据实施例的用于执行交织的设备的配置;

图2是根据实施例的用于描述执行交织的方法的流程图;

图3示出根据实施例的图形处理系统的配置;

图4A至图4C示出有向无环图(DAG)的示例;

图5示出中间结果被保持在片上存储器中的示例;

图6示出根据实施例的用于描述交织图形和计算操作的方法的流程图;

图7示出根据另一实施例的用于描述交织图形和计算操作的方法的流程图;

图8示出分析应用编程接口(API)调用(例如,OpenGLTM API调用)的序列以针对图形着色器和计算着色器交织图形调用和之后的计算调用的的示例;

图9示出根据实施例的由交织调度模块交织的图形和计算调用的示例。

具体实施方式

在这里使用的包括描述性的或技术性的术语的所有术语应被解释为具有对于本领域普通技术人员而言是显而易见的含义。然而,根据本领域普通技术人员的意图、案例或新技术的出现,这些术语可具有不同的含义。此外,一些术语可被申请人任意选择,在这种情况下,选择的术语的含义将在本发明的描述中被详细描述。因此,必须基于术语的含义和贯穿本说明书的描述来共同限定这里使用的术语。

此外,当部分“包括”或“包含”元件时,除非存在与其相反的特定描述,否则所述部分还可包括其他元件,而不排除所述其他元件。在以下描述中,诸如“单元”和“模块”的术语表示用于处理至少一个功能或操作的单元,其中,所述单元和块可被实施为硬件或软件,或者通过组合硬件和软件来实施。

现在将参考附图更全面地描述本公开,在附图中示出一个或多个实施例。然而,本公开可以以许多不同形式来实施,而不应被解释为限于这里阐述的实施例;相反,提供这些实施例以使本公开将是彻底和完整的,并将向那些本领域普通技术人员完整地传达本公开的构思。

在下文中,将通过参考附图说明实施例来详细解释实施例。

图1示出根据实施例的用于执行交织的设备的配置。

参照图1,存储器100包括驱动器111,图形处理单元(GPU)120包括高速缓冲存储器121。驱动器111可对应于程序指令。在这里,程序指令提供针对GPU 120的软件接口,所述软件接口允许软件程序访问GPU 120的硬件配置并与GPU 120进行数据通信。例如,驱动器111可包括程序指令和存储在存储器110中的GPU应用编程接口(GPU API)。

GPU 120可不仅包括高速缓冲存储器121,还可包括可编程GPU硬件和至少一个处理器。在这点上,高速缓冲存储器121可被用作用于缓冲图块化数据的图块缓冲器。

图2是根据实施例的用于描述执行交织的方法的流程图。

在操作210,驱动器111处理相关的渲染目标(RT)的图块化的图形着色器操作和图块化的计算着色器操作的组合。

在操作220,根据处理的结果,驱动器111对图块化的图形着色器操作和图块化的计算着色器操作的组合进行交织。

在下文中,参考图3至图9,详细描述驱动器111和GPU 120执行交织的示例。

图3示出根据实施例的图形处理系统300的配置。

图3中示出的存储器304和驱动器308可分别对应于图1中示出的存储器110和驱动器111。此外,图3中示出的GPU 302和片上存储器360可分别对应于图1中示出的GPU 120和高速缓冲存储器121。

参照图3,图形处理系统300包括中央处理单元(CPU)301和存储器304。驱动器308可被存储在存储器308上。例如,驱动器308可对应于程序指令。在这点上,程序指令提供能使软件程序访问GPU 302的硬件配置并与GPU 302进行数据通信的针对GPU 302的软件接口。例如,软件程序可包括操作系统程序、应用程序和/或类似的软件程序。驱动器308可支持物理和/或虚拟硬件。

例如,驱动器308包括存储在存储器304中的程序指令。GPU 302包括可编程GPU硬件350、至少一个处理器357和片上高速缓冲存储器360。在这里,片上高速缓冲存储器360可被用作用于缓冲图块化的数据362的缓冲器。驱动器308包括GPU API 306。参照图3,GPU 302被示出为物理GPU组件,然而,GPU 302可对应于虚拟GPU。

GPU 302可访问外部存储器320。然而,在一些实施例中,为减少往来于外部存储器320的存储器流量,外部存储器320可以是外部动态随机存取存储器(DRAM)。例如,当图形处理器渲染第一RT时,将渲染的结果写入外部存储器320,然后从外部存储器320读取渲染的结果以产生第二RT,这些处理产生往来于外部存储器320的大量流量。另外,这些处理可包括针对被包括在中间图像中的不必要部分的渲染。

例如,为了将中间结果或数据保持在片上高速缓冲存储器360上并且减少访问外部存储器320的次数,提供对于驱动器308的支持以便对图形着色器操作和计算着色器操作进行交织。可编程GPU硬件350的部分可被选择性地修改为具有硬件调度支持355,以便优化GPU 302中的交织的调度的执行。

图形渲染操作在包括固定的功能逻辑、一个或多个图形着色器和计算着色器的图形管线中被执行。图形着色器是用于进行着色的程序。图形着色器是作为图形渲染操作的部分而运行的程序。图形着色器处理像素、顶点、补丁或图元。计算着色器是用于计算任意信息的程序并提供更多灵活性。在这里,灵活性表示软件的可根据不同类型的机器和来自用户的各种要求而被容易地改变的特性。随着支持OpenGL-ESTM3.1应用编程接口(API)的计算着色器加入,基准程序(benchmarks)将图像后处理操作(如运动模糊、景深、缩放和过滤)从图形着色器转移到计算着色器。在OpenGLTM标准中,计算着色器被用于计算任意信息。通常,计算着色器在抽象空间中操作。然而,计算着色器可在工作组大小(计算操作的最小量)和本地大小上具有限制。在这点上,本地大小是由可在每个工作组中发生的着色器的调用的数量限定的。OpenGLTM也限定针对共享变量和存储器屏障的规则。存储器屏障保证在屏障之前的所有存储器事务必须在处理之前完成。

计算着色器提供更多灵活性和可提高后处理操作的效率的特征。例如,计算着色器在如何存取或写入数据上赋予更多的自由。然而,在不使用全局存储器屏障(例如,glMemoryBarrier)的情况下,API不保证存储器一致性。

第一分析模块312分析API图形着色器调用和计算着色器调用。为创建限定图像和图块之间的依赖性的有向无环图(DAG),第二分析模块314使用第一分析模块312。DAG的示例如图4A、图4B和图4C所示。在运行时,在驱动器308中建立API依赖关系图(与DAG相应),以便检测可交织图形调用和计算调用的情况。如关于图6所述,API调用被分组以建立图形着色器操作和计算着色器操作的交织执行的序列。

调度模块330确定交织操作的调度。例如,在着色器编译时,分析计算着色器中的图像加载/存储操作的数据访问模式,以便确定图像加载/存储操作是否是用于交织的候选。一些类型的数据访问模式具有与交织兼容的特性。例如,如果数据访问模式是在一维(1D)或二维(2D)空间中为静态的静态已知跨步模式(strided pattern),则计算着色器是用于交织的候选。跨度模式具有针对按照跨步长度(stride length)彼此分开的地址的存储器访问的序列。具有静态已知跨步模式的计算着色器的处理次序在形状上与图块模式有一些普遍相似性,这有助于将计算着色器转换为具有图块化的访问。然而,原则上,其他类型的数据访问模式可以是用于交织的合适的候选。参考图5、图6和图9更详细地描述调度模块330的操作。

例如,调度模块330确定对于相互依赖的RT的交织的图块化的图形着色器操作和计算着色器操作的集合,以便减少外部存储器流量。可通过将交织操作的至少一些中间结果保持在片上存储器360中来执行调度模块330的操作。参考图5更详细地描述调度交织的图块化的图形着色器操作和计算着色器操作以减少外部存储器流量的操作的示例。

例如,在驱动器308和编译器(未示出)中提供支持以便通过转换模块340将计算着色器自动地转换为以图块化的访问模式进行操作。计算着色器被转换为对图块进行操作以便产生图块化的等同变体。这种转换包括通过使用编译器对计算着色器进行重新编译,从而使计算着色器适于以与图形着色器的图块化的存储器访问的图块格式兼容的图块格式执行图块化的存储器访问。例如,这种转换包括将计算着色器的工作组维度重新限定为图块的宽度和高度的整数除数。此外,可使用图块缓冲加载指令来替换图像加载指令。如果可行,则移除模块342可针对交织的图形着色器计算和计算着色器操作来移除存储器屏障。

例如,图形处理系统300自动地(例如,没有人的介入)对图形着色器和计算着色器的处理进行交织,以便减少或消除向外部(芯片外)存储器320写入中间数据。驱动器308对API调用进行重新排序并对计算着色器执行任何必要的重新编译,以便通过使用驱动器308(和编译器软件栈的支持)来处理写入具有计算着色器的图形API的现有应用。

图4A至图4C示出DAG的示例。

参照图4A,示出由第二分析模块314产生的数据流图(或等同的数据结构)的一个实施例。图4A的数据流图示出两个或多个图像(诸如图像A和B)的集合之间的直接依赖性,也可包括其他后续图像(例如,C、D)。图4A对应于限定不同RT之间的依赖性的DAG。不同RT图像的相互依赖性可以是简单的(例如,图像B直接从图像A流出)或可具有更复杂的相互依赖关系(例如,图像可依赖于不止一个图像)。更一般地,由于图像A和图像B被用于产生图像C(如图4B所示),因此一个或多个图像可同时依赖数个其他图像。因此,虽然可存在一个RT注入(例如,用于输入)到另一RT中的简单序列,但是它们之间的相互依赖性一般会更加复杂。例如,可能需要两个图形着色器RT以便产生计算着色器RT。另外,图块层面上的依赖性也可以是复杂的。例如,参照图4C,给出的图像B中的图块可依赖于先前图像(例如,图像A)中的不止一个图块。另外,在给出的RT中可存在未被后来的RT中的任何图块使用的单独的图块。

例如,驱动器308的第一分析模块312和第二分析模块314检查命令流,然后确定RT B的图像是否直接地或间接地(例如,下行地)依赖于RT A。当确定RT B依赖于RT A时,驱动器308确定多少层需要遵循依赖关系图以减少外部存储器访问。不需要在所有情况下遵循依赖关系图的每一层来实现外部存储器访问的减少。此外,遵循复杂依赖关系图的每一层消耗处理资源。因此,第二分析模块314限制遵循依赖关系图的层的数量。如果依赖关系图复杂,则可对其应用遵循依赖关系图的层的数量的规则。之后,调度模块330产生交织调度,以尝试将中间结果保持在片上高速缓冲存储器(例如,图块缓冲器)中。

另外,DAG在被图形着色器操作渲染的图块和被计算着色器操作的图块之间在图块层面上进行依赖性映射。DAG的产生可包括将每个输出图块反投影到产生这些输出图块所需的输入图块。例如,如图4C所示,图像A可被用于产生图像B,接着图像B被用于产生图像C。存在图像的依赖性和来自图像的图块的依赖性。例如,如图4C所示,在给出的图像中的单个图块可依赖于来自另一图像的不止一个图块。

图5示出中间结果被保持在片上存储器360中的示例。

图5示出操作的序列的中间计算被保持在用作图块缓冲器的片上高速缓冲存储器360中的示例。在这个示例中,第二分析模块314确定RT A、RT B、RT C和RT D之间的依赖性。调度模块330确定用于将RT A的图块写入片上高速缓冲存储器360并随后将它们读取到RT B的调度。可选择写入和读取的处理的调度以产生交织的调度(诸如,在图像A的图块被产生并存储在片上高速缓冲存储器360中之后)。图块被“立即读回”以便产生RT B的图块,因此,可节省存储器带宽。将理解,“立即读回”(也被称为“直接使用(consume)”或“立即使用”)可包括处理在片上存储器360中存储图像A的图块和从片上存储器360读取存储的图块之间的交织操作,以便产生RT B的图块。例如,“立即读回”可对应于从片上存储器360读取图像A的图块而不是从外部存储器320读取所述图块,以便产生RT B的图块。

交织的调度可以以与由第二分析模块314执行的依赖性分析匹配的次序进行。可选择依赖性分析以优化片上高速缓冲存储器360的使用,从而可最小化针对中间计算使用外部存储器320的需求。另外,可在调度方案中使用由第二分析模块314执行的依赖性分析,以消除对于无助于最终图像的图块的那些图块执行处理。通过这样做,可消除不必要的工作。在执行中间操作的序列之后,可渲染最终图像,然后可将最终图像发送到外部存储器320或可将最终图像输出以显示。虽然期望将所有中间结果完全地保持在片上高速缓冲存储器360中,但是一般而言,即使将中间数据的子集保持在片上高速缓冲存储器360中也可有益于减少执行图形处理所需的外部存储器访问的次数。此外,能够减小图块大小以便最小化必须被保持的中间数据量,因而实际上允许更细粒度的交织。

例如,可在图块层面上执行交织,用于对生产者/消费者渲染目标的集合(例如,来自图像1、2、3)进行图形渲染和计算着色器操作。因此,RT 1的图块数据可在刚需要时被渲染,以便利用图块化的计算着色器产生RT 2的相应图块,RT 2的相应图块在刚需要RT 2的该部分时被渲染以便产生RT 3,以此类推。可选地,计算着色器可产生需要用来渲染图形图块的输入数据。例如,计算着色器可产生粒子的位置,而只有影响特定XY区域的粒子是图形着色器的兴趣所在。

图6示出根据实施例的用于描述对图形操作和计算操作进行交织的方法的流程图。

在操作610,第一分析模块312处理API调用,并找到交织候选。API调用处理被第二分析模块314延迟并排队以建立限定依赖性的DAG。在针对仅图形的工作负荷的基于图块的延迟渲染(TBDR)处理中,驱动器308使用特定事件(诸如渲染目标改变或存储器屏障)以确定何时开始处理延迟的API调用。在混合图形调用和计算调用的情况下,移除模块342确定一个或多个存储器屏障是否可通过以图块化的方式交织图形调用和计算调用而被安全地移除(例如,如果针对图块的图形处理在计算处理发生之前结束,则存储器屏障可被安全地移除)。例如,对于何时允许交织的确定是基于编译期间计算着色器中的图像加载/存储操作的存储器访问模式的分析。如果存储器访问模式是1D或2D空间中的静态已知跨步模式,那么计算着色器成为交织的候选。

在操作620,转换模块340针对图块化的访问模式重新编译计算着色器。例如,将计算着色器的工作组维度重新限定为图块的宽度和高度的整数除数。可选地或另外地,可修改图块的宽度和高度。这些修改使访问的范围符合限定的图块维度,因此可将所有数据存储在片上存储器360中。例如,可使用图块缓冲加载指令替换图像加载指令。这可包括将用于计算目标地址的指令替换为图块缓冲器中的索引。

在操作630,调度模块330将API调用分组,以便建立图形操作和计算操作的交织执行的序列。例如,调度模块330确定交织是否可行。调度模块330基于确定交织是否可行的结果移除存储器屏障。

在操作640,调度模块330对每个图块的交织执行进行调度。将针对给出的图块的图形着色器的输出存储在片上存储器360(或者,诸如数据寄存器或缓冲器的另一片上存储器)中。例如,由后续计算着色器立即将数据读回,从而消除不必要的外部存储器访问。

图7示出根据另一实施例的用于描述对图形操作和计算操作进行交织的方法的流程图。

在操作710,第二分析模块314确定图像和图块之间的依赖性以建立DAG。在操作720,识别候选,以在图块化的基础上对图形调用和计算调用进行交织。例如,调度模块330识别用于交织的候选。在操作730,由转换模块340将相关的候选计算着色器适配为具有图块化的访问模式的图块化的等同物。例如,转换模块340针对图块化的访问模式重新编译计算着色器。在操作740,由调度模块330以图块化的方式对组合的图形着色器和计算着色器的交织进行调度,以便通过将至少一些中间数据结果保持在片上存储器360(例如,图块缓冲器)中来减少外部存储器的流量。

图8示出分析API调用(例如,OpenGLTM API调用)的序列以针对图形着色器830和计算着色器850交织图形调用和之后的计算调用的示例。

第一分析模块312分析API图形调用810和API计算调用820,以确定图形和计算调用是否可被交织。当遇到计算调用820时,第二分析模块314确定计算调用所依赖的图形调用。渲染目标840是渲染3D图像的中间存储器面。

图9示出根据实施例的由交织调度模块交织的图形调用和计算调用的示例。

可通过监视计算着色器950的加载/存储操作的存储器访问模式来确定计算着色器950将需要的跨步模式。图形着色器930可以以计算着色器950使用图块的次序产生图块。例如,一旦图块910已经产生,那么计算着色器950处理图块910。在计算着色器950处理图块910的同时,图形着色器930产生图块920。然后,在计算着色器950处理图块920的同时,图形着色器930产生另一图块。其结果是,图块的处理在图形着色器930和计算着色器950之间交织。

例如,图形帧的渲染可包括图形和计算命令的混合。图形渲染引擎可将图形操作和计算操作混合用于许多阶段的后处理和图形计算。具体地,在不交织一些阶段的处理的情况下,可写入存储器(例如,外部存储器)的中间结果可被产生并且随后可被读回,以便产生最终结果图像或下一中间图像。作为示例场景,计算着色器操作可包括基于来自G缓冲器的参数数据(因图形渲染操作而产生)的照明计算、运动模糊、景深(DOF)、合成和抗锯齿。通过对计算着色器操作进行图块化,可在图块层面上交织图形和计算操作之间的数据产生和使用。通过这样做,可将数据保留在片上存储器360中,一些图形应用可消除外部存储器的一些或甚至更多的流量。因此,可显著提高功效和性能。另外,显式全局存储器屏障的自动(例如,没有人的介入)移除也提高性能。

在很多图形应用中,图形着色器后跟计算着色器操作的序列。然而,在一个实施例中,计算着色器可后跟图形着色器。在实施例中,可将类似分析应用于计算着色器将输出写入外部存储器并且图形着色器从外部存储器加载数据的情况。可通过重新编译计算着色器来交织计算着色器和图形着色器,以便将数据输出至片上缓冲器。图形着色器使用来自片上缓冲器的数据,并且以图块化的方式执行数据。

在另一实施例中,针对中间数据使用高速缓冲存储器而不是图块缓冲器。在一些架构中,由于缺少合适的数据路径,因此可能不能对被用作图块缓冲器的低级别片上高速缓冲存储器进行直接访问。在这种情况下,可使用最近的高速缓冲存储器级别来代替。然而,根据该高速缓冲存储器与GPU内的计算逻辑的接近,可减少能量和性能的益处。如果使用下一级别的高速缓冲存储器,那么可作出几点改变。例如,图像加载指令不能被改变成图块缓冲器加载指令。然而,可向高速缓冲存储器发出提示或指令以便保证数据被保留在高速缓冲存储器中而不被换出到外部DRAM存储器,直至完成相关计算。可选择访问的范围以符合高速缓冲存储器容量,使得所有工作数据留在高速缓冲存储器中。另外,针对给出的图块的图形着色器的输出被存储在最近的高速缓冲存储器中。数据被后续计算着色器立即使用,并且对DRAM或更低的高速缓冲存储器级别的任何不必要访问被消除。

如在这里使用的,模块可对应于硬件组件、软件组件或它们的组合。例如,模块可包括一个或多个处理器(例如,计算机处理器)和包括程序指令的数据存储装置。所述一个或多个处理器可通过所述指令被配置为用作执行这里描述的一个或多个方法的专用处理器。软件、硬件和其他模块可驻留在服务器、工作站、移动装置、智能电话、可穿戴计算机、个人计算机、平板计算机、图像数据编码器、图像数据解码器、个人数字助理(PDA)、视频投影机、影音接收器、显示器(诸如电视(TV))、数字电影投影机、媒体再现器以及适于这里描述的目的的其他装置上。对于本领域普通技术人员而言明显的是,系统的方面可被实践为独立装置或系统装置(例如,诸如客户服务器系统)。

软件(或程序)组件可包括携带计算机可读指令的集合的任何非暂时性介质,当所述指令被处理器执行时,使处理器执行这里描述的一个或多个方法。软件组件可以是多种多样的形式中的任何形式。例如,程序组件可包括非暂时性介质,诸如磁数据存储介质(包括软盘、硬件驱动器)、光数据存储介质(包括CD ROM、DVD)、电子数据存储介质(包括ROM、闪存RAM、EPROM、硬或预编程芯片(例如,EEPROM半导体芯片))、纳米技术存储器等。程序组件上的计算机可读指令可被选择性地压缩或加密。

软件组件的示例实施例可包括(但不限于)固件、中间件、操作系统软件、驻留软件、应用软件、微代码等。硬件组件和软件组件二者均可被完整地或部分地集中或分布(或它们的组合)为本领域技术人员已知的。例如,软件组件和其他模块通过本地存储器、通过网络、通过分布的计算环境下的浏览器或其他应用或者通过适于以上描述的目的的其他方法可以是可访问的。

虽然已经结合具体实施例描述了本公开,但是将理解,不意在将本公开限制于描述的实施例。相反,意在涵盖与由权利要求限定的一样可被包括在本公开的精神和范围内的替代物、修改和等同物。可在没有这些具体细节中的一些或全部的情况下实践本公开。另外,可能未详细描述公知的特征,以避免不必要地模糊本公开。根据本公开,可使用各种类型的操作系统、编程语言、计算平台、计算机程序和/或计算装置来实现组件、处理步骤和/或数据结构。另外,本领域普通技术人员将认识到,在不脱离这里描述的本公开的范围和精神的情况下,也可使用诸如硬件装置、现场可编程门阵列(FPGA)、专用集成电路(ASIC)等的装置。本公开还可被切实地实施为存储在计算机可读介质(诸如存储器装置)上的计算机指令的集合。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1