针对通用寄存器(GPR)的寄存器溢出管理的制作方法

文档序号:14033572阅读:669来源:国知局
针对通用寄存器(GPR)的寄存器溢出管理的制作方法

本发明涉及数据存储,且更确切地说,涉及通用寄存器(gpr)中的数据存储技术。



背景技术:

例如图形处理单元(gpu)的处理单元包含具有通用寄存器(gpr)的处理核心,所述通用寄存器存储从指令的执行而产生的数据或执行指令所需的数据。举例来说,所述处理核心的处理元件可包含算术逻辑单元(alu),其执行多个算术运算。所述gpr可存储所述算术运算的结果和/或存储所述算术运算的运算元。



技术实现要素:

一般来说,本发明描述用于在较低优先权指令集在处理单元上的执行期间管理当较高优先权指令集将在处理单元上执行时的寄存器溢出的技术。处理单元包含一或多个通用寄存器(gpr),其存储对于较低优先权指令集的执行所需的数据。在本发明中描述的技术中,一或多个gpr包含存储器位置的静态集区和存储器位置的动态集区。

处理单元可将只存储在存储器位置的动态集区中的低优先级指令集的数据复制到与一或多个gpr分开的存储器单元内,且从所述一或多个gpr删除复制的数据(例如,只从存储器位置的动态集区删除溢出)。以此方式,处理单元可创造足够的存储区域用于执行高优先权指令集,而不需要使存储用于低优先级指令集的数据的所有存储器位置溢出。只从存储器位置的动态集区的溢出可以允许从低优先级指令集到高优先权指令集的快速低功率上下文切换和/或允许指令之间的公平调度,其中延迟的指令为比具有对块点(也被称作同步点)的完全执行的指令高的优先权。

在一个实例中,本发明描述一种在图形处理单元(gpu)上执行指令的方法,所述方法包括用所述gpu的一或多个核心的一或多个处理元件执行第一指令集;用所述gpu确定对待在所述gpu上执行的第二指令集给予比在所述gpu上执行的所述第一指令集高的优先权;响应于确定对所述第二指令集给予较高优先权,用所述gpu将存储于分配给所述第一指令集的一或多个通用寄存器(gpr)的子集而非全部中的数据复制到另一存储器单元,所述一或多个gpr可由上面执行所述第一和第二指令集的所述gpu的所述一或多个核心存取;和用所述一或多个处理元件且在所述复制后,利用所述一或多个gpr的所述子集执行所述第二指令集。

在一个实例中,本发明描述一种用于执行指令的装置,所述装置包括一或多个通用寄存器(gpr),和图形处理单元(gpu)。所述gpu被配置以用所述gpu的一或多个核心的一或多个处理元件执行第一指令集;确定对待在所述gpu上执行的第二指令集给予比在所述gpu上执行的所述第一指令集高的优先权;响应于确定对所述第二指令集给予较高优先权,将存储于分配给所述第一指令集的所述一或多个gpr的子集而非全部中的数据复制到另一存储器单元,其中所述一或多个gpr可由上面执行所述第一和第二指令集的所述gpu的所述一或多个核心存取;和用所述一或多个处理元件且在所述复制后,利用所述一或多个gpr的所述子集执行所述第二指令集。

在一个实例中,本发明描述一种用于执行指令的装置,所述装置包括一或多个通用寄存器(gpr),和图形处理单元(gpu)。所述gpu包括用于执行第一指令集的装置,其中所述gpu包括一或多个核心,且所述一或多个核心包括所述用于执行的装置;用于确定对待在所述gpu上执行的第二指令集给予比在所述gpu上执行的所述第一指令集高的优先权的装置;用于响应于确定对所述第二指令集给予较高优先权而将存储于分配给所述第一指令集的所述一或多个gpr的子集而非全部中的数据复制到另一存储器单元的装置,其中所述一或多个gpr可由上面执行所述第一和第二指令集的所述gpu的所述一或多个核心存取;和用于在所述复制后利用所述一或多个gpr的所述子集执行所述第二指令集的装置。

在一个实例中,本发明描述一种计算机可读存储媒体,所述计算机可读存储媒体具有存储于其上的指令,所述指令在执行时使一或多个处理器:用图形处理单元(gpu)的一或多个核心的一或多个处理元件执行第一指令集;确定对待在所述gpu上执行的第二指令集给予比在所述gpu上执行的所述第一指令集高的优先权;响应于确定对所述第二指令集给予较高优先权,将存储于分配给所述第一指令集的一或多个通用寄存器(gpr)的子集而非全部中的数据复制到另一存储器单元,其中所述一或多个gpr可由上面执行所述第一和第二指令集的所述gpu的所述一或多个核心存取;和用所述一或多个处理元件且在所述复制后,利用所述一或多个gpr的所述子集执行所述第二指令集。

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

附图说明

图1是说明根据本发明中所描述的一或多个实例技术的用于处理数据的实例装置的框图。

图2是更详细地说明图1中说明的装置的组件的框图。

图3是更详细地说明图2的图形处理单元(gpu)的着色器核心的一个实例的框图。

图4a到4c是说明在一或多个gpr中存储数据的实例的概念图。

图5是说明在一或多个gpr中存储数据的实例的概念图。

图6是说明碎片整理的实例的概念图。

图7是说明碎片整理的另一实例的概念图。

图8是说明根据本发明的实例技术的流程图。

具体实施方式

被配置以同时或并行地(例如,在相同时间)执行许多操作的例如图形处理单元(gpu)的并行处理单元包含执行一或多个程序的指令的一或多个处理器核心(例如,用于gpu的着色器核心)。为易于描述,关于gpu或通用gpu(gpgpu)来描述本发明中所描述的技术。然而,本发明中描述的技术可以扩展到未必是gpu或gpgpu的并行处理单元,以及非并行处理单元(例如,未具体配置成用于并行处理的并行处理单元)。

可以用单指令、多数据(simd)结构设计gpu。在simd结构中,着色器核心包含多个simd处理元件,其中每个simd处理元件执行相同程序的指令,但是对不同数据执行指令。在特定simd处理元件上执行的特定指令被称作线程。每一simd处理元件可被视为执行不同线程,因为用于给定线程的数据可能不同;然而,在处理元件上执行的线程是与在其它处理元件上执行的指令相同的指令。以此方式,simd结构允许gpu同时执行许多任务。

作为实例,对于顶点处理,gpu可针对每一顶点执行相同任务,但用于每一顶点的顶点数据可不同(例如,不同坐标、不同色彩值等)。simd结构允许gpu通过在不同simd处理元件上执行顶点着色器的相同实例来并行处理许多顶点。在此实例中,每一simd处理元件可执行顶点着色器的线程,其中每一线程是所述顶点着色器的一个实例。

simd处理元件包含一或多个算术逻辑单元(alu),且simd处理元件将结果存储在一或多个通用寄存器(gpr)中。多个gpr被称作通用寄存器文件(gprf)。gprf包含用于存储来自一或多个simd处理元件的所得数据的专用寄存器。gprf的gpr可只由包含处理元件的处理核心存取,且不可由gpu的其它单元(例如,图形管线的硬件单元)存取。在此意义上,不应将gpr与gpu的可供gpu的所有单元用的本地高速缓冲存储器或本地存储器混淆。

在本发明中揭示的技术中,可将gprf的gpr划分成两个部分:静态部分和动态部分。静态部分包含贯穿包含特定指令集的程序的执行保持分配给那个指令集的一组gpr中的静态存储器位置的集区。动态部分包含另一组gpr中的动态存储器位置的集区。将在此组gpr中的动态存储器位置中的至少一个指派到第一指令集,且接着指派到第二指令集,即使包含第一指令集的所述程序仍然在执行。

形成gprf的静态部分的gpr被称作gprf的静态部分(或静态gpr),且形成gprf的动态部分的gpr被称作gprf的动态部分(或动态gpr)。静态部分为“静态”,因为静态部分中的存储器位置保持分配给一指令集,直到gpu完成包含所述指令集的程序的执行。静态部分中的分配的存储器位置不能分配给任何其它指令集,直到gpu完成包含所述指令集的程序的执行。动态部分为“动态”,因为在gpu完成包含一指令集的程序的执行时,动态部分中的存储器位置到所述指令集的分配可改变。举例来说,可将第一程序的指令集分配给动态部分中的存储器位置,且在第一程序仍然在执行或暂停(即,未完成执行)时,可将动态部分中的存储器位置分配给第二程序的指令集。

在一些情况下,在第一指令集的执行期间,gpu可确定对待在gpu上执行的第二指令集给予比在gpu上执行的第一指令集高的优先权(即,应将第二指令集的执行的完成优先化在第一指令集的执行的完成之前)。然而,在第二指令集将在其上操作的gpr中,可能不存在用于数据的足够存储器位置。

对于此类情况,gpu可能需要使来自gpr的数据溢出到另一存储器单元内(例如,将数据从gpr输出到高速缓冲、本地存储器或系统存储器外芯片)。gpu可将存储于分配给第一指令集的gpr的存储器位置的子集但非全部中的数据复制到另一存储器单元。举例来说,gpu可从分配给第一指令集的gpr的动态存储器位置的集区中的动态存储器位置(例如,gprf的动态部分)而非从分配第一指令集的gpr的静态存储器位置的集区中的静态存储器位置(例如,不从gprf的静态部分)复制数据。

第二指令集可接着使用分配给第一指令集的gpr的存储器位置的子集在gpu上执行。举例来说,gpu可确定分配给第一指令集的动态存储器位置现在被分配给第二指令集。

以此方式,gpu可仅溢出gpr的一部分(例如,gpr中的仅一些但非全部),例如,大得足够用于gpu执行较高优先权指令集的部分。如果并不存在动态gpr,且gprf只包含静态部分,那么分配给第一指令集的所有存储器位置将需要溢出,因为静态部分的分配在运行时间期间不能改变。溢出所有存储器位置消耗额外功率,且花费比仅溢出一子集(例如,仅动态存储器位置)额外的时间。因此,通过只溢出分配给第一指令集的gprf的存储器位置的一部分(例如,gprf的gpr中的一些但非全部),如与溢出分配给第一指令集的所有存储器位置的实例相比,本发明中描述的技术可降低功耗且减少第二指令集可执行前的延迟。

图1是说明根据本发明中所描述的一或多个实例技术的用于处理数据的实例装置的框图。图1说明装置10,其实例包含(但不限于)例如媒体播放器的视频装置、机顶盒、例如移动电话的无线手持机、个人数字助理(pda)、台式计算机、笔记本电脑、游戏控制台、视频会议单元、平板电脑等。

在图1的例子中,装置10包含处理器12、图形处理单元(gpu)14和系统存储器16。在一些实例中,例如装置10是移动装置的实例,处理器12和gpu14可以形成为集成电路(ic)。举例来说,ic可以被视为芯片封装内的处理芯片,且可为系统芯片(soc)。在一些实例中,处理器12和gpu14可容纳于不同集成电路(即,不同芯片包装)中,例如,装置10为台式或笔记本电脑的实例。然而,在装置10是移动装置的实例中,或许有可能处理器12和gpu14容纳在不同集成电路中。

处理器12和gpu14的实例包含(但不限于)一或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)或其它等效的集成或离散逻辑电路。处理器12可为装置10的中央处理单元(cpu)。在一些实例中,gpu14可以是专用硬件,其包含集成和/或离散逻辑电路,所述集成和/或离散逻辑电路向gpu14提供适合于图形处理的大规模并行处理能力。在一些情况下,gpu14还可包含通用处理能力,且在实施通用处理任务(即,非图形相关任务)时可被称作通用gpu(gpgpu)。

出于说明的目的,用gpu14描述本发明中描述的技术。然而,本发明中描述的技术不受如此限制。本发明中描述的技术可扩展到其它类型的并行处理单元(例如,即使不针对图形处理,也提供大规模并行处理能力的处理单元)。并且,本发明中描述的技术可以扩展到未被具体配置成用于并行处理的处理单元。

处理器12可以执行各种类型的应用程序。应用程序的实例包含网络浏览器、电子邮件应用程序、电子数据表、视频游戏或产生可视对象以供显示的其它应用程序。系统存储器16可以存储用于执行一或多个应用程序的指令。在处理器12上执行应用程序使处理器12产生用于有待显示的图像内容的图形数据。处理器12可向gpu14发射图像内容的图形数据以供进一步处理。

在一些非图形相关实例中,处理器12可产生较好地适合于由gpu14处理的数据。这些数据不需要一定用于图形或显示目的。举例来说,处理器12可将需要对其执行矩阵运算的数据输出到gpu14,并且gpu14可又执行矩阵运算。

一般来说,处理器12可以将处理任务分担到gpu14,例如,需要大规模并行运算的任务。作为一个实例,图形处理需要大规模并行运算,并且处理器12可以将此类图形处理任务分担给gpu14。然而,例如矩阵运算的其它运算也可以得益于gpu14的并行处理能力。在这些实例中,处理器12可以充分利用gpu14的并行处理能力以使gpu14执行非图形相关运算。

处理器12可根据特定应用处理接口(api)与gpu14通信。此类api的实例包含api、克罗诺斯(khronos)组织的或opengl和opencltm;然而,本发明的各方面不限于directx、opengl或openclapi,并且可扩展到其它类型的api。此外,本发明中描述的技术不需要根据api起作用,且处理器12和gpu14可利用任何通信技术。

系统存储器16可为用于装置10的存储器。系统存储器16可包括一或多个计算机可读存储媒体。系统存储器16的实例包含(但不限于)随机存取存储器(ram)、电可擦除可编程只读存储器(eeprom)、快闪存储器或可用于运载或存储呈指令和/或数据结构的形式的所要程序代码且可由计算机或处理器存取的其它媒体。

在一些方面,系统存储器16可包含使处理器12和/或gpu14执行在本发明中归属于处理器12和gpu14的功能的指令。因此,系统存储器16可为具有存储于其上的指令的计算机可读存储媒体,所述指令在执行时使一或多个处理器(例如,处理器12和gpu14)执行各种功能。

系统存储器16为非暂时性存储媒体。术语“非暂时性”指示存储媒体不以载波或传播信号体现。然而,术语“非暂时性”不应解释为意味着系统存储器16为不可移动的或其内容为静态的。作为一个实例,可从装置10去除系统存储器16,和将所述系统存储器移动到另一装置。作为另一实例,可将大体上类似于系统存储器16的存储器插入到装置10内。在某些实例中,非暂时性存储媒体可存储可随着时间而改变的数据(例如,在ram中)。

装置10还可包括显示器18、用户接口20和收发器模块22。装置10可包含出于清楚起见而未在图1中展示的额外模块或单元。举例来说,装置10可包含扬声器和麦克风(两者都未展示在图1中),以在装置10为移动无线电话的实例中实现电话通信。此外,装置10中展示的各种模块和单元可并不在装置10的每一实例中都是必要的。例如,在装置10为台式计算机的实例中,用户接口20和显示器18可在装置10外部。作为另一实例,在显示器18为移动装置的触敏或压敏显示器的实例中,用户接口20可为显示器18的部分。

显示器18可包括液晶显示器(lcd)、阴极射线管(crt)显示器、等离子显示器、触敏显示器、压敏显示器或另一类型的显示装置。用户接口20的实例包含(但不限于)轨迹球、鼠标、键盘和其它类型的输入装置。用户接口20也可为触摸屏且可并入作为显示器18的一部分。收发器模块22可包含允许装置10与另一装置或网络之间的无线或有线通信的电路。收发器模块22可包含调制器、解调器、放大器和用于有线或无线通信的其它此电路。

如上文所述,gpu14提供大规模并行处理能力。gpu14提供此类并行处理能力的一种方式是通过单指令多数据(simd)结构。在simd结构中,gpu14执行同一程序(有时也被称作内核)的多个个例。举例来说,图形处理和一些非图形相关处理需要执行相同操作,但是针对不同数据执行。

gpu14可执行执行图形相关任务的着色器程序(被简称作着色器),和执行执行非图形相关任务的内核。gpu14包含至少一个核心(有时被称作着色器核心),且着色器程序或内核在所述核心上执行。为简洁起见且易于描述,将gpu14描述为执行内核的指令。然而,gpu14可类似地利用本发明中描述的技术执行着色器程序。gpu14可执行内核的多个个例以一次处理多个数据值。一般来说,需要对数据执行的运算可相同,使得内核可采用gpu14的大规模并行能力。

为了执行内核的多个个例,gpu14的核心包含多个处理元件,且每一处理元件可执行内核的一个个例。举例来说,每一处理元件可执行内核的第一指令。尽管处理元件正执行的指令是相同的,但指令在每一处理元件中对其操作的值可不同。在此意义上,每一处理元件可被视为执行内核的线程(例如,个例),其中线程为用于给定数据的内核的执行的个例。因此,每一处理元件可执行不同线程,因为用于每一线程的数据可不同,但用于每一线程的基础指令可相同。

作为基本实例,内核的指令可定义将三个值相加的运算。在此实例中,所述处理元件中的每一个可将三个值相加,但每一处理元件正相加的特定值可不同。因此,每一处理元件可执行内核的线程(例如,个例),其中所述线程定义将三个值相加的运算。因此,指令可相同(即,将三个值相加),但用于每一处理元件的三个值中的一个或更多个可不同。在此实例中,通过同时在所述处理元件中的每一个上执行所述指令以将三个值相加,gpu14可能够提供将三个值相加在一起的并行计算。

所述处理元件中的每一个可存储由核心的通用寄存器(gpr)中的处理元件执行的运算的所得最终值。核心中的gpr可被配置以存储多个值,处理元件中的一个。多个gpr形成gpr文件(gprf)。

在本发明中描述的技术中,gprf包含静态部分(例如,静态gpr)和动态部分(例如,动态gpr)。举例来说,gpr的一个子集可一起形成静态部分,且gpr的另一子集可一起形成动态部分。为了易于理解,本发明将gprf描述为包含静态存储器位置的集区和动态存储器位置的集区。静态存储器位置的集区可指形成静态部分的gpr的分群,且动态存储器位置的集区可指形成动态存储器位置的gpr的分群。

在一些情况下,术语“gpr”已用以指示具有多个存储器位置的存储器单元。举例来说,已将gpr定义为用于存储来自一或多个simd处理元件的临时数据的存储位置的集合。在此类实例中,gpr包含静态部分和动态部分,非常像gprf包含静态gpr和动态gpr的方式。

在gprf具有静态部分的静态存储器位置(例如,具有静态gpr的子集)和具有动态部分的动态存储器位置(例如,具有动态gpr的子集)的上下文中描述本发明。然而,不应将实例视为受到如此限制,且实例也可扩展到一个gpr包含多个存储器位置的情况,其中所述存储器位置的一子集为静态部分的静态存储器位置,且所述存储器位置的另一子集为动态部分的动态存储器位置。为了易于理解,本发明描述一或多个gpr的存储器位置,其中存储器位置的一个子集是针对静态部分,且存储器位置的一个子集是针对动态部分。在gprf的实例中,静态部分的存储器位置的子集可为多个静态gpr,且动态部分的存储器位置的子集可为多个动态gpr。在单个gpr的实例中,静态部分可为gpr中的存储器位置(例如,静态存储器位置)的一子集,且动态部分可为gpr中的存储器位置(例如,动态存储器位置)的另一子集。

无论如何,在处理器12于在gpu14上执行的程序的执行期间指派gprf的一个或gpr的动态部分中的存储器位置的意义上,可将动态存储器位置考虑为动态的。在处理器12于待在gpu14上执行的程序的执行前指派gprf的一或多个gpr的静态部分(例如,静态gpr)中的存储器位置的意义上,可将静态存储器位置考虑为静态的。

gpu14可并行地执行内核的多个线程。线程的集合可被称作波前。举例来说,波前中的线程可为相同指令,但可对不同数据运算。波前对其运算的数据(例如,形成波前的指令的运算元)和波前的执行的结果(例如,指令的执行的结果)可存储于gprf的一或多个gpr的动态存储器位置和静态存储器位置或仅动态存储器位置中。

在一些实例中,在内核的执行期间,gpu14可确定另一内核将执行。一个内核到另一个的执行的切换被称作上下文切换。然而,在gprf中可能不存在足够可用空间来存储其它内核将对其运算的数据或其它内核的执行的结果。为了释放gprf中的空间,gpu14执行溢出操作。处理器12可指示gpu14执行溢出操作,或gpu14可在无来自处理器12的指令的情况下确定执行溢出操作。

溢出操作包含将数据复制出gpr,并且到另一存储器单元(例如,gpu14的高速缓冲或本地存储器或系统存储器16)。接着在gpr中存在足够存储器位置用于其它内核的执行。一般来说,因为由处理元件对gpr的存取需要比其它存储器单元(例如,gpu14的高速缓冲或本地存储器或系统存储器16)少的功率和时间,所以在gpr中存储数据和从gpr检索数据是优选的。

在gpu14(例如,gpu14的核心内的控制器或gpu14的处理元件)执行溢出操作后,数据经复制和存储所来自gpr变得自由地用于内核的指令。以此方式,gpu14可暂停较低优先权内核的执行且允许较高优先权内核执行。接着在较高优先权内核已完成执行后,gpu14可检索较低优先权内核的所有数据和可能状态信息且完成较低优先权内核的执行。

在一些技术中,溢出操作包含分配给较低优先权内核的波前中的每一个的所有存储器位置的溢出。这是因为在一些技术中,只存在静态存储器位置(例如,gprf只包含静态gpr),且因为静态存储器位置必须保持分配给特定波前直到完成内核,所以必须溢出所有存储器位置以释放用于其它内核的空间。

然而,根据本发明中描述的技术,gpr可包含动态存储器位置和静态存储器位置,且贯穿波前的执行,动态存储器位置不必须保持分配给相应波前。gpu14可不需要溢出分配给内核的波前的所有存储器位置。相反地,gpu14可只溢出存储器位置的一子集。举例来说,对于分配给内核的波前,gpu14可溢出来自动态gpr(例如,一或多个gpr的动态存储器位置)的数据,但不溢出来自静态gpr(例如,一或多个gpr的静态存储器位置)的数据,且在一些实例中,仅溢出允许较高优先权内核的指令执行所需要的数据量。

这样,需要从gprf的gpr复制较少数据来执行溢出操作。一般来说,作为溢出操作的部分转移数据可需要更多功率,因为需要对额外存储器的存取。并且,需要转移的数据越多,消耗的时间越多(尤其如果需要存取像系统存储器16的芯片外存储器),这延迟了高优先权内核的执行。通过本发明中描述的技术,较高优先权内核可按最小延迟执行,且额外功率消耗也可受限。

系统存储器16为芯片外意味着gpu14需要经由将各种组件连接在一起的总线互连件将数据输出到系统存储器16或从系统存储器16检索数据。经由总线互连件传送数据往往会比不使用总线传输数据需要多的功率。并且,因为总线互连件将各种组件连接在一起,所以可需要命令的调度。然而,系统存储器16不必需要总线互连件传送数据。在一些情况下,系统存储器16可为由许多组件共享的存储器,且提供比在芯片自身上可用多的存储器空间。

虽然关于较高优先权内核和较低优先权内核描述以上技术,但本发明中描述的技术可通常可适用于用于一指令集的数据的溢出以允许执行另一指令集,其中所述指令集可来自不同内核或同一内核。举例来说,在一些实例中,gpu14可实施“公平调度”。在一些情况下,线程或波前中的每一个应一起完成执行。然而,情况并不始终是这样。举例来说,虽然指令相同,但因为对于每一线程,数据不同,所以每一线程的执行时间可不同。实例情况为将指令分支(例如,if/then/else指令),其中一个线程或波前采取需要较少处理时间的分支,但另一线程或波前采取需要较多处理时间的分支。

为了确保延迟的线程跟上已完成的线程,gpu14或处理器12可定义线程中的一些块点(也被称作同步点),其中所有线程暂停在块点以允许同步群组中的所有其它线程跟上。在一些实例中,为了允许延迟的线程跟上,gpu14可对已到达块的一些线程执行溢出操作以释放额外存储器空间,从而允许延迟的线程更快速地跟上,这是因为延迟的线程能够存取更多存储器位置。在本公开中描述的技术中,在所述块处,gpu14可溢出来自线程的动态存储器位置的数据,但不溢出来自静态存储器位置的数据,以将较多存储器位置给予延迟的线程。再次,这是因为可在运行时间期间重新分配动态存储器位置(例如,动态gpr),然而静态存储器位置(例如,静态gpr)的分配是固定的。

因为本发明中描述的技术可适用于对一个内核给予比另一内核高的优先权(例如,用于上下文切换)或对一个指令集给予比另一指令集高的优先权(例如,用于公平调度)的实例,大体将所述技术描述为gpu14确定对待由gpu14执行的一个指令集给予比另一指令集高的优先权。gpu14可基于gpu14从处理器12接收的资讯(例如,在指示gpu14执行较高优先权内核的情况下)或基于gpu14确定的资讯(例如,在gpu14确定延迟的指令集将执行以用于公平调度的情况下)确定对所述指令集给予较高优先权。

作为一个实例,处理器12可确定一个内核的执行将抢先于另一内核的执行,并且因此,指示gpu14其它内核具有比当前正执行的内核高的优先权。举例来说,当处理器12确定用户与图形用户接口(gui)接口连接且引起在gui中呈现的图标的改变时,gpu14可执行内核以执行某些操作。在此情况下,处理器12可指示gpu14停止执行当前内核且对所述内核给予优先权以用于更新gui。通过本发明中所描述的动态gpr,gpu14可以能够释放空间以用于比在无动态gpr的情况下的其它技术快地执行gui内核,这可增强用户体验。

以此方式,gpu14的一或多个核心的一或多个处理元件可执行第一指令集。gpu14可确定对待在gpu上执行的第二指令集给予比在gpu上执行的第一指令集高的优先权(例如,上下文切换或公平调度)。gpu14可响应于确定对第二指令集给予较高优先权,将存储于中分配给第一指令集的一或多个通用寄存器(gpr)的存储器位置(例如,动态存储器位置,但非静态存储器位置)的子集而非全部中的数据复制到另一存储器单元。换句话说,gpu14可响应于确定对第二指令集给予较高优先权,将存储于分配给第一指令集的gprf的动态gpr而非gprf的静态gpr中的数据复制到另一存储器单元。所述一或多个gpr包括可只由上面执行第一和第二指令集的gpu14的一或多个核心存取的一或多个寄存器。所述一或多个处理元件可在复制后利用分配给第一指令集的一或多个gpr(例如,动态gpr)的存储器位置的子集(例如,动态存储器位置中的一或多个)执行第二指令集。

图2是更详细地说明图1中说明的装置的组件的框图。如图2中所说明,gpu14包含包含gprf32(其包含一或多个gpr)的核心28,和固定功能管线30。核心28和固定功能管线30可一起形成用以执行图形或非图形相关功能的处理管线。处理管线执行由在gpu14上执行的软件或固件定义的功能,并且由经硬接线以执行特定功能的固定功能单元执行功能。

如上所述,在gpu14上执行的软件或固件可被称作着色器程序或内核,且着色器程序或内核可在gpu14的核心28上执行。只为了易于描述,所述技术是关于内核来描述,但同等地也可适用于着色器程序。虽然只说明一个核心28,但在一些实例中,gpu14可包含类似于核心28的一或多个着色器核心。固定功能管线30包含固定功能单元。核心28和固定功能管线30可从彼此发射和接收数据。举例来说,处理管线可包含在核心28上执行的内核,所述内核从固定功能管线30的固定功能单元接收数据且将经处理数据输出到固定功能管线30的另一固定功能单元。

着色器程序和内核给用户提供功能灵活性,因为用户可设计着色器程序或内核以按任何可设想方式执行所要的任务。然而,固定功能单元是针对固定功能单元执行任务的方式而硬接线。因此,固定功能单元可不提供大量功能灵活性。

在图2中说明的实例中,将处理器12展示为执行编译器24和图形驱动器26。在处理器12上执行的图形驱动器26可被配置以实施应用编程接口(api)(例如,opengl或opencl或两者的组合)。在此类实例中,可根据与图形驱动器26相同的api配置着色器程序或内核(例如,根据opencl的内核和根据opengl的着色器程序)。尽管未说明,但系统存储器16可存储用于图形驱动器26的代码,处理器12从系统存储器16检索所述代码供执行。按虚线框说明图形驱动器26以指示在此实例中,图形驱动器26是在硬件(例如,处理器12)上执行的软件。然而,图形驱动器26的功能性中的一些或全部可实施为处理器12上的硬件。

并且,26可被配置以执行处理器12与gpu14之间的通信。因此,在本发明中,当将处理器12描述为发指令给gpu14或另外与gpu14通信时,处理器12正经由图形驱动器26执行此类功能。举例来说,图形驱动器26可被配置以允许处理器12与gpu14相互通信。举例来说,当处理器12将图形或非图形处理任务分担到gpu14时,处理器12经由图形驱动器26将此类处理任务分担到gpu14。

在一些实例中,系统存储器16可存储用于一或多个内核的源代码(例如,存储用于内核34a和34b的源代码,作为图2中所说明的实例)。处理器12可检索用于内核34a和34b的源代码,且在处理器12上执行的编译器24可将源代码编译成目标代码以用于在gpu14的核心28上执行。编译器24可在处理器12确定将执行内核34a和34b时编译内核34a和34b的源代码,但在一些实例中,编译器24可潜在地预先编译源代码且将所得目标代码存储在系统存储器16中。

类似于图形驱动器26,尽管未说明,但系统存储器16可存储用于编译器24的代码,处理器12从系统存储器16检索所述代码来执行。在此实例中,以虚线框来说明编译器24,以指示编译器24是在硬件(例如,处理器12)上执行的软件。然而,在一些实例中,编译器24的一些功能性可实施为处理器12上的硬件。

在本发明中描述的技术中,核心28可被配置以并行地执行同一指令集的同一指令的许多个例。举例来说,图形驱动器26可指示gpu14检索多个值,且指示gpu14执行内核34a或34b以处理所述值。在此实例中,核心28可执行内核34a或34b的许多个例,且通过针对所述值中的每一个在核心28的一个处理元件上执行内核34a或34b的一个个例来如此进行。

核心28的每一处理元件可在同一个例处执行内核34a或34b的同一指令;然而,特定值可不同,因为每一处理元件在处理不同值。如上所述,每一处理元件可被视为执行线程,其中线程指正处理特定值的内核34a或34b(例如,内核的一个执行个例)的一个指令。以此方式,核心28可支持可使用多个处理元件并行地执行的数十个独立线程(被称作波前或变形)。

波前中的每一个维护其在位于gpu14上的gprf32的较大的一或多个gpr中(例如,在核心28中)的数据。在本发明中,gprf32的一或多个gpr可被视为存储数据的存储器位置。然而,在一些情况下,一个gpr可包含多个存储器位置,且本发明中描述的技术也可适用于此类情况。在此意义上,在本发明中,具有多个gpr的gprf的描述映射到具有多个存储位置的一个gpr。本发明描述动态存储器位置和静态存储器位置,其可分别为gprf32的动态gpr和静态gpr,或gpr的动态存储位置和静态存储位置。

编译器24可被配置以编译内核34a和34b(例如,gpu程序),且可尝试使需要的寄存器(例如,存储器位置)的数目最少化。举例来说,编译器24可尝试使需要的gprf32的gpr的数目最少化。需要的存储器位置的数目可被称作寄存器占据面积(rfp)。为了使rfp最小化,编译器24可编译内核34a和34b,使得在执行内核34a和34b期间,贯穿内核34a和34b的使用期限将gprf32的gpr重新用于不同用途。

然而,如上所述,编译器24可能无法将gprf32的足够gpr分配给波前(即,在执行时,gprf32可不存在足够可用的gpr),且可确定可能需要存储器位置的溢出以释放足够的存储器位置。存储器位置的溢出(例如,使gprf32的gpr溢出)往往会降低性能,因为浪费了时钟循环用于溢出操作,而非执行。

需要溢出的原因中的一个为,编译器24可基于用于内核34a和34b的波前的所需寄存器占据面积而在内核34a和34b的波前间将gprf32的gpr划分成相等部分(例如,对每一波前给予gprf32的相同数目个gpr)。编译器24可以静态方式将gprf32的一或多个gpr划分成相等部分,这意味着在特定内核执行的期限内,细分是静态的。分配给内核的波前的存储器位置保持贯穿内核的使用期限分配给那个波前(即,直到内核已完成整个执行)。

可为gpu14上的硬件或在gpu14上执行的软件或固件的gpu14的调度器33可使用下式提供用于存储器位置的地址:reg_address=isa_reg_id+wavefront_id*rfp。在此实例中,编译器24可确定rfp和波前识别,且isa_reg_id为针对指定为发出的指令的部分的第一存储器位置的识别。基于确定的寄存器地址(例如,存储器位置地址),核心28的处理元件将用于波前的数据存储在gprf32的一或多个gpr中。

在仅使用静态存储器位置的此架构中,可存在某些限制。举例来说,gpu14在其同时执行多个内核的能力方面可受到限制。用于内核34a和34b的占据面积可不同,且用不同占据面积同时执行内核34a和34b可为繁琐的。即使足够存储器位置可用,归因于碎片化,gpu14可能仍无法使用所述存储器位置。

举例来说,用于存储器位置的地址可为连续的,且如果存在碎片化,那么在定址过程中可存在间隙。归因于管理复杂性,这导致多个内核的同时执行不切实际,且导致显著的斜降/斜升开销。斜降/斜升包含溢出操作,并且还命令停止内核的执行或另一内核的执行。

同一内核或不同内核的同时波前的最大数目是基于其寄存器占据面积。如果需要较大占据面积,那么核心28可执行较少波前。如果gpu14执行较少波前,那么等待时间隐藏变得复杂化。举例来说,如果gpu14执行较少波前,那么其完成内核34a或34b的执行所花的时间量增加且隐藏此等待时间是复杂的。并且,减少gpu14执行的波前的数目意味着未完全利用核心28的处理元件。核心28存在不执行任何功能的闲置处理元件。

并且,分配比波前需要的存储器位置多的存储器位置可能也不合需要。一般来说,需要的存储器位置(例如,活动寄存器)的数目在执行期间动态改变。举例来说,如果波前进入了更复杂的子程序且在从那些子程序退出时减小,那么可能需要更多存储器位置。举例来说,如果在波前的指令中存在if/then/else指令,那么指令中的一个可经历if条件,且另一个可经历else条件。if条件可能需要较少存储器位置,且else条件可能需要较多存储器位置,但直到执行才知道符合if条件还是else条件(即,动态已知)。然而,编译器24可基于最坏情境来分配存储器位置(例如,假定始终满足else条件)。如果很少出现最坏情境,那么可存在不使用或很少使用的许多分配的存储器位置。保留不使用或很少使用的此类存储器位置是浪费的。

为了避免过度保留(例如,分配)存储器位置,例如处理器12的某一类型的处理元件包含较小寄存器文件和具有较小大小的波前的较小数目个同时线程(例如,用于线程的窄向量宽度)。对于溢出,处理器12使用大阶层式高速缓冲存储器在存储器中和外溢出。然而,对于gpu14,使用大阶层式高速缓冲存储器在存储器中和外溢出可能不实际。这是因为gpu14被配置成用于高度并行执行,从而导致大gprf32,且恒定溢出负面影响这目的,然而处理器12并不用于并行执行,这允许处理器12具有较小gprf供其操作,且因此溢出不太是问题。

并且,gpu14可执行交错同时执行。对于交错同时执行,具有高gpr容量(例如,gprf32包含许多gpr)以交错多个线程以及并行执行。因此,因为gpu14往往会具有高容量gprf32,所以当可能需要相对大量数据来写入和读取回时,gprf32内的所有gpr的溢出可具有负面影响。

在本公开中描述的技术中,gprf32的一或多个gpr可不仅包含静态存储器位置,而且还包含动态存储器位置。举例来说,gprf32可包含两个部分:静态和动态。静态部分包含静态存储器位置(例如,静态gpr或单个gpr的静态存储器位置),且动态部分包含动态存储器位置(例如,动态gpr或单个gpr的动态存储器位置)。编译器24可将静态存储器位置分配给波前,且贯穿包含所述波前的内核的执行保留那分配。编译器24可将动态存储器位置分配给波前,且那分配可贯穿包含所述波前的内核的执行而改变。在一些实例中,编译器24可分配静态存储器位置,使得将静态存储器位置在所有波前当中均等地分裂。编译器24可动态地分配(例如,指派)动态存储器位置,以用于由需要额外存储器位置的任何波前使用。

因此,静态存储器位置的集合包含贯穿一个指令集的执行仅分配给所述指令集的存储器位置gprf32。并且,动态存储器位置中的至少一个包含分配给一指令集且接着在所述指令集的执行期间分配给一或多个其它指令集的存储器位置。

以下为用于存储器位置指派(例如,分配)的指令的实例。对于静态存储器位置的占据面积(静态占据面积sfp),占据面积可为2的幂以简化计算,但为2的幂并非要求。指令可为reg_address=isa_reg_id<sfp?sfp*wavefront_id+isa_reg_id:dynamic_base+isa_reg_id-sfp。以下为动态存储器位置的实例,其中发出且接着稍后释放保留(阻挡调用)来自动态部分的指定数目个存储器位置的指令。举例来说,dyn_reg_allocdst=offset_in_dynamic_portion,src=requested_reg_cnt;dyn_reg_freesrc1=offset_in_dynamic_portion,src2=reg_cnt_to_be_freed。编译器24或调度器33可使用简单凸块分配方案来管理定址(例如,递增分配直到全部,接着在发出新工作前,等待到其变空)。

针对各种原因,存储器位置的动态分配可为有益的。举例来说,动态分配可减少斜降/斜升处罚。编译器24可以能够总是将寄存器文件利用最大化(例如,将gprf32的gpr使用最大化)。因为完全利用存储器位置,所以为了面积节省,减小gprf32的大小同时保持相同性能可为有可能的。gpu14的核心28可同时执行多个内核,且通过同时执行多个小内核来增大资源利用。

所述技术可确保最小同时性,而不管内核实现等待时间隐藏的复杂性,同时活动存储器位置的数目小。换句话说,即使静态存储器位置的数目极少,通过使用动态存储器位置,仍然可存在可并行执行的最小数目个内核。

此外,对于具有贯穿使用期限具有可变占据面积的波前的内核,动态分配可改善执行性能。举例来说,在具有仅静态存储器位置的情况下,编译器24基于最坏情境(即,用于所有可能被调用的子程序的最大rfp)来分配静态存储器位置,从而导致即使不出现最坏情境仍可执行的最小数目个同时波前。通过本发明中描述的技术,核心28可同时执行较多波前,因为可在执行期间指派动态存储器位置。然而,如果始终执行需要最多存储器位置的子程序,那么益处可为有限的。一般来说,最坏情境(即,需要最大存储器位置的情况)始终发生的可能性很低,并且因此,益处可通常是可得的。

在本发明中描述的技术中,gpu14可采用gprf32中的存储器位置的动态分配来允许不同波前在不同时间执行,同时将溢出最小化。举例来说,gpu14的一或多个核心28的一或多个处理元件可执行第一指令集(例如,第一波前的指令)。gpu14(例如,经由调度器33或gpu14的某一其它控制器)可确定对待在gpu14上执行的第二指令集给予比在gpu14上执行的第一指令集高的优先权。术语“较高优先权”用以意味应使资源可用于执行较高优先权指令集,即使那负面影响较低优先权指令集的执行。

举例来说,在此实例中,因为对第二指令集给予较高优先权,所以gpu14(例如,核心28中的控制器)可响应于确定对第二指令集给予较高优先权,将存储于分配给第一指令集的gprf32的一或多个gpr的存储器位置的子集而非全部中的数据复制到另一存储器单元(例如,系统存储器16或gpu14的本地存储器或高速缓冲存储器)。作为实例,gpu14可复制存储于动态gpr中且不来自gprf32的gpr的静态gpr的数据。gprf32的一或多个gpr包含仅可由上面执行第一和第二指令集的gpu14的一或多个核心28存取的存储器位置。在复制后,一或多个核心28的处理元件可利用分配给第一指令集的gprf32的一或多个gpr的存储器位置的子集执行第二指令集。

在一些实例中,第一指令集(例如,第一波前)和第二指令集(例如,第二波前)可为用于不同应用程序(例如,内核)的指令。在此类实例中,为了确定对第二指令集给予较高优先权,gpu14可接收指示gpu14执行第二指令集而非第一指令集的命令,且响应于接收到所述命令而确定对第二指令集给予较高优先权。

在一些实例中,第一指令集和第二指令集为用于同一应用程序的指令,和可能同一波前的指令。在此类实例中,为了确定对第二指令集给予较高优先权,gpu14可确定第一指令集的多个指令已完成到块点(例如,所有线程等待允许延迟的线程跟上的点)的执行。gpu14可响应于确定第一指令集的多个指令已完成到块点的执行而确定应在执行第一指令集的剩余指令前执行第二指令集的多个指令。

一般来说,gpu14可在确定对待在gpu上执行的第二指令集给予较高优先权前从用于第一指令集的gprf32的一或多个gpr(例如,静态gpr)中的静态存储器位置的集区接收分配存储器位置的集合的信息。举例来说,编译器24与调度器33一起可确定在执行前分配给波前的静态存储器位置。gpu14经由调度器33可在确定对待在gpu14上执行的第二指令集给予较高优先权前确定来自用于第一指令集的gprf32的一或多个gpr(例如,动态gpr)中的动态存储器位置的集区的动态存储器位置的集合。以此方式,编译器24和调度器33可一起将一些静态存储器位置和一些动态存储器位置分配给第一指令集。

为了复制存储于分配给第一指令集的存储器位置的子集而非全部中的数据,gpu14可将存储于分配给第一指令集的gprf32中的动态存储器位置中的一个或更多个(例如,一或多个gpr的动态存储器位置,其可被视为动态gpr)中的数据复制到其它存储器单元。gpu14可避免存储于分配给第一指令集的gprf32的一或多个gpr中的静态存储器位置中的任一个中的数据复制到任一其它存储器单元(例如,一或多个gpr的静态存储器位置,其被视为被视为静态gpr)。

并且,编译器24和调度器33可将分配给第一指令集的gprf32的一或多个gpr中的一或多个动态存储器位置分配给第二指令集。在此实例中,gpu14可利用分配给第二指令集的gprf32的一或多个gpr中的一或多个动态存储器位置执行第二指令集。举例来说,为了确定用于第一指令集的动态存储器位置的集合,gpu14的调度器33可在第一指令集的执行期间从编译器24接收对gprf32的一或多个gpr中的存储器位置的请求。作为响应,调度器33可确定动态存储器位置的集合(例如,使用以上针对dyn_reg_alloc描述的伪码确定动态存储器位置的地址)。

图3是更详细地说明图2的gpu的核心的一个实例的框图。举例来说,图3说明gpu14的核心28的一个实例。核心28包含控制单元36、指令存储装置38、一或多个处理元件40a到40h(共同地被称作“处理元件40”)和一或多个通用寄存器文件(gprf)32。gprf32的存储器位置(例如,在此实例中,一或多个gpr)可存储数据,且因此还可被称作数据存储装置。尽管图3说明八个处理元件40,但在其它实例中,可存在多于或少于八个处理元件40。处理元件40为内核(例如,内核34a或34b)的个例在其上并行执行的处理元件的实例。

控制单元36可控制核心28的功能性。举例来说,控制单元36可检索待由处理元件40执行的指令且将所述指令存储于指令存储装置38中。并且,控制单元36可检索处理元件40待处理的值(例如,数据)且将所述值存储在gprf32的一或多个gpr中。

并且,控制单元36可被配置以执行溢出操作。举例来说,控制单元36可检索存储于gprf32的一或多个gpr的存储器位置中的数据,且将所述数据存储于另一存储器单元中。此外,控制单元36可接收指示内核的较高优先权的指令以用于上下文切换(即,将对一个内核的指令给予比另一内核的指令高的优先权)。控制单元36也可被配置以确定波前的一个指令何时相对于波前的其它指令延迟,且将较高优先权指派到波前的延迟的指令以用于公平调度(例如,确定第一指令集的多个指令到达块点的时间且将较高优先权指派到其它指令以允许其它指令完成直到块点的执行)。

指令存储装置38可以是能够存储指令的任一类型的存储器,例如(但不限于),易失性存储器、非易失性存储器、高速缓冲存储器、随机存取存储器(ram)、静态ram(sram)、动态ram(dram)等。控制单元36可为核心28的控制核心28的组件的硬接线电路。然而,控制单元36为核心28的在硬件上执行的软件或固件可以是可能的。

处理元件40被配置以执行程序的线程(例如,内核34a和34b中的一个或同时执行两个)。处理元件40中的每一个可执行不同线程。举例来说处理元件40中的每一个可关于潜在不同的值执行程序(例如,内核)的指令的个例。处理元件40可为单指令多数据(simd)处理元件。simd处理元件指当经激活时经配置以关于不同数据同时执行同一指令的处理元件。这可以允许处理元件40关于不同值并行执行程序的多个线程(例如,波前)。在一些情况下,处理元件40中的每一个可基于指向指令存储装置38中含有的指令的共同程序计数器执行程序的指令。

如果处理元件40中的一或多个由控制单元36去激活,那么此类处理元件40在给定指令循环内并不执行程序指令。在一些情况下,控制单元36可去激活处理元件40中的一或多个以实施条件性分支指令,其中分支条件对于一些线程得到满足且对于其它线程得不到满足。

在一些实例中,处理元件40中的每一个可包含和/或对应于一或多个算术逻辑单元(alu)。在另外实例中,处理元件40中的每一个可实施alu功能性。alu功能性可以包含加法、减法、乘法等。

根据本发明中描述的技术,处理元件40可被配置以执行不同波前的指令。在一些实例中,在gprf32中可不存在用于处理元件40执行所有波前的足够存储器位置(例如,gpr)。举例来说,gprf32的gpr中的一些可已存储数据,且可能不存在用于待存储的特定波前的数据的足够的其它gpr(或具有邻接地址的gpr)。为了释放存储器,控制单元36可将来自gprf32的存储器位置的数据溢出到另一存储器单元。然而,不溢出来自所有存储器位置的数据,控制单元36可被配置以只溢出来自动态存储器位置的数据。这样,控制单元36可限制溢出的数据的量,这可减少在另一波前的执行中的等待时间,且减少在波前的一或多个线程的执行的完成中的等待时间。

举例来说,控制单元36可在无完全上下文切换的情况下支持多个内核的区分优先的执行。在一些技术中,溢出指派到指令集的所有存储器位置以使存储器空间用于另一指令集的执行(例如,完全上下文切换)。然而,完全上下文切换可需要额外功率消耗和额外延迟。

通过本发明中描述的技术,控制单元36可只溢出分配给指令集的存储器位置的一部分。举例来说,控制单元36可将存储于分配给第一指令集的gprf32的一或多个gpr中的动态存储器位置中的一或多个中的数据复制到另一存储器单元,且避免分配给第一指令集的gprf32的一或多个gpr中的静态存储器位置中的任一个中的数据到任一其它存储器单元的复制。控制单元36、调度器33和/或编译器24可接着一起将分配给第一指令集的gprf32的一或多个gpr中的一或多个动态存储器位置分配给第二指令集。处理元件40可接着利用分配给第二指令集的gprf32的一或多个gpr中的一或多个动态存储器位置执行第二指令集。

应理解,在一些实例中,在第一指令集或第二指令集的执行前,编译器24可已将一些静态存储器位置分配给第一指令集且已将一些静态存储器位置分配给第二指令集。另外,编译器24可已将一些动态存储器位置分配给第一指令集且已将一些动态存储器位置分配给第二指令集。然而,在执行期间,控制单元36、调度器33和/或编译器24可确定应将分配给第一指令集的动态存储器位置中的一些分配给第二指令集。在此情况下,由于这些存储器位置的动态性质,即使第一指令集尚未完全完成执行(即,仍然在指令的使用期限),仍可将动态存储器位置分配给第二指令集。

并且,可执行动态存储器位置的分配以用于上下文切换(例如,从一个内核切换到另一个)或用于公平调度(例如,允许延迟的线程跟上)。因此,第一指令集和第二指令集可针对不同程序以用于上下文切换,或可针对同一程序用于公平调度。因此,第二指令集具有比第一指令集高的优先权指第一和第二指令集针对不同程序和第一和第二指令集针对同一程序的两个情况。

为了公平调度,调度器33或控制单元36可需要支持处理元件40在波前间的公平分配以保证线程的独立向前进度。在一些技术中,控制单元36可实施时间分片,其中每一波前执行多达n个指令,且接着给予下一个波前运行的机会。为了下一个波前执行,当前波前可具有为自身保留的大部分动态存储器位置。因此,额外溢出可由控制单元36针对一个波前执行以继续另一波前且针对此其它波前保留动态存储器位置。编译器24可基于在同步点(例如,块点)处的动态存储器位置占据面积确定可针对给予内核有效率地执行多少波前以将溢出最小化。

图4a到4c是说明在一或多个gpr中存储数据的实例的概念图。图4a说明内核34a包含六个波前(波0到波5)的实例,且图4b说明内核34b包含四个波前(波0到波3)的实例。在此实例中,将用于内核34a的波0到波5的波前的数据和用于内核34b的波0到波3的波前的数据说明为概念性地存储于gprf32的一或多个gpr中。如所说明,用于内核34a的波前中的每一个的所有数据可存储于gprf32的gpr中,且对于内核34b的波前中的每一个同样如此。

然而,如果内核34a和34b将同时执行,那么可存在是否只使用静态分配的问题。举例来说,如在图4c中所说明,内核34a的波前1、3和5已结束执行;然而,内核34b不能开始执行,因为不存在邻接的可用于内核34b的波前的执行的存储器位置的集合(例如,归因于碎片化)。这导致斜降/斜升处罚,因为除非溢出分配给内核34a的所有存储器位置(同时,只假定静态分配,且不动态分配),否则直到内核34a已完成执行,内核34b才能执行。

图5是说明在一或多个gpr中存储数据的实例的概念图。在图5中说明的实例中,gprf32的一或多个gpr包含两个部分:静态区域(部分)和动态分配的部分。静态部分包含静态存储器位置的集区,且动态部分包含动态存储器位置的集区。在静态部分中,对内核34a和34b的每一波前分配相同量的的存储器位置(例如,均等划分)。举例来说,用于内核34a的波前0到5和内核34b的波前0到3的静态占据面积(sfp)相同。然而,在本发明中描述的技术中,波前有可能需要的任何额外存储器位置在动态存储器位置中都可得到。举例来说,内核34a的波前5包含动态占据面积(dfp),且内核34b的波前1和3包含dfp。

以此方式,对第一指令集分配来自静态存储器位置的集区的静态存储器位置的集合和来自动态存储器位置的集区的动态存储器位置的集合。作为实例,对内核34a的波前5和内核34b的波前1和3分配静态存储器位置和动态存储器位置。通过静态和动态存储器位置两者的指派,gpu14可在内核34a与34b之间切换而无斜降/斜升处罚,且甚至可同时运行。举例来说,如果波前中的一个需要额外存储器位置,那么控制单元36、调度器33和/或编译器24可分配动态存储器位置。举例来说,可对内核34a的波前5分配一动态存储器位置,所述动态存储器位置随后即使在内核34a尚未完成执行(例如,尚未达到其使用期限的结尾)的情况下也仍会分配给另一波前。

图6是说明碎片整理的实例的概念图。以上实例描述上下文切换和公平调度;然而,所述技术不受如此限制。所述技术还可用以改善动态区域管理和碎片整理。举例来说,可将不同于凸块分配的技术用于动态区域管理。但,在任何此类技术中,存储gprf32的一或多个gpr的数据的存储器位置(例如,活动存储器位置或寄存器)可变得碎片化。举例来说,可邻接地分配存储器位置,且如果波前中的一个结束得比其它波前早,那么可存在在gprf32中的存储器位置中的间隙。当存储器位置不再邻接时,gprf32的一或多个gpr可被视为被碎片化。

因为分配了邻接存储器位置,所以在多个内核的执行过程中,动态部分可变为碎片且不可用。调度器33或控制单元36可检测动态部分已变得碎片化,且对gprf32的一或多个gpr碎片整理。

举例来说,调度器33或控制单元36可使处理元件40停止所有波前的处理,将分配的区域内的所有活动存储器位置的数据复制到保留存储器区域(即,另一存储器单元),将数据压缩地复制回到动态部分(例如,动态存储器位置)内使得邻接地存储数据,针对所有受影响的波前更新动态部分中的指标,和恢复所有波前的处理。以此方式,调度器33可确定动态部分中的动态存储器位置的集区的碎片化,且响应于确定碎片化压缩存储于动态存储器位置中的数据。

举例来说,在图6中,只有gprf32的动态部分被说明且需要碎片整理。举例来说,不再将用于内核c的波前3、内核a的波前3、内核d的波前3和内核c的波前2的数据邻接地存储于动态部分中。调度器33可检测此碎片化且执行碎片整理过程。举例来说,在图6中,gpu14(例如,控制单元36和调度器33)可将波前的数据存储到芯片外中间结果暂存器(例如,dram),且在dram中的邻接存储器位置中。接着,调度器33可使控制单元36将波前的数据邻接地(即,压缩地)存储在gprf32的一或多个gpr中。举例来说,在碎片整理后,将用于内核c的波前3、内核a的波前3、内核d的波前3和内核c的波前2的数据邻接地存储于gprf32的动态部分中。

图7是说明碎片整理的另一实例的概念图。在图7中说明的实例中,出于类似于如上关于图6描述的原因的原因,gprf32可变得被碎片整理。然而,不同于图6中说明的实例,不写入存储于gprf32的动态部分中的数据,控制单元36可将波前的数据存储于gprf32的gpr内以压缩存储。

举例来说,在图7中,gprf32的动态分配的区域包含用于内核c的波前3、内核d的波前3和内核c的波前2的数据,且并不邻接地存储这数据。在此实例中,调度器33可使控制单元36将用于内核d的波前3的数据存储于位置与存储用于内核c的波前2的数据的gpr邻接在一起的gpr中。接着,调度器33可使控制单元36将用于内核c的波前3的数据存储于位置与现在存储用于内核d的波前3的数据的gpr邻接在一起的gpr中。以此方式,在碎片整理后,将用于内核c的波前3、内核d的波前3和内核c的波前2的数据邻接地存储于gprf32的动态部分中。

在图7中说明的实例中,为了碎片整理,不需要到系统存储器16(芯片外存储器)的往返,且控制单元36可存储来自不邻接gprf32的gpr的未占据的间隙的gprf32的gpr的数据,使得压缩地(例如,邻接地)存储数据。通过避免存取芯片外存储器,如与图6中的实例相比,图7中说明的碎片整理实例可减少功耗。举例来说,存取芯片外存储器通常需要大约比在内部将数据复制到gpu14高一个量值或两倍的功率。并且,存取芯片外存储器需要调度和解决总线带宽限制。通过碎片整理,在不需要对芯片外存储器的存取的情况下,此调度和带宽限制,这进一步促进碎片整理性能。

图8是说明根据本发明的实例技术的流程图。在图8中,gpu14的一或多个核心28的一或多个处理元件40执行第一指令集(100)。

gpu14的控制单元36或调度器33可确定对待在gpu14上执行的第二指令集给予比在gpu14上执行的第一指令集高的优先权(102)。举例来说,针对上下文切换,第一指令集与第二指令集是针对不同程序,且调度器33可从处理器12接收指示gpu14执行第二指令集而非第一指令集的命令。

作为另一实例,针对公平调度,第一和第二指令集可为用于同一程序且可能用于同一波前的指令。在此类实例中,控制单元36或调度器33可确定第一指令集的多个指令已完成到块点(例如,同步点)的执行,且尚未完成全部执行,并且响应于确定第一指令集的多个指令已完成到块点的执行,应在执行第一指令集的剩余指令前执行第二指令集的多个指令。

控制单元36可响应于确定对第二指令集给予较高优先权而将存储于分配给第一指令集的一或多个gpr的存储器位置的子集而非全部中的数据复制到另一存储器单元(104)。所述一或多个gpr包含可只由上面执行第一和第二指令集的gpu14的一或多个核心28存取的一或多个存储器位置。

举例来说,控制单元36可在确定对待在gpu14上执行的第二指令集给予较高优先权前从用于第一指令集的一或多个gpr(例如,gprf32的静态gpr)中的静态存储器位置的集区接收分配静态存储器位置的集合的信息。所述静态存储器位置的集合包含贯穿第一指令集的执行(例如,贯穿第一指令集的使用期限)只分配给第一指令集的一或多个gpr中的存储器位置。控制单元36可在确定对待在gpu14上执行的第二指令集给予较高优先权前确定来自用于第一指令集的一或多个gpr(例如,gprf32的动态gpr)中的动态存储器位置的集区的动态存储器位置的集合。所述动态存储器位置的集合中的动态存储器位置中的至少一个包含在第一指令集的执行期间分配给第一指令集且接着分配给一或多个其它指令集的存储器位置。

在此类实例中,为了复制存储于一或多个gpr的存储器位置的子集而非全部中的数据,控制单元36被配置以将存储于分配给第一指令集的一或多个gpr(例如,gprf32的动态gpr)中的动态存储器位置中的一或多个中的数据复制到其它存储器单元。控制单元36还可避免将存储于分配给第一指令集的一或多个gpr(例如,gprf32的静态gpr)中的静态存储器位置中的任一个中的数据复制到任一其它存储器单元。

一或多个处理元件40可在复制后利用分配给第一指令集的一或多个gpr的存储器位置的子集执行第二指令集(106)。举例来说,调度器33可将分配给第一指令集的一或多个gpr(例如,gprf32的动态gpr)中的一或多个动态存储器位置分配给第二指令集,且处理元件40可利用在分配给第二指令集的一或多个gpr中的一或多个动态存储器位置执行第二指令集。并且,为了确定动态存储器位置的集合,调度器33或控制单元36可在第一指令集的执行期间从编译器24接收对一或多个gpr中的存储器位置的请求。响应于接收到请求,调度器33或控制单元36可确定动态存储器位置的集合。

在一或多个实例中,所描述的功能可用硬件、软件、固件或其任何组合来实施。如果以软件实施,那么所述功能可作为一或多个指令或代码在计算机可读媒体上存储或发射,并且由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体,其对应于例如数据存储媒体的有形媒体。以此方式,计算机可读媒体通常可以对应于非暂时性的有形的计算机可读存储媒体。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本发明中描述的技术的指令、代码和/或数据结构的任何可用媒体。计算机程序产品可以包含计算机可读媒体。

借助于实例而非限制,此类计算机可读存储媒体可包括ram、rom、eeprom、cd-rom或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器,或可用以存储呈指令或数据结构形式的所要程序代码且可由计算机存取的任何其它媒体。应理解,计算机可读存储媒体和数据存储媒体并不包括载波、信号或其它暂时性媒体,而是取而代之针对非暂时性有形存储媒体。如本文中所使用,磁盘和光盘包含压缩光盘(cd)、激光光盘、光学光盘、数字多功能光盘(dvd)、软性磁盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘用激光以光学方式再现数据。以上各项的组合也应包含在计算机可读媒体的范围内。

指令可以由一或多个处理器执行,所述一或多个处理器例如是一或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)或其它等效的集成或离散逻辑电路。因此,如本文中所使用的术语“处理器”可指前述结构或适合于实施本文中所描述的技术的任一其它结构中的任一个。此外,在一些方面,本文中所描述的功能性可在经配置以用于编码和解码的专用硬件和/或软件模块内提供,或并入在组合编解码器中。而且,所述技术可完全实施于一或多个电路或逻辑元件中。

本发明的技术可实施于广泛多种装置或设备中,包含无线手机、集成电路(ic)或ic的集合(例如,芯片组)。本发明中描述各种组件、模块或单元以强调被配置以执行所揭示的技术的装置的功能方面,但未必需要由不同硬件单元实现。相反地,如上所述,各种单元可与合适的软件和/或固件一起组合在编解码器硬件单元中,或由互操作硬件单元的集合来提供,所述硬件单元包含如上所述的一或多个处理器。

已描述了各种实例。这些和其它实例在以下权利要求书的范围内。

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