虚拟gpu的制作方法

文档序号:6373473阅读:467来源:国知局
专利名称:虚拟gpu的制作方法
虚拟GPU技术领域
本公开涉及图形处理单元(GPU),并且更具体地,涉及允许多个GPU命令的高效执行的结构和技术。
背景技术
GPU可以用于执行各种计算任务。例如,GPU可以计算要在屏幕上显示的像素,并且还可以执行诸如动画渲染和一般的矢量数学之类的密集操作。
GPU有时可能会经历一个或多个执行单元不执行任何运算的“停止时间”(停转时段)。例如,在访问存储器时可能出现停止时间,这是因为执行单元正在等待新数据到达。因而,有时候一个或多个GPU执行单元可能空闲。
此外,当GPU正在执行第一程序时,第二程序可能必须等待。甚至在第一程序被停转时(例如在存储器访问期间),第二程序可能也必须等待。虽然第二程序在第一程序被停转时使用空闲的GPU执行单元将是有利的,但是切换到第二程序的开销成本可能过于昂贵。即,在第一程序被停转时设置GPU来执行第二程序可能要花费太多的时间和努力(即, 功耗),以致于不值得这样麻烦。因而当第一程序停转时,GPU执行单元可以仍然空闲。
相应地,GPU执行可能是低效的,尤其是在正在执行多个计算任务的环境中更是如此。发明内容
本说明书描述了尤其是在处理多个计算任务(或命令)时允许GPU更高效地执行指令并具有较少的停止时间的结构和技术。在一个实施例中,通过在单个GPU结构中实现多个虚拟GPU来提供这些优点。虚拟GPU可以共享相同的GPU硬件(例如,执行单元),而为每个虚拟GPU单独地存储计算结果。
相对于可能具有高成本的上下文切换,虚拟GPU可以提供优点。例如,从第一程序到第二程序的上下文切换可能涉及在第二程序执行之前从GPU清除所有的结果和所有的状态信息。因而,上下文切换可以包括将所有寄存器值、程序计数器和其它值(例如来自存储器的工作数据)复制到外部存储设备。这些复制操作花费时间并消耗功率(这可能对电池供电的移动设备产生特别负面的影响)。
GPU上下文切换的成本可能根据执行上下文切换的时刻而变化。例如,帧边界或多边形边界之间的上下文切换的成本可能较小。这是因为可能需要向外部存储设备传输较少的中间状态信息。但是,虽然只在帧或多边形边界上进行上下文切换的成本可能较小,但是这可能导致较差的粒度控制。例如,如果以每秒20个帧的速度绘制帧,那么GPU到达帧边界并执行到另一任务的上下文切换可能花费多达50毫秒(或者甚至更长)。
虚拟GPU可以允许执行不同程序的指令,而不存在执行全上下文切换的成本。在一个实施例中,这是通过对GPU硬件的一些部分进行复制并向这些复制的部分添加额外的控制结构。虚拟GPU还可以通过允许在较小的时间“窗”内执行不同程序的指令,来为执行提供更细的粒度控制,并且更高效地利用GPU硬件。例如,在从存储器获取数据时,第一程序所使用的GPU执行单元可能必须停转。在该停转时段期间,执行单元是空闲的。该停转时段可以足够短,以至于全上下文切换是成本抑制的。然而,虚拟GPU之间的切换的较低成本可以允许执行不同指令(例如不同虚拟GPU),而不是使得执行单元处于空闲。相应地,当实现虚拟GPU时,对于GPU执行单元而言可能存在更少的停止时间。
然而,本公开和所附权利要求的教导并非明显地受以上在概述中讨论的特征、实施例和/或益处的限制。


图1是集成电路的实施例的方框图。
图2是实现多个虚拟GPU的GPU的实施例的方框图。
图3是实现多个虚拟GPU的GPU实施例的另一方框图。
图4是可以执行多个GPU线程的方法的一个实施例的流程图。
图5是系统的一个实施例的方框图。
具体实施方式
本说明书包括对“一个实施例”或“实施例”的参考。短语“在一个实施例中”或 “在实施例中”的出现未必是指同一实施例。可以用与本公开相一致的任何合适的方式来组合特定的特征、结构或特性。
以下段落提供了在本公开(包括所附权利要求)中发现的术语的定义和/或上下文。
“包括”。这一术语是开放的。如本文中使用的,该术语并不排除额外的结构或步骤。考虑记载了“一种装置,包括图像处理单元(GPU)……”的权利要求。这样的权利要求并不排除该装置包括额外的组件(例如,中央处理单元、存储器控制器、接口电路等)。
“被配置为”。可以将各种单元、电路或其它组件描述或要求保护成“被配置为”执行任务或多个任务。在这样的上下文中,“被配置为”用于通过指示单元/电路/组件包括在操作期间执行该任务或多个任务的结构(例如电路)来表示结构。这样,即使在所指定的单元/电路/组件当前不可操作(例如,为开启)时,也可以将单元/电路/组件陈述成被配置为执行任务。与“被配置为”文字一起使用的单元/电路/组件包括硬件,例如,存储可执行的用以实现操作等的电路、存储器。关于单元/电路/组件“被配置为“执行一个或多个任务的记载明显地旨在不针对该单元/电路/组件援引35U.S.C. §112第六款。另外, “被配置为”可以包括由软件和/或固件(例如,FPGA或执行软件的通用处理器)操纵的以能够执行讨论中的任务的方式进行操作的通用结构(例如,通用电路)。“被配置为”还可以包括调整制造工艺(例如,在半导体制造工厂)以制造适合用于实现或执行一个或多个任务的设备(例如,集成电路)。
“第一”、“第二”等。如本文使用的,这些术语可以用作在它们之后的名词的标签, 并且并不意味任何类型的顺序(例如,空间的、时间的、逻辑的等),除非明确说明。例如,“第一”线程和“第二”线程可以用于表示任何两个线程,而不是意味(例如)一个线程是在另一线程之前或之后产生的。换句话说,“第一”和“第二”是描述符。CN 102982505 A书明说3/17 页“基于”。如本文中使用的,这一术语用于描述影响确定的一个或多个因素。该术语并不排除额外的因素影响确定。即,确定可以仅仅基于这些因素或至少部分地基于这些因素。考虑短语“基于B确定A”。虽然B可以是影响A的确定的一个因素,但是这种短语并不排除A的确定也基于C。但是,在其它情况中,可以仅基于B来确定A。
集成电路
现在转到图1,示出了系统5的一个实施例的方框图。在图I的实施例中,系统5 包括集成电路(ic)10,其耦合到外部存储器12A-12B。在所示的实施例中,集成电路10包括中央处理器单元(CPU)块14,其包括一个或多个处理器16和层2 (L2)高速缓冲存储器 18。其它实施例可以不包括L2高速缓冲存储器18和/或可以包括额外的高速缓冲存储器层。另外,可以预料到包括多于两个的处理器16以及只包括一个处理器16的实施例。集成电路10还包括一组一个或多个非实时(NRT)外围设备20和一组一个或多个实时(RT)外围设备22。在所示的实施例中,CPU块14耦合到桥接/直接存储器访问(DMA)控制器30, 其可以耦合到一个或多个外围设备32和/或一个或多个外围接口控制器34。在各个实施例中,外围设备32和外围接口控制器34的数量可以从零变化到任何期望的数量。图I中所示的系统5还包括图形单元36,其包括一个或多个图形控制器,诸如GO 32A和Gl 38B。 在其它实施例中,每个图形单元的图形控制器的数量以及图形单元的数量可以不同。如图 I中所示的,系统5包括存储器控制器40,其耦合到一个或多个存储器物理接口电路(PHY) 42A-42B。存储器PHY 42A-42B被配置为在集成电路10的管脚上与存储器12A-12B进行通信。存储器控制器40还包括一组端口 44A-44E。端口 44A-44B分别耦合到图形控制器 38A-38B。CPU块14耦合到端口 44C。NRT外围设备20和RT外围设备22分别耦合到端口 44D-44E。在其它实施例中,存储器控制器40中所包括的端口的数量可以与存储器控制器的数量一样多地变化。即,与图I中所示的相比,可以具有更多或更少的端口。在其它实施例中,存储器PHY 42A-42B以及相应的存储器12A-12B的数量可以是I个或多于2个。
通常,端口可以是存储器控制器40上的通信点,用以与一个或多个源进行通信。 在一些情况中,端口可以是专用于源的(例如,端口 44A-44B可以是分别专用于图形控制器 38A-38B的)。在其它情况中,可以在多个源之间共享端口(例如,处理器16可以共享CPU 端口 44C,NRT外围设备20可以共享NRT端口 44D,并且RT外围设备22可以共享RT端口 44E)。每个端口 44A-44E耦合到与其相应代理进行通信的接口。该接口可以是任何类型的通信介质(例如,总线、点对点互连等),并且可以实现任何协议。存储器控制器和源之间的互连还可以包括任何其它期望的互连,例如网格、片上网络结构、共享总线、点到点互连等。
处理器16可以实现任何指令集架构,并且可以被配置为执行在该指令集架构中定义的指令。处理器16可以采用任何微架构,包括标量、超标量、流水线、超流水线、乱序、 有序、推测、非推测等等或其组合。处理器16可以包括电路,并且可选地可以实现微码技术。处理器16可以包括一个或多个层I高速缓冲存储器,并且因此高速缓冲存储器18是 L2高速缓冲存储器。其它实施例可以在处理器16中包括多个高速缓冲存储器层,并且高速缓冲存储器18可以是层次中向下的下一层。高速缓冲存储器18可以采用任何大小和任何配置(被设置成相关联、直接映射等)。
图形控制器38A-38B可以是任何图形处理电路。通常,图形控制器38A-38B可以被配置为将要被显示的对象渲染到帧缓冲器中。图形控制器38A-38B可以包括图形处理6器,其可以执行用于执行图形操作的一部分或全部的图形软件和/或某些图形操作的硬件加速。硬件加速和软件实现的量可以随着实施例而变化。在一些实施例中,图形单元36和 /或图形控制器38A-38B可以包括如下面所描述的图形处理单元50的特征中的任何一个或全部。
NRT外围设备20可以包括任何非实时的外围设备,其由于性能和/或带宽的原因被提供对存储器12A-12B的独立访问。S卩,NRT外围设备20进行的访问是独立于CPU块14 的,并且可以与CPU块的存储器操作并行进行。诸如外围设备32和/或耦合到受外围接口控制器34控制的外围接口的外围设备之类的其它外围设备也可以是非实时的外围设备, 但是可能不需要对存储器的独立访问。NRT外围设备20的各个实施例可以包括视频编码器和解码器、标量电路和图像压缩和/或解压缩电路等。
RT外围设备22可以包括对存储器时延具有实时要求的任何外围设备。例如,RT 外围设备可以包括图形处理器以及一个或多个显示管。显示管可以包括用于获取一个或多个帧并将这些帧混合以创建显示图像的电路。显示管还可以包括一个或多个视频流水线。 显示管的结果可以是要在显示屏幕上显示的像素流。可以向显示控制器发送像素值以在显示屏幕上进行显示。图像处理器可以接收照相机数据,并将该数据处理成要被存储在存储器中的图像。
桥接/DMA控制器30可以包括用于将(一个或多个)外围设备32和(一个或多个) 外围接口控制器34桥接到存储器空间的电路。在所示的实施例中,桥接/DMA控制器30可以将来自外围设备/外围接口控制器的存储器操作通过CPU块14桥接到存储器控制器40。 CPU块14还可以维持被桥接的存储器操作与来自存储器16/L2高速缓冲存储器18的存储器操作之间的一致。L2高速缓冲存储器18还可以将被桥接的存储器操作与赖在处理器16 的存储器操作进行仲裁,以在CPU接口上向CPU端口 44C进行发送。桥接/DMA控制器30 还可以代表外围设备32和外围接口控制器34来提供DMA操作,以将数据块传输到存储器以及从存储器传输数据块。更具体地,DAM控制器可以被配置为代表外围设备32和外围接口控制器34来通过存储器控制器40执行向和 来自存储器12A-12B的传输。DAM控制器可以是可由处理器16编程来执行DAM操作的。例如,DAM控制器可以是可经由描述符编程的。 描述符可以是存储在存储器12A-12B中的描述DMA传输(例如,源和目的地地址、大小等)的数据结构。可替换地,DAM控制器可以是可经由DAM控制器中的寄存器(未示出)编程的。
外围设备32可以包括任何期望的输入/输出设备或包括在集成电路10上的其它硬件设备。例如,外围设备32可以包括联网外围设备,例如一个或多个联网介质访问控制器(MAC),例如以太网MAC或无线保真(WiFi)控制器。包括各种音频处理设备的音频单元可以包括在外围设备32中。一个或多个数字信号处理器可以包括在外围设备32中。外围设备32可以包括任何其它期望的功能体,例如定时器、片上秘密存储器、加密引擎等,或其任意组合。
外围接口控制器34可以包括用于任何类型的外围接口的控制器。例如,外围接口控制器可以包括各种接口控制器,例如通用串行总线(USB)控制器、外围组件互连快速 (PCIe)控制器、闪存接口、通用输入/输出(I/O)管脚等。
存储器12A-12B可以是任意类型的存储器,例如动态随机存取存储器(DRAM)、同步DRAM (SDRAM)、双倍数据速率(DDR、DDR2、DDR3等)SDRAM (包括SDRAM的移动版本,例如mDDR3等,和/或SDRAM的低功率版本,例如LPDDR2等)、RAMBUS DRAM (RDRAM)、静态RAM (SRAM)等。一个或多个存储器设备可以耦合到电路板上,以形成存储器模块,例如单列直插内存模块(SMM)、双列直插内存模块(DMM)等。可替换地,可以用芯片堆叠配置、封装堆叠配置或多芯片模块配置来将这些设备与集成电路10安装在一起。
存储器PHY 42A-42B可以处理针对存储器12A-12B的低级物理接口。例如,存储器PHY 42A-42B可以负责信号的定时、负责对于同步DRAM存储器的恰当计时等。在一个实施例中,存储器PHY42A-42B可以被配置成锁定到在集成电路10内供应的时钟,并且可以被配置为产生存储器12所使用的时钟。
注意到,其它实施例可以包括组件的其它组合,包括图1中所示的组件的子集或超集和/或其它组件。虽然在图1中示出了给定组件的一个实例,但是其它实施例可以包括给定组件的一个或多个实例。类似地,贯穿该详细描述,即使只示出了给定组件的一个实例,也可以包括给定组件的一个或多个实例,和/或即使示出了多个实例,也可以使用只包括一个实例的实施例。
实现虚拟GPU的图形处理单元
现在转到图2,方框图示出了实现多个虚拟图形处理单元(GPU)的GPU 50的一个实施例。在图2的实施例中,GPU 50包括接口逻辑单元62、馈送单元58、任务管理器55、存储器管理器64以及一个或多个执行单元60。在该实施例中,GPU 50还包括多个虚拟GPU 52 (VGPU)。如所示的,每个虚拟GPU 52包括一个或多个指令缓冲器54以及一个或多个存储位置56。
在图2中将各种结构示为彼此连接。这些连接可以是本领域技术人员已知的总线、点对点传输线或任何其它合适的连接。不必对GPU 50中的结构之间的所有连接和接口都进行描绘。因而,在各个实施例中,可以根据需要通过一个或多个合适的连接将图2中所示的结构中的任何一个或全部连接到图2中的其它结构中的任何一个或全部。
在GPU 50的各个实施例中,可以存在任意数量的虚拟GPU52。在图2的实施例中, GPU 50被示为具有 三个虚拟GPU 52A-52C。在该实施例中,相应的一组一个或多个指令缓冲器54和存储位置56与每个虚拟GPU相对应。在其它实施例中,可以存在更多数量或更少数量的VGPU。
相应地,在不同的实施例中(或者甚至在同一实施例中),用于实现VGPU的电路和结构的布局可以变化。例如,(一个或多个)指令缓冲器54可以位于GPU 50的不同区域中, 并且可以包括不同的子结构。在一个实施例中,指令缓冲器54中的一个被配置为存储命令,而指令缓冲器54中的另一个可以被配置为存储任务,而指令缓冲器54中的再一个被配置为存储线程。指令缓冲器配置和/或分配也可以在虚拟GPU之间进行变化。因而,在一个实施例中,第一虚拟GPU可以具有用于命令、任务和线程的三个相应的指令缓冲器,而另一虚拟GPU可以使用不同的配置。(注意到,通常,术语“虚拟GPU)可以表示例如GPU内的一个或多个结构,所述结构被配置为实现虚拟GPU的功能的全部或一部分,如本文中所描述的。然而,在一些实施例中,可以说虚拟GPU由一个或多个特定结构实现,例如“被配置为实现多个虚拟GPU的第一电路或GPU……”)。
如本文中使用的,术语“命令”(或“GPU命令”)是指供GPU执行的高级命令。卿, 例如,术语“命令”并不是指单个32位或64位的计算机指令,虽然命令可以具有一个或多个相应的指令)。在一些实施例中,可以由在CPU的一个或多个线程上运行的软件来向GPU 发布GPU命令。在一个实施例中,这种命令是OpenCL语句,其可以包括一个或多个指向存储器的指针。例如,GPU命令可以是指导GPU计算在第一存储器位置存储的第一矩阵与在第二存储器位置存储的第二矩阵的点积的OpenCL语句。许多其它类型的命令也是可能的, 并且可以与诸如渲染一个或多个多边形等之类的图形任务相对应。在不同的实施例中,命令可以采用任意数量的格式和/或计算机语言。在一些实施例中,GPU可以支持多个不同类型或样式的命令(例如,OpenCUOpenGUOpenAL或其它语言和/或编程框架)。在一些实施例中,GPU命令可以与在GPU所连接的CPU上运行的特定计算进程(或线程)相对应。
如下面进一步描述的,在一些实施例中,GPU命令可以具有与其相关联的一个或多个相应的低级“任务”。在各个实施例中,“任务”进一步可以划分(分割)成一个或多个线程和/或一个或多个指令。例如,参见第11页第3段至第12页第3段。因而,在一个实施例中,GPU命令将具有一个或多个相应的任务,其中,每个任务具有一个或多个相应的线程,并且其中,每个线程包括一个或多个指令。
在图2的实施例中,接口逻辑62可以接收供GPU执行的命令。这样的命令可以是从CPU接收的,并且可以包括指向存储器的指针(B卩,指向数据和/或用于执行的其它指令的指针)。接口逻辑62可以向CPU传递结果,或者向CPU指示计算结果已经准备好(例如, 逻辑62可以通知CPU结果被存储在存储器中的位置处,并且准备好被获取)。这样,在各个实施例中,接口逻辑62可以被配置为直接与CPU、存储器控制器和/或图1中描绘(或者可以以另外的方式存在与计算设备或计算机系统中)的其它结构进行通信。如图2中所示的, 接口逻辑62耦合到一个外出的通信连接,但是其它的配置也是可能的(例如,逻辑62可以具有到CPU的连接以及到存储器或存储器控制器的另一连接等)。
在一些实施例中,接口逻辑62还被配置为接收对与特定(进入的)命令相对应的 VGPU进行指示的信息。即,逻辑62可以接收对命令所属(或被分配了命令)的VGPU进行指示的信息。在一个实施例中,可以在指定数值O到(N-1)的比特字段中指示该信息,其中,N 是VGPU的数量。在一个实施例中,VGPU指示符可以是GPU命令本身的一部分,而在另一实施例中,VGPU指示符可以被单独地存储(例如,存储在由GPU命令中的指针所指向的存储器位置中)。
在各个实施例中,接口逻辑62和/或VGPU 52可以被配置为基于VP⑶指示符将 GPU命令路由到特定的指令缓冲器54。因而,在具有8个VGPU的实施例中,针对特定命令的011比特字段将导致命令被路由到针对VGPU#3的指令缓冲器,而针对不同命令的000比特字段将导致该不同命令被路由到针对VGPU#0的指令缓冲器。(注意到,在一些实施例中, 可以在两个或更多个VGPU之间共享(一个或多个)指令缓冲器54 ;换句话说,同一指令缓冲器可以保存针对不同VGPU的命令。同样,在一些实施例中,可以在两个或更多个VGPU之间共享(一个或多个)存储位置56。在具有共享结构的这些实施例中,可以以可访问的方式连同相应的数据、命令或指令一起维护关于VGPU的指示)。根据上述内容,每个VGPU 52中的一个或多个指令缓冲器54因而可以被配置为存储要被执行的一个或多个命令。在各个实施例中,结构逻辑62被配置为将从CPU接收到的命令适当地路由到合适的VGPU以及路由到(一个或多个)指令缓冲器54中的适当一个指令缓冲器。
在图2的实施例中,可以由任务管理器55来处理GPU命令。在该实施例中,任务管理器55被配置为创建与存储在(一个或多个)指令缓冲器54中的一个指令缓冲器中的命令相对应的一个或多个任务,以由GPU完成该命令的执行。因而,任务可以表示以比GPU命令更低的级别指定的一个或多个计算机操作。
例如,在一个实施例中,GPU命令可以指定应当根据指定的颜色以及定义立方体边缘的八个顶点的集合来绘制红色的立方体。对于立方体的每个面,可以创建不同的任务来计算该面的边界,而可以创建一个或多个其它的任务来对立方体的可见部分进行阴影绘制和/或着色。相应地,任务管理器55可以将一个GPU命令扩展成任意数量的任务。
在一个实施例中,任务管理器通过读取所存储的指令将GPU命令扩展(或分割)成一个或多个任务(即,在一个实施例中,预先指定给定GPU命令的任务)。任务管理器55可以包括用于处理不同类型的命令的特定逻辑(硬件、固件、软件或其某种混合)。例如,任务管理器55可以被配置为响应于指定矩阵乘法的OpenCL指令而创建某些任务,而响应于指定要针对多个多边形执行阴影绘制的OpenGL命令而创建其它特定任务。任务管理器55为给定命令创建和/或管理的任务的数量可以根据命令的类型、其参数和/或伴随该命令的具体存储器内容来变化(例如,任务可以取决于特定命令的具体数据)。
在一些实施例中,任务管理器55被配置为将给定任务分割成一个或多个GPU执行 “线程”,以供GPU中的一个或多个执行单元60来处理。在一些实施例中,以比任务更低的级别来执行GPU线程。例如,为了充分渲染红色立方体的可见侧面,必须为每个可见像素计算色度和亮度值。在各个实施例中,可以执行一个线程来为单个像素或为一组像素(例如,4x4 的像素阵列)计算亮度值。相应地,任务管理器55可以将单个GPU任务扩展成任意数量的线程。任务管理器55可以包括用于为不同类型的任务处理线程生成的特定逻辑(硬件、固件、软件或其某种混合)。在一些实施例中,任务和线程可以是一个并且相同(即,在这些实施例中,“任务”的组织级别与“线程”的组织级别相同,并且每个任务包括一个线程)。在一个实施例中,任务管理器被配置为通过读取存储在存储器中的位置处的指令来将任务分割成一个或多个线程(即,任务管理器55可以被配置为通过获取所存储的指令来生成要被执行的一个或多个线程)。根据上述内容,在一个实施例中,任务管理器55被配置成生成与任务和/或与GPU命令相对应的一个或多个线程和/指令。
相应地,(一个或多个)指令缓冲器54可以为相应的VGPU存储命令、任务、线程或其任意组合。因而,在一个实施例中,特定的GPU命令由接口逻辑62接收,并被路由到(一个或多个)指令缓冲器54。(在该实施例中,被配置为存储GPU命令的指令缓冲器可以被称为 “命令缓冲器”。)任务管理器55随后可以使得命令被转换和/或分割成多个相应的任务,每个任务本身可以被进一步分割成要被执行的任意数量的线程和/或低级指令。相应地,随后可以将所有的GPU命令、任务、线程和/或指令连同对这些命令、任务、线程和/或指令所对应的VGPU的标识进行指示的信息一起存储在(一个或多个)指令缓冲器54中。然而,在一些实施例中,VGPU的标识信息可以采取其它形式,并且在结构上可以是隐式的(例如,电路的某些位线或部分正在承载信号或正在用于存储信息这一单纯的事实可以表示VGPU的标识)。
对于任意命令、任务和/或线程,随着执行在一个或多个执行单元60中进行,任务管理器55可以维护和/或更新各种信息。任务管理器55所维护的该信息可以包括程序计数器、VGPU标识符以及对允许特定VGPU访问的一个或多个地址范围(虚拟的和/或物理的)进行指示的地址空间信息。在各个实施例中,任务管理器55还可以维护和/或更新未明确提到的其它信息。(下面进一步相对于存储器管理器64来讨论地址空间,但是要注意,在一些实施例中,如果给不同的VGPU分配重叠的地址范围,则会导致错误的计算)。
在一个实施例中,GPU可以针对每个CPU线程支持一个虚拟GPU。在统一的存储器系统中,这可以允许CPU在细粒度的基础上将计算工作切换到GPU。在这种实施例中,虚拟 GTO可以是用公平分享优先级进行时间排序的,或者可以与CPU线程优先级匹配。(S卩,在一个实施例中,CPU上的线程的优先级决定针对GPU的命令、任务、线程和/或指令的优先级。 在一个特定实施例中,存在三个虚拟GPU:—个用于用户界面(UI)指令,一个用于“常规”指令,以及一个用于后台指令。在这个实施例中,Π虚拟GPU相对于“常规”虚拟GPU优先, “常规”虚拟GPU进而相对于“后台”虚拟GPU优先。
VGPU的诜择和优先级化
当一个或多个线程准备好要被执行时,馈送单元58可以选择这些线程并且将它们转发到(一个或多个)执行单元60。在一些实施例中,转发线程包括向执行单元发送程序计数器(标识一个或多个可执行指令的位置)。执行单元随后可以获取指令,并使得这些指令被执行。在一个实施例中,向执行单元转发线程包括提供一个或多个可执行指令本身的流(例如,包括操作数和/或操作码的比特序列)。在一些实施例中,馈送单元58被配置为在各个的基础上选择并转发线程。然而,在其它实施例中,馈送单元58被配置为在任务级别的基础上选择并转发线程,并且在这种实施例中,将向(一个或多个)执行单元60转发特定任务的所有线程(而不是只转发这些线程的一部分)。相应地,在这些实施例中,可以说选择和转发以任务级别的粒度发生,而不是以线程级别的粒度发生。
馈送单元58对线程的选择可根据一个或多个优先级方案来执行。在图2的实施例中,采用固定的优先级方案。在该实施例中,VGPU 52A具有最高优先级,VGPU 52B具有次高优先级,并且VGPU具有最低优先级。相应地,当馈送单元58确定要向(一个或多个)执行单元60转发哪个(些)线程时,将优先于VGPU 52B或VGPU 52C的等待线程来执行VGPU 52A的等待线程(或任务)。在这个方案中,VGPU 52A的线程或(任务)将继续执行(S卩,被馈送单元转发以供执行)直到没有任何一个存在为止,此时,将向(一个或多个)执行单元60转发VGPU 52B或VGPU 52C的线程或任务(VGPU 52B被赋予优先)。
其它优先级化方案也是可能的,并且是可以预料到的。例如,在一个方案中,GPU 50中的多个VGPU可以被该GPU被配置连接到的CPU的多个线程使用。每个CPU线程可以具有其自己的优先级(例如,其可以由操作系统设置)。在这个方案中,当CPU线程向这些 VGPU之一分派GPU命令时,可以给该命令(及其相关的任务、线程和/或指令)赋予与相应的CPU线程的优先级相同的优先级。
在另一优先级方案(其可以在与最后讨论的方案相同的实施例中的一些中使用) 中,可以给VGPU分配多个离散的优先级中的任何一个。作为一个例子,四个VGPU可以均具有从O到3的可变优先级,其中优先级O最优先。在一个变形中,具有相同优先级的两个或多个VGPU可以具有被馈送单元58根据一个或多个公平方案(例如,可以使用加权或非加权的循环仲裁)转发的线程或任务。在一些实施例中,优先级方案可以涉及服务级别保证 (例如,特定的优先级可以保证在某个特定时间帧内或在一些数量的时钟周期内执行GPU命令、任务和/或线程)。在一个这样的实施例中,还可以使用加权的循环仲裁来进行VGPU优先级选择(这可以避免低优先级的命令、任务或线程的长期停转)。相应地,确定开始利用可用执行单元60的特定VGPU可以受各种因素的影响。
根据上述内容,在图2的实施例中,馈送单元被配置为基于给定GPU命令的优先级来向一个或多个执行单元转发与该给定GPU命令相对应的线程。(该优先级进而可以基于该 VGPU的标识;即,一些VGPU可以具有较高的、较低的或者与其它VGPU相同的优先级)。因而,可以优先于与较低优先级GPU命令相对应的其它线程,来选择性地转发与给定GPU命令相对应的一个或多个线程。(然而,在一个实施例中,可以在转发了与具有较高优先级的GPU 命令相对应的线程之后,在稍后时间转发较低优先级的GPU命令的一个或多个线程)。
在一个实施例中,馈送单元还被配置为基于可用并准备好进行使用的执行单元的类型,来转发用于执行的线程和/或指令。例如,如果不存在可以在特定类型的执行单元 (例如阴影绘制)上执行的等待的较高优先级线程,则可以向该类型的执行单元转发低优先级线程。因而,在图2的实施例中,如果阴影绘制单元60自由,但是较高优先级的VGPU 52A 和52B不具有准备好用于执行的阴影绘制线程,则可以替代地选择来自最低优先级VGPU 52C的线程。相应地,在一些实施例中,线程选择和转发基于线程的类型和/或包括该线程的指令的类型。
执行
(一个或多个)执行单元60被配置为执行VGPU中的每一个VGPU的指令。可以根据本领域普通技术人员已知的技术来配置(一个或多个)执行单元,并且在各个实施例中,(一个或多个)执行单元还可以被配置为执行与特定VGPU的线程、任务和/或命令相对应的指令。在一些实施例中,(一个或多个)执行单元60中的一个或多个是流水线式的,并且因而可以并发地执行不同VGPU的指令。在一些实施例中,(一个或多个)执行单元60还是多线程的。相应地,在这些实施例中,各个执行单元可以支持两个或更多个线程(在一些情况中, 是成百上千的线程)的指令的并发执行。(一个或多个)执行单元60可以包括但不限于以下各项中的一个或多个的任意组合阴影绘制单元、纹理绘制单元、瓷砖式覆盖单元(tiling unit)、顶点单元、矢量数 学单元等。
在图2的实施例中,(一个或多个)执行单元60被配置为生成所执行的线程和/或指令的结果。在一些实施例中,其它结构也可以生成所执行的线程和/或指令的结果的全部或一部分。在一个实施例中,(一个或多个)执行单元被配置为在给定指令正被被执行(例如,通过指令流水线)时维护给定指令所属的VGPU的指示符。在图2的实施例中,在计算出给定指令的结果之后,GPU 50被配置为基于该指令所属的VGPU的指示符将该结果存储在 (一个或多个)存储位置56中的适当的一个存储位置中。相应地,当计算出VGPU52A的指令 (或一个或多个指令的序列)的结果时,可以将这些结果发送到与该特定VGPU相对应的存储位置56(并且对于VGPU 52B和52C—样)。在各个实施例中,指令的结果可以包括数据和/ 或存储器指针(即,指向其它数据所位于的存储器中的地址)。在一个实施例中,一个或多个寄存器组被配置为存储与不同VGPU相对应的指令的数据值。因而,在一个实施例中,具有包括64个不同寄存器的架构设计的GPU可以总共具有256个寄存器(4 ★ 64),来实现GPU 所支持的四个VGPU中的每一个VGPU的寄存器组。
在一些实施例中,线程和/或指令的执行结果包括额外的信息。在一个实施例中, 执行结果可以包括关于特定线程的所有指令都已经被执行(即,该线程已经完成执行)的指示。执行结果还可以包括关于完成了特定任务或特定GPU命令的执行的指示。在一个实施例中,指令的结果还可以包括一个或多个程序计数器值(例如,其可以被递增到要被执行的下一指令或线程)。因而,在一些实施例中,每个VGPU可以具有一个或多个相应的程序计数器。
在不同的实施例中,暂停以及恢复(resume) VGPU的执行可以以不同的粒度级别发生。即,当较高优先级的VGPU使用(一个或多个)执行单元60时,可以冻结GPU命令、 任务、线程或指令。随后可以使用(例如在存储位置56中)所存储的执行结果,以便在特定 VGPU重新获得GPU的优先时恢复该特定VGPU的执行。
在一个实施例中,可以通过使用线程的最后的程序计数器值(在指令级别上的 VGPU粒度)在下一指令处恢复该线程的执行。在一个实施例中,可以通过启动任务完成所需要的新线程的执行(在线程级别上的VGPU粒度)来恢复该任务的执行。例如,之前在前一线程的结束处停止执行之后,但是在启动下一线程之前,可以出现执行的这种恢复。
可以通过启动下一任务的执行(在任务级别上的VGPU粒度)来恢复GPU命令的执行。在一些实施例中,命令级别的粒度(和优先级选择)也是可能的。然而,这些粒度级别不是相互排斥的,例如,在一些实施例中,可以通过在部分执行的线程的中间或者在部分执行的任务的中间进行启动,来恢复GPU命令的执行。在一些实施例中,恢复执行包括从一组专用于特定VGPU的一个或多个寄存器中获取中间结果。
注意,通常,术语“优先级”可以应用于VGPU、GPU命令、任务、线程和/或指令中的任何一个或全部。例如,可以说线程具有某个优先级,或者可以说某个优先级与指令或任务相对应(或者是针对指令或任务)。相应地,在一些实施例中,可以说线程中的每一个指令具有与该线程相同的优先级;可以说属于任务的每一个线程具有与该任务相同的优先级;并且可以说与GPU命令相对应的每个任务可以具有与该GPU命令本身相同的优先级。在一个实施例中,与特定VGPU相对应的所有GPU命令、任务、线程和/或指令都是以该VGPU的优先级来执行的。
GPU存储器管理和咨源分配
在图2的实施例中,每个VGPU 52具有受保护的数据和地址空间。虽然在该实施例中,(一个或多个)执行单元60用于执行不同VGPU的不同线程和/或指令,但是GPU可以使得一个VGPU的执行结果不被不同的VGPU的执行结果覆盖的方式来操作。由于这一原因,在图2的实施例中,(一个或多个)存储位置56包括用于计算和/或用于存储结果的一组寄存器。然而,除了影响寄存器值以外,指令的执行还可以改变存储器(经由接口逻辑62 可访问的本地GPU存储器和/或系统存储器)中所存储的数据。
相应地,在图2的实施例中,存储器管理器64被配置为管理多个VGPU的存储器访问。具体地,存储器管理器64被配置为处理由使用虚拟地址空间引起的问题。如图2中所示的,每个VGPU使用不同的虚拟地址空间。例如,每个VGPU能够在512MB大小的(虚拟)范围内访问存储器。通过使用虚拟地址范围而不是物理存储器地址范围,(在一些实施例中) 可以简化从任务和/或GPU命令生成线程和/或指令,这是因为虚拟存储器地址范围在数值上是相同的(并且,因而不需要执行具体的存储器地址计算,其基于不同的物理基地址可能是不同的)。因而第一 VGPU的第一指令和第二 VGPU的第二指令可以都针对虚拟地址空间中的确切的一些位置(但是将不会彼此干扰)。在这种实施例中,存储器管理器64被配置为确保当在每个VGPU中从存储器读取数据或者向存储器写入数据时使用实际物理存储器的不同的非重叠部分。
因而,在一些实施例中,在任何给定时间,可以对给定VGPU分配物理存储器的不同部分。在一些实施例中,这种分配可能是相当简单的。例如,如果GPU具有的物理存储器的量等于或大于VGPU的数量乘以VGPU虚拟地址空间的长度,那么就可以不存在冲突,并且可以简单地给每个VGPU分配专门使用的一个或多个物理存储器部分。例如,在存储器为 4GB并且8个VGPU均具有512MB的虚拟地址空间的GPU中,可以不存在冲突。然而,在一些实施例中,VGPU的虚拟存储器空间的总数可能超过GPU中可用的物理存储器的量。例如, 如果三个VGPU均具有2GB的虚拟地址空间,但是GPU只具有3GB的存储,那么可能不存在足够的物理存储器来容纳所有VGPU。在这样的实施例中,存储器管理器64被配置为将物理存储器分配(或映射)到各个VGPU的虚拟地址空间。
可以以各种方式来执行物理存储器到虚拟地址空间的分配。在一个实施例中,可以实际给最高优先级的VGPU分配其整个虚拟地址范围,而给较低优先级的VGPU分配其相应虚拟地址范围的某个部分。在另一实施例中,对较高优先级的VGPU分配其虚拟地址范围的某个较大的部分,而给较低优先级的GPU分配其相应虚拟地址范围的某些较小部分。此外,在一些实施例中,可以根据需要来执行物理存储器分配。在这样的实施例中,线程和/ 或指令被最近执行的VGPU可以在任何存储器请求时被赋予优先。因而,如果活动的VGPU在没有物理存储器可用时请求更多的物理存储器,那么可以释放其它VGPU中的一个的物理存储器,使得活动的VGPU可以使用其进行计算、存储结果或要被执行的指令等。在一些实施例中,物理存储器的释放可以包括经由接口逻辑62从GPU向外部位置(例如,主系统存储器或其它存储设备)复制信息。“根据需要”的物理存储器分配也是有用的,因为,可以不分配物理存储器直到VGPU实际请求它为止(例如,如果被VGPU执行的线程和/或指令只要求IGB的虚拟地址空间中的24MB,那么分配物理存储器中的整个IGB将有可能是浪费的)。
相应地,存储器管理器64被配置为在虚拟存储器和物理存储器之间进行映射,并且可以用作(一个或多个)执行单元60与GPU的存储器和/或其它系统存储器之间的透明接口。因而,在一个实施例中,(一个或多个)执行单元60进行的所有存储器访问包括存储器管理器64执行从虚拟地址到物理地址的转换的步骤。在一个实施例中,存储器管理器64 被配置为基于与给定指令相关联的、标识VGPU 52中的特定一个VGPU的信息来执行该指令的虚拟地址转换。例如,存储器管理器64可以维护用VGPU ID索引的一个或多个查找表。 在一些实施例中,在逐页的基础上分配物理存储器。例如,如果线程和/或指令尝试向尚未被分配(即,之前重来未被写入)的虚拟地址进行写入,那么存储器管理器将向相应的VGPU 分配一个或多个(物理)存储器页。在各个实施例中,存储器管理器64可以管理和/或配置其它GPU资源,包括可以分配给VGPU的(共享)“临时寄存器”的数量或部分。(在另一实施例中,该功能可以由(一个或多个)执行单元60来执行)。
现在转到图3,描述了 GPU的一个实施例的方框图。在图3中,GPU包括存储位置 76和执行单元94、96和98。在各个实施例中,存储位置76可以具有例如关于图2所描述的(一个或多个)存储位置56的属性和/或功能中的任何一个或全部。
(一个或多个)顶点执行单元94包括被配置为执行顶点处理操作的一个或多个执行单元。(一个或多个)像素执行单元98包括被配置为执行像素处理操作的一个或多个执行单元。(一个或多个)计算执行单元96包括被配置为执行其它计算操作(例如,通用的算术和/或矩阵操作)的一个或多个执行单元。在各个实施例中,执行单元94-98可以具有 (一个或多个)执行单元60 (例如,如关于图2所描述的)的属性和/或功能中的任何一个或全部。在一些实施例中,在GPU中可以存在额外的执行单元或执行单元类型。如所示的, 存储区域81-92经由一个或多个总线、点到点传输线和/或互连连接到执行单元94-98。
执行单元94-98中的每一个具有中间结果的相应存储。相应地,在图3中,存储区域81-84被配置为存储像素处理操作的中间结果,存储区域85-88被配置为存储顶点处理操作的中间结果,并且存储区域89092被配置为存储其它计算操作的中间结果。如所示的, 特定的存储区域与特定的虚拟GPU相对应(例如,存储81与VGPU#0相对应,而存储82与 VGPU#1相对应)。
在一些实施例中,公共执行单元可以实现顶点执行单元94的功能的全部或一部分、计算单元96的功能的全部或一部分以及像素执行单元98的功能的全部或一部分。例如,在一个实施例中,公共阴影绘制执行单元可以实现顶点、像素和计算处理的全部或一部分。在这种实施例中,可以存在专用于辅助顶点操作的特定逻辑、专用于辅助像素操作的特定逻辑和/或专用于辅助计算操作的特定逻辑,但是公共执行单元的其它部分(例如执行流水线)可以被共享并且通常用于执行不同类型的处理操作。
因而,在各种实施例中,虚拟GPU可以具有提供给所有非暂时性(中间)状态的存储,包括与任务队列、顶点阴影绘制前原始状态、顶点阴影绘制后原始状态、分段阴影绘制前原始状态以及深度、模版和色彩帧缓冲器状态相对应的分布式存储。因而,在一个实施例中,可以在GPU中将上述状态信息的存储分布成靠近使用该状态的地方,其中针对每个虚拟GPU有一个唯一的副本,而活动顶点和分段阴影绘制处理的存储与对于虚拟GPU而言共同的阴影绘制处理单元捆绑。与虚拟GPU相对应的中间存储信息可以沿着GPU内的整个执行流水线存储在各个位置。因而,虽然图3将存储81示为VGPU#0的中间像素存储,但是存储空间81实际上可以是位于处于GPU的不同区域中的两个或更多个物理上分离的存储器、高速缓冲存储器、寄存器等中的许多不同存储区域。类似地,在各个实施例中,存储区域 81-92中的任何一个可以分布在GPU内的两个或更多个位置上。
在图3的实施例中,虚拟GPU#0具有第一存储区域81,其被配置为存储可用于恢复一个或多个未完成的顶点处理操作的执行的中间顶点处理结果。虚拟GPU#0还具有第二存储区域85,其被配置为存储可用于恢复一个或多个未完成的像素处理操作的执行的中间像素处理结果。第三存储区域89可以被配置为存储可用于恢复其它计算操作的执行的其它中间计算结果。虚拟GPU#1、#2和#3中的每一个可以具有类似的相应中间存储。注意,虽然图3的实施例示出了四个虚拟GPU,但是其它实施例可以使用更少或更多数量的GPUJn 在本公开中在其它地方讨论的。
在各个实施例中,未完成的顶点处理操作、未完成的像素处理操作和/或未完成的计算操作可以以各种粒度级别被恢复。在一个实施例中,这些类型的操作中的一些或全部可以在每个线程的基础上被恢复。因而,在这种实施例中,可以完全执行线程,而存储区域例如81-92并不存储来自该线程的暂时信息。而是,在这种实施例中,可以在已完成线程时就存储结果。因而,可以以线程级别停转和恢复执行,但是不一定在构成独立线程的两个或更多个指令之间停转和恢复执行。在其它实施例中,可以在任务级别的粒度上恢复未完成的顶点处理操作、未完成的像素处理操作和未完成的计算操作中的一些或全部。在这些实施例中,可以在任务完成之后存储用于恢复执行的中间信息,但是可以不必存储将允许在构成正被执行的任务的两个或更多个线程之间停转和恢复执行的恢复信息。允许恢复执行的中间结果的存储的其它级别的粒度也是可能的并被预料到的(例如,指令级别的粒度或GPU命令级别的粒度)。例如,参见上面的第12页第2段到第13页第2段。
在一个进一步的实施例中,存储区域81-92中的一个或多个分布在GPU中的相应多个不同位置上。因而,存储区域例如81可以包括一个或多个存储器缓冲器、寄存器或被配置为存储信息(例如,阴影绘制存储信息等)的其它结构。在一些实施例中,这些存储结构由于其邻近GPU流水线中的特定执行区域可以位于GPU的不同部分。存储区域例如81可以包括被实现成队列、随机存取存储器或其它信息访问方案的存储。相应地,在各个实施例中,存储区域例如81-92可以包括与以下内容相对应的一个或多个存储结构任务队列、命令缓冲器或其它GPU前端操作;顶点阴影绘制前原始状态;顶点阴影绘制后原始状态;转换顶点前状态;转换顶点后状态;分段阴影绘制前原始状态;光栅化和/或内插;深度、模版和颜色帧缓冲器状态;或者本领域技术人员已知的可以保存基于状态的信息的其它GPU结构。
因而,在各个实施例中,使用存储区域81-92可以允许GPU以比之前方案更细的粒度快速地针对不同虚拟GPU在像素和顶点处理操作的执行之间进行切换,从而允许(例如) 在更小的时间窗期间针对不同的虚拟GPU执行任务、线程、指令等。此外,图3的实施例与本公开其它地方描述的其它实施例和特征兼容(或可以鉴于其它实施例和特征进行修改), 这是图形处理器设计领域的技术人员会想到的。
现在转到图4,示出了根据本公开的方法110的一个实施例的流程图。在以下描述的方法Iio的各个实施例中,所描述的元素和/或步骤中的一个或多个可以以与所示的顺序不同的顺序并发地执行,或者可以整个被省略。也可以根据需要执行其它额外的元素。 此外,在一些实施例中,只执行一些方法步骤中的一些部分。在一些实施例中,方法Iio的步骤中的全部或一部分可以由GPU 50来执行,并且应当鉴于上文关于图2所讨论的公开内容来理解。
在步骤120中,图形处理单元(GPU)开始第一线程的执行,其中,第一线程与第一 GPU命令相对应。在该实施例中,在开始第二线程的执行之前,开始第一线程的执行,所述第二线程与第二 GPU命令相对应。开始第一线程的执行基于第一 GPU命令的第一优先级高于第二 GPU命令的第二优先级,其中第一和第二 GPU命令的优先级基于第一和第二 GPU命令所对对应的虚拟GPU的标识。在本公开中,术语“开始执行”或“执行”以及它们的变形可以指向GPU的一个或多个执行单元转发一个或多个线程和/或指令。在一些实施例中,“开始执行”或“执行”可以指恢复之前已经计算了某些部分但是执行未完全完成的GPU命令、 任务和/或线程。
在步骤130中,基于关于不存在具有比第二优先级高的优先级的其它GPU命令的指示,来开始第二线程的执行。在一个实施例中,该指示包括所有其它虚拟GPU(除了与第二线程相对应的虚拟GPU以外)的命令缓冲器都是空的。在其它实施例中,该指示包括对没有向执行单元转发给定虚拟GPU的所有线程进行指示的信息。在步骤130中,在开始与第一 GPU命令相对应的所有线程的执行之前,开始与第三GPU命令相对应的第三线程的执行,其中,开始第三线程的执行基于比第一优先级高的第三优先级,其中,第三优先级基于第三 GPU命令所对应的虚拟GPU的标识。相应地,第三线程可以具有比第一线程高的优先级,第一线程本身可以具有比第二线程高的优先级。第一、第二和第三线程中的每一个可以分别与多个虚拟GPU中的不同虚拟GPU相对应。
示例性计算机系统
接下来转到图5,示出了系统200的一个实施例的方框图,在系统200中可以出现 GPU50。在所示的实施例中,系统200包括耦合到外部存储器252的集成电路10的至少一个实例。外部存储器252可以形成上文关于图1讨论的主存储器子系统(例如,外部存储器 252可以包括存储器12A-12B)。集成电路10耦合到一个或多个外围设备254和外部存储器252。还提供电源256,其向集成电路10提供电源电压,以及向存储器252和/或外围设备254提供一个或多个电源电压。在一些实施例中,可以包括集成电路10的多于一个的实例(并且也可以包括多于一个的外部存储器252)。
存储器252可以是任何类型的存储器,例如动态随机存取存储器(DRAM)、同步 DRAM (SDRAM)、双倍数据速率(DDR、DDR2、DDR3等)SDRAM (包括SDRAM的移动版本,例如 mDDR3等,和/或SDRAM的低功率版本,例如LPDDR2等)、RAMBUS DRAM (RDRAM)、静态RAM (SRAM)等。一个或多个存储器设备可以耦合到电路板上,以形成存储器模块,例如单列直插内存模块(SI丽)、双列直插内存模块(DMM)等。可替换地,可以用芯片堆叠配置、封装堆叠配置或多芯片模块配置来将这些设备与集成电路10安装在一起。
外围设备254可以包括任何期望的电路,这取决于系统200的类型。例如,在一个实施例中,系统200可以是移动设备(例如,个人数字助理(PDA)、智能电话等),并且外围设备254可以包括用于各种类型的无线通信的设备,例如wifi、蓝牙、蜂窝、全球定位系统等。 外围设备254还可以包括额外的存储,包括RAM存储、固态存储或磁盘存储。外围设备254 可以包括用户接口设备,例如显示屏幕(包括触摸显示屏幕或多触摸显示屏幕)、键盘或其它输入设备、麦克风、扬声器等。在其它实施例中,系统200可以是任何类型的计算系统(例如,桌面个人计算机、膝上型计算机、工作站 、上网盒等)。
计算机可读介质和硬件制造
上面描述的技术和方法可以被实现成存储在任何合适的计算机可读介质上的计算机可读指令。如本文中所使用的,术语计算机可读存储介质是指(非暂时性、有形)介质, 其可被计算机或计算机系统读取,并且包括磁、光和固态存储介质,例如硬盘驱动器、光盘驱动器、DVD、易失性或非易失性RAM设备、全息存储、可编程存储器等。应用于计算机可读介质的术语“非暂时性”只是意图将被认为在35U. S. C. § 101下不合格的任何主题(例如暂时性(无形)介质(例如载波))从权利要求的范围中排除,并且并不意图将被认为合法的任何主题排除在外。
在一些实施例中,可以使用上面描述的这种计算机可读存储介质来存储被程序读取的指令,并且可以直接或间接使用其来制造包括GPU 50、IC 10和/或其多个部分的硬件。例如,指令可以勾画一个或多个数据结构,其用高级设计语言(HDL)(例如Verilog或 VHDL)描述了硬件功能的行为级或寄存器传输级(RTL)描述。描述可以由合成工具来读取, 合成工具可以对描述进行合成以产生网表。网表可以包括一组门(例如,在合成库中定义的),其表示GPU 50、IC 10或其多个部分的功能。然后可以设置并按路线发布网表,以产生描述要应用到掩膜的几何形状的数据集。然后可以在各种半导体制造步骤中使用该掩膜来产生与硬件实施例相对应的一个或多个半导体电路或电路。可替换地,数据库可以是网表 (具有或不具有合成库)或者数据集,如所希望的。因而,一个实施例是包括数据结构的计算机可读存储介质,所述数据结构可由可在计算机系统上执行的程序使用,以执行用于制造包括所述数据结构所描述的电路的集成电路的过程的一部分,其中,在数据结构中描述的电路包括GPU50、IC 10和/或其多个部分。
虽然上面已经描述了具体实施例,但是这些实施例并不旨在限制本公开的范围, 即使关于特定特征只描述单个实施例也是如此。本公开中提供的特征的例子旨在解释性的,而非限制性的,除非另外进行了说明。上面的描述旨在覆盖对于受益于本公开的本领域技术人员而言显而易见的这样的替换、修改和等价形式。另外,上面在详细描述中提供的部分或标题不应当被解释成以任何方式限制本公开。
因此,根据以上所述,本公开的一些示例针对一种用于图形处理的装置,包括图形处理单元(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命令的一个或多个相应的指令缓冲器以及被配置为存储执行结果的一个或多个相应的存储位置;任务管理器;馈送单元;以及一个或多个执行单元;其中,所述任务管理器被配置为生成与具有第一优先级的第一 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从中央处理单元(CPU)接收对所述第一优先级和所述第二优先级进行指定的信息。
本公开的范围包括本文(明确地或暗示地)公开的任何特征或特征组合、或者其任意概括,而不管其是否缓和了本文解决的问题中的任何一个或全部。相应地,在本申请(或者要求其优先权的申请)的审查期间,可以将新的权利要求制定到任何这样的特征组合。具体地,参考所附权利要求,来自从属权利要求的特征可以与来自独立权利要求 的特征组合, 并且来自相应独立权利要求的特征可以以适当的方式组合,而不仅仅是所附权利要求中枚举的具体组合。
权利要求
1.ー种用于图形处理的装置,包括 图形处理单元(GPU),其包括多个存储位置; 其中,对于由所述GPU实现的多个虚拟GPU中的每ー个虚拟GPU,所述多个存储位置中的相应的ー个存储位置包括 被配置为存储中间结果的第一存储区域和第二存储区域,其中,所述第一存储区域和所述第二存储区域分别被配置为存储与该虚拟GPU相对应的中间顶点处理结果和与该虚拟GPU相对应的中间像素处理结果; 其中,所述中间顶点处理结果用于恢复该虚拟GPU的ー个或多个未完成的顶点处理操作的执行,并且其中,所述中间像素处理结果用于恢复该虚拟GPU的ー个或多个未完成的像素处理操作的执行。
2.如权利要求I所述的装置,其中,所述多个虚拟GPU中的每ー个虚拟GPU的所述第一存储区域和所述第二存储区域均是分布在所述GPU中的相应多个不同位置上的。
3.如权利要求I所述的装置,其中,所述GPU还包括 被配置为存储多个GPU命令的命令缓冲器;以及 ー个或多个执行单元; 其中,所述装置被配置为基于给定GPU命令的优先级向所述ー个或多个执行単元转发与所述给定GPU命令相对应的ー个或多个指令。
4.如权利要求3所述的装置,其中,由所述GPU实现的所述多个虚拟GPU中的每ー个虚拟GPU具有其自己的优先级,并且其中,所述多个GPU命令中的每ー个GPU命令具有的优先级是基于由所述GPU实现的所述多个虚拟GPU中的相应ー个虚拟GPU的优先级的。
5.如权利要求3所述的装置,其中,所述GPU还包括 被配置为存储与所述多个GPU命令中的ー个或多个GPU命令相对应的指令的ー个或多个指令缓冲器,其中,所述ー个或多个指令缓冲器被配置为对于与所述多个GPU命令中的所述ー个或多个GPU命令相对应的指令中的每ー个指令,为该指令存储对所述多个虚拟GPU中的相应ー个虚拟GPU的标识进行指示的信息。
6.如权利要求I所述的装置,其中,所述GPU被配置为在每个线程的基础上恢复所述一个或多个未完成的顶点处理操作,并且其中,所述GPU被配置为在每个线程的基础上恢复所述ー个或多个未完成的像素处理操作。
7.如权利要求I所述的装置,其中,所述GPU被配置为将由所述GPU实现的所述多个虚拟GPU中的每ー个虚拟GPU的虚拟地址空间映射到物理存储器。
8.一种图形处理单元(GPU),包括 被配置为实现多个虚拟GPU的一个或多个电路,所述多个虚拟GPU中的每ー个虚拟GPU包括被配置为存储ー个或多个GPU命令的一个或多个相应的指令缓冲器以及被配置为存储执行结果的一个或多个相应的存储位置; 任务管理器; 馈送单元;以及 ー个或多个执行单元; 其中,所述任务管理器被配置为生成与具有第一优先级的第一 GPU命令相对应的ー个或多个线程;并且其中,所述馈送単元被配置为响应于给定线程的优先级而向所述ー个或多个执行単元转发所述给定线程,其中,所述优先级是基于所述多个虚拟GPU中的一个虚拟GPU的标识的。
9.如权利要求8所述的图形处理单元,其中,所述ー个或多个执行単元包括第一类型的第一执行单元以及第ニ类型的第二执行单元; 其中,所述馈送単元被配置为基于对用于执行所述给定线程的执行单元的类型进行指示的信息来转发所述给定线程。
10.如权利要求8所述的图形处理单元, 其中,所述馈送単元被配置为基于不存在等待被所述ー个或多个执行単元中的第一执行单元执行的较高优先级的线程的指示,向所述第一执行单元转发具有较低优先级的线程。
11.如权利要求8所述的图形处理单元,其中,对于所述多个虚拟GPU中的每ー个虚拟GPU,所述相应的一个或多个存储位置包括一个或多个寄存器以及程序计数器值。
12.如权利要求8所述的图形处理单元,还包括被配置为将物理存储器映射到与所述多个虚拟GPU相对应的多个虚拟地址空间的存储器管理器。
13.ー种用于图形处理的系统,包括如权利要求8 — 12中任一项所述的图形处理单元。
14.ー种用于图形处理的方法,包括 图形处理单元(GPU)在执行第二线程之前执行第一线程, 其中,由所述GPU实现多个虚拟GPU,并且其中,所述第一线程与第一 GPU命令相对应,并且所述第二线程与第二 GPU命令相对应; 其中,所述第一 GPU命令与所述多个虚拟GPU中的第一虚拟GPU相对应,并且具有基于所述多个虚拟GPU中的所述第一虚拟GPU的标识的第一优先级; 其中,所述第二 GPU命令与所述多个虚拟GPU中的第二虚拟GPU相对应,并且具有基于所述多个虚拟GPU中的所述第二虚拟GPU的标识的第二优先级;并且 其中,所述GPU在执行所述第二线程之前执行所述第一线程是基于所述第一优先级比所述第二优先级高的。
15.如权利要求14所述的方法,还包括所述GPU基于不存在具有比所述第二优先级高的优先级的、等待被执行的其它GPU命令的指示,来执行所述第二线程。
16.如权利要求14所述的方法,还包括在完成与所述第一GPU命令相对应的所有线程的执行之前,执行与第三GPU命令相对应的第三线程,其中,执行所述第三线程基于比所述第一优先级高的第三优先级,并且其中,所述第三优先级基于由所述GPU实现的所述多个虚拟GPU中的对应于所述第三GPU命令的一个虚拟GPU的标识。
17.如权利要求14所述的方法,还包括所述GPU从中央处理单元(CPU)接收对所述第一优先级和所述第二优先级进行指定的信息。
全文摘要
本发明公开了虚拟GPU。公开了涉及虚拟图形处理单元(VGPU)的技术和结构。对于软件,VGPU可以作为独立的硬件GPU存在。然而,可以通过使用控制结构并通过复制GPU中的一些(但不是全部)硬件元件,来在同一GPU上实现两个或更多个VGPU。例如,可以在支持多个VGPU的GPU中添加额外的寄存器和存储空间。可以为与不同的所支持的VGPU相对应的任务和线程设置不同的执行优先级。还可以管理VGPU的存储器地址空间,包括使用不同VGPU的虚拟地址空间。停转和恢复不同VGPU的执行可以允许更细粒度的执行控制,并获得更好的GPU效率。
文档编号G06T1/20GK102982505SQ201210249299
公开日2013年3月20日 申请日期2012年7月18日 优先权日2011年7月18日
发明者R·A·德雷宾, J·王 申请人:苹果公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1