CN108140233A - 具有像素块级别粒度的图形处理单元抢占 - Google Patents
具有像素块级别粒度的图形处理单元抢占 Download PDFInfo
- Publication number
- CN108140233A CN108140233A CN201680056232.6A CN201680056232A CN108140233A CN 108140233 A CN108140233 A CN 108140233A CN 201680056232 A CN201680056232 A CN 201680056232A CN 108140233 A CN108140233 A CN 108140233A
- Authority
- CN
- China
- Prior art keywords
- gpu
- group command
- group
- grade
- output
- 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.)
- Granted
Links
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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- 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/80—Shading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
- Controls And Circuits For Display Device (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
描述关于抢占的技术,其中图形处理单元GPU可响应于接收到绘制调用来执行第一组命令,所述绘制调用定义待由所述第一组命令渲染的多个基元;在执行所述第一组命令期间接收抢占通知,且在完成对用以渲染所述绘制调用的所述多个基元的所述第一组命令的所述执行之前抢占所述第一组命令的执行,来执行第二组命令。
Description
技术领域
本发明涉及图形处理系统,且更确切地说,涉及利用抢占的图形处理系统。
背景技术
计算装置常常利用图形处理单元(GPU)以加速渲染用于显示的图形数据。此类计算装置可包含(例如)计算机工作站、例如所谓的智能电话等移动电话、嵌入系统、个人计算机、平板计算机和视频游戏控制台。GPU通常执行图形处理管线,所述图形处理管线包含一起操作以执行图形处理命令的多个处理级。主机中央处理单元(CPU)可通过将一或多个图形处理命令发布给GPU来控制GPU的操作。现代的CPU通常能够同时执行多个应用,所述多个应用中的每一个可需要在执行期间利用GPU。在当前在主机CPU上执行的不同应用之间的GPU资源的仲裁可对主机CPU构成重大挑战,尤其是在特定应用可需要对GPU的高优先级存取的情况下。
发明内容
本发明涉及图形处理单元(GPU)像素块抢占。在一些实例中,所述GPU可在渲染一“组”像素之后从第一组命令上下文切换到第二组命令(例如,抢占第一组命令)。举例来说,所述GPU可在将像素组光栅化且着色之后抢占。此外,在一些实例中,GPU可使用正常处理从不同着色器传递数据,但可动态选择如何基于抢占将顶点数据流出。举例来说,GPU图形管线经配置以产生中间数据作为渲染数据的部分且将这个中间数据存储在GPU的本地存储器中。然而,响应于命令,GPU动态地将图形管线重新配置成将中间数据输出到GPU外部的存储器。
在一个实例中,本发明描述处理数据的方法,方法包括响应于接收到绘制调用而通过图形处理单元(GPU)通过GPU的图形管线执行第一组命令,所述绘制调用定义待通过执行第一组命令来渲染的一或多个基元;在执行第一组命令期间且在渲染所有一或多个基元之前通过所述GPU接收抢占通知;响应于接收到抢占通知而将GPU的本地存储器的输出从图形管线的级断开连接且将GPU的本地存储器的输出连接到GPU的硬件流出单元,以在执行第一组命令期间动态配置图形管线的级的互连;归因于在执行第一组命令期间对GPU的图形管线的级的互连的动态配置,将在执行第一组命令中的一或多个命令期间产生的中间数据从硬件流出单元输出到GPU外部的存储器;在完成执行用以渲染绘制调用的一或多个基元的第一组命令之前通过所述GPU抢占执行第一组命令,来执行第二组命令;和执行第二组命令。
在一个实例中,本发明描述装置以供处理数据,所述装置包括系统存储器,和图形处理单元(GPU)。GPU包括硬件流输出单元和本地存储器,其中GPU经配置以响应于接收到绘制调用而通过GPU的图形管线执行第一组命令,所述绘制调用定义待通过执行第一组命令来渲染的一或多个基元;在执行第一组命令期间且在渲染所有一或多个基元之前接收抢占通知;响应于接收到抢占通知而将GPU的本地存储器的输出从图形管线的级断开连接且将GPU的本地存储器的输出连接到GPU的硬件流出单元,以在执行第一组命令期间动态配置图形管线的级的互连;归因于在执行第一组命令期间对GPU的图形管线的级的互连的动态配置,将在执行第一组命令中的一或多个命令期间产生的中间数据从硬件流出单元输出到GPU外部的系统存储器;在完成执行用以渲染绘制调用的一或多个基元的第一组命令之前抢占执行第一组命令,来执行第二组命令;和执行第二组命令。
在一个实例中,本发明描述具有存储于其上的指令的计算机可读存储媒体,当所述指令被执行时,使得用于处理数据的装置的图形处理单元(GPU)响应于接收到绘制调用而通过GPU的图形管线执行第一组命令,所述绘制调用定义待通过执行第一组命令来渲染的一或多个基元;在执行第一组命令期间且在渲染所有一或多个基元之前接收抢占通知;响应于接收到抢占通知而将GPU的本地存储器的输出从图形管线的级断开连接且将GPU的本地存储器的输出连接到GPU的硬件流出单元,以在执行第一组命令期间动态配置图形管线的级的互连;归因于在执行第一组命令期间对GPU的图形管线的级的互连的动态配置,将在执行第一组命令中的一或多个命令期间产生的中间数据从硬件流出单元输出到GPU外部的存储器;在完成执行用以渲染绘制调用的一或多个基元的第一组命令之前抢占执行第一组命令,来执行第二组命令;和执行第二组命令。
在一个实例中,本发明描述用于处理数据的装置,所述装置包括用于响应于接收到绘制调用而通过图形处理单元(GPU)的图形管线执行第一组命令的装置,所述绘制调用定义待通过执行第一组命令来渲染的一或多个基元;用于在执行第一组命令期间且在渲染所有一或多个基元之前接收抢占通知的装置;用于将GPU的本地存储器的输出从图形管线的级断开连接且将GPU的本地存储器的输出连接到GPU的硬件流出单元以在执行第一组命令期间动态配置图形管线的级的互连的装置;用于归因于在执行第一组命令期间对GPU的图形管线的级的互连的动态配置,将在执行第一组命令中的一或多个命令期间产生的中间数据从硬件流出单元输出到GPU外部的存储器的装置;用于在完成执行用以渲染绘制调用的一或多个基元的第一组命令之前通过所述GPU抢占执行第一组命令,来执行第二组命令的装置;和用于执行第二组命令的装置。
在附图和以下描述中阐明本发明的一或多个实例的细节。本发明的其它特征、目标和优势将从所述描述和图式以及从权利要求书中显而易见。
附图说明
图1是说明可用以实施本发明的技术的实例计算装置的框图。
图2是进一步详细说明图1的计算装置的CPU、GPU和存储器的框图。
图3A是说明显示器的像素的概念图。
图3B是说明像素块的概念图。
图4是说明根据本发明中所描述的一或多个实例的可实施图形处理管线的实例的图形处理单元(GPU)的实例的框图。
图5是说明图形管线的另一实例的框图。
图6是说明图形管线的另一实例的框图。
图7是说明处理数据的实例方法的流程图。
具体实施方式
本发明涉及用于排程图形处理单元(GPU)程序的抢占技术。抢占是指使处理器(例如,GPU)为第二组命令而停止执行第一组命令,且接着在完成执行第二组命令之后完成执行第一组命令。举例来说,GPU可为较高优先级组的命令抢占执行较低优先级组的命令。
相对较高优先级组的命令的实例是用于渲染图形用户接口(GUI)的命令。GPU越来越多地用于用户界面(UI)渲染。UI命令流通常得益于以及时的方式服务以便实现用户在UI中预期的恰当视觉效果和响应性。在高优先级UI命令流被主机CPU排队在GPU上执行时,GPU可执行与具有较低优先级的不同上下文相关联的另一排队的命令流,例如,非UI图形上下文或使用GPU执行通用计算任务(即,图形处理单元通用计算(GPGPU)任务)的上下文。在一些情况下,在执行较高优先级UI命令流之前等待较低优先级上下文完成执行可不产生可接受的用户对UI的体验。
较低或低优先级命令和较高或高优先级命令是用以指示及时执行命令的重要性的相对术语。作为一实例,若被尽可能快速执行以使得不干扰用户体验的命令与如果略微延迟执行将不大大减弱用户体验的命令相比将具有较高优先级。作为一实例,如果UI命令的执行被延迟,那么用户体验将受不利影响,这是因为对用户交互的响应将被延迟。如果对用于在后台中发生的一些矩阵运算的命令的执行被延迟,那么对用户体验可存在极少影响。
可存在其中并非仅基于用户体验来将命令认定为较高优先级或较低优先级的其它方式。本发明使用术语较高优先级和较低优先级作为相对术语来描述从一组命令切换到另一组命令的实例。然而,本发明中描述的技术不需要一定限于其中切换命令仅发生用于从较低优先级命令转变到较高优先级命令的实例。
在完成执行第一组命令之前从执行第一组命令切换到第二组命令被称为GPU上下文切换或抢占。上下文切换或抢占适用于为例如虚拟化、UI、图形/计算应用等各种GPU工作负荷进行硬件加速,以及及时转递各种命令的进度。对于较频繁抢占的需要出现是因为例如新的使用情况,例如虚拟现实(时间扭曲,根据帧要求)和汽车使用,其中渲染延迟可能是非所要的或不可接受的。
这个问题的一个解决方案是允许主机CPU在任意点处抢占执行较低优先级命令流且每当主机CPU确定首先执行较高优先级命令流是有益的或合乎需要的时服务较高优先级命令流。然而,此类解决方案在用以在GPU命令流中的此类任意点处在GPU中进行上下文切换所需的开销方面(例如,额外处理时间,额外存储器带宽使用,和/或额外内存占用率)可能较昂贵。
一些GPU提供绘制调用级别抢占(例如,在发出的绘制调用完成之后抢占)。所述绘制调用可定义待渲染的多个基元。然而,绘制调用级别抢占对于用于例如较大大小的三角形(例如用于覆盖一个槽或筛管)的某些情况不适当。为解决此类问题,更精细粒度的抢占可适用。盲冻结和存储-恢复(例如,停止所有功能且存储GPU的所有级的所有状态信息)可能较昂贵且因此不是高效的解决方案。
一般来说,GPU中的顶点着色器级通常较快且对于给定几何构型恒定,这是因为无论几何构型的大小如何,顶点的数目都相同(例如,无论三角形的大小如何,三角形都有三个顶点)。GPU中的像素着色器级可能较费时(例如,工作负荷随与几何构型无关的分辨率而变化)。举例来说,顶点着色器级的工作负荷对于不同大小的三角形可相同,但像素着色器级的工作负荷对于不同大小的三角形可不同。举例来说,长细三角形比长粗三角形具有较少像素,且因此,对于长粗三角形的工作负荷多于对于长细三角形的工作负荷。作为一说明,假设第一三角形的顶点座标为(0,0),(1,15),和(2,0)。在这个实例中,第一三角形较长(例如,长度15个单位)但较细(例如,宽度仅2个单位)。假设第二三角形的顶点座标为(0,0),(10,15),和(20,0)。在这个实例中,第二三角形与第一三角形一样长(例如,长度15个单元)但更粗(例如,宽度20个单位)。第二三角形中比第一三角形存在较多像素,且因此,对于第二三角形的工作负荷多于第一三角形。此外,分辨率可影响像素着色器级的工作负荷。对于呈320×320分辨率的长细三角形的工作负荷可能没有1080p全高清分辨率的大。
本发明描述像素块级别(粒度)抢占的实例。举例来说,在正常操作中,顶点着色器级将数据传递到像素着色器级(也被称为片段着色器级)。然而,当GPU接收用于抢占的指令时,GPU可清空(例如完成)所有顶点着色器级,但替代地将数据动态引导到外部存储器。通过这种方式,在一些实例中,抢占在执行顶点着色器级之后但在执行绘制调用的像素着色器之前发生。此外,GPU可动态确定来自顶点着色器级的数据是否通过芯片上程序传递到片段着色器级或顶点着色器级数据是否在芯片外转移到外部存储器。当恢复被抢先的上下文时,从外部存储器读取数据且反馈到图形管线中。
在本发明中描述的技术中,GPU响应于接收到绘制调用(例如,从CPU)而通过GPU的图形管线执行第一组命令。绘制调用定义待通过第一组命令来渲染的多个基元,且图形管线经配置以存储在执行GPU的本地存储器中的第一组命令期间产生的数据。基于对GPU执行较高优先级组命令(例如,第二组命令)的需要,GPU可在执行第一组命令期间且在渲染所有一或多个基元之前接收抢占通知(例如,从CPU),且响应于接收到抢占通知,GPU动态配置GPU的图形管线的级的互连以将在执行第一组命令中的一或多个命令期间产生的中间数据输出到GPU外部的存储器。GPU可接着在完成执行用以渲染绘制调用的所述多个基元的第一组命令之前抢占执行第一组命令,来执行第二组命令(例如,相对于第一组命令具有较高优先级)。
图1是说明可用以实施本发明的技术的实例计算装置2的框图。计算装置2可包括个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(例如,移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、手持式装置(例如,便携式视频游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、显示装置、电视、电视机顶盒、服务器、中间网络装置、主机计算机、或处理和/或显示图形数据的任何其它类型的装置。
如图1的实例中所说明,计算装置2包含用户输入接口4、CPU 6、存储器控制器8、系统存储器10、图形处理单元(GPU)12、GPU 12的本地存储器14、显示接口16、显示器18和总线20。用户输入接口4、CPU 6、存储器控制器8、GPU 12和显示接口16可使用总线20彼此通信。总线20可为多种总线结构中的任一种,例如第三代总线(例如,超传输总线或无限带宽总线)、第二代总线(例如,高级图形端口总线、外围组件互连(PCI)高速总线,或高级eXentisible接口(AXI)总线)或另一类型的总线或装置互连件。应注意,图1所示的不同组件之间的总线和通信接口的特定配置仅是示范性的,并且具有相同或不同组件的计算装置和/或其它图形处理系统的其它配置也可用于实施本发明的技术。
CPU 6可包括控制计算装置2的操作的通用或专用处理器。用户可将输入提供到计算装置2以使得CPU 6执行一或多个软件应用程序。在CPU 6上执行的软件应用可包含(例如)操作系统、字处理器应用、电子邮件应用、电子数据表应用、媒体播放器应用、视频游戏应用、图形用户接口应用或另一程序。用户可经由一或多个输入装置(未示出)(例如,键盘、鼠标、麦克风、触摸垫或经由用户输入接口4耦合到计算装置2的其它输入装置)将输入提供到计算装置2。
在CPU 6上执行的软件应用程序可包含指令CPU 6以使得向显示器18渲染图形数据的一或多个图形渲染指令。在一些实例中,所述软件指令可符合图形应用程序编程接口(API),例如开放图形库API、开放图形库嵌入系统(OpenGL ES)API、Direct3DAPI、X3D API、RenderMan API、WebGL API或任何其它公共或专有标准图形API。为了处理图形渲染指令,CPU 6可将一或多个图形渲染命令发布到GPU 12以使得GPU 12执行图形数据的渲染的一些或全部。在一些实例中,将渲染的图形数据可包含例如点、线、三角形、四边形、三角形带等图形基元的列表。
存储器控制器8有助于进出系统存储器10的数据传送。举例来说,存储器控制器8可接收存储器读取和写入命令,且服务相对于存储器系统10的此些命令以便为计算装置2中的组件提供存储器服务。存储器控制器8通信耦合到系统存储器10。虽然存储器控制器8在图1的实例计算装置2中被说明为与CPU 6和系统存储器10两个分开的处理模块,但在其它实例中,存储器控制器8的功能性中的一些或全部可实施于CPU 6和系统存储器10中的一或两个上。
系统存储器10可存储可由CPU 6存取以用于执行的程序模块和/或指令和/或由在CPU 6上执行的程序使用的数据。举例来说,系统存储器10可存储用户应用和与所述应用相关联的图形数据。系统存储器10可另外存储用于由计算装置2的其它组件使用和/或由其产生的信息。举例来说,系统存储器10可充当用于GPU 12的装置存储器且可存储将由GPU 12操作的数据以及由GPU 12执行的操作产生的数据。举例来说,系统存储器10可存储纹理缓冲器、深度缓冲器、模板缓冲器、顶点缓冲器、帧缓冲器或类似物的任何组合。另外,系统存储器10可存储命令流以供GPU 12处理。系统存储器10可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
GPU 12可经配置以执行图形操作以向显示器18渲染一或多个图形基元。因此,当在CPU 6上执行的软件应用程序中的一个需要图形处理时,CPU 6可向GPU 12提供图形命令和图形数据以用于向显示器18渲染。图形命令可包含(例如)例如绘制调用的绘制命令、GPU状态编程命令、存储器传递命令、通用计算命令、内核执行命令等。在一些实例中,CPU 6可通过将命令和图形数据写入到存储器10而将所述命令和图形数据提供到GPU 12,存储器10可由GPU 12存取。在一些实例中,GPU 12可进一步经配置以针对在CPU 6上执行的应用程序执行通用计算。
在一些情况下,GPU 12可内置有比CPU 6提供对向量操作更有效的处理的高度并行的结构。举例来说,GPU 12可包含经配置以便以并行方式对多个顶点或像素操作的多个处理元件。在一些情况下,GPU 12的高度并行性质允许GPU 12比使用CPU 6直接将场景绘制到显示器18更快速地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)绘制到显示器18上。另外,GPU 12的高度并行性质可允许GPU 12比CPU 6更快速地处理用于通用计算应用的特定类型的向量和矩阵运算。
在一些情况下,GPU 12可集成到计算装置2的母板中。在其它情况下,GPU 12可存在于安装在计算装置2的母板中的端口中的图形卡上或另外可并入在经配置以与计算装置2交互操作的外围装置内。在进一步例子中,GPU 12可与CPU 6位于同一微芯片上从而形成芯片上系统(SoC)。GPU 12可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。
GPU 12可直接耦合到GPU本地存储器14。因此,GPU 12可在不必使用总线20的情况下从GPU本地存储器14读取数据并将数据写入到GPU本地存储器14。换句话说,GPU 12可使用本地存储装置而非芯片外存储器在本地处理数据。这通过消除GPU 12经由总线20读取和写入数据的需要来允许GPU 12以更高效的方式操作,其中经由总线操作可经历繁重的总线业务。然而,在一些情况下,GPU 12可不包含单独的高速缓冲存储器,而是经由总线20利用系统存储器10。GPU本地存储器14可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
CPU 6和/或GPU 12可将再现的图像数据存储在系统存储器10内所分配的帧缓冲器中。显示接口16可从帧缓冲器检索数据并配置显示器18以显示由所再现的图像数据表示的图像。在一些实例中,显示接口16可包含经配置以将从帧缓冲器检索的数字值转换为可由显示器18消耗的模拟信号的数/模转换器(DAC)。在其它实例中,显示接口16可将数字值直接传递到显示器18以供处理。显示器18可包含监视器、电视机、投影装置、液晶显示器(LCD)、等离子体显示器面板、发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视机显示器、纳米晶体显示器或另一类型的显示单元。显示器18可集成在计算装置2内。举例来说,显示器18可为移动电话手持机或平板计算机的屏幕。或者,显示器18可为经由有线或无线通信链路耦合到计算装置2的独立装置。举例来说,显示器18可为经由缆线或无线链路而连接到个人计算机的计算机监视器或平板显示器。
本发明中描述的技术涉及抢占。在抢占中,GPU 12可暂停执行一组命令,执行另一组命令到完成,且接着完成执行初始组的命令。举例来说,GPU 12可在CPU 6确定另一组较高优先级命令未被执行时执行一组命令。作为一说明,在CPU 6确定响应于与显示器18的用户交互而首先执行用于用户界面的命令时,GPU 12执行用于产生视频游戏的内容的命令,所述显示器18可为触摸屏。在这个实例中,即使完成执行用于视频游戏的命令被延迟,GPU12可也完成执行命令以产生用户界面。
在一些情况下,GPU 12可经配置以提供绘制调用级别抢占。举例来说,可仅在绘制调用边界处允许抢占。在这个实例中,如果GPU 12开始执行绘制调用,且接着接收用以抢占的指令,那么GPU 12不可抢占直到完成绘制调用的执行(例如,完成用于渲染像素块的像素着色器的执行)。
然而,仅在绘制调用边界处具有抢占可能对于某些情况为非所要的。举例来说,完成用于一“组基元”的绘制调用可花费较长时间(例如,由于响应于绘制调用执行顶点着色器、像素着色器、其它着色器,和所有固定功能单元的功能),延迟较高优先级命令的执行。作为更多实例,单个基元级别抢占也可能不够,且绘制调用级别抢占可能对于较大大小的三角形(用于覆盖一个槽或筛管)无法很好地起作用。所述绘制调用可定义待渲染的多个基元。
本发明描述用于更精细粒度抢占的实例技术(例如,不必在绘制调用边界处出现的抢占)。所述实例技术可解决以上问题。在一些情况下,例如VR的工作负荷可得益于与绘制调用边界相比更精细粒度的抢占以支持时间扭曲(根据帧)。本发明中描述的技术可提供此类更精细粒度的抢占。
在一些技术中,GPU 12的盲冻结和存储恢复可用于更精细粒度抢占(例如,用于绘制调用边界之间)。盲冻结和存储是指立即将GPU 12的所有状态冻结在其各自状态下,且接着将指示其状态的信息存储以供稍后GPU 12的检索和恢复。然而,GPU 12的盲冻结和存储恢复在处理和功率方面可能太昂贵,以及独占GPU 12的的太多资源。
一般来说,CPU 6输出绘制调用以使GPU 12处理图形数据,且作为响应,GPU 12处理与绘制调用相关联的图形数据。与绘制调用相关联的图形数据的量可为变量(例如,100个基元,1000个基元)。为处理图形数据,GPU 12包含图形管线(在图4中更详细地说明),所述图形管线包含固定功能处理级和可编程处理级,且这些级中的每一个处理接收的数据且将产生的中间数据输出到下一级用于进一步处理直到GPU 12输出最终处理的图形数据,从而形成管线。
可编程级的实例包含顶点着色器和像素着色器(也被称为片段着色器)。顶点着色器级对于图形管线通常无输送量限制且对于几何构型恒定。像素着色器级可具有输送量限制,因为工作负荷通常随与几何构型无关的分辨率变化。
举例来说,顶点着色器级对基元的顶点进行操作。无论基元的大小如何,存在顶点着色器级的顶点着色器对其操作的一设定数目的顶点。基元的一个例子是三角形,且无论三角形多大,顶点着色器的三个实例化需要执行,各用以处理三角形的一个顶点。然而,像素着色器级中的像素着色器的实例化的数目可随由基元封装的像素的数目而变化。举例来说,像素着色器的一个实例化执行基元的每个像素。因此,从处理的角度来看,顶点着色器级的输送量可为可确定的且相对恒定的,但像素着色器级的输送量可为变化的,且在处理之前未必可确定。
在一个实例中,GPU 12可经配置以像素块级别(粒度)用于抢占。举例来说,GPU 12可在渲染一“组”像素(但不一定是与绘制调用相关联的所有像素)之后抢占。像素组的最小粒度通常是通过GPU 12的光栅化器处理的“像素块”。在图4中说明的光栅化器可为GPU 12的图形管线的固定功能级。在这个实例中,GPU 12可在将像素块(例如,与绘制调用相关联的像素中的一些,但不一定是与绘制调用相关联的所有像素)光栅化且着色之后抢占(例如,即使对第一组命令中的所有命令的执行尚未完成,也从执行第一组命令切换到第二组命令)。像素块大小可基于GPU 12的供应商/系列/架构而变化。
在本发明中,在图形处理方面描述实例。然而,本发明中描述的技术不受如此限制,且扩展到其中在GPU 12上执行非图形应用(例如,计算着色器)的实例。术语绘制调用和像素块不应被视为排他地受限于图形申请案,且应被视为覆盖用于当GPU 12执行计算着色器(例如,非图形相关的应用,例如矩阵或向量运算)时的类似命令和数据组。
如上文所描述,本发明中描述的技术允许GPU 12在未完成绘制调用的情况下抢占。为处理图形数据,GPU 12实施包含顶点着色器、光栅化器和像素着色器的图形管线。图形管线包含额外级(例如,域级、棋盘形布置,和外壳级),且顶点着色器、光栅化器和像素着色器级仅出于说明的目的描述。作为两个实例,图形管线可符合DX11管线或OpenGL管线,但不一定必须符合任何特定管线标准。
为完成绘制调用,GPU 12贯穿整个图形管线处理图形数据。在一个实例中,图形管线的一个单元(例如,顶点着色器)产生中间数据,将中间数据存储在GPU 12的本地存储器14中,且管线中的下一单元(例如,光栅化器或像素着色器)检索这个中间数据以供处理。在另一实例中,顶点着色器总是将中间数据输出到外部存储器(例如,系统存储器10)。
在本发明中描述的技术中,如果GPU 12接收用以抢占的指令,那么GPU 12将中间数据动态输出到系统存储器10从而使得GPU 12可在未完成绘制调用的情况下抢占。在无来自主机处理器(例如,CPU 6)的指令或不了解主机处理器的情况下完成向系统存储器10的动态输出。然而,如果GPU 12未接收到用以抢占的指令,那么GPU 12的图形管线的级将图形数据存储于本地存储器14中。
如上文所描述,为了进行图形处理,GPU 12对被称为像素块的一组像素起作用。绘制调用包含处理一或多个基元,且各基元可包含一或多个像素块。在一些技术中,GPU12将不抢占直到渲染与绘制调用相关联的所有基元的所有像素块。在本发明中描述的技术中,即使在或在绘制调用中的一基元或较多基元中存在较多需要被渲染的像素块,GPU 12也可在渲染基元的像素块之后抢占。
因此,本发明中描述的技术提供像素块级别抢占(例如,在处理像素块之后抢占),其比绘制调用抢占(例如,在处理绘制调用之后抢占)具有更精细粒度,这是因为绘制调用包含一或多个基元,且各基元包含一或多个像素块。在抢占之前等待GPU 12完成处理与绘制调用相关联的所有基元的所有像素块可比紧接在完成执行像素块之后抢占花费多得多的时间。
在本发明中描述的技术中,绘制调用的一或多个基元包含第一组基元和第二组基元,且GPU 12可在处理包含第一组基元中的一或多个基元的一或多个像素且不包含第二组基元的像素的像素块之后抢占。在仅提供绘制调用级别抢占的技术中,GPU 12将在抢占之前需要处理第一组基元和第二组基元两个的所有像素块。
为了进行抢占且提供像素块级别粒度,GPU 12可将中间数据动态输出到系统存储器10。为了进行对中间数据的此类动态输出,GPU 12可经配置以动态配置GPU 12的图形管线从而使得响应于抢占通知,GPU 12将由顶点着色器级所产生的中间数据输出到系统存储器10。
顶点着色器级之后的所述级中的每一个可完成当前在图形管线中对图形数据的处理。举例来说,由于图形管线的光栅化器级对像素块粒度起作用,因此像素着色器可针对被处理的特定像素块中的像素输出最终图形数据。在其之后,即使存在较多待处理的像素块和基元,图形管线也可停止执行用于处理与绘制调用相关联的基元的像素块的命令。
GPU 12可接着通过现在空闲用于执行的图形管线来执行另一组指令(例如,较高优先级指令)。接着,当时GPU 12将完成执行初始指令集时,GPU 12从系统存储器10读取中间数据且将中间数据馈入到产生中间数据的级之后的图形管线级处。
在正常操作期间,每个级将中间数据输出到GPU 12的本地存储器14。在本发明中描述的技术中,响应于抢占通知,GPU 12可将连接到图形管线的级(例如,光栅化器级)的本地存储器的输出断开连接,且将本地存储器的输出连接到将中间数据输出到系统存储器10的硬件流出单元。
如本发明中所使用,术语“断开连接”和“连接”用以表达存在使得中间数据以不同方式传送的硬件组件(例如,切换器)。通过本发明中描述的技术,可改变图形管线的流出硬件的用途来同样允许抢占。这种方式,例如计算着色器和其类似物的软件不需要被执行来以如例如切换器的硬件的不同方式将中间数据传送,且另外使用流出单元用于除流出硬件的正常目的之外还可用于抢占。
GPU 12在执行命令期间动态配置图形管线的级的互连。举例来说,GPU 12的图形管线的光栅化器级通常耦合到图形管线的像素着色器级。在一些实例中,GPU 12可在执行命令已开始之后动态配置图形管线的级的互连(例如,在所述命令中的至少一个命令已被执行之后,GPU 12动态配置级的互连),而非在执行命令之前配置图形管线的级如何互连。
归因于在执行所述组命令期间对图形管线的级的互连的动态配置,GPU 12可将在执行所述命令中的一或多个命令期间产生的中间数据输出到系统存储器10。在一些技术中,GPU 12可经配置以从不将中间数据输出到系统存储器10(例如,从不流出中间数据)。在一些技术中,GPU 12可经配置以总是将中间数据输出到系统存储器10(例如,总是流出中间数据)。一些实例允许任选地流出中间数据(例如,任选地将中间数据输出到系统存储器10)。然而,在任选流出的此类实例中,GPU 12的图形管线是否将中间数据输出是在通过GPU12来执行命令且通过CPU 6来执行命令组之前确定的(例如,根据OpenGL和Direct X API)。
在本发明中描述的技术中,GPU 12是否输出中间数据是动态确定且响应于接收到抢占指令而确定。CPU 6可不需要在GPU 12执行之前预定义GPU 12的图形处理管线是否将中间数据输出到系统存储器10。相反,GPU 12可经配置以不将中间数据输出到系统存储器10,但响应于抢占通知,动态配置图形管线的级的互连以将中间数据输出到系统存储器10(例如,将本地存储器14的输出从光栅化器级断开连接且将本地存储器14的输出连接到硬件流出单元)。从CPU 6的角度,在GPU 12的图形管线中不存在变化(即,GPU 12动态配置图形管线的级的互连(例如,改变一个级连接到什么且将所述级连接到不同单元)以在无需来自CPU 6的任何指令的情况下将中间数据输出到系统存储器10)。
图2是进一步详细说明图1的计算装置2的CPU 6、GPU 12和存储器10的框图。如图1和2中所示出,CPU 6通信耦合到GPU 12和存储器10,且GPU 12通信耦合到CPU 6和存储器10。在一些实例中,GPU 12可与CPU 6一起集成到母板上。在额外实例中,GPU 12可实施在安装在包含CPU 6的母板的端口中的图形卡上。在其它实例中,GPU 12可并入在经配置以与CPU 6交互操作的外围装置内。在额外实例中,GPU 12可位于与CPU 6相同的微芯片上,从而形成系统芯片(SoC)。CPU 6经配置以执行软件应用24A、24B、图形API 26、GPU驱动程序28和操作系统30。GPU 12包含控制器32和一或多个处理单元34。
软件应用24A、24B可各自包含使得图形内容显示的一或多个指令使得在GPU 12上进行非图形任务(例如,通用计算任务)的一或多个指令中的至少一个。软件应用24A、24B可将指令分布到图形API 26。图形API 26可为将从软件应用24A、24B接收的指令转译为可由GPU驱动程序28消耗的格式的运行时间服务。
GPU驱动程序28经由图形API 26从软件应用24A、24B接收指令,且控制GPU 12的操作以服务所述指令。举例来说,GPU驱动程序28可调配一或多个命令流,将所述命令流放置到存储器10中并指示GPU 12执行命令流。GPU驱动程序28可将命令流放置到存储器10中且通过操作系统30与GPU 12通信,例如通过一或多个系统调用。
GPU驱动程序28可将抢占通知发送到GPU控制器32以指示另一命令流(例如,高优先级命令流)已准备好执行。在一些实例中,抢占通知还可向GPU 12指示在抢占当前执行的命令流之后即刻执行哪一命令流。GPU驱动程序28可(例如)通过将一或多个值写入(例如,经由操作系统30)到由GPU控制器32轮询的一或多个GPU寄存器而将抢占通知发送到GPU控制器32。所述一或多个GPU寄存器可包含位于GPU 12中的一或多个硬件GPU寄存器、位于存储器(例如,存储器10)中的一或多个存储器映射的GPU寄存器,或其任何组合。在将值写入到存储器映射的GPU寄存器时,CPU 6可将所述值写入到存储器10中的由GPU控制器32轮询的一或多个特定存储器地址。在一些实例中,GPU驱动程序28可将第一值写入到一或多个GPU寄存器以激活抢占通知(包含GPU12中的“中断”),且将第二值写入到识别命令流的位置的一或多个GPU寄存器以在当前命令流的抢占正在执行时执行。
控制器32经配置以检索存储于命令流中的命令,且分派所述命令以用于在处理单元34中的一或多个上执行。控制器32可分派来自命令流的命令以用于在处理单元34的全部或子集上执行。在一些实例中,控制器32可经配置以轮询一或多个GPU寄存器,所述一或多个GPU寄存器指示CPU 6是否已将抢占通知发送到GPU 12。在其中GPU寄存器是存储器映射的寄存器的情况下,控制器32可经配置以轮询存储器10中的指示CPU 6是否已将抢占通知发送到GPU 12的一或多个特定存储器地址。响应于一或多个GPU寄存器指示CPU 6已将抢占通知发送到GPU 12,控制器32可抢占当前执行的GPU命令流的执行且开始执行另一命令流。举例来说,在本发明中描述的技术中,控制器32可配置由处理单元34形成的图形管线,从而使得GPU 12响应于抢占通知将由一或多个处理单元34中的处理单元所产生的中间数据输出到系统存储器10。在一些情况下,控制器32可经配置以确定命令流在当前通过读取存储于GPU 12的一或多个寄存器中的信息来执行命令流的抢占时执行,所述GPU 12确认命令流在抢占时执行。举例来说,CPU6可将识别较高优先级的命令流的存储器位置的指针存储在一或多个GPU寄存器中。
控制器32可为GPU 12的硬件,可为在GPU 12上执行的软件或固件,或两个的组合。此外,以上对于控制器32如何确定用以抢占的指令是否接收到的描述仅出于说明的目的提供。可存在用于CPU 6指示GPU 12抢占的其它方式,且本发明中描述的技术不限于任何具体实例。
处理单元34可包含一或多个处理单元,其中的每一个可为可编程处理单元或固定功能处理单元。处理单元34的处理单元,也被称为级,一起形成经配置以执行图形处理的图形管线。可编程处理单元可包含例如经配置以执行从CPU 6下载到GPU 12上的一或多个着色器程序的可编程着色器单元。在一些实例中,着色器程序可为用高级着色语言(例如,OpenGL着色语言(GLSL)、高级着色语言(HLSL)、用于图形的C(Cg)着色语言等)编写的程序的经编译版本。在一些实例中,可编程着色器单元可包含经配置以并行操作的多个处理单元,例如,SIMD管线。可编程着色器单元可具有存储着色器程序指令的程序存储器和执行状态寄存器,例如指示程序存储器中正执行的当前指令或待提取的下一指令的程序计数器寄存器。处理单元34中的可编程着色器单元可包含(例如)顶点着色器级、像素着色器级、几何形状着色器级、外壳着色器级、域着色器级、计算着色器级和/或统一着色器级。
固定功能处理单元可包含经硬连线以进行某些功能的硬件。虽然固定功能硬件可经由举例来说一或多个控制信号而配置以执行不同功能,但所述固定功能硬件通常并不包含能够接收用户编译程序的程序存储器。在一些实例中,处理单元34中的固定功能处理单元可包含(例如)执行光栅操作的处理单元,例如深度测试、剪刀测试、α掺合等。
在图2的实例图形处理系统中,存储器10包含两个命令流,各命令流与不同图形应用上下文(即,软件应用24A、24B中的不同一个)相关联。举例来说,第一命令流与用于软件应用24A的图形应用上下文相关联,且第二命令流与用于软件应用24B的图形应用上下文相关联。便于说明,两个GPU命令流被描述为存储于图2的实例图形处理系统的存储器10中。然而,在其它实例中,可使用存储于图形处理系统的相同或不同组件中的相同或不同数目的GPU命令流。
在以上实例中,GPU 12在其之间切换的两个流为来自两个不同应用24A、24B的命令流。然而,本发明中描述的实例不限于此。在一些实例中,在需要的情况下(例如,应用24A的高优先级流抢占应用24A的低优先级流),GPU 12可在相同应用的命令流之间切换。本发明中所描述的命令流不应被视为受限为用于不同应用,且可用于相同应用。
CPU 6的GPU驱动程序28可经配置以将命令流写入存储器10,且GPU 12的控制器32可经配置以从存储器10读取命令流中的一或多个命令。在一些实例中,可将命令流中的一或两个存储为存储器10中的环形缓冲器。环形缓冲器可为具有循环寻址方案的缓冲器,其中CPU 6和GPU 12维持与将数据写入到环形缓冲器和从环形缓冲器读取数据相关联的同步状态变量。举例来说,如果第一命令流是环形缓冲器,那么CPU 6和GPU 12中的每一个可存储指示待写入到环形缓冲器中的下一地址的写入指针和指示待从环形缓冲器中读取的下一地址的读取指针。在CPU 6将新命令写入到环形缓冲器时,CPU 6可更新CPU 6中的写入指针且指令GPU 12更新GPU 12中的写入指针。类似地,在GPU 12从环形缓冲器读取新命令时,GPU 12可更新GPU 12中的读取指针且指令CPU6更新CPU 6中的读取指针。其它同步机构是可能的。在读取和/或写入指针达到针对环形缓冲器所分配的地址范围内的最高地址时,读取和/或写入指针可回绕到最低地址以实施循环寻址方案。
现将相对于图2描述根据本发明而设计的实例GPU驱动程序28和实例GPU控制器32的实例操作。在此实例中,软件应用24B具有比软件应用24A的调度优先级高的调度优先级。具体来说,在这个实例中,软件应用24B是用户接口(UI)软件应用,其包含致使显示图形内容且需要对GPU 12的高优先级存取以确保UI的及时更新的一或多个指令。同时,在这个实例中,软件应用24A是较低优先级的应用,其包含致使显示图形内容的一或多个指令和/或致使在GPU 12上执行非图形任务(例如,GPGPU计算任务)的一或多个指令。
GPU驱动程序28从软件应用24A接收指定待由GPU 12执行的图形操作和/或通用计算操作的一或多个指令。GPU驱动程序28将输出命令流放置到可由GPU控制器32存取的存储器10中。GPU驱动程序28通知GPU控制器32对应于软件应用24A的命令流可用于处理。举例来说,GPU驱动程序28可将指示命令流准备好执行的一或多个值写入到GPU寄存器(例如,由GPU 12轮询的GPU硬件寄存器和/或由GPU 12轮询的GPU存储器映射的寄存器)。
在通知命令流准备好执行之后,GPU 12的控制器32可确定资源在GPU 12上当前是否可用以开始执行命令流。如果资源可用,那么控制器32开始分派命令流中的命令。同时,GPU驱动程序28从UI软件应用24B接收到指定待由GPU 12执行的高优先级图形操作的一或多个指令。GPU驱动程序28产生高优先级的命令流以进行由所接收的指令指定的操作,且将所得的命令流放置到存储器10中。
GPU驱动程序28将抢占通知提供到控制器32,指示高优先级的命令流准备好处理且这个命令流应抢占在GPU 12上执行的任何其它较低优先级的命令流。在一些实例中,GPU驱动程序28可通过写入到由GPU 12轮询的GPU硬件寄存器且/或通过写入到由GPU 12轮询的存储器映射暂存器(例如,存储器10中的特定位置)来将抢占通知(例如,抢占指令或命令)提供到GPU 12。
在一些情况下,GPU驱动程序28或CPU 6可对于不同应用定义抢占等级或定义相同应用的命令。举例来说,第一流与第二流相比具有较高优先级,但与第三流相比具有较低优先级。在这个实例中,如果执行第二流,那么GPU驱动程序28可使得GPU 12通过第一流或者第三流抢占第二流。然而,如果执行第一流,那么仅第三流可抢占,且没有流可抢占第三流。这个实例可扩展到“n个”流且可存在流可通过其它流抢占的其它因素。
在本发明中描述的技术中,GPU 12可支持像素块级别抢占。举例来说,GPU 12可使用传递用于“正常”处理的芯片上数据,且通过来动态配置图形管线的级互连的方式来动态选择以基于抢占来流出顶点输出。作为一实例,GPU 12可使用例如存储器10(例如,需要总线20来通信的存储器)的外部存储器来存储用于“抢占”上的管线中的基元的数据,且可停止像素(块)产生。GPU 12可清空所有顶点级,但替代地将其动态引导到外部存储器。控制器32,GPU 12的某一其它硬件或软件组件,或GPU 12的控制器32和其它组件可执行向存储器10的这个动态引导。在恢复时,GPU 12的控制器32或某一其它硬件或软件组件,或GPU 12的控制器32和其它组件可将后变换顶点属性馈入到像素管线。
在一些实例中,将后变换顶点属性馈入到像素着色器级。然而,一般来说,在恢复时,GPU 12的控制器32或某一其它硬件或软件组件,或GPU 12的控制器32和其它组件可将后变换顶点属性馈入到例如顶点着色器级、域着色器级、几何着色器级或其它着色器级的预像素着色器级输出。程序恢复发生的级可在GPU 12的级中的一个处,且本发明中描述的技术不应被视为限于被抢先的过程恢复开始的GPU 12的任何特定级。
作为一实例,由处理单元34形成的图形管线可以管线方式执行图形处理,其中一个单元(或级)产生下一级接收且进一步处理的中间数据。在正常操作期间,每个级将产生的中间数据输出到GPU 12的本地存储器14(例如,高速缓冲存储器;然而,例如寄存器或缓冲器的其它实例也可能作为本地存储器14)。下一级接着从本地存储器读取中间数据用于进一步处理。
然而,在CPU 6输出抢占通知的情况下,控制器32可经配置以变化由处理单元34形成的图形管线的配置。作为一实例,控制器32将从本地存储器接收中间数据的图形管线的级断开连接且将本地存储器的的输出连接到将中间数据输出到系统存储器10的硬件流出单元。控制器32可经配置以响应于抢占通知而动态流出中间数据(例如,输出到系统存储器10)。
在一些实例中,由处理单元34形成的图形管线可在执行命令之前经配置以将中间数据流出到系统存储器10或者不将中间数据流到系统存储器10。在本发明中描述的技术中,通过在执行命令期间动态配置图形管线(例如,响应于抢占通知),GPU 12可能够更快速地执行抢占。
举例来说,GPU 12可经配置以将中间数据(例如,在渲染一或多个基元的中间过程中产生的数据)输出到系统存储器10,这是指在将中间数据写入到系统存储器10之后,处理单元34准备好执行较高优先级的命令。在执行较高优先级的命令之前,处理单元34不需要等待直到绘制调用的所有基元被处理。
如上所述,断开连接和连接在本发明中用于指存在经特别设计以传送中间数据的硬件组件。举例来说,流出单元可为具有固定功能的硬件单元(例如,不可编程)。流出单元的固定功能可为传送中间数据,且GPU 12可将本地存储器的输出断开连接且将本地存储器的输出连接到流出单元以物理方式而非以编程方式(功能性地)改变图形管线。在一些实例中,不必执行例如计算着色器的软件来传送中间数据,这是因为所述技术充分利用流出功能性用于抢占目的,允许快速抢占。
图3A是说明显示器18的像素的概念图。图3B是说明显示器18上的像素块36的概念图。在图3A中,存在两个基元(例如,通过跨越显示器18的对角线形成的两个三角形)。像素块36是GPU 12的光栅化器在其上工作的像素组的最小粒度。如所说明,像素块36位于显示器18的右上角,但其它位置是可能的。此外,像素块36被说明为4×3(例如,在像素块36中存在四个横向像素和三个纵向像素),但其它大小是可能的且大体上基于GPU 12的供应商、系列和/或架构。
假定像素块36被处理,在本发明中描述的技术中,GPU 12可能够在GPU 12处理像素块36之后通过较高优先级组的命令抢占执行较低优先权组的命令。举例来说,在GPU 12产生且存储像素块36中的像素的像素值且所有其它中间数据流出到系统存储器10之后,GPU 12可切换到执行较高优先级的命令。
在一些技术中,GPU 12可能不仅需要等待直到包含像素块36的基元的所有像素的像素值产生,且还可能需要等待直到另一基元(例如,不包含像素块36的基元)的所有像素的像素值产生。GPU 12将需要等待直到绘制调用完成(例如,直到GPU 12到达绘制调用边界)。绘制调用边界为绘制调用的末端(例如,在像素值产生且存储用于绘制调用的上一基元的上一像素之后)。
通过像素块级别粒度的抢占,抢占中的延迟被减少。举例来说,在图3B中,假定第一组基元包含包含像素块36的顶部基元,且第二组基元包含底部基元。在这个实例中,抢占包含在将像素块36中的像素光栅化且着色(例如,在GPU 12产生像素块36中的像素的像素值之后)且不其它后续块(例如,在抢占发生之前没有像素块36之后的块被处理)之后抢占。举例来说,虽然图3B中的两个基元都可已成为绘制调用的部分,但是抢占在产生像素块36的像素值之后发生,其中像素块36包含第一组基元(例如,顶部基元)中的一或多个基元的一或多个像素且不包含第二组基元(例如,底部基元)的像素。
图4是说明根据本发明中所描述的一或多个实例的可实施图形处理管线的实例的图形处理单元(GPU)的实例的框图。为了执行图形操作,GPU 12可实施图形处理管线。图形处理管线包含执行如由执行于GPU 12上的软件或固件定义的功能,和经硬接线以执行极特定功能的固定功能单元执行功能。在GPU 12上执行的软件或固件可被称作着色器,且着色器可在GPU 12的一或多个着色器核心上执行。着色器给用户提供功能灵活性,因为用户可设计着色器按任何可设想的方式执行所要的任务。然而,固定功能单元针对固定功能单元执行任务的方式而经硬接线。因此,固定功能单元可不提供大量功能灵活性。
在这个实例中,GPU 12可包含输入汇编程序级38、顶点着色器级40、光栅化器级42、像素着色器级44,和输出合并级46中的一或多个。GPU 12可包含额外级,例如按以下次序接着顶点着色器级的外壳着色器级、曲面细分级、域着色器级。GPU 12还可包含耦合到域着色器级的输出(在GPU包含域着色器级的情况下)或顶点着色器级40的输出(在无域着色器级的情况下)的几何着色器级。如所说明,光栅化器级42可从顶点着色器级40接收图形数据,或从几何着色器级(当可用时)或域着色器级(当可用时)接收。
图形管线的其它配置是可能的,且本发明中描述的技术不应被视为限于图4中说明的具体实例。举例来说,GPU 12可包含比所说明的那些多的级,且在一些实例中,GPU12可能未必包含所有所说明的级。此外,提供所述级的特定排序用于说明目的且不应被视为限制。
输入汇编程序级38可从系统存储器10读取如由CPU 6定义的顶点,且汇编所述控制点以形成顶点。举例来说,输入汇编程序级38可读取座标、色彩值,和其它此类信息。坐标、色彩值和其它此类信息可通常被称作顶点的属性。基于顶点的属性,输入汇编程序级38可确定基元的大体布局。以此方式,输入汇编程序级38可汇编控制点以形成补片。输入汇编程序级38可为固定功能单元。
顶点着色器级40可处理来自输入汇编程序级38的顶点。举例来说,顶点着色器级40可执行每顶点操作,例如变换、蒙皮、变形,和每顶点照明。顶点着色器级40可为着色器。
光栅化器级42从顶点着色器级40接收基元,且将基元转换成像素以用于显示。举例来说,基元可被定义为指示基元的互连的向量,且可定义于独立于将显示图像的显示器的坐标空间中。光栅化器级42将这些向量转换成显示器座标,且执行任何额外功能,例如,去除经遮住的基元内的点。
像素着色器级44接收如由光栅化器级42输出的像素,且执行后处理以将色彩值指派到待显示的像素中的每一个。例如,像素着色器级44可接收存储在系统存储器10中的常数值、存储在系统存储器10中的纹理数据和任何其它数据以产生每像素输出,例如色彩值。像素着色器级44也可输出指示像素的不透明性的不透明度值。
输出合并级46可执行任何最终像素处理。例如,输出合并级46可利用深度信息进一步确定是否应去除显示像素中的任何一个。输出合并级46还可执行掺合操作以产生最终像素值。输出合并级46可将最终像素值输出到一般来说定位于系统存储器10内的帧缓冲器,但其可定位于GPU 12内。
在图4中示出的例子中,所述级中的每一个从GPU 12的本地存储器14接收数据且将数据输出到GPU 12的本地存储器14。除本地存储器14之外或替代本地存储器14,存在本地存储器的其它实例。作为一个实例,所述级可将数据输出到通用寄存器(GPR)且从通用寄存器(GPR)接收数据。不同于本地存储器14,GPR中的每一个可经配置以从特定级接收且输出到特定级,而非用于所述级中的每一个的存储器。GPR为GPU 12的本地存储器的另一实例。
GPU 12的本地存储器14接收由对应的级所产生的中间数据且将中间数据输出到下一级用于进一步处理。举例来说,输入汇编程序级38从本地存储器14接收图形数据,对图形数据进行图形处理且产生第一中间数据,输入汇编程序级38将第一中间数据存储于本地存储器14中。顶点着色器级40从本地存储器14接收这个第一中间数据,对这个检索到的中间数据进行图形处理且产生第二中间数据。
在正常操作中(例如,当不存在抢占通知时),光栅化器级42从本地存储器14接收这个第二中间数据,对所述第二中间数据进行图形处理且产生第三中间数据,光栅化器级42将所述第三中间数据存储于本地存储器14中。输出合并级46从本地存储器14接收第三中间数据,对所述第三中间数据进行图形处理且产生最终像素值,输出合并级46将所述像素值存储于系统存储器10中或可能存储于本地存储器14内(或两个的组合)。
在顶点着色器级40与光栅化器级42存在较多级的实例中,可存在用于这些中间级(例如,外壳着色器级、域着色器级,和几何着色器级)的对本地存储器14的较多连接件。从顶点着色器级40到光栅化器级42但不包含光栅化器级42的各个级可统称为几何构型管线。在本发明中描述的技术中,响应于抢占通知,控制器32可配置所说明的管线从而使得几何构型管线(例如,在这个实例中为图4中的顶点着色器级40)的输出流出(例如,输出)到系统存储器10。
如所说明,GPU 12包含流出单元41,其为GPU 12的硬件单元。流出单元41可经配置以从本地存储器14接收数据,且更确切地说,接收由几何构型管线所产生的数据,且将所述数据输出到系统存储器10。流出单元41还可以反向配置以从系统存储器10接收数据且将数据存储于本地存储器14中(例如,在抢占完成且将执行初始指令之后)。因此,流出单元41为GPU 12提供特定方式以将中间数据(例如,由所述几何构型管线所产生的的数据)输出到系统存储器10且从系统存储器10检索这个中间数据。
在一些技术中,流出单元41用于接收中间数据的特定目的。然而,在这些技术中,流出单元41是否将中间数据输出到了系统存储器10可能需要在任何执行之前确定。举例来说,如果流出单元41将输出中间数据,那么GPU 12的图形管线处于第一配置,且如果流出单元41将不输出中间数据,那么GPU 12的图形管线为第二配置。无论图形管线处于第一配置还是第二配置,GPU 12可能需要在执行命令之前设定所述配置。
然而,在本发明中描述的技术中,控制器32可动态配置图形管线的级的互连,从而使得在执行命令期间,控制器32可将图形管线配置成第一配置或第二配置。举例来说,响应于抢占通知,控制器32可将连接到光栅化器级42的本地存储器14的输出断开连接且将本地存储器14的输出连接到流出单元41。举例来说,GPU 12可响应于接收到绘制调用而通过图4中说明的图形管线执行第一组命令。绘制调用定义待由第一组命令渲染的一或多个基元。如所说明,图形管线经配置以将由图形管线的级在执行第一组命令期间所产生的数据存储于GPU 12的本地存储器14中。
控制器32可接着在执行第一组命令期间接收抢占通知。响应于接收到抢占通知,控制器32可将GPU 12的本地存储器14的输出从图形管线的级(例如,光栅化器级42)断开连接且将本地存储器的输出连接到硬件流出单元41来将在执行第一组命令中的一或多个命令期间产生的中间数据(例如,由顶点着色器级40或更一般来说几何构型管线所产生的中间数据)输出到GPU 12外部的存储器(例如,系统存储器10)以在执行第一组命令期间动态配置GPU 12的图形管线的级的互连。归因于对图形管线的级的互连的动态配置,GPU 12可将中间数据输出到GPU 12外部的存储器(例如,系统存储器10)。因此,控制器32可充分利用GPU 12的硬件能力并非依赖于例如计算着色器的软件来进行抢占,来以像素块级别粒度进行抢占。
在正常操作中,控制器32可保持开关S2关闭且开关S1打开,使得光栅化器级42接收由所述几何构型管线(例如,这个实例中的顶点着色器级40)所产生的中间数据。举例来说,光栅化器级42可在接收抢占通知之前从本地存储器接收中间数据以供光栅化器级42处理。接着,响应于抢占通知,控制器32可打开开关S2且关闭开关S1,从而使得所述几何构型管线产生的任何数据通过流出单元41流出到系统存储器10。通过这种方式,控制器32动态配置图形管线的级的互连(例如,破坏几何构型管线与下一级之间存在的连接件且现在几何构型管线输出到不同级)。在图4中,控制器32可配置图形管线从而使得仅响应于接收到抢占通知,流出单元41将由着色器(例如图4中的顶点着色器级40的几何构型管线中的上一着色器)所产生的中间数据输出到GPU 12外部的存储器(例如,系统存储器10)。归因于对图形管线的级的互连的动态配置,流出单元41经配置以将中间数据输出到系统存储器10。
控制器32可接着停止执行用于渲染一或多个基元的第一组命令,且通过图形管线允许第二组命令执行。通过这种方式,在完成对用以渲染所述绘制调用的所述一或多个基元的所述第一组命令的执行之前,控制器32可抢占执行所述第一组命令,来执行第二组命令。在执行第二组命令之后,控制器32可使得GPU 12恢复执行第一组命令。
在本发明中,当绘制调用的所有基元被渲染时,GPU 12达到绘制调用边界。由于GPU 12是能够在完成执行用以渲染绘制调用的一或多个基元的第一组命令之前抢占,因此GPU 12在绘制调用边界之前抢占。
在一些实例中,在绘制调用边界之前的抢占中,GPU 12可经配置以抢占中间基元。如所描述,GPU 12提供像素块级别粒度用于抢占。举例来说,在执行期间,光栅化器级42针对像素块中的一或多个像素从本地存储器14检索中间数据。像素块包含基元的一或多个像素,且大体上小于基元。
在控制器32打开开关S2之后,光栅化器级42不再能够检索中间数据。因此,光栅化器级42可完成处理当前像素块,像素着色器级44可处理当前像素块中的像素,且输出合并级46可处理当前像素块中的像素。接着,这些级中的每一个可被视为被情况(即,目前不处理数据)且能够对第二组的命令操作(例如,第一组命令被抢先的较高优先级命令)。在这个实例中,抢占包含在将像素块光栅化且着色(例如,在光栅化器级42和像素着色器级44对像素块执行对应的功能之后)且无其它后续像素块之后抢占,即使在绘制调用的基元中存在较多块需要被处理。通过这种方式,如果基元中存在较多像素块,那么GPU 12提供一机构以在完成当前像素块的处理之后抢占(例如,提供用于像素块粒度的抢占的机构)。
对于在图形管线中的光栅化器级42之前的组件,这些级在接收抢占通知之后产生的任何数据通过流出单元41流出到系统存储器10。举例来说,控制器32可允许顶点着色器级40(和所述几何构型管线中的任何其它级)完成对这些级的任何数据的处理且将所得中间数据输出到系统存储器10。通过这种方式,控制器32清空所述几何构型管线中的级。
除清空所述几何构型管线的级和光栅化器级42之后且包含光栅化器级42的级之外,控制器32还可停止执行第一组命令中的命令。举例来说,控制器32可停止输入汇编程序级38再汇编基元且停止将第一组命令中的命令发布到顶点着色器级40。如果存在从不输出的绘制调用的一或多个基元的任何剩余数据,那么控制器32可在完成对第二组命令的执行之后在第一组命令将完成执行时将所述数据的上下文值存储在系统存储器10中。
上下文值是指GPU 12可用以确定如何在抢占之后恢复执行命令的值。上下文值的实例包含地点信息、属性信息、命令流信息(例如,在所述命令下抢占发生)、GPU的状态信息(例如,正反器的位置)、寄存器内的值,和GPU 12可用以将自身放置在当GPU 12抢占执行第一组命令时GPU 12所处状态的相同状态的其类似物。在本发明中,并非响应于绘制调用而存储所有基元的所有上下文值,其可能需要大量存储器,GPU 12可存储有限量的上下文值(例如,仅对于具有未输出的中间数据的那些基元)。
举例来说,响应于抢占通知,控制器32打开开关S2且关闭开关S1以流出中间数据,且使得所有级完成对在抢占通知接收时当前正执行的第一组命令中的任何命令的执行。控制器32接着使得第二组命令一直执行到完成(即,控制器32使得第二组命令中的上一命令完成)。
在执行所述第二组命令之后,控制器32通过从系统存储器10检索所述中间数据来恢复执行所述第一组命令,来进行光栅化和像素着色。举例来说,为完成对第一组命令的执行,控制器32关闭开关S1且关闭开关S2。流出单元41响应于抢占通知从系统存储器10读取存储于系统存储器10中的中间数据,光栅化器级42现在将这个中间数据光栅化且像素着色器级44对由光栅化器级42所产生的数据应用像素着色。另外,输入汇编程序级38基于存储的在抢占通知接收时可能未经汇编的上下文值汇编绘制调用的基元。顶点着色器级40接着处理这些基元且图形管线正常工作(例如,控制器32将图形管线配置到其正常状态,其中中间数据存储在本地而非系统存储器10中)。
为进一步有助于理解,以下针对GPU 12从CPU 6接收绘制调用来渲染10个基元的情况来描述本发明的实例技术。本这个实例是出于容易描述而提供,且不应被理解为限制。
响应于接收到绘制调用,GPU 12执行用于渲染10基元的第一组命令。输入汇编程序级38汇编基元,且随着输入汇编程序级38完成汇编基元,顶点着色器级40执行顶点着色器的实例化以处理基元的顶点。光栅化器级42接收顶点且按像素块来处理。
这是因为光栅化和像素着色可花费未知的时间,且往往会比顶点着色花费更长时间,在一些实例中,在光栅化器级42处理的基元与顶点着色器级40对其进行操作的基元之间可存在几个基元的差值。举例来说,对于10个基元,顶点着色器级40可在处理基元8,而光栅化器级42在对基元5的像素块操作。
假定当顶点着色器级40在处理基元8且光栅化器级42在对控制器32接收抢占通知的基元5的多个像素块中的一像素块操作时。控制器32接着打开开关S2且关闭开关S1。在这种情况下,基元1到4被渲染且其像素值被存储于系统存储器10中。顶点着色器级40对基元5到8产生的所有中间数据通过流出单元41从本地存储器14流出到系统存储器10。光栅化器级42完成对在GPU 12接收抢占通知时光栅化器级42处理的基元5的像素块的处理。像素着色器级44和输出合并级46对基元5的像素块执行对应的处理。控制器32停止将第一组命令中的任一个发布到GPU 12的图形管线的级中的任一个。
对于基元9和10,控制器32存储其上下文值从而使得输入汇编程序级38可在GPU12完成执行第一组命令抢占的第二组命令之后汇编这些基元。控制器32还可存储指示光栅化器级42在处理哪个像素块的信息,从而使得当GPU 12执行第一组命令的剩余命令时,控制器32可使得流出单元41检索基元5的下一像素块。
如上文所描述,控制器32动态配置GPU 12的图形管线以将由所述几何构型管线所产生的中间数据选择性输出到外部存储器(例如,系统存储器10)。如下所述,一些技术在执行命令设定GPU 12将中间数据输出到系统存储器10或者将中间数据保持存储于本地存储器中。通过将流出单元41动态连接(例如,在运行期间)到本地存储器14,控制器32在执行第一组命令期间配置图形管线使得本发明中描述的技术允许以像素块级别粒度在绘制调用边界之间进行抢占。
图5是说明图形管线的另一实例的框图。图5的图形管线是例如DX9/OpenGL 3.xAPI的图形管线的实例。举例来说,图5什么输入汇编级38、顶点着色器(VS)级40,和像素着色器(PS)级44。为方便起见未说明例如光栅化器级42的光栅化器。
输入汇编48接收图形数据,例如基元的座标,且构建多个基元(例如,三角形)。顶点着色器级40对基元的顶点进行操作。顶点着色器级40可将后变换顶点属性输出(例如,存放)于顶点参数存储器(VPM)中,其有时被称为顶点参数高速缓冲存储器(VPC)。在这个实例中,后变换顶点属性为顶点着色器级40产生的中间数据。VPM可以是GPU本地存储器14(例如,GPU 12的片上存储器,其中GPU 12不需要总线20来存取)的部分。像素着色器级44从VPM接收后变换顶点属性以供处理(例如,消耗)。
图6是说明图形管线的另一实例的框图。图6的图形管线是例如DX10/11/OpenGL.4.x API.的图形管线的实例。图6说明输入汇编级38、顶点着色器级40,和像素着色器级44。如所说明,在图6中,顶点着色器级40可将所有后变换顶点属性流出到外部存储器10。像素着色器级44被分离且从存储器10消耗(例如,接收以供处理)后变换顶点属性。
在图5和6中说明的实例中,抢占可通过存储所有状态变量且从特定位置重新开始来发生。举例来说,在图5和6中,抢占可仅在绘制调用边界处发生。相对于图5和6,除非像素/片段着色器级完成,否则抢占不可发生,所述级基本上为绘制调用边界。
在本发明中描述的技术中,GPU 12可基于抢占而将由所述几何构型管线所产生的中间数据选择性地输出到系统存储器10。在这个意义上,GPU 12可基于抢占而在“DX9”型式(例如,图5)与“DX11”型式(例如,图6)顶点输出流出(例如,顶点信息输出的方式)之间动态选择。
为进行抢占,GPU 12使用存储器10来对于图形管线中的基元进行资料存储,停止像素(例如,块)产生,清空所有顶点级,但替代地将其动态引导到存储器10。举例来说,除了其是由GPU 12动态决定的之外类似于DX10的streamOut特性的级(例如,流出单元41),其支持抢占而非由用户/API预付。在恢复时,GPU 12从系统存储器10接收后变换顶点属性以供光栅化器级42处理。
图7是说明处理数据的实例方法的流程图。如所说明,GPU 12可响应于接收到绘制调用而通过GPU 12的图形管线执行第一组命令(50)。绘制调用定义待通过第一组命令来渲染的一或多个基元,且图形管线经配置以将由图形管线的级在执行第一组命令期间所产生的数据存储于GPU 12的本地存储器中。GPU 12在执行所述第一组命令期间且在渲染所有所述一或多个基元之前接收抢占通知(52)。
响应于接收到抢占通知,GPU 12可将GPU 12的本地存储器的输出从图形管线的级断开连接,且将GPU 12的本地存储器的输出连接到GPU 12的硬件流出单元41以在执行第一组命令期间动态配置图形管线的级的互连(54)。归因于在执行第一组命令期间对GPU 12的图形管线的级的所述的动态配置,GPU 12可将在执行第一组命令自动一或多个命令期间产生的中间数据从流出单元41输出到GPU外部的存储器(56)。举例来说,控制器32可将本地存储器14的输出从光栅化器级42断开连接且将本地存储器14的输出连接到流出单元41,来将在执行第一组命令中的一或多个命令期间由所述几何构型管线所产生的中间数据输出到系统存储器10,以在执行第一组命令期间动态配置GPU 12的图形管线来将中间数据输出到系统存储器10。
举例来说,在正常操作期间,所述级(例如,光栅化器级42)从本地存储器接收中间数据以供所述级在接收抢占通知之前处理。接着,仅响应于接收到抢占通知,GPU 12通过流出单元41将由着色器(例如,顶点着色器级40)所产生的中间数据输出到GPU 12外部的存储器(例如,输出到系统存储器10)。控制器32接着停止执行用于渲染一或多个基元的第一组命令。
在完成对用以渲染绘制调用的一或多个基元的第一组命令的执行之前,GPU 12可抢占执行第一组命令,来执行第二组命令(58)。GPU 12可接着执行第二组命令(60)。在执行第二组命令之后,GPU 12通过经由作为一实例的流出单元41从GPU 12外部的存储器(例如,系统存储器10)检索中间数据来恢复执行第一组命令,来通过来光栅化器级42进行光栅化且通过像素着色器级44来进行像素着色。
由于GPU 12可在完成对用以渲染绘制调用的一或多个基元的第一组命令的执行之前抢占执行第一组命令,因此GPU 12可在到达绘制调用边界之前抢占。举例来说,假设绘制调用的一或多个基元包含第一组基元和第二组基元。在这个实例中,抢占包含在通过光栅化器级42将像素块光栅化且通过像素着色器级44像素块像素着色且无其它后续像素块之后抢占(例如,以提供像素块级别粒度的抢占)。如所描述,光栅化和像素着色包括通过图形管线的两个级(例如,分别为图形管线的光栅化器级42和像素着色器级44)来进行的功能。
在这个实例中,像素块包含第一组基元中的一或多个基元的一或多个像素且不包含第二组基元的像素。因此,虽然第二组基元的基元和甚至第一组基元内的像素块可能需要被渲染,但GPU 12能够在处理像素块之后抢占,并非等待绘制调用边界或存储大量的上下文值。
本发明中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。例如,所描述技术的各种方面可在一或多个处理器中实现,包含一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效集成或离散逻辑电路,以及此等组件的任何组合。术语“处理器”或“处理电路”可一般指代前述逻辑电路中的任一个(单独或结合其他逻辑电路)或例如执行处理的离散硬件的任何其它等效电路。
此类硬件、软件和固件可实施于相同装置内或单独装置内以支持本发明中所描述的各种操作和功能。另外,所描述的单元、模块或组件中的任一个可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描述为模块或单元意在强调不同功能方面并且未必暗示此些模块或单元必须由单独硬件或软件组件实现。相反地,与一或多个模块或单元相关联的功能性可由单独硬件、固件和/或软件组件执行,或整合在共用或单独硬件或软件组件内。
本发明中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可导致一或多个处理器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。计算机可读存储媒体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、硬盘、CD-ROM、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。
已描述各种方面和示例。然而,可在不脱离以下权利要求的范围的情况下对本发明的结构或技术作出修改。
Claims (25)
1.一种处理数据的方法,所述方法包括:
响应于接收到绘制调用来使用图形处理单元GPU通过所述GPU的图形管线来执行第一组命令,所述绘制调用定义待通过执行所述第一组命令来渲染的一或多个基元;
在执行所述第一组命令期间且在渲染所有所述一或多个基元之前通过所述GPU来接收抢占通知;
响应于接收到所述抢占通知而将所述GPU的本地存储器的输出与所述图形管线的级断开连接,且将所述GPU的所述本地存储器的所述输出连接到所述GPU的硬件流出单元,来在执行所述第一组命令期间动态配置所述图形管线的级的互连;
归因于在执行所述第一组命令期间对所述GPU的所述图形管线的级的所述互连的动态配置,而从所述硬件流出单元将在执行所述第一组命令中的一或多个命令期间产生的中间数据输出到所述GPU外部的存储器;
在完成对用以渲染所述绘制调用的所述一或多个基元的所述第一组命令的执行之前,通过所述GPU抢占执行所述第一组命令,来执行第二组命令;和
执行所述第二组命令。
2.根据权利要求1所述的方法,其中所述一或多个基元包括第一组基元和第二组基元,其中抢占包括在将像素块光栅化并像素着色且无其它后续像素块之后抢占,所述像素块包括所述第一组基元中的一或多个基元的一或多个像素且不包括所述第二组基元的所述像素,且其中光栅化和像素着色包括通过图形管线所述的两个级来进行的功能。
3.根据权利要求1所述的方法,其中抢占包括在到达绘制调用边界之前抢占。
4.根据权利要求1所述的方法,其中将所述GPU的所述本地存储器的所述输出从所述图形管线的所述级断开连接包括:
将所述GPU的所述本地存储器的所述输出从光栅化器级断开连接。
5.根据权利要求1所述的方法,进一步包括:
仅响应于接收到所述抢占通知,将由着色器所产生的所述中间数据输出到所述GPU外部的所述存储器;和
停止执行所述第一组命令来渲染所述一或多个基元。
6.根据权利要求1所述的方法,进一步包括:
在执行所述第二组命令之后,通过从所述GPU外部的所述存储器检索所述中间数据来恢复执行所述第一组命令,来进行光栅化和像素着色。
7.根据权利要求1所述的方法,进一步包括:
通过所述级来从所述本地存储器接收所述中间数据以在接收所述抢占通知之前供所述级处理。
8.一种用于处理数据的装置,所述装置包括:
系统存储器;和
图形处理单元GPU,所述GPU包括硬件流输出单元和本地存储器,其中所述GPU经配置以:
响应于接收到绘制调用而通过所述GPU的图形管线执行第一组命令,所述绘制调用定义待通过执行所述第一组命令来渲染的一或多个基元;
在执行所述第一组命令期间且在渲染所有所述一或多个基元之前接收抢占通知;
响应于接收到所述抢占通知而将所述GPU的所述本地存储器的输出与所述图形管线的级断开连接,且将所述GPU的所述本地存储器的所述输出连接到所述GPU的所述硬件流出单元,来在执行所述第一组命令期间动态配置所述图形管线的级的互连;
归因于在执行所述第一组命令期间对所述GPU的所述图形管线的级的所述互连的动态配置,将在执行所述第一组命令中的一或多个命令期间产生的中间数据从所述硬件流出单元输出到所述GPU外部的所述系统存储器;
在完成对用以渲染所述绘制调用的所述一或多个基元的所述第一组命令的执行之前,抢占执行所述第一组命令,来执行第二组命令;且
执行所述第二组命令。
9.根据权利要求8所述的装置,其中所述图形管线包括光栅化器级和像素着色器级,其中所述一或多个基元包括第一组基元和第二组基元,且其中所述GPU经配置以在通过所述光栅化器级将像素块光栅化且通过所述像素着色器级将像素着色且无其它后续像素块之后抢占,所述像素块包括所述第一组基元中的一或多个基元的一或多个像素且不包括所述第二组基元的所述像素。
10.根据权利要求8所述的装置,其中所述GPU经配置以在到达绘制调用边界之前抢占。
11.根据权利要求8所述的装置,其中为将所述GPU的所述本地存储器的所述输出从所述图形管线的所述级断开连接,所述GPU经配置以将所述GPU的所述本地存储器的所述输出从光栅化器级断开连接。
12.根据权利要求8所述的装置,其中所述GPU经配置以:
仅响应于接收到所述抢占通知来将由着色器所产生的所述中间数据输出到所述GPU外部的所述系统存储器;且
停止执行所述第一组命令来渲染所述一或多个基元。
13.根据权利要求8所述的装置,其中所述GPU经配置以:
在执行所述第二组命令之后,通过从所述GPU外部的所述系统存储器检索所述所述中间数据来恢复执行所述第一组命令,来进行光栅化和像素着色。
14.根据权利要求8所述的装置,其中所述级经配置以从所述本地存储器接收所述中间数据以在接收所述抢占通知之前供所述级处理。
15.根据权利要求8所述的装置,其中所述装置包括无线通信装置。
16.一种上面存储有指令的计算机可读存储媒体,当所述指令被执行时使得用以处理数据的装置的图形处理单元GPU:
响应于接收到绘制调用而通过所述GPU的图形管线执行第一组命令,所述绘制调用定义待通过执行所述第一组命令来渲染的一或多个基元;
在执行所述第一组命令期间且在渲染所有所述一或多个基元之前接收抢占通知;
响应于接收到所述抢占通知而将所述GPU的本地存储器的输出从所述图形管线的级断开连接,且将所述GPU的所述本地存储器的所述输出连接到所述GPU的所述硬件流出单元,来在执行所述第一组命令期间动态配置所述图形管线的级的互连;
归因于在执行所述第一组命令期间对所述GPU的所述图形管线的级的所述互连的动态配置,而从所述硬件流出单元将在执行所述第一组命令中的一或多个命令期间产生的中间数据输出到所述GPU外部的存储器;
在完成对用以渲染所述绘制调用的所述一或多个基元的所述第一组命令的执行之前,抢占执行所述第一组命令,来执行第二组命令;且
执行所述第二组命令。
17.根据权利要求16所述的计算机可读存储媒体,其中所述一或多个基元包括第一组基元和第二组基元,且其中使得所述GPU抢占的所述指令包括使得所述GPU在将像素块光栅化且像素着色且无其它后续像素块之后抢占,所述像素块包括所述第一组基元中的一或多个基元的一或多个像素且不包括所述第二组基元的所述像素,且其中光栅化和像素着色包括通过所述图形管线的两个级来进行的功能。
18.根据权利要求16所述的计算机可读存储媒体,其中使得所述GPU抢占的所述指令包括使得所述GPU在到达绘制调用边界之前抢占的指令。
19.根据权利要求16所述的计算机可读存储媒体,其中使得所述GPU将所述GPU的所述本地存储器的所述输出从所述图形管线的所述级断开连接的所述指令包括:
使得所述GPU将所述GPU的所述本地存储器的所述输出从光栅化器级断开连接的指令。
20.根据权利要求16所述的计算机可读存储媒体,进一步包括使得所述GPU进行以下操作的指令:
仅响应于接收到所述抢占通知来将由着色器所产生的所述中间数据输出到所述GPU外部的所述存储器;且
停止执行所述第一组命令来渲染所述一或多个基元。
21.一种用于处理数据的装置,所述装置包括:
用于响应于接收到绘制调用而通过图形处理单元GPU的图形管线来执行第一组命令的装置,所述绘制调用定义待通执行所述第一组命令过来渲染的一或多个基元;
用于在执行所述第一组命令期间且在渲染所有所述一或多个基元之前接收抢占通知的装置;
用于将所述GPU的本地存储器的输出从所述图形管线的级断开连接,且将所述GPU的所述本地存储器的所述输出连接到所述GPU的硬件流出单元,来在执行所述第一组命令期间动态配置所述图形管线的级的所述互连的装置;
用于归因于在执行所述第一组命令期间对所述GPU的所述图形管线的级的所述互连的动态配置而从所述硬件流出单元将在执行所述第一组命令中的一或多个命令期间产生的中间数据输出到所述GPU外部的存储器的装置;
用于在完成对用以渲染所述绘制调用的所述一或多个基元的所述第一组命令的执行之前抢占执行所述第一组命令来执行第二组命令的装置;和
用于执行所述第二组命令的装置。
22.根据权利要求21所述的装置,其中所述一或多个基元包括第一组基元和第二组基元,其中所述用于抢占的装置包括在将像素块光栅化并像素着色且无其它后续像素块之后抢占的装置,所述像素块包括所述第一组基元中的一或多个基元的一或多个像素且不包括所述第二组基元的所述像素,且其中光栅化和像素着色包括通过图形管线所述的两个级来进行的功能。
23.根据权利要求21所述的装置,其中所述用于抢占的装置包括用于在到达绘制调用边界之前抢占的装置。
24.根据权利要求21所述的装置,其中所述用于将所述GPU的所述本地存储器的所述输出从所述图形管线的所述级断开连接的装置包括:
用于将所述GPU的所述本地存储器的所述输出从光栅化器级断开连接的装置。
25.根据权利要求21所述的装置,进一步包括:
用于仅响应于接收到所述抢占通知来将由着色器所产生的所述中间数据输出到所述GPU外部的所述存储器的装置;和
用于停止执行所述第一组命令来渲染所述一或多个基元的装置。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562234355P | 2015-09-29 | 2015-09-29 | |
US62/234,355 | 2015-09-29 | ||
US15/013,714 | 2016-02-02 | ||
US15/013,714 US9842376B2 (en) | 2015-09-29 | 2016-02-02 | Graphics processing unit preemption with pixel tile level granularity |
PCT/US2016/041525 WO2017058331A1 (en) | 2015-09-29 | 2016-07-08 | Graphics processing unit preemption with pixel tile level granularity |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108140233A true CN108140233A (zh) | 2018-06-08 |
CN108140233B CN108140233B (zh) | 2021-06-25 |
Family
ID=58409688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680056232.6A Active CN108140233B (zh) | 2015-09-29 | 2016-07-08 | 一种用于数据处理的方法和设备 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9842376B2 (zh) |
EP (1) | EP3357034B1 (zh) |
JP (1) | JP2018533137A (zh) |
KR (1) | KR20180059892A (zh) |
CN (1) | CN108140233B (zh) |
BR (1) | BR112018006349A2 (zh) |
WO (1) | WO2017058331A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109683966A (zh) * | 2018-12-12 | 2019-04-26 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向设备优化的OpenGL驱动实现方法 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10338953B2 (en) * | 2016-03-18 | 2019-07-02 | Intel Corporation | Facilitating execution-aware hybrid preemption for execution of tasks in computing environments |
US10460513B2 (en) * | 2016-09-22 | 2019-10-29 | Advanced Micro Devices, Inc. | Combined world-space pipeline shader stages |
US11609791B2 (en) * | 2017-11-30 | 2023-03-21 | Advanced Micro Devices, Inc. | Precise suspend and resume of workloads in a processing unit |
CN108121566A (zh) * | 2017-12-06 | 2018-06-05 | 中国航空工业集团公司西安航空计算技术研究所 | 一种图形指令解析设计方法 |
US10748239B1 (en) | 2019-03-01 | 2020-08-18 | Qualcomm Incorporated | Methods and apparatus for GPU context register management |
US20220301095A1 (en) * | 2021-03-19 | 2022-09-22 | Samsung Electronics Co., Ltd. | Method and apparatus for software based preemption using two-level binning to improve forward progress of preempted workloads |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309786A (zh) * | 2012-03-09 | 2013-09-18 | 辉达公司 | 用于在非可抢占式图形处理单元上交互调试的方法和装置 |
US20140184617A1 (en) * | 2012-12-27 | 2014-07-03 | Nvidia Corporation | Mid-primitive graphics execution preemption |
CN104205174A (zh) * | 2012-04-04 | 2014-12-10 | 高通股份有限公司 | 图形处理中的拼补着色 |
CN104641396A (zh) * | 2012-07-20 | 2015-05-20 | 高通股份有限公司 | 用于调度图形处理单元命令流的延迟抢占技术 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8139070B1 (en) * | 2007-10-03 | 2012-03-20 | Matrox Graphics, Inc. | Systems for and methods of context switching in a graphics processing system |
US9652282B2 (en) * | 2011-11-08 | 2017-05-16 | Nvidia Corporation | Software-assisted instruction level execution preemption |
US8963933B2 (en) * | 2012-07-23 | 2015-02-24 | Advanced Micro Devices, Inc. | Method for urgency-based preemption of a process |
US10095526B2 (en) | 2012-10-12 | 2018-10-09 | Nvidia Corporation | Technique for improving performance in multi-threaded processing units |
US9230518B2 (en) | 2013-09-10 | 2016-01-05 | Qualcomm Incorporated | Fault-tolerant preemption mechanism at arbitrary control points for graphics processing |
US9280845B2 (en) | 2013-12-27 | 2016-03-08 | Qualcomm Incorporated | Optimized multi-pass rendering on tiled base architectures |
US9396032B2 (en) * | 2014-03-27 | 2016-07-19 | Intel Corporation | Priority based context preemption |
-
2016
- 2016-02-02 US US15/013,714 patent/US9842376B2/en not_active Expired - Fee Related
- 2016-07-08 EP EP16748377.5A patent/EP3357034B1/en active Active
- 2016-07-08 CN CN201680056232.6A patent/CN108140233B/zh active Active
- 2016-07-08 BR BR112018006349A patent/BR112018006349A2/pt not_active Application Discontinuation
- 2016-07-08 KR KR1020187012000A patent/KR20180059892A/ko unknown
- 2016-07-08 WO PCT/US2016/041525 patent/WO2017058331A1/en active Application Filing
- 2016-07-08 JP JP2018515930A patent/JP2018533137A/ja active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309786A (zh) * | 2012-03-09 | 2013-09-18 | 辉达公司 | 用于在非可抢占式图形处理单元上交互调试的方法和装置 |
CN104205174A (zh) * | 2012-04-04 | 2014-12-10 | 高通股份有限公司 | 图形处理中的拼补着色 |
CN104641396A (zh) * | 2012-07-20 | 2015-05-20 | 高通股份有限公司 | 用于调度图形处理单元命令流的延迟抢占技术 |
US20140184617A1 (en) * | 2012-12-27 | 2014-07-03 | Nvidia Corporation | Mid-primitive graphics execution preemption |
Non-Patent Citations (1)
Title |
---|
IVAN TANASIC 等: "Enabling Preemptive Multiprogramming on GPUs", 《2014ACM/IEEE 41ST INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE(ISCA)》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109683966A (zh) * | 2018-12-12 | 2019-04-26 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向设备优化的OpenGL驱动实现方法 |
Also Published As
Publication number | Publication date |
---|---|
KR20180059892A (ko) | 2018-06-05 |
CN108140233B (zh) | 2021-06-25 |
BR112018006349A2 (pt) | 2018-10-16 |
EP3357034B1 (en) | 2019-04-10 |
US20170091895A1 (en) | 2017-03-30 |
US9842376B2 (en) | 2017-12-12 |
EP3357034A1 (en) | 2018-08-08 |
JP2018533137A (ja) | 2018-11-08 |
WO2017058331A1 (en) | 2017-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108140233A (zh) | 具有像素块级别粒度的图形处理单元抢占 | |
CN101371247B (zh) | 用于图形处理器的并行阵列结构 | |
CN108463804A (zh) | 自适应上下文切换 | |
CN103793893B (zh) | 采用限缓冲区处理的世界和屏幕空间管线间基元重新排序 | |
CN106575228B (zh) | 图形处理中的渲染目标命令重新排序 | |
CN104641396B (zh) | 用于调度图形处理单元命令流的延迟抢占技术 | |
EP3489907B1 (en) | Shader program execution techniques for use in graphics processing | |
US9177351B2 (en) | Multi-primitive graphics rendering pipeline | |
CN103810669B (zh) | 在统一l2高速缓存中高速缓存经适应性定制大小的高速缓存像素块 | |
EP3180773B1 (en) | Bandwidth reduction using texture lookup by adaptive shading | |
EP2946364B1 (en) | Rendering graphics data using visibility information | |
US20050225554A1 (en) | Scalable shader architecture | |
CN105321143A (zh) | 来自片段着色程序的采样掩膜的控制 | |
US20130127858A1 (en) | Interception of Graphics API Calls for Optimization of Rendering | |
US8429656B1 (en) | Thread count throttling for efficient resource utilization | |
CN105122310B (zh) | 用于基于瓦片的渲染的帧内时戳 | |
US7747842B1 (en) | Configurable output buffer ganging for a parallel processor | |
KR102006584B1 (ko) | 레이트 심도 테스팅과 컨서버티브 심도 테스팅 간의 동적 스위칭 | |
CN109564694B (zh) | 用于基于入库的图形处理的顶点着色器 | |
CN110298780B (zh) | 地图渲染方法、装置及计算机存储介质 | |
US8907979B2 (en) | Fast rendering of knockout groups using a depth buffer of a graphics processing unit | |
CN113342485A (zh) | 任务调度方法、装置、图形处理器、计算机系统及存储介质 | |
CN108604386A (zh) | 用纹理单元中的反馈来进行多步纹理处理 | |
US20230401667A1 (en) | Graphics processing systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |