CN103885752A - 多线程处理单元中可编程的混合 - Google Patents
多线程处理单元中可编程的混合 Download PDFInfo
- Publication number
- CN103885752A CN103885752A CN201310714673.9A CN201310714673A CN103885752A CN 103885752 A CN103885752 A CN 103885752A CN 201310714673 A CN201310714673 A CN 201310714673A CN 103885752 A CN103885752 A CN 103885752A
- Authority
- CN
- China
- Prior art keywords
- data
- married operation
- pixel data
- processing unit
- graphics processing
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/503—Blending, e.g. for anti-aliasing
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2340/00—Aspects of display data processing
- G09G2340/10—Mixing of images, i.e. displayed pixel being the result of an operation, e.g. adding, on the corresponding input pixels
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
用于高效地渲染内容的技术将每个复杂的混合模式简化为一系列基本的混合操作。所述系列的混合操作在再循环管线内执行,直到计算出最终的混合值。所述再循环管线位于图形处理单元的颜色光栅操作单元内,用于有效访问图像缓冲区数据。
Description
技术领域
本发明概括地来说涉及的是多线程计算机架构,更具体地,涉及的是多线程处理单元中可编程的混合。
背景技术
本领域已知的许多重要的图形渲染标准,如OpenVG、SVG、Cairo、Skia、JavaFX、Adobe Flash、Adobe PDF、Apple’s Quartz2D和HTML5需要不能直接得到常规的图形处理单元(GPU)支持的复杂的混合模式。因此,根据这些图形渲染标准所格式化的图形内容通常由中央处理单元(CPU)进行渲染,中央处理单元利用一般的处理操作能够实现所述复杂的混合模式。然而,与GPU相比,CPU不能提供有效、高吞吐量的处理,从而潜在地导致用于所述图形内容的相当低的基于CPU的渲染性能。
常规的GPU将图形渲染工作组织为一系列的图形对象,所述图形对象各自分解为一系列片段(fragments),然后这些片段被传送到片段着色器。所述片段着色器计算用于每个片段的颜色并生成相应的经着色的片段,所述经着色的片段典型地包括颜色和不透明度信息。然后每个经着色的片段被传送到颜色光栅操作(CROP)单元,所述颜色光栅操作单元配置为将所述经着色的片段与针对存储在帧缓冲区的相应的像素的颜色数据进行混合。所述CROP单元照常利用两个乘积电路的固定函数的和,来实施该混合操作,所述CROP单元没有直接实现所述复杂的混合模式。
GPU内的所述图形渲染标准所需要的复杂的混合模式的一种执行方法是对片段着色器进行编程,以实现所述复杂的混合模式。尽管片段着色器是高度可编程的,且能够执行所述复杂的混合模式,但在常规的GPU中,从所述片段着色器到帧缓冲区存储器的读写延迟是足够长的,以致渲染性能受损且很有可能降到在同时期的CPU上可达到的渲染性能之下。
如前面所说明的,本领域所需的是用于在GPU内有效地渲染复杂的混合模式的技术。
发明内容
本发明的一个实施例阐述了用于实施可编程的混合操作的方法,所述方法包括基于与所述可编程混合操作相关联的指令序列接收至少用于处理的源像素数据或目标(destination)像素数据,确定需要第一混合操作,其中所述第一混合操作由来自所述指令序列的第一指令指定,执行所述第一混合操作以生成第一混合结果,执行第二混合操作以生成第二混合结果,其中所述第二混合操作由来自所述指令序列的第二指令指定,和存储所述第二混合结果。所述可编程的混合操作可以指定具有任意数目的指令的任意指令序列。
本发明的其它实施例包括但不限于,包含指令的计算机可读的存储介质,当处理单元执行所述指令时,使得所述处理单元实施本文所描述的技术,以及计算机设备,所述计算机设备包含配置为实施本文所描述的技术的处理单元。
所公开的技术的一个优势是,它能够使需要复杂的混合模式的图形内容高效地由图形处理单元进行渲染。
附图说明
因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其它等效的实施例。
图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
图3A是根据本发明的一个实施例的、图2的前端的框图;
图3B是根据本发明的一个实施例的、图2的并行处理单元(PPU)之一内的通用处理集群的框图;
图3C是根据本发明的一个实施例的、图3B的流多处理器的一部分的框图;
图4是根据本发明的一个实施例的、图形处理管线的概念性示意图,图2中的一个或多个PPU可配置为实现所述图形处理管线;
图5示出了根据本发明的一个实施例的配置实现一遍(one pass)迭代混合操作的混合电路;
图6示出了根据本发明的一个实施例的配置为实现迭代的混合操作的颜色光栅操作混合单元;
图7是根据本发明的一个实施例的用于配制颜色光栅操作混合单元以执行迭代的混合操作的方法步骤的流程图;
图8是根据本发明的一个实施例的用于实施混合操作的方法步骤的流程图。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
系统概述
图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到显示设备110(例如常规的基于阴极射线管或液晶显示器的监视器)的图形子系统。系统盘114也连接到I/O桥107。交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其它端口连接、压缩光盘(CD)驱动器、数字视频光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI-Express、AGP(加速图形端口)、超传输或者任何其它总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或更多个CPU102以及两个或更多个并行处理子系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其它PPU202。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
现在返回参考图2以及图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
存储器接口214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的普通技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
任何一个GPC208都可以处理要被写到并行处理存储器204内的任何DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任何分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
多个并发任务调度
可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。
图3A为根据本发明的一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD322的指针的列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集数个任务。之后可以基于优先级信息或使用其它技术诸如轮叫调度来调度所收集的任务。
工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针的列表以使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD322生成子任务。
不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入入栈缓冲区或传送到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU102。通过入栈缓冲区提供的任务与子任务之间的另一个区别是通过入栈缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间动态生成的。
任务处理概述
图3B为根据本发明的一个实施例的在图2的PPU202之一内的GPC208的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。
经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目标来控制工作分布交叉开关330。
在一个实施例中,每个GPC208包括M个SM310,其中M≥1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元—在图3C中示出为Exec单元302和LSU303),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点操作(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来执行不同的操作。
如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在任何给定时间在GPC208中可以执行多达G*M个线程组。
此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
每个SM310包含一级(L1)高速缓存(图3C所示)或使用用于执行加载和存储操作的SM310外部的相应L1高速缓存中的空间。每个SM310都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任何存储器可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC208内,其配置为接收并保持由SM310所请求的经由存储器接口214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。
每个GPC208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)328。在其它实施例中,MMU328可以驻留在存储器接口214内。MMU328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存行索引。MMU328可以包括地址转译后备缓冲区(TLB)或可以驻留在多处理器SM310或L1高速缓存或GPC208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。
在图形和计算应用中,GPC208可配置为使得每个SM310耦连到用于执行纹理映射操作例如确定纹理样本位置、读取纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SM310内的L1高速缓存读取纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM310或纹理单元315、preROP325可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任何数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、L1高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。
本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
图3C为根据本发明的一个实施例的图3B的SM310的框图。SM310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令L1高速缓存370。线程束调度器和指令单元312从指令L1高速缓存370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。
SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302)一个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD322的标识符。
如果TMD322是网格TMD,则TMD322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD322中或TMD322可以存储指向将由CTA所处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。
如果TMD322是队列TMD,那么使用TMD322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD322分开存储,在该情况下TMD322存储指向该队列的队列指针。有利地,当代表子任务的TMD322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD322相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM310内的任何exec单元302)可以通过存储器接口214访问全局存储器。可以将全局存储器的各部分存储在L1高速缓存320中。
每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致L1高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通道的一致值或常数值。
共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在L1高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。
每个SM310中的L1高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在L1高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和L1高速缓存320。
图形管线架构图
图4是根据本发明的一个实施例的、图形处理管线400的概念性示意图,图2中的一个或多个PPU202可配置为实现该图形处理管线400。例如,SM310中的一个可以配置为实施一个或多个顶点处理单元415、几何处理单元425、和片段处理单元460的函数(function)。也可以由GPC208内的其它处理引擎和相应的分区单元215来实施数据汇编器410、基元汇编器420、光栅器455和颜色光栅操作(CROP)单元465的函数。或者,图形处理管线400可以使用用于一种或多种函数的专用处理单元来实现。
数据汇编器410处理单元收集顶点数据,用于高阶表面、基元等等,并输出所述包括顶点属性的顶点数据到顶点处理单元415。顶点处理单元415是配置为执行顶点着色器程序的可编程的执行单元,从而如由所述顶点渲染器程序所指定的,照亮(lighting)和转化顶点数据。例如,可以对顶点处理单元415进行编程以将所述顶点数据从基于对象的坐标表示(对象空间)转化到替代地基于诸如世界空间或规格化设备坐标(NDC)空间等坐标系统。顶点处理单元415可以通过数据汇编器410来读取存储在L1高速缓存320、并行处理存储器204或系统存储器104中的数据,用于处理所述顶点数据时使用。
基元汇编器420从顶点处理单元415接收顶点属性,根据需要读取经存储的顶点属性,并构建用于由几何处理单元425处理的图形基元。图形基元包括三角形、线段、点等等。几何处理单元425为配置为执行几何着色器程序的可编程的执行单元,从而如所述几何着色器程序所指定的,转化从基元汇编器420所接收到的图形基元。例如,可以对几何处理单元425进行编程以将所述图形基元再分为一个或多个新图形基元,并计算诸如平面方程系数等用于光栅化所述新图形基元的参数。
在一些实施例中,几何处理单元425还可以添加或删除所述几何流中的元素。几何处理单元425输出所述指定新图形基元的参数和顶点到视口范围(viewport scale)、筛选(cull)和裁剪单元450。几何处理单元425可以读取存储在并行处理器204或系统存储器104中的数据,用于处理所述几何数据时使用。视窗范围、筛选和夹子单元450执行裁剪、筛选和视口缩放(viewport scaling),并输出经处理的图形基元到光栅器455。
光栅器455扫描检查(scan)转换所述新图形基元并输出片段和覆盖数据到片段处理单元460。此外,光栅器455可以配置为执行z筛选和其它基于z的优化。
片段处理单元460是配置为执行片段着色器程序的可编程的执行单元,从而如所述片段着色器程序所指定的,转化从光栅器455所接收到的片段。例如,可以对片段处理单元460进行编程以执行诸如透视纠正、纹理映射、着色、混合等操作,从而产生输出到CROP单元465的经着色的片段。片段处理单元460可以读存储在并行存储器204或系统存储器104中的数据,用于处理所述片段数据时使用。可以以像素、样本或其它粒度对片段进行着色,这取决于所编程的采样率。
CROP单元465是执行光栅操作的处理单元,诸如颜色混合等,并输出像素数据为经处理的图形数据,用于图形存储器中的存储。所述经处理的图形数据可以存储在图形存储器,例如并行处理存储器204、和/或系统存储器104中,用于在显示设备110上显示或用于进一步由CPU102或并行处理子系统112处理。在某些实施例中,每个像素包含多个颜色样本。在这样的实施例中,CROP单元465配置为压缩写到存储器的颜色样本数据并解压缩从存储器中读取的颜色样本数据。该压缩技术的目标不是减小存储器中图像的尺寸,而是通过由需要处理的一组样本值表示用于给定像素的所有的样本来减少与所述图像相关的处理。在典型的场景中,多数像素包括等值的颜色样本,且该压缩技术使改进的处理性能成为可能。结合多个颜色样本以生成在得到的图像内的反锯齿的像素,用于显示或进一步处理。当与特定像素相关联的所有颜色样本的值相等时,为所述像素存储一种颜色样本,且设定用于所述像素的状态信息以表明所述样本被压缩。在一个实施例中,当相应的片段充分覆盖所述像素时,与像素相关联的样本将具有相等的颜色。可以结合在所述图像内的针对每个像素的颜色样本,以生成反锯齿的像素,用于显示。
迭代的混合单元
本发明的实施例使诸如GPU等并行处理子系统能够实施在图4的CROP465内的复杂的混合操作。由于这些可用的复杂的混合操作,用于诸如OpenVG、SVG、Cairo、Skia、JavaFX、Adobe Flash、Adobe PDF、Apple’s Quartz2D和HTML5等图形渲染标准的内容可以在所述GPU内被有效地渲染,从而有利地改进系统性能。为了支持复杂的混合操作,CROP465配置为实施关于源数据和目标数据的多道(multi-pass)混合操作。在一个实施例中,所述多道混合操作的每道包含两个乘积的和,如以下所更详细地阐述的。
常规的CROP单元实现包含两个乘积的和的混合,如以下方程式1所指定的:
src_color*src_coefficient+dst_color*dst_coefficient (Eq.1)
这里,‘src’是指从诸如片段着色器460中所计算的颜色和不透明数据等从上游所接收到的数据。还有这里,’dst’是指已经存储在诸如帧缓冲区存储器等渲染目标中数据。例如,将70%的不透明度的上游src_颜色与dst_颜色结合的混合操作将用为0.70的src_系数和为0.30的dst_系数来实施,以致src_颜色和dst_颜色分别对存储在所述帧缓冲区中的混合颜色贡献70%和30%。常规的GPU支持这类型的作为本机的(native)CROP混合操作的混合操作,这类型的混合操作实质上是单道(单遍)的混合。然而,更复杂的混合操作不能作为CROP混合操作得到常规的支持。复杂的混合操作得不到常规的CROP单元支持的一个实例是在Adobe的Flash格式中所实现的柔光(soft light)混合操作。以下在表1中示出了所述柔光混合。表1
本发明的实施例通过将每个复杂的混合操作分解成一系列简单的混合道来实现复杂的混合操作,其中,每个混合道只需要两个乘积的和。例如,以上显示在表1中的复杂的混合操作可以分解并实现为三个混合道,每个混合道包括两个乘积的和。这三个混合道在以下的表2中示出。将条件的执行和临时存储添加到CROP混合单元的基本函数。用变量‘T’表示的临时存储使中间结果能够在混合道之间使用。
表2
在表2的实例中,道1的条件算子“if(src<=0.5)”可以求值以在道1期间执行道1的赋值运算“T=dst*src+0.5*dst”。道2的条件算子“if(src>0.5)”可以求值以在道2期间执行道2的赋值运算“T=(1-dst)*src–0.5”。类似地,道3的条件算子“if(src>0.5)”可以求值以在道2期间执行道3的赋值运算“T=T+1.5*dst”。如所指定的,所述道1的条件算子与所述道2和道3的条件算子是互补兼容的,以致要么将为给定的src数据执行所述道1的赋值运算,要么将为所述src数据执行所述道2和道3的赋值运算。在一个实施例中,用发生在道1或道2和道3两者中的赋值运算为每个被混合的像素实施道1、道2和道3。完成道3之后,变量T保留用于相应的像素的最终的混合值。可以将这个最终混合值写到帧缓冲区图像。
如上所示出的,在一道期间,与给定的混合道相关联的临时值可以存储在临时变量‘T’中,并可用于随后的混合道中的混合计算。一种或多种临时变量数组在本文表示为T[k],其中,“k”表示用于选择一种或多种临时变量T[k]中的一个的数组索引。在一个实施例中,在开始在新的像素上的混合操作之前,最初将每个T[k]设置为零。所述临时变量行为的一种解释是每个混合道包括使临时变量再循环的隐含的‘否则’,因此在所述相同的像素上的之后的混合道中可以是可用的。
包含像素的多种样本各自根据所选的复杂的混合操作被处理。每个样本可以包括不同的包含用于复杂的混合操作的源数据的颜色样本。例如,像素可以包括四种样本集,本文称为四元组(quad)。四元组上的复杂的混合操作包括在每个与所述四元组相关联的颜色样本上实施所述复杂的混合操作以生成四种混合的颜色样本。
每个样本包括透明度(不透明度)值。在一个操作模式中,用得到的所存储的透明度值为每个样本实施透明度混合,直到完成关于每个相关颜色(红、绿和蓝)数据的处理道(pass)。然后使得到的透明度值与它们的相关颜色数据配对并作为像素样本一起存储在例如图像缓冲区内。在迭代的透明度操作模式中,将与每个样本相关联的透明度值恒等地处理为相应的颜色数据。
总之,每个复杂的混合模式可以被分解成一系列的包含普通混合方程的迭代次数,所述普通混合方程被定义为两个产品的和(A*B+C*D)。不同的临时值T[k]可以被生成并用作输入到所述给定的迭代中的混合方程,其中‘k’是引用临时值的索引。用于实现了复杂的混合模式的混合程序的基本编程模型在以下的表3中示出。在每个通道(p)期间,可以为每个变量A、B、C、D和k选择来自各种来源的数据。
对于在给定的一道中待执行的赋值,需要满足条件。每个条件句求值结果为真的(TRUE)布尔值或假的(FALSE)布尔值。在一个实施例中,实现了八个条件函数,包括大于、大于或等于、等于、不等于、小于或等于、小于、从不(never)(假)和总是(真)。针对每个成分(例如,红、绿、蓝)对条件句进行求值,并且为每个成分实施每个条件句的求值。
连同用于针对每道的变量A、B、C、D和k的变量选择信息一起,每个不同的复杂的混合模式限定了道的总数目(N_PASSES)。
表3
在一个实施例中,在每个复杂的混合操作中,将临时值初始化为0。如果针对所述最后道的条件句的求值结果为假(FALSE),那么迭代混合操作的每个最终输出将是所述混合程序的最后道中的赋值结果或T[0]。如果所述在最后的混合道中的条件句求值结果为假的(FALSE),那么所述输出数据则已经存储在先前的一道中的T[0]中。本领域普通技术人员应当理解用于分配输出数据的改变的规则可以实现,而不脱离本发明实施例的范围和精神。在一个实施例中,对于任何复杂的混合模式,道的最大数目被设为128。或者,每个复杂的混合模式可以执行更多或更少道。
在某些实施例中,先前的混合结果(PBR)存储在每道上,并可用作输出到随后的道。使用PBR作为输入可以在某些情况下节省功耗,因为PBR是可获得自本地寄存器而不是获得自可能需要更多的功耗来读或写的随机存取存储器(RAM)实例。
在某些实现中,混合电路实现两个乘积的混合函数的和。再循环路径从所述混合电路输出增加到所述混合电路输入。所述再循环路径可以包括用于多达被处理的四元组的最大数目的存储,从而允许每个四元组穿过所述用于多道迭代的混合电路。可以根据需要执行一道的处理阶段的数目,来选择所述四元组的最大数目。在一个实施例中,多达七个四元组可以是所述包含七个处理阶段的再循环路径内的飞行状态(in flight)。
为了促进某些复杂的混合操作,实现了函数集以作用于与给定道相关联的输入数据或作用于与所述道相关联的输出数据。对所述混合电路的每个输入值选自输入算子集,所述输入算子集包括但不限于常量0、常量1、常量颜色、源颜色、源透明度、目标颜色、目标透明度、一种负源透明度或目标透明度、临时值T[k]、最小值操作、最大值操作、绝对值操作、否定操作、PBR、倒数操作、平方根操作和平方根的倒数。关于来自混合道的输出数据的算子可以包括但不限于数据混合(swizzle)算子和写掩码算子。利用输入值集和针对特定的道所限定的输出算子,独立地计算每个样本的每个颜色通道(channel,红、绿、蓝、不透明度)。附加的函数也可以实现点乘积算子、矢量正规化算子(vector normalize operator)等。某些函数,诸如倒数、平方根和其它任意定义的函数可以经由所述函数的分段线性近似值来实现。可以使用任何技术上可行的技术来实现所述分段线性近似值,可以使用任何修匀(smoothing)和插值技术,而不脱离本发明的范围和精神。
对于具有压缩的源颜色成分和目标颜色成分的混合操作,在所述代表性的颜色上而不是每个单独的样本上,只需要实施一种混合操作。对于具有每像素四种样本的配置,这近似地表示混合每种成分的四分之一的处理需求。这种效率与每像素样本的数目成比例。
图5示出了根据本发明的一个实施例的配置实现迭代的混合操作的一道的混合电路500。操作单元(op)534和乘数530、530配置为执行形式A*B+C*D的乘积操作的和以生成输出558。操作单元534配置为实施至少加法和减法操作。选择信号514使得多路复用器510选择输入A550中的一个,以用作所述乘积操作的和中的A变量。选择信号516使得多路复用器512选择输入B552中的一个,以用作所述B变量。选择信号524使得多路复用器520选择输入C554中的一个,以用作所述C变量。选择信号526使得多路复用器522选择输入D556中的一个,以用作所述D变量。基于所选的用于特定道以及先前的条件句求值的结果的指令,配置选择信号514、516、524和526。在一个实施例中,混合电路500的四种实例并行地操作以为样本计算红、绿、蓝和透明度值。可以实现任意数目的实例以达到整体并行性的特定水平。每个输入值550、552、554、556可以包含诸如16位浮点值等浮点值。
输入550(0)至550(N)对应于包含用于所述A变量的输入算子集的可用的输入。类似地,输入552、554和556对应于包含用于所述各自的B、C和D变量的输入算子集的可用的输入。
图6示出了根据本发明的一个实施例的配置为实现迭代的混合操作的CROP混合单元600。在一个实施例中,CROP混合单元600存在于图4的CROP单元465内,且在诸如并行处理子系统112的GPU内实现图形处理管线400。
CROP混合单元600包含单道混合路径610,且多道混合路径650配置为经由再循环路径662再循环用于连续迭代的数据结果。当单道混合模式是活动的(active)时,单道混合路径610计算针对引入的像素的混合操作,且使多道混合路径650进入低功耗状态。当多道混合模式是活动的时,多道混合路径650经由两个或多于两个的包含关于所述引入的像素的混合操作的通道(迭代)来计算针对引入的像素的混合操作。在替代性的实施例中,仅多道混合路径650被实现并配置为还执行单道混合操作。这样的替代性实施方案平均起来可以消耗更多的功耗,因为在单道的混合操作中涉及到更多的电路,这些电路趋向于在任何给定的场景中占主要地位。
在一个实施例中,再循环路径662配置为传送多达七个飞行状态中(流水线式)的四元组,并允许每个四元组多次穿过多道混合路径650,从而执行一起使得复杂的混合模式成为可能的基本混合操作序列。在以上表2的柔光混合实例中,每个柔光混合需要3次迭代,每个所列的通道一次。在这个实施例中,针对这些需要柔光混合的像素的吞吐量将是单道混合的三分之一。由于在多于一个的混合道中可能需要src数据和dst数据,将该数据再循环并推入将与所述混合器的延迟匹配的先进先出(fifo)中。临时数据,包括至少T[0]。也将T[2]再循环用于在多次迭代中使用。
同时包含多道混合路径650和单道混合路径610的实施例随着动态功耗的增加显示了单道混合模式的延迟特征,从而当需要多道混合时仅支持多道混合模式。因为多道混合路径650一旦处理完成则不要求持续的状态,所以用于功耗节省的多种架构策略是可用的,包括包含多道混合路径650的断电的电路。
在一个实施例中,CROP混合单元600处理一系列管线阶段中的源数据和目标数据。源数据和目标数据可以各自包含具有不同的毎像素数据率的不同的数据格式和不同的颜色表示格式。阶段S0-S5615准备源数据和目标数据用于混合,阶段S0-S5615将所述源数据和目标数据映射至相同的格式。通过仅需要支持一种格式简化与所述混合操作相关联的电路。在一个实施例中,将源数据和目标数据映射到诸如16位浮点表示等浮点表示,用于混合。从混合操作中得到的数据可能需要以各种可用的格式中的一种表示和存储。阶段S11621配置为重新格式化得到的数据至用于存储的目标格式。在一个实施例中,重新格式化所述得到的数据包括固定在诸如从0.0到1.0或从-1.0到1.0的范围等指定的范围。
阶段SP S6616至SP S10620包含单道混合路径610。由一个两个乘积的和所定义的基本混合操作可以由阶段SP S6616至SP S10620处理。阶段MP S6656至MP S10660包含多道混合路径650。要求两道或多于两道的复杂的混合操作可以由阶段MP S6656至MP S1066处理。门闸(Gatekeeper)655配置为准许多道源数据和目标数据进入多道混合路径650,用于处理。流程导引器(director)661配置为或者当需要另一个处理道时,将得到的数据再循环回至门闸655用于再准许进入,或者传送得到的数据到SP S10620,SP S10620将所述得到的数据传递到S11621,用于重新格式化至目标格式。
在一个实施例中,门闸655准许工作进入多道混合路径650用于在四元组单元中处理。门闸655配置为试图最大化正在MP混合路径650内处理的四元组的数目,而不超出在任何一次的飞行状态中的四元组的最大数目。在实现中,门闸655准许四线组进入MP混合路径650直到第一四线组经由再循环路径662再循环回,在该时间点,门闸655停止允许用于处理的新四线组进入所准许的四线组的群组。当所准许的群组中的最后的四线组经由再循环路径662再循环之后被推入到MP混合路径650时,门闸655可以开始准许用于处理的新四线组。对于门闸655,这里的目标是在避免气泡和溢出的同时,有效地准许用于MP混合路径650的工作。
当提供需要区别的复杂的混合模式的四线组用于处理时,门闸655排出(drain)MP混合路径650。在上环境(context)切换事件之前,门闸655也排出MP混合路径650。
在一个实施例中,可以实现用于多混合路径650的状态管理,以当当前的事务处于飞行状态时,防止管线配置变化。这简化了总的状态管理。每道可以包括命令包(command bundle),所述命令包可以在上游被解码并作为经解码的包含用于每个混合道的迭代的混合状态的命令包传递下去。
图7是根据本发明的一个实施例的用于配制所述颜色光栅操作混合单元以执行迭代的混合操作的方法步骤的流程图。尽管结合图1-6的系统描述了所述方法步骤,本领域普通技术人员应当理解,配置为以任意顺序执行所述方法步骤的任意系统均在本发明的范围内。在一个实施例中,所述方法步骤由GPU设备驱动程序实现,诸如图1的设备驱动程序103。
如所示的,方法700开始与步骤710,其中所述GPU驱动程序接收请求具体的混合模式的应用编程接口(API)的调用。这种混合模式可以由准备渲染要求所述混合模式的内容的应用程序来确定。如果在步骤720中,对应于所请求的混合模式的迭代的混合指令序列还没有生成,那么所述方法进入到步骤722,在步骤722中所述驱动程序生成用于所请求的混合模式的迭代的混合指令序列。如果在步骤730中,所述迭代的混合指令序列还没有存在于相关联的GPU内,那么所述方法进入到步骤732,在步骤732,所述驱动程序将所述迭代的混合指令序列下载到所述GPU。在步骤790后,所述方法结束,在步骤790所述驱动程序将所述GPU配置为执行所请求的混合模式为待由CROP单元465所实施的混合操作。
返回到步骤720,如果所述对应于所请求的混合模式的迭代的混合指令序列已经生成,那么所述方法进入到如上所述的步骤730。
返回到以上的步骤730,如果所述迭代的混合指令序列已经存在于所述GPU内,那么所述方法进入到步骤790。
图8是根据本发明的一个实施例的用于实施混合操作的方法步骤的流程图。尽管结合图1-6的系统描述了所述方法步骤,本领域普通技术人员应当理解,配置为以任意顺序执行所述方法步骤的任意系统均在本发明的范围内。在一个实施例中,方法800由诸如图4的CROP单元465等CROP单元实施。
如所示的,方法800开始于步骤810,其中所述CROP单元根据所述混合操作,接收待混合的源数据和目标数据。如果在步骤820中,所述源数据和目标数据没有指示早退(early out)条件,那么所述方法进行到步骤822。早退条件在本文定义为一种条件,其中要么所述源数据单独要么所述目标数据单独定义混合的结果,使得所述源数据和所述目标数据的混合是多余的。早退条件的一个实例是当源数据是完全不透明时,从而使所述目标数据在混合期间的任何贡献无效。早退条件的另一个实例是当源数据是完全透明时,从而使所述源数据在混合期间的任何贡献无效。在步骤822,将源数据和目标数据映射至诸如16位浮点格式等常见格式。任意其它技术上可行的格式也可以作为常见格式实现,用于混合操作。
如果在步骤830中,所述混合操作是多道(迭代的)混合操作,那么所述方法进入到步骤832,在步骤832中,门闸功能准许所述源数据和目标数据进入到多道(MP)。在一个实施例中,所述门闸功能由图6的门闸655实现。所述门闸功能准许足够的工作进入到诸如MP混合路径650等MP混合路径,以在避免气泡的同时,有效且正确地利用所述MP混合路径的计算资源。在一个实施例中,在准许新数据进入期间,初始化与MP混合路径650相关联的计算状态。计算状态可以包括但不限于道的计数、T[k]值等等。所述道的计数可以指示在特定数据集上已经执行了多少道。在步骤834,在所选的输出数据上实施所选的混合操作。例如,如先前所描述的,积的和或积的差可以在来自输入算子集的四个所选的算子上实施。
如果在步骤840中,当前所处理的混合道是最后道,那么所述方法进入到步骤842,在步骤842中,将输出数据映射至目标格式。目标格式的一个实施例是屏幕空间红、绿、蓝(sRGB)八位整数格式。在步骤844,所述输出数据被存储到诸如图2的PP存储器204内的图像缓冲区等存储器中的目标位置。所述方法结束于步骤890。然而,如果在步骤840中,所述当前的所处理的混合道不是最后道,那么所述方法返回到如上所述的步骤834。
返回到步骤830,如果所述混合操作不是多道(迭代的)混合操作,那么所述方法进入到如上所述的步骤842。
返回到步骤820,如果所述源数据和目标数据确实指示早退条件,那么所述方法进行到如上所述的步骤842。在一个实施例中,如果所述源数据和目标数据确实指示使所述源数据的任何影响无效的早退条件,那么在步骤844,所述输出数据被存储到存储器中的目标位置。所述方法在步骤890结束。
在一个实施例中,早退条件可以基于完全透明的源数据确定,从而排除与目标数据的任何写(write)或混合操作。在某些实施例中,早退条件可以基于完全不透明的目标数据确定,从而排除元数据和目标数据之间的写或混合操作。如果检测到任何一个早退条件,那么所述方法绕过步骤842-844并在步骤890结束。
总之,公开了用于有效地实施在图形处理单元的光栅操作单元内的复杂的混合操作的技术。所述技术将所述复杂的混合操作分解为一系列的两个或多于两个的迭代,每个迭代包含对两个乘积的操作。所述操作可以包含但不限于和或差,用于每个乘积的至少两个输入值选自输入算子集。在一个实施例中,所述两个乘积、所述操作和所述输入算子在诸如十六位浮点表达式等常见的数学表达式中实现。只要求单个混合操作的像素可以根据常规的混合关系进行处理以节约功耗。
所公开的技术的一个优势是它能够使要求复杂的混合的图形内容有效地由图形处理单元渲染。
尽管前面针对的是本发明的实施例,但还可以设计本发明的其它进一步的实施例,而不脱离其本范围。例如,可以在硬件或软件或硬件和软件的组合中实现本发明的各个方面。本发明的一个实施例可实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的功能(包括本文中所描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写入的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的CD-ROM盘、闪存、ROM芯片或任何类型的固态非易失性半导体存储器),在其上永久性地存储信息;和(ii)可写入的存储介质(例如,软盘驱动器内的软盘或硬盘驱动器或者任意类型的固态随机存取半导体存储器),在其上存储可更改的信息。
以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员应当理解的是,可对此做出各种修改和变化而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是例示性而非限制性的意义。
因此,本发明的范围由后面的权利要求确定。
Claims (10)
1.一种图形处理单元,包括:
混合单元,所述混合单元配置为通过以下步骤实施可编程的混合操作:
接收用于处理的源像素数据和目标像素数据;
基于是否存在早退条件确定是否需要第一混合操作;和
如果所述早退条件不存在,且需要第一混合操作,那么基于所述源像素数据和目标像素数据实施所述第一混合操作以生成第一混合结果,或
如果所述早退条件存在,且不需要第一混合操作,那么实施绕道操作并存储所述源像素数据和目标像素数据到渲染目标。
2.如权利要求1所述的图形处理单元,其中,所述混合单元进一步配置为将所述源像素数据和目标像素数据映射至统一的算法格式。
3.如权利要求1所述的图形处理单元,其中,与所述可编程的混合操作相关联的至少一个指令指定倒数操作、平方根操作或分段线性操作。
4.如权利要求1所述的图形处理单元,其中,与所述可编程的混合操作相关联的至少一个指令包括由常数所指定的输出操作数。
5.如权利要求1所述的图形处理单元,其中,所述源像素数据包含由一种颜色和指示所述源像素数据被压缩的标志所表示的两种或多于两种的样本。
6.如权利要求1所述的图形处理单元,其中,所述早退条件不存在,且需要第一混合操作,且所述混合单元进一步配置为确定实施多道系列混合操作还是单道混合操作。
7.如权利要求6所述的图形处理单元,其中,将要实施的是多道系列混合操作,且所述混合单元进一步配置为基于所述源像素数据和目标像素数据实施在所述第一混合操作之后的第二混合操作,以生成第二混合结果。
8.如权利要求7所述的图形处理单元,其中,所述第二混合操作也基于来自临时变量的阵列或最近的混合结果登记的值。
9.如权利要求1所述的图形处理单元,其中,当所述源像素数据完全不透明或完全透明时,所述早退条件存在。
10.如权利要求1所述的图形处理单元,其中,所述混合单元包含光栅操作单元。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/723,092 | 2012-12-20 | ||
US13/723,092 US9183609B2 (en) | 2012-12-20 | 2012-12-20 | Programmable blending in multi-threaded processing units |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103885752A true CN103885752A (zh) | 2014-06-25 |
Family
ID=50878826
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310714673.9A Pending CN103885752A (zh) | 2012-12-20 | 2013-12-20 | 多线程处理单元中可编程的混合 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9183609B2 (zh) |
CN (1) | CN103885752A (zh) |
DE (1) | DE102013022257A1 (zh) |
TW (1) | TWI525584B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105374004A (zh) * | 2014-08-08 | 2016-03-02 | 联发科技股份有限公司 | 图形处理电路和方法 |
CN105678378A (zh) * | 2014-12-04 | 2016-06-15 | 辉达公司 | 间接访问样本数据以在并行处理系统中执行多卷积操作 |
CN106326628A (zh) * | 2015-12-03 | 2017-01-11 | 西安邮电大学 | 一种实现自然对数和自然指数函数的可重构阵列结构 |
CN108463837A (zh) * | 2016-01-12 | 2018-08-28 | 高通股份有限公司 | 用于渲染多个细节等级的系统和方法 |
CN109716759A (zh) * | 2016-09-02 | 2019-05-03 | 联发科技股份有限公司 | 提升质量递送及合成处理 |
CN111667542A (zh) * | 2019-03-08 | 2020-09-15 | 辉达公司 | 适用于人工神经网络的用于处理压缩数据的解压缩技术 |
CN116957908A (zh) * | 2023-09-20 | 2023-10-27 | 上海登临科技有限公司 | 一种硬件处理架构、处理器以及电子设备 |
CN117710502A (zh) * | 2023-12-12 | 2024-03-15 | 摩尔线程智能科技(北京)有限责任公司 | 渲染方法、装置及存储介质 |
WO2024098289A1 (zh) * | 2022-11-09 | 2024-05-16 | 卓永红 | 用于多图层混合渲染的快速并行处理方法和装置 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9965876B2 (en) * | 2013-03-18 | 2018-05-08 | Arm Limited | Method and apparatus for graphics processing of a graphics fragment |
US9978171B2 (en) | 2014-07-29 | 2018-05-22 | Nvidia Corporation | Control of a sample mask from a fragment shader program |
US9437172B2 (en) | 2014-08-19 | 2016-09-06 | Apple Inc. | High-speed low-power access to register files |
US10769746B2 (en) | 2014-09-25 | 2020-09-08 | Apple Inc. | Data alignment and formatting for graphics processing unit |
GB2540970B (en) * | 2015-07-31 | 2018-08-15 | Advanced Risc Mach Ltd | Executing Groups of Instructions Atomically |
JP2017176652A (ja) | 2016-03-31 | 2017-10-05 | 花王株式会社 | 微細中空突起具 |
US10223822B2 (en) | 2016-12-22 | 2019-03-05 | Apple Inc. | Mid-render compute for graphics processing |
US10324844B2 (en) | 2016-12-22 | 2019-06-18 | Apple Inc. | Memory consistency in graphics memory hierarchy with relaxed ordering |
US10445852B2 (en) | 2016-12-22 | 2019-10-15 | Apple Inc. | Local image blocks for graphics processing |
US10504270B2 (en) | 2016-12-22 | 2019-12-10 | Apple Inc. | Resource synchronization for graphics processing |
US10310861B2 (en) | 2017-04-01 | 2019-06-04 | Intel Corporation | Mechanism for scheduling threads on a multiprocessor |
CN110326021A (zh) * | 2017-04-01 | 2019-10-11 | 英特尔公司 | 用于图形处理器上的加速计算的执行单元共享混合技术 |
TWI714390B (zh) * | 2019-12-13 | 2020-12-21 | 中華電信股份有限公司 | 作業流程調控方法 |
CN111275802B (zh) * | 2020-01-19 | 2023-04-21 | 杭州群核信息技术有限公司 | 一种基于vray的pbr材质渲染方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4823286A (en) * | 1987-02-12 | 1989-04-18 | International Business Machines Corporation | Pixel data path for high performance raster displays with all-point-addressable frame buffers |
CN1128381A (zh) * | 1994-04-08 | 1996-08-07 | 索尼株式会社 | 图象生成装置 |
US6226017B1 (en) * | 1999-07-30 | 2001-05-01 | Microsoft Corporation | Methods and apparatus for improving read/modify/write operations |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5185856A (en) | 1990-03-16 | 1993-02-09 | Hewlett-Packard Company | Arithmetic and logic processing unit for computer graphics system |
US5544306A (en) * | 1994-05-03 | 1996-08-06 | Sun Microsystems, Inc. | Flexible dram access in a frame buffer memory and system |
US6466210B1 (en) * | 1997-12-22 | 2002-10-15 | Adobe Systems Incorporated | Blending image data using layers |
US6259462B1 (en) * | 1998-12-09 | 2001-07-10 | Ati International Srl | Method and apparatus for texture blending in a video graphics circuit |
JP3258286B2 (ja) * | 1998-12-15 | 2002-02-18 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 半透明物体と不透明物体とが混在する複数の物体についての画像データをコンピュータ表示画面に表示する描画方法および描画装置 |
US7414632B1 (en) * | 2000-01-07 | 2008-08-19 | Intel Corporation | Multi-pass 4:2:0 subpicture blending |
US6741259B2 (en) | 2001-03-30 | 2004-05-25 | Webtv Networks, Inc. | Applying multiple texture maps to objects in three-dimensional imaging processes |
US6697064B1 (en) * | 2001-06-08 | 2004-02-24 | Nvidia Corporation | System, method and computer program product for matrix tracking during vertex processing in a graphics pipeline |
US7307667B1 (en) | 2003-06-27 | 2007-12-11 | Zoran Corporation | Method and apparatus for an integrated high definition television controller |
KR100573876B1 (ko) * | 2004-07-13 | 2006-04-25 | 한국과학기술원 | 태양 복사 압력을 이용하여 타원 궤도에 있는 위성 자세제어 방법 |
US7973797B2 (en) * | 2006-10-19 | 2011-07-05 | Qualcomm Incorporated | Programmable blending in a graphics processing unit |
US8638341B2 (en) | 2007-10-23 | 2014-01-28 | Qualcomm Incorporated | Antialiasing of two-dimensional vector images |
US8681162B2 (en) | 2010-10-15 | 2014-03-25 | Via Technologies, Inc. | Systems and methods for video processing |
-
2012
- 2012-12-20 US US13/723,092 patent/US9183609B2/en active Active
-
2013
- 2013-11-29 TW TW102143851A patent/TWI525584B/zh active
- 2013-12-09 DE DE102013022257.5A patent/DE102013022257A1/de active Pending
- 2013-12-20 CN CN201310714673.9A patent/CN103885752A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4823286A (en) * | 1987-02-12 | 1989-04-18 | International Business Machines Corporation | Pixel data path for high performance raster displays with all-point-addressable frame buffers |
CN1128381A (zh) * | 1994-04-08 | 1996-08-07 | 索尼株式会社 | 图象生成装置 |
US6226017B1 (en) * | 1999-07-30 | 2001-05-01 | Microsoft Corporation | Methods and apparatus for improving read/modify/write operations |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105374004A (zh) * | 2014-08-08 | 2016-03-02 | 联发科技股份有限公司 | 图形处理电路和方法 |
US10255547B2 (en) | 2014-12-04 | 2019-04-09 | Nvidia Corporation | Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system |
CN105678378A (zh) * | 2014-12-04 | 2016-06-15 | 辉达公司 | 间接访问样本数据以在并行处理系统中执行多卷积操作 |
CN105678378B (zh) * | 2014-12-04 | 2018-10-26 | 辉达公司 | 间接访问样本数据以在并行处理系统中执行多卷积操作 |
CN106326628A (zh) * | 2015-12-03 | 2017-01-11 | 西安邮电大学 | 一种实现自然对数和自然指数函数的可重构阵列结构 |
CN106326628B (zh) * | 2015-12-03 | 2018-12-28 | 西安邮电大学 | 一种实现自然对数和自然指数函数的可重构阵列结构 |
CN108463837A (zh) * | 2016-01-12 | 2018-08-28 | 高通股份有限公司 | 用于渲染多个细节等级的系统和方法 |
CN109716759A (zh) * | 2016-09-02 | 2019-05-03 | 联发科技股份有限公司 | 提升质量递送及合成处理 |
CN109716759B (zh) * | 2016-09-02 | 2021-10-01 | 联发科技股份有限公司 | 提升质量递送及合成处理 |
CN111667542A (zh) * | 2019-03-08 | 2020-09-15 | 辉达公司 | 适用于人工神经网络的用于处理压缩数据的解压缩技术 |
CN111667542B (zh) * | 2019-03-08 | 2023-06-20 | 辉达公司 | 适用于人工神经网络的用于处理压缩数据的解压缩技术 |
WO2024098289A1 (zh) * | 2022-11-09 | 2024-05-16 | 卓永红 | 用于多图层混合渲染的快速并行处理方法和装置 |
CN116957908A (zh) * | 2023-09-20 | 2023-10-27 | 上海登临科技有限公司 | 一种硬件处理架构、处理器以及电子设备 |
CN116957908B (zh) * | 2023-09-20 | 2023-12-15 | 上海登临科技有限公司 | 一种硬件处理架构、处理器以及电子设备 |
CN117710502A (zh) * | 2023-12-12 | 2024-03-15 | 摩尔线程智能科技(北京)有限责任公司 | 渲染方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
DE102013022257A1 (de) | 2014-06-26 |
US9183609B2 (en) | 2015-11-10 |
TW201428678A (zh) | 2014-07-16 |
US20140176568A1 (en) | 2014-06-26 |
TWI525584B (zh) | 2016-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103885752A (zh) | 多线程处理单元中可编程的混合 | |
US20190324991A1 (en) | Block-based lossless compression of geometric data | |
US9946666B2 (en) | Coalescing texture access and load/store operations | |
CN104050632B (zh) | 用于多样本像素数据处理的方法和系统 | |
US10217183B2 (en) | System, method, and computer program product for simultaneous execution of compute and graphics workloads | |
CN104050706B (zh) | 用于低功率图形渲染的像素着色器旁路 | |
CN109564699B (zh) | 用于经优化光线追踪的装置和方法 | |
CN103886634A (zh) | 利用每像素着色器线程的高效超级采样 | |
CN104036537A (zh) | 多分辨率一致光栅化 | |
US10055883B2 (en) | Frustum tests for sub-pixel shadows | |
CN103810743A (zh) | 在上游着色器中设置下游渲染状态 | |
CN104050705A (zh) | 处置光栅操作中的post-z覆盖数据 | |
CN105321143A (zh) | 来自片段着色程序的采样掩膜的控制 | |
CN103886547A (zh) | 用于存储共享顶点的技术 | |
CN103793876A (zh) | 分布式拼接式进行高速缓存 | |
CN103425533A (zh) | 用于管理嵌套执行流的方法和系统 | |
CN103885893A (zh) | 用于访问内容寻址存储器的技术 | |
US10255075B2 (en) | System, method, and computer program product for managing out-of-order execution of program instructions | |
CN103309702A (zh) | 用于并行线程子集的一致加载处理 | |
US10776156B2 (en) | Thread priority mechanism | |
DE102013020966B4 (de) | Leistungseffiziente Attribut-Handhabung für Parkettierungs- und Geometrie-Schattierungseinheiten | |
CN103885902A (zh) | 用于经由纹理硬件实施存储器访问操作的技术 | |
CN103886538A (zh) | 用于存储共享顶点的技术 | |
CN103870309A (zh) | 用于集群多级寄存器堆的寄存器分配 | |
CN103871019A (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 | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140625 |