CN100507852C - 用于优化流处理程序的方法、装置和系统 - Google Patents

用于优化流处理程序的方法、装置和系统 Download PDF

Info

Publication number
CN100507852C
CN100507852C CNB2005800226721A CN200580022672A CN100507852C CN 100507852 C CN100507852 C CN 100507852C CN B2005800226721 A CNB2005800226721 A CN B2005800226721A CN 200580022672 A CN200580022672 A CN 200580022672A CN 100507852 C CN100507852 C CN 100507852C
Authority
CN
China
Prior art keywords
stream
handling procedure
processing unit
coloring process
class
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CNB2005800226721A
Other languages
English (en)
Other versions
CN1997964A (zh
Inventor
马克·J·基尔加德
克里斯托弗·T·多德
列夫·莱巴雷迪安
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN1997964A publication Critical patent/CN1997964A/zh
Application granted granted Critical
Publication of CN100507852C publication Critical patent/CN100507852C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • G06F8/4435Detection or removal of dead or redundant code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Graphics (AREA)
  • Computer Hardware Design (AREA)
  • Image Generation (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

一系统基于在流处理程序之间交换的数据来优化两个或两个以上流处理程序。所述系统交替地处理每一流处理程序以识别并去除失效程序代码,藉此改进执行性能。通过传播作为来自其它流处理程序的输入而接收到的常数且通过分析一第一流处理程序并确定一第二流处理程序的未被所述第一流处理程序使用的输出来识别失效程序代码。所述系统可执行此优化的多次重复,因为先前的重复引入了用作一流处理程序的输入的附加常数。在所述流处理程序的优化之后,将所述经优化的流处理程序编译为一适于由一流处理系统执行的格式。

Description

用于优化流处理程序的方法、装置和系统
技术领域
本发明涉及计算机图形学领域。
背景技术
许多计算机图形图像是通过从给定视点用三维场景对光的相互作用进行数学建模来创建的。此过程(称为渲染)从给定视点来看产生场景的二维图像,且类似于拍摄真实世界场景的照片。
随着对于计算机图形且尤其是对于实时计算机图形的需求增加,具有适于加速渲染过程的图形处理子系统的计算机系统已变得普及。在这些计算机系统中,渲染过程在计算机的通用中央处理单元(CPU)与图形处理子系统之间被划分。通常CPU执行高级运算,例如确定给定场景中物体的位置、运动和碰撞。通过这些高级运算,CPU产生界定期望的经渲染图像(一个或多个)的一组渲染命令和数据。举例来说,渲染命令和数据可为场景界定场景几何形状、照明、着色、纹理化、运动和/或摄影参数。图形处理子系统通过所述组渲染命令和数据创建一个或一个以上经渲染图像。
许多图形处理子系统为高度可编程的,从而能够实施(尤其是)复杂的照明和着色算法。为了开发此可编程性,应用程序可包括一个或一个以上图形处理子系统程序,其由图形处理子系统执行且与由CPU执行的主程序并行执行。尽管不限于仅实施着色和照明算法,但这些图形处理子系统程序通常被称为着色程序或着色器。
图形处理子系统通常使用流处理模型,其中通过流处理单元的链来连续读取和操作输入元素。一个流处理单元的输出是对链中下一流处理单元的输入。通常,数据仅穿过流处理单元的链单向地向“下游”流动。流处理单元的实例包括处理二维或三维顶点的顶点处理器、将由若干组二维或三维顶点界定的几何图元处理成若干组像素或子像素(称为片段)的光栅化器处理器,和处理片段的片段处理器。链中可包括附加类型的流处理单元。举例来说,镶嵌处理器(tessellation processor)可接收高阶表面的描述并产生若干组由顶点界定并近似于或对应于所述高阶表面的几何图元。
链中流处理单元中的一些或全部可为可编程的,其中每一可编程流处理单元具有其自己的单独的着色程序,所述着色程序与在其它流处理单元上执行的着色程序并行地操作。复杂算法的实施方案通常取决于为每一流处理单元定制的单独着色程序,所述单独着色程序一起工作以实现期望的结果。在这些实施方案中,链中初始流处理单元的着色程序的输出可与链中后续流处理单元的着色程序的输入相连系。可用多种低级和高级编程语言编写着色程序,所述编程语言包括低级汇编语言、Cg语言、OpenGL着色语言(OpenGL Shading Language),和DirectX高级着色语言。
需要优化着色程序以改进渲染性能并允许应用程序完全开发图形处理子系统的能力。当用于不同流处理单元的着色程序链接在一起(在某些图形API术语中可称为连系)时,可能存在基于两个或两个以上着色程序的组合进行优化(称为着色器间的优化)的机会。
举例来说,第一着色程序可输出一值,所述值未被图形处理流中的第二链接着色程序用作输入。在此实例中,第一着色程序的用于计算未使用的输出的部分可被安全地省略,藉此减少第一着色程序的执行时间。在另一实例中,如果第一着色程序的输出为常数,那么可将所述常数的值传播到一链接到第一着色程序的第二着色程序的输入,从而减少第一着色程序的执行时间并潜在地允许第二着色程序内的附加优化。
另外,应用程序开发人员期望针对每一流处理单元编写较大的通用着色程序。每一通用着色程序允许应用程序从在需要时将由流处理单元执行的集合中选择一个或一个以上运算。应用程序可通过从每一流处理单元的着色程序中选择适当运算来在若干流处理单元上实施特定算法。使用具有针对每一流处理单元的可选择运算的较大通用着色程序,而不是使用每一者均实施单个操作的许多不同的较小着色程序,大大简化了应用程序开发。不幸的是,即使当将要仅执行着色程序的一小部分时,执行较大通用着色程序也会由于许多因素而较缓慢,所述因素包括将较大着色程序转移到图形处理子系统所需的时间和带宽。优化着色程序的链接也可将这种较大程序简化到其适配在未经优化时原始程序可能不满足的硬件资源限制内的程度。
现有的自动优化技术仅孤立地考虑每一着色程序。针对硬件着色编译器的现有优化技术不会分析被分配到不同流处理单元的链接的着色程序之间的关系以确定着色器间的优化。另外,这些现有优化不考虑流处理单元的链中的单向数据流,且因此错过许多其它的潜在优化。
因此需要基于链接的着色程序之间的关系来优化链接在一起的两个或两个以上着色程序。进一步需要优化较大通用着色程序,以使其有效地执行且不会不必要地将大量数据转移到图形处理子系统。还进一步需要能够在运行时间执行着色器间的优化,从而允许应用程序动态地选择着色程序的组合而不会降低性能。
发明内容
本发明的一实施例是一种用于基于在流处理程序之间交换的数据来优化两个或两个以上流处理程序的系统。所述系统交替地处理每一流处理程序以识别并去除失效程序代码,藉此改进执行性能。通过传播作为来自其它流处理程序的输入而接收到的常数且通过分析第一流处理程序并确定第二流处理程序的未被所述第一流处理程序使用的输出来识别失效程序代码。所述系统可执行此优化的多次重复,因为先前的重复引入了用作对流处理程序的输入的附加常数。在流处理程序的优化之后,将经优化的流处理程序编译为适于由流处理系统执行的格式。
本发明的一实施例是一种优化适于由流处理系统执行的流处理程序的方法。所述流处理系统包括第一和第二可编程流处理单元。所述第二流处理单元与所述第一流处理单元连接,使得第一流处理单元的输出适于作为第二流处理单元的输入。
所述方法包括接收适于由第一流处理单元执行的第一流处理程序。所述第一流处理程序包括输出参数。所述方法还接收适于由第二流处理单元执行的第二流处理程序。所述第二流处理程序包括对应于第一流处理程序的输出参数的输入参数。基于第二流处理程序的输入参数与第一流处理程序的输出参数之间的对应来优化第一和第二流处理程序。
在一实施例中,优化第一和第二流处理程序包括从第一流处理程序中消除适于计算未被第二流处理程序使用的附加输出参数的失效程序代码。在另一实施例中,优化第一和第二流处理程序包括响应于第一流处理程序的输出参数是常数的确定来传播用于第二流处理程序的输入参数的常数值,和从第二流处理程序中消除由于传播常数值而被致使为冗余的失效程序代码。
在又一实施例中,优化第一和第二流处理程序包括响应于第一流处理程序的输出参数是统一值的确定来传播用于第二流处理程序的输入参数的统一值,和从第二流处理程序中消除由于传播统一值而被致使为冗余的失效程序代码。统一值是着色语言中的专门术语,其指的是虽然在处理图形图元流期间不允许变化但可在批量的所述串流数据之间改变值的常数。在很大程度上,可将统一值视为如同用于优化目的的常数值,例如常数合并(在编译时将具有常数项的表达式缩减为较简单的常数表达式)。然而,如果编译器基于知道统一值的值来作出优化决定(例如决定批量的结果),那么在新的统一值将改变较早的优化决定时有必要进行再优化。
流处理系统的一实施例驻存在图形处理子系统内。在此实施例中,可编程流处理单元可为可编程顶点处理器、可编程镶嵌处理器,或可编程片段处理器。
附图说明
将参看附图描述本发明,附图中:
图1是适于实践本发明实施例的计算机系统的方框图;
图2说明适于实施本发明实施例的图形处理子系统的流处理单元的示范性链;
图3说明根据本发明实施例优化一对链接的着色程序的方法;
图4A和4B说明一对示范性链接的着色程序的未经优化的形式;
图5A和5B说明根据本发明实施例在优化方法的第一次重复之后的一对示范性链接的着色程序;
图6A和6B说明根据本发明实施例在优化方法的第二次重复之后的一对示范性链接的着色程序;和
图7说明适于实施本发明实施例的着色语言结构。
附图中,使用相似参考标号表示相同组件。
具体实施方式
图1是适于实践本发明实施例的计算机系统100的方框图,计算机系统100例如可为个人计算机、视频游戏控制台、个人数字助理或其它数字装置。计算机系统100包括中央处理单元(CPU)105,其用于运行软件应用程序并视需要而运行一操作系统。在一实施例中,CPU 105实际上是并行操作的若干单独的中央处理单元。存储器110存储应用程序和数据供CPU 105使用。存储装置115为应用程序和数据提供非易失性存储,且可包括固定磁盘驱动器、活动磁盘驱动器、快闪存储器装置和CD-ROM、DVD-ROM,或其它光学存储装置。用户输入装置120将来自一个或一个以上用户的用户输入传送到计算机系统100,且可包括键盘、鼠标、操纵杆、触摸屏和/或麦克风。网络接口125允许计算机系统100经由电子通信网络与其它计算机系统通信,且可包括在局域网和广域网(例如因特网)上的有线或无线通信。计算机系统100的组件(包括CPU105、存储器110、数据存储装置115、用户输入装置120和网络接口125)经由一个或一个以上数据总线160而连接。数据总线的实例包括ISA、PCI、AGP、PCI、PCI-X(也称为3GIO)和超传输(HyperTransport)数据总线。
图形子系统130进一步与数据总线160和计算机系统100的组件连接。图形子系统130包括图形处理单元(GPU)135和图形存储器。图形存储器包括显示存储器140(例如,帧缓冲器),其用于存储一输出图像的每一像素的像素数据。可直接从CPU105将像素数据提供到显示存储器140。或者,CPU 105向GPU 135提供界定期望的输出图像的数据和/或命令,GPU 135从这些数据和/或命令中产生一个或一个以上输出图像的像素数据。界定期望的输出图像的数据和/或命令存储在附加存储器145中。在一实施例中,GPU135从界定一场景的几何形状、照明、着色、纹理化、运动和/或摄影参数的渲染命令和数据来产生用于输出图像的像素数据。
在另一实施例中,显示存储器140和/或附加存储器145是存储器110的一部分,且与CPU 105共享。或者,显示存储器140和/或附加存储器145是一个或一个以上为专用于图形子系统130而提供的单独的存储器。图形子系统130周期性地输出用于一图像的像素数据,所述图像来自显示存储器140且显示在显示装置150上。显示装置150是能够响应于来自计算机系统100的信号而显示视觉信息的任何装置,包括CRT、LCD、等离子和OLED显示器。计算机系统100可向显示装置150提供模拟或数字信号。
在又一实施例中,图形处理子系统130包括一个或一个以上类似于GPU135的附加GPU155。在另外又一实施例中,图形处理子系统130包括图形协处理器165。图形处理协处理器165和附加GPU 155适于与GPU 135并行地操作。类似于GPU 135,附加GPU155从渲染命令来产生用于输出图像的像素数据。附加GPU 155可联合GPU 135而操作,以同时产生用于一输出图像的不同部分的像素数据,或同时产生用于不同输出图像的像素数据。在一实施例中,图形协处理器165执行针对GPU 135和/或附加GPU 155的有关渲染的任务,例如几何形状变换、着色器计算和背面剔除(backface culling)操作。
附加GPU 155可与GPU 135位于同一电路板上并与GPU 135共享与数据总线160的连接,或者可位于单独地与数据总线160连接的附加电路板上。附加GPU155也可与GPU135集成在同一模块或芯片封装中。附加GPU 155可具有其自己的显示存储器和附加存储器(类似于显示存储器140和附加存储器145),或可与GPU 135共享存储器140和145。在一实施例中,图形协处理器165与计算机系统芯片组(未图示)集成,例如与用于控制数据总线160的北桥(Northbridge)或南桥(Southbridge)芯片集成。
图2说明适于实施本发明实施例的图形处理子系统的流处理单元的示范性链200。流处理单元的链200使用流处理模型,其中由流处理单元的链200连续读取并操作输入元素。链200的每个流处理单元均可对链中的前一个流处理单元的输出进行操作。如下文详细论述,所述流处理单元中的某些或全部可为可编程的。可编程流处理单元读取一输入元素,使用所述输入元素执行程序,并将结果输出到链中的下一个流处理单元。每一流处理单元可具有其自己的独立地操作或与另一流处理单元程序结合操作的单独程序。
输入流205包括用于界定期望的经渲染图像(一个或多个)的渲染命令和数据,包括针对一场景的几何形状、照明、着色、纹理化、运动和/或摄影参数。顶点处理器210从输入流205读取每一渲染命令和任何相关联的数据。渲染数据可包括一个或一个以上未变换的顶点。顶点处理器210对每一未变换的顶点执行顶点程序(也被称为顶点着色器)以产生变换的顶点。顶点处理器210是可编程的,且渲染应用程序可规定待用于任何给定组的顶点的顶点程序。在一简单的实施例中,顶点程序将顶点从三维世界坐标系统变换到二维屏幕坐标系统。可使用更复杂的顶点程序来实施多种视觉效应,包括照明和着色、程序的几何图形和动画操作。
变换的顶点从顶点处理器210传到光栅化级(rasterization stage)215。光栅化级215将一个或一个以上顶点聚集成一几何图元,例如点、线、三角形或四边形。接着光栅化级215将每一几何图元转换成一个或一个以上像素片断。像素片断提供状态以更新一组将可能显示在经渲染图像中的一个或一个以上像素,所述像素由所述像素片断“覆盖”。每一像素片断均具有相关联的输入参数,例如屏幕位置、纹理坐标、颜色值和法向量。
接着像素片断从光栅化级215传到片断处理器220。片断处理器220使用与每一像素片断相关联的信息来确定将可能显示的每一像素的输出颜色值。类似于顶点处理器210,片断处理器是可编程的。对每一像素片断执行像素片断程序(也被称为像素着色器)来确定用于像素的输出颜色值。尽管像素片断独立于顶点程序而操作,但像素片断程序可依赖于由前一个流处理单元产生或通过前一个流处理单元的信息,包括由顶点程序产生的信息。渲染应用程序可规定待用于任何给定组的像素片断的像素片断程序。可使用像素片断程序来实施多种视觉效应,包括照明和着色效应、反射、纹理映射和程序纹理产生。另外,可采用顶点程序与像素片断程序用于例如通用计算、图像处理和信号处理的非视觉目的。
接着将所述组像素输出到光栅操作与存储级225。光栅操作级225将所述组像素与经渲染图像集成。像素可为具有先前写入到经渲染图像的像素的经混合或遮罩的像素。可使用深度缓冲器、alpha缓冲器和模板缓冲器来确定每一传入的像素对经渲染图像的作用(如果存在)。接着将每一传入的像素与任何先前存储的像素值的组合输出到帧缓冲器作为经渲染图像的一部分。
尽管在图2的实例中未图示,但在流处理单元的链200中可包括附加类型的流处理单元。举例来说,镶嵌处理器(tessellation processor)可接收高阶表面的描述并产生若干组几何图元,所述几何图元由顶点界定且接近或对应于所述高阶表面。接着可在下游由流处理单元处理所述若干组几何图元及其相关顶点,所述流处理单元例如为如上文讨论的顶点处理器、光栅化器和片断处理器。
图3说明根据本发明实施例的用于优化一对链接的着色程序的方法300。在步骤303处,对两个链接的着色程序的优化开始。在一实施例中,应用程序将两个着色程序传送到运行时间模块,所述运行时间模块将每一着色程序编译成中间数据格式以便进行优化。在又一实施例中,可用不同的编程语言来表达每一着色程序,且运行时间模块可采用适于每一着色程序语言的编译器来产生呈所需中间数据格式的一个版本的着色程序。在一替代实施例中,运行时间模块的全部或一部分与装置驱动程序集成。
对于方法300,应用程序可显式地规定两个着色程序是(例如)通过经由API调用与运行时间模块通信而链接的或“连系的”。或者,运行时间模块可隐式地确定两个着色程序是否是连系的。举例来说,运行时间模块可对将由图形处理子系统的各个流处理单元执行的着色程序进行分析,以确定第一着色程序的任何输出是否用作对第二着色程序的输入。
将方法300划分为两个阶段,下游阶段305和上游阶段320。如下文详细讨论,方法300重复下游阶段305到上游阶段320,直到完全找到两个着色程序中全部的着色器间的优化。下游阶段305优化将在流处理单元的链中另一链接的着色程序的“下游”执行的着色程序。相反,方法300的上游阶段320优化将在流处理单元的链中“下游”着色程序的“上游”执行的着色程序。举例来说,在图2说明的流处理单元的示范性链200中,由片断处理器220执行的片断着色程序将被视为处在由顶点处理器210执行的顶点程序的“下游”。在此实例中,如果顶点着色程序与片断着色程序是链接的,那么方法300的下游阶段305将优化片断着色程序,且方法300的上游阶段320将优化顶点着色程序。
方法300的下游阶段305以步骤307开始,其中下游着色程序的入口函数。下游着色程序的入口函数是流处理单元开始执行下游着色程序的地方。入口函数的输入和输出参数也被识别。
在步骤309处,方法300基于下游着色程序输出来确定有用代码。在一实施例中,步骤309使用数据流分析以从下游着色程序的输出向后到下游着色程序的入口函数来跟踪程序执行。将确定下游着色程序输出所涉及的下游着色程序的部分指定为有用代码。为了确保优化不影响下游着色程序的输出,数据流分析在指定有用代码方面必须是保守的。如果两个或两个以上交替的执行分支可用于确定下游着色程序输出,那么必须将所有这些执行分支指定为有用代码。数据流依赖性分析也必须正确地说明循环结构和程序调用。
在步骤311处,执行常数传播(constant propagation)。常数传播识别任何作为常数的程序参数,并将这些程序参数的值传播通过下游着色程序,以预先计算附加程序参数值或预先选择执行分支(如果可能)。举例来说,如果从一个或一个以上程序参数计算下游着色程序,且步骤311确定这些程序参数中的一个或一个以上程序参数具有常数值,那么可预先计算下游着色程序输出的中间值或最终值(有时被称为导出常数或统一值)。在另一实例中,如果使用一个或一个以上程序参数来选择下游着色程序的执行分支,且步骤311确定这些程序参数中的一个或一个以上程序参数具有已知的常数值,那么可预先选择适当的执行分支以供执行。
方法300的步骤313识别并消除失效代码。失效代码是下游着色程序的在确定下游着色程序输出时未涉及的部分,即下游着色程序的在步骤309中未被指定为有用代码的部分。失效代码还包括下游着色程序的由步骤311的常数传播使其变为冗余的部分。这包括(例如)下游着色程序的用于计算已用步骤311中预先计算的常数替换的程序参数的部分。另外,失效代码可包括(例如)下游着色程序的在步骤311中未被预先选择用于执行的交替的执行分支。接着步骤313从下游着色程序中去除失效代码,藉此改进性能并减小下游着色程序的大小。
步骤315从下游着色程序的剩余部分中确定下游着色程序的影响下游着色程序输出的输入。如下文讨论,稍后在步骤325中使用这组下游程序输入。
步骤333、335和337在逻辑上是独立的,因此可以任意次序执行或并行地执行。
在步骤315结束时和下游阶段305重复时,上游阶段320的重复以步骤323开始以优化上游着色程序。步骤323确定上游着色程序的入口函数。上游着色程序的入口函数是流处理单元开始执行上游着色程序的地方。入口函数的输入和输出参数也被识别。
方法300的步骤325基于上游着色程序输出子集来确定有用代码。上游着色程序输出子集是对应于在步骤315中识别的下游程序输入集合的上游着色程序输出的全部或一部分。在一实施例中,步骤325使用数据流分析以从上游着色程序输出子集向后到上游着色程序的入口函数来跟踪程序执行。将在确定上游着色程序输出子集时所涉及的上游着色程序的部分指定为有用代码。在计算上游着色程序输出子集时未使用的上游着色程序的部分(包括在计算并非所述上游着色程序输出子集的一部分的其它上游着色程序输出时使用的上游着色程序的部分)不被指定为有用代码。为了确保优化不影响上游着色程序的输出,数据流分析在指定有用代码方面必须是保守的。如果两个或两个以上交替的执行分支可用于确定上游着色程序输出子集,那么必须将所有这些执行分支指定为有用代码。数据流依赖性分析也必须正确地说明循环结构和程序调用。
在步骤327,执行常数传播。常数传播识别任何作为常数的程序参数,并将这些程序参数的值传播通过上游着色程序,以预先计算附加程序参数值或预先选择执行分支(如果可能)。作为一实例,如果从一个或一个以上由步骤327确定为具有常数值的程序参数计算上游着色程序输出,那么步骤327的常数传播可预先计算上游着色程序输出的中间值或最终值。作为另一实例,如果步骤327确定一个或一个以上用于选择适当的执行分支的程序参数是常数,那么,那么步骤327可预先选择若干交替的程序分支中的一者以供执行。
方法300的步骤329识别并消除上游程序中的失效代码。类似于上文所讨论,失效代码是上游着色程序的在确定上游着色程序输出子集时未涉及的部分。这包括上游着色程序的在步骤325中未被指定为有用代码的部分。失效代码还包括上游着色程序的由步骤327的常数传播使其变为冗余的部分,例如上游着色程序的用于计算已用预先计算的常数替换的程序参数的部分,和上游着色程序的未被预先选择用于执行的交替的执行分支。步骤329从上游着色程序中去除失效代码,藉此改进执行性能并减小上游着色程序的大小。
步骤331确定是否需要进一步重复下游阶段305和上游阶段320以优化上游和下游着色程序。步骤331确定上游着色程序输出的子集中的任一者是否为先前没有被步骤311分析为下游着色程序的具有常数值的输入的常数。如果上游着色程序输出的子集中的任一者是先前未被步骤311分析的常数,那么方法300继续进行步骤317。
步骤317将步骤331中识别的上游程序输出的子集中的具有常数值的输出与相应的下游着色程序输入进行匹配。接着将这些下游着色程序输入指定为具有常数值的下游着色程序输入。方法300的下游阶段305接着重复,以步骤311开始。在步骤311的第二次以及随后的重复中,用步骤317中指定的具有常数值的下游着色程序输入来执行常数传播。步骤311将可能导致下游着色程序的附加部分变为冗余,例如用于计算具有常数值的下游程序输出或中间值和用于未使用的执行分支的代码。接着步骤315消除下游着色程序的这些附加冗余部分,藉此进一步改进执行性能并减小下游着色程序的程序大小。
从下游着色程序中消除失效代码可能减少下游着色程序输出的数目,这进而减少了所使用的下游着色程序输入的数目。下游着色程序输入的数目减少可使得某些相应的上游着色程序输出变得不必要,且因此使得上游着色程序本身的又一些部分变得不必要,因此允许进一步优化上游着色程序。
为此,在步骤311和313的附加重复之后,步骤315从下游着色程序的剩余部分中确定下游着色程序的影响下游着色程序输出的输入。在步骤315之后,执行方法300的上游阶段320的附加重复,其中在步骤315中识别的下游程序输入的子集用作步骤325中上游程序输出的子集。执行方法300的上游阶段320的附加重复以进一步优化上游着色程序。使用在步骤315的最近重复中识别的下游程序输入的子集来重复步骤323、325、327和328。这可能导致上游着色程序的附加冗余代码的识别和消除。因此,进一步改进了上游着色程序的执行性能,同时进一步减小了上游着色程序的大小。
如上文讨论,步骤331确定是否需要进一步重复下游阶段305和上游阶段320以优化上游和下游着色程序。如果上游着色程序输出的子集中的任一者是先前未被步骤311分析的常数,那么方法300继续进行步骤317和下游阶段305与上游阶段320的附加重复。否则,方法300进行到步骤333。
步骤333将经优化的下游着色程序从其中间数据格式转换成能够由流处理单元执行的可执行格式。在一实施例中,所述可执行格式是为流处理单元的特定硬件结构定制的汇编语言或机器语言代码的形式。步骤333也可执行对下游着色程序的附加优化,例如循环展开(loop unrolling)。与上文讨论的优化不同,这些附加优化是基于流处理单元的硬件结构,而不是下游着色程序与上游着色程序之间的关系。
类似地,步骤335将经优化的上游着色程序从其中间数据格式转换成能够由流处理单元执行的可执行格式。在一实施例中,所述可执行格式是为流处理单元的特定硬件结构定制的汇编语言或机器语言代码的形式。步骤335也可执行对下游着色程序的附加优化,例如循环展开。与上文讨论的优化不同,这些附加优化是基于流处理单元的硬件结构,而不是下游着色程序与上游着色程序之间的关系。
步骤337确定影响经优化的上游着色程序的输出的上游着色程序输入。如果在确定经优化的上游着色程序的输出时存在未使用的上游着色程序输入,那么步骤337消除用于从存储器中获取这些输入的代码。这种进一步的优化防止浪费存储器带宽来获取未使用的输入值。接着步骤339将经优化的上游和下游着色程序传送到其各自的流处理单元以供执行。
在又一实施例中,可扩展方法300以按顺序优化任意数目的链接的着色程序。这个实施例从待优化的链接的着色程序集合中选择一对两个链接的着色程序。对于所述对选定的链接的着色程序,这个实施例执行上文讨论的步骤303到331,可能导致一对简化的程序。这个实施例接着从待优化的链接的着色程序集合中选择另一对链接的着色程序,并针对新选择的所述对链接的着色程序再次重复步骤303到331。针对若干对链接的着色程序的所有可能组合进一步重复步骤303到331,直到不可能进行进一步优化为止。此时,可针对所有着色程序按顺序执行步骤333、335和337中的硬件代码产生和输入消除。应注意,这个实施例中的所述若干对链接的着色程序不一定是互斥的。举例来说,可用两个或两个以上下游着色程序链接成单个上游着色程序,或者第一对链接的着色程序中的下游着色程序可为第二对链接的着色程序中的上游着色程序。
在又一实施例中,方法300可优化链接的着色程序以获得统一值。统一值是着色语言中的专门术语,其指的是在处理给定数据流期间保持为常数但在所述串流数据的批量之间可能改变值的值。可用与上文讨论的针对常数值的优化类似的方式执行优化统一值。举例来说,除了常数值之外,还可如所描述对统一值执行步骤311、317、327和331。然而,如果由于统一值传播而识别和消除了失效代码,那么当统一值的改变导致链接的着色程序的不同部分变为失效代码时,必须再优化链接的着色程序。
方法300的操作在图4到6中说明,其展示方法300对示范性上游和下游着色程序的效果。表1和2分别说明用OpenGL着色语言编写的但也可用另一语言编写的链接的片段着色程序与顶点着色程序的未经优化的源代码。表1的片段着色程序界定许多程序变量,包括五个统一标量变量、四个变化的标量变量和一个变化的向量变量。类似地,表2的顶点着色程序界定三个统一标量变量和三个变化的标量变量。在此实例中,片段着色程序与顶点着色程序两者均包括变化的变量“varying1”、“varying2”和“varying3”。当这两个着色程序链接在一起时,当执行下游片段着色程序时在上游顶点着色程序中确定的这些共同变量的值被转入。表1和2中统一变量之后的注释指示在优化期间假定的这些统一值的值。
Figure C200580022672D00141
Figure C200580022672D00151
表1—示范性片段着色程序
Figure C200580022672D00152
表2—示范性顶点着色程序
图4A、4B、5A、5B、6A和6B使用数据流格式来说明一对示范性链接的着色程序的优化。所述数据流格式展示着色程序输出与用于计算这些输出的输入变量和运算之间的关联。图4A和4B说明表1和2的一对示范性链接的着色程序的未经优化的形式。
图4A说明表1的示范性片段着色程序的一部分的数据流图400。数据流图400展示用统一变量407、409、411、413、431和433与变化的变量415、417、419、420和421的组合来形成输出变量405。数据流图400还包括基于统一变量与变化的变量两者的条件分支语句425和427,以及完全从统一变量导出的表达式,例如表达式430、432和434。
类似于图4A,图4B说明表2的示范性顶点着色程序的数据流图450。数据流图450展示示范性顶点着色程序的输出变量455、457、459、461、463和465及其与输入变量的关系。如上文讨论,当表1和2的示范性着色程序链接在一起时,输出变量“varying1”455、“varying2”457和“varying3”459和“varying4”461对应于在图4A中为了清楚起见而省略的片段着色程序输入变量“varying1”415、“varying2”417和“varying3”419和“varying4”420。应注意在此实例中,顶点着色程序的某些输出变量没有被链接的片段着色程序使用,例如“varying5”463;然而这些输出变量可能会被与示范性顶点着色程序链接的其它下游着色程序使用。另外,数据流图450展示输入属性470、472和474。与其它变量不同,属性是与由着色程序处理的每一数据项(例如,顶点)相关联的参数。
在通过步骤305到步骤331的第一重复来处理示范性链接的着色程序之后,示范性着色程序的复杂性大体上减小。表3和4说明在步骤307到331的第一重复之后所述对示范性链接的着色程序的源代码。图5A和5B说明呈数据流格式的这些示范性链接的着色程序。
Figure C200580022672D00171
表3—第一次优化重复之后的示范性片段着色程序
Figure C200580022672D00172
表4—第一次优化重复之后的示范性顶点着色程序
图5A说明数据流图500,其对应于表3的经优化的片段着色程序。比较数据流图400与500,可以看到在步骤307到331的第一重复之后,由于条件分支425语句对统一变量407的值的依赖性,因此已将条件分支425语句消除,对于一批量数据来说,所述统一变量407是常数。另外,可用等于432的导出的统一变量505来替换统一变量411和413。在此实例中,用等于表达式434的值的导出的统一值507替换包括统一变量409的表达式434。导出的统一值505和507的使用使图形处理子系统不会对表达式432和434的值进行重复冗余计算。如果对于另一批量数据来说统一变量407、409、411或413改变了值,那么必须再优化此示范性着色程序。
图5B说明数据流图550,其对应于表4的经优化的顶点着色程序。比较数据流图450与550,可以看到在步骤307到331的第一重复之后,输出461被消除,因为示范性链接的片段着色程序不使用此输出。因此,可废除用于计算输出461的所有运算。而且,因为属性472仅用于计算输出461,所以也废除属性472;因此在程序执行期间,图形处理子系统甚至将不会获取属性472,从而节省了存储器带宽。另外,用等于数据流图450中表达式485的值的导出的统一变量555替换未经优化的着色程序中的统一变量480和482。
将图5A和5B的经优化的着色程序与其在图4A和4B中的未经优化的版本进行比较,可以看到步骤307到331的第一重复极大地简化了链接的着色程序。如上文讨论,步骤331确定上游着色程序输出中的任一者是否为常数或先前未考虑的统一值。在此实例中,图5B的顶点着色程序的第一优化重复确定输出455和457均为统一值,所述统一值对于给定批量的数据来说是常数。变化的输出变量“varying1”455等于导出的统一值555。类似地,输出变量“varying2”457等于统一值560。因此,可通过使用对应于顶点着色程序输出455和457的片段着色程序输入415和417作为常数来重复步骤307到331以进一步优化所述对链接的着色程序。
表5和6说明在步骤307到331的第二次重复之后所述对示范性链接的着色程序的源代码。类似地,图6A和6B说明优化的第二重复之后呈数据流格式的此对示范性链接的着色程序。
Figure C200580022672D00181
表5—第二次优化重复之后的示范性片段着色程序
Figure C200580022672D00191
表6—第二次优化重复之后的示范性顶点着色程序
图6A的数据流图600是图4A的图400中所示的片段着色程序的经优化版本。比较这两个图,可以看到现已消除条件分支427。这是用视为常数的变化的输入变量415和417来估计条件分支427的结果,所述输入变量415和417是在示范性顶点着色程序的优化的先前重复中确定的。另外,已用导出的统一值替换片段着色程序中的所有原始的统一值,从而消除了冗余的计算。
图6B的数据流图650展示第二次优化重复的结果。将此图与相应的未经优化的图450进行比较,可以看到已消除变化的输出变量455和457。因为这两个输出变量均将统一值输出到链接的下游着色程序,所以可在上游顶点着色程序中消除这些值并用链接的下游着色程序中的常数来替换。
在此实例中,在步骤307到331的第二次重复之后,没有新的常数或统一输出位于上游着色程序中。因此,在步骤331之后,方法300继续进行到步骤333以进行进一步优化和代码产生。进一步优化可包括用单个有效指令代替若干指令。举例来说,可用单个的乘法与累加指令替换其后为加法指令的乘法指令。可执行附加优化以利用图形处理子系统的管线式硬件。举例来说,指令可交叉存取以便更好地进行调度。表7和8说明步骤339之后所述对示范性链接的着色程序。
表7一附加优化之后的示范性片段着色程序
Figure C200580022672D00193
表8—附加优化之后的示范性顶点着色程序
表7的片段着色程序对应于表1的未经优化的示范性片段着色程序。比较这两个表中的程序代码,可以看到方法300将片段着色程序从大约十二行高级着色语言代码减少为仅两个汇编语言指令。类似地,表2中的示范性顶点着色程序从其原始形式的约十个指令优化为表8中的仅六个指令。
图7说明适于实施本发明实施例的着色语言结构700。着色语言结构包括应用程序705。在一实施例中,应用程序705适于命令图形处理子系统740渲染一个或一个以上三维对象。应用程序705载入界定将要渲染的对象的对象数据710,包括几何形状、照明和纹理化的数据。应用程序705还从上游着色程序715和下游着色程序720载入源代码。在一实施例中,上游着色程序715和下游着色程序720分别可为顶点着色程序和片段着色程序。
为了使用上游着色程序715和下游着色程序720来渲染对象,应用程序705将着色程序发送到API驱动程序725。另外,应用程序705将命令发送到API驱动程序725以引导API驱动程序将上游着色程序715和下游着色程序720链接在一起,并编译和优化链接的着色程序。在一实施例中是API驱动程序725的一部分的流处理语言编译器730执行着色程序的编译和优化。在一替代实施例中,流处理语言编译器730是与API驱动程序725或应用程序705动态连系的外部模块或库。
接着应用程序705将对象数据710连同指示应渲染对象数据710的命令一起发送到API驱动程序725。因此,API驱动程序725将对象数据710和经编译和优化版本的链接的着色程序715和720发送到图形处理子系统740。图形处理子系统740执行链接的着色程序以处理对象数据710并渲染对象。
本发明提供一种系统,其用于基于流处理程序之间的关系来优化流处理程序。尽管已参照用于计算机图形应用程序的流处理系统讨论了本发明,但本发明适用于具有两个或两个以上可编程流处理单元的任何流处理系统,包括音频应用程序和通信应用程序。已参照本发明的特定实例和实施例讨论了本发明;然而,这些只是对本发明的说明而不是限制。因此,本发明的范围将仅仅由权利要求书确定。

Claims (10)

1.一种用于优化用于由一流处理系统执行的流处理程序的方法,其中所述流处理系统包括一第一和一第二可编程流处理单元,其中所述第二流处理单元与所述第一流处理单元连接,使得所述第一流处理单元的输出用于作为所述第二流处理单元的输入,所述方法包含:
接收一用于由一第一流处理单元执行的第一流处理程序,其中所述第一流处理程序包括一输出参数;
接收一用于由一第二流处理单元执行的第二流处理程序,其中所述第二流处理程序包括一对应于所述第一流处理程序的所述输出参数的输入参数;和
基于所述第二流处理程序的所述输入参数与所述第一流处理程序的所述输出参数之间的对应来优化所述第一和第二流处理程序。
2.根据权利要求1所述的方法,其中优化所述第一和第二流处理程序包括从所述第一流处理程序中消除用于计算一未被所述第二流处理程序使用的附加输出参数的失效程序代码。
3.根据权利要求1所述的方法,其中优化所述第一和第二流处理程序包括:
响应于确定所述第一流处理程序的所述输出参数是一常数来传播用于所述第二流处理程序的所述输入参数的一常数值;和
从所述第二流处理程序中消除由于传播一常数值而成为冗余的失效程序代码。
4.根据权利要求1所述的方法,其中优化所述第一和第二流处理程序包括:
响应于确定所述第一流处理程序的所述输出参数是一统一值来传播用于所述第二流处理程序的所述输入参数的一统一值;和
从所述第二流处理程序中消除由于传播一统一值而成为冗余的失效程序代码。
5.根据权利要求1所述的方法,其中优化所述第一和第二流处理程序包括复数次重复交替地优化所述第二流处理程序和所述第一流处理程序直到基于所述第二流处理程序的所述输入参数与所述第一流处理程序的所述输出参数之间的所述对应而优化完所述第一和第二流处理程序两者为止。
6.一种信息处理装置,其中所述信息处理装置包括一流处理系统,所述流处理系统包括一第一和一第二可编程流处理单元,其中所述第二流处理单元与所述第一流处理单元连接,使得所述第一流处理单元的输出用于作为所述第二流处理单元的输入,其中所述信息处理装置包含:
用于接收一用于由一第一流处理单元执行的第一流处理程序的构件,其中所述第一流处理程序包括一输出参数;
用于接收一用于由一第二流处理单元执行的第二流处理程序的构件,其中所述第二流处理程序包括一对应于所述第一流处理程序的所述输出参数的输入参数;和用于基于所述第二流处理程序的所述输入参数与所述第一流处理程序的所述输出参数之间的对应来优化所述第一和第二流处理程序的构件;
其中所述用于优化所述第一和第二流处理程序的构件包括复数次重复交替地优化所述第二流处理程序和所述第一流处理程序直到基于所述第二流处理程序的所述输入参数与所述第一流处理程序的所述输出参数之间的所述对应而优化完所述第一和第二流处理程序两者为止。
7.根据权利要求6所述的信息处理装置,其中优化所述第一和第二流处理程序包括从所述第一流处理程序中消除用于计算一未被所述第二流处理程序使用的附加输出参数的失效程序代码。
8.根据权利要求6所述的信息处理装置,其中所述可编程流处理单元中的一者为一可编程顶点处理器。
9.一种用于渲染一图像的图形处理系统,其包括权利要求6所述的信息处理装置。
10.根据权利要求9所述的系统,其中所述图形处理系统包括一图形处理单元。
CNB2005800226721A 2004-07-02 2005-06-30 用于优化流处理程序的方法、装置和系统 Active CN100507852C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/883,893 US7426724B2 (en) 2004-07-02 2004-07-02 Optimized chaining of vertex and fragment programs
US10/883,893 2004-07-02

Publications (2)

Publication Number Publication Date
CN1997964A CN1997964A (zh) 2007-07-11
CN100507852C true CN100507852C (zh) 2009-07-01

Family

ID=35515516

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005800226721A Active CN100507852C (zh) 2004-07-02 2005-06-30 用于优化流处理程序的方法、装置和系统

Country Status (5)

Country Link
US (1) US7426724B2 (zh)
JP (1) JP4549392B2 (zh)
KR (1) KR100860427B1 (zh)
CN (1) CN100507852C (zh)
WO (1) WO2006014388A2 (zh)

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090027383A1 (en) 2003-11-19 2009-01-29 Lucid Information Technology, Ltd. Computing system parallelizing the operation of multiple graphics processing pipelines (GPPLs) and supporting depth-less based image recomposition
US7808499B2 (en) 2003-11-19 2010-10-05 Lucid Information Technology, Ltd. PC-based computing system employing parallelized graphics processing units (GPUS) interfaced with the central processing unit (CPU) using a PC bus and a hardware graphics hub having a router
US8085273B2 (en) 2003-11-19 2011-12-27 Lucid Information Technology, Ltd Multi-mode parallel graphics rendering system employing real-time automatic scene profiling and mode control
US20080094403A1 (en) * 2003-11-19 2008-04-24 Reuven Bakalash Computing system capable of parallelizing the operation graphics processing units (GPUs) supported on a CPU/GPU fusion-architecture chip and one or more external graphics cards, employing a software-implemented multi-mode parallel graphics rendering subsystem
US20070291040A1 (en) * 2005-01-25 2007-12-20 Reuven Bakalash Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation
US7961194B2 (en) * 2003-11-19 2011-06-14 Lucid Information Technology, Ltd. Method of controlling in real time the switching of modes of parallel operation of a multi-mode parallel graphics processing subsystem embodied within a host computing system
US8497865B2 (en) 2006-12-31 2013-07-30 Lucid Information Technology, Ltd. Parallel graphics system employing multiple graphics processing pipelines with multiple graphics processing units (GPUS) and supporting an object division mode of parallel graphics processing using programmable pixel or vertex processing resources provided with the GPUS
US20080094404A1 (en) * 2003-11-19 2008-04-24 Reuven Bakalash Computing system having multi-mode parallel graphics rendering subsystem including multiple graphics processing pipelines (GPPLS) and supporting automated division of graphics commands and data during automatic mode control
US7746347B1 (en) * 2004-07-02 2010-06-29 Nvidia Corporation Methods and systems for processing a geometry shader program developed in a high-level shading language
US8044951B1 (en) 2004-07-02 2011-10-25 Nvidia Corporation Integer-based functionality in a graphics shading language
US20090096798A1 (en) * 2005-01-25 2009-04-16 Reuven Bakalash Graphics Processing and Display System Employing Multiple Graphics Cores on a Silicon Chip of Monolithic Construction
CN101849227A (zh) 2005-01-25 2010-09-29 透明信息技术有限公司 在单片构造的硅芯片上采用多个图形核心的图形处理和显示系统
KR100668326B1 (ko) * 2005-02-01 2007-01-12 삼성전자주식회사 3차원 그래픽스 데이터를 랜더링하는 방법 및 장치
ATE486316T1 (de) * 2005-08-30 2010-11-15 Sony Ericsson Mobile Comm Ab Verfahren und software für die optimierung der positionierung von software-funktionen in einem speicher
US7502029B2 (en) * 2006-01-17 2009-03-10 Silicon Integrated Systems Corp. Instruction folding mechanism, method for performing the same and pixel processing system employing the same
US7873952B2 (en) * 2006-03-09 2011-01-18 Oracle America, Inc. Code transformation to optimize fragments that implement constant loading
US8799876B2 (en) * 2006-09-29 2014-08-05 Intel Corporation Method and apparatus for assigning subroutines
US8069440B2 (en) * 2006-10-27 2011-11-29 Oracle America, Inc. Adaptive code through self steered execution
US9038041B2 (en) * 2006-12-04 2015-05-19 Tibco Software, Inc. Stream processor with compiled programs
US8769485B2 (en) * 2006-12-04 2014-07-01 Tibco Software, Inc. Data parallelism and parallel operations in stream processing
US20080141268A1 (en) * 2006-12-12 2008-06-12 Tirumalai Partha P Utility function execution using scout threads
US8533697B2 (en) * 2007-02-14 2013-09-10 The Mathworks, Inc. Graphical processing unit (GPU) arrays providing high computational capabilities in a computing environment
US8276164B2 (en) 2007-05-03 2012-09-25 Apple Inc. Data parallel computing on multiple processors
CN101657795B (zh) 2007-04-11 2013-10-23 苹果公司 多处理器上的数据并行计算
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
US8341611B2 (en) * 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US11836506B2 (en) 2007-04-11 2023-12-05 Apple Inc. Parallel runtime execution on multiple processors
US8296738B1 (en) * 2007-08-13 2012-10-23 Nvidia Corporation Methods and systems for in-place shader debugging and performance tuning
US8276129B1 (en) 2007-08-13 2012-09-25 Nvidia Corporation Methods and systems for in-place shader debugging and performance tuning
US8677337B2 (en) * 2008-05-01 2014-03-18 Oracle America, Inc. Static profitability control for speculative automatic parallelization
US8359587B2 (en) * 2008-05-01 2013-01-22 Oracle America, Inc. Runtime profitability control for speculative automatic parallelization
US8739141B2 (en) * 2008-05-19 2014-05-27 Oracle America, Inc. Parallelizing non-countable loops with hardware transactional memory
US8225325B2 (en) 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
US8286198B2 (en) 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
US8612929B2 (en) * 2008-12-10 2013-12-17 Oracle America, Inc. Compiler implementation of lock/unlock using hardware transactional memory
US8528001B2 (en) * 2008-12-15 2013-09-03 Oracle America, Inc. Controlling and dynamically varying automatic parallelization
US8203566B2 (en) * 2009-05-29 2012-06-19 Microsoft Corporation Fixed function pipeline application remoting through a shader pipeline conversion layer
US8561046B2 (en) * 2009-09-14 2013-10-15 Oracle America, Inc. Pipelined parallelization with localized self-helper threading
US9009692B2 (en) * 2009-12-26 2015-04-14 Oracle America, Inc. Minimizing register spills by using register moves
GB201103699D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphic processing
GB201103698D0 (en) * 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphics processing
US9195501B2 (en) * 2011-07-12 2015-11-24 Qualcomm Incorporated Instruction culling in graphics processing unit
US9529575B2 (en) 2012-02-16 2016-12-27 Microsoft Technology Licensing, Llc Rasterization of compute shaders
US11302054B2 (en) 2014-04-05 2022-04-12 Sony Interactive Entertainment Europe Limited Varying effective resolution by screen location by changing active color sample count within multiple render targets
US10783696B2 (en) 2014-04-05 2020-09-22 Sony Interactive Entertainment LLC Gradient adjustment for texture mapping to non-orthonormal grid
US9865074B2 (en) 2014-04-05 2018-01-09 Sony Interactive Entertainment America Llc Method for efficient construction of high resolution display buffers
US9495790B2 (en) 2014-04-05 2016-11-15 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping to non-orthonormal grid
US10068311B2 (en) 2014-04-05 2018-09-04 Sony Interacive Entertainment LLC Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9710881B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
US9836816B2 (en) 2014-04-05 2017-12-05 Sony Interactive Entertainment America Llc Varying effective resolution by screen location in graphics processing by approximating projection of vertices onto curved viewport
US9710957B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Graphics processing enhancement by tracking object and/or primitive identifiers
WO2015154004A1 (en) 2014-04-05 2015-10-08 Sony Computer Entertainment America Llc Method for efficient re-rendering objects to vary viewports and under varying rendering and rasterization parameters
US9652882B2 (en) 2014-04-05 2017-05-16 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping for multiple render targets with resolution that varies by screen location
US10068370B2 (en) 2014-09-12 2018-09-04 Microsoft Technology Licensing, Llc Render-time linking of shaders
US10007965B2 (en) * 2014-12-16 2018-06-26 Intel Corporation Dynamic kernel modification for graphics processing units
KR20160074154A (ko) 2014-12-18 2016-06-28 삼성전자주식회사 컴파일러
KR102472131B1 (ko) * 2015-09-03 2022-11-29 삼성전자주식회사 쉐이더 프로그램을 생성하는 방법 및 장치
US10140678B2 (en) * 2015-12-18 2018-11-27 Intel Corporation Specialized code paths in GPU processing
EP3380899B1 (en) * 2016-01-11 2020-11-04 Siemens Aktiengesellschaft Program randomization for cyber-attack resilient control in programmable logic controllers
JP2018081592A (ja) * 2016-11-17 2018-05-24 富士通株式会社 コンパイルプログラム、コンパイル方法、およびコンパイル装置
US10642625B2 (en) * 2017-08-11 2020-05-05 Red Hat, Inc. Branch rewriting device feature optimization
US10726605B2 (en) * 2017-09-15 2020-07-28 Intel Corporation Method and apparatus for efficient processing of derived uniform values in a graphics processor
US10643369B2 (en) * 2018-05-30 2020-05-05 Advanced Micro Devices, Inc. Compiler-assisted techniques for memory use reduction in graphics pipeline
CN109726816A (zh) * 2018-12-12 2019-05-07 中国航空工业集团公司西安航空计算技术研究所 一种汇编级染色器程序链接优化方法
CN109872402B (zh) * 2019-01-24 2021-03-02 腾讯科技(深圳)有限公司 3d模型处理方法、装置、计算机设备和存储介质
US20220357933A1 (en) * 2021-05-06 2022-11-10 Wisconsin Alumni Research Foundation Computer Implemented Program Specialization
US20240046543A1 (en) * 2022-08-05 2024-02-08 Qualcomm Incorporated Runtime mechanism to optimize shader execution flow

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5005137A (en) * 1989-01-09 1991-04-02 Bmc Software, Inc. Method for optimizing data streams containing two-byte characters

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05342012A (ja) * 1992-06-10 1993-12-24 Sony Corp コンパイル方法およびコンパイラ
US5977977A (en) 1995-08-04 1999-11-02 Microsoft Corporation Method and system for multi-pass rendering
US5870097A (en) 1995-08-04 1999-02-09 Microsoft Corporation Method and system for improving shadowing in a graphics rendering system
US6044225A (en) * 1996-03-13 2000-03-28 Diamond Multimedia Systems, Inc. Multiple parallel digital data stream channel controller
US5812854A (en) * 1996-03-18 1998-09-22 International Business Machines Corporation Mechanism for integrating user-defined instructions with compiler-generated instructions and for optimizing the integrated instruction stream
JPH09274570A (ja) * 1996-04-08 1997-10-21 Mitsubishi Electric Corp コンパイル方法及びコンパイラシステム
JP2000267860A (ja) * 1999-03-17 2000-09-29 Matsushita Electric Ind Co Ltd アセンブラ最適化方法およびその装置
US6807620B1 (en) * 2000-02-11 2004-10-19 Sony Computer Entertainment Inc. Game system with graphics processor
US6760822B2 (en) 2001-03-30 2004-07-06 Intel Corporation Method and apparatus for interleaving data streams
US7159212B2 (en) * 2002-03-08 2007-01-02 Electronic Arts Inc. Systems and methods for implementing shader-driven compilation of rendering assets
US6983456B2 (en) * 2002-10-31 2006-01-03 Src Computers, Inc. Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms
US7570267B2 (en) 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5005137A (en) * 1989-01-09 1991-04-02 Bmc Software, Inc. Method for optimizing data streams containing two-byte characters

Also Published As

Publication number Publication date
JP2008505422A (ja) 2008-02-21
CN1997964A (zh) 2007-07-11
KR20070039936A (ko) 2007-04-13
KR100860427B1 (ko) 2008-09-25
JP4549392B2 (ja) 2010-09-22
WO2006014388A2 (en) 2006-02-09
US20060005178A1 (en) 2006-01-05
US7426724B2 (en) 2008-09-16
WO2006014388A3 (en) 2007-03-15

Similar Documents

Publication Publication Date Title
CN100507852C (zh) 用于优化流处理程序的方法、装置和系统
Kessenich et al. OpenGL Programming Guide: The official guide to learning OpenGL, version 4.5 with SPIR-V
US7659901B2 (en) Application program interface for programmable graphics pipeline
US8098251B2 (en) System and method for instruction latency reduction in graphics processing
US7830390B2 (en) Color computation of pixels using a plurality of vertex or fragment shader programs
US8310484B2 (en) Efficient processing of operator graphs representing three-dimensional character animation
US8373717B2 (en) Utilization of symmetrical properties in rendering
US20130063460A1 (en) Visual shader designer
US20080266287A1 (en) Decompression of vertex data using a geometry shader
US7463259B1 (en) Subshader mechanism for programming language
US20080266286A1 (en) Generation of a particle system using a geometry shader
CN104167015B (zh) 一种基于表面信号拟合的着色器简化方法、装置及图形渲染方法
CN109544674B (zh) 一种体积光实现方法及装置
KR20190109413A (ko) 비순차적 픽셀 셰이더 익스포트
US20060022990A1 (en) Generating subdivision surfaces on a graphics hardware with floating-point fragment shaders
JP5864474B2 (ja) 空間を分割してグラフィックスを処理する画像処理装置及び画像処理方法
US20170178279A1 (en) Graphics processing systems
Nery et al. Efficient hardware implementation of Ray Tracing based on an embedded software for intersection computation
Nery et al. An efficient parallel architecture for ray-tracing
CN101127124A (zh) 在显示用图形对象绘制期间变换对象顶点的方法及设备
CN117369820B (zh) 渲染流程图的生成方法、装置及设备
Kolpakov et al. Software for heterogeneous computer systems and structures of data processing systems with increased performance
JP2017123034A (ja) Cipを備える画像処理装置及び画像処理方法
Kurfess et al. GPU for CAD
CN114359454A (zh) 一种图形绘制设备、方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant