CN109074625A - 用于图形处理的每个着色器的前置码 - Google Patents
用于图形处理的每个着色器的前置码 Download PDFInfo
- Publication number
- CN109074625A CN109074625A CN201780028782.1A CN201780028782A CN109074625A CN 109074625 A CN109074625 A CN 109074625A CN 201780028782 A CN201780028782 A CN 201780028782A CN 109074625 A CN109074625 A CN 109074625A
- Authority
- CN
- China
- Prior art keywords
- code block
- thread
- results
- preamble
- preamble code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- 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
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
- Advance Control (AREA)
- Image Processing (AREA)
- Complex Calculations (AREA)
Abstract
一种用于在图形处理单元中处理数据的方法包含:接收对着色器的线程的多个群组共用的指令的代码块;执行对所述着色器的线程的所述多个群组共用的指令的所述代码块通过线程的所述多个群组的线程的一个群组产生结果;在可由线程的所述多个群组中的每一个存取的芯片上随机存取存储器RAM中存储对所述着色器的线程的所述多个群组共用的指令的所述代码块的所述结果;以及在确定已经完成存储对所述着色器的线程的所述多个群组共用的指令的所述代码块的所述结果之后,从芯片上RAM传回对所述着色器的线程的所述多个群组共用的指令的所述代码块的所述结果。
Description
技术领域
本发明涉及数据处理,且更明确地说,涉及用于图形处理的着色器前置码的产生和执行。
背景技术
单指令多数据(SIMD)处理系统是包含在多个数据段上执行相同指令的多个处理元件的一种类型的并行计算系统。SIMD系统可以是独立计算机或计算系统的子系统。举例来说,一或多个SIMD执行单元可用于图形处理单元(GPU)中以实施支持可编程着色的可编程着色单元。SIMD处理系统允许程序的多个执行线程以用并行方式在多个处理元件上同步执行,由此增加需要在多个数据段上执行相同集合的操作的程序的处理量。在特定SIMD处理元件上执行的特定指令被称作线程或纤程。线程的群组可被称作波或线程束。
例如GPU的处理单元包含处理元件和存储数据以用于指令的执行的通用寄存器(GPR)。在一些实例中,处理元件执行用于处理一项数据的指令,并且相应的处理元件在GPR中存储这项数据或者来自处理的所述项的所得数据。数据项可以是发生处理的基本单位。举例来说,在图形处理中,图元的顶点是项的一个实例,且像素是项的另一实例。存在与每个顶点和像素相关联的图形数据(例如,坐标、色彩值等)。
处理元件的处理器核心内可存在多个处理元件,从而允许指令的并行执行(例如,多个处理元件同时执行相同指令)。着色器是可以利用并行处理环境(例如,着色器处理器)且已经用于在图形处理管线的各个阶段在两维和三维模型上执行图形渲染技术的计算机程序。着色器的实例包含:像素(或片段)着色器,其用于计算像素(或片段)的色彩和其它属性;顶点着色器,其用于控制位置、移动、照明和色彩,或顶点;几何着色器,其用于产生图形图元;曲面细分(tessellation)相关着色器(例如,当将顶点数据的补丁细分成较小图元时使用的外壳着色器和/或域着色器);以及计算着色器,其用于计算其它信息(例如,非图形数据)。
发明内容
一般来说,本发明描述了当在GPU的着色器处理器上执行着色器程序时用于减少冗余操作的技术。在一个实例中,本发明描述了技术借此在着色器的所有并行处理元件(例如,线程)当中产生相同结果的指令经识别和调度以执行每个着色器和/或每个命令(例如,绘制或分派命令)一次。编译程序可以识别冗余指令并且将冗余指令分组到被称作每个着色器的前置码的代码块中。GPU系统随后执行每个着色器前置码一次并且将每个着色器前置码的冗余指令的结果保存在芯片上存储器中。在着色器处理器的处理元件上执行的着色器的每个后续线程可以随后重新使用所述结果而无需再次计算相同结果。此外,数据可以经由每个着色器前置码从系统存储器预加载到芯片上随机存取存储器(RAM)和/或芯片上状态高速缓冲存储器/缓冲器中。
在本发明的一个实例中,操作图形处理单元(GPU)的方法包括:通过GPU从着色器编译程序接收包括前置码代码块和主要着色器代码块的着色器程序,所述前置码代码块可执行以产生一或多个结果,所述一或多个结果对于执行着色器程序的线程的多个群组中的每一个是相同的一或多个结果;通过GPU在线程的多个群组的线程的第一群组上执行前置码代码块以产生一或多个结果;通过GPU存储前置码代码块的一或多个结果,前置码代码块的一或多个结果可由线程的多个群组中的每一个存取;以及在确定已经完成存储前置码代码块的一或多个结果中的所有的之后,通过GPU使用通过执行前置码代码块产生的一或多个结果执行用于线程的多个群组中的线程的一个群组的每个线程的主要着色器代码块。
在另一实例中,一种用于处理数据的设备,所述设备包括:图形处理单元(GPU),所述GPU包括常数存储器和着色器核心,所述着色器核心包括控制单元、多个处理元件和常数存储器,其中所述控制单元经配置以进行以下操作:从着色器编译程序接收包括前置码代码块和主要着色器代码块的着色器程序,所述前置码代码块可执行以产生一或多个结果,所述一或多个结果对于执行着色器程序的线程的多个群组中的每一个是相同的一或多个结果;引导所述多个处理元件中的至少一个在线程的多个群组的线程的第一群组上执行前置码代码块以产生一或多个结果;在常数存储器中存储前置码代码块的一或多个结果,前置码代码块的一或多个结果可由线程的多个群组中的每一个存取;以及在确定已经完成存储前置码代码块的一或多个结果中的所有的之后,使用通过执行前置码代码块产生的一或多个结果引导所述多个处理元件中的至少一个执行用于线程的多个群组中的线程的一个群组的每个线程的主要着色器代码块。
在另一实例中,一种经配置以操作图形处理单元(GPU)的设备,所述设备包括:用于从着色器编译程序接收包括前置码代码块和主要着色器代码块的着色器程序的装置,所述前置码代码块可执行以产生一或多个结果,所述一或多个结果对于执行着色器程序的线程的多个群组中的每一个是相同的一或多个结果;用于在线程的多个群组的线程的第一群组上执行前置码代码块以产生一或多个结果的装置;
用于存储前置码代码块的一或多个结果的装置,前置码代码块的一或多个结果可由线程的多个群组中的每一个存取;以及用于在确定已经完成存储前置码代码块的一或多个结果中的所有的之后使用通过执行前置码代码块产生的一或多个结果执行用于线程的多个群组中的线程的一个群组的每个线程的主要着色器代码块的装置。
在另一实例中,一种包含存储在其上的指令的非暂时性计算机可读存储媒体,当执行所述指令时,使得至少一个处理器进行以下操作:从着色器编译程序接收包括前置码代码块和主要着色器代码块的着色器程序,所述前置码代码块可执行以产生一或多个结果,所述一或多个结果对于执行着色器程序的线程的多个群组中的每一个是相同的一或多个结果;在线程的多个群组的线程的第一群组上执行前置码代码块以产生一或多个结果;在常数存储器中存储前置码代码块的一或多个结果,前置码代码块的一或多个结果可由线程的多个群组中的每一个存取;以及在确定已经完成存储前置码代码块的一或多个结果中的所有的之后,使用通过执行前置码代码块产生的一或多个结果执行用于线程的多个群组中的线程的一个群组的每个线程的主要着色器代码块。
在附图和以下描述中阐述了一或多个实例的细节。其它特征、目标和优点将从所述描述、图式以及权利要求书中显而易见。
附图说明
图1是说明根据本发明中所描述的一或多个实例技术的用于处理数据的实例装置的框图。
图2是更详细地说明图1中所说明的装置的组件的框图。
图3是说明指令集的实例的概念图。
图4是说明在GPU的着色器核心的通用寄存器(GPR)中的数据存储的实例的概念图。
图5是图1的GPU的实例着色器核心的更详细框图。
图6是说明在GPU中处理数据的实例技术的流程图。
图7是说明编译着色器程序的实例技术的流程图。
具体实施方式
例如经配置以并行地执行许多操作(例如,同时或大体上同时)的图形处理单元(GPU)的并行处理单元包含执行一或多个程序的指令的一或多个处理器核心(例如,用于GPU的着色器核心)。为易于描述,本发明中所描述的技术是相对于经配置以执行图形处理应用程序和/或通用GPU(GPGPU)应用程序的GPU进行描述的。然而,本发明中所描述的技术可以扩展到未必是GPU或GPGPU的并行处理单元,以及非并行处理单元(例如,未特定地经配置以用于并行处理的非并行处理单元)。
可以用单指令、多数据(SIMD)结构设计GPU。在SIMD结构中,着色器核心(或更一般来说,SIMD处理核心)包含多个SIMD处理元件,其中每个SIMD处理元件执行相同程序但在不同数据上的指令。在特定SIMD处理元件上执行的特定指令被称作线程或纤程。线程的群组可被称作波或线程束。执行线程束的所有处理元件一起可被称作向量处理单元,其中向量的每个通路(例如,处理元件)执行一个线程。每个SIMD处理元件可以被认为是执行不同线程,因为用于给定线程的数据可能是不同的;然而,在一个处理元件上执行的线程是与在其它处理元件上执行的指令相同的程序的相同指令。通过这种方式,SIMD结构允许GPU并行地(例如,同时)执行多个任务。
着色器(或着色器程序)是可利用并行处理环境的计算机程序(例如,着色器处理器)。绘制命令指代到与图形处理单元(例如,GPU)交互的图形应用程序接口(API)的通过处理单元(例如,CPU)执行的命令的家族中的一或多个以绘制(例如,渲染)对象以供在显示装置上显示。分派命令指代到与图形处理单元(GPU)交互的图形API的通过处理单元(例如,CPU)执行的命令的家族中的一或多个以执行非显示操作。绘制或分派命令的元素可执行相关联着色器中的冗余操作。具体地说,GPU可执行批处理命令,例如,绘制调用和分派。命令可指示GPU使用一或多个着色器来处理例如工作项、像素和顶点等元素。着色器可随后经调用用于所述元素。同一着色器可经调用用于命令的相同类型的元素。着色器的操作可针对相同类型的所有元素产生相同结果。可单次识别和执行此类操作而不需要冗余地执行用于每个元素的相同代码段。
本发明描述了方法、技术和装置,由此产生用于相同类型的所有元素的相同结果的着色器的操作经识别和调度以每个着色器类型和/或每个命令(例如,绘制或分派命令)执行一次。编译程序可以识别冗余指令并且将冗余指令分组到被称作每个着色器的前置码的代码块中。GPU可以执行每个着色器前置码一次并且在芯片上存储器(例如,随机存取存储器(RAM))中保存每个着色器前置码的冗余指令的结果。冗余指令可允许读取/写入常数RAM的使用并且在冗余指令的计算中使用的常数可以在执行冗余指令(即,每个着色器前置码)之前加载到此读取/写入常数RAM中。着色器的元素可以重新使用结果而无需再次计算相同结果。这可以显著改进性能并且降低功耗。
图1是说明根据本发明中所描述的用于产生和执行每个着色器前置码的一或多个实例技术的用于处理数据的实例装置的框图。图1说明装置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提供适用于图形处理(例如,SIMD处理器)的大规模并行处理能力的集成和/或离散逻辑电路的专用硬件。在一些例子中,GPU 14还可包含通用处理能力,并且在实施通用处理任务(即,非图形相关任务)时可被称作通用GPU(GPGPU)。
出于说明的目的,用GPU 14来描述本发明中所描述的技术。然而,本发明中所描述的技术不限于此。本发明中所描述的技术可扩展到其它类型的并行处理单元(例如,提供大规模并行处理能力的处理单元,即使未用于图形处理)。并且,本发明中所描述的技术可扩展到未经特定地配置以用于并行处理的处理单元。
处理器12可执行各种类型的应用程序。应用程序的实例包含操作系统、网络浏览器、电子邮件应用程序、电子数据表、视频游戏或产生用于显示的可视对象的其它应用程序。系统存储器16可以存储用于执行一或多个应用程序的指令。在处理器12上执行应用程序使得处理器12产生用于待显示的图像内容的图形数据。处理器12可将图像内容的图形数据发射到GPU 14以用于进一步处理。
作为一个实例,在处理器12上执行应用程序使得处理器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的着色器核心(也称作着色器处理器或内核)上执行的着色器程序(例如,顶点着色器、像素或片段着色器、曲面细分相关着色器、计算着色器等)的代码。此外,系统存储器16可以存储一或多个常数缓冲器。常数加载指令可允许编译程序38将来自系统存储器的常数加载到GPU 14的常数存储器44中。如果常数存储器44是满的,那么常数可以被加载到GPR 26(或uGPR 27)中。
本发明中使用图形项这个术语指代GPU 14执行并行处理的基本单位。GPU 14可以并行(例如,同时)处理多个图形项。举例来说,顶点着色器可以处理顶点,并且GPU 14可以并行执行顶点着色器的多个例子以同时处理多个顶点。类似地,像素或片段着色器可以处理显示器的像素,并且GPU 14可以并行执行像素着色器的多个例子以同时处理显示器的多个像素。顶点和像素是图形项的实例。对于非图形相关应用程序,术语“工作项”可指GPU 14执行处理的最小单位。
如将在下文更详细地阐释,根据本发明的各种实例,GPU 14可经配置以(例如,在每个着色器前置码中)接收GPU 14中的一个线程束(或多于多个线程束)的所有线程将在通过由处理器12执行的编译程序所识别的第一线程/线程束的执行期间执行在每个线程(多于单个或多个线程束)之间共用的指令的第一集合的指示。每个着色器前置码中的指令可能已识别用于包含在每个着色器前置码中,这是因为指令使用可以是常数和/或变量/动态的非发散输入(例如,它们是标量和/或在所有纤程/线程中是统一的)。GPU 14可随后存取来自系统存储器16的那些常数并且在GPU 14上的常数RAM中存储它们。当执行每个着色器前置码的共用指令时,GPU 14可以存取常数RAM中的常数。GPU 14可以执行共用指令。在执行每个着色器前置码的共用指令之后,GPU 14可以在读取/写入常数RAM中存储结果。在另一实例中,每个着色器前置码的结果(例如,常数值)可以存储在一或多个通用寄存器(GPR)、统一GPR(uGPR)或共享GPR(sGPR)中,存储在GPU 14上的或系统存储器16上的其它芯片上RAM中。然而,GPR、uGPR和sGPR可以在每个线程束之间被清理(即,数据无法在线程束之间在GPR中共享)并且此类数据必须在每个线程束重写到此类GPR中。GPR还可以存储用于特定线程/纤程的数据(并且可由所述特定线程/纤程存取),而uGPR可以存储用于波/线程束中的所有线程/纤程的数据(并且可由所述所有线程/纤程存取)。数据也可以存储在系统存储器16或允许线程束间数据共享的芯片上(例如,在GPU 14上)存储器中。每个着色器前置码的执行的结果可以重新用于着色器的每个元素(例如,线程)而无需第二(或更多)次复制相同结果。每个着色器前置码的执行的结果也可以重新用于着色器的多个线程束而无需第二(或更多)次复制相同结果。
图2是更详细地说明图1中所说明的装置的组件的框图。如图2中所说明,GPU 14包含:着色器核心24,其包含通用寄存器(GPR)26、统一GPR 27,以及常数存储器44;固定功能管线30;以及GPU存储器42。GPR 26可包含单个GPR、GPR文件和/或GPR库。uGPR 27可以包含单个uGPR、uGPR文件和/或uGPR库。GPR 26可以存储可由单个线程/纤程存取的数据。uGPR27可以存储可由单个波/线程束中的所有线程/纤程存取的数据。着色器核心24和固定功能管线30可一起形成用于执行图形或非图形相关功能的处理管线。处理管线执行由在GPU 14上执行的软件或固件定义的功能,且由经硬接线以执行特定功能的固定功能单元执行功能。GPU 14的此类固定功能管线30可包含纹理管线、曲面细分级、落在视见立体角外部的裁剪,以及照明。
在GPU 14上执行的软件和/或固件可以被称作着色器程序(或简单地称作着色器),且所述着色器程序可在GPU 14的着色器核心24上执行。虽然仅说明一个着色器核心24,但在一些实例中,GPU 14可包含类似于着色器核心24的两个或大于两个着色器核心。固定功能管线30包含固定功能单元。着色器核心24和固定功能管线30可自彼此发射和接收数据。举例来说,处理管线可以包含在着色器核心24上执行的着色器程序,其从固定功能管线30的一个固定功能单元接收数据,并且将经处理数据输出到固定功能管线30的另一固定功能单元。
着色器程序为用户和/或开发人员提供功能灵活性,这是因为用户可设计着色器程序以按任何可设想方式执行所期望的任务。然而,固定功能单元经针对固定功能单元执行任务的方式而硬接线。相应地,固定功能单元可不提供许多功能灵活性。
着色器程序的实例包含顶点着色器程序32、片段着色器程序34和计算着色器程序36。顶点着色器程序32和片段着色器程序34可以是用于图形相关任务的着色器程序,且计算着色器程序36可以是用于非图形相关任务的着色器程序。存在例如几何着色器和曲面细分相关着色器的着色器程序的额外实例,为了简洁起见未对它们进行描述。
在处理器12上执行的图形驱动程序40可经配置以实施应用程序编程接口(API);不过图形驱动程序40不需要受限于根据特定API经配置。在此类实例中,着色器程序(例如,顶点着色器程序32、片段着色器程序34和计算着色器程序36)可以根据图形驱动程序40所支持的API经配置。在装置10是移动装置的实例中,可以根据OpenGL ES API配置图形驱动程序40。OpenGL ES API被特定地设计成用于移动装置。在装置10是非移动装置的实例中,可以根据OpenGL API配置图形驱动程序40。其它API实例包含微软公司的API的DirectX系列。虽然未说明,但系统存储器16可存储用于图形驱动程序40的代码,处理器12从系统存储器16检索所述代码以用于执行。在虚线框中说明图形驱动程序40以指示在这个实例中,图形驱动程序40是在硬件(例如,处理器12)上执行的软件。
图形驱动程序40可经配置以允许处理器12和GPU 14彼此通信。举例来说,当处理器12将图形或非图形处理任务卸载到GPU 14时,处理器12经由图形驱动程序40将此类处理任务卸载到GPU 14。
作为一个实例,处理器12可执行产生图形数据的游戏应用程序,且处理器12可将此图形数据的处理卸载到GPU 14。在此实例中,处理器12可将图形数据存储在系统存储器16中,且图形驱动程序40可指示GPU 14何时检索所述图形数据,从系统存储器16中何处检索所述图形数据,以及何时处理所述图形数据。并且,游戏应用程序可要求GPU 14执行一或多个着色器程序。举例来说,游戏应用程序可以要求着色器核心24执行顶点着色器程序32和片段着色器程序34以产生待(例如,在图1的显示器18上)显示的图像。图形驱动程序40可以指示GPU 14何时执行着色器程序,且指示GPU 14从哪里检索着色器程序所需的图形数据。通过这种方式,图形驱动程序40可以在处理器12与GPU 14之间形成链接。
在一些实例中,系统存储器16可存储用于顶点着色器程序32、片段着色器程序34和计算着色器程序36中的一或多个的源代码。在这些实例中,在处理器12上执行的编译程序38可编译这些着色器程序的源代码,以创建GPU 14的着色器核心24在运行时间(例如,在这些着色器程序将在着色器核心24上执行的时间)期间可执行的对象或中间代码。在一些实例中,编译程序38可以预编译着色器程序,并且在系统存储器16中存储着色器程序的对象或中间代码。
根据本发明的技术,处理器12上运行的编译程序38(或在另一实例中,图形驱动程序40)可将着色器构建到包含“主要”着色器组件和“前置码”着色器组件的多个组件中。主要着色器组件可指代不包含前置码着色器组件的着色器程序的部分或全部。编译程序38可以接收代码以从在处理器12上执行的程序中编译。编译程序38也可以识别着色器中的常数加载指令和共用操作并且定位前置码着色器组件(而非主要着色器组件)内的共用操作。编译程序38可以识别这些共用指令,例如,通过共用指令中的常数(即,常数值)的排它性的使用。编译程序38可以利用例如标记着色器前置码的开始的着色器前置码起点和标记着色器前置码的末端的着色器前置码末端的指令。编译程序38可以利用SHPS(着色器前置码起点)指令以标记每个着色器前置码的开始。MAIN是如果当前波不是第一波,那么SHPS指令可以分支到(例如,到主要着色器代码块)的示例性标记。编译程序38可以利用SHPE(着色器前置码末端)指令以标记每个着色器前置码的末端。
着色器核心24可经配置以并行执行相同着色器程序的相同指令的许多例子。举例来说,图形驱动程序40可以指示GPU 14检索多个顶点的顶点值,且指示GPU 14执行顶点着色器程序32以处理所述顶点的顶点值。在此实例中,着色器核心24可执行顶点着色器程序32的多个例子,且通过针对顶点中的每一个在着色器核心24的一个处理元件上执行顶点着色器程序32的一个例子而执行此操作。
在着色器核心24上的着色器程序32、34或36的执行的第一波的处理期间,着色器核心24可以执行着色器前置码。在着色器前置码的执行中使用的常数输入可以存储在读取/写入常数存储器44(例如,常数RAM)、GPR(例如,GPR 26)或uGPR(例如,uGPR 27)中。着色器核心24的加载单元可将常数加载到常数存储器44中。到着色器核心24的加载单元的指令可以在每个着色器前置码代码块内被发现并且可允许常数从系统存储器16加载到GPU 14上的芯片上常数存储器。
在一些实例中,着色器前置码可以通过着色器核心24上的标量处理器(例如,单个算术逻辑单元(ALU))执行。在其它实例中,着色器前置码可以通过着色器核心24的并行处理元件(有时被称作向量处理器)执行。着色器前置码的执行可以引起常数值或值的集合。常数值前置码结果可以存储在例如uGPR 27的芯片上存储器、常数存储器44(例如,常数RAM)、GPU存储器42或系统存储器16中。常数存储器44可以包含可由着色器核心24的所有元件存取的存储器而非仅保留用于特定线程束或线程的特定部分,例如,保存在uGPR 27或GPR 26中的值。常数存储器44也可以在线程束之间持久地存储数据而非需要在每个线程束之前重新加载数据。在着色器的执行的后续线程束的执行期间,在着色器程序32、34或36的执行的第一线程束期间计算出的常数值(即,前置码结果)可以从常数存储器44中检索而非执行冗余码。GPU 14可以确保仅着色器的第一线程束执行着色器前置码。GPU 14可以确保仅着色器的第一线程束经由芯片上内部状态寄存器、常数存储器44或GPU存储器42中的旗标执行着色器前置码。GPU 14也可以追踪开始着色器前置码的执行的线程束为第一线程束。标示当前线程束为第一线程束(或在另一实例中,标示它不是第一线程束)的旗标可以通过GPU 14存储为芯片上内部状态寄存器、常数存储器44或GPU存储器42中的值。GPU 14也可以追踪第一线程束是否已经完成着色器前置码指令的执行。标示第一线程束已经(或在另一实例中,尚未)完成着色器前置码指令的执行的旗标可以通过GPU 14存储在芯片上内部状态寄存器、常数存储器44或GPU存储器42中。着色器核心24可以利用这些旗标来确定是执行着色器前置码(例如,如果这是第一线程束和/或前置码先前尚未被执行)还是不执行着色器前置码(例如,如果这不是第一线程束和/或前置码先前已经被执行)。着色器核心24也可以延迟着色器程序32、34或36的线程的第二线程束的执行直至完成着色器前置码的执行以及通过GPU 14将前置码的常数结果加载在常数存储器44、GPU存储器42或uGPR 27中。
在一个实例中,每种类型的着色器核心24可以存取存储在芯片上内部状态寄存器中的情境(例如,旗标)位。着色器核心24可能具有1位preamble_token_taken情境位,所述位可以指示当前线程束是/不是第一线程束和/或着色器核心24上的线程束(或没有线程束)已经开始执行前置码。当加载特定类型的着色器(例如,着色器核心24)时这些位都可以初始化到虚假。举例来说,在给定着色器核心24或着色器类型中执行SHPS(例如,着色器前置码起点)指令的第一线程束发现preamble_token_taken旗标为虚假。着色器核心24将preamble_token_taken旗标设置为真实。当第一线程束执行SHPE(例如,着色器前置码末端)指令时,着色器核心24设置preamble_completed旗标为真实。着色器核心24将随后继续执行来自主要着色器指令标记的代码。在非第一线程束中,preamble_token_taken旗标可以设置为真实。所有后续线程束分支到主要代码段(例如,MAIN标签)并且在此处等待直至preamble_completed旗标从虚假变为真实。当preamble_completed旗标从虚假变为真实时,着色器核心24执行后续波。
图3是示出包含着色器前置码39的指令集37的概念图。在此实例中,着色器前置码39包括着色器前置码起点(SHPS)指令。如果preamble_token_taken旗标被设置为真实仅允许着色器前置码被单次执行,那么着色器前置码起点指令将分支到“Label_MAIN”标记(例如,在主要着色器指令41中)。当preamble_token_taken旗标被设置为虚假时指令也可以指示着色器核心24将preamble_token_taken旗标设置为真实。
指令(例如,ADD z,y,x指令)说明着色器代码中的冗余指令。指令可以被执行(例如,“ADD z,y,x;”将在“x”和“y”中的值添加在一起并且在“z”中存储所得值)。冗余指令中的每一个类似地被执行。经由例如将数据存储到常数存储器指令中(例如,“STC c[5],z;”将在“z”中值的存储到常数RAM位置5中)而保存到常数存储器44。冗余值也可以被移动到uGPR 27或GPR 26。
下一个示例性指令可以经由例如加载常数指令(例如,“LDC c[10],索引,CB1,4;”将来自常数缓冲器(CB)1的4个常数加载到在位置10处开始的常数RAM中)将来自常数缓冲器的多个常数加载到常数存储器44中。着色器前置码39通过着色器前置码末端指令(SHPE)闭合。在某些实施方案中,在着色器程序32、34或36中可能仅存在单个着色器前置码起点和着色器前置码末端指令。在着色器前置码39之后是主要着色器指令41。
着色器前置码39中的指令可以包含产生用于着色器的所有线程的相同结果(例如,因为此类指令仅在常数值上操作)且并不在着色器执行的线程束之间改变的指令。这些指令可以通过编译程序38来识别。
着色器前置码39随后仅被单次执行而无论着色器程序32、34或36的执行的线程束的数目如何。主要着色器指令41针对每个线程束被单独地执行。在着色器前置码39的执行中产生的结果可以在主要着色器指令41的执行中被利用并且存储在常数存储器44中。在执行时,着色器核心24可以利用多种旗标来确定着色器前置码39是否已经被执行并且因此并不需要第二次执行着色器前置码39的前置码代码以及确定着色器前置码39的执行的结果存储在常数存储器44内的何处。多种旗标可以包含标示当前线程束是第一线程束(或在另一实例中,它不是第一线程束)的旗标以及标示第一线程束已经完成(或在另一实例中,尚未完成)着色器前置码指令的执行的旗标。这些旗标可以通过GPU 14存储在芯片上内部状态寄存器、常数存储器44或GPU存储器42中。
虽然着色器前置码39被说明为在主要着色器指令41之前在着色器代码37的开始中,但是着色器前置码39可以穿插在着色器代码37内部仅通过着色器前置码起点指令(例如,SHPS)和着色器前置码末端指令(SHPE)划定界限。此外,着色器前置码可以在控制流内部。如果着色器前置码在控制流内部,那么执行前置码的波可能并不是着色器的第一波。
图4是说明GPU的着色器核心的GPR中的数据存储装置的实例的概念图。如所说明,GPU 14包含着色器核心24,且着色器核心24包含GPR 26。作为一个实例,着色器核心24可以包含三十二个处理元件,且每个处理元件可以执行着色器程序的一个例子以处理一个图形项。GPR 26可以存储用于图形项的数据。举例来说,GPR 26可以存储用于三十二个图形项的九个属性的属性数据。然而,GPR 26可以存储用于三十二个图形项的多于或少于九个属性的数据。并且,GPR 26可以存储与图形项的属性无关联但是为用于处理图形项所需的变量的数据的数据。
在图4中说明的实例中,图形项被识别为P0-P31,其可以是顶点。通过图形项识别符之后的变量识别属性。举例来说,P0.X指代P0图形项的x坐标,P0.Y指代P0图形项的y坐标等等。P0.R、P0.G、P0.B和P0A分别指代P0图形项的红色分量、绿色分量、蓝色分量和不透明度。类似地识别其它图形项(例如,P1-P31)。
换句话说,在图4中,顶点P0-P31各自与多个变量相关联。作为一个实例,顶点P0-P31中的每一个与识别x坐标(P0.X到P31.X)的变量相关联。顶点P0-P31中的每一个与识别y坐标(P0.Y到P31Y)的变量相关联等等。处理所述多个图形项中的每一个需要这些变量中的每一个。举例来说,处理顶点P0-P31中的每一个需要识别x坐标的变量。
同样如图4中所说明,图形项中的每一个还包含PRJ属性。PRJ属性是在着色器核心24的处理元件上执行的顶点着色器可以利用的投影矩阵。在此实例中,PRJ属性是处理顶点P0-P31中的每一个所需的另一变量。举例来说,顶点着色器可以用相应的坐标乘以投影矩阵(例如,用P0.X、P0.Y、P0.Z和P0.W乘以P0.PRJ)。
应理解,可存在GPU 14可以在其中存储数据(例如,值)的各种单元。GPU 14可以在系统存储器16中存储数据,或可以在本地存储器(例如,高速缓冲存储器)中存储数据。着色器核心24的GPR 26不同于系统存储器16和GPU 14的本地存储器两者。举例来说,系统存储器16可由装置10的各种组件存取,且这些组件使用系统存储器16来存储数据。GPU 14的本地存储器可由GPU 14的各种组件存取,且这些组件使用GPU 14的本地存储器来存储数据。然而,GPR 26可以仅可由着色器核心24的组件存取,或者可以仅存储用于着色器核心24的处理元件的数据。
在一些实例中,图形线程束中的图形项的一或多个变量跨越图形线程束是统一的。在此类实例中,并非在GPR 26中存储用于每个线程/纤程的单独项中的一或多个变量的统一数据,GPU 14可以在可由线程束/波中的所有线程/纤程存取的uGPR 27中或在常数存储器44中单次存储统一数据。
在一个实例中,uGPR 27可包含多个存储位置,其中每个存储位置与图形项的多个属性中的一个属性相关联。举例来说,如图4中所说明,每个图形项P0-P31包含九个属性(PRJ、x、y、z、w、R、G、B和A)。在此实例中,uGPR 27可以包含九个存储位置,其中uGPR 27的第一位置与PRJ属性相关联,uGPR 27的第二位置与x坐标相关联等等。同样,uGPR 27中的数据可供线程束的每个线程使用。
常数可以存储在系统存储器中的常数缓冲器中。可以利用常数加载指令以允许编译程序将来自系统存储器的常数加载到常数存储器44中。如果常数存储器44是满的,那么常数也可以存储在GPR 26和uGPR 27中。
传统地,没有数据可以保存在线程束之间。在一些实例中,GPR 26和uGPR 27是针对每个波重新加载或重新计算的。常数存储器44可以在线程束之间保存。然而,着色器核心24可以存取前置码指令并且在第一线程束期间执行它们。在已经执行指令之后,后续线程束可以存取在常数存储器44中的这些指令的结果。
图5是说明可用于实施本发明的统一谓词的技术的GPU 14的实例配置的框图。GPU14经配置以按并行方式执行用于程序的指令。GPU 14包含着色器核心24,所述着色器核心包含控制单元72、处理元件74A-74D(统称为“处理元件74”)、指令存储装置76、GPR 26、常数存储器44、uGPR 27、状态寄存器92、通信路径80、82、84、86A-86D,以及加载单元90。通信路径86A-86D可被统称为“通信路径86”。在一些实例中,GPU 14可经配置为单指令多数据(SIMD)处理系统,所述处理系统经配置以使用处理元件74执行用于程序(例如,着色器)的线程束的多个执行线程。在此SIMD系统中,相对于不同数据项处理元件74可一起一次处理单个指令。在完成执行与程序相关联的所有线程之后,可退出程序。
控制单元72经由通信路径80以通信方式耦合到指令存储装置76,经由通信路径82耦合到处理元件74,并经由通信路径84耦合到GPR 26。控制单元72可使用通信路径80以将读取指令发送到指令存储装置76。读取指令可指定指令存储装置76中指令应检索的指令地址。响应于发送读取指令,控制单元72可从指令存储装置76接收一或多个程序指令。控制单元72可以从指令存储装置76中读取着色器前置码39和主要着色器指令41。控制单元72可以确定先前是否已经执行前置码(经由存储在芯片上状态寄存器92、uGPR 27或GPR 26中的旗标)。控制单元可以确定当前线程束是否是第一线程束(经由存储在芯片上状态寄存器92、uGPR 27或GPR 26中的旗标)。当基础状态改变时(例如,前置码已经被执行和/或当前线程束不是第一线程束)控制单元72也可以改变前述旗标。通过控制单元72使用前述旗标可以确保前置码代码仅被执行单次并且在前置码已经完成执行之前没有后续(例如,第二、第三等)线程束可以开始。控制单元72可以使用通信路径82以将指令提供到处理元件74,并且在一些实例中,从处理元件74接收数据,例如,用于评估分支条件的比较指令的结果。在一些实例中,控制单元72可以使用通信路径84以从状态寄存器92、uGPR 27、GPR 26或常数存储器44中检索数据项值,例如,以确定分支条件。虽然图5将GPU 14说明为包含通信路径84,但在其它实例中,GPU 14可不包含通信路径84。
常数值可以最初存储在系统存储器16中的常数缓冲器中。加载单元90可以经由来自控制单元72、编译程序38和/或图形驱动程序40的指令将来自系统存储器16中的常数缓冲器的常数值加载到常数存储器44、uGPR 27或GPR 26。如果分配在常数存储器44中的空间是满的,那么加载单元90可经配置以在uGPR 27中加载常数。
处理元件74中的每一个可经配置以处理用于存储在指令存储装置76中的程序的指令。在一些实例中,处理元件74中的每一个可经配置以执行相同操作集合。举例来说,处理元件74中的每一个可实施相同指令集架构(ISA)。在额外实例中,处理元件74中的每一个可以是算术逻辑单元(ALU)。在其它实例中,GPU 14可经配置为向量处理器,且处理元件74中的每一个可以是向量处理器内的处理元件。在额外实例中,GPU 14可以是SIMD执行单元,且处理元件74中的每一个可以是SIMD执行单元内的SIMD处理元件。
通过处理元件74执行的运算可包含算术运算、逻辑运算、比较运算等。算术运算可包含例如加法运算、减法运算、乘法运算等运算。算术运算还可包含例如整数算术运算和/或浮点算术运算。逻辑运算可包含例如逐位“与”运算、逐位“或”运算、逐位“异或”运算等的运算。比较运算可以包含例如大于运算、小于运算、等于零运算、不等于零运算等运算。大于运算和小于运算可确定第一数据项是否大于或小于第二数据项。等于零运算和不等于零运算可确定数据项是否等于零或不等于零。用于运算的操作数可存储在包含于GPR 26或uGPR27中的寄存器中。
处理元件74中的每一个可经配置以响应于经由通信路径82从控制单元72接收到指令而执行操作。在一些实例中,处理元件74中的每一个可经配置以独立于其它处理元件74地经激活和/或去激活。在此类实例中,当相应的处理元件74A-74D被激活时处理元件74中的每一个可经配置以响应于从控制单元72接收到指令而执行操作,并且当相应的处理元件74A-74D被去激活(即,不被激活)时处理元件74中的每一个可经配置以响应于从控制单元72接收到指令而不执行操作。
处理元件74A-74D中的每一个可经由相应通信路径86A-86D以通信方式耦合到GPR26。处理元件74可经配置以从GPR 26、uGPR 27和/或常数存储器44中检索数据并且经由通信路径86、uGPR 27和/或常数存储器44将数据存储到GPR 26。在一些实例中,从GPR 26、uGPR 27和/或常数存储器44中检索的数据可以是用于通过处理元件74执行的操作的操作数。在一些实例中,存储在GPR 26、uGPR 27和/或常数存储器44中的数据可以是通过处理元件74执行的操作的结果。
指令存储装置76经配置以存储程序,以供GPU 14执行。程序可存储为指令序列。这些指令可以包含着色器前置码39和主要着色器指令41。在一些实例中,每一指令可由唯一指令地址值寻址。在此类实例中,指令序列中的稍后指令的指令地址值大于指令序列中的较前指令的指令地址值。在一些实例中,程序指令可以是机器级指令。也就是说,在此类实例中,指令可呈对应于GPU 14的ISA的格式。指令存储装置76经配置以经由通信路径80从控制单元72接收读取指令。读取指令可指定指令地址,应从所述指令地址中检索指令。响应于接收读取指令,指令存储装置76可经由通信路径80将对应于读取指令中所指定的指令地址的指令提供到控制单元72。
指令存储装置76可以是任何类型的存储器、高速缓冲存储器或其组合。当指令存储装置76是高速缓冲存储器时,指令存储装置76可以高速缓存存储在GPU 14外部的程序存储器中的程序。虽然指令存储装置76被说明为在GPU 14内,但是在其它实例中,指令存储装置76可以在GPU 14外部。
GPR 26经配置以存储由处理元件74使用的数据项。在一些实例中,GPR 26可以包括多个寄存器,每个寄存器经配置以在GPU 14上操作的多个数据项内存储相应的数据项。GPR 26可以耦合到经配置以在GPR 26中的寄存器与存储器或高速缓冲存储器(未示出)之间传递数据的一或多个通信路径(未示出)。
uGPR 27经配置以存储供处理元件74使用的数据项,并且uGPR 27内的每个存储器元件经配置以可由波/线程束的多个处理元件(例如,线程/纤程)存取。
状态寄存器92、uGPR 27或GPR 26可以存储供控制单元72使用的多个旗标。存储在状态寄存器92、uGPR 27或GPR 26中的旗标可以包含标示前置码先前已经被执行的旗标。此旗标可允许控制单元72在着色器前置码39已经完全被执行并且执行的结果存储在常数存储器44、uGPR 27和/或GPR 26中之后对在线程束中的线程的处理的开始计时。标示前置码先前已经被执行的旗标可以最初在状态寄存器92、uGPR 27或GPR 26中被设置成“关闭”。状态寄存器92、uGPR 27或GPR 26还可包含旗标以标示当前线程束是第一线程束。标示当前线程束是第一线程束的旗标可以最初被设置成“开启”。
虽然图5说明用于存储供处理元件74使用的数据的单个GPR 26,但是在其它实例中,GPU 14可以包含用于处理元件74中的每一个的单独的专用的数据存储装置。出于示例性目的,GPU 14说明四个处理元件74。在其它实例中,GPU 14可具有呈相同或不同配置的更多个处理元件。
控制单元72经配置以控制GPU 14执行用于存储在指令存储装置76中的程序的指令。对于程序的每一指令或指令集,控制单元72可经由通信路径80从指令存储装置76中检索指令,并且处理所述指令。在一些实例中,控制单元72可通过使得在处理元件74中的一或多个上执行与指令相关联的操作而处理指令。举例来说,通过控制单元72检索到的指令可以是算术指令,所述算术指令指示GPU 14关于由指令指定的数据项执行算术运算;并且控制单元72可使得处理元件74中的一或多个在指定数据项上执行算术运算。在其它实例中,控制单元72可在无需使得在处理元件74上执行操作的情况下处理指令。
控制单元72可通过经由通信路径82将指令提供到处理元件74而使得在处理元件74中的一或多个上执行操作。所述指令可指定待通过处理元件74执行的操作。提供到处理元件74中的一或多个的指令可与从指令存储装置76中检索到的指令相同或不同。在一些实例中,控制单元72可通过激活处理元件74的特定子集(在它上面应执行操作)和去激活处理元件74的另一子集(在它上面不应执行操作)中的一个或两个而使得在处理元件74的特定子集(包含单个处理元件)上执行操作。控制单元72可以通过经由通信路径82将相应的激活和/或去激活信号提供到处理元件74中的每一个而激活和/或去激活处理元件74。在一些实例中,控制单元72可通过将激活和/或去激活信号提供到处理元件74结合将指令提供到处理元件74而激活和/或去激活处理元件74。在其它实例中,控制单元72可在将指令提供到处理元件74之前激活和/或去激活处理元件74。控制单元72可使用处理元件74执行用于程序的多个执行线程。并行地执行的多个线程有时被称作线程束。处理元件74中的每一个可经配置以针对多个线程中的相应的线程而处理程序的指令。举例来说,控制单元72可将每一执行线程分配到处理元件74中的单独的一个以用于处理。相对于数据项集合中的不同数据项,用于程序的执行线程可执行相同指令集。举例来说,处理元件74A可相对于多个数据项中的第一数据项子集执行用于存储在指令存储装置76中的程序的第一执行线程,并且处理元件74B可相对于多个数据项中的第二数据项子集执行用于存储在指令存储装置76中的程序的第二执行线程。第一执行线程可以包含与第二执行线程相同的指令,但第一数据项子集可不同于第二数据项子集。处理元件74可以执行主要着色器指令41。处理元件74可以执行着色器前置码39。在另一实例中,着色器核心24可以经由通信路径88利用单独的标量处理单元94,以执行着色器前置码39的指令。
标量处理单元94可以是经配置以一次在一个数据项上操作的任何类型的处理器。与处理元件74相似,标量处理单元94可包含ALU。通过标量处理单元94执行的运算可包含算术运算、逻辑运算、比较运算等。算术运算可包含例如加法运算、减法运算、乘法运算、除法运算等的运算。算术运算还可包含例如整数算术运算和/或浮点算术运算。逻辑运算可包含例如逐位“与”运算、逐位“或”运算、逐位“异或”运算等的运算。比较运算可以包含例如大于运算、小于运算、等于零运算、不等于零运算等运算。大于运算和小于运算可确定第一数据项是否大于或小于第二数据项。等于零运算和不等于零运算可确定数据项是否等于零或不等于零。用于运算的操作数可存储在包含于GPR 26中的寄存器中。
当执行参考前置码指令的结果的着色器指令时,从GPR 26中检索(常数)结果而不是再次执行着色器前置码指令。
图6是说明根据本发明的技术的实例方法的流程图。图6的技术可由GPU 14和/或处理器12(参看图1和2)中的一或多个实施。
在本发明的一个实例中,GPU 14可经配置以从着色器编译程序38接收包括前置码代码块和主要着色器代码块的着色器程序(100)。前置码代码块可执行以产生一或多个结果,一或多个结果可以是对于执行着色器程序的线程的多个群组(例如,波/线程束)中的每一个相同的一或多个结果。GPU 14可以进一步经配置以执行前置码代码块以产生一或多个结果(102)。前置码代码块可以通过在GPU 14上的标量处理单元94执行。前置码代码块可以被评估为常数值。
GPU 14可以进一步经配置以存储前置码代码块的一或多个结果(104)。所述结果可以存储在芯片上随机存取存储器(RAM)中。芯片上RAM可以是可由线程的多个群组中的每一个存取并且可以是可由着色器核心24的所有处理元件存取。芯片上RAM可以是可由GPU14存取而不存取主要总线。芯片上RAM可以包含可写入缓冲器管理的高速缓冲存储器。在确定GPU 14已经完成存储着色器的线程的多个群组共用的指令的代码块的结果之后,GPU 14可经配置以使用通过执行前置码代码块产生的一或多个结果执行用于线程的多个群组中的线程的一个群组的每个线程的主要着色器代码块(106)。在本发明的一个实例中,GPU 14可经配置以基于识别着色器前置码起点指令识别前置码代码块。
在本发明的其它实例中,GPU 14可经配置以追踪前置码代码块是否已经由允许着色器执行线程的多个群组的线程的后续群组的线程的第一群组执行。GPU 14还可经配置以追踪线程的多个群组的线程的任何群组是否已经在线程的第一群组之前被执行以至少部分确定先前是否已经执行前置码代码块。GPU 14还可经配置以追踪前置码代码块是否已经被执行以至少部分确定是否执行前置码代码块。在本发明的额外实例中,GPU 14可经配置以将来自位于系统RAM(例如,不是芯片上RAM)中的常数缓冲器的前置码代码块的一或多个结果加载到芯片上常数存储器中。
在处理器12上运行的着色器编译程序(例如,编译程序38)可以识别可执行以产生与用于执行着色器程序的线程的多个群组中的每一个的一或多个结果相同的一或多个结果的指令的代码块。在处理器12上运行的着色器编译程序(例如,编译程序38)也可以将指令的代码块分组到着色器程序的前置码代码块中。此类分组可由GPU 14使用。着色器指令的线程的多个群组共用的指令的代码块的识别可以包含识别被评估为常数的指令。可识别的代码块可以被组织到前置码代码中。前置码代码可经配置以由线程的多个群组的线程的第一群组执行。被执行的前置码代码的一或多个结果可以是可由线程的多个群组的其它群组使用的。
图7是说明根据本发明的技术的实例方法的流程图。图7的技术可由GPU 14和/或处理器12(参看图1和2)中的一或多个实施。
在处理器12上执行的编译程序38可以接收着色器代码(200)。在处理器12上执行的编译程序38可以识别被评估为常数的指令(202)。在处理器12上执行的编译程序38可以将指令分组到着色器前置码中(204)。着色器前置码可以通过着色器前置码起点和着色器前置码末端命令划定界限。在处理器12上执行的编译程序38可以将着色器代码中的指令转换成目标代码(206)。此类目标代码经配置以在GPU 14上运行。在处理器12上执行的编译程序38可以将目标代码发送到GPU 14以用于在着色器核心24上执行。
在一或多个实例中,所描述的功能可在硬件、软件、固件或其任何组合中实施。如果在软件中实施,那么所述功能可以作为一或多个指令或代码存储在计算机可读媒体上或经由计算机可读媒体发射,并且通过基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体,其对应于例如数据存储媒体的有形媒体。以此方式,计算机可读媒体通常可以对应于非暂时性的有形的计算机可读存储媒体。数据存储媒体可以是可由一或多个计算机或一或多个处理器存取以检索用于实施本发明中描述的技术的指令、代码和/或数据结构的任何可用媒体。计算机程序产品可以包含计算机可读媒体。
借助于实例而非限制,此类计算机可读存储媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器,或可用于存储呈指令或数据结构形式的所期望的程序代码且可由计算机存取的任何其它媒体。应理解,计算机可读存储媒体和数据存储媒体并不包含载波、信号或其它暂时性媒体,而是替代地涉及非暂时性有形存储媒体。如本文中所使用,磁盘和光盘包含压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软性磁盘及蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘用激光以光学方式再现数据。以上各项的组合也应包含于计算机可读媒体的范围内。
指令可以由一或多个处理器执行,所述一或多个处理器例如是一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效的集成或离散逻辑电路。相应地,如本文中所使用的术语“处理器”可指代上述结构或适用于实施本文中所描述的技术的任何其它结构中的任一者。另外,在一些方面中,本文中所描述的功能性可在经配置以用于编码和解码的专用硬件和/或软件模块内提供,或并入在组合编解码器中。并且,所述技术可完全实施于一或多个电路或逻辑元件中。
本发明的技术可以在多种多样的装置或设备中实施,包含无线手持机、集成电路(IC)或IC的集合(例如,芯片组)。本发明中描述各种组件、模块或单元是为了强调经配置以执行所公开的技术的装置的功能性方面,但未必需要由不同硬件单元实现。实际上,如上文所描述,各种单元可结合合适的软件和/或固件组合在编解码器硬件单元中,或通过互操作硬件单元的集合来提供,所述硬件单元包含如上文所描述的一或多个处理器。
已经描述了各种实例。这些和其它实例在所附权利要求书的范围内。
Claims (30)
1.一种操作图形处理单元GPU的方法,其包括:
通过所述GPU从着色器编译程序接收包括前置码代码块和主要着色器代码块的着色器程序,所述前置码代码块可执行以产生一或多个结果,所述一或多个结果对于执行所述着色器程序的线程的多个群组中的每一个是相同的一或多个结果;
通过所述GPU在线程的所述多个群组的线程的第一群组上执行所述前置码代码块以产生所述一或多个结果;
通过所述GPU存储所述前置码代码块的所述一或多个结果,所述前置码代码块的所述一或多个结果可由线程的所述多个群组中的每一个存取;以及
在确定已经完成存储所述前置码代码块的所述一或多个结果中的所有结果之后,通过所述GPU使用通过执行所述前置码代码块产生的所述一或多个结果执行用于线程的所述多个群组中的线程的一个群组的每个线程的所述主要着色器代码块。
2.根据权利要求1所述的方法,其进一步包括:
通过在处理器上运行的所述着色器编译程序识别可执行以产生对于执行所述着色器程序的线程的多个群组中的每一个是相同的一或多个结果的所述一或多个结果的指令的代码块;以及
通过在所述处理器上运行的所述着色器编译程序将指令的所述代码块分组到所述着色器程序的所述前置码代码块中。
3.根据权利要求2所述的方法,其中所述识别指令的所述代码块包括识别被评估为常数的指令。
4.根据权利要求1所述的方法,其进一步包括:
基于识别着色器前置码起点指令识别所述前置码代码块。
5.根据权利要求1所述的方法,其进一步包括:
追踪所述前置码代码块是否已经由允许所述GPU执行线程的所述多个群组的线程的后续群组的线程的所述第一群组执行。
6.根据权利要求1所述的方法,其进一步包括:
追踪线程的所述多个群组的线程的任何群组是否已经在线程的所述第一群组之前被执行以至少部分确定先前是否已经执行所述前置码代码块。
7.根据权利要求1所述的方法,其进一步包括:
追踪所述前置码代码块是否已经被执行以至少部分确定是否执行所述前置码代码块。
8.根据权利要求1所述的方法,其中所述执行所述前置码代码块是通过在所述GPU上的标量处理器执行的。
9.根据权利要求1所述的方法,其中所述存储所述一或多个结果是在可写入缓冲器管理的高速缓冲存储器上。
10.根据权利要求1所述的方法,其中所述存储所述一或多个结果可由着色器处理器的所有处理元件存取。
11.根据权利要求1所述的方法,其中所述前置码代码块被评估为一或多个常数结果。
12.根据权利要求1所述的方法,其进一步包括:
通过所述GPU将来自随机存取存储器RAM的所述前置码代码块的所述一或多个结果加载到常数存储器中。
13.一种用于处理数据的设备,所述设备包括:
图形处理单元GPU,所述GPU包括存储器和着色器核心,所述着色器核心包括控制单元、多个处理元件和常数存储器,其中所述控制单元经配置以进行以下操作:
从着色器编译程序接收包括前置码代码块和主要着色器代码块的着色器程序,所述前置码代码块可执行以产生一或多个结果,所述一或多个结果对于执行所述着色器程序的线程的多个群组中的每一个是相同的一或多个结果;
引导所述多个处理元件中的至少一个在线程的所述多个群组的线程的第一群组上执行所述前置码代码块以产生所述一或多个结果;
在所述常数存储器中存储所述前置码代码块的所述一或多个结果,所述前置码代码块的所述一或多个结果可由线程的所述多个群组中的每一个存取;以及
在确定已经完成存储所述前置码代码块的所述一或多个结果中的所有结果之后,使用通过执行所述前置码代码块产生的所述一或多个结果引导所述多个处理元件中的至少一个执行用于线程的所述多个群组中的线程的一个群组的每个线程的所述主要着色器代码块。
14.根据权利要求13所述的设备,其进一步包括处理器,其中所述处理器经配置以进行以下操作:
识别可执行以产生对于执行所述着色器程序的线程的多个群组中的每一个是相同的一或多个结果的所述一或多个结果的指令的代码块;以及
将指令的所述代码块分组到所述着色器程序的所述前置码代码块中。
15.根据权利要求14所述的设备,其中所述识别指令的所述代码块包括识别被评估为常数的指令。
16.根据权利要求13所述的设备,其中所述控制单元进一步经配置以进行以下操作:
基于识别着色器前置码起点指令识别所述前置码代码块。
17.根据权利要求13所述的设备,其中所述控制单元进一步经配置以进行以下操作:
追踪所述前置码代码块是否已经由允许所述GPU执行线程的所述多个群组的线程的后续群组的线程的所述第一群组执行。
18.根据权利要求13所述的设备,其中所述控制单元进一步经配置以进行以下操作:
追踪线程的所述多个群组的线程的任何群组是否已经在线程的所述第一群组之前被执行以至少部分确定先前是否已经执行所述前置码代码块。
19.根据权利要求13所述的设备,其中所述控制单元进一步经配置以进行以下操作:
追踪所述前置码代码块是否已经被执行以至少部分确定是否执行所述前置码代码块。
20.根据权利要求13所述的设备,其中所述执行所述前置码代码块是通过所述多个处理元件的标量处理器执行的。
21.根据权利要求13所述的设备,其中所述所存储的一或多个结果可由所述着色器核心的所有处理元件存取。
22.一种经配置以操作图形处理单元GPU的设备,所述设备包括:
用于从着色器编译程序接收包括前置码代码块和主要着色器代码块的着色器程序的装置,所述前置码代码块可执行以产生一或多个结果,所述一或多个结果对于执行所述着色器程序的线程的多个群组中的每一个是相同的一或多个结果;
用于在线程的所述多个群组的线程的第一群组上执行所述前置码代码块以产生所述一或多个结果的装置;
用于存储所述前置码代码块的所述一或多个结果的装置,所述前置码代码块的所述一或多个结果可由线程的所述多个群组中的每一个存取;以及
用于在确定已经完成存储所述前置码代码块的所述一或多个结果中的所有结果之后使用通过执行所述前置码代码块产生的所述一或多个结果执行用于线程的所述多个群组中的线程的一个群组的每个线程的所述主要着色器代码块的装置。
23.根据权利要求22所述的设备,其进一步包括:
用于识别可执行以产生对于执行所述着色器程序的线程的多个群组中的每一个是相同的一或多个结果的所述一或多个结果的指令的代码块的装置;以及
用于将指令的所述代码块分组到所述着色器程序的所述前置码代码块中的装置。
24.根据权利要求22所述的设备,其进一步包括:
用于基于识别着色器前置码起点指令识别所述前置码代码块的装置。
25.根据权利要求22所述的设备,其进一步包括:
用于追踪所述前置码代码块是否已经由允许所述GPU执行线程的所述多个群组的线程的后续群组的线程的所述第一群组执行的装置。
26.根据权利要求22所述的设备,其进一步包括:
用于追踪线程的所述多个群组的线程的任何群组是否已经在线程的所述第一群组之前被执行以至少部分确定先前是否已经执行所述前置码代码块的装置。
27.根据权利要求22所述的设备,其进一步包括:
用于追踪所述前置码代码块是否已经被执行以至少部分确定是否执行所述前置码代码块的装置。
28.根据权利要求22所述的设备,其中所述前置码代码块被评估为一或多个常数结果。
29.根据权利要求22所述的设备,其进一步包括:
用于将来自随机存取存储器RAM的所述前置码代码块的所述一或多个结果加载到常数存储器中的装置。
30.一种包含存储在上面的指令的非暂时性计算机可读存储媒体,所述指令在被执行时使得至少一个处理器进行以下操作:
从着色器编译程序接收包括前置码代码块和主要着色器代码块的着色器程序,所述前置码代码块可执行以产生一或多个结果,所述一或多个结果对于执行所述着色器程序的线程的多个群组中的每一个是相同的一或多个结果;
在线程的所述多个群组的线程的第一群组上执行所述前置码代码块以产生所述一或多个结果;
在常数存储器中存储所述前置码代码块的所述一或多个结果,所述前置码代码块的所述一或多个结果可由线程的所述多个群组中的每一个存取;以及
在确定已经完成存储所述前置码代码块的所述一或多个结果中的所有结果之后,使用通过执行所述前置码代码块产生的所述一或多个结果执行用于线程的所述多个群组中的线程的一个群组的每个线程的所述主要着色器代码块。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/162,272 | 2016-05-23 | ||
US15/162,272 US9799089B1 (en) | 2016-05-23 | 2016-05-23 | Per-shader preamble for graphics processing |
PCT/US2017/026835 WO2017204909A1 (en) | 2016-05-23 | 2017-04-10 | Per-shader preamble for graphics processing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109074625A true CN109074625A (zh) | 2018-12-21 |
CN109074625B CN109074625B (zh) | 2020-04-24 |
Family
ID=58664778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780028782.1A Active CN109074625B (zh) | 2016-05-23 | 2017-04-10 | 用于图形处理的每个着色器的前置码 |
Country Status (9)
Country | Link |
---|---|
US (1) | US9799089B1 (zh) |
EP (1) | EP3465606A1 (zh) |
JP (2) | JP6911055B2 (zh) |
KR (1) | KR101973924B1 (zh) |
CN (1) | CN109074625B (zh) |
BR (1) | BR112018073898A2 (zh) |
HK (1) | HK1258710A1 (zh) |
SG (1) | SG11201808972SA (zh) |
WO (1) | WO2017204909A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10186069B2 (en) * | 2017-02-15 | 2019-01-22 | Arm Limited | Methods and systems for grouping and executing initial pilot shader programs |
US10891708B1 (en) | 2019-11-25 | 2021-01-12 | Arm Limited | Shader program execution in graphics processing |
US20230102767A1 (en) * | 2021-09-29 | 2023-03-30 | Advanced Micro Devices, Inc. | System and methods for efficient execution of a collaborative task in a shader system |
US11966726B2 (en) * | 2022-02-25 | 2024-04-23 | International Business Machines Corporation | Operating system (OS) scheduler and compiler for code generation optimization in a (simultaneous multi-threading) SMT enabled CPU |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060170680A1 (en) * | 2005-01-28 | 2006-08-03 | Microsoft Corporation | Preshaders: optimization of GPU programs |
US20140354669A1 (en) * | 2013-05-30 | 2014-12-04 | Arm Limited | Graphics processing |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6885374B2 (en) | 2001-06-29 | 2005-04-26 | Intel Corporation | Apparatus, method and system with a graphics-rendering engine having a time allocator |
JP4202033B2 (ja) * | 2001-09-05 | 2008-12-24 | 三菱電機株式会社 | 並列画像処理装置および並列画像処理方法 |
JP4335516B2 (ja) * | 2001-12-04 | 2009-09-30 | パナソニック株式会社 | 複数のプロセッサを用いた動画像符号化装置およびその方法 |
US8154554B1 (en) * | 2006-07-28 | 2012-04-10 | Nvidia Corporation | Unified assembly instruction set for graphics processing |
US8325177B2 (en) | 2008-12-29 | 2012-12-04 | Microsoft Corporation | Leveraging graphics processors to optimize rendering 2-D objects |
US9256915B2 (en) * | 2012-01-27 | 2016-02-09 | Qualcomm Incorporated | Graphics processing unit buffer management |
US9019289B2 (en) * | 2012-03-07 | 2015-04-28 | Qualcomm Incorporated | Execution of graphics and non-graphics applications on a graphics processing unit |
US10002021B2 (en) | 2012-07-20 | 2018-06-19 | Qualcomm Incorporated | Deferred preemption techniques for scheduling graphics processing unit command streams |
US9123167B2 (en) | 2012-09-29 | 2015-09-01 | Intel Corporation | Shader serialization and instance unrolling |
US10134102B2 (en) | 2013-06-10 | 2018-11-20 | Sony Interactive Entertainment Inc. | Graphics processing hardware for using compute shaders as front end for vertex shaders |
US10114755B2 (en) | 2013-06-14 | 2018-10-30 | Nvidia Corporation | System, method, and computer program product for warming a cache for a task launch |
US9754342B2 (en) | 2014-05-30 | 2017-09-05 | Intel Corporation | Method and apparatus for parallel pixel shading |
GB2527822B (en) * | 2014-07-03 | 2020-10-07 | Advanced Risc Mach Ltd | Graphics processing |
US9665370B2 (en) * | 2014-08-19 | 2017-05-30 | Qualcomm Incorporated | Skipping of data storage |
-
2016
- 2016-05-23 US US15/162,272 patent/US9799089B1/en active Active
-
2017
- 2017-04-10 WO PCT/US2017/026835 patent/WO2017204909A1/en unknown
- 2017-04-10 BR BR112018073898-0A patent/BR112018073898A2/pt unknown
- 2017-04-10 CN CN201780028782.1A patent/CN109074625B/zh active Active
- 2017-04-10 JP JP2018561212A patent/JP6911055B2/ja active Active
- 2017-04-10 KR KR1020187033353A patent/KR101973924B1/ko active IP Right Grant
- 2017-04-10 SG SG11201808972SA patent/SG11201808972SA/en unknown
- 2017-04-10 EP EP17720913.7A patent/EP3465606A1/en active Pending
-
2019
- 2019-01-22 HK HK19101110.2A patent/HK1258710A1/zh unknown
- 2019-09-30 JP JP2019179317A patent/JP6848028B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060170680A1 (en) * | 2005-01-28 | 2006-08-03 | Microsoft Corporation | Preshaders: optimization of GPU programs |
US20140354669A1 (en) * | 2013-05-30 | 2014-12-04 | Arm Limited | Graphics processing |
Also Published As
Publication number | Publication date |
---|---|
JP2020024716A (ja) | 2020-02-13 |
WO2017204909A1 (en) | 2017-11-30 |
KR20180128075A (ko) | 2018-11-30 |
HK1258710A1 (zh) | 2019-11-15 |
JP2019517078A (ja) | 2019-06-20 |
EP3465606A1 (en) | 2019-04-10 |
JP6911055B2 (ja) | 2021-07-28 |
KR101973924B1 (ko) | 2019-04-29 |
JP6848028B2 (ja) | 2021-03-24 |
US9799089B1 (en) | 2017-10-24 |
CN109074625B (zh) | 2020-04-24 |
BR112018073898A2 (pt) | 2019-02-26 |
SG11201808972SA (en) | 2018-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109154886B (zh) | 用于处理数据的方法和设备 | |
US10101977B2 (en) | Method and system of a command buffer between a CPU and GPU | |
US10430912B2 (en) | Dynamic shader instruction nullification for graphics processing | |
KR101477882B1 (ko) | 서브버퍼 오브젝트 | |
CN103309786B (zh) | 用于在非可抢占式图形处理单元上交互调试的方法和装置 | |
JP5701487B2 (ja) | 同期並列スレッドプロセッサにおける間接的な関数呼び出し命令 | |
CN102648449B (zh) | 一种用于处理干扰事件的方法和图形处理单元 | |
US10026145B2 (en) | Resource sharing on shader processor of GPU | |
US20080109795A1 (en) | C/c++ language extensions for general-purpose graphics processing unit | |
CN106462941B (zh) | Gpu中的共享寄存器的加载方案 | |
EP3417369B1 (en) | Uniform predicates in shaders for graphics processing units | |
JP6848028B2 (ja) | グラフィック処理のためのパーシェーダープリアンブル | |
CN106716346A (zh) | 对端口减少的通用寄存器的操作数冲突解决 | |
US10606595B2 (en) | Data processing systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1258710 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |