自适应上下文切换的制作方法

文档序号:15285801发布日期:2018-08-29 00:04阅读:178来源:国知局

本公开涉及图形处理系统,且更确切地说,涉及利用抢占的图形处理系统。



背景技术:

计算装置常常利用图形处理单元(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的所述一或多个处理单元,其中所述第二抢占精细度与所述一或多个处理单元停止所述第一组命令的执行的第二抢占边界相关联,且其中所述第二抢占边界指示比所述第一抢占边界早的中断执行的点。

在另一实例中,本公开描述一种计算装置。所述计算装置可包含被配置以存储第一组命令和第二组命令的存储器。所述计算装置可进一步包含至少一个处理器,其被配置以:调度所述第一组命令中的一或多个命令用于在所述至少一个处理器的一或多个处理单元上执行;接收来自主机装置的通知,所述通知指示所述第二组命令准备在所述至少一个处理器上执行;响应于接收到所述通知,发出处于第一抢占精细度的第一抢占命令到所述至少一个处理器的所述一或多个处理单元,其中所述第一抢占精细度与所述一或多个处理单元停止所述第一组命令的执行的第一抢占边界相关联;及响应于所述至少一个处理器的所述一或多个处理单元在所述至少一个处理器发出所述第一抢占命令后的流逝的时间周期内未能所述第一组命令的执行,发出处于第二抢占精细度的第二抢占命令到所述至少一个处理器的所述一或多个处理单元,其中所述第二抢占精细度与所述一或多个处理单元停止所述第一组命令的执行的第二抢占边界相关联,且其中所述第二抢占边界指示比所述第一抢占边界早的中断执行的点。

在另一实例中,本公开描述一种设备。所述设备可包含用于调度第一组命令中的一或多个命令用于在一或多个处理单元上执行的装置。所述设备可进一步包含用于接收来自主机装置的指示第二组命令准备执行的通知的装置。所述设备可进一步包含用于响应于接收到所述通知将处于第一抢占精细度的第一抢占命令发出到所述一或多个处理单元的装置,其中所述第一抢占精细度与所述一或多个处理单元停止所述第一组命令的执行的第一抢占边界相关联。所述设备可进一步包含用于响应于所述一或多个处理单元未能在发出所述第一抢占命令后的流逝的时间周期内抢占所述第一组命令的执行而发出处于第二抢占精细度的第二抢占命令到所述一或多个处理单元的装置,其中所述第二抢占精细度与所述一或多个处理单元停止所述第一组命令的执行的第二抢占边界相关联,且其中所述第二抢占边界指示比所述第一抢占边界早的中断执行的点。

在另一实例中,本公开描述一种非暂时性计算机可读存储媒体,其包括在由一或多个处理器执行时使所述一或多个处理器进行以下操作的指令:调度第一组命令中的一或多个命令用于在所述一或多个处理器的一或多个处理单元上执行;接收来自主机装置的通知,所述通知指示第二组命令准备在所述一或多个处理器上执行;响应于接收到所述通知,发出处于第一抢占精细度的第一抢占命令到所述一或多个处理器的所述一或多个处理单元,其中所述第一抢占精细度与所述一或多个处理单元停止所述第一组命令的执行的第一抢占边界相关联;及响应于所述一或多个处理器的所述一或多个处理单元在所述一或多个处理器发出所述第一抢占命令后的流逝的时间周期内未能抢占所述第一组命令的执行,发出处于第二抢占精细度的第二抢占命令到所述一或多个处理器的所述一或多个处理单元,其中所述第二抢占精细度与所述一或多个处理单元停止所述第一组命令的执行的第二抢占边界相关联,且其中所述第二抢占边界指示比所述第一抢占边界早的中断执行的点。

在附图和以下描述中阐明本发明的一或多个实例的细节。本公开的其它特征、目标和优势将从描述和图式且从权利要求书显而易见。

附图说明

图1是说明可用以实施本公开的技术的实例计算装置的框图。

图2是进一步详细说明图1中的计算装置的cpu、gpu和存储器的框图。

图3是说明根据本公开的用于按变化抢占精细度抢占的各种技术的概念图。

图4是说明可在gpu上执行的示范性图形处理管线的框图。

图5是说明根据本文中公开的技术的用于在处理命令流时处置抢占通知的实例技术的流程图。

具体实施方式

本公开是针对用于安排图形处理单元(gpu)过程的抢占技术。抢占指使处理器(例如,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指令的执行后的抢占)。然而,与绘制调用级别抢占相比,此较细粒度抢占可累积较高计算开销(例如,处理时间、存储器带宽和功率)以执行上下文切换,且当较高优先权命令流与可能经由绘制调用级别抢占符合的安排最后期限相关联时,此较细粒度抢占可为不必要的。

因此,本公开的方面是针对用于gpu发出抢占命令和各种精细度以确保较高优先权命令流可符合相关联的安排最后期限同时最小化开销以执行上下文切换的技术。举例来说,gpu可调度第一组命令中的一或多个命令用于在gpu的一或多个处理单元上执行。gpu可接着接收来自主机装置的通知,所述通知指示第二组命令准备在gpu上执行。在一个实例中,第二组命令可具有大于第一组命令的安排优先权的安排优先权。响应于接收到通知,gpu可发出处于第一抢占精细度的第一抢占命令到gpu的一或多个处理单元。响应于gpu未能在发出第一抢占命令后的流逝的时间周期内抢占第一组命令的执行,gpu可发出处于第二较低抢占精细度的第二抢占命令到gpu的一或多个处理单元。第二抢占精细度比第一抢占精细度粒度细。以此方式,gpu可发出处于变化的精细度级别下的多个抢占命令以确保较高优先权命令流可符合相关联的安排最后期限,同时最小化开销以执行上下文切换。

图1是说明可用以实施本公开的技术的实例计算装置2的框图。计算装置2可包括个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(例如,移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、例如便携式视频游戏装置或个人数字助理(pda)的手持式装置、个人音乐播放器、视频播放器、显示装置、电视、电视机顶盒、服务器、中间网络装置、主机计算机、先进驾驶辅助系统(adas)、虚拟现实头戴式耳机、无人驾驶飞机或处理和/或显示图形数据的任何其它类型的装置。

如在图1的实例中所说明,计算装置2包含用户输入接口4、cpu6、存储器控制器8、系统存储器10、图形处理单元(gpu)12、本地存储器14、显示接口16、显示器18和总线20。用户输入接口4、cpu6、存储器控制器8、gpu12和显示接口16可使用总线20相互通信。总线20可为多种总线结构中的任一个,例如,第三代总线(例如,超传输总线或无限频带总线)、第二代总线(例如,先进图形端口总线、高速外围组件互连(pci)总线或先进可扩展接口(axi)总线)或另一类型的总线或装置互连件。应注意,图1中展示的不同组件之间的总线和通信接口的具体配置仅是示范性的,并且具有相同或不同组件的计算装置和/或其它图形处理系统的其它配置也可用以实施本公开的技术。

cpu6可包括控制计算装置2的操作的通用或专用处理器。用户可将输入提供到计算装置2以使cpu6执行一或多个软件应用程序。在cpu6上执行的软件应用程序可包含(例如)操作系统、文字处理器应用程序、电子邮件应用程序、电子数据表应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一程序。用户可经由例如键盘、鼠标、麦克风、触摸垫或经由用户输入接口4耦合到计算装置2的另一输入装置的一或多个输入装置(未图示)将输入提供到计算装置2。

在cpu6上执行的软件应用程序可包含指导cpu6引起图形数据到显示器18的再现的一或多个图形渲染指令。在一些实例中,软件指令可遵照图形应用程序编程接口(api),例如,开放图形库api、开放图形库嵌入系统(opengles)api、direct3dapi、x3dapi、rendermanapi、webglapi、vulkanapi或任何其它公用或专有标准图形api。为了处理图形渲染指令,cpu6可将一或多个图形渲染命令发出到gpu12以使gpu12执行图形数据的渲染中的一些或所有。在一些实例中,待渲染的图形数据可包含例如点、线、三角形、四边形、三角形带等的图形基元的列表。

存储器控制器8有助于进入和离开系统存储器10的数据传送。举例来说,存储器控制器8可接收存储器读取和写入命令,且关于存储器10来服务此类命令以便针对计算装置2中的组件提供存储器服务。存储器控制器8通信耦合到系统存储器10。虽然在图1的实例计算装置2中将存储器控制器8说明为与cpu6和系统存储器10两者分开的处理模块,但在其它实例中,存储器控制器8的功能性中的一些或全部可实施于cpu6和系统存储器10中的一或两个上。

系统存储器10可存储可存取以用于由cpu6执行的程序模块和/或指令和/或用于由cpu6上执行的程序使用的数据。举例来说,系统存储器10可存储用户应用程序和与所述应用程序相关联的图形数据。系统存储器10可另外存储用于由计算装置2的其它组件使用和/或由其产生的信息。举例来说,系统存储器10可充当用于gpu12的装置存储器且可存储将由gpu12操作的数据以及从由gpu12执行的操作产生的数据。举例来说,系统存储器10可存储纹理缓冲器、深度缓冲器、模板缓冲器、顶点缓冲器、帧缓冲器等的任何组合。此外,系统存储器10可存储用于由gpu12处理的成组的命令,例如,命令流。系统存储器10可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、只读存储器(rom)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪存、磁性数据媒体或光学存储媒体。

gpu12可被配置以执行图形操作以将一或多个图形基元再现到显示器18。因此,当在cpu6上执行的软件应用程序中的一个需要图形处理时,cpu6可将图形命令和图形数据提供到gpu12用于向显示器18再现。所述图形命令可包含(例如)绘图命令、gpu状态编程命令、存储器传送命令、通用计算命令、内核执行命令等。在一些实例中,cpu6可通过将命令和图形数据写入到可由gpu12存取的存储器10而将命令和图形数据提供到gpu12。在一些实例中,gpu12可被进一步配置以执行针对在cpu6上执行的应用程序的通用计算。

在一些例子中,gpu12可内置有提供比cpu6有效率的向量运算处理的高度并行结构。举例来说,gpu12可包含被配置以按并行方式对多个顶点或像素运算的多个处理元件(例如,着色器单元)。在一些例子中,gpu12的高度并行本质允许gpu12比使用cpu6直接将场景绘制到显示器18快地将图形图像(例如,gui和二维(2d)和/或三维(3d)图形场景)直接将绘制到显示器18上。此外,gpu12的高度并行本质可以允许gpu12充当通用图形处理单元(gpgpu)来比cpu6快地针对通用计算应用处理某些类型的向量和矩阵运算。

在一些例子中,gpu12可集成到计算装置2的母板中。在其它情况下,gpu12可存在于安装在计算装置2的母板中的端口中的图形卡上或可另外并入在被配置以与计算装置2交互操作的外围装置内。在另外例子中,gpu12可与cpu6位于同一微芯片上,从而形成系统芯片(soc)。gpu12可包含一或多个处理器,例如,一或多个微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)或其它等效的集成或离散逻辑电路。

gpu12可直接耦合到gpu本地存储器14。因此,gpu12可从本地存储器14读取数据和将数据写入到本地存储器14,而不必使用总线20。换句话说,gpu12可使用本地存储装置而非芯片外存储器来在本地处理数据。这通过消除gpu12经由总线20读取和写入数据的需要来允许gpu12以更有效率的方式操作,经由总线读取和写入数据可经历繁重的总线通信量。然而,在一些例子中,gpu12可不包含分开的高速缓冲存储器,而取而代之经由总线20利用系统存储器10。本地存储器14可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪存、磁性数据媒体或光学存储媒体。

cpu6和/或gpu12可在系统存储器10内分配的帧缓冲器中存储经渲染的图像数据。显示器接口16可从所述帧缓冲器检索所述数据并配置显示器18以显示由所述经渲染的图像数据表示的图像。在一些实例中,显示接口16可包含数/模转换器(dac),其被配置以将从帧缓冲器检索的数字值转换为可由显示器18消耗的模拟信号。在其它实例中,显示接口16可将数字值直接传递到显示器18以供处理。显示器18可包含监视器、电视、投影装置、液晶显示器(lcd)、等离子显示面板、发光二极管(led)阵列、阴极射线管(crt)显示器、电子纸、表面传导电子发射显示器(sed)、激光电视显示器、纳米晶体显示器或另一类型的显示单元。显示器18可集成在计算装置2内。举例来说,显示器18可为移动电话手持机或平板计算机的屏幕。替代地,显示器18可为经由有线或无线通信链路耦合到计算机装置2的独立装置。举例来说,显示器18可为经由缆线或无线链路而连接到个人计算机的计算机监视器或平板显示器。

本公开中描述的技术涉及抢占。在抢占中,gpu12可暂停执行一组命令,执行另一组命令到完成,且接着完成执行初始组的命令。举例来说,gpu12可在cpu6确定另一组较高优先权命令待执行时执行一组命令。作为说明,在cpu6确定响应于用户与可为触摸屏的显示器18交互而将首先执行用于用户接口的命令时,gpu12执行用于产生视频游戏的内容的命令。在这个实例中,即使完成执行用于视频游戏的命令被延迟,gpu12仍可完成执行产生用户接口的命令。

在一些情况下,gpu12可被配置以提供绘制调用级别抢占。举例来说,可仅在绘制调用边界处允许抢占。在这个实例中,如果gpu12开始执行绘制调用,且接着接收抢占指令,那么直到完成绘制调用的执行(例如,完成用于渲染所有基元和像素块的像素着色器的执行),gpu12才能抢占。

然而,仅在绘制调用边界处具有抢占可能对于某些情况不合需要。举例来说,完成针对一“群基元”的绘制调用可花费长的时间(例如,归因于响应于绘制调用执行顶点着色器、像素着色器、其它着色器和所有固定功能单元的功能),从而延迟较高优先权命令的执行。作为更多实例,单个基元级别抢占也可能不充分,且绘制调用级别抢占可能对于较大大小的三角形(例如用于覆盖一个区间或屏幕)无法很好地起作用。所述绘制调用可定义待渲染的多个基元。

gpu12也可被配置以提供细粒度抢占(例如,不必在绘制调用边界发生的抢占)。在一些情况下,比如vr的工作负荷可受益于比绘制调用边界细的抢占精细度以支持时间扭曲(根据帧)。本公开中描述的技术可提供此较细的抢占精细度,以及发出处于不同级别的抢占精细度下的抢占命令以动态提供更“基于需求的”抢占方案。

根据本公开的一方面,gpu12可调度第一组命令中的一或多个用于在gpu12的一或多个处理单元上执行。gpu12可接着接收来自主机装置的通知,所述通知指示第二组命令准备在gpu12上执行。响应于接收到所述通知,gpu12可发出处于第一抢占精细度的第一抢占命令到gpu12的一或多个处理单元。举例来说,gpu12可发出处于绘制调用级别精细度的第一抢占命令。

响应于gpu12未能在发出第一抢占命令后的流逝的时间周期内抢占执行第一组命令,gpu12可发出处于第二抢占精细度的第二抢占命令到gpu的一或多个处理单元,其中所述第二抢占精细度比第一抢占精细度粒度细。在这个实例中,gpu12可发出处于子绘制调用级别精细度的第二抢占命令。在gpu12达到第一组命令中由子绘制调用级别精细度指示的点后,gpu12即可执行上下文切换以开始第二组命令的执行。此抢占逐步升级可对cpu6透明,使得cpu6可不接收gpu12已发出第一抢占命令和任何后续较细粒度抢占命令的任何指示。

在本公开中,关于图形处理来描述实例。然而,本公开中描述的技术不受如此限制,且扩展到非图形应用程序(例如,计算着色器)在gpu12上执行的实例。术语绘制调用不应被视为排他地限于图形应用程序,且应被视为涵盖用于在gpu12正执行计算着色器(例如,与例如矩阵或向量运算的应用有关的非图形)时的类似命令和数据群。

图2是进一步详细说明图1中的计算装置2的cpu6、gpu12和存储器10的框图。如图2中所示,cpu6通信耦合到gpu12和存储器10,且gpu12通信耦合到cpu6和存储器10。在一些实例中,gpu12可与cpu6集成到母板上。在额外实例中,gpu12可实施在安装于包含cpu6的母板的端口中的图形卡上。在另外实例中,gpu12可并入在被配置以与cpu6交互操作的外围装置内。在额外实例中,gpu12可与cpu6位于同一微芯片上,从而形成系统芯片(soc)。cpu6被配置以执行软件应用程序24a、24b、图形api26、gpu驱动程序28和操作系统30。gpu12包含命令引擎32和一或多个处理单元34。存储器10存储命令流36a、36b。

软件应用程序24a和24b可各自包含使图形图像被显示的一或多个指令或使非图形任务(例如,通用计算任务)在gpu12上执行的一或多个指令中的至少一个。软件应用程序24a和24b可发出指令到图形api26。图形api26可为将从软件应用24a、24b接收的指令转译成可由gpu驱动程序28消耗的格式的运行时间服务。软件应用程序24a和24b可发出的指令的一个实例为绘制调用,其为用于gpu12再现一或多个基元的指令。图形api26可将绘制调用转译成gpu12可执行以执行一或多个基元的渲染的一或多个命令。因此,gpu驱动程序28可将由软件应用程序24a和24b发出的例如绘制调用的单个指令转译成待由gpu12执行的一或多个命令。

gpu驱动程序28经由图形api26从软件应用24a、24b接收指令,且控制gpu12的操作以服务所述指令。举例来说,gpu驱动程序28可制定一或多个命令流36a、36b,将命令流36a、36b放置到存储器10中,且指导gpu12执行命令流36a、36b。gpu驱动程序28可将命令流36a、36b放置到存储器10内且经由操作系统30与gpu12通信,例如,经由一或多个系统调用。

gpu驱动程序28可将抢占通知发送到gpu命令引擎32以指示另一命令流(例如,高优先权命令流)准备执行。在一些实例中,抢占通知还可向gpu12指示在抢占当前正执行的命令流之后即执行哪一命令流。gpu驱动程序28可将抢占通知发送到gpu命令引擎12,例如,通过将一个或多个值写入(例如,经由操作系统30)到由gpu命令引擎32轮询的一或多个gpu寄存器。所述一或多个gpu寄存器可包含位于gpu12中的一或多个硬件gpu寄存器、位于存储器(例如,存储器10)中的一或多个存储器映射的gpu寄存器或其任何组合。当将值写入到存储器映射的gpu寄存器时,cpu6可将所述值写入到存储器10中由gpu命令引擎32轮询的一或多个特定内存地址。在一些实例中,gpu驱动程序28可将第一值写入到一或多个gpu寄存器以启动抢占通知,且将识别命令流的位置的第二值写入到一或多个gpu寄存器以在抢占当前正执行的命令流后即执行。

命令引擎32被配置以检索存储于命令流36a、36b中的命令,且调度所述命令供在处理单元34中的一或多个上执行。命令引擎32可调度来自命令流的命令以用于在所有或一子集处理单元34上执行。在一些实例中,命令引擎32可被配置以轮询指示cpu6是否已发送抢占通知到gpu12的一或多个gpu寄存器。在gpu寄存器为存储器映射的寄存器的情况下,命令引擎32可被配置以轮询存储器10中指示cpu6是否已发送抢占通知到gpu12的一或多个特定内存地址。响应于一或多个gpu寄存器指示cpu6已发送抢占通知到gpu12,命令引擎32可将抢占命令发送到gpu12的处理单元34以尝试抢占当前正执行的gpu命令流的执行,且开始执行另一命令流。在一些情况下,命令引擎32可被配置以通过读取存储于一或多个gpu寄存器12中的识别在抢占之后即执行的命令流的信息而确定在抢占当前执行的命令流之后即执行的命令流。举例来说,cpu6可将识别较高优先权命令流的存储器位置的指针存储在一或多个gpu寄存器中。

命令引擎32可为gpu12的硬件,可为在gpu12上执行的软件或固件,或两个的组合。并且,以上对于命令引擎32如何确定抢占的指令是否接收到的描述仅出于说明的目的而提供。可存在用于cpu6指导gpu12抢占的其它方式,且本发明中描述的技术不限于任何具体实例。

为了抢占命令流,命令引擎32可保存与命令流的执行相关联的gpu12的状态。与命令流的执行相关联的gpu12的状态可包含程序计数器、线程启动状态、图形绘制状态变量(例如,色彩、基元类型、变换类型等)、存储器状态和/或用以执行命令流的任一其它状态。在一些实例中,状态变量可为与个别处理单元34或处理单元34的群组相关联的本地状态变量、与gpu12的全局执行相关联的全局状态变量或其任何组合。保存gpu12的状态可涉及(例如)将gpu12中的一或多个寄存器的当前值存储在另一芯片上或芯片外位置中。保存gpu12的状态可涉及(例如)将本地gpu存储器的当前状态存储在另一芯片上或芯片外位置中。在一些实例中,命令引擎32可将gpu状态保存到存储器10。

在已完成抢占命令流的执行之后,命令引擎32可恢复在抢占通知之前执行的被抢占的命令流的保存的状态。恢复保存的状态可涉及(例如)将状态变量重新加载到gpu12的一或多个寄存器内及/或将保存的存储器状态重新加载到本地gpu存储器内。在将gpu状态保存到存储器10的实例中,命令引擎32可将存储于存储器10中的保存的状态重新加载到gpu12上以用于进一步执行被抢占的命令流。

处理单元34可包含一或多个处理单元,其中的每一个可为可编程处理单元或固定功能处理单元。可编程处理单元可包含(例如)可编程着色器单元,其被配置以执行从cpu6下载到gpu12上的一或多个着色器程序。在一些实例中,着色器程序可为以高阶着色语言(例如,opengl着色语言(glsl)、高阶着色语言(hlsl)、用于图形的c(cg)着色语言等)撰写的程序的经编译型式。在一些实例中,可编程着色器单元可包含被配置以并行地操作的多个处理单元,例如,simd管线。可编程着色器单元可具有存储着色器程序指令的程序存储器和执行状态寄存器,例如,指示程序存储器中正执行的当前指令或待提取的下一个指令的程序计数器寄存器。处理单元34中的可编程着色器单元可包含(例如)顶点着色器单元、像素着色器单元、几何着色器单元、壳着色器单元、域着色器单元、计算着色器单元和/或统一着色器单元。

固定功能处理单元可包含经硬连线以执行某些功能的硬件。尽管固定功能硬件可经由例如一或多个控制信号而配置以执行不同功能,但所述固定功能硬件通常并不包含能够接收用户编译程序的程序存储器。在一些实例中,处理单元34中的固定功能处理单元可包含(例如)执行光栅操作的处理单元,例如深度测试、剪刀测试、α掺合等。

在图2的实例图形处理系统中,存储器10包含两个命令流36a、36b,每一命令流36a、36b与不同图形应用上下文(即,软件应用程序24a、24b中的不同者)相关联。举例来说,命令流36a与用于软件应用程序24a的图形应用上下文相关联,且命令流36b与用于软件应用程序24b的图形应用上下文相关联。为了易于说明,将两个gpu命令流36a、36b描绘为存储于图2的实例图形处理系统的存储器10中。然而,在其它实例中,可使用存储于图形处理系统的相同或不同组件中的相同或不同数目个gpu命令流。

在以上实例中,gpu12在其间切换的两个命令流36a和36b为来自两个不同应用程序24a和24b的命令流。然而,本公开中描述的实例不受如此限制。在一些实例中,如果需要(例如,应用程序24a的高优先权命令流抢占应用程序24a的低优先权流),gpu12可在相同应用程序的命令流之间切换。本公开中所描述的命令流不应被视为限于针对不同应用程序,且可用于相同应用程序。

cpu6的gpu驱动程序28可被配置以将命令流36a、36b写入到存储器10,且gpu12的命令引擎32可被配置以从存储器10读取命令流36a、36b的一或多个命令。在一些实例中,命令流36a、36b中的一或两个可存储为存储器10中的环形缓冲区。环形缓冲区可为具有圆形寻址方案的缓冲区,其中cpu6和gpu12维持与将数据写入到环形缓冲区和从环形缓冲区读取数据相关联的同步化的状态变量。举例来说,如果命令流36a是环形缓冲区,那么cpu6及gpu12中的每一个可存储指示待写入到环形缓冲区中的下一地址的写入指针和指示待从环形缓冲区中读取的下一地址的读取指针。当cpu6将新命令写入至环形缓冲区时,cpu6可更新cpu6中之写入指针且指导gpu12更新gpu12中之写入指针。类似地,当gpu12从环形缓冲区读取新命令时,gpu12可更新gpu12中的读取指针且指导cpu6更新cpu6中的读取指针。其它同步机制是可能的。在读取和/或写入指针达到针对环形缓冲区所分配的地址范围内的最高地址时,读取和/或写入指针可环绕到最低地址以实施圆形寻址方案。

现将关于图2描述根据本公开设计的实例gpu驱动程序28和实例gpu命令引擎32的实例操作。在这个实例中,软件应用程序24b具有比软件应用程序24a的安排优先权高的安排优先权。在一个实例中,软件应用程序24b可为用户接口(ui)软件应用程序,其包含使图形图像被显示且需要对gpu12的高优先权存取以确保ui的及时更新的一或多个指令。同时,在这个实例中,软件应用程序24a是较低优先权应用程序,其包含使图形图像被显示的一或多个指令及/或使在gpu12上执行非图形任务(例如,gpgpu计算任务)的一或多个指令。

gpu驱动程序28从软件应用程序24a接收指定待由gpu12执行的图形操作和/或通用计算操作的一或多个指令,且可基于来自软件应用程序24a的一或多个指令产生命令流36a。gpu驱动程序28将输出命令流36a放置到可由gpu命令引擎32存取的存储器10内。gpu驱动程序28通知gpu命令引擎32,对应于软件应用程序24a的命令流36a可用于处理。举例来说,gpu驱动程序28可将指示命令流36a准备好执行的一或多个值写入到gpu寄存器(例如,由gpu12轮询的gpu硬件寄存器及/或由gpu12轮询的gpu存储器映射的寄存器)。

在通知命令流36a准备好执行之后,gpu12的命令引擎32可确定资源在gpu12上当前是否可用以开始执行命令流36a。如果资源可用,那么命令引擎32开始调度命令流36a中的命令。同时,gpu驱动程序28从ui软件应用24b接收指定待由gpu12执行的高优先权图形操作的一或多个指令。gpu驱动程序28产生高优先权命令流36b以进行由接收的指令指定的操作,且将所得命令流36b放置到存储器10内。gpu驱动程序28将指示高优先权命令流36准备供处理和命令流36应抢占正在gpu12上执行的任何其它较低优先权命令流的抢占通知提供到gpu命令引擎32。在一些实例中,gpu驱动程序28可通过写入到由gpu12轮询的gpu硬件寄存器和/或通过写入到由gpu12轮询的存储器映射的寄存器(例如,存储器10中的特定位置)来将抢占通知提供到gpu12。

在一些情况下,gpu驱动程序28或cpu6可针对不同应用程序或同一应用程序的命令定义抢占级别。举例来说,命令流36b具有比命令流36a高的优先权,但也可具有比第三命令流低的优先权。在这个实例中,如果命令流36a正在执行,那么gpu驱动程序28或cpu6可使gpu12用命令流36b或第三命令流抢占命令流36a。然而,如果命令流36b正在执行,那么仅第三命令流可抢占,且没有流可抢占第三流。此实例可扩展到“n个”流,且可存在流可用其它流抢占的其它因素。

在一些实例中,较高优先权命令流可与安排gpu12结束那些命令的执行所按照的安排最后期限相关联。在渲染图形数据时,安排最后期限可为显示器18的下一个垂直同步(vsync)发生的时间。具体地说,gpu12可执行命令流36a和/或36b的命令以渲染图像数据,且可将经渲染的图像数据存储在于系统存储器10内分配的后台缓冲区中。在显示器18的每一vsync,gpu12可将后台缓冲区的内容复制到前台缓冲区内,使得在显示器18的对应的刷新时,显示接口16可从前台缓冲区检索影像资料供显示器18显示。如果gpu12不结束通过vsync执行命令,那么显示器18可显示不完整或不正确的图像。

类似地,在虚拟现实的情况下,gpu12可执行时间扭曲以使渲染的图案扭曲以补偿在渲染图像后发生的头部运动。因此,gpu12可执行命令流36a和/或36b的命令以在下一个vsync前及时地渲染图像以用于gpu12时间扭曲经渲染图像。

在本公开中描述的技术中,gpu12可响应于gpu12接收到一组第二较高优先权命令准备执行的指示,发出处于不同抢占精细度的多个抢占命令以中断处理单元34对第一组命令的执行。gpu12可选择适当精细度,按所述适当精细度,抢占执行一组较低优先权命令代替执行一组较高优先权命令,使得所述一组较高优先权命令可符合相关联的安排最后期限,但同时使抢占所需的开销最小化。

作为实例,如果第一抢占方案和第二抢占方案两个都允许第二组较高优先权命令及时执行(例如,符合相关联的安排最后期限)且第二抢占方案具有比第一抢占方案低的开销,那么gpu12使用第二抢占方案执行抢占。如果第一抢占方案允许及时执行第二组命令,且第二抢占方案不允许,那么gpu12使用第一抢占方案执行抢占,即使第二抢占方案使用较少开销。在一些实例中,gpu12可尝试使用一个抢占方案的抢占,且如果第一抢占方案在提供及时切换时不成功,那么切换到另一抢占方案。

在用于渲染图像的gpu处理图形命令的实例中,gpu12可被配置以提供绘制调用级别抢占,使得可仅在绘制调用边界处允许抢占。如上所论述,软件应用程序24a或软件应用程序24b可发出绘制调用指令到gpu驱动程序28,所述gpu驱动程序可将每一绘制调用指令转译成命令流36a或命令流36b中的一或多个命令。在这个实例中,如果gpu12开始执行从由软件应用程序24a或软件应用程序24b中的一个发出的绘制调用产生的命令,且接着接收到抢占指令,那么gpu12直到处理单元34完成对应于绘制调用的命令的执行(例如,完成用于多个基元的渲染的像素着色器的执行)方可抢占。换句话说,对于绘制调用级别抢占,gpu12可仅能够在组成分开的绘制调用的命令之间的命令边界处抢占。

gpu12也可支持子绘制调用级别抢占,使得即使尚未执行组成绘制调用的所有命令,仍可允许抢占。在这个实例中,gpu12可在渲染一“群”像素(但未必与绘制调用相关联的所有像素)之后抢占。因此,gpu12可能够在处理单元34执行组成绘制调用的一组命令中的一些但非全部后抢占。gpu12也可支持指令级别抢占。在这个实例中,gpu12可在执行正由处理单元34处理的当前命令后抢占。

通过经图形处理管线处理一或多个基元以渲染所述一或多个基元,绘制调用可引导gpu12渲染一或多个基元。为了处理绘制调用以渲染一或多个基元,gpu可执行一或多个子绘制命令,例如,通过执行组成图形处理管线的一或多个级的着色器程序。因此,gpu12可通过在完成图形处理管线的所有子绘制调用的执行前中断绘制调用的处理来在子绘制调用级别抢占。举例来说,如果绘制调用引导gpu12渲染多个基元,那么gpu12可通过在gpu12已执行子绘制调用中的一些(但非全部)后中断绘制调用的处理来在基元级别抢占以渲染绘制调用引导gpu12渲染的基元中的一或多个(但少于全部)。类似地,gpu12可通过在gpu12已执行子绘制调用中的一些(但非全部)后中断绘制调用的处理而在像素块级别抢占以渲染组成绘制调用引导gpu渲染的所有像素时间的像素块的像素群组。在像素块级别的此抢占可比在基元级别的抢占粒度细。在另一实例中,gpu12可通过在经图形处理管线的所有级处理绘制调用的完成前中断绘制调用的处理来在子绘制调用级别抢占(例如,在光栅化器级的完成后,但在像素着色级的执行前,抢占图形处理管线)。

绘制调用级别抢占、子绘制调用级别抢占和指令级别抢占是抢占精细度的不同实例。如上所论述,绘制调用可包含gpu12可执行的多个子绘制调用。如果抢占命令与界限比与另一抢占命令相关联的抢占边界多的命令的抢占边界相关联,那么所述抢占命令比另一抢占命令粒度细。因此,虽然绘制调用级别抢占可与界限与待由gpu12执行的多个子绘制级别调用相关联的绘制命令的绘制调用级别边界相关联,但子绘制调用级别抢占可与界限组成绘制调用的子绘制命令中的一或多个但少于全部的子绘制调用级别边界相关联。类似地,指令级别抢占可与界限组成绘制调用的子绘制命令中的单个子绘制命令的指令级别边界相关联。

在gpu12抢占执行命令流36a以执行具有比命令流36a高的优先权的命令流36b的命令的实例中,gpu12可发出一或多个抢占命令以抢占命令流36a的处理。响应于从gpu驱动程序28接收到指示命令流36b准备处理的抢占通知,gpu12可发出处于多个抢占精细度中的第一个的第一抢占命令到gpu的处理单元34以抢占命令流36a的处理。

如果在发出第一抢占命令后已流逝了一段时间后,处理单元34必须中断命令流36a的处理,那么gpu12可发出处于多个抢占精细度中的第二个下的第二抢占命令到处理单元34以抢占命令流36a的处理。多个抢占精细度中的第二个可比多个抢占精细度中的第一个粒度细。举例来说,如果第一抢占命令是绘制调用级别抢占命令,那么第二抢占命令可为子绘制调用级别抢占命令。

gpu12可以许多示范性方式确定在发出第一抢占命令后多久发出第二抢占命令。在一个实例中,在发出第二抢占命令前,gpu12可等待流逝固定时间周期。固定时间周期可为基于时间的时间周期(例如,固定数目个纳秒)或基于时钟循环的时间周期(例如,gpu12的固定数目个时钟循环)。固定时间周期可由gpu12或cpu6指定,或可与正等待由gpu12执行的较高优先权命令流36b相关联。固定时间周期也可在不同级别的抢占精细度之间不同。举例来说,在发出基元级别抢占命令前,在发出绘制调用级别抢占命令后,gpu12可等待相对较长时间周期,但在发出像素块级别抢占命令前,在发出基元级别抢占命令后,可等待相对较短时间周期。

在另一实例中,gpu12可等待基于处理单元34到达与第一抢占命令相关联的特定抢占边界的估计时间的时间周期过去。举例来说,如果第一抢占命令是绘制调用级别抢占命令,那么gpu12可估计处理单元34到达绘制调用级别边界的时间长度。gpu12可使用任一合适方法估计此时间周期,例如,通过测量处理单元34执行组成“n”个先前绘制调用的命令所花的时间以确定执行一个绘制调用的平均流逝时间。gpu12可基于在执行当前绘制调用的命令时取样处理单元34的进度以及执行一个绘制调用的平均流逝时间来估计处理单元34到达绘制调用级别边界的剩余时间。

举例来说,如果处理单元34平均花掉10毫秒执行单个绘制调用,且gpu12基于取样处理单元34的进度估计处理单元34已执行组成绘制调用的子绘制命令的一半,那么gpu12可估计处理单元34可花费另外5毫秒来完成当前绘制调用的执行且到达绘制调用边界。因此,gpu12可发出绘制调用级别抢占命令,且在发出后续较细粒度的抢占命令前,等待5毫秒流逝。

gpu12也可至少部分基于与正等待由gpu12执行的较高优先权命令流相关联的安排最后期限来确定在发出第一抢占命令后多久发出第二抢占命令。如上所论述,安排最后期限可对应于出现下一个vsync供显示18的时间。gpu12可从cpu6接收与命令流36b相关联的安排最后期限的指示,或在安排最后期限对应于下一个vsync的情况下,从显示接口16接收所述指示。

gpu12可确定处理单元34执行命令流36b的命令的时间长度。举例来说,gpu12可执行组成命令流36b的命令的剖析以确定命令流36b中包含的命令的类型,且可确定处理单元34基于所述剖析执行命令流36b的命令的时间长度。gpu12也可测量处理单元34执行具有对应于vsync的安排最后期限的先前命令流的时间长度,且可基于执行那些先前命令流的测量的时间估计处理单元34执行命令流36b的命令的时间长度。

gpu12可用处理单元34执行命令流36b的命令的确定的时间长度减去与命令流36b相关联的安排最后期限以确定gpu12可中断处理单元34对命令流36a的执行的时间,以便按其安排的最后期限结束命令流36b的执行。在gpu12发出第二抢占命令到处理单元34以抢占命令流36a的执行后,但在gpu12应中断处理单元34对命令流36a的执行以便按其安排的最后期限结束命令流36b的执行的时间前,gpu12可发出处于多个抢占精细度中可比多个抢占精细度中的第一和第二抢占精细度粒度细的第三抢占精细度的第三抢占命令。举例来说,如果第一抢占命令是绘制调用级别抢占命令,且如果第二抢占命令是子绘制调用级别抢占命令(例如,基元级别抢占命令),那么第三抢占命令可为处于比先前子绘制调用抢占命令或指令级别抢占命令粒度细的抢占级别的另一子绘制调用抢占命令(例如,像素块级别抢占命令)。

图3是说明根据本公开的用于按变化抢占精细度抢占的各种技术的概念图。如图3中所展示,gpu12可在时间t0调度命令流36a的命令供在处理单元34上执行。gpu12可随后从cpu6接收指示具有比命令流36a相对大的安排优先权的命令流36b准备在gpu12上执行的通知。响应于从cpu6接收到通知,gpu12的命令引擎32可在时间t1发出处于指定抢占精细度的抢占命令40a到一或多个处理单元34。

响应于接收到较高优先权命令流准备在gpu12上执行的通知,gpu12的命令引擎32可通过发出处于相对粗抢占精细度的初始抢占命令到一或多个处理单元34来着手进行。在这个实例中,如果命令流36a包含组成一或多个绘制调用的命令,那么gpu12的命令引擎32可发出为出自于处于绘制调用级别、子绘制调用级别和指令级别的抢占命令的绘制调用级别抢占命令的抢占命令40a。

通过gpu12的命令引擎32发出绘制调用级别抢占命令,处理单元34可继续执行组成处理单元34当前正处理的绘制调用的命令流36a的命令,直到处理单元34到达命令流36a的下一个绘制调用边界。绘制调用边界可为组成由软件应用程序(例如,软件应用程序24a)通过gpu驱动程序28发出到gpu12的个别绘制调用的命令流36a的成组的命令之间的边界。因此,当gpu12发出例如抢占命令40a的绘制调用级别抢占命令时,处理单元34继续执行命令流36a的命令,直到其已结束执行组成同一绘制调用的命令且到达界限来自下一个绘制调用的命令的当前绘制调用的命令的绘制调用边界44。

如果gpu12未能在发出抢占命令40a后的流逝的时间周期内中断命令流36a的执行,那么gpu12可通过发出处于比抢占命令40a相对细的抢占精细度的后续抢占命令来动态尝试再次抢占处理单元34对命令流36a的执行。在与命令流36b相关联的安排最后期限出现的时间前,此流逝的时间周期可流逝,例如,预定时间长度或gpu12的预定数目个时钟循环,或此流逝的时间周期可由gpu12动态地确定,如上所述。

因此,在时间t2,gpu12可发出可为子绘制调用级别抢占命令的抢占命令40b。子绘制调用级别抢占命令可与在绘制调用级别边界44a前的命令流36a中出现的子绘制调用级别边界46a相关联。通过gpu12发出子绘制调用级别抢占命令,处理单元34可继续执行组成处理单元34当前正处理的绘制调用的命令流36a的命令中的一些但非全部,直到处理单元34到达子绘制调用级别边界46a。举例来说,子绘制调用级别边界46a可界限来自用于渲染组成像素块的另一像素群组的命令流36a中的另外一或多个子绘制级别命令的由gpu12执行以用于渲染组成像素块的一个像素群组的一或多个子绘制级别命令,其出自包含渲染多个像素块的绘制调用。因此,响应于接收到抢占命令40b,处理单元34可继续执行渲染组成像素块的像素群组中的像素的命令,直到处理单元34已结束渲染像素块且已达到子绘制调用级别边界46a。

如果gpu12未能在发出抢占命令40b后的流逝的时间周期内中断命令流36a的执行,那么gpu12可通过发出处于比抢占命令40b相对细的抢占精细度的后续抢占命令来尝试再次抢占处理单元34对命令流36a的执行。此流逝的时间周期可为预定时间长度或gpu12的预定数目个时钟循环,或可由gpu12动态地确定,如上所述。此流逝的时间周期也可与在抢占命令40a与40b的发出之间的流逝的时间周期相同或不同。

gpu12在发出抢占命令40b后发出抢占命令的时间也可至少部分基于与命令流36b相关联的安排最后期限来确定。在图3的实例中,gpu12可在时间t3确定处理单元34必须尽快中断,以便命令流36b符合其在时间t5的安排最后期限42a,且可发出处于比抢占命令40a或抢占命令40b相对细的抢占精细度的抢占命令40c到处理单元34,以抢占命令流36a的执行。

抢占命令40c可为与指令级别抢占边界46相关联的指令级别抢占命令。如上所论述,指令级别抢占边界间接地出现在命令流中,作为gpu12可作为执行着色器程序的部分执行以执行图形处理管线的一个或多个级的子绘制调用级别命令。

在处理单元34结束当前执行命令的执行且在时间t4到达与抢占命令40c相关联的指令级别边界48后,gpu12可停止执行命令流36a且可执行上下文切换以从执行命令流36a切换到执行命令流36b。

处理单元34可按与命令流36b相关联的安排最后期限42a结束命令流36b的执行。在处理单元34结束命令流36b的执行后,如果不存在具有比准备由gpu12执行的命令流36a高的优先权的其它即将发生的命令流,那么gpu12可执行上下文切换以重新开始命令流36a的执行。gpu12可重新开始执行从其停止命令流36a的执行的同一点开始的命令流36a。

在gpu12的处理单元34执行命令流36a时,gpu12可随后从cpu6接收指示具有比命令流36a相对大的安排优先权的命令流36c准备在gpu12上执行的通知。命令流36c可具有在时间t8的相关联的安排最后期限42b。响应于从cpu6接收到所述通知,gpu12可在时间t6发出处于指定抢占精细度的抢占命令40d到gpu12的处理单元34。在图3的实例中,抢占命令40d可为绘制调用级别抢占命令。

因为处理单元34在执行命令流36a时在发出抢占命令40d前尚未到达绘制调用级别边界44,所以处理单元34可继续执行组成绘制调用的子绘制调用级别命令,直到其到达绘制调用边界44。在发出抢占命令40d后,如果处理单元34尚未同时被抢占,那么在发出后续抢占命令前,gpu12可等待指定量的时间。虽然gpu12在发出后续抢占命令前在等待,但处理单元34可在时间t7到达绘制调用级别边界44,且可因此停止执行命令流36a,且可执行上下文切换以从执行命令流36a切换到执行命令流36c。因此,在一些例子中,处理单元34可在gpu12达到流逝的时间周期且发出后续较细粒度的抢占命令前中断命令流36a的执行。

在处理单元34结束命令流36c的执行后,如果不存在具有比准备由gpu12执行的命令流36a高的优先权的其它即将发生的命令流,那么gpu12可执行上下文切换以重新开始命令流36a的执行。gpu12可重新开始执行从其最后停止命令流36a的执行的同一点开始的命令流36a。

在gpu12的处理单元34执行命令流36a时,gpu12可随后从cpu6接收指示具有比命令流36a相对大的安排优先权的命令流36d准备在gpu12上执行的通知。命令流36d可在时间t12具有相关联的安排最后期限42c。响应于从cpu6接收到通知,gpu12可在时间t9发出处于指定抢占精细度的抢占命令40e到gpu12的处理单元34。

在一个实例中,如果处理单元34包括并行处理器(例如,着色器处理器),那么命令流36a可在其成组的命令中包含可由处理单元34的并行处理器执行的数据并行代码。举例来说,处理单元34可执行命令流36a的同一组命令(或由绘制级别命令指示的子绘制调用级别命令)以并行地对多个数据值操作。对于所述成组的命令中的每一个例子,处理单元34可针对所述成组的命令中的那个例子引发线程(还称作内核),且可在其并行处理器中的一个上执行所述线程。用于一组特定命令的所述线程或内核群组可被分群成一或多个工作组,且处理单元34可并行地执行所述内核的工作组。

如果当gpu12接收命令流36d准备在gpu12上执行的通知时处理单元34正在执行命令流36a的命令的工作组,那么gpu12可发出处于内核级别精细度(或内核级别边界)的内核级别抢占命令40e,以在处理内核的所有工作组后抢占。响应于接收到内核级别抢占命令,处理单元34可继续执行当前执行的工作组的命令,以及内核的额外工作组,直到其已结束执行每一内核。举例来说,如果处理单元34的四个着色器处理器(或其它计算单元)正执行组成工作组的四个内核,那么四个着色器处理器中的每一个可在处理单元34前完成工作组的其相应内核的执行,且然后继续执行工作组中的其余者的内核,直到其到达与命令流36d相关联的内核级别边界。在到达内核级别边界后,处理单元34即可停止执行命令流36a,且可执行上下文切换以从执行命令流36a切换到执行命令流36d。

如果gpu12未能在发出抢占命令40e后的流逝的时间周期内中断命令流36a的执行,那么gpu12可通过发出处于比抢占命令40e相对细的抢占精细度的后续抢占命令来尝试再次抢占处理单元34对命令流36a的执行。

在一个实例中,gpu12可发出作为工作组级别抢占命令40f的抢占命令40f以在处理当前正由处理单元34处理的内核的当前工作组后抢占。响应于接收到工作组级别抢占命令,处理单元34可继续执行当前执行的工作组的命令,直到其已结束执行工作组的每一内核。举例来说,如果处理单元34的四个着色器处理器(或其它计算单元)正执行组成工作组的四个内核,那么四个着色器处理器中的每一个可在处理单元34到达与命令流36d相关联的工作组级别边界前完成工作组的其相应内核的执行。在到达工作组级别边界后,处理单元34即可停止执行命令流36a,且可执行上下文切换以从执行命令流36a切换到执行命令流36d。

如果gpu12未能在发出抢占命令40f后的流逝的时间周期内中断命令流36a的执行,那么gpu12可通过发出处于比抢占命令40f相对细的抢占精细度的后续抢占命令来尝试再次抢占处理单元34对命令流36a的执行。

举例来说,如果处理单元34的四个着色器处理器中的三个已结束执行工作组的其相应线程,但其余着色器处理器仍然在执行工作组的其余线程的过程中,那么gpu12可发出后续抢占命令(未图示),作为设定紧接在处理单元34的其余作用中着色器处理器上的当前执行的指令之后的指令级别边界的指令级别抢占命令。

一旦其余着色器处理器已结束处理线程的当前指令且到达与抢占命令相关联的指令级别边界,那么gpu12可执行上下文切换以从执行命令流36a切换到执行命令流36d。

如可看出,内核级别抢占命令可与内核级别边界相关联,工作组级别抢占命令可与工作组级别边界相关联,且指令级别抢占命令可与指令级别边界相关联。工作组级别抢占命令和指令级别抢占命令可被视为具有子内核级别抢占边界的子内核级别抢占命令,这是因为其可为比内核级别抢占命令粒度细的抢占命令。另外,虽然工作组级别抢占命令可为比内核级别抢占命令粒度细的抢占命令,但指令级别抢占命令可为比工作组级别抢占命令粒度细的抢占命令。此外,在一些实例中,gpu12可在发出内核级别抢占命令后直接发出指令级别抢占命令,而不必发出插入的工作组级别抢占命令。

在处理单元34结束命令流36d的执行后,如果不存在具有比准备由gpu12执行的命令流36a高的优先权的其它即将发生的命令流,那么gpu12可执行上下文切换以重新开始命令流36a的执行。gpu12可重新开始执行从其最后停止命令流36a的执行的同一点开始的命令流36a。

如可从图3中展示的实例看出,gpu12可响应于接收到较高优先权命令流准备在gpu12上执行的通知,适应性地发出变化精细度的多个抢占命令。gpu12可一开始发出具有相对粗粒度精细度的抢占命令,且可随着较高优先权命令流的安排最后期限迫近,发出连续较细粒度抢占命令,以确保gpu12能够结束按其安排最后期限执行较高优先权命令流。

在一些实例中,gpu12可抢占处于变化的抢占精细度下的在gpu12上执行的图形处理管线的不同部分。为了执行图形操作,gpu12可实施图形处理管线。图形处理管线包含执行如由在gpu12上执行的软件或固件定义的功能,和由经硬连线以执行极具体功能的固定功能单元执行功能。在gpu12上执行的软件或固件可被称作着色器,且着色器可在gpu12的一或多个着色器核心上执行。着色器给使用者提供功能灵活性,因为使用者可设计着色器按任何可设想的方式执行所要的任务。然而,固定功能单元经针对固定功能单元执行任务的方式而硬连线。因此,固定功能单元可不提供许多功能灵活性。

图4是说明可在gpu12上执行的示范性图形处理管线的框图。如图4中所展示,图形处理管线50可包含输入汇编程序级52、顶点着色器级54、光栅化器级56、像素着色器级58和输出合并级60中的一或多个。gpu12可包含按那个次序在顶点着色器级后的添加级,例如,外壳着色器级、镶嵌级、域着色器级。gpu12还可包含耦合到域着色器级的输出(在gpu包含域着色器级的情况下)或顶点着色器级54的输出(在无域着色器级的情况下)的几何着色器级。如所说明,光栅化器级56可从顶点着色器级54接收图形数据,或从几何着色器级(当可用时)或域着色器级(当可用时)接收。

图形处理管线50的其它配置是可能的,且在本公开中描述的技术不应被视为限于图4中所说明的具体实例。举例来说,gpu12可包含比所说明的级多的级,且在一些实例中,gpu12可未必包含所有说明的级。并且,出于说明目的提供所述级的具体排序,且不应将其视为限制性的。

输入汇编程序级52可从系统存储器10读取如由cpu6定义的顶点中的顶点,且汇编所述控制点以形成顶点。举例来说,输入汇编程序级52可读取坐标、色彩值和其它此类信息。坐标、色彩值和其它此资讯可通常被称作顶点的属性。基于顶点的属性,输入汇编程序级52可确定基元的大体布局。以此方式,输入汇编程序级52可汇编控制点以形成补片。输入汇编程序级52可为固定功能单元。

顶点着色器级54可处理来自输入汇编程序级52的顶点。举例来说,顶点着色器级54可执行每顶点操作,例如,变换、表皮处理、变形和每顶点照明。顶点着色器级54可为着色器。

光栅化器级56从几何着色器级接收基元,且将基元转换成像素以用于显示。举例来说,基元可被定义为指示基元的互连的向量,且可定义于独立于其上将显示图像的显示器的坐标空间中。光栅化器级56将这些向量转换成显示器坐标,且执行任何额外功能,例如,去除经遮住的基元内的点。

像素着色器级58接收如由光栅化器级56输出的像素,且执行后处理以将色彩值指派给待显示的像素中的每一个。举例来说,像素着色器级58可接收存储在系统存储器10中的常数值、存储在系统存储器10中的纹理数据和任何其它数据以每像素产生输出,例如,色彩值。像素着色器级58也可输出指示像素的不透明性的不透明度值。

输出合并级60可执行任何最终像素处理。举例来说,输出合并级60可利用深度信息进一步确定是否应去除显示像素中的任何者。输出合并级60还可执行掺合操作以产生最终像素值。输出合并级60可将最终像素值输出到通常位于系统存储器10内的帧缓冲器,但帧缓冲器可位于gpu12内。

在本公开的一些方面,gpu12可发出按不同抢占精细度抢占图形处理管线50的不同部分的抢占命令。抢占图形处理管线50的不同部分可包含在一个抢占边界抢占图形处理管线50的一个部分,而在另一抢占边界抢占图形处理管线50的其它部分。

在绘制多个基元的绘制调用的实例中,像素着色器级58可在一些例子中花费比顶点着色器级54长的时间来处理一组基元。因此,gpu12可发出抢占命令,使得按绘制调用级别精细度抢占图形处理管线直到顶点着色器级54,而按子绘制调用级别精细度抢占像素着色器级58。因此,图形处理管线到顶点着色器级54可处理待由绘制调用绘制的基元中的每一个,而像素着色器级58却只可处理由绘制调用绘制的那些基元的一子集(即,少于全部)。gpu12可将未由像素着色器级58处理的其余基元存储在存储器(例如,系统存储器10)中,或在gpu12中的高速缓冲存储器中。

在发出在绘制调用级别抢占图形处理管线50直到顶点着色器级54且在子绘制调用级别抢占像素着色器级58的抢占命令后,gpu12可发出按较细抢占精细度进一步抢占图形处理管线50的两个部分的另一抢占命令。举例来说,gpu12可在子绘制调用级别抢占图形处理管线50直到顶点着色器级54,且可进一步在指令级别抢占像素着色器级58。通过按不同抢占精细度抢占图形处理管线50的不同部分,gpu12可使其处理单元34能够响应抢占命令且能够更高效地切换上下文以处理其它较高优先权命令流。

图5是说明根据本文中公开的技术的用于在处理命令流时处置抢占通知的实例技术的流程图。如图5中所展示,gpu12可调度第一组命令中的一或多个命令用于在gpu的一或多个处理单元上执行(102)。举例来说,第一组命令可呈例如命令流32a的命令流的形式。第一组命令可为一组图形命令(例如,绘制调用),或可为一组计算命令(例如,不限于图形操作的通用计算操作)。

gpu12可接收和/或检测来自例如cpu6的主机装置的抢占通知,其指示第二组命令准备在gpu12上执行(104)。第二组命令可为一组图形命令(例如,绘制调用)或可为一组计算命令(例如,不限于图形操作的通用计算操作)。第一和第二组命令可为相同类型或不同类型的命令,其中第一组命令可为一组图形命令,而第二组命令可为一组计算命令。相反地,第一组命令可为一组计算命令,而第二组命令可为图形命令。响应于接收到通知,gpu12可发出处于第一抢占精细度的第一抢占命令到gpu12的一或多个处理单元(106)。在gpu12执行用于渲染组成图像的一或多个基元的命令的情况下,第一抢占精细度可为绘制调用级别抢占精细度、子绘制调用级别抢占精细度(例如,基元级别抢占精细度或像素块级别抢占精细度)或指令级别抢占精细度。在额外上下文中,第一抢占精细度可为内核级别抢占精细度或工作组级别抢占精细度。

响应于gpu12未能在发出第一抢占命令后的流逝的时间周期内抢占执行第一组命令,gpu12可动态发出处于第二抢占精细度的第二抢占命令到gpu的一或多个处理单元,其中所述第二抢占精细度比第一抢占精细度粒度细(108)。举例来说,如果第一抢占命令处于绘制调用级别精细度,那么第二抢占命令可处于子绘制调用级别精细度(例如,基元级别抢占精细度或像素块级别抢占精细度)或指令级别精细度。处于第二抢占精细度的第二抢占命令的此发出可对例如cpu6的主机装置透明,使得cpu6不接收gpu12已发出第二抢占命令的任何指示。

在一些实例中,第一抢占精细度与一或多个处理单元停止第一组命令的执行的第一抢占边界相关联,第二抢占精细度与一或多个处理单元停止第一组命令的执行的第二抢占边界相关联,且第二抢占边界指示比第一抢占边界早的中断执行的点。

举例来说,给定正被处理的命令流中的绘制调用,由第二抢占边界指示的较早点可为不直接在命令流中的子绘制调用边界。相反地,如上所论述,因为gpu12执行多个子绘制调用以便根据绘制调用执行图形渲染,较早点可为多个子绘制调用中的gpu12可中断绘制调用的处理的子绘制调用边界。

类似地,给定正被处理的命令流中的计算命令,其中计算命令是由gpu12并行地执行的内核,由第二抢占边界指示的较早点可为不直接在命令流中的子内核边界。相反地,较早点可为gpu12可中断内核的处理的子内核边界。

因此,如果第一抢占命令为绘制调用级别精细度,那么第一抢占边界包括绘制调用级别边界。类似地,如果第二抢占命令为子绘制调用级别抢占命令,那么第二抢占边界包括以下中的一个:基元级别边界、像素块级别边界和指令级别边界。

另外,如果第一抢占命令为内核级别精细度,那么第一抢占边界包括内核级别边界。类似地,如果第二抢占命令为子内核级别抢占命令,那么第二抢占边界包括以下中的一个:工作组级别边界和指令级别边界。

gpu12可响应于其一或多个处理单元到达第一组命令中由第二抢占边界指示的点,通过保存与第一组命令的执行相关联的gpu的状态来执行到第二组命令的上下文切换,且调度第二组命令中的一或多个用于在gpu12的一或多个处理单元上执行。

在一些实例中,gpu12可确定用于执行第二组命令的安排最后期限。举例来说,cpu6、gpu驱动程序28或显示接口16可提供与所述一组命令相关联的安排最后期限的指示。如果第二组命令包括用于绘制待由显示器18显示的图像的绘制调用,那么第二组命令的相关联的安排最后期限可至少部分基于显示器18的下一个垂直同步发生的时间。因此,在一个实例中,安排最后期限包括显示从第二组命令的执行产生的图像的显示装置的下一个垂直同步的时间。在其它实例中,第二组命令的相关联的安排最后期限可至少部分基于用于显示由第二组命令绘制的图像的帧速率要求,或任何其它合适的安排最后期限。

gpu12可至少部分基于安排最后期限动态确定发出第二抢占命令时的第二抢占精细度。举例来说,如果gpu12确定安排最后期限相对近,那么gpu12可选择发出相对细粒度的抢占命令(例如,指令级别抢占命令)到处理单元34,代替相对较粗粒度的抢占命令(例如,子绘制调用级别命令)。

在一些实例中,响应于gpu12的一或多个处理单元34未能在gpu12发出第二抢占命令后的第二流逝的时间周期内抢占第一组命令的执行,gpu12可发出处于第三抢占精细度的第三抢占命令到gpu12的一或多个处理单元34,其中第三抢占精细度与一或多个处理单元34停止第一组命令的执行的第三抢占边界相关联,且其中第三抢占边界指示所述一组命令中比第一抢占边界或第二抢占边界早的中断执行的点。在这个实例中,第一抢占边界可为绘制调用级别边界,第二抢占边界可为第一子绘制调用级别边界,且第三抢占边界可为第二子绘制调用级别边界。

本公开中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。举例来说,所描述技术的各种方面可在一或多个处理器内实施,包含一或多个微处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga),或任何其它等效集成或离散逻辑电路,以及此等组件的任何组合。术语“处理器”或“处理电路”可一般指前述逻辑电路中的任一个(单独或结合其它逻辑电路),或例如执行处理的离散硬件的任何其它等效电路。

此硬件、软件和固件可实施于同一装置内或分开的装置内以支持本公开中所描述的各种操作和功能。此外,所描述单元、模块或组件中的任一个可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描绘为模块或单元希望强调不同功能方面并且未必暗示此类模块或单元必须由单独硬件或软件组件实现。相反地,与一或多个模块或单元相关联的功能性可由单独硬件、固件及/或软件组件执行,或集成于共同或单独硬件或软件组件内。

本公开中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可使一或多个处理器执行本文中所描述的技术,例如,当由一或多个处理器执行指令时。计算机可读存储媒体可包含随机存取存储器(ram)、只读存储器(rom)、可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、闪存、硬盘、cd-rom、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。

计算机可读媒体可包含计算机可读存储媒体,其对应于例如以上列举的存储媒体的有形存储媒体。计算机可读媒体也可包括通信媒体,其包括有助于计算机程序从一处传送到另一处(例如,根据通信协议)的任何媒体。以此方式,短语“计算机可读媒体”大体可对应于(1)非暂时性有形计算机可读存储媒体,和(2)例如暂时性信号或载波的非有形计算机可读通信媒体。

已描述各种方面和实例。然而,可在不脱离所附权利要求书的范围的情况下对本公开的结构或技术作出修改。

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