CN106462941A - Gpu中的共享寄存器的加载方案 - Google Patents
Gpu中的共享寄存器的加载方案 Download PDFInfo
- Publication number
- CN106462941A CN106462941A CN201580034321.6A CN201580034321A CN106462941A CN 106462941 A CN106462941 A CN 106462941A CN 201580034321 A CN201580034321 A CN 201580034321A CN 106462941 A CN106462941 A CN 106462941A
- Authority
- CN
- China
- Prior art keywords
- data
- variable
- graphics item
- sgpr
- graphics
- 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/60—Memory management
-
- 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
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/363—Graphics controllers
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2352/00—Parallel handling of streams of display data
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2360/00—Aspects of the architecture of display systems
- G09G2360/06—Use of more than one graphics processor to process data before displaying to one or more screens
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- Image Generation (AREA)
Abstract
本发明描述用于确定用于多个图形项目中的每一者的变量的数据是否相同的技术。如果确定所述数据是相同的,则所述技术在与所述变量相关联的专用共享通用寄存器的存储位置中存储所述数据。
Description
技术领域
本发明涉及数据存储,并且更具体地说涉及寄存器中的数据存储技术。
背景技术
处理单元,例如图形处理单元(GPU),包含处理元件和通用寄存器(GPR),其存储用于执行指令的数据。在一些实例中,处理元件执行用于处理一项数据的指令,并且相应的处理元件在GPR中存储这项数据或者来自处理的所述项的所得数据。一项数据可以是发生处理的基本单位。举例来说,在图形处理中,图元的顶点是项目的一个实例,并且像素是项目的另一实例。存在与每个顶点和像素相关联的图形数据(例如坐标、色彩值等)。
处理元件的处理器核心内可存在多个处理元件,从而允许指令的并行执行(例如,多个处理元件在同一时间执行相同指令)。在一些情况下,所述处理元件中的每一个在GPR中存储项目的数据,并且从GPR读取项目的数据,即使对于多个项目所述数据是相同的也是如此。
发明内容
总的来说,本发明描述用于在图形处理单元(GPU)的共享通用寄存器(SGPR)中存储统一数据的技术。处理核心的每个处理单元可以读取或写入项目(也称为纤维)的数据,项目是发生处理的基本单位。每个项目可以与多个变量相关联,并且项目的这些变量一起形成纤维的数据。
在一些实例中,被称作波的多个项目可能具有对于波中的项目中的每一者相同的一些数据。本发明中描述的技术可以确定波中的项目的至少一些数据是否相同。在此些情况下,处理核心可以在SGPR中存储对于波中的所有项目相同的数据,并且在处理核心上执行的指令可以从SGPR读取数据。以此方式,所述技术不是向GPR读取和写入项目中的每一者的数据,而是可以从SGPR读取和写入数据,这样可以减少存取GPR的次数并且由此减少电力消耗。
在一个实例中,本发明描述一种存储数据的方法,所述方法包括:确定用于多个图形项目的变量的数据是否相同,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用图形处理单元(GPU)的着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的共享通用寄存器(SGPR)的存储位置中存储所述数据;以及如果所述多个图形项目中的至少两个的所述变量的所述数据不相同,则在与所述SGPR分开的通用寄存器(GPR)的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据。
在一个实例中,本发明描述一种用于处理数据的装置,所述装置包括图形处理单元(GPU),所述GPU包括着色器核心,所述着色器核心包括控制单元、多个处理元件、共享通用寄存器(SGPR)和通用寄存器(GPR),其中所述控制单元经配置以确定用于多个图形项目的变量的数据是否相同,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用所述GPU的所述着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的所述SGPR的存储位置中存储所述数据;以及如果所述多个图形项目中的至少两个的所述变量的所述数据不是相同的,则在与所述SGPR分开的所述GPR的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据。
在一个实例中,本发明描述一种包括着色器核心的图形处理单元(GPU),所述着色器核心包括:多个处理元件;共享通用寄存器(SGPR);与所述SGPR分开的通用寄存器GPR;以及控制单元,其经配置以:确定用于多个图形项目的变量的数据是否相同,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用所述GPU的所述着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的所述SGPR的存储位置中存储所述数据;以及如果所述多个图形项目中的至少两个的所述变量的所述数据不是相同的,则在与所述SGPR分开的所述GPR的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据。
在一个实例中,本发明描述一种具有存储于其上的指令的计算机可读存储媒体,所述指令在执行时致使一或多个处理器:确定用于多个图形项目的变量的数据是否相同,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用图形处理单元(GPU)的着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的共享通用寄存器(SGPR)的存储位置中存储所述数据;以及如果所述多个图形项目中的至少两个的所述变量的所述数据并不相同,则在与所述SGPR分开的通用寄存器(GPR)的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据。
在一个实例中,本发明描述一种用于处理数据的装置,所述装置包括图形处理单元(GPU),所述GPU包括着色器核心,所述着色器核心包括控制单元、多个处理元件、共享通用寄存器(SGPR)和通用寄存器(GPR),其中所述控制单元包括:用于确定用于多个图形项目的变量的数据是否相同的装置,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用所述GPU的所述着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;用于如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的所述SGPR的存储位置中存储所述数据的装置;以及用于如果所述多个图形项目中的至少两个的所述变量的所述数据不是相同的,则在与所述SGPR分开的所述GPR的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据的装置。
附图和以下描述中阐明一或多个实例的细节。其它特征、目标和优点将从所述描述、图式以及权利要求书而显而易见。
附图说明
图1是说明根据本发明中所描述的一或多个实例技术的用于处理数据的实例装置的框图。
图2是说明GPU的着色器核心的通用寄存器(GPR)中的数据存储实例的概念图。
图3是更详细地说明图1中所说明的装置的组件的框图。
图4是更详细地说明图3的GPU的着色器核心的一个实例的框图。
图5A和5B是说明根据本发明中描述的技术的数据存储的实例的概念图。
图6是说明存储数据的实例技术的流程图。
具体实施方式
并行处理单元,例如经配置以并行执行许多操作(例如在同一时间)的图形处理单元(GPU)包含一或多个处理器核心(例如用于GPU的着色器核心),其执行一或多个程序的指令。为易于描述,相对于GPU或通用GPU(GPGPU)描述本发明中描述的技术。然而,本发明中描述的技术可以扩展到未必是GPU或GPGPU的并行处理单元,以及非并行处理单元(例如未具体配置成用于并行处理的并行处理单元)。
可以用单指令、多数据(SIMD)结构设计GPU。在SIMD结构中,着色器核心包含多个SIMD处理元件,其中每个SIMD处理元件执行相同程序的指令,但是对不同数据执行指令。在特定SIMD处理元件上执行的特定指令被称作线程。每个SIMD处理元件可以被认为是执行不同线程,因为用于给定线程的数据可能是不同的;然而,在一个处理元件上执行的线程是与在其它处理元件上执行的指令相同的程序的相同指令。以此方式,SIMD结构允许GPU并行执行许多任务(例如在同一时间)。
在SIMD结构中,着色器核心使用由单个指令限定的相同操作同时处理多个纤维。纤维是指对其发生处理的基本项目。举例来说,对于在着色器核心上执行的顶点着色器,纤维将是顶点。对于在着色器核心上执行的像素或片段着色器,纤维将是像素。
SIMD处理的一部分包含读取和写入处理多个纤维所需的数据。处理多个纤维所需的数据的一个实例是纤维的属性数据(例如顶点的属性数据或像素的属性数据)。为了便于说明,相对于属性数据描述所述技术,但是所述技术不受如此限制。所述技术可以扩展到各种其它数据类型,并且总体上扩展到处理纤维所需的数据。这个数据还可包含处理纤维所需的值,例如计数器值或其它类型的值。
举例来说,为了处理纤维,着色器核心可以处理与所述纤维相关联的多个变量。与纤维相关联的变量的一个实例是与纤维相关联的属性。变量的数据的一个实例是属性的属性数据。
在一些着色器核心设计中,着色器核心一次又一次地读取对于大多数纤维相同的数据(即,统一数据)。举例来说,需要对于纤维读取的一或多个变量的数据(例如一或多个属性的属性数据)是不相异的。着色器核心接着在通用寄存器(GPR)内的指派给所述纤维的存储位置中存储这个数据,其中GPR位于所述着色器核心内。
作为一个实例,每个纤维与多个属性数据相关联。对于顶点或像素,所述属性数据包含坐标、色彩数据、不透明度等以作为几个实例。然而,还存在处理所述纤维所需的其它类型的数据,并且所述技术适用于这样的数据类型。虽然可能并不是所有属性数据对于多个顶点或像素都是相同的,但是在一些情况下,一些属性数据可能对于所述多个顶点或像素是相同的。对于所述多个顶点或像素相同的数据(例如在这个实例中是属性数据)被称作统一数据。对于顶点或像素中的至少两个不同的数据被称作相异数据(即,用于一个顶点的数据不同于用于至少一个其它顶点的数据)。
本发明中描述的技术并非一次又一次地读取统一数据以存储在GPR中并且针对统一数据反复地读取GPR,而是确定有待对于多个纤维(多个纤维被称作波)读取的数据是否为不相异的。如果有待对于波读取的数据是不相异的,则本发明中描述的技术读取统一数据一次(例如单个时间)以用于存储在专用共享通用寄存器(SGPR)中。着色器核心接着从SGPR读取统一数据而非反复地存取GPR。在如下意义上,SGPR是共享GPR:SGPR存储对于波的所有纤维所需的数据(例如存储波的所有纤维共享的属性数据)。
形成波的纤维的数目可以随着着色器核心的并行处理能力变化。举例来说,如果着色器核心经配置以同时处理三十二个纤维(仅作为一个实例),于是波中的纤维数目等于三十二。
可存在多种方式确定纤维的一些数据是否在整个波上是统一的。作为一个实例,在处理器上执行的编译程序可以确定着色器程序的特定指令是否将需要存取波的统一数据(例如对于波中的纤维相同的属性)。在这种情况下,编译程序可以对指示统一数据存取的指令进行编码。GPU的硬件可以读取这个指令,并且在SGPR中存储用于波的统一数据(例如在SGPR中存储对于波的所有纤维相同的属性数据)。
编译程序可能不是总能确定对于特定指令的整个波数据存取是否统一。然而,编译程序可能能够确定特定指令需要在整个波上存取统一数据的可能性。在这些实例中,编译程序可以对识别特定指令以作为使用SGPR的候选指令的指令进行编码。对于所述识别的指令,GPU的硬件可以确定有待对于波的纤维的数据存取的存储器地址是否相同。如果存储器地址是相同的,则硬件可以将SGPR旗标值设置成1,检索所述数据一次,并且将统一数据存储在SGPR中。当需要所述数据进行处理时,硬件可以读取旗标值并且确定是否应当从SGPR或GPR读取数据。
以此方式,本发明中描述的技术可以减少需要存取GPR的次数。这样又能提高电力和处理效率。举例来说,GPR可以是存储对于多个不同纤维所需的所有变量(例如属性)的数据(例如值)的相对大的存储器存储单元。另一方面,一个SGPR可以存储对于纤维波相同的单个变量(例如单个属性)的数据。因此,SGPR的大小可能小于GPR。在一些情况下,存取SGPR需要的电力可能比存取GPR少。通过改为存取SGPR而减少需要存取GPR的次数,借此所述技术可以减少GPU消耗的电力量。
如上文所述,纤维是指发生处理的基本单位。为了避免混淆,本发明将纤维称为图形项目以指示GPU执行处理的基本项目。因此,多个图形项目可以形成图形波。然而,在一些实例中,GPU可能未必执行图形操作。对于这样的情况,图形项目这个术语的意思是指GPU执行处理的基本单位,即使此图形项目并不用于图形处理也是如此。换句话说,图形项目是GPU执行处理的基本单位,并且图形项目的实例包含用于图形相关处理或用于非图形相关处理的项目。
图1是说明根据本发明中所描述的一或多个实例技术的用于处理数据的实例装置的框图。图1说明装置10,装置10的实例包含(但不限于)例如媒体播放器、机顶盒、例如移动电话等无线手持机、个人数字助理(PDA)、桌上型计算机、膝上型计算机、游戏控制台、视频会议单元、平板计算装置等等视频装置。
在图1的实例中,装置10包含处理器12、图形处理单元(GPU)14和系统存储器16。在一些实例中,例如装置10是移动装置的实例,处理器12和GPU 14可以形成为集成电路(IC)。举例来说,IC可以被认为是芯片封装内的处理芯片,例如片上系统(SoC)。在一些实例中,处理器12和GPU 14可以收容在不同集成电路(即,不同芯片封装)中,例如装置10是桌上型或膝上型计算机的实例。然而,在装置10是移动装置的实例中,或许有可能处理器12和GPU 14收容在不同集成电路中。
处理器12和GPU 14的实例包含(但不限于)一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效的集成或离散逻辑电路。处理器12可以是装置10的中央处理单元(CPU)。在一些实例中,GPU 14可以是专用硬件,其包含集成和/或离散逻辑电路,所述集成和/或离散逻辑电路向GPU 14提供适合于图形处理的大规模并行处理能力。在一些情况下,GPU 14还可包含通用处理能力,且在实施通用处理任务(即,非图形相关任务)时可被称为通用GPU(GPGPU)。
出于说明的目的,使用GPU 14描述本发明中描述的技术。然而,本发明中描述的技术不受如此限制。本发明中描述的技术可以扩展到其它类型的并行处理单元(例如提供大规模并行处理能力的处理单元,即使不是用于图形处理)。并且,本发明中描述的技术可以扩展到未被具体配置成用于并行处理的处理单元。
处理器12可以执行各种类型的应用程序。应用程序的实例包含网络浏览器、电子邮件应用程序、电子数据表、视频游戏或产生可视对象以供显示的其它应用程序。系统存储器16可以存储用于执行一或多个应用程序的指令。在处理器12上执行应用程序使得处理器12产生用于有待显示的图像内容的图形数据。处理器12可以向GPU 14传输图像内容的图形数据以供进一步处理。
作为一实例,在处理器12上执行应用程序使得处理器12产生图元的顶点,其中相应顶点处的图元的相互连接形成图形对象。在这个实例中,处理器12产生的图形数据是用于所述顶点的属性的属性数据。举例来说,在处理器12上执行的应用程序可以生成顶点的色彩值、不透明度值、坐标等,这些全都是顶点的属性的实例。还可存在额外属性,并且在一些实例中,应用程序无需产生全部实例属性。总的来说,所述技术可以扩展到属性数据之外的数据类型(例如计数器),并且所述技术不应当被视为限于属性数据或限于例如色彩值、不透明度值、坐标等属性数据的实例。
在一些非图形相关实例中,处理器12可以生成更适合于通过GPU 14处理的数据。此些数据无需用于图形或显示目的。举例来说,处理器12可以输出需要通过GPU 14对其执行矩阵运算的数据,并且GPU 14又可以执行矩阵运算。
总的来说,处理器12可以将处理任务卸载给GPU 14,例如需要大规模平行操作的任务。作为一个实例,图形处理需要大规模平行操作,并且处理器12可以将此些图形处理任务卸载给GPU 14。然而,例如矩阵运算的其它操作也可以得益于GPU 14的并行处理能力。在这些实例中,处理器12可以充分利用GPU 14的并行处理能力以使GPU 14执行非图形相关操作。
处理器12可与符合特定应用处理接口(API)的GPU 14通信。此些API的实例包含的API、克罗诺斯(Khronos)小组的或OpenGL以及OpenCLTM;然而,本发明的各方面不限于DirectX、OpenGL或OpenCL API,且可扩展到其它类型的API。此外,本发明中描述的技术不需要根据API作用,且处理器12和GPU 14可利用任何通信技术。
装置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可包含调制器、解调器、放大器和用于有线或无线通信的其它此类电路。
系统存储器16可被视为装置10的存储器。系统存储器16可包括一或多个计算机可读存储媒体。系统存储器16的实例包含(但不限于)随机存取存储器(RAM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器或可用于携载或存储呈指令和/或数据结构形式的所要程序代码且可通过计算机或处理器存取的其它媒体。
在一些方面,系统存储器16可以包含使处理器12和/或GPU 14执行本发明中归属于处理器12和GPU 14的功能的指令。因此,系统存储器16可以是上面存储有指令的计算机可读存储媒体,所述指令当经执行时使一或多个处理器(例如处理器12和GPU 14)执行各种功能。
在一些实例中,系统存储器16可以是非暂时性存储媒体。术语“非暂时性”可指示存储媒体未体现于载波或传播信号中。然而,术语“非暂时性”不应解释为意味着系统存储器16为非可移动的或其内容为静态的。作为一个实例,可从装置10移除系统存储器16,及将所述系统存储器移动到另一装置。作为另一实例,大体类似于系统存储器16的存储器可以插入到装置10中。在某些实例中,非暂时性存储媒体可以(例如在RAM中)存储数据,所述数据可以随时间改变。
举例来说,如在本发明中的其它地方更详细描述的,系统存储器16可以存储用于在处理器12上执行的实施本发明中所描述的一或多个实例的技术的编译程序的代码。系统存储器16还可存储用于在GPU 14的着色器核心上执行的着色器程序(例如顶点着色器、像素或片段着色器、计算着色器等)的代码。
举例来说,在处理器12上执行的编译程序可以确定用于多个图形项目的变量(例如用于属性的属性日期)的数据是否为相同的或者有可能是相同的。编译程序可以指示多个图形项目的数据是否相同或者有可能相同。GPU 14可以接收所述指示,并且GPU 14的着色器核心可以从专用共享通用寄存器(SGPR)而非着色器核心的GPR读取和写入对于多个图形项目相同的数据。
本发明中使用图形项目这个术语指代GPU 14执行并行处理的基本单位。GPU 14可以并行处理多个图形项目(例如在同一时间)。举例来说,顶点着色器可以处理顶点,并且GPU 14可以并行执行顶点着色器的多个实例以在同一时间处理多个顶点。类似地,像素或片段着色器可以处理显示器的像素,并且GPU 14可以并行执行像素着色器的多个实例以在同一时间处理显示器的多个像素。顶点和像素是图形项目的实例。
对于非图形相关应用,图形项目这个术语还指代GPU 14执行处理的最小单位。然而,这样的处理可能不是图形相关的。因此,术语“图形项目”的意思是指图形处理单元(例如GPU 14)或通用图形处理单元(例如其中GPU 14充当GPGPU的实例)将要并行处理的项目。图形项目可以用于图形或非图形用途。
在一些情况下,术语“纤维”是指GPU 14执行处理的基本单位。术语“纤维”与“图形项目”同义。GPU 14的大规模并行处理能力允许GPU 14在同一时间处理多个纤维。GPU 14在同一时间处理的多个纤维被称作波。在本发明中,“图形波”与纤维波同义。换句话说,多个图形项目形成图形波。
如上文所述,GPU 14提供大规模并行处理能力。GPU 14提供这样的并行处理能力的一种方式是经由单指令多数据(SIMD)结构。在SIMD结构中,GPU 14执行相同程序的多个实例。举例来说,图形处理和一些非图形相关处理需要执行相同操作,但是是对不同数据执行。
举例来说,GPU 14可以执行着色器程序(简单地称为着色器),其执行图形或非图形相关任务。GPU 14包含至少一个着色器核心,并且着色器程序在着色器核心上执行。为了描述简洁容易起见,描述GPU 14执行图形相关任务,但是可以类似地执行非图形相关任务。GPU 14可以执行着色器程序的多个实例以一次处理多个图形项目。着色器程序的一个实例是顶点着色器。GPU 14可以执行顶点着色器的多个实例以一次(例如并行)处理多个顶点。总的来说,对于一个顶点需要执行的操作与对于其它顶点需要执行的操作相同。
虽然对于所述顶点需要执行的操作是相同的,但是顶点中的每一个的一或多个属性数据可以是不同的。举例来说,每个图形项目(例如顶点或像素)与多个属性相关联。每个属性包含属性数据。作为一实例,显示器的图元或像素的顶点可以由坐标(例如x、y、z、w)限定。顶点和像素中的每一个还可由色彩(例如红色分量、绿色分量、蓝色分量(RGB))限定。还可存在用于每个顶点或像素的不透明度值(例如α值)。坐标、色彩和不透明度全都是图形项目(例如纤维)的属性的实例,并且可以存在比实例更多或更少的属性。
如上文所述,属性不应当被视为限于坐标、色彩和不透明度。提供坐标、色彩和不透明度只是为了帮助理解。然而,对于一些情况,图形项目的属性可以限于特定的数据类型(例如由于着色器程序的编程方式,或者由于GPU 14的设计方式)。
总的来说,每个图形项目可以与多个变量相关联,并且需要多个变量以处理图形项目中的每一个。多个变量的一个实例是与顶点或像素相关联的属性。对于每个变量,可存在限定所述变量的数据(例如值)。数据的一个实例是与每个属性相关联的属性数据。在这个实例中,需要与顶点或像素相关联的属性以处理顶点和像素中的每一个。为了处理所述属性,GPU 14处理所述属性的属性数据。
为易于描述,参看与处理顶点或像素所需的属性相关联的属性数据描述所述技术。然而,本发明中描述的技术总体上适用于与处理图形项目所需的变量相关联的数据,并且为了便于理解提供与顶点或像素的属性相关联的属性数据。
举例来说,顶点着色器的功能之一是将坐标与投影矩阵(PRJ)矩阵相乘。这个PRJ矩阵可以是顶点的属性的实例。对于图形对象中的许多顶点,PRJ矩阵可以是相同的。举例来说,色彩值和坐标可以是不同的,而PRJ矩阵可以是相同的。这个PRJ矩阵可以被认为是OpenGL顶点实例数据的实例。
在本发明中描述的技术中,GPU 14的着色器核心可经配置以确定用于一或多个属性的属性数据是否对于多个图形项目(例如图形波的图形项目)是相同的。如果属性数据是相同的,则GPU 14的着色器核心可以在GPU 14的着色器核心的处理元件共享的共享通用寄存器(SGPR)中存储属性数据,从而使得可以从SGPR而非处理元件的GPR读取属性数据。
举例来说,为了执行着色器程序的多个实例,GPU 14的着色器核心包含多个处理元件,并且每个处理元件可以执行着色器程序的一个实例的一个指令。举例来说,每个处理元件可以在同一时间执行着色器程序的第一指令。在这个意义上,每个处理元件可以被认为是执行着色器程序的线程,其中线程是给定图形项目的着色器程序的一个指令。
在一些实例中,通用寄存器(GPR)存储有待通过处理元件处理的图形项目的变量的数据。举例来说,每个处理元件可以执行指令以处理一个图形项目,并且GPR存储有待通过相应处理元件处理的图形项目的属性的属性数据。如更详细地描述,如果一个属性的属性数据对于图形波中的所有图形项目是相同的,并且属性数据存储于SGPR中,则可存在通过从SGPR而非GPR存取数据的计算和电力效率增益。为了帮助理解,以下描述GPR中的存储的实例。
图2是说明GPU的着色器核心的通用寄存器(GPR)中的数据存储实例的概念图。如图所示,GPU 14包含着色器核心24,并且着色器核心24包含GPR 26。虽然图2中未说明,但是着色器核心24包含多个处理元件,每个处理元件执行着色器程序的一个实例。
作为一实例,着色器核心24可以包含三十二个处理元件,并且每个处理元件可以执行着色器程序的一个实例以处理一个图形项目。GPR 26可以存储所述图形项目的数据。举例来说,GPR 26可以存储用于三十二个图形项目的九个属性的属性数据。然而,GPR 26可以存储用于三十二个图形项目的多于或少于九个属性的数据。并且,GPR 26可以存储与图形项目的属性无关联但是为处理图形项目所需的变量的数据的数据。
在图2中示出的实例中,将图形项目(例如纤维)识别为P0-P31,其可以是顶点。通过图形项目识别符之后的变量识别属性。举例来说,P0.X指代P0图形项目的x坐标,P0.Y指代P0图形项目的y坐标等等。P0.R、P0.G、P0.B和P0A分别指P0图形项目的红色分量、绿色分量、蓝色分量和不透明度。类似地识别其它图形项目(例如P1-P31)。
换句话说,在图2中,顶点P0-P31每个与多个变量相关联。作为一个实例,顶点P0-P31中的每一个与识别x坐标(P0.X到P31.X)的变量相关联。顶点P0-P31中的每一个与识别y坐标(P0.Y到P31Y)等等的变量相关联。处理所述多个图形项目中的每一个需要这些变量中的每一个。举例来说,处理顶点P0-P31中的每一个需要识别x坐标的变量。
也如图2中所图示的,图形项目中的每一个还包含PRJ属性。PRJ属性是在着色器核心24的处理元件上执行的顶点着色器可以利用的投影矩阵。在这个实例中,PRJ属性是处理顶点P0-P31中的每一个所需的另一变量。举例来说,顶点着色器可以将投影矩阵与相应坐标相乘(例如,将P0.PRJ与P0.X、P0.Y、P0.Z和P0.W相乘)。
在这个意义上,GPR 26可以被认为既深又宽。举例来说,GPR 26可以存储许多属性的属性数据(例如深),并且可以存储许多图形项目的属性日期(例如宽)。虽然具有深且宽的GPR可能是有益的,但是还可能有一些潜在的缺点。举例来说,对于大小较大的GPR,存取值(例如数据)所需的时间可能大于大小较小的GPR,从而在处理元件中产生额外数据读取管线(例如在读取数据时处理元件闲置)。并且,存取GPR需要处理元件并且因此需要GPU 14消耗电力,并且电力消耗量可以与GPR的大小成比例。
应理解,可存在GPU 14可以在其中存储数据(例如值)的各种单元。GPU 14可以在系统存储器16中存储数据,或者可以在本地存储器(例如高速缓冲存储器)中存储数据。着色器核心24的GPR 26不同于系统存储器16和GPU 14的本地存储器两者。举例来说,系统存储器16可能可通过装置10的各种组件存取,并且这些组件使用系统存储器16存储数据。GPU14的本地存储器可能可通过GPU 14的各种组件存取,并且这些组件使用GPU 14的本地存储器存储数据。然而,GPR 26可能只可通过着色器核心24的组件存取,或者可以仅仅存储用于着色器核心24的处理元件的数据。
举例来说,GPU 14的本地高速缓冲存储器可能需要GPU 14确定高速缓存命中,并且高速缓冲存储器可以以各种方式与系统存储器16相关联。这样可能需要GPU 14执行各种高速缓存命中/未中测试,使用标签维护地址,以及对于高速缓冲存储器的各种其它存储管理任务。另一方面,GPR 26可以在着色器核心24本地、在着色器核心24内并且专用于着色器核心24,并且可能不像本地高速缓冲存储器或系统存储器16那样需要特殊存储器管理。
在一些情况下,存储于GPR 26中的用于图形项目的一或多个属性的属性数据可以是相同的。举例来说,图形项目P0-P31中的每一个可以被认为是纤维,并且图形项目P0-P31可以被认为是波(也称为图形波)。在一些实例中,图形波中的一或多个属性的属性数据可以是相同的。
举例来说,图形项目P0-P31可以是顶点,并且可以形成三十二个顶点的顶点波。在一些情况下,投影矩阵(PRJ矩阵)可以对于所有三十二个顶点是相同的。作为一实例,在处理器12上执行的应用程序可以确定GPU 14应当渲染转动90°的碗,从而使得碗的敞开的侧面面对观察者。在这个实例中,碗内部的许多顶点的投影可能是相同的,但是边缘上(例如,靠近碗的轮缘或在碗的轮缘上)的一些顶点的投影可能是不同的。在这个实例中,如果图形项目P0-P31在碗内部,则P0-P31的PRJ矩阵是相同的(例如P0.PRJ与P1.PRJ-P31.PRJ相同)。
在一些技术中,不管用于属性的属性数据是否在整个图形波上都是相同的,着色器核心24都请求属性数据并且在GPR 26中存储属性数据。举例来说,着色器核心24执行逐个图形项目地检索属性数据以供存储在GPR 26中的指令。着色器核心24可以串行地发出每个图形项目(例如每个纤维)的属性数据的存储器请求,并且逐个图形项目(例如逐个纤维)地将属性数据存储到GPR 26中。然而,对于SIMD结构,例如着色器核心24的SIMD结构,GPR26在每个图形项目(例如每个纤维)中每个波地存储统一数据(例如存储对于图形波的图形项目相同的属性数据)可能不是电力高效的。
举例来说,对于P0.PRJ到P31.PRJ属性数据,在一些技术中,着色器核心24可以对于P0.PRJ到P31.PRJ串行地发出存储器请求。作为一实例,着色器核心24外部的存储器存储单元可以存储投影矩阵。着色器核心24外部的这个存储器存储单元可以是GPU14的本地存储器或甚至系统存储器16。着色器核心24可以向这个存储器存储单元发出存储器请求以供每个图形项目P0-P31接收每个图形项目P0-P31的投影矩阵。
举例来说,着色器核心24执行第一指令以基于存储图形项目P0的投影矩阵的存储器地址请求图形项目P0的投影矩阵。着色器核心24执行第二指令以基于存储图形项目P1的投影矩阵的存储器地址请求图形项目P1的投影矩阵,以此类推。如果投影矩阵对于图形项目P0-P31是相同的,则请求图形项目P0-P31中的每一个的投影矩阵的相应指令中的存储器地址很可能是相同的。
着色器核心24接着可接收P0.PRJ到P31.PRJ属性数据中的每一个并且在GPR 26中存储P0.PRJ到P31.PRJ属性数据,如图2中所示。在这个实例中,PRJ矩阵可以被认为是恒定负载((例如),对于图形波的图形项目统一的数据)。在许多情况下,恒定缓冲器负载((例如),用于将属性数据加载到GPR 26中)的恒定负载是不相异的(例如P0.PRJ到P31.PRJ是统一的,意思是相同的)。然而,尽管如此,着色器核心24可以多次请求和读取投影矩阵,并且在GPR 26中存储与P0.PRJ到P31.PRJ相同的投影矩阵。
根据本发明中描述的技术,GPU 14可经配置以确定图形波中的图形项目的一或多个变量的数据是否对于整个图形波是统一的。在这些实例中,GPU 14不是在GPR 26中存储一或多个变量的统一数据,而是可以在专用共享GPR(SGPR)中存储统一数据。
举例来说,着色器核心24可以包含SGPR。SGPR可以包含多个存储位置,其中每个存储位置与图形项目的多个属性中的一个属性相关联。举例来说,如图2中所示,每个图形项目P0-P31包含九个属性(PRJ、x、y、z、w、R、G、B和A)。在这个实例中,SGPR可以包含九个存储位置,其中SGPR的第一位置与PRJ属性相关联,SGPR的第二位置与x坐标相关联,以此类推。
作为示意性实例,对于P0.PRJ到P31.PRJ,SGPR的第一存储位置可以与GPR 26的前两行相关联。对于P0.X到P31.X,SGPR的第二存储位置可以与GPR 26的接下来的两行相关联,以此类推。应理解,与GPR 26的两行的前两组相关联的SGPR的前两个存储位置是出于说明的目的提供的,并且不应被视为具限制性。
在一些实例中,SGPR的第一存储位置可以与GPR 26的两行的第N分组相关联。作为另一实例,图形波中不是三十二个图形项目,而是在图形波中可存在仅仅十六个图形项目(例如纤维P0-P15并行处理,并且纤维16-31不与P0-P15并行处理)。在这个实例中,SGPR的第一存储位置可以与GPR 26的第一行相关联,以此类推;然而,与之前一样,SGPR中的任何存储位置都可以与属性的任何分组相关联。换句话说,SGPR中的一个存储位置与图形波中的图形项目的一个变量相关联。
以此方式,SGPR可能小于GPR。举例来说,SGPR可以与GPR一样深,但是可能不是一样宽。在以上实例中,SGPR包含属性中的每一个的存储位置,并且因此SGPR可以与GPR一样深。然而,SGPR的每个行可经配置以存储一个属性的仅仅一个属性数据。举例来说,在图2中,GPR 26的两行可以存储至多三十二个x坐标(例如每个波的三十二个标量数据),如果每个x坐标需要八个位,则GPR 26的所述两行存储256个位(8*32),或者每个行存储128个位。如果x坐标对于图形项目P0-P31中的每一个是相同的,则SGPR可以存储单个8位值。因此,在GPR 26的每个行可以是128位宽的情况下,SGPR的每个行可以仅仅8位宽。
如上文所述,如果图形波中的图形项目的变量的数据是统一的,则GPU 14在SGPR中存储数据。举例来说,假设PRJ矩阵对于图形波是相同的。在这个实例中,如果多个图形项目的属性的属性数据是相同的,则GPU 14的着色器核心可以在与属性(例如PRJ)相关联的SGPR的存储位置中存储属性数据(例如PRJ矩阵)。在一些实例中,或许有可能GPU 14在SGPR中并且在GPR 26中存储统一属性数据。当GPU 14需要读取属性数据时,GPU 14可以从SGPR而非GPR读取属性数据(例如PRJ矩阵)。
上文描述了PRJ矩阵可以存储于SGPR中的实例。PRJ矩阵总体上与图形功能相关联。然而,本发明中描述的技术不因此仅限于图形功能。
举例来说,在一些实例中,所述技术还可能可用于每个工作组(WG)OpenCL恒定数据,例如工作组识别符(WG ID)。举例来说,在OpenCL中,在GPU 14上执行的程序被称作内核,并且内核可以拆分成多个工作组,其中一个工作组对于GPU的着色器核心的每个处理元件同时执行(下面更详细描述),如由WG ID指示。内核可以使用WG ID计算每个工作项ID和地址以用于负载/存储工作项所需的数据。WG ID可以对于工作组中的所有工作项是恒定的(例如统一或相同)。在一些实例中,WG ID可以加载到SGPR中以节省GPR文件占用空间并且节省存取电力。
此外,本发明中描述的技术可以扩展成用于存储PRJ矩阵之外的图形应用程序的目的。举例来说,本发明中描述的技术可以扩展成用于加载图形实例识别符(ID)和实例数据。举例来说,在OpenGL中,drawInstancePrimitives函数当执行时可以拆分成多个实例(例如如图3中描述的编译程序可以将这个函数拆分成多个实例)。对于drawInstancePrimitives的每一实例,存在实例中的所有对象共用的(例如相同或统一的)的实例ID和一些属性数据(例如可能是多种顶点属性数据类型)。顶点着色器可以应用这些共用属性和实例ID,并因此或许有可能在SGPR中而非GPR中存储这些共用属性和实例ID,以实现电力节省以及存储于GPR中的数据量的减少。
以此方式,对于SGPR,所述技术可以减少需要存取GPR 26以向其写入数据和从其读取数据的次数。相反,当可用时,所述技术可以从SGPR读取图形波的统一数据。由于SGPR的大小较小,所以存取SGPR需要的电力可能少于存取GPR 26。并且,因为GPU 14可以在图形波中的图形项目的变量的数据被请求时确定所述数据是否统一(例如相同),所以所述技术可以减少需要执行加载指令(例如检索属性数据的指令)的次数。
举例来说,本发明中描述的技术通过将对于统一数据的逐个纤维的存取减少成对于统一数据的逐个波的存取,借此促成电力节省。并且,本发明中描述的技术通过如下方式促成性能增强:减少冗余的逐个纤维的恒定加载指令(例如减少对于统一数据的加载指令)处理,并且减少浪费在对于整个图形波相同的数据的反复存储的发布和回写循环。
图3是更详细地说明图1中所说明的装置的组件的框图。如图3中所示,GPU 14包含着色器核心24,其包含通用寄存器(GPR)26和共享GPR(SGPR)28,以及固定功能管线30。着色器核心24和固定功能管线30可以一起形成处理管线,其用于执行图形或非图形相关功能。处理管线执行由GPU 14上执行的软件或固件定义的功能,并且由经硬接线以执行非常特定的功能的固定功能单元执行功能。
如上文所述,在GPU 14上执行的软件或固件可被称为着色器程序(或简单地称为着色器),并且着色器程序可以在GPU 14的着色器核心24上执行。虽然仅仅说明一个着色器核心24,但是在一些实例中,GPU 14可以包含类似于着色器核心24的一或多个着色器核心。固定功能管线30包含固定功能单元。着色器核心24和固定功能管线30可以从彼此发射和接收数据。举例来说,处理管线可以包含在着色器核心24上执行的着色器程序,其从固定功能管线30的一个固定功能单元接收数据,并且向固定功能管线30的另一固定功能单元输出经处理数据。
着色器程序为用户提供功能灵活性,这是因为用户可设计所述着色器程序以按任何可想象的方式来执行期望任务。然而,固定功能单元经针对固定功能单元执行任务的方式而硬接线。因此,固定功能单元可能并不提供大量功能灵活性。
着色器程序的实例包含顶点着色器32、片段着色器34和计算着色器36。顶点着色器32和片段着色器34可以是用于图形相关任务的着色器程序,并且计算着色器36可以是用于非图形相关任务的着色器程序。在一些实例中,仅仅可使用像顶点着色器32和片段着色器34这样的图形相关着色器程序。在一些实例中,可仅仅使用像计算着色器36这样的非图形相关着色器程序。存在例如几何形状着色器的着色器程序的额外实例,出于简洁目的未予描述。
在处理器12上执行的图形驱动程序40可经配置以实施应用程序编程接口(API)。在这些实例中,着色器程序(例如顶点着色器32、片段着色器34和计算着色器36)可以根据与图形驱动程序40相同的API配置。虽然未说明,但是系统存储器16可以存储用于图形驱动程序40的代码,处理器12从系统存储器16检索所述代码以用于执行。在虚线框中说明图形驱动程序40以指示在这个实例中,图形驱动程序40是在硬件(例如处理器12)上执行的软件。然而,图形驱动程序40的功能性中的一些或全部可以实施为处理器12上的硬件。
在一些实例中,系统存储器16可以存储用于顶点着色器32、片段着色器34和计算着色器36中的一或多个的源代码。在这些实例中,在处理器12上执行的编译程序38可以编译这些着色器程序的源代码,以创建在运行时间期间(例如当需要在着色器核心24上执行这些着色器程序的时候)可通过GPU 14的着色器核心24执行的对象或中间代码。在一些实例中,编译程序38可以预编译着色器程序,并且在系统存储器16中存储着色器程序的对象或中间代码。
系统存储器16可以存储用于编译程序38的代码,处理器12从系统存储器16检索所述代码以用于执行。在图3的实例中,在虚线框中说明编译程序38,以指示在这个实例中编译程序38是在硬件(例如处理器12)上执行的软件。然而,在一些实例中,编译程序38的一些功能性可以实施为处理器12上的硬件。
图形驱动程序40可经配置以允许处理器12和GPU 14与彼此通信。举例来说,当处理器12将图形或非图形处理任务卸载到GPU 14时,处理器12经由图形驱动程序40将此些处理任务卸载到GPU 14。
作为一实例,处理器12可以执行产生图形数据的游戏应用程序,并且处理器12可以将这个图形数据的处理卸载到GPU 14。在这个实例中,处理器12可以在系统存储器16中存储图形数据,并且图形驱动程序40可以指令GPU 14何时检索图形数据,在系统存储器16中从哪里检索图形数据,以及何时处理图形数据。并且,游戏应用程序可能需要GPU到执行一或多个着色器程序。举例来说,游戏应用程序可能需要着色器核心24执行顶点着色器32和片段着色器34以生成有待(例如在图1的显示器18上)显示的图像。图形驱动程序40可以指令GPU 14何时执行着色器程序,并且指令GPU 14从哪里检索着色器程序所需的图形数据。以此方式,图形驱动程序40可以在处理器12与GPU 14之间形成链接。
图形驱动程序40可以根据API配置;但是图形驱动程序40不需要限于根据特定API配置。在装置10是移动装置的实例中,可以根据OpenGL ES API配置图形驱动程序40。OpenGL ES API具体被设计成用于移动装置。在装置10为非移动装置的实例中,可以根据OpenGL API配置图形驱动程序40。
着色器核心24可经配置以并行执行相同着色器程序的相同指令的许多实例。举例来说,图形驱动程序40可以指令GPU 14检索多个顶点的顶点值,并且指令GPU 14执行顶点着色器32以处理所述顶点的顶点值。在这个实例中,着色器核心24可以执行顶点着色器32的多个实例,并且通过针对顶点中的每一个在着色器核心24的一个处理元件上执行顶点着色器32的一个实例而执行此操作。
着色器核心24的每个处理元件可以在相同实例执行顶点着色器32的相同指令;然而,特定顶点值可能是不同的,因为每个处理元件在处理不同的顶点。如上文所述,每个处理元件可以被认为是在执行顶点着色器32的线程,其中线程指代正在处理特定顶点的顶点着色器32的一个指令。以此方式,着色器核心24可以执行顶点着色器32的许多实例以并行(例如在同一时间)处理多个顶点的顶点值。
着色器核心24可以类似地执行片段着色器34的许多实例以并行处理多个像素的像素值,或者执行计算着色器36的许多实例以并行处理许多非图形相关数据。以此方式,着色器核心24可以用单指令多数据(SIMD)结构配置。为易于描述,相对于通用着色器程序描述下文,通用着色器程序的实例包含顶点着色器32、片段着色器34、计算着色器36和其它类型的着色器,例如几何形状着色器。
在本发明中描述的技术中,SGPR 28可以存储对于图形波中的图形项目是统一的变量(例如属性)的数据(例如属性数据)。可存在多种方式确定所述数据是否在整个图形波上是统一的。
举例来说,编译程序38可能知道SGPR 28(即,SGPR 28对于编译程序38是可见的)。换句话说,编译程序38被设计成具有使用SGPR 28的功能性。在一些实例中,编译程序38可以确保不是将每个波的统一数据存储到每个纤维GPR 26中,而是着色器核心24在SGPR 28中存储每个波的统一数据(例如每个波三十二个标量数据)。编译程序38可以利用不同实例技术允许将非相异数据恒定加载到SGPR 28中。
作为一个实例,在编译着色器程序(例如,顶点着色器32、片段着色器34或计算着色器36)的同时,编译程序38可以确定着色器程序是否需要存取统一数据。在此背景下,着色器程序需要存取统一数据,这意味着在着色器核心24的相应处理元件上执行的着色器程序的每一线程各自请求用于图形项目的至少一个变量的相同的数据。
举例来说,编译程序38可以生成例如循环计数器(for-loop counter)的统一数据。这个循环计数器可能对于着色器程序的所有执行实例是相同的,这意味着对于处理每个图形项目,循环计数器是相同的。这个循环计数器可以是用于图形项目的变量的数据的实例。在这个实例中,编译程序38可以确定循环计数器是对于图形波中的所有图形项目是统一的图形项目的变量的数据。
作为另一实例,着色器程序可以包含分支指令(例如如果/则/否则指令)。对于某个特定分支,着色器程序可以包含将一或多个变量设置成等于恒定值的指令(例如将所有x、y、z和w坐标设置成等于0的指令)。在这个实例中,编译程序38可以确定恒定值是对于图形波中的所有图形项目是统一的图形项目的变量的数据。
如果编译程序38确定着色器程序需要存取对于整个图形波统一的数据,则编译程序38可以包含显式指令,其向着色器核心24指示数据对于整个图形波是统一的。在这个实例中,着色器核心24可以发出对于来自存储器(例如本地存储器或系统存储器16)的用于第一图形项目的变量的统一数据的请求,并且可以在SGPR 28而非GPR 26中存储数据。然而,因为用于变量的数据对于图形波是相同的,所以着色器核心24可以不发出对于其它图形项目的请求。举例来说,着色器核心24可以将每个图形项目的(例如每个纤维的)恒定负载转换成每个波的恒定负载,并且将数据存储到SGPR 28。以此方式,着色器核心24可能不需要发布不必要的存储器请求,这样可以节省每个纤维的指令处理循环、存储器请求发布循环和返回数据回写循环。
如上文所述,SGPR 28可以包含多个存储位置,其中每个存储位置与形成图形波的图形项目的变量(例如属性)的单个变量(例如属性)相关联。也如上文所述,编译程序38可查看SGPR 28。举例来说,编译程序38可以向SGPR 28的存储位置中的每一个指派唯一识别符(SGPR ID)。编译程序38可以传输与具有统一属性数据的属性相关联的存储位置的SGPRID。着色器核心24接着可在SGPR 28的通过SGPR ID识别的存储位置中存储用于图形波的统一属性数据。
在这些实例中,对于使用所述数据的指令,着色器核心24的处理元件可以从与用于所述属性的存储位置相关联的SGPR ID检索数据。在这些实例中,技术可以通过不存取GPR 26并且改为存取SGPR 28而进一步减少电力消耗。
在编译程序38确定图形波的图形项目的数据是相异的(例如不统一的)实例中,编译程序38可以不包含指示统一数据存取的指令。在这些实例中,着色器核心24可以请求用于图形项目中的每一个的数据,并且在GPR 26中存储所述数据。举例来说,着色器核心24可以向存储器请求用于第一图形项目的第一属性的属性数据,向存储器请求用于第二图形项目的第一属性的属性数据,以此类推。在统一属性数据场景中,着色器核心24可以仅仅请求用于图形波的图形项目的属性数据一次,并且在SGPR 28中存储属性数据。
在一些情况下,编译程序38可以不确定用于变量的数据对于整个图形波是统一的,但是可以也不确定在图形波中用于变量的数据必定是相异的。换句话说,编译程序38可以确定存在用于属性的属性数据是统一的可能性(例如“或许”存在对于特定属性的属性数据的统一存取)。
在这些实例中,编译程序38可以将SGPR 28的存储位置与存储于GPR 26中的图形项目的属性混叠,并且向着色器核心24指示此混叠。作为一个实例,假设每个图形项目与八个属性相关联。在这个实例中,编译程序38可以将识别符(ID)R48-R55与GPR ID 0-7(例如具有图形项目的属性0-7)混叠。在这个实例中,ID R48-R55可以是预留的识别符,并且着色器核心24可经配置以确定何时使用ID R48-R55,接着编译程序38确定存在用于图形项目的属性中的至少一个的属性数据是相同的可能性。
SGPR 28和GPR 26的存储位置的混叠可能意味着编译程序38可以为目的地存取并且分配SGPR空间和GPR空间两者。换句话说,编译程序38可以容许数据存储于SGPR28或GPR26中。举例来说,编译程序38可以包含着色器程序中的指令,其指示属性数据应当存储到这些识别符中的一者。如果着色器核心24确定属性数据是统一的,则着色器核心24可以将属性数据存储到通过混叠识别符识别的SGPR 28的存储位置。如果着色器核心24确定属性数据是趋异的,则着色器核心24可以基于混叠识别符将属性数据存储到GPR 26。相对于图5A和5B更详细地描述使用混叠识别符的实例。
如上文所述,着色器核心24可经配置以确定数据是统一的还是趋异的。可存在着色器核心24可以确定数据是统一还是趋异的各种方式。作为一个实例,着色器核心24可以监视处理元件中的每一个所请求的存储器地址以寻找变量中的每一个。这些存储器地址可以是GPU 14的本地存储器的存储器地址或系统存储器16的存储器地址。
如果存储器地址是相同的,则着色器核心24可以确定用于着色器核心24的相应处理元件正在处理的图形项目中的每一个的变量的数据是统一的。举例来说,如果有待从其检索数据的位置的存储器地址对于图形项目中的每一个是相同的,则或许很可能处理图形项目的处理元件所请求的数据是相同的。
在一些实例中,如果着色器核心24确定用于图形波的图形项目的变量的数据的存储器地址是相同的,则着色器核心24可以断言指示变量的数据的统一有效旗标(例如将统一有效旗标设置成等于1)是统一的。接着,当写入所请求的数据时,着色器核心24可以首先确定统一有效旗标的值,并且如果断言了统一有效旗标,则在通过混叠识别符识别的SGPR28的存储位置中存储统一数据(例如数据的一个实例)。
统一有效旗标与SGPR 28的同混叠识别符相关联的存储位置相关联。举例来说,SGPR 28的每个存储位置还可与统一有效旗标相关联。如果通过着色器核心24确定用于与SGPR 28的特定存储位置相关联的属性的属性数据是统一的,则着色器核心24可以断言(例如将旗标值设置成1)与所述存储位置相关联的统一有效旗标。如果通过着色器核心24确定用于与SGPR 28的特定存储位置相关联的属性的属性数据是趋异的,则着色器核心24可以不断言与所述存储位置相关联的统一有效旗标(例如将统一有效旗标设置成等于0)。
举例来说,如果着色器核心24确定用于图形项目的属性的属性数据的至少一个存储器地址与其它的不同,则着色器核心24可以不断言统一值。接着,当写入所请求的属性数据时,着色器核心24可以首先确定统一有效旗标的值,并且如果未断言统一有效旗标,则在与混叠识别符相关联的GPR 26的存储位置中存储属性数据(例如图形项目中的每一个的属性的趋异的属性数据)。
在一些实例中,对于接着使用属性数据的着色器程序的指令,编译程序38可以包含与这些指令中的属性数据相关联的SGPR 28的存储位置的混叠识别符作为操作数。着色器核心24接着读取统一有效旗标值并且确定属性数据是存储于SGPR 28还是GPR 26中。举例来说,如果断言了统一有效旗标,则着色器核心24可以确定属性数据存储于SGPR 28中,并且如果未断言统一有效旗标,则着色器核心24可以确定属性数据存储于GPR 26中。
图4是更详细地说明图3的GPU的着色器核心的一个实例的框图。举例来说,图4说明了GPU 14的着色器核心24的一个实例。着色器核心24可以包含控制单元42,其包含统一逻辑检测单元44、指令存储装置46、一或多个处理元件48A-48H(统称为“处理元件48”)、GPR26和SGPR 28。虽然图4说明了八个处理元件48,但是在其它实例中可存在多于或少于八个处理元件48。处理元件48是对其并行执行着色器程序的实例的处理元件的实例。
控制单元42可以控制着色器核心24的功能性。举例来说,控制单元42可以检索有待通过处理元件48执行的指令,并且在指令存储装置46中存储所述指令。并且,控制单元42可以检索处理元件48有待处理的属性数据,并且在GPR26和/或SGPR 28中存储属性数据。
举例来说,如图所示,控制单元42包含统一逻辑检测单元44。统一逻辑检测单元44可以是着色器核心24的硬件、在着色器核心24上执行的软件或所述两者的组合。虽然将统一逻辑检测单元44说明为控制单元42的一部分,但是本发明中描述的技术不受如此限制。总的来说,说明统一逻辑检测单元44是为了帮助理解,并且统一逻辑检测单元44可以是与控制单元42分开的单元、控制单元42内的专用单元,或者与控制单元42集成。
在本发明中描述的技术中,统一逻辑检测单元44是经配置以实施实例技术的单元的一个实例。举例来说,处理元件48中的每一个可以处理一个图形项目。为了处理相应图形项目,处理元件48中的每一个可以执行着色器程序的实例。
举例来说,处理元件48中的每一个可以执行请求用于通过相应处理元件48处理的图形项目中的每一个的变量(例如属性)的数据(例如属性数据)的指令。统一逻辑检测单元44可以确定请求数据的指令是否从相同存储器地址请求数据,其中存储器地址是用于GPU14的本地存储器或系统存储器16。如果统一逻辑检测单元44确定用于图形项目中的每一个的变量的数据的存储器地址是相同的,则统一逻辑检测单元44可以发布对于所述数据的请求一次并且检索所述数据一次,而非针对数据的每个多个请求多次检索数据。
统一逻辑检测单元44还可断言用于与所述变量相关联的SGPR 28内的存储位置的统一有效旗标,并且将检索到的数据写入到SGPR 28的存储位置。在一些实例中,统一逻辑检测单元44可以不将数据写入到GPR 26(但是写入到GPR 26或许仍然是可能的)。接着,当处理元件48中的每一个执行需要变量的数据的指令时,控制单元42可以从与所述变量相关联的SGPR 28的存储位置检索所述数据。举例来说,可能仅仅需要对SGPR28的一个请求来一次检索所有处理元件48的数据。
如果统一逻辑检测单元44确定用于所请求的数据中的至少一个的存储器地址是不同的(例如存储器地址中的至少两个彼此不同),则统一逻辑检测单元44可以发布对于所述数据的请求中的每一个,并且可以不在SGPR 28中存储所述数据,并且可以改为在GPR 26中存储所述数据。接着,当处理元件48中的每一个执行需要变量的数据的指令时,控制单元42可以从GPR 26的所述存储位置检索所述数据。举例来说,可能需要多个请求(例如每个处理元件48一个请求)来检索用于处理元件48中的每一个的数据。
指令存储装置46可以是能够存储指令的存储器,例如(但不限于)易失性存储器、非易失性存储器、高速缓冲存储器、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)等。控制单元42可以是着色器核心24的硬连线电路,其控制着色器核心24的组件。然而,或许有可能至少部分地通过着色器核心24的在硬件上执行的软件或固件形成控制单元42。
处理元件48经配置以执行着色器程序的线程。处理元件48中的每一者可执行不同线程。举例来说,处理元件48中的每一者可以相对于潜在地不同的图形项目执行着色器程序的指令的实例。处理元件48可以是单指令多数据(SIMD)处理元件。SIMD处理元件指代当经激活时经配置以相对于不同数据同时执行同一指令的处理元件。这样可以允许处理元件48相对于不同数据项并行执行着色器程序的多个线程。在一些情况下,处理元件48中的每一者可以基于指向指令存储装置46中包含的指令的共用程序计数器执行着色器程序的指令。
如果控制单元42解除激活处理元件48中的一或多个,则此些处理元件48在给定指令循环中并不执行程序指令。在一些情况下,控制单元42可解除激活处理元件48中的一或多者以实施条件性分支指令,其中分支条件对于一些线程得到满足且对于其它线程不得到满足。
在一些实例中,处理元件48中的每一者可以包含和/或对应于一或多个算术逻辑单元(ALU)。在其它实例中,处理元件48中的每一者可实施ALU功能性。ALU功能性可以包含加法、减法、乘法等。
图5A和5B是说明根据本发明中描述的技术的数据存储的实例的概念图。在图5A和5B的实例中,每个图形项目与八个属性相关联。举例来说,图5A说明四个图形项目P0-P3形成第一图形波的实例,并且图5B说明四个图形项目P4-P7形成第二图形波的实例。
应理解,图5A和5B仅仅说明GPR 26的一部分,并且尤其仅仅说明GPR 26的映射到SGPR 28的部分。总的来说,GPR 26经配置以存储不映射到SGPR 28的存储位置的额外数据。举例来说,GPR是用于多种存储目的的通用寄存器,而在一些非限制性实例中,可使用SGPR28仅仅存储对于整个图形波统一的或者具有统一的可能性的数据。换句话说,在存储于GPR26中的所有数据中,或许有可能将此数据的一部分存储于SGPR 28中。为了便于说明,图5A和5B说明可以存储于SGPR 28中的GPR 26的数据(其中在图5A中,所述数据对于存储在SGPR28中是统一的,并且其中在图5B中,所述数据不是统一的并且无法存储于SGPR 28中)。
在这些实例中,图形项目P0-P3中的每一者与变量R0-R7相关联,并且类似地,图形项目P4-P7中的每一者与变量R0-R7相关联。在图5A和5B中所图示的实例中,ID R48-R55分别与变量R0-R7相关联。应理解,ID R48-R55与变量R0-R7相关联仅仅是一个实例,并且IDR48-R55可以与变量R0-R7中的任一者相关联。在图5A中,W0指代包含图形项目P0-P3的图形波,并且在图5B中,W1指代包含图形项目P4-P7的图形波。
在图5A和5B中,着色器核心24的处理元件48A-48D(可能仅仅需要四个处理元件48)可以实施以下指令:
LDC R48,m[x];//将恒定存储器位置x加载到R48;
添加R1,R48,0x1;//R1=R48+1
在图5A的实例中,SGPR 28的第一存储位置与变量R0相关联,并且具有R48的SGPRID。在图5B的实例中,SGPR 28的第一存储位置与变量R0相关联,并且具有R48的SGPR ID。在图5A中,着色器核心24的四个处理元件48在同一时间各自处理相应的图形项目P0-P3,并且在图5B中,着色器核心24的四个处理元件48在同一时间各自处理图形项目P4-P7。
在图5A和5B的实例中,着色器核心24的四个处理元件48中的每一者执行LDC R48,m[x]指令以发布加载存储在存储器位置x的值的请求。用于存储器位置x的存储器地址是用于图5A中的图形项目P0-P3的变量R0的数据以及用于图形项目P4-P7的变量R0的数据。统一逻辑检测单元44可以确定用于存储器位置x的地址是否对于来自四个处理元件48的所有存储器请求是相同的。
假设在图5A的实例中,用于存储器位置x的地址对于四个处理元件48是相同的,并且在图5B的实例中,用于存储器位置x的地址对于四个处理元件48中的至少一个是不同的(例如存在彼此不同的至少两个地址)。因此,在图5A的实例中,着色器核心24(例如控制单元42的统一逻辑检测单元44)可以确定用于变量R0的数据的存储器地址对于图形项目P0-P3是相同的,并且在图5B的实例中,着色器核心24(例如控制单元42的统一逻辑检测单元44)可以确定用于至少一个变量R0的数据的存储器地址对于图形项目P4-P7是不同的(例如用于至少两个变量R0的数据的存储器地址是彼此不同的)。
在图5A中示出的实例中,着色器核心24(例如经由控制单元42)可以将变量R0的数据加载到SGPR 28的第一存储位置,其被识别为R48,而非作为对于图形项目P0-P3预留的GPR 26的存储位置中的R0。在这个实例中,着色器核心24(例如经由控制单元42)可以发布一个读取请求,并且不发布对于处理图形项目P0-P3中的相应图形项目的处理元件中的每一者的读取请求。并且,在这个实例中,着色器核心24(例如经由控制单元42)可以写入用于变量R0的数据一次,并且不写入用于变量R0的数据四次。接着,对于下一个指令(R1=R48+1),着色器核心24的处理元件48A-48D可以从SGPR 28读取变量R0的值,而不是从GPR 26读取所述数据四次。以此方式,如果波中的恒定负载是统一的,则所述技术可以节省存储器请求发布循环和通过写入返回数据循环。
在图5B中示出的实例中,着色器核心24(例如经由控制单元42)可以将通过存储器位置x的存储器地址识别的每个变量R0的数据加载到GPR 26的存储位置。举例来说,着色器核心24(例如经由控制单元42)可以执行对于用于图形项目P4-P7的变量R0的属性数据的四个请求中的每一者,因为存储器位置x对于四个图形项目P4-P7中的至少一个是不同的。接着,对于下一个指令(R1=R48+1),着色器核心24的处理元件48A-48D可以针对用于图形项目P4-P7的每个相应存储位置从GPR 26读取变量R0的相应数据。
如上文所述,SGPR 28小于GPR 26。作为一个实例,SGPR 28可以包含一列和与GPR26相同数目的行。以此方式,SGPR 28可以与GPR 26一样深,但是可能不一样宽。如图5A和5B中所示,SGPR 28的一行可以存储三十二位,但是GPR 26的一行可以存储128位。作为另一实例,或许有可能SGPR 28包含多个列,其中列的数目是基于属性的数目,并且包含一行。总的来说,SGPR 28的每个存储位置与变量相关联,并且可经配置以如果用于相应变量的数据是相同的则存储用于相应图形项目的相应变量的数据。
图6是说明存储数据的实例技术的流程图。如图6中所示,着色器核心24(例如经由控制单元42的统一逻辑检测单元44)可以确定多个图形项目的变量的数据是否相同(100)。在这个实例中,在着色器程序(例如顶点着色器32、片段着色器34或计算着色器36)的执行期间,用GPU 14的着色器核心24的相应处理元件48处理多个图形项目。
总的来说,多个图形项目的变量指代处理多个图形项目中的每一者所需的变量。作为一个实例,所述多个图形项目中的每一者可以与x、y、z和w坐标、红色分量值、绿色分量值、蓝色分量值和不透明度值相关联。在这个实例中,x、y、z和w坐标各自是处理多个图形项目中的每一者所需的变量的一个实例,红色、绿色和蓝色分量和不透明度值各自也是处理多个图形项目中的每一者所需的变量的一个实例。作为另一实例,计数器值可以是处理多个图形项目中的每一者所需的变量。
在一些实例中,变量的数据(例如变量的值)可能对于多个图形项目是不同的。举例来说,用于图形项目中的至少一个的红色、绿色或蓝色分量值中的一个可以不同于用于多个图形项目中的其它图形项目的红色、绿色或蓝色分量值。然而,在一些实例中,变量的数据可以对于所述多个图形项目是相同的。举例来说,PRJ矩阵的PRJ矩阵值可以对于所有多个图形项目是相同的。在本发明中描述的技术中,如果变量的数据对于多个图形项目是相同的,则数据可以存储于SGPR中,这样会减少存取时间并且促成电力效率增益。
在一些实例中,着色器核心24的控制单元42可以确定编译程序38包含的着色器程序中的指令是否指示多个图形项目的变量的数据是相同的,以确定多个图形项目的变量的数据是否相同。作为另一实例,控制单元42(经由统一逻辑检测单元44)可以确定处理元件48为了处理相应图形项目针对变量的数据所请求的存储器地址是否相同。在这些实例中,如果所有存储器地址是相同的,则控制单元42可以确定变量的数据对于所有图形项目相同,并且如果不是所有存储器地址都相同(例如存在至少两个具有不同数据的图形项目),则控制单元42可以确定对于图形项目中的至少一个,变量的数据并不相同。
如果多个图形项目的变量的数据是相同的,则着色器核心24(例如经由控制单元42)可以在与变量相关联的SGPR 28的存储位置中存储数据(102)。举例来说,在图5A中,识别为R48的SGPR 28的第一存储位置与用于图形项目P0-P3的变量R0相关联。并且,R48与存储用于图形项目P0-P3的变量R0的数据的GPR 26的存储位置相关联。以此方式,如果数据存储于SGPR 28中,则R48指代SGPR 28的第一存储位置。如果数据存储于GPR 26中,则R48指代存储用于相应图形项目P0-P3的变量R0的数据的GPR 26的存储位置。
在一些实例中,如果多个图形项目的变量的数据是相同的,则控制单元42可以仅仅发布对于来自存储器地址的数据的一个请求,所述存储器地址对于所有图形项目的变量是相同的。控制单元42接着可仅仅检索所述数据一次,以用于存储在与所述变量相关联的SGPR 28的存储位置中。在一些实例中,如果确定多个图形的变量的数据是相同的,则控制单元42可以断言统一有效旗标。在这些实例中的一些中,如果断言了统一有效旗标,则控制单元42可以在SGPR的存储位置中存储数据。
如果多个图形项目中的至少两个的变量的数据不相同(例如存在数据彼此不同的至少两个图形项目),则着色器核心24(例如经由控制单元42)可以在GPR 26的多个存储位置中存储多个图形项目中的每一者的变量的数据(104)。举例来说,如图5B中所说明,控制单元42可以在GPR 26的存储位置中存储用于处理元件48中的每一者的变量的数据。
控制单元42还可从用于处理相应图形项目的处理元件48中的每一者接收对于变量的存储数据的请求。如果数据是相同的,则控制单元42可以仅仅发布对于来自SGPR 28的数据的一个请求。如果数据不相同,则控制单元42可以从所有处理元件48发布对于来自GPR26的数据的请求。
在一或多个实例中,所描述功能可用硬件、软件、固件或其任何组合来实施。如果用软件实施,则所述功能可作为一或多个指令或代码在计算机可读媒体上存储或传输,且由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体,其对应于例如数据存储媒体等有形媒体。以此方式,计算机可读媒体可一般对应于非暂时性的有形的计算机可读存储媒体。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本发明中描述的技术的指令、代码及/或数据结构的任何可用媒体。计算机程序产品可以包含计算机可读媒体。
借助于实例而非限制,此类计算机可读存储媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器或可以用来存储指令或数据结构的形式的期望程序代码并且可以由计算机存取的任何其它媒体。应理解,计算机可读存储媒体和数据存储媒体并不包含载波、信号或其它暂时性媒体,而是针对非暂时性有形存储媒体。如本文中所使用,磁盘和光盘包含压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软性磁盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光以光学方式再现数据。以上各项的组合也应包含在计算机可读媒体的范围内。
可由例如一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一或多个处理器来执行指令。因此,如本文中所使用的术语“处理器”可指前述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。另外,在一些方面中,本文中所描述的功能性可以在经配置用于编码和解码的专用硬件和/或软件模块内提供,或者并入在组合编解码器中。而且,所述技术可完全实施于一或多个电路或逻辑元件中。
本发明的技术可在多种多样的装置或设备中实施,包含无线手持机、集成电路(IC)或IC集合(例如,芯片组)。本发明中描述各种组件、模块或单元是为了强调经配置以执行所揭示的技术的装置的功能方面,但未必需要由不同硬件单元实现。实际上,如上文所描述,各种单元可以结合合适的软件及/或固件组合在编码解码器硬件单元中,或者通过互操作硬件单元的集合来提供,所述硬件单元包含如上文所描述的一或多个处理器。
描述了各种实例。这些及其它实例在所附权利要求书的范围内。
Claims (27)
1.一种存储数据的方法,所述方法包括:
确定用于多个图形项目的变量的数据是否相同,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用图形处理单元GPU的着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;
如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的共享通用寄存器SGPR的存储位置中存储所述数据;以及
如果所述多个图形项目中的至少两个的所述变量的所述数据不相同,则在与所述SGPR分开的通用寄存器GPR的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据。
2.根据权利要求1所述的方法,其中所述数据包括属性的属性数据,并且所述变量包括用于所述多个图形项目的所述属性。
3.根据权利要求1所述的方法,其中确定所述多个图形项目的所述变量的所述数据是否相同包括确定由编译程序产生的着色器程序中的指令是否指示所述多个图形项目的所述变量的所述数据是相同的。
4.根据权利要求1所述的方法,其中确定所述多个图形项目的所述变量的所述数据是否相同包括:
确定用于处理相应图形项目的所述处理元件对于所述数据所请求的存储器地址是否相同;
如果所有所述存储器地址是相同的,则确定所述变量的所述数据对于所有所述图形项目是相同的;以及
如果不是所有所述存储器地址都相同,则确定所述变量的所述数据对于所述图形项目中的至少两个不是相同的。
5.根据权利要求1所述的方法,其进一步包括:
从用于处理相应图形项目的所述处理元件中的每一者接收对于所述变量的所述存储数据的请求;以及
如果所述数据是相同的,则仅仅发布对于来自所述SGPR的所述数据的一个请求。
6.根据权利要求1所述的方法,其进一步包括:
从用于处理相应图形项目的所述处理元件中的每一者接收对于所述变量的所述存储数据的请求;以及
如果所述数据不是相同的,则从所有所述处理元件发布对于来自所述GPR的所述数据的请求。
7.根据权利要求1所述的方法,其中如果所述多个图形项目的所述变量的所述数据是相同的则在与所述变量相关联的所述SGPR的所述存储位置中存储所述数据包括:
仅仅发布对于来自存储器地址的所述数据的一个请求,所述存储器地址对于所有所述图形项目的所述变量是相同的;以及
仅仅检索所述数据一次以供存储在与所述变量相关联的所述SGPR的所述存储位置中。
8.根据权利要求1所述的方法,其进一步包括:
如果确定所述多个图形项目的所述变量的所述数据是相同的,则断言统一有效旗标,
其中在所述SGPR的所述存储位置中存储所述数据包括如果断言所述统一有效旗标则在所述SGPR的所述存储位置中存储所述数据。
9.根据权利要求1所述的方法,其中所述图形项目包括多个顶点或多个像素中的一者。
10.一种用于处理数据的装置,所述装置包括:
图形处理单元GPU,所述GPU包括着色器核心,所述着色器核心包括控制单元、多个处理元件、共享通用寄存器SGPR和通用寄存器GPR,其中所述控制单元经配置以:
确定用于多个图形项目的变量的数据是否相同,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用所述GPU的所述着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;
如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的所述SGPR的存储位置中存储所述数据;以及
如果所述多个图形项目中的至少两个的所述变量的所述数据不是相同的,则在与所述SGPR分开的所述GPR的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据。
11.根据权利要求10所述的装置,其中所述数据包括属性的属性数据,并且所述变量包括用于所述多个图形项目的所述属性。
12.根据权利要求10所述的装置,其进一步包括处理器,其中所述处理器经配置以执行以下各项中的至少一者:
编码指示用于所述多个图形项目的所述变量的所述数据是相同的指令,所述控制单元根据所述指令确定所述数据是否相同;或
在所述着色器程序中生成将所述SGPR的存储位置与所述图形项目的变量混叠的指令。
13.根据权利要求10所述的装置,其中为了确定所述多个图形项目的所述变量的所述数据是否相同,所述控制单元经配置以:
确定用于处理相应图形项目的所述处理元件对于所述变量的所述数据所请求的存储器地址是否相同;
如果所有所述存储器地址是相同的,则确定所述变量的所述数据对于所有所述图形项目是相同的;以及
如果不是所有所述存储器地址都相同,则确定所述变量的所述数据对于所述图形项目中的至少两个不是相同的。
14.根据权利要求10所述的装置,其中所述控制单元经配置以:
从用于处理相应图形项目的所述处理元件中的每一者接收对于所述变量的所述存储数据的请求;以及
如果所述数据是相同的,则仅仅发布对于来自所述SGPR的所述数据的一个请求。
15.根据权利要求10所述的装置,其中所述控制单元经配置以:
从用于处理相应图形项目的所述处理元件中的每一者接收对于所述变量的所述存储数据的请求;以及
如果所述数据不是相同的,则从所有所述处理元件发布对于来自所述GPR的所述数据的请求。
16.根据权利要求10所述的装置,其中如果所述多个图形项目的所述变量的所述数据是相同的,则为了在与所述变量相关联的所述SGPR的所述存储位置中存储所述数据,所述控制单元经配置以:
仅仅发布对于来自存储器地址的所述数据的一个请求,所述存储器地址对于所有所述图形项目的所述变量是相同的;以及
仅仅检索所述数据一次以供存储在与所述变量相关联的所述SGPR的所述存储位置中。
17.根据权利要求10所述的装置,其中所述控制单元经配置以:
如果确定所述多个图形项目的所述变量的所述数据是相同的,则断言统一有效旗标,
其中为了在所述SGPR的所述存储位置中存储所述数据,如果断言所述统一有效旗标,则所述控制单元经配置以在所述SGPR的所述存储位置中存储所述数据。
18.根据权利要求10所述的装置,其中所述图形项目包括多个顶点或多个像素中的一者。
19.根据权利要求10所述的装置,其中所述装置包括:
无线通信装置。
20.一种包括着色器核心的图形处理单元GPU,所述着色器核心包括:
多个处理元件;
共享通用寄存器SGPR;
与所述SGPR分开的通用寄存器GPR;以及
控制单元,其经配置以:
确定用于多个图形项目的变量的数据是否相同,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用所述GPU的所述着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;
如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的所述SGPR的存储位置中存储所述数据;以及
如果所述多个图形项目中的至少两个的所述变量的所述数据不是相同的,则在与所述SGPR分开的所述GPR的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据。
21.根据权利要求20所述的GPU,其中为了确定所述多个图形项目的所述变量的所述数据是否相同,所述控制单元经配置以:
确定用于处理相应图形项目的所述处理元件对于所述变量的所述数据所请求的存储器地址是否相同;
如果所有所述存储器地址是相同的,则确定所述变量的所述数据对于所有所述图形项目是相同的;以及
如果不是所有所述存储器地址都相同,则确定所述变量的所述数据对于所述图形项目中的至少两个不是相同的。
22.根据权利要求20所述的GPU,其中所述控制单元经配置以:
从用于处理相应图形项目的所述处理元件中的每一者接收对于所述变量的所述存储数据的请求;以及
如果所述数据是相同的,则仅仅发布对于来自所述SGPR的所述数据的一个请求。
23.根据权利要求20所述的GPU,其中所述控制单元经配置以:
从用于处理相应图形项目的所述处理元件中的每一者接收对于所述变量的所述存储数据的请求;以及
如果所述数据不是相同的,则从所有所述处理元件发布对于来自所述GPR的所述数据的请求。
24.根据权利要求20所述的GPU,其中如果所述多个图形项目的所述变量的所述数据是相同的,则为了在与所述变量相关联的所述SGPR的所述存储位置中存储所述数据,所述控制单元经配置以:
仅仅发布对于来自存储器地址的所述数据的一个请求,所述存储器地址对于所有所述图形项目的所述变量是相同的;以及
仅仅检索所述数据一次以供存储在与所述变量相关联的所述SGPR的所述存储位置中。
25.根据权利要求20所述的GPU,其中所述控制单元经配置以:
如果确定所述多个图形项目的所述变量的所述数据是相同的,则断言统一有效旗标,
其中为了在所述SGPR的所述存储位置中存储所述数据,如果断言所述统一有效旗标,则所述控制单元经配置以在所述SGPR的所述存储位置中存储所述数据。
26.根据权利要求20所述的GPU,其中所述图形项目包括多个顶点或多个像素中的一者。
27.一种具有存储于其上的指令的计算机可读存储媒体,所述指令在执行时致使一或多个处理器:
确定用于多个图形项目的变量的数据是否相同,其中处理所述多个图形项目中的每一者需要所述变量,其中在着色器程序的执行期间用图形处理单元GPU的着色器核心的相应处理元件处理所述多个图形项目,并且其中所述图形项目中的每一者是发生处理的基本单位;
如果所述多个图形项目的所述变量的所述数据是相同的,则在与所述变量相关联的共享通用寄存器SGPR的存储位置中存储所述数据;以及
如果所述多个图形项目中的至少两个的所述变量的所述数据并不相同,则在与所述SGPR分开的通用寄存器GPR的多个存储位置中存储用于所述多个图形项目中的每一者的所述变量的数据。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/316,391 US9633411B2 (en) | 2014-06-26 | 2014-06-26 | Load scheme for shared register in GPU |
US14/316,391 | 2014-06-26 | ||
PCT/US2015/035332 WO2015199997A1 (en) | 2014-06-26 | 2015-06-11 | Load scheme for shared register in gpu |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106462941A true CN106462941A (zh) | 2017-02-22 |
CN106462941B CN106462941B (zh) | 2018-08-28 |
Family
ID=53674250
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580034321.6A Active CN106462941B (zh) | 2014-06-26 | 2015-06-11 | Gpu中的共享寄存器的加载方案 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9633411B2 (zh) |
EP (1) | EP3161817B1 (zh) |
CN (1) | CN106462941B (zh) |
ES (1) | ES2791883T3 (zh) |
HU (1) | HUE049981T2 (zh) |
WO (1) | WO2015199997A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102254119B1 (ko) * | 2015-11-11 | 2021-05-20 | 삼성전자주식회사 | 그래픽스 명령을 처리하는 방법 및 장치 |
US10002401B2 (en) * | 2015-11-11 | 2018-06-19 | Samsung Electronics Co., Ltd. | Method and apparatus for efficient processing of graphics commands |
US10552934B2 (en) * | 2016-07-01 | 2020-02-04 | Intel Corporation | Reducing memory latency in graphics operations |
TWI635747B (zh) * | 2016-12-19 | 2018-09-11 | 晨星半導體股份有限公司 | 扭曲畫面校正裝置及方法 |
US11132760B2 (en) * | 2019-12-13 | 2021-09-28 | Qualcomm Incorporated | Graphics instruction operands alias |
US20210240524A1 (en) * | 2020-01-31 | 2021-08-05 | Qualcomm Incorporated | Methods and apparatus to facilitate tile-based gpu machine learning acceleration |
US11775310B2 (en) * | 2021-11-16 | 2023-10-03 | Nxp B.V. | Data processing system having distrubuted registers |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103608777A (zh) * | 2011-06-20 | 2014-02-26 | 高通股份有限公司 | 图形处理单元中的存储器共享 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8176265B2 (en) | 2006-10-30 | 2012-05-08 | Nvidia Corporation | Shared single-access memory with management of multiple parallel requests |
US8207972B2 (en) | 2006-12-22 | 2012-06-26 | Qualcomm Incorporated | Quick pixel rendering processing |
WO2009145917A1 (en) * | 2008-05-30 | 2009-12-03 | Advanced Micro Devices, Inc. | Local and global data share |
US9032377B2 (en) * | 2008-07-10 | 2015-05-12 | Rocketick Technologies Ltd. | Efficient parallel computation of dependency problems |
US8214831B2 (en) | 2009-05-05 | 2012-07-03 | International Business Machines Corporation | Runtime dependence-aware scheduling using assist thread |
US9123167B2 (en) * | 2012-09-29 | 2015-09-01 | Intel Corporation | Shader serialization and instance unrolling |
US9256466B2 (en) * | 2013-06-07 | 2016-02-09 | Arm Limited | Data processing systems |
US10489205B2 (en) * | 2013-07-19 | 2019-11-26 | Apple Inc. | Enqueuing kernels from kernels on GPU/CPU |
US10217183B2 (en) * | 2013-12-20 | 2019-02-26 | Nvidia Corporation | System, method, and computer program product for simultaneous execution of compute and graphics workloads |
-
2014
- 2014-06-26 US US14/316,391 patent/US9633411B2/en active Active
-
2015
- 2015-06-11 EP EP15739043.6A patent/EP3161817B1/en active Active
- 2015-06-11 WO PCT/US2015/035332 patent/WO2015199997A1/en active Application Filing
- 2015-06-11 ES ES15739043T patent/ES2791883T3/es active Active
- 2015-06-11 HU HUE15739043A patent/HUE049981T2/hu unknown
- 2015-06-11 CN CN201580034321.6A patent/CN106462941B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103608777A (zh) * | 2011-06-20 | 2014-02-26 | 高通股份有限公司 | 图形处理单元中的存储器共享 |
Also Published As
Publication number | Publication date |
---|---|
US20150379680A1 (en) | 2015-12-31 |
US9633411B2 (en) | 2017-04-25 |
EP3161817B1 (en) | 2020-02-19 |
EP3161817A1 (en) | 2017-05-03 |
HUE049981T2 (hu) | 2020-11-30 |
WO2015199997A1 (en) | 2015-12-30 |
CN106462941B (zh) | 2018-08-28 |
ES2791883T3 (es) | 2020-11-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106462941B (zh) | Gpu中的共享寄存器的加载方案 | |
CN109154886B (zh) | 用于处理数据的方法和设备 | |
CN107533751B (zh) | 用于图像处理器的线缓冲器单元 | |
US10430912B2 (en) | Dynamic shader instruction nullification for graphics processing | |
US20120320070A1 (en) | Memory sharing in graphics processing unit | |
CN106716346B (zh) | 对端口减少的通用寄存器的操作数冲突解决的方法和装置 | |
CN103886547A (zh) | 用于存储共享顶点的技术 | |
US9195501B2 (en) | Instruction culling in graphics processing unit | |
US10725837B1 (en) | Persistent scratchpad memory for data exchange between programs | |
EP3417369B1 (en) | Uniform predicates in shaders for graphics processing units | |
CN103810743A (zh) | 在上游着色器中设置下游渲染状态 | |
JP6848028B2 (ja) | グラフィック処理のためのパーシェーダープリアンブル | |
US20210287422A1 (en) | Partially resident bounding volume hierarchy | |
US11934867B2 (en) | Techniques for divergent thread group execution scheduling | |
US20140052967A1 (en) | Method and apparatus for dynamic data configuration | |
US20220358708A1 (en) | Generation of sample points in rendering applications using elementary interval stratification | |
CN106662997B (zh) | 数据存储的跳过 | |
CN103870247A (zh) | 用于保存和恢复线程组操作状态的技术 | |
US20230297643A1 (en) | Non-rectangular matrix computations and data pattern processing using tensor cores | |
US20230144553A1 (en) | Software-directed register file sharing | |
CN116894757A (zh) | 用于将光线跟踪数据加载到图形处理单元的着色器处理单元中的方法和硬件逻辑 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |