CN115023728A - 促进专用无绑定状态处理器的方法和装置 - Google Patents
促进专用无绑定状态处理器的方法和装置 Download PDFInfo
- Publication number
- CN115023728A CN115023728A CN202080094438.4A CN202080094438A CN115023728A CN 115023728 A CN115023728 A CN 115023728A CN 202080094438 A CN202080094438 A CN 202080094438A CN 115023728 A CN115023728 A CN 115023728A
- Authority
- CN
- China
- Prior art keywords
- processor
- data
- graphics
- shader program
- processing
- 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.)
- Pending
Links
Images
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
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本公开涉及用于图形处理的方法和装置。技术有助于改进图形处理器处的无绑定状态处理。在图形处理器处,可以接收包括前导部分和主指令部分的着色器程序。利用专用于处理前导部分的标量处理器,可以执行前导部分的指令以实施用于加载与着色器程序相关联的常量数据的无绑定机制。可以将主指令部分和常量数据分发给流处理器以用于执行着色器程序。
Description
技术领域
本公开大体上涉及处理系统,并且更具体地,涉及用于图形处理的一种或多种技术。
背景技术
计算设备通常利用图形处理单元(GPU)来加速图形数据的渲染以进行显示。此类计算设备可包括例如计算机工作站、诸如所谓的智能手机的移动电话、嵌入式系统、个人计算机、平板计算机和视频游戏机。GPU执行图形处理管线,该管线包括一个或多个处理阶段,这些处理阶段一起操作以执行图形处理命令并输出帧。中央处理单元(CPU)可以通过向GPU发出一个或多个图形处理命令来控制GPU的操作。现代CPU通常能够并发执行多个应用,每个应用在执行期间可能需要利用GPU。
发明内容
以下呈现一个或多个方面的简化概述,以便提供对这些方面的基本理解。本概述并非对所有预期方面的详尽概述,且旨在既不确认所有方面的关键要素,也不描绘任何或所有方面的范围。其唯一目的是以简化形式渲染一个或多个方面的一些概念,作为稍后渲染的更详细描述的序言。
在本公开的方面中,提供了一种方法、计算机可读介质和装置。该装置可以是应用处理器、CPU、GPU、通用GPU(GPGPU)、显示处理器、显示处理单元(DPU)或视频处理器。该装置可以在图形处理器处接收着色器程序,该着色器程序包括前导部分和主指令部分。该装置还可以用专用于处理前导部分的标量处理器执行前导部分的指令,以实施用于加载与着色器程序相关联的常量数据的无绑定机制。该装置还可以将主指令部分和常量数据分发给流处理器以用于执行着色器程序。在一些示例中,该装置还可以在标量处理器和流处理器处采用相同的指令集架构(ISA)。在一些示例中,着色器程序可以包括指示标量处理器还是流处理器将执行前导部分的指令的指示符。在一些示例中,标量处理器可以被配置为执行流处理器的功能子集。在一些示例中,该装置还可以在运行时期间实施无绑定机制。在一些示例中,该装置还可以从第一缓冲器加载第一数据子集。在一些示例中,该装置还可以从第二缓冲器加载第二数据子集。在一些示例中,该装置还可以将第一数据子集和第二数据子集级联到第三缓冲器中。在一些示例中,第三缓冲器可以包括常量数据。在一些示例中,该装置还可以从缓冲器中获取前导部分的指令。在一些示例中,该装置还可以解码前导部分的指令。在一些示例中,该装置还可以获取一个或多个操作数以执行前导部分的指令。在一些示例中,该装置还可以执行流控制以执行前导部分的指令。在一些示例中,该装置还可以基于流控制执行前导部分的指令。在一些示例中,该装置还可以将通过执行前导部分的指令而产生的输出数据存储在缓冲器中。
本公开的一个或多个示例的细节在附图和下面的描述中阐述。本公开的其他特征、目的和优点将从说明书和附图以及权利要求书中显而易见。
附图说明
图1是示出了根据本公开的一个或多个技术的示例内容生成系统的框图。
图2示出了根据本公开的一个或多个技术的示例图形处理器。
图3示出了根据本公开的一个或多个技术的执行图形处理管线的方面的图形处理器的示例实施方式。
图4是示出了根据本公开的一个或多个技术的图1的设备的组件的框图。
图5示出了描述根据本公开的一个或多个技术由图4的图形处理器处理工作负载序列的示例时间线。
图6示出了描述根据本公开的一个或多个技术由图4的图形处理器处理工作负载序列的另一示例时间线。
图7是示出了根据本公开的一个或多个技术的图4的无绑定状态处理器的组件的框图。
图8示出了描述根据本公开的一个或多个技术由图4的图形处理器处理工作负载序列的另一示例时间线。
图9是根据本公开的一个或多个技术的示例方法的示例流程图。
具体实施方式
本文公开的示例技术有助于在图形处理器处使用标量处理执行无绑定资源的处理。具体地,所公开的技术可以由利用并行处理单元的基于处理器的设备(诸如图形处理器)来实施,其被配置为并行地(例如,同时或几乎同时)执行许多操作。例如,图形处理器可以包括执行用于一个或多个程序(有时称为“着色器程序”或“着色器”)的指令的一个或多个处理器核心(例如,流处理器)。尽管以下描述提供了用于利用GPU实施一个或多个公开的技术的示例,但本文描述的概念可适用于采用并行处理单元和/或非并行处理单元(例如,被配置为执行并行处理的处理单元)的其他基于处理器的设备。
在一些示例中,图形处理器可以用单指令、多数据(SIMD)结构来实施。在SIMD结构中,流处理器(有时称为“着色器处理器”)包括执行相同程序但具有不同数据的指令的多个处理元件。在一些示例中,在特定处理元件上执行的特定指令可称为“纤程”或“线程”。因此,尽管流处理器的不同处理元件可以被认为执行不同的纤程,但不同的处理元件仍然可以执行相同的特定指令。以这种方式,SIMD结构使得图形处理器能够并行地(例如,同时或几乎同时)执行许多任务。
一般而言,本文公开的示例技术有助于改进无绑定资源(例如,在运行时请求的资源)的处理。例如,图形处理器可以包括高级定序器(HLSQ)和一个或多个流处理器。HLSQ可以被配置为便于接收包括前导部分和主指令部分的着色器程序。在图形处理示例中,着色器程序可以包括对多个工作项(例如,像素或顶点)执行的绘制命令。在一些这样的示例中,前导部分可以在每个绘制命令中执行一次,并且主指令部分可以在每个工作项中执行一次(例如,每个像素一次或每个顶点一次)。因此,可以理解,对于着色器程序,着色器程序的前导部分将以不同于主指令部分的(例如,更低的)频率执行。该一个或多个流处理器可以被配置为执行着色器程序。在一些示例中,HLSQ可以促进准备流处理器的上下文状态,并向流处理器提供用于执行着色器程序的资源。本文公开的示例技术使用具有HLSQ的无绑定状态处理器(BSP)来在向流处理器提供资源之前准备资源。在一些示例中,BSP可以是专用于执行指令以加载无绑定资源的处理器。例如,BSP可以执行着色器程序的前导部分的指令,以加载用于流处理器的相应上下文状态的常量数据。BSP可以将常量数据存储在HLSQ的缓冲器中。在前导部分的指令完成并且相应的常量数据存储在缓冲器中之后,HLSQ然后可以广播(例如,分发)常量数据和着色器程序的主指令部分到用于执行着色器程序的一个或多个流处理器。
下文参照附图更全面地描述系统、装置、计算机程序产品和方法的各个方面。然而,本公开可以以许多不同的形式体现,并且不应被解释为限于贯穿本公开呈现的任何特定结构或功能。相反,提供这些方面使得本公开将是彻底和完整的,并且将向本领域技术人员充分传达本公开的范围。基于本文的教导,本领域技术人员应当理解,本公开的范围旨在涵盖本文公开的系统、装置、计算机程序产品和方法的任何方面,无论是独立于本公开的其他方面实现还是与本公开的其他方面结合实现。例如,可以使用本文阐述的任何数量的方面来实现装置或实践方法。此外,本公开的范围旨在涵盖这样一种装置或方法,该装置或方法是在本文所述的本公开的各个方面之外或以外使用其他结构、功能或结构和功能实践的。本文公开的任何方面可以由权利要求的一个或多个元素来体现。
尽管本文描述了各种方面,但这些方面的许多变化和排列落入本公开的范围之内。尽管提及了本公开的各方面的一些潜在益处和优点,但本公开的范围并不旨在限于特定益处、用途或目标。相反,本公开的方面旨在广泛地适用于不同的无线技术、系统配置、网络和传输协议,其中一些在附图和下面的描述中以示例的方式示出。详细描述和附图仅仅是对本公开的说明,而不是限制,本公开的范围由所附权利要求及其等效物限定。
参考各种装置和方法呈现几个方面。在以下详细描述中描述这些装置和方法,并在附图中通过各种块、组件、电路、过程、算法等(统称为“元件”)来说明。这些元件可以使用电子硬件、计算机软件或其任何组合来实现。这些元件是实现为硬件还是软件取决于施加在整个系统上的特定应用和设计约束。
举例来说,元件或元件的任何部分或元件的任何组合可实现为包括一个或多个处理器(也可称为“处理单元”)的“处理系统”。处理器的示例包括微处理器、微控制器、图形处理单元(GPU)、通用GPU(GPGPU)、中央处理单元(CPU)、应用处理器、数字信号处理器(DSP)、精简指令集计算(RISC)处理器、片上系统(SOC)、基带处理器,专用集成电路(ASIC)、现场可编程门阵列(FPGA)、可编程逻辑器件(PLD)、状态机、门控逻辑、离散硬件电路和配置为执行贯穿本公开描述的各种功能的其他合适的硬件。处理系统中的一个或多个处理器可以执行软件。软件可广义地解释为意味着指令、指令集、代码、代码段、程序代码、程序、子程序、软件组件、应用、软件应用、软件包、例程、子例程、对象、可执行文件、执行线程、过程、函数等,无论是否称为软件、固件、中间件、微码、硬件描述语言或其他。术语应用可以指代软件。如本文所述,一个或多个技术可指被配置为执行一个或多个功能的应用(诸如软件)。在这样的示例中,应用可以存储在存储器上(例如处理器的片上存储器、系统存储器或任何其他存储器)。这里描述的硬件,例如处理器,可以被配置为执行应用。例如,应用可被描述为包括当由硬件执行时使硬件执行本文所述的一个或多个技术的代码。作为示例,硬件可以从存储器存取代码并执行从存储器存取的代码以执行本文描述的一个或多个技术。在一些示例中,在本公开中标识了组件。在这种示例中,组件可以是硬件、软件或其组合。这些组件可以是单独的组件或单个组件的子组件。
因此,在本文描述的一个或多个示例中,所描述的功能可以在硬件、软件或其任何组合中实现。如果在软件中实现,则这些功能可以存储在计算机可读介质上或作为一个或多个指令或代码编码在计算机可读介质上。计算机可读介质包括计算机存储介质。存储介质可以是计算机可以存取的任何可用介质。作为示例而非限制,这样的计算机可读介质可以包括随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程ROM(EEPROM)、光盘存储器、磁盘存储器、其他磁存储设备、上述类型的计算机可读介质的组合、或可用于以计算机可存取的指令或数据结构的形式存储计算机可执行代码的任何其他介质。
一般而言,本文公开的示例提供用于改进图形处理器中的操作性能的技术。示例技术可以通过使得能够有效地加载可在执行着色器程序期间访问的无绑定资源(例如,无绑定常量缓冲器)和/或减少处理单元(例如,被配置为执行本文公开的一个或多个技术的任何处理单元,诸如GPU、应用处理器、CPU、显示处理器、DPU等)的负载,来改进用图形处理器执行着色器程序的性能。例如,本公开描述了用于在使用硬件来促进加载无绑定资源的任何设备中的图形处理的技术。贯穿本公开还描述了其他示例益处。
如本文所使用的,术语“内容”的实例可指“图形内容”、“图像”,反之亦然。无论这些术语是用作形容词、名词还是其他词类,这都是正确的。在一些示例中,如本文所使用的,术语“图形内容”可指由图形处理管线的一个或多个处理产生的内容。在一些示例中,如本文所使用的,术语“图形内容”可指由配置为执行图形处理的处理单元产生的内容。在一些示例中,如本文所使用的,术语“图形内容”可指由图形处理器产生的内容。在一些示例中,如本文所使用的,图形处理器可以是能够处理图形内容的任何设备(例如,应用处理器、CPU、显示处理器、DPU等)和/或设计成执行图形处理的任何设备(例如,GPU)。
在一些示例中,如本文所使用的,术语“显示内容”可指由被配置为执行显示处理的处理单元生成的内容。在一些示例中,如本文所使用的,术语“显示内容”可指由显示处理单元生成的内容。图形内容可以被处理以成为显示内容。例如,图形处理器可以将诸如帧的图形内容输出到缓冲器(可以称为帧缓冲器)。显示处理器(或DPU)可以从缓冲器读取图形内容,诸如一个或多个帧,并对其执行一个或多个显示处理技术以生成显示内容。例如,显示处理器可以被配置为对一个或多个渲染层执行合成以生成帧。作为另一示例,显示处理器可被配置为将两个或更多层组成、混合或以其他方式组合到单个帧中。显示处理器可被配置为对帧执行缩放,例如,上缩放或下缩放。在一些示例中,帧可以指层。在一些示例中,帧可指已经混合在一起以形成帧的两个或多个层(例如,帧包括两个或多个层),并且包括两个或多个层的帧随后可被混合。
图1是示出了被配置为实现本公开的一个或多个技术的示例内容生成系统100的框图。内容生成系统100包括设备104。设备104可包括用于执行本文所述的各种功能的一个或多个组件或电路。在一些示例中,设备104的一个或多个组件可以是SOC的组件。设备104可以包括被配置为执行本公开的一个或多个技术的一个或多个组件。在所示的示例中,设备104包括处理单元120和存储器124。在一些示例中,设备104可包括多个附加或替代组件,诸如通信接口126、收发器132、接收器128、发送器130和显示客户端131。
处理单元120可以包括内部存储器121。处理单元120可以被配置为执行图形处理,诸如在图形处理管线107中。图形处理管线107的示例实施方式可以促进将图形内容呈现(或绘制)到显示器,诸如示例显示客户端131。在一些示例中,处理单元120可以附加地或替代地被配置为执行非图形处理,诸如在计算处理管线108中。计算处理管线108的示例实施方式可有助于执行通用操作或非图形操作,诸如机器学习操作。
在一些示例中,处理单元120可以包括显示处理器,以在显示客户端131呈现所生成的帧之前,对由处理单元120生成的一个或多个帧执行一个或多个显示处理技术。显示处理器可以被配置为执行显示处理。例如,显示处理器可以被配置为对由处理单元120生成的一个或多个帧执行一个或多个显示处理技术。显示处理器可以根据接口协议,诸如例如MIPI DSI(移动工业处理器接口,显示串行接口),将图像数据输出到显示客户端131。
显示客户端131可以被配置为显示或以其他方式呈现由处理单元120(和/或显示处理器)处理的帧。在一些示例中,显示客户端131可以包括以下中的一个或多个:液晶显示器(LCD)、等离子显示器、有机发光二极管(OLED)显示器、投影显示设备、增强现实显示设备、虚拟现实显示设备、头戴式显示器或任何其他类型的显示设备。
对显示客户端131的引用可以指一个或多个显示器。例如,显示客户端131可以包括单个显示器或多个显示器。显示客户端131可以包括第一显示器和第二显示器。在进一步的示例中,图形处理的结果可能不显示在设备上。例如,显示器可能不接收用于在其上呈现的任何帧。相反,可以将帧或图形处理结果传送到另一设备。在一些示例中,将帧或图形处理结果传送到另一设备可称为分割呈现。
如上所述,显示客户端131可以根据MIPI DSI标准来配置。MIPI DSI标准支持视频模式和命令模式。在显示客户端131在视频模式下操作的示例中,处理单元120(和/或显示处理器)可以连续刷新显示客户端131的图形内容。例如,可以在每个刷新周期(例如,逐行)刷新帧的整个图形内容。
在显示客户端131在命令模式下操作的示例中,处理单元120(和/或显示处理器)可以将帧的图形内容写入缓冲器。在一些示例中,显示客户端131可以包括缓冲器,并且因此,缓冲器可以表示显示客户端131的本地存储器。在一些这样的示例中,处理单元120(和/或显示处理器)可以不连续地刷新显示客户端131的图形内容。相反,处理单元120(和/或显示处理器)可以使用垂直同步(Vsync)脉冲来协调缓冲器处图形内容的呈现和消费。例如,当生成Vsync脉冲时,处理单元120(和/或显示处理器)可以向缓冲器输出新的图形内容。因此,Vsync脉冲的产生可指示何时已呈现缓冲器处的当前图形内容。
处理单元120、显示客户端131和/或通信接口126可以访问处理单元120外部的存储器,诸如存储器124。例如,处理单元120可被配置为从诸如存储器124的外部存储器读取和/或向存储器124的外部存储器写入。处理单元120、显示客户端131和/或通信接口126可以通过总线通信地耦合到存储器124。在一些示例中,处理单元120、存储器124、通信接口126和/或显示客户端131可以通过总线或不同的连接彼此通信耦合。
在一些示例中,设备104可以包括被配置为从诸如存储器124和/或通信接口126的任何源接收图形和/或显示内容的内容编码器/解码器。存储器124可被配置为存储接收的编码内容或解码内容。在一些示例中,内容编码器/解码器可以被配置为以编码的像素数据或解码的像素数据的形式接收编码的内容或解码的内容(例如,来自存储器124和/或通信接口126)。在一些示例中,内容编码器/解码器可被配置为对任何内容进行编码或解码。
内部存储器121和/或存储器124可以包括一个或多个易失性或非易失性存储器或存储设备。在一些示例中,内部存储器121和/或存储器124可包括RAM、SRAM、DRAM、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、磁数据介质或光存储介质、或任何其他类型的存储器。
根据一些示例,内部存储器121和/或存储器124可以是非暂时性存储介质。术语“非暂时性”可指示存储介质未体现在载波或传播信号中。然而,术语“非暂时性”不应被解释为意味着内部存储器121和/或存储器124是不可移动的或其内容是静态的。作为一个示例,存储器124可以从设备104移除并移动到另一设备。作为另一示例,存储器124可以不可从设备104移除。
处理单元120可以是CPU、应用处理器、GPU、通用GPU(GPGPU)、DPU、显示处理器或可被配置为执行图形处理和/或非图形处理(例如,计算处理)的任何其他处理单元。在一些示例中,处理单元120可以集成到设备104的主板中。在一些示例中,处理单元120可以存在于安装在设备104的主板中的端口中的图形卡上,或者可以以其他方式并入配置成与设备104互操作的外围设备中。处理单元120可以包括一个或多个处理器,诸如一个或多个微处理器、CPU、应用处理器、GPU、DPU、显示处理器、图像信号处理器(ISP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、算术逻辑单元(ALU)、数字信号处理器(DSP)、离散逻辑、软件、硬件、固件、其他等效集成或离散逻辑电路、或其任何组合。如果部分地以软件实现这些技术,则处理单元120可以将用于软件的指令存储在适当的、非暂时性的计算机可读存储介质(例如,内部存储器121)中,并且可以使用一个或多个处理器在硬件中执行这些指令以执行本公开的技术。上述任何一种,包括硬件、软件、硬件和软件的组合等,可以被认为是一个或多个处理器。
在一些示例中,内容生成系统100可以包括通信接口126。通信接口126可以包括接收器128和发送器130。接收器128可以被配置为执行本文中关于设备104描述的任何接收功能。另外,接收器128可被配置为从另一设备接收信息(例如,眼睛或头部位置信息、渲染命令或位置信息)。发送器130可以被配置为执行本文中关于设备104描述的任何发送功能。例如,发送器130可以被配置为向另一设备发送信息,该信息可以包括对内容的请求。接收器128和发送器130可以组合成收发器132。在这样的示例中,收发器132可以被配置为执行本文中关于设备104描述的任何接收功能和/或发送功能。
在一些示例中,来自处理单元120的用于经由显示客户端131显示的图形内容可以不是静态的,并且可以是改变的。因此,处理单元120(和/或显示处理器)可以周期性地刷新由显示客户端131显示的图形内容。例如,处理单元120(和/或显示处理器)可以周期性地从存储器124检索图形内容,其中图形内容可以已经通过执行将图形内容输出到存储器124的应用程序(和/或处理单元120)而更新。
再次参考图1,在一些方面,处理单元120可以被配置为操作本文公开的一个或多个技术。例如,处理单元120可以包括无绑定状态处理组件198,其被配置为在图形处理器处接收包括前导部分和主指令部分的着色器程序。无绑定状态处理组件198还可以被配置为用专用于处理前导部分的标量处理器执行前导部分的指令,以实施用于加载与着色器程序相关联的常量数据的无绑定机制。无绑定状态处理组件198还可以被配置为将主指令部分和常量数据分发给流处理器以用于执行着色器程序。无绑定状态处理组件198还可以被配置为在标量处理器和流处理器处采用相同的指令集架构(ISA)。无绑定状态处理组件198还可以被配置为在运行时期间实施无绑定机制。无绑定状态处理组件198还可以被配置为从第一缓冲器加载第一数据子集。无绑定状态处理组件198还可以被配置为从第二缓冲器加载第二数据子集。无绑定状态处理组件198还可以被配置为将第一数据子集和第二数据子集级联到第三缓冲器中。无绑定状态处理组件198还可以被配置为从缓冲器获取前导部分的指令。无绑定状态处理组件198还可以被配置为解码前导部分的指令。无绑定状态处理组件198还可以被配置为获取一个或多个操作数以执行前导部分的指令。无绑定状态处理组件198还可以被配置为执行流控制以执行前导部分的指令。无绑定状态处理组件198还可以被配置为基于流控制执行前导部分的指令。无绑定状态处理组件198还可以被配置为将通过执行前导部分的指令而产生的输出数据存储在缓冲器中。
如本文所述,诸如设备104的设备可指代配置为执行本文所述的一个或多个技术的任何设备、装置或系统。例如,设备可以是服务器、基站、用户设备、客户端设备、站、接入点、计算机(例如个人计算机、台式计算机、膝上型计算机、平板计算机、计算机工作站或主计算机)、终端产品、装置、电话、智能电话、服务器,视频游戏平台或控制台、手持设备(例如便携式视频游戏设备或个人数字助理(PDA))、可穿戴计算设备(例如智能手表、增强现实设备或虚拟现实设备)、非可穿戴设备、显示器或显示设备、电视机、电视机顶盒、中间网络设备、数字媒体播放器、视频流设备、内容流设备、车内计算机、任何移动设备、被配置为生成图形内容的任何设备、或被配置为执行本文所述的一个或多个技术的任何设备。本文中的过程可以被描述为由特定组件(例如GPU)执行,但是在进一步的实施例中,可以使用与所公开的实施例一致的其他组件(例如,应用处理器或CPU)执行。
图形处理器可以在图形管线中处理多种类型的数据或数据分组。例如,在一些示例中,图形处理器可以处理两种类型的数据或数据分组(例如,上下文寄存器分组和绘制调用数据)。上下文寄存器分组可以是全局状态信息集合(例如,关于全局寄存器、着色器程序或常量数据的信息),其可以调节如何处理图形上下文。例如,上下文寄存器分组可以包括关于颜色格式的信息。在一些示例中,上下文寄存器分组可以包括指示哪个工作负载属于上下文寄存器的比特。此外,可以同时和/或并行运行多个函数或编程。例如,函数或编程可以描述特定操作(例如,颜色模式或颜色格式)。因此,上下文寄存器可以定义图形处理器的多个状态。
上下文状态可用于确定单个处理单元(例如顶点获取器(VFD)、顶点着色器(VS)、着色器处理器或几何体处理器)如何工作,和/或处理单元以何种模式工作。为此,图形处理器可以使用,例如,上下文寄存器和编程数据。在一些示例中,图形处理器可以基于模式或状态的上下文寄存器定义在管线中生成工作负载(例如顶点工作负载或像素工作负载)。某些处理单元(例如VFD),可以使用这些状态来确定某些功能,诸如如何组装顶点。当这些模式或状态可以改变时,图形处理器可以改变相应的上下文。另外,对应于模式或状态的工作负载可以跟随改变的模式或状态(例如,可以在模式或状态改变之后接收工作负载)。
图2示出了根据本公开的一个或多个技术的示例图形处理器200。如图2所示,图形处理器200包括命令处理器(CP)210、绘制调用分组212、VFD 220、VS 222、顶点缓存(VPC)224、三角形设置引擎(TSE)226、光栅化器(RAS)228、Z处理引擎(ZPE)230、像素插值器(PI)232、片段着色器(FS)234、渲染后端(RB)236、L2缓存(UCHE)238和存储器240。尽管图2显示图形处理器200包括处理单元220至238,但图形处理器200可以包括多个附加和/或替代处理单元。另外,处理单元220至238仅仅是示例,并且根据本公开,图形处理器可以使用处理单元的任何组合或顺序。示例图形处理器200还包括命令缓冲器250、上下文寄存器分组260和上下文状态261。
如图2所示,图形处理器可以利用CP(例如CP 210或硬件加速器)将命令缓冲器解析到上下文寄存器分组(例如上下文寄存器分组260)和/或绘制调用数据分组(例如绘制调用分组212)。然后,CP 210可以通过单独的路径向图形处理器中的处理单元或框发送上下文寄存器分组260或绘制调用数据分组212。此外,命令缓冲器250可以交替上下文寄存器和绘制调用的不同状态。例如,命令缓冲器可以以下列方式构造:上下文#N的上下文寄存器、上下文N的绘制调用、上下文#N+1的上下文寄存器和上下文#N+1的绘制调用。
在一些方面,对于每个图形处理器处理单元或框,在可以处理任何绘制调用数据之前可能需要准备上下文寄存器。由于上下文寄存器和绘制调用可以序列化,因此在下一次绘制调用之前准备一个额外的上下文寄存器会很有帮助。在某些情况下,可以通过图形处理器数据管线馈送下一个上下文的绘制调用,以便隐藏上下文寄存器编程时延。此外,当图形处理器配备有多个上下文寄存器集合时,每个处理单元可以具有足够的上下文切换能力来管理平滑的上下文处理。反过来,这可以使图形处理器能够覆盖可能由不可预测的存储器访问时延和/或扩展的处理管线时延导致的管线时延。
图3示出了根据本公开的一个或多个技术的执行图形处理管线的方面的图形处理器300的示例实施方式。在一些示例中,图形处理器300的一个或多个方面可由图1的处理单元120和/或图2的图形处理器200实施。在一些示例中,图3的图形处理管线的一个或多个方面可由图1的图形处理管线107实施。
如图3所示,图形处理器300包括命令处理器(CP)310、几何处理前端组件320、顶点着色器(VS)高级定序器(HLSQ)330、VS流处理器340a、340b、340c、340d(本文统称为VS流处理器340)、几何处理后端组件350、片段着色器(FS)处理前端组件360、FS HLSQ 370、FS流处理器380a、380b、380c、380d(本文统称为FS流处理器380)和FS处理后端组件390。尽管图3的示例图形处理器300包括四个VS流处理器340和四个FS流处理器380,但图形处理器的附加或替代示例可以包括其他适当数量的VS流处理器340和/或FS流处理器380。
命令处理器310可以被配置为接收表示图形处理器300要执行的操作的命令流。几何处理前端组件320可以被配置为执行与图形处理管线的几何处理相关的前端操作。例如,几何处理前端组件320可被配置为准备由图形处理管线处理的顶点工作负载(例如,几何处理前端组件320可从例如存储器(诸如图1的存储器124和/或内部存储器121)获取图形数据(诸如顶点数据、图元、属性等))。在一些示例中,几何处理前端组件320的一个或多个方面可由图2的VFD 220实施。
VS HLSQ 330可以被配置为接收顶点工作负载并将顶点工作负载分发给VS流处理器340中的一个或多个。在一些示例中,VS HLSQ 330可基于顶点工作负载为各个VS流处理器340准备上下文和资源。VS流处理器340可以被配置为执行顶点着色器程序以处理接收到的顶点工作负载。在一些示例中,VS流处理器340的一个或多个方面可由图2的VS 222实施。
几何处理后端组件350可以被配置为对VS流处理器340输出的顶点执行进一步的处理。例如,几何处理后端组件350可以被配置为执行边缘系数计算、阴影体积挤压等和/或将经处理的顶点数据存储在存储器中(例如,在顶点高速缓存中)。在一些示例中,几何处理后端组件350的一个或多个方面可由图2的VPC 224实施。
FS处理前端组件360可以被配置为执行与图形处理管线的片段着色器处理有关的前端操作。例如,FS处理前端组件360可被配置为准备片段着色器工作负载以供图形处理管线处理(例如,FS处理前端组件360可设置三角形、图块等)。在一些示例中,FS处理前端组件360的一个或多个方面可由图2的TSE 226、RAS 228、ZPE 230和/或PI 232实施。
FS HLSQ 370可以被配置为接收片段着色器工作负载并将片段着色器工作负载分发给FS流处理器380中的一个或多个。在一些示例中,FS HLSQ 370可基于片段着色器工作负载为各个FS流处理器380准备上下文和资源。FS流处理器380可以被配置为执行片段着色器程序以处理分布式片段着色器工作负载。在一些示例中,FS流处理器380的一个或多个方面可由图2的FS 234实施。
FS处理后端组件390可以被配置为对FS流处理器380输出的片段数据执行进一步的处理。例如,FS处理后端组件390可以被配置为执行像素后处理。在一些示例中,FS处理后端组件390的一个或多个方面可由图2的RB 236实施。FS处理后端组件390的输出可以存储在存储器中,诸如图2的统一高速缓存238。
在一些示例中,流处理器可以是被配置为执行相应着色器程序的固定功能流处理器。例如,VS流处理器340可以是被配置为执行顶点着色器程序的固定功能流处理器,和/或FS流处理器380可以是被配置为执行片段着色器程序的固定功能流处理器。
在一些示例中,流处理器可以是可编程流处理器,其可以被配置为通过将相应着色器程序加载到可编程流处理器来执行一个或多个着色器程序。例如,图形处理器300(和/或CP 310)可以将顶点着色器程序加载到第一流处理器(例如,SP0 340a,380a)以使第一流处理器执行顶点着色器程序,可将外壳着色器程序加载到第二流处理器(例如,SP1 340b,380b)以使第二流处理器执行外壳着色器程序,可将域着色器程序加载到第三流处理器(例如,SP2 340c、380c)以使第三流处理器执行域着色器程序,可将几何着色器程序加载到第四流处理器(例如,SP3 340d、380d)以使第四流处理器执行几何着色器程序,和/或可将片段着色器程序加载到第一流处理器(例如,SP0 340a、380a)以使第一流处理器执行片段着色器程序。在一些示例中,能够执行不同着色器程序的流处理器可以被称为“统一流处理器”。
因此,尽管在图3中示出为单独的组件,但在一些示例中,VS流处理器340和FS流处理器380可以由相同的流处理器(例如,统一流处理器)来实施。例如,通过向流处理器340、380发送命令以执行一个或多个相应着色器程序(有时称为“着色器”),GPU 300(和/或CP310)可以指定流处理器340、380以执行不同的着色操作,诸如顶点着色、外壳着色、域着色、几何着色、片段着色(有时称为“像素着色”)。着色器程序可以包括控制图形处理器300内的流处理器340、380的操作的一个或多个指令。示例着色器程序包括可由流处理器340、380中的一个或多个执行以处理接收到顶点数据和属性的顶点着色器程序,可由流处理器340、380中的一个或多个执行以生成镶嵌因子和/或控制点的外壳着色器程序,可由流处理器340、380中的一个或多个执行以创建新顶点的域着色器程序,可由流处理器340、380中的一个或多个执行以接收由其顶点数据定义的图元并进一步处理该图元(例如,轮廓边缘检测、阴影体积挤压等)的几何着色器程序,可由流处理器340、380中的一个或多个执行以生成每像素数据(例如,颜色、纹理混合、光照模型计算等)的片段着色器程序等。
此外,尽管在图3中示出为单独的组件,但在一些示例中,VS HLSQ 330和FS HLSQ370可以由相同的HLSQ实施。例如,当HLSQ从前端组件接收工作负载(例如,来自几何处理前端组件320的顶点工作负载和/或来自FS处理前端组件360的片段着色器工作负载)时,HLSQ可以确定哪些流处理器340、380来分发各自的工作负载。在一些这样的示例中,当HLSQ接收顶点工作负载时,HLSQ可被称为VS HLSQ 330和/或当HLSQ接收片段着色器工作负载时,HLSQ可被称为FS HLSQ 370。
在一些示例中,HLSQ可以将工作负载分发给固定功能流处理器和/或统一流处理器。例如,在一些示例中,HLSQ可以将顶点工作负载分发给被配置为执行顶点着色器程序以处理顶点工作负载的固定功能流处理器。在一些示例中,HLSQ可以将顶点工作负载分发给统一流处理器,并且还可以将顶点着色器程序加载到统一流处理器,以使统一流处理器通过执行顶点着色器程序来处理顶点工作负载。
图4是示出了根据本公开的方面的图1的设备104的组件的框图400。在图4的所示示例中,框图400包括应用处理器410、存储器420和图形处理器430。在一些示例中,应用处理器410和/或图形处理器430的一个或多个方面可由图1的示例处理单元120实施。在一些示例中,存储器420的一个或多个方面可由图1的存储器124和/或内部存储器121实施。如图4所示,示例应用处理器410、示例存储器420和示例图形处理器430经由示例总线402通信。示例总线402可以使用总线结构和/或总线协议的任何组合来实施。
在图4的所示示例中,应用处理器410可以包括被配置为执行应用412、图形框架414、图形驱动器416和编译器418的一个或多个处理器。图4的示例存储器430可以被配置为存储命令缓冲器422和图形数据缓冲器424。在图4的所示示例中,图形处理器430可以包括被配置为执行高级定序器(HLSQ)432的一个或多个处理器和一个或多个流处理器434。
在一些示例中,应用处理器410可以被配置为执行使得应用处理器410执行本文公开的示例技术中的一个或多个的指令。在一些示例中,存储器420可以存储当执行时使得应用处理器410和/或图形处理器430执行本文公开的示例技术中的一个或多个的指令。在一些示例中,图形处理器430可以被配置为执行使得图形处理器430执行本文公开的示例技术中的一个或多个的指令。
在所示示例中,应用处理器410可以被配置为执行应用412。应用412可以是将图形任务(例如,绘制命令)的执行卸载到图形处理器430的应用(例如,图形应用)。例如,应用412可以发出使得图形处理器430执行处理图形任务的指令。在一些示例中,应用412可以将用于处理图形任务的数据存储在存储器420的图形数据缓冲器424中。例如,应用412可以在图形数据缓冲器424处存储工作项的属性(例如,像素、顶点等)。
在所示示例中,图形框架414可包括可与应用412一起使用的一个或多个软件框架。在一些示例中,图形框架414可以将从应用412接收的指令转换为图形驱动器416可使用的格式,以提供给图形处理器430。在一些示例中,图形框架414可以包括一个或多个应用程序接口(API)。图形框架414的示例可以包括OPENGL API、OPENGL ES API、DIRECTX API和其他图形框架。在一些示例中,在应用处理器410上执行的操作系统可以向应用412提供图形框架414。
图形驱动器416经由图形框架414从应用412接收指令,并控制图形处理器430的操作以执行指令。例如,图形驱动器416可生成一个或多个命令流,将生成的命令流存储在存储器420的命令缓冲器422中,并指示图形处理器430执行命令流。在一些示例中,图形驱动器416可经由在应用处理器410上执行的操作系统的一个或多个系统调用与图形处理器430通信。
编译器418可以被配置为编译要发送到图形处理器430并由图形处理器430执行的一个或多个着色器程序。着色器程序可以表示由图形处理器430执行的用于实施管线的软件和/或固件,诸如图1的图形处理管线107和/或计算处理管线108。在一些示例中,编译器418可预编译着色器程序并将预编译的着色器程序存储在存储器420中。在一些示例中,编译器418可在运行时期间(例如,在应用412的执行期间)编译着色器程序。
在所示示例中,存储器420包括命令缓冲器422和图形数据缓冲器424。命令缓冲器422可以被配置为记录从应用处理器410接收的一个或多个命令和/或着色器程序。示例图形数据缓冲器434可被配置为存储由应用412生成的并且可由图形处理器430在图形任务的处理期间使用的数据。在一些示例中,图形数据缓冲器434可以包括由应用412生成的多个不同的常量缓冲器。例如,图形任务可以包括对象(例如,像素或顶点)的变换。为了便于变换的执行,应用412可以生成存储与不同颜色相关的常量数据的第一缓冲器,可以生成存储与不同形状相关的常量数据的第二缓冲器,可以生成存储与不同角度相关的常量数据的第三缓冲器等。在一些这样的示例中,应用412可以在图形数据缓冲器434处存储一个或多个不同的缓冲器。图形处理器430可以读取存储在图形数据缓冲器434处的数据以执行图形任务,并且还可以将通过执行图形任务而产生的输出数据存储在图形数据缓冲器434中。应当理解,在一些示例中,应用处理器410可以读取由图形处理器430生成并存储在图形数据缓冲器434中的输出数据。
在所示示例中,图形处理器430包括HLSQ 432,以接收与图形任务相关联的工作负载,并将工作负载分发给图形处理器430的一个或多个流处理器434。在一些示例中,HLSQ432为流处理器434准备上下文状态和资源。例如,HLSQ 432可以将流处理器434设置为全局寄存器上下文状态、着色器常量上下文状态、缓冲器描述符上下文状态、指令上下文状态等。
在所示的示例中,流处理器434可以包括一个或多个处理元件,诸如一个或多个算术逻辑单元(ALU)、一个或多个基本逻辑单元(EFU)、一个或多个全精度ALU(FALU)和/或一个或多个半精度ALU(HALU)。在一些示例中,流处理器434可以是固定功能流处理器的可编程流处理器。尽管图4的所示示例包括两个流处理器,但在附加或替代示例中,图形处理器430可以包括其他适当数量的流处理器。
可编程流处理器可以包括,例如,可编程着色器单元,其被配置为执行(例如,从应用处理器410和/或存储器420)下载到图形处理器430上的一个或多个着色器程序。在一些示例中,着色器程序可以是用着色语言编写的程序的编译版本。在一些示例中,可编程着色器单元可以包括顶点着色器单元、片段着色器单元、计算着色器单元等。
固定功能流处理器可以包括硬连线以执行某些功能的硬件。在一些示例中,固定功能流处理器可以附加地或替代地包括可使固定功能流处理器执行一些可配置功能的可自由编程着色器控制的管线。尽管固定功能流处理器可以被配置为执行不同的功能(例如,经由一个或多个控制信号),但固定功能硬件可以不包括能够接收用户编译的程序(例如,来自应用处理器410)的程序存储器。
应当理解,流处理器434允许并行化,这是经由图形处理器430执行图形任务可能有用的至少一个原因。例如,图形处理器430的每个流处理器434可以被配置为执行相同的操作,但对不同的数据执行相同的操作。以这种方式,流处理器434的并行处理结构允许图形处理器430并行地(例如,同时)执行许多操作,这在处理图形任务中是有用的。
在执行期间,图形应用(例如,应用412)可创建可用于处理对象(例如,图形任务)的多个缓冲器。在某些示例中,缓冲器可以存储常量数据。例如,执行变换任务的图形处理器430可以包括访问存储与不同形状、不同颜色、不同角度等相关的常量数据的不同缓冲器。不同类型的常量数据可以存储在不同的常量缓冲器中。然而,为了处理对象,图形处理器430可能不需要不同常数缓冲器中的所有数据。
为了改进对象的处理,一些技术采用绑定机制来为特定对象的处理分配(或“绑定”)资源。例如,对于第一对象,绑定机制可以包括从第一缓冲器中选择第一数据子集,从第二缓冲器中选择第二数据子集,然后将第一数据子集和第二数据子集级联到第三缓冲器中。在一些这样的示例中,第三缓冲器可用于图形处理器430处理第一对象。
在一些示例中,绑定机制可由应用处理器410的图形驱动器416执行。在一些这样的示例中,图形驱动器416可以通过向图形处理器430提供数据子集的位置和用于存储第三缓冲器的位置来命令图形处理器430执行绑定机制。然而,应当理解,由图形驱动器416执行绑定机制限于其中数据子集是静态并且因此图形处理器430能够提供数据子集的位置的实例。
图5示出了描述根据本公开的一个或多个技术由图4的图形处理器430处理工作负载序列的示例时间线500。在所示示例中,HLSQ 432接收一系列上下文状态(例如,上下文状态#N、上下文状态#N+1和上下文状态#N+2)的工作负载。HLSQ 432处理相应的工作负载,并基于例如与图形驱动器采用的绑定机制相关联的命令,为相应的上下文状态预加载指令和常量数据。例如,在时间T1,HLSQ 432预加载用于上下文状态#N的指令和常量数据,在时间T2,HLSQ 432预加载用于上下文状态#N+1的指令和常量数据,并且在时间T4,HLSQ 432预加载用于上下文状态#N+2的指令和常量数据。HLSQ 432可以将用于各个上下文状态的指令和常量数据从图形数据缓冲器426预加载到HLSQ 432的缓冲器。在加载用于上下文状态的资源(例如,指令和常量数据)之后,HLSQ 432可以将资源广播(例如,分发)到一个或多个流处理器434,以促进执行相应的工作负载。例如,在时间T2完成资源上下文状态#N的预加载之后,HLSQ 432可以将资源广播到流处理器434,然后流处理器434可以开始执行上下文状态#N的工作负载(例如,绘制命令)。
如图5所示,在流处理器434开始执行上下文状态的工作负载之后,HLSQ 432可以开始预加载用于下一个上下文状态的资源。例如,即使HLSQ 432在时间T3完成了用于上下文状态#N+1的资源的预加载,但HLSQ 432等待直到流处理器434开始执行上下文状态#N+1的工作负载(在时间T4)以开始预加载用于上下文状态#N+2的资源。应当理解,如图5所示,HLSQ 432在流处理器434之前处理用于工作负载的资源,因此,一旦资源准备好,流处理器434就能够开始处理工作负载。此外,应当理解,流处理器434的处理元件可被连续地用于执行工作负载。
再次参考图4,随着应用的发展,用于处理工作负载的资源的控制从图形驱动器416转移到应用412。通过使应用412能够处理资源控制,可以在应用的运行时期间动态地分配资源。例如,无绑定资源可以在运行时由图形处理器430请求,并且不被分配(或绑定)到特定对象的处理,如上面关于绑定机制所描述的。也就是说,与绑定机制相比,采用“无绑定机制”可以动态分配资源。例如,要从缓冲区中选择用于处理当前工作负载的数据子集可能取决于对先前工作负载的处理。结果,图形驱动器416可能无法将位置提供给图形处理器430以用于级联数据子集。
然而,编译器418可以编译着色器程序以实现资源的动态绑定。例如,编译器418可确定应用412可指示对级联缓冲器的加载操作,但可能无法识别将哪些数据子集用于资源的绑定(例如,可在运行时期间动态确定数据子集)。在一些这样的示例中,编译器418可以编译着色器程序以包括在运行时期间提供用于绑定资源的指令的前导部分。例如,着色器程序前导可包括用于从第一缓冲器加载第一数据子集的第一指令,可包括用于从第二缓冲器加载第二数据子集的第二指令,以及可包括用于将第一和第二数据子集级联并存储在流处理器的常量缓冲器中的第三指令。当执行着色器程序时,流处理器可以首先执行着色器程序前导以获得与着色器程序相关联的常量数据,并且一旦加载了常量数据,然后可以执行着色器程序的主指令部分。
图6示出了描述根据本公开的一个或多个技术由图4的图形处理器430处理工作负载序列的另一示例时间线600。在图6的所示示例中,HLSQ 432从存储器420的图形数据缓冲器426加载用于上下文状态的指令。然后,HLSQ 432可以将用于上下文状态的指令提供给流处理器中的各个流处理器。在所示示例中,由HLSQ 432加载的指令可以表示包括着色器程序前导和着色器程序的主指令部分的着色器程序。如图6所示,流处理器434然后可以执行着色器程序前导的指令以加载常量数据,然后执行着色器程序的主指令部分。
例如,在图6的所示示例中,在时间T1,HLSQ 432加载用于上下文状态#N的指令,在时间T2加载用于上下文状态#N+1的指令,并且在时间T4加载用于上下文状态#N+2的指令。在加载用于上下文状态的指令之后,HLSQ 432可以将指令广播(例如,分发)到流处理器中的一个或多个,以促进执行相应的工作负载。例如,在完成用于上下文状态#N的指令的加载之后,HLSQ 432在时间T2将指令(例如,包括前导部分和主指令部分的着色器程序)广播到流处理器434。然后,流处理器434执行接收到的指令(例如,着色器程序的)的前导部分的指令,以在时间T2和时间T3之间加载用于上下文状态#N的常量数据。在加载常量数据之后(在时间T3),流处理器434然后可以开始执行接收到的指令(例如,着色器程序的)的主指令部分,以促进执行上下文状态#N的工作负载(例如,绘制命令)。
如图6所示,在流处理器434开始执行用于上下文状态的接收到的指令的前导部分的指令之后,HLSQ 432可以开始加载用于下一个上下文状态的指令(例如,着色器程序)。例如,HLSQ 432在时间T2和时间T3之间加载用于上下文状态#N+1的指令,此时流处理器434正在执行上下文状态#N的着色器程序的前导部分的指令以加载用于上下文状态#N的常量数据。类似地,HLSQ 432等待加载用于上下文状态#N+2的指令(例如,用于上下文状态#N+2的着色器程序),直到流处理器434在时间T4开始执行上下文状态#N+1的着色器程序的前导部分的指令以加载用于上下文状态#N+1的常量数据。
采用着色器程序的前导部分的前述方面(如图6所示)可以包括许多不同的优点。例如,流处理器可以将常量数据从图形数据缓冲器424加载到流处理器的常量缓冲器。将常量数据从图形数据缓冲器424加载到流处理器434的常量缓冲器可以比将常量数据从图形数据缓冲器424加载到HLSQ 432的缓冲器,然后从HLSQ 432的缓冲器加载到流处理器434的常量缓冲器更具处理和/或存储器带宽效率。此外,在着色器程序的前导部分而不是在着色器程序的主指令部分中包括用于加载常量数据子集的指令,可以允许每个图形任务从图形数据缓冲器424加载一次常量数据(例如,每个绘制命令一次),而不是每个工作项加载一次(例如,每个像素一次或每个顶点一次),这可以有助于提高处理和/或存储器带宽效率。
然而,如图6所示,采用流处理器434来执行着色器程序的前导部分和主指令部分的指令导致对常量数据和工作负载的串行化处理。例如,流处理器434在时间T2和时间T3之间执行用于上下文状态#N的着色器程序的前导部分的指令,然后在时间T3和时间T4之间执行用于上下文状态#N的着色器程序的主指令部分,然后在时间T4和时间T5之间执行用于上下文状态#N+1的着色器程序的前导部分的指令,然后在时间T5和时间T6之间执行用于上下文状态#N+1的着色器程序的主指令部分,然后在时间T6和时间T7之间执行用于上下文状态#N+2的着色器程序的前导部分的指令,然后在时间T7执行用于上下文状态#N+2的着色器程序的主指令部分等。
此外,加载用于上下文状态的常量数据可能不是资源密集型任务。例如,前导部分的指令的执行可以由流处理器434的处理元件的子集(例如,一个处理元件)来执行。在一些这样的示例中,流处理器434的剩余处理元件可能是空闲的,这可能导致图形处理器430的资源未充分利用。
再次参考图4,为了改进无绑定资源(例如,在运行时请求的资源)的处理,示例HLSQ 432包括被配置为一次对一个工作项进行操作的无绑定状态处理器436(例如,标量处理器)。在一些示例中,无绑定状态处理器(BSP)436可以是专用于执行指令以加载无绑定资源的处理器。例如,BSP 436可以专用于前导部分的处理,并执行着色器程序的前导部分的指令以加载用于相应上下文状态的常量数据。BSP 436可以从图形数据缓冲器426加载常量数据,并且可以将常量数据存储在HLSQ 432的缓冲器438中。在BSP 436完成执行前导部分的指令并将相应的常量数据存储在缓冲器438之后,HLSQ 432然后可以将常量数据和着色器程序的主指令部分广播(例如,分发)到一个或多个流处理器434。
在所示示例中,BSP 436是被配置为执行用于处理着色器程序的前导部分的指令的处理器。特别地,BSP 436可以实施与流处理器434相同的指令集架构(ISA)。ISA通常定义处理电路可以解析和执行的指令和/或操作。在一些示例中,ISA可以是特定于处理电路(例如,特定于BSP 436和流处理器434)的机器语言指令的形式。通过在BSP 436和流处理器434处采用相同的ISA,着色器程序前导的指令可以在运行时期间由BSP 436或流处理器436执行。例如,在一些示例中,BSP 436可以执行着色器程序前导的指令,而在其他示例中,流处理器434可以执行着色器程序前导的指令。在一些示例中,着色器程序可以包括指示符(例如,标志或比特)以指示BSP 436还是流处理器434将执行着色器程序前导的指令。然而,应当理解,可以附加地或替代地使用用于指示BSP 436还是流处理器434将执行着色器程序前导的指令的其他技术。
在一些示例中,虽然BSP 436和流处理器434可以实施相同的ISA,但BSP 436可以被配置为执行流处理器434的功能子集。例如,BSP 436可以被配置为执行与前导部分的处理有关的功能,并且流处理器434可以被配置为执行与前导部分的处理和主指令部分的处理有关的功能。
如上所述,着色器程序的前导部分可以每个图形任务执行一次(例如,每个绘制命令一次或针对一个上下文状态一次),而着色器程序的主指令部分可以每工作项执行一次(例如,每个像素一次、每个顶点一次等)。以这种方式,可以以比由流处理器434执行主指令部分的指令低的频率执行BSP 436对常量数据的加载。
图7是根据本公开的方面的无绑定状态处理器(BSP)700的框图。在所示示例中,BSP 700可以是被配置为一次对一个工作项进行操作的任何类型的处理器。例如,BSP 700可以是标量处理器。BSP 700的一个或多个方面可由图4的BSP 436实施。在图7所示的示例中,BSP 700包括单光纤调度器702、单光纤上下文寄存器704、单光纤负载存储单元706、无绑定状态高速缓存708、统一通用寄存器(uGPR)710、标量EFU 712和标量ALU 714。
在所示示例中,单光纤调度器702被配置为处理不同的着色器程序前导。例如,单光纤调度器702可以被配置为处理顶点着色器程序前导、片段(或像素)着色器程序前导、几何着色器程序前导、域着色器程序前导、外壳着色器程序前导、计算着色器程序前导等。在一些示例中,单光纤调度器702可以被配置为通过例如指示标量EFU 712和/或标量ALU 714执行哪些功能来控制标量EFU 712和/或标量ALU 714的执行。例如,单光纤调度器702可以促进由标量EFU 712和/或标量ALU 714调度和管理光纤的指令的执行。在一些示例中,单光纤调度器702可以被配置为从HLSQ 432的缓冲器438和/或无绑定状态高速缓存器708获取指令,解码每个指令(如果需要),获取操作数(如果需要)用于执行该指令,以及对单光纤调度器702执行流控制。
在所示的示例中,单个光纤上下文寄存器704被配置为启用BSP 700内的流控制。在一些示例中,单个光纤上下文寄存器704可以包括地址寄存器、谓词寄存器等以促进流量控制。
在所示的示例中,单光纤负载存储单元706被配置为控制向BSP 700加载指令和/或数据以及从BSP 700加载指令和/或数据。例如,单光纤加载存储单元706可以与存储器420的图形数据缓冲器426和/或HLSQ 432的缓冲器438接口,并将指令加载到BSP 700的无绑定状态高速缓存708。单光纤加载存储单元706还可以与图形数据缓冲器426接口,并将数据从图形数据缓冲器426加载到BSP 700的存储器(例如,无绑定状态高速缓存708和/或uGPR 710)。单光纤负载存储单元706还可以将数据写入缓冲器438。例如,单光纤加载存储单元706可以从图形数据缓冲器426中获取通过执行着色器程序前导而生成的常量数据,并将获取的常量数据存储在缓冲器438中。
在所示的示例中,无绑定状态高速缓存708是可由标量EFU 712和标量ALU 714访问的存储器。在所示示例中,无绑定状态高速缓存708被配置为存储执行光纤的标量EFU712和/或标量ALU 714可访问的数据。
在所示示例中,uGPR 710是BSP 700的各个组件可访问的存储器。在所示示例中,uGPR 710包括用于一次存储一个元素的标量寄存器。uGPR 710可以存储由标量EFU 712和/或标量ALU 714生成的输出数据,并且可以附加地或替代地存储提供给BSP 700用于处理的输入数据(例如,用于执行算术函数的操作数)。在所示示例中,uGPR 710被配置为存储执行光纤的BSP 700可访问的数据。例如,uGPR 710可存储标量EFU 712和/或标量ALU 714用于执行光纤的输入数据,可存储标量EFU 712和/或标量ALU 714在执行光纤期间生成的中间结果,和/或可存储由执行光纤生成的输出数据。
在图7的所示示例中,标量EFU 712和标量ALU 714可以是被配置为对单个数据片执行操作的执行单元。标量EFU 712和/或标量ALU 714可以执行算术运算(例如,加法、减法、乘法、除法等)、逻辑运算(例如,逻辑与运算、逻辑或运算、逻辑异或运算等)、比较运算(例如,大于运算函数、小于运算、等于零运算等)等。标量EFU 712和标量ALU 714可以基于从单光纤调度器702接收的指令来执行(或执行)操作。该指令可以包括标识要执行的操作的操作标识符、用于执行该操作的操作数和用于存储执行该操作的输出的目的地。标量EFU712和标量ALU 714可以被配置为一次对一个组件(或属性)进行操作。
图8示出了描述根据本公开的一个或多个技术由图4的图形处理器430处理工作负载序列的另一示例时间线800。在图8的所示示例中,HLSQ 432从存储器420的图形数据缓冲器426加载用于上下文状态的指令。在所示示例中,由HLSQ 432加载的指令可以表示包括着色器程序前导和着色器程序的主指令部分的着色器程序。然后,BSP 436可以执行着色器程序前导的指令,以促进将常量数据从图形数据缓冲器426加载到HLSQ 432的缓冲器438。然后,HLSQ 432可以将加载的资源(例如,着色器程序的加载指令和常量数据)提供给流处理器中的各个流处理器以进行处理。如图8所示,HLSQ 432和BSP 436有助于加载工作负载的资源,然后将资源提供给流处理器434进行处理。
例如,在时间T1,HLSQ 432加载用于上下文状态#N的指令(例如,包括前导部分和主指令部分的着色器程序)。在时间T2,BSP 436可以执行着色器程序的前导部分的指令,并加载用于上下文状态#N的常量数据。例如,BSP 436可以从图形数据缓冲器426加载常量数据,并将常量数据存储在HLSQ 432的缓冲器438处。在加载常量数据之后,然后在时间T3,HLSQ 432可以向流处理器434广播(例如,分发)用于上下文状态#N的资源。例如,HLSQ 432可以将着色器程序的主指令部分和用于上下文状态#N的常量数据提供给流处理器434。在时间T3(或此后不久),流处理器434可以使用接收到的着色器程序的主指令部分和常量数据开始执行上下文状态#N的工作负载(例如,绘制命令)。HLSQ 432还可以开始加载用于上下文状态#N+1的指令(例如,包括前导部分和主指令部分的着色器程序)。
在时间T4,BSP 436可以执行着色器程序的前导部分的指令,并加载用于上下文状态#N+1的常量数据。例如,BSP 436可以从图形数据缓冲器426加载常量数据,并将常量数据存储在HLSQ 432的缓冲器438处。在所示的示例中,在加载常量数据之后(在时间T5),HLSQ432在广播用于上下文状态#N+1的资源之前等待流处理器434完成执行上下文状态#N的工作负载(在时间T6)。例如,HLSQ 432可以将着色器程序的主指令部分和用于上下文状态#N+1的常量数据提供给流处理器434。在时间T6(或此后不久),流处理器434可以使用接收到的着色器程序的主指令部分和常量数据开始执行上下文状态#N+1的工作负载(例如,绘制命令)。HLSQ 432还可以开始加载用于上下文状态#N+2的指令(例如,包括前导部分和主指令部分的着色器程序)。
在时间T7,BSP 436可以执行着色器程序的前导部分的指令,并加载用于上下文状态#N+2的常量数据。例如,BSP 436可以从图形数据缓冲器426加载常量数据,并将常量数据存储在HLSQ 432的缓冲器438处。在所示的示例中,在加载常量数据之后(在时间T8),HLSQ432在广播用于上下文状态#N+2的资源之前等待流处理器434完成执行上下文状态#N的工作负载(在时间T9)。例如,HLSQ 432可以将着色器程序的主指令部分和用于上下文状态#N+2的常量数据提供给流处理器434。在时间T9(或此后不久),流处理器434可以使用接收到的着色器程序的主指令部分和常量数据开始执行上下文状态#N+2的工作负载(例如,绘制命令)。
采用BSP 436以促进执行着色器程序的前导部分的前述方面可以包括许多不同的优点。例如,通过提供BSP 436作为HLSQ 432的组件,BSP 436能够促进有效地加载用于执行工作负载的无绑定常量数据。例如,由专用无绑定状态处理器执行着色器程序前导使得能够有效地执行着色器程序前导的指令,并且还避免了不能有效地利用图形处理器430的处理或存储器带宽的情况。BSP 436还允许尽早(例如,在向流处理器434广播资源之前)加载无绑定常量数据,这使得HLSQ 432和BSP 436能够管理着色器程序的状态处理,并且使得流处理器能够执行工作负载处理。此外,通过采用标量和单光纤组件,BSP 436可以是图形处理器430的资源高效附加。例如,BSP 436的物理区域和硬件成本可以相对最小。另外,由于BSP 436和流处理器432采用相同的ISA,所以实施BSP 436的软件成本也可以相对最小。
图9示出了根据本公开的一个或多个技术的示例方法的示例流程图900。该方法可以由诸如图1的设备104的装置、图形处理器(例如CPU、应用处理器、DPU、显示处理器、GPU、视频处理器等)和/或诸如图1的处理单元120的设备104的组件来执行。
在902处,该装置可以在图形处理器处接收着色器程序,该着色器程序包括前导部分和主指令部分,如结合图1至图7和/或图8的示例所述。例如,HLSQ 432可以加载着色器程序。
在904处,该装置可以使用专用于处理前导部分的标量处理器执行前导部分的指令,以加载与着色器程序相关联的常量数据,如结合图1至图7和/或图8的示例所述。例如,BSP 436可以执行前导部分的指令。在一些示例中,执行前导部分的指令可以包括从缓冲器中获取前导部分的指令,解码前导部分的指令,获取一个或多个操作数以执行前导部分的指令,执行流控制以执行前导部分的指令,基于流控制执行前导部分的指令,以及将由执行前导部分的指令产生的输出数据存储在缓冲器中。
在906处,该装置可以通过实施无绑定机制来执行前导部分的指令,如结合图1至图7和/或图8的示例所述。例如,实施无绑定机制可以包括从第一缓冲器加载第一数据子集,从第二缓冲器加载第二数据子集,以及将第一数据子集和第二数据子集级联到第三缓冲器中。
在908处,该装置可将着色器程序的主指令部分和常量数据分发到流处理器以用于执行着色器程序,如结合图1至图7和/或图8的示例所述。例如,HLSQ 432可以将主指令部分和常量数据从缓冲器438分发到流处理器434,以执行着色器程序的主指令部分。
在一种配置中,提供了一种用于图形处理的方法或装置。该装置可以是处理单元、GPU、应用处理器、CPU、显示处理器、显示处理单元(DPU)、视频处理器或可执行图形处理的一些其他处理器。在一些示例中,该装置可以是设备104内的处理单元120,或者可以是设备104或另一设备内的一些其他硬件。该装置可以包括用于在图形处理器处接收着色器程序的部件,该着色器程序包括前导部分和主指令部分。该装置还可以包括用于用专用于处理前导部分的标量处理器执行前导部分的指令,以实施用于加载与着色器程序相关联的常量数据的无绑定机制的部件。该装置还可以包括用于将主指令和常量数据分发给流处理器以用于执行着色器程序的部件。该装置还可以包括用于在标量处理器和流处理器处采用相同的指令集架构(ISA)的部件。该装置还可以包括用于在运行时期间实施无绑定机制的部件。该装置还可以包括用于从第一缓冲器加载第一数据子集的部件。该装置还可以包括用于从第二缓冲器加载第二子集数据的部件。该装置还可以包括用于将第一数据子集和第二数据子集级联到第三缓冲器中的部件。
该装置还可以包括用于从缓冲器中获取前导部分的指令的部件。该装置还可以包括用于解码前导部分的指令的部件。该装置还可以包括用于获取一个或多个操作数以执行前导部分的指令的部件。该装置还可以包括用于执行流控制以执行前导部分的指令的部件。该装置还可以包括用于基于流控制执行前导部分的指令的部件。该装置还可以包括用于将通过执行前导部分的指令而产生的输出数据存储在缓冲器中的部件。
本文所描述的主题可以实施为实现一个或多个益处或优点。例如,所描述的图形处理技术可由图形处理器(例如,GPU、应用处理器、CPU、显示处理器、DPU、视频处理器或可执行图形处理的一些其他处理器)使用,以实施在图形处理器处的无绑定状态处理的改进,减少处理单元(例如,被配置为执行本文公开的一个或多个技术的任何处理单元,例如图形处理器)的负载,和/或减少处理单元的功耗。
根据本公开,在上下文未另行规定的情况下,术语“或”可被解释为“和/或”。另外,虽然诸如“一个或多个”或“至少一个”等的短语可能已经用于本文所公开的一些特征,但不用于其他特征,但是在上下文不另行规定的情况下,未使用这种语言的特征可被解释为具有隐含的这种含义。
在一个或多个示例中,本文所描述的功能可在硬件、软件、固件或其任何组合中实现。例如,尽管贯穿本公开已经使用了术语“处理单元”,但是这样的处理单元可以用硬件、软件、固件或其任何组合来实现。如果本文所述的任何功能、处理单元、技术或其他模块是用软件实现的,则本文所述的功能、处理单元、技术或其他模块可以作为一个或多个指令或代码存储在计算机可读介质上或在计算机可读介质上传输。计算机可读介质可以包括计算机数据存储介质或通信介质,包括有助于将计算机程序从一个地方传送到另一个地方的任何介质。以这种方式,计算机可读介质通常可对应于(1)非暂时的有形计算机可读存储介质或(2)诸如信号或载波的通信介质。数据存储介质可以是可由一个或多个计算机或一个或多个处理器访问以检索用于实现本公开中描述的技术的指令、代码和/或数据结构的任何可用介质。作为示例而非限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备。本文所使用的磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘则以激光光学方式再现数据。上述的组合也应包括在计算机可读介质的范围内。计算机程序产品可以包括计算机可读介质。
代码可由一个或多个处理器执行,例如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、算术逻辑单元(ALU)、现场可编程逻辑阵列(FPGA)或其他等效集成或离散逻辑电路。因此,本文所使用的术语“处理器”可指上述结构中的任何一个或适合实现本文所述技术的任何其他结构。此外,这些技术可以在一个或多个电路或逻辑元件中完全实现。
本公开的技术可以在多种设备或装置中实现,包括无线手持机、集成电路(IC)或IC集合,例如芯片集合。本公开中描述了各种组件、模块或单元,以强调被配置为执行所公开的技术的设备的功能方面,但不一定需要由不同的硬件单元来实现。相反,如上所述,各种单元可以组合在任何硬件单元中,或者由互操作硬件单元的集合(包括如上所述的一个或多个处理器)连同合适的软件和/或固件提供。
已经描述了各种示例。这些和其他示例在以下权利要求的范围内。
Claims (20)
1.一种用于执行图形处理的方法,包括:
在图形处理器处接收包括前导部分和主指令部分的着色器程序;
用专用于处理前导部分的标量处理器执行所述前导部分的指令,以实施用于加载与所述着色器程序相关联的常量数据的无绑定机制;以及
将所述主指令部分和所述常量数据分发给流处理器以用于执行所述着色器程序。
2.根据权利要求1所述的方法,其中,所述标量处理器和所述流处理器采用相同的指令集架构(ISA)。
3.根据权利要求1所述的方法,其中,所述着色器程序包括指示所述标量处理器还是所述流处理器将执行所述前导部分的所述指令的指示符。
4.根据权利要求1所述的方法,其中,所述标量处理器被配置为执行所述流处理器的功能子集。
5.根据权利要求1所述的方法,其中,所述标量处理器被配置为在运行时期间实施所述无绑定机制。
6.根据权利要求1所述的方法,其中,所述无绑定机制的实施包括:
从第一缓冲器加载第一数据子集;
从第二缓冲器加载第二数据子集;以及
将所述第一数据子集和所述第二数据子集级联到第三缓冲器中。
7.根据权利要求6所述的方法,其中,所述第三缓冲器包括所述常量数据。
8.根据权利要求1所述的方法,其中,执行所述前导部分的所述指令包括:
从缓冲器中获取所述前导部分的所述指令;
解码所述前导部分的所述指令;
获取一个或多个操作数以用于执行所述前导部分的所述指令;
执行流控制以用于执行所述前导部分的所述指令;
基于所述流控制执行所述前导部分的所述指令;以及
将通过执行所述前导部分的所述指令而产生的输出数据存储在所述缓冲器处。
9.一种用于执行图形处理的装置,包括:
存储器;以及
至少一个处理器,耦合到所述存储器并且被配置为:
在图形处理器处接收包括前导部分和主指令部分的着色器程序;
用专用于处理前导部分的标量处理器执行所述前导部分的指令,以实施用于加载与所述着色器程序相关联的常量数据的无绑定机制;以及
将所述主指令部分和所述常量数据分发给流处理器以用于执行所述着色器程序。
10.根据权利要求9所述的装置,其中,所述标量处理器和所述流处理器采用相同的指令集架构(ISA)。
11.根据权利要求9所述的装置,其中,所述着色器程序包括指示所述标量处理器还是所述流处理器将执行所述前导部分的所述指令的指示符。
12.根据权利要求9所述的装置,其中,所述标量处理器被配置为执行所述流处理器的功能子集。
13.根据权利要求9所述的装置,其中,所述标量处理器被配置为至少包括单个光纤调度器、单个光纤上下文寄存器、单个光纤加载存储单元、无绑定状态高速缓存、统一通用寄存器、标量基本功能单元和标量算术逻辑单元。
14.根据权利要求9所述的装置,其中,所述标量处理器被配置为在运行时期间实施所述无绑定机制。
15.根据权利要求9所述的装置,其中,所述标量处理器被配置为通过以下方式实施所述无绑定机制:
从第一缓冲器加载第一数据子集;
从第二缓冲器加载第二数据子集;以及
将所述第一数据子集和所述第二数据子集级联到第三缓冲器中。
16.根据权利要求15所述的装置,其中,所述第三缓冲器包括所述常量数据。
17.根据权利要求9所述的设备,其中,所述装置包括无线通信设备。
18.一种存储用于数据图形的计算机可执行代码的非暂时性计算机可读介质,包括代码用于:
在图形处理器处接收包括前导部分和主指令部分的着色器程序;
用专用于处理前导部分的标量处理器执行所述前导部分的指令,以实施用于加载与所述着色器程序相关联的常量数据的无绑定机制;以及
将所述主指令部分和所述常量数据分发给流处理器以用于执行所述着色器程序。
19.根据权利要求18所述的非暂时性计算机可读介质,还包括用于在所述标量处理器和所述流处理器处采用相同的指令集架构(ISA)的代码。
20.根据权利要求18所述的非暂时性计算机可读介质,还包括用于基于所述着色器程序的指示符来确定所述标量处理器还是所述流处理器将执行所述前导部分的所述指令的代码。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/074108 WO2021151248A1 (en) | 2020-01-31 | 2020-01-31 | Methods and apparatus to facilitate dedicated bindless state processor |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115023728A true CN115023728A (zh) | 2022-09-06 |
Family
ID=77078579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080094438.4A Pending CN115023728A (zh) | 2020-01-31 | 2020-01-31 | 促进专用无绑定状态处理器的方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230019763A1 (zh) |
CN (1) | CN115023728A (zh) |
WO (1) | WO2021151248A1 (zh) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060082577A1 (en) * | 2004-10-20 | 2006-04-20 | Ugs Corp. | System, method, and computer program product for dynamic shader generation |
US8094158B1 (en) * | 2006-01-31 | 2012-01-10 | Nvidia Corporation | Using programmable constant buffers for multi-threaded processing |
US9349154B2 (en) * | 2010-04-05 | 2016-05-24 | Nvidia Corporation | Bindless texture and image API |
EP3736775B1 (en) * | 2016-03-14 | 2023-10-11 | Imagination Technologies Limited | Methods and graphics processing units for determining differential data for rays of a ray bundle |
US9799094B1 (en) * | 2016-05-23 | 2017-10-24 | Qualcomm Incorporated | Per-instance preamble for graphics processing |
US10026145B2 (en) * | 2016-12-13 | 2018-07-17 | Qualcomm Incorporated | Resource sharing on shader processor of GPU |
US10733141B2 (en) * | 2018-03-27 | 2020-08-04 | Analog Devices, Inc. | Distributed processor system |
US10997086B1 (en) * | 2020-03-03 | 2021-05-04 | Intel Corporation | Systems and methods in a graphics environment for providing shared virtual memory addressing support for a host system |
-
2020
- 2020-01-31 CN CN202080094438.4A patent/CN115023728A/zh active Pending
- 2020-01-31 US US17/758,219 patent/US20230019763A1/en active Pending
- 2020-01-31 WO PCT/CN2020/074108 patent/WO2021151248A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2021151248A1 (en) | 2021-08-05 |
US20230019763A1 (en) | 2023-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11373268B2 (en) | Apparatus and method for graphics processing unit hybrid rendering | |
US20230290034A1 (en) | Fast incremental shared constants | |
US20230113415A1 (en) | Gpr optimization in a gpu based on a gpr release mechanism | |
US20220114694A1 (en) | Methods and apparatus for optimizing gpu kernel with simo approach for downscaling utilizing gpu cache | |
WO2021151248A1 (en) | Methods and apparatus to facilitate dedicated bindless state processor | |
US11087431B2 (en) | Methods and apparatus for reducing draw command information | |
US11657471B2 (en) | Methods and apparatus for constant data storage | |
US11954758B2 (en) | Dynamic wave pairing | |
US20230377240A1 (en) | Run-time mechanism for optimal shader | |
US11373267B2 (en) | Methods and apparatus for reducing the transfer of rendering information | |
US20240046543A1 (en) | Runtime mechanism to optimize shader execution flow | |
US20220357983A1 (en) | Methods and apparatus for wave slot retirement procedures | |
CN117616446A (zh) | 基于图块的架构中的深度和阴影通道渲染的优化 |
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 |