GPU中基于GPR释放机制的GPR优化的制作方法


gpu中基于gpr释放机制的gpr优化
1.相关申请的交叉引用
2.本技术要求于2020年5月18日递交的题为“gpr optimization in a gpu based on a gpr release mechanism”的美国专利申请第16/877,367号的权益,该申请通过引用整体明确地并入本文。
技术领域
3.本公开通常涉及处理系统,更具体地涉及图形处理中使用释放机制的寄存器优化。


背景技术:



4.计算设备经常执行图形处理(例如,利用图形处理单元(gpu))以渲染图形数据用于由计算设备进行显示。这样的计算设备可以包括例如计算机工作站、诸如智能电话的移动电话、嵌入式系统、个人计算机、平板计算机以及视频游戏控制台。gpu被配置为执行图形处理管线,该图形处理管线包括一起操作以执行图形处理命令并输出帧的一个或多个处理阶段。中央处理单元(cpu)可以通过向gpu发布一个或多个图形处理命令来控制gpu的操作。现如今cpu通常能够并发地执行多个应用,每个应用在执行期间可能需要利用gpu。为显示器上的视觉呈现提供内容的设备可以利用gpu。
5.通用寄存器(gpr)可以被分配给在gpu上执行的程序以暂时地存储信息。然而,随着更多的gpr被分配给程序,更少数量的线程可以同时驻留在gpu中。因此,需要减少分配给程序的gpr的数量。


技术实现要素:



6.以下呈现了一个或多个方面的简化总结,以便提供对这些方面的基本理解。该总结不是对所有预期方面的广泛概述,并且既不旨在标识所有方面的重要或关键要素,也不旨在描绘任何或所有方面的范围。其唯一目的是以简化形式呈现一个或多个方面的一些概念,作为稍后呈现的更详细描述的前言。
7.gpr可以在着器编译之后基于已编译着器内的许多可能分支被可变地分配给着器程序。更具体地,编译器可以在编译时间确定着器的变量可以在整个绘制调用的持续时间中是恒定的,即使该变量的确切值可能在编译时间未由编译器确定。因此,已编译着器内的可能分支的数量可以基于常量在着器运行时可能采用的不同值来确定。结果,可能在编译时间将过多的gpr分配给着器,以确保着器有足够的gpr来执行即使是最复杂的着器分支,而不管这样的分支是否会实际执行。
8.因此,可编程gpr释放机制可用于解除分配在编译时间分配给着器的过多gpr。释放机制可以在由着器确定常量的值之后在着器的运行时被执行。更具体地,例如,可以使用需要更多gpr来执行的复杂分支和需要更少gpr来执行的简单分支来编译着器。基于为常量定义的值,着器可以确定在绘制调用期间将不会执行复杂分支,并且在编译时
间分配给着器的一些gpr超出了执行简单分支所需的数量。因此,释放机制可以被配置为从后续着器线程中解除分配过多/不需要的gpr,使得更多的后续线程可以同时驻留在gpu中。
9.在本公开的方面中,提供了一种方法、一种计算机可读介质和一种装置。该装置可以包括存储器和耦接至存储器的至少一个处理器。至少一个处理器可以被配置为基于为可执行着器定义的常量确定可执行着器内的至少一个未使用的分支,并且进一步基于至少一个未使用的分支确定能够从已分配的gpr中解除分配的gpr的数量。至少一个处理器可以基于所确定的gpr的数量在绘制调用内的可执行着器执行期间从已分配的gpr中解除分配该数量的gpr。
10.为了实现前述和相关目的,一个或多个方面包括在下文中充分描述并且在权利要求中特别指出的特征。以下描述和附图详细阐述了一个或多个方面的某些图示性特征。然而,这些特征仅表示可以采用各个方面的原理的各种方式中的几种,并且本描述旨在包括所有这样的方面及其等同物。
附图说明
11.图1是图示了根据本公开的一种或多种技术的示例性内容生成系统的框图。
12.图2是图示了根据本公开的一种或多种技术的用于处理数据的示例性组件的框图。
13.图3是根据本公开的一种或多种技术的对应于用于基于gpr分配来执行着器的示例指令的框图。
14.图4是根据本公开的一种或多种技术的对应于用于基于可编程gpr释放机制来执行着器的示例指令的框图。
15.图5是根据本公开的一种或多种技术的示例方法的流程图。
16.图6是图示了示例装置中不同部件/组件之间的数据流的概念数据流图。
具体实施方式
17.下文参照附图更充分地描述系统、装置、计算机程序产品和方法的各个方面。然而,本公开可以以许多不同的形式体现,并且不应被解释为限于贯穿本公开呈现的任何特定结构或功能。相反,提供这些方面是为了使本公开全面和完整,并将本公开的范围充分传达给本领域技术人员。基于本文中教导,本领域技术人员应当理解,本公开的范围旨在涵盖本文公开的系统、装置、计算机程序产品和方法的任何方面,无论是独立于本公开的任何其他方面实施还是与本公开的任意其他方面组合实施。例如,可以使用本文阐述的任何数量的方面来实施装置或实践方法。此外,本公开的范围旨在覆盖这样的装置或方法,该装置或方法除了使用本文阐述的本公开的各个方面之外还使用其他结构、功能、或结构和功能或使用本文阐述的本公开的各个方面之外的其他结构、功能、或结构和功能来实践。本文所公开的任何方面都可以通过权利要求的一个或多个元素来体现。
18.尽管本文描述了各个方面,但这些方面的许多变化和排列落入本公开的范围内。尽管提及了本公开的各方面的一些潜在益处和优点,但本公开的范围并不旨在限于特定的益处、用途或目标。相反,本公开的各方面旨在广泛适用于不同的无线技术、系统配置、网络
和传输协议,其中一些在附图和以下描述中以示例的方式示出。详细描述和附图仅是对本公开的说明而非限制,本公开的范围由所附权利要求及其等同物限定。
19.参照各种装置和方法来呈现若干方面。这些装置和方法通过各种框、组件、电路、处理、算法等(统称为“元素”)在以下详细描述中被描述并在附图中被图示。这些元素可以使用电子硬件、计算机软件或它们的任何组合来实现。这样的元素是作为硬件还是软件实现取决于特定的应用和施加在整个系统上的设计约束。
20.举例来说,元素或元素的任何部分或元素的任何组合可以被实施为包括一个或多个处理器(也可以被称为处理单元)的“处理系统”。处理器的示例包括微处理器、微控制器、图形处理单元(gpu)、通用gpu(gpgpu)、中央处理单元(cpu)、应用处理器、数字信号处理器(dsp)、精简指令集计算(risc)处理器、片上系统(soc)、基带处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、可编程逻辑器件(pld)、状态机、门控逻辑、分立硬件电路以及被配置为执行贯穿本公开所描述的各种功能的其他合适硬件。处理系统中的一个或多个处理器可以执行软件。软件可以广义地解释为指令、指令集、代码、代码段、程序代码、程序、子程序、软件组件、应用、软件应用、软件封装、例程、子例程、对象、可执行文件、执行线程、过程、函数等,无论被称为软件、固件、中间件、微码、硬件描述语言还是其他。
21.术语应用可以指代软件。如本文所描述的,一种或多种技术可以指代被配置为执行一个或多个功能的应用(例如,软件)。在这样的示例中,应用可以存储在存储器(例如,处理器的片上存储器、系统存储器或任何其他存储器)中。本文描述的硬件(诸如处理器)可以被配置为执行应用。例如,应用可以被描述为包括当由硬件执行时使硬件执行本文描述的一种或多种技术的代码。作为示例,硬件可以访问来自存储器的代码并且执行从存储器访问的代码以执行本文描述的一种或多种技术。在一些示例中,在本公开中标识了组件。在这样的示例中,组件可以是硬件、软件或其组合。组件可以是单独的组件或单个组件的子组件。
22.因此,在本文描述的一个或多个示例中,所描述的功能可以以硬件、软件或其任何组合来实现。如果以软件实现,则这些功能可以被存储在计算机可读介质上或被编码为计算机可读介质上的一个或多个指令或代码。计算机可读介质包括计算机存储介质。存储介质可以是计算机可以访问的任何可用介质。作为示例而非限制,这样的计算机可读介质可以包括随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程rom(eeprom)、光盘存储器、磁盘存储器、其他磁存储设备、上述类型的计算机可读介质的组合,或可被用于以可由计算机访问的指令或数据结构的形式存储计算机可执行代码的任何其他介质。
23.一般而言,本公开描述了用于在单个设备或多个设备中进行图形处理的技术,其可以改进图形内容的渲染和/或减少处理单元(例如,被配置为执行本文描述的一种或多种技术的任何处理单元,诸如gpu)的负载。例如,本公开描述了适用于利用图形处理器的任何设备中的图形处理的技术。这样的技术的其他潜在优点在本公开全文中进行了描述。
24.如本文所用,术语“内容”的实例可以指代“图形内容”、“图像”等,而不管这些术语是否用作形容词、名词或其他词性。在一些示例中,如本文所使用的术语“图形内容”可以指代由图形处理管线的一个或多个进程产生的内容。在进一步的示例中,如本文所用的术语“图形内容”可以指代由被配置为执行图形处理的处理单元产生的内容。在更进一步的示例中,如本文所使用的术语“图形内容”可以指代由图形处理单元产生的内容。
25.gpr可以在着器编译之后基于已编译着器内的许多可能分支被可变地分配给着器程序。更具体地,编译器可以在编译时间确定着器的变量可以在整个绘制调用的持续时间中是恒定的,即使该变量的确切值可能在编译时间未由编译器确定。因此,已编译着器内的可能分支的数量可以基于常量在着器运行时可能采用的不同值来确定。结果,可能在编译时间将过多的gpr分配给着器,以确保着器有足够的gpr来执行即使是最复杂的着器分支,而不管这样的分支是否会实际执行。
26.因此,可编程gpr释放机制可用于解除分配在编译时间分配给着器的过多gpr。释放机制可以在由着器确定常量的值之后在着器的运行时被执行。更具体地,例如,可以使用需要更多gpr来执行的复杂分支和需要更少gpr来执行的简单分支来编译着器。基于为常量定义的值,着器可以确定在绘制调用期间将不会执行复杂分支,并且在编译时间分配给着器的一些gpr超出了执行简单分支所需的数量。因此,释放机制可以被配置为从着器解除分配过多/不需要的gpr,使得过多的gpr可以被分配给gpu中的后续线程,从而允许更多的后续线程同时驻留在gpu中。
27.图1是图示了被配置为实现本公开的一种或多种技术的示例内容生成系统100的框图。内容生成系统100包括设备104,设备104可以是但不限于视频设备(例如,媒体播放器)、机顶盒、无线通信设备(例如,智能电话)、个人数字助理(pda)、台式/笔记本电脑、游戏控制台、视频会议单元、平板计算设备等。设备104可以包括用于执行本文描述的各种功能的一个或多个组件或电路。在一些示例中,设备104的一个或多个组件可以是soc的组件。设备104可以包括被配置为执行本公开的一种或多种技术的一个或多个组件。在所示示例中,设备104可以包括处理单元120和系统存储器124。在一些方面中,设备104可以包括多个可选组件(例如,通信接口126、收发器132、接收器128、发送器130、显示处理器127和一个或多个显示器131)。(多个)显示器131可以指一个或多个显示器131。例如,显示器131可以包括单个显示器或多个显示器,多个显示器可以包括第一显示器和第二显示器。第一显示器可以是左眼显示器,并且第二显示器可以是右眼显示器。在一些示例中,第一和第二显示器可以接收不同的帧以在其上呈现。在其他示例中,第一和第二显示器可以接收相同的帧以在其上呈现。在进一步的示例中,图形处理的结果可以不显示在设备上,例如,第一和第二显示器可能不会接收到任何用于在其上呈现的帧。相反,帧或图形处理结果可以被传送至另一设备。在一些方面,这可以被称为分割渲染。
28.处理单元120可以包括内部存储器121。处理单元120可以被配置为使用图形处理管线107来执行图形处理。在一些示例中,设备104可以包括显示处理器(诸如显示处理器127)以在由一个或多个显示器131显示之前对由处理单元120生成的一个或多个帧执行一种或多种显示处理技术。显示处理器127可以被配置为执行显示处理。例如,显示处理器127可以被配置为对由处理单元120生成的一个或多个帧执行一种或多种显示处理技术。一个或多个显示器131可以被配置为显示或以其他方式呈现由显示处理器127处理的帧。在一些示例中,一个或多个显示器131可以包括液晶显示器(lcd)、等离子显示器、有机发光二极管(oled)显示器、投影显示设备、增强现实显示设备、虚拟现实显示设备、头戴式显示器或任何其他类型的显示设备中的一种或多种。
29.处理单元120外部的存储器(诸如系统存储器124)可以由处理单元120访问。例如,处理单元120可以被配置为从外部存储器(诸如系统存储器124)读取和/或向外部存储器
(诸如系统存储器124)写入。处理单元120可以通过总线通信地耦接至系统存储器124。在一些示例中,处理单元120可以通过总线或经由不同的连接通信地耦接至内部存储器121。内部存储器121或系统存储器124可以包括一个或多个易失性或非易失性存储器或存储设备。在一些示例中,内部存储器121或系统存储器124可以包括ram、静态随机存取存储器(sram)、动态随机存取存储器(dram)、可擦除可编程rom(eprom)、eeprom、闪存、磁数据介质或光存储介质或任何其他类型的存储器。
30.根据一些示例,内部存储器121或系统存储器124可以是非暂时性存储介质。术语“非暂时性”可以表示存储介质不在载波或传播信号中体现。然而,术语“非暂时性”不应被解释为意味着内部存储器121或系统存储器124是不可移动的或其内容是静态的。作为一个示例,系统存储器124能够从设备104中移除并且移动到另一设备。作为另一个示例,系统存储器124可能不能从设备104中移除。
31.处理单元120可以是cpu、gpu、gpgpu或可以被配置为执行图形处理的任何其他处理单元。在一些示例中,处理单元120可以集成到设备104的主板中。在进一步的示例中,处理单元120可以呈现在安装于设备104的主板的端口中的图形卡上,或者可以以其他方式并入被配置为与设备104交互操作的外围设备内。处理单元120可以包括一个或多个处理器,诸如一个或多个微处理器、gpu、asic、fpga、算术逻辑单元(alu)、dsp、离散逻辑、软件、硬件、固件、其他等效的集成或分立逻辑电路或其任何组合。如果这些技术部分地以软件实现,则处理单元120可以将用于软件的指令存储在合适的非暂时性计算机可读存储介质(例如,内部存储器121)中,并且可以使用一个或多个处理器在硬件中执行指令以执行本公开的技术。上述中的任何一种,包括硬件、软件、硬件和软件的组合等,都可以被认为是一个或多个处理器。
32.在一些方面中,内容生成系统100可以包括可选的通信接口126。通信接口126可以包括接收器128和发送器130。接收器128可以被配置为执行本文关于设备104描述的任何接收功能。附加地,接收器128可以被配置为从另一设备接收信息,例如,眼睛或头部位置信息、渲染命令或位置信息。发送器130可以被配置为执行本文关于设备104描述的任何发送功能。例如,发送器130可以被配置为向另一设备发送信息,该信息可以包括对内容的请求。接收器128和发送器130可以组合成收发器132。在这样的示例中,收发器132可以被配置为执行本文关于设备104描述的任何接收功能和/或发送功能。
33.再次参照图1,在某些方面中,图形处理单元120可以包括gpr解除分配组件198,其被配置为基于为可执行着器定义的常量确定可执行着器内的至少一个未使用的分支;基于至少一个未使用的分支,确定能够从已分配的gpr中解除分配的gpr的数量;以及对于绘制调用中的后续线程,基于所确定的gpr数量在可执行着器的执行期间从已分配的gpr中解除分配该数量的gpr。将解除分配组件198描述和引用为“组件”是为了便于解释并且不一定对应于处理单元120中的特定硬件组件。例如,解除分配组件198可以被配置为代码、逻辑等。
34.诸如设备104的设备可以指被配置为执行本文描述的一种或多种技术的任何设备、装置或系统。例如,设备可以是服务器、、用户设备、客户端设备、站、接入点、计算机(诸如个人计算机、台式计算机、膝上型计算机、平板计算机、计算机工作站或大型计算机)、终端产品、装置、电话、智能电话、服务器、视频游戏平台或控制台、手持设备(诸如便携式视
频游戏设备或个人数字助理(pda))、可穿戴计算设备(诸如智能手表、增强现实设备或虚拟现实设备)、非可穿戴设备、显示器或显示设备、电视机、电视机顶盒、中间网络设备、数字媒体播放器、视频流设备、内容流设备、车载计算机、任何移动设备、被配置为生成图形内容的任何设备、或被配置为执行本文描述的一种或多种技术的任何设备。本文中的过程可以被描述为由特定组件(例如,gpu)执行,但是在其他实施例中,可以使用与所公开的实施例一致的其他组件(例如,cpu)来执行。
35.图2是图示了如可以结合用于处理数据的示例性设备104标识的诸如处理单元120和系统存储器124的示例性组件的框图200。在各方面中,处理单元120可以包括cpu 202和gpu 212。gpu 212和cpu 202可以形成为集成电路(例如,soc)和/或gpu 212可以并入到具有cpu 202的主板上。附加地,cpu 202和gpu 212可以被配置为通信地耦接至彼此的不同处理单元。例如,gpu 212可以并入安装于包括cpu 202的主板端口中的图形卡上。
36.cpu 202可以被配置为基于gpu 212的一个或多个操作来执行使图形内容被显示(例如,在设备104的(多个)显示器131上)的软件应用。软件应用可以发布指令到图形应用程序接口(api)204,图形api 204可以是运行时程序,其将从软件应用接收到的指令转换成gpu驱动器210可读的格式。在经由图形api 204从软件应用接收指令之后,gpu驱动器210可以基于指令控制gpu 212的操作。例如,gpu驱动器210可以生成一条或多条命令流,该命令流被放置到系统存储器124中,其中gpu 212被指示(例如,经由一个或多个系统调用)执行命令流。被包括在gpu 212中的命令引擎214被配置为检索存储在命令流中的一个或多个命令。命令引擎214可以提供来自命令流的命令以由gpu 212执行。命令引擎214可以是gpu 212的硬件、在gpu 212上执行的软件/固件、或其组合。
37.虽然gpu驱动器210被配置为实现图形api 204,但gpu驱动器210不限于根据任何特定api进行配置。系统存储器124可以存储用于gpu驱动器210的代码,cpu 202可以检索该代码以用于执行。在示例中,gpu驱动器210可以被配置为允许cpu 202与gpu 212之间的通信,诸如当cpu 202经由gpu驱动器210将图形或非图形处理任务卸载到gpu 212时。
38.系统存储器124可以进一步存储用于前导着器224或主着器226中的一个或多个的源代码。在这样的配置中,在cpu 202上执行的着器编译器208可以编译着器224-226的源代码以创建gpu 212的着器核心216在运行时(例如,当着器224-226将在着器核心216上执行时)可执行的目标代码或中间代码。在一些示例中,着器编译器208可以预编译着器224-226并将着器程序的目标代码或中间代码存储在系统存储器124中。
39.在cpu 202上执行的着器编译器208(或在另一示例中为gpu驱动器210)可以构建具有多个组件的着器程序,多个组件包括前导着器224和主着器226。主着器226可以对应于不包括前导着器224的部分或全部着器程序。着器编译器208能够从在cpu 202上执行的程序接收指令以编译(多个)着器224-226。着器编译器208还可以标识着器程序中的常量加载指令和公共操作,用于将公共操作包括在前导着器224(而不是主着器226)内。着器编译器208可以例如基于(当前未确定的)要被包括在公共指令中的常量206来标识这样的公共指令。常量206可以在图形api 204内被定义为在整个绘制调用中是常量。着器编译器208可以利用诸如前导着器开始的指令来指示前导着器224的开始并且利用前导着器结束来指示前导着器224的结束。类似的指令可以用于主着器226。
40.gpu 212中所包括的着器核心216可以包括gpr 218和常量存储器220。gpr 218可以对应于单个gpr、gpr文件和/或gpr库。gpr 218中的每个gpr可以存储单个线程可访问的数据。在gpu 212上执行的软件和/或固件可以是着器程序224-226,其可以在gpu 212的着器核心216上执行。着器核心216可以被配置为并行执行相同着器程序的相同指令的许多实例。例如,着器核心216可以针对定义给定形状的每个像素执行主着器226。
41.着器核心216可以发送和接收来自在cpu 202上执行的应用的数据。在示例中,用于执行着器224-226的常量206可以存储在常量存储器220(例如,读/写常量ram)或gpr 218中。着器核心216可以将常量206加载到常量存储器220中。在进一步的示例中,前导着器224的执行可以使常量值或常量值集合被存储在诸如常量存储器220(例如,常量ram)、gpu存储器222或系统存储器124的片上存储器中。常量存储器220可以包括可由着器核心216的所有方面访问的存储器,而不仅仅是为特定线程保留的特定部分(诸如gpr 218中保存的值)。
42.图3是对应于用于基于gpr分配执行着器302的示例指令350的框图300。gpr可以在着器编译时间被可变地分配给着器。然而,随着分配给着器302的gpr 218的数量增加,可以同时驻留在gpu中的相应线程数量减少。这样的由分配的gpr 218的数量增加造成的影响不仅可能限制延迟隐藏,而且还可能降低gpu的整体性能。为了平衡增加分配给着器302的gpr 218的数量和增加可同时驻留在gpu中的线程的数量之间的折衷,可以仅基于着器执行所需的最小数量的gpr 218来执行着器302,使得着器302没有未使用的已分配的gpr资源。
43.执行着器302所需的gpr 218的最小数量可以基于在着器302的运行时间期间对于单个绘制调用或内核不改变的恒定/统一值。假定编译器在编译着器302时编译器可能不知道常量206的准确值,过多的gpr 218可能被分配给着器302以确保gpr 218有足够的可用性来执行着器302的更复杂的路径/分支(例如,复杂分支304)。如果在编译着器302时常量206的值是已知的,则编译器可能能够通过消除来自需要更多gpr 218来执行的着器302的某些分支来提高着器性能,从而减少编译后需要分配给着器302的gpr 218的数量。替代地,如果gpu驱动器可以在着器302被提交(例如,排队)到gpu时确定常量206的值,则编译器可以生成着器302的多个版本,每个版本具有不同的gpr分配并允许gpu驱动器来选择将在提交时间使用的着器302的版本。
44.通常,常量206的值不能由编译器在编译时间确定,也不能由gpu驱动器在提交时间确定。虽然编译的着器302可以被配置为在运行时间识别常量206的值,但是到运行发生时,gpr 218的数量可能已经分配给着器302,可能超过执行着器302的某些分支所需的gpr 218的数量。因此,即使编译器可以被配置为在编译时间识别变量是常量,该常量206的确切值也可能在着器编译期间保持未知,使得不能使用该常量值来减少gpr分配。
45.着器可以具有基于常量206的某种组合的不同流控制路径/分支。可以在图形api中定义常量206以跨越整个绘制调用(例如,针对对应形状的整个生命周期)保持相同。也就是说,给定值的常量206不会跨绘制调用在每个像素的基础上从一个像素改变到下一个像素。对于执行相应形状的所有像素,常量206在整个着器生命周期内保持不变。常量缓冲区(也可以被称为统一缓冲区)可以由图形api管理并驻留在存储器中(例如,类似于纹理缓冲区或帧缓冲区),其中常量缓冲区可以由着器302访问以在绘制调用上提供常量/
统一值。
46.可执行着器程序可以包括着器程序的前导部分和着器程序的主要部分(或简称为“前导着器”224和“主着器”226)。前导着器224可以是每个绘制调用或内核仅执行一次的着器302的部分。可以在允许任何线程执行主着器226之前执行前导着器224。前导着器224还可以将常量值预加载到gpu的本地存储器中,其中常量值可以由在主着器226内执行的多个线程使用。因此,常量值可以由前导着器每次绘制调用获取一次,而不是由主着器为绘制调用内的每个线程(例如,像素)获取。
47.在示例中,前导着器224能够从本地常量缓冲区中获取本地常量206。当本地常量206具有第一值(例如,常量值x)时,主着器226可以使用第一数量的gpr 218(例如,20个gpr)来执行复杂分支304。当本地常量具有第二值(例如,常量值y)时,主着器226可以使用第二数量的gpr 218(例如,4个gpr)来执行简单分支306。然而,在针对绘制调用的本地常量为0并且不需要执行复杂分支304的情况下,着器302仍然可以例如基于20个gpr的分配而不是基于4个gpr的分配被执行。结果,分配给着器302的gpr 218中的一些可能是不必要的/过多的。
48.图4是对应于用于基于可编程gpr释放机制402执行着器302的示例指令450的框图400。gpr释放机制402可以在运行时被执行以允许基于本地常量值和/或分配的gpr 218的数量的确定对gpr“足迹”进行修改。例如,当本地常量206为0时,着器302可能能够执行用于绘制调用的简单分支306(例如,每个线程有4个gpr)并且可以释放与绘制调用内的后续线程/像素执行相关联的任何过多的gpr 218(例如,可以释放16个gpr)。与可能导致gpr分配基于复杂分支304的编译器(因为编译器可能没有办法在编译时间确定常量206的值)相反,着器302可以在识别常量206的这些值之后经由gpr释放机制402确定着器302执行实际需要的gpr 218的数量,使得能够从着器302释放/解除分配任何不需要的gpr 218。
49.因此,基于由gpr释放机制402所确定的常数206的值,着器302可以基于需要更多数量的gpr 218的复杂分支304被执行,或者着器302可以基于需要更少数量的gpr 218的简单分支306被执行。然而,当常量206的值被确定为对应于简单分支306的执行的值时,使得不需要执行复杂分支304,分配给着器302的超过执行简单分支306所需的gpr 218能够从着器302解除分配以用于后续的执行实例。因此,gpr释放机制402可以被配置为增加gpr 218的可用性以供在着器302外部的gpu的其他线程使用,以通过使更多线程能够同时驻留来为gpu提供更有效的gpr资源分配。
50.经由gpr释放机制402对gpr 218解除分配可能不适用于前导着器224(每次绘制调用仅执行一次)或主着器226的第一个执行实例,而可能仅适用于尚未发出或尚未收到gpr分配的绘制调用内的后续线程。由于gpr释放机制402被配置为修改用于后续线程的gpr分配,因此与用于从已经分配有gpr 218的当前线程释放gpr的方法相比,用于从后续线程释放gpr 218的方法可以被简化。在一些情况下,为后续线程解除分配gpr 218的确切时间可能不太重要,因为以过量gpr分配执行的较早发布的线程仍将正确执行。这样,gpr释放机制402可以被并入前导着器224(例如,为绘制调用的所有线程解除分配gpr)和/或主着器226(例如,为绘制调用的线程子集解除分配gpr,诸如在不使用前导着器224的配置中)之一或两者中。
51.可以访问常量206的命令处理器或其他可编程硬件单元可以被配置为执行与gpr释放机制402类似的操作。例如,命令处理器可以被配置为在着器302由命令处理器启动之前基于常量206确定执行着器302所需的gpr 218的数量。命令处理器然后可以基于所确定的gpr 218的数量使gpr 218被分配给着器302。
52.可以同时编译前导着器224和主着器226。前导着器224可用于从存储器获取常量206并将常量206存储在本地常量缓冲区中,其中常量206可以在绘制调用期间被更有效地访问。因为常量206在整个绘制调用中保持不变,所以前导着器224提供了在绘制调用开始时获取一次常量206的方式,而不是由主着器226为每个像素获取。虽然前导着器224可以提供管理本地常量存储以便更有效地访问常量206的益处,但是前导着器224并非实现gpr释放机制402的必要条件。例如,编译器可以替代编译主着器226以用于从存储器中获取常量206,尽管是在每像素的基础上而不是每次绘制调用一次。可以由主着器226的gpr释放机制402为每个单独的像素/线程确定关于执行像素/线程所需的gpr 218的数量,从而可以为绘制调用中的后续着器执行的实例解除分配过多的gpr 218。由于每个像素的确定是基于常量206的,因此为后续像素/线程确定的gpr 218的数量在整个绘制调用中保持不变。虽然前导着器224可以允许在主着器226一开始执行时就解除分配gpr 218,但gpr释放机制402可以类似地在绘制调用的第一部分以效率较低的gpr分配被执行之后由主着器402执行,以为执行绘制调用的第二部分提供过多gpr的解除分配/更有效的gpr分配。
53.当编译器生成着器302时,可以基于可以输入到着器302的函数的不同的可能常量206来识别通过着器302的多个唯一路径/分支。也就是说,编译器可以基于着器302的函数和不同的可能常量206确定将被分配给着器302的gpr 218的数量。由编译器在编译时间确定的gpr 218的数量通常足够灵活,甚至可以满足基于不同的可能常量206的通过着器302的最复杂的路径/分支(例如,复杂分支304)。前导着器224可以是并入用于确定着器执行所需的gpr 218的数量的gpr释放机制402的自然位置,因为对任何不需要的gpr 218的解除分配发生在主着器226的初始执行时间。然而,gpr释放机制402不限于并入前导着器224内,用于降低gpr分配,从而允许同时执行更多线程/像素,改进延迟隐藏,和/或增加着器302和系统存储器两者的效率。
54.图5是根据本公开的一种或多种技术的gpr解除分配的示例方法500的流程图。方法500可以由gpu、cpu、命令处理器、用于图形处理的装置、无线通信设备等执行,如结合图1-图4的示例使用的那样。
55.在502处,前导着器可以获取定义的常量(例如,以执行gpr解除分配的方法)。例如,参照图2,在着器核心216上执行的前导着器224能够从图形api 204获取常量206。当由gpu执行时,gpr解除分配的方法可以由前导着器在可执行着器内并且在可执行着器的主要部分之前被执行。附加地或替代地,当由gpu执行时,gpr解除分配的方法可以在可执行着器的主要部分内执行,并应用于绘制调用内的可执行着器的主要部分的后续调用。例如,参照图2,前导着器224和/或主着器226可以在gpu 212的着器核心216上执行,以执行gpr解除分配的方法。在进一步的配置中,gpr解除分配的方法可以由gpu内的命令处理器执行。例如,参照图2,命令引擎214可以在gpu 212上执行来自命令流的命令以执行gpr解除分配方法。
56.在504处,所定义的常量可以被存储在可执行着器内可访问的本地常量缓冲区中。例如,参照图2,常量206可以被存储在着器核心216可访问的常量存储器220中。在进一步的方面中,常量206可以存储在gpu存储器222中。
57.在506处,可以确定可执行着器内的分支的数量。例如,参照图2,可以由gpu 212基于可以用于执行前导着器224和/或主着器226的常量206的不同值来确定分支的数量。在编译可执行着器时常量可能未定义。因此,可由可执行着器使用的常量206可以采用着器编译器208在编译时间未确定,但可由可执行着器在运行时间确定的值。
58.在508处,可以基于所确定的分支数量来分配gpr。例如,参照图2,可以将gpr 218分配给着器核心216以用于执行前导着器224和/或主着器226的分支。当要执行gpr的解除分配时,能够从已分配的gpr中解除分配多个gpr。
59.在510处,可以基于为可执行着器定义的常量确定可执行着器内的至少一个未使用的分支。例如,参照图2,由前导着器224或主着器226获取的常量206可以用于确定主着器226中的至少一个未使用的分支。
60.在512处,可以基于至少一个未使用的分支来确定能够从已分配的gpr中解除分配的gpr的数量。例如,参照图4,指令400指示例如可以基于指示未使用分支的本地常量0,从20个已分配的gpr中解除分配16个gpr。基于至少一个未利用的分支来确定能够被解除分配的gpu的数量可以进一步包括确定在不存在至少一个未使用的分支的情况下执行可执行着器所需的gpr的总数;以及基于分配的gpr数量超过确定的gpr总数,确定能够被解除分配的gpr数量。例如,参照图4,指令400指示在不存在复杂分支的情况下执行可执行着器可能需要4个gpr。这样,指令400可以确定20个全部分配的gpr中的16个gpr超过了4个所需的gpr并且能够被解除分配。
61.在514处,可以为绘制调用内的后续线程基于确定的gpr数量在可执行着器的执行期间从已分配的gpr中解除分配该数量的gpr。例如,参照图4,指令400指示对于绘制调用内的后续线程,可以在可执行着器的执行期间从20个已分配的gpr中解除分配16个gpr。在各方面中,该数量的gpr可以在可执行着器的执行之前被解除分配。例如,参照图2,gpr 218可以在主着器226执行之前由前导着器224解除分配。
62.图6是图示了示例装置602中不同部件/组件之间的数据流的概念数据流图600。装置602可以是gpu、命令处理器、具有可执行着器的装置、无线通信设备或其他类似装置。
63.装置602包括确定组件604,其可以在编译可执行着器之后确定对于可执行着器的分支未定义的常量。基于未定义的常量,被包括在装置602中的获取器组件606执行系统调用以从cpu 650获取定义的常量。例如,如结合502所描述的,获取器组件606可以经由前导着器获取所定义的常量。装置602包括存储组件608,其从cpu 650接收常量并将常量存储在本地常量缓冲区中。例如,如结合504所描述的,存储组件608可以将定义的常量存储在可执行着器内可访问的本地常量缓冲区中。
64.确定组件604可以基于从本地常量缓冲区检索的常量来确定可执行着器内的分支的总数。例如,如结合506所描述的,确定组件604可以确定可执行着器内的分支的数量。装置602还包括分配组件610,其可以将gpr分配给可执行着器。例如,如结合508所描述的,分配组件610可以基于所确定的分支数量来分配gpr。
65.在接收到分配的gpr之后,确定组件604可以基于确定的未使用的分支确定可执行
着器的未使用分支以及要解除分配的已分配的gpr的数量。例如,如结合510所描述的,确定组件604可以基于为可执行着器定义的常量来确定可执行着器内的至少一个未使用的分支。如结合512所描述的,确定组件604可以进一步基于至少一个未使用的分支确定能够从已分配的gpr中解除分配的gpr的数量。
66.装置602包括解除分配组件612,其从可执行着器解除分配gpr以用于绘制调用内的后续线程。例如,如结合514所描述的,解除分配组件612可以为绘制调用内的后续线程,基于所确定的gpr的数量在可执行着器的执行期间从分配的gpr中解除分配该数量的gpr。
67.装置602可以包括执行上述图5的流程图中的算法的每个框的附加组件。这样,上述图5的流程图中的每个框可以由组件执行,并且装置602可以包括这些组件中的一个或多个。组件可以是一个或多个硬件组件,具体配置为执行所陈述的处理/算法,处理/算法由被配置为执行处理/算法的处理器实现(例如,由处理器执行的逻辑和/或代码),存储在计算机可读介质内用于由处理器实现、或其某种组合。
68.应当理解,所公开的处理/流程图中的框的特定顺序或层次结构是示例方法的说明。基于设计偏好,可以理解处理/流程图中框的特定顺序或层次结构可以被重新排列。此外,可以组合或省略一些框。所附方法权利要求以样本顺序呈现各种框的元素,但并不意味着限于所呈现的具体顺序或层次结构。
69.提供了前面的描述以使本领域任何技术人员能够实践本文描述的各个方面。对这些方面的各种修改对于本领域技术人员来说将是显而易见的,并且本文定义的一般原理可以应用于其他方面。因此,权利要求不旨在限于本文中所示的各方面,而是要符合与权利要求的语言一致的全部范围,其中除非特别说明,否则以单数形式提及的元素不旨在表示“一个且仅一个”,而是“一个或多个”。“示例性”一词在本文用于表示“作为示例、实例或说明”。本文中描述为“示例性”的任何方面不一定被解释为优于或优选于其他方面。
70.除非另有明确说明,否则术语“一些”是指一个或多个,并且在上下文没有另外指示的情况下,术语“或”可以被解释为“和/或”。诸如“a、b或c中的至少一个”、“a、b或c中的一个或多个”、“a、b和c中的至少一个”、“a、b和c中的一个或多个”以及“a、b、c或其任何组合”包括a、b和/或c的任何组合,并且可以包括多个a、多个b或多个c。具体地,诸如“a、b或c中的至少一个”、“a、b或c中的一个或多个”、“a、b和c中的至少一个”、“a、b和c中的一个或多个”、以及“a、b、c或其任何组合”的组合可以是仅a、仅b、仅c、a和b、a和c、b和c,或a和b和c,其中任何这样的组合可以包含a、b或c的一个或多个成员。贯穿本公开所描述的各个方面的元素的本领域普通技术人员已知的或以后将知道的所有结构和功能等同物通过引用明确地并入本文,并且旨在被权利要求所涵盖。此外,本文所公开的任何内容均不旨在献给公众,无论这样的公开内容是否在权利要求中明确记载。“模块”、“机制”、“元素”、“设备”等词不能代替“部件”一词。因此,任何权利要求元素均不得解释为部件加功能,除非该元素是使用短语“用于
……
的部件”明确引用的。
71.在一个或多个示例中,本文描述的功能可以在硬件、软件、固件或其任何组合中实现。例如,尽管贯穿本公开使用了术语“处理单元”,但是这样的处理单元可以在硬件、软件、固件或其任何组合中实现。如果本文描述的任何功能、处理单元、技术或其他模块在软件中实现,则本文描述的功能、处理单元、技术或其他模块可以作为一个或多个指令或代码在计
算机可读介质上被存储或被传输。
72.计算机可读介质可以包括计算机数据存储介质或通信介质,该通信介质包括有助于将计算机程序从一个地方转移到另一个地方的任何介质。这样,计算机可读介质一般可以对应于:(1)非暂时性的有形的计算机可读存储介质;(2)诸如信号或载波的通信介质。数据存储介质可以是可由一台或多台计算机或一个或多个处理器访问以检索指令、代码和/或数据结构以用于实施本公开中描述的技术的任何可用介质。作为示例而非限制,这样的计算机可读介质可以包括ram、rom、eeprom、致密盘只读存储器(cd-rom)或其他光盘存储、磁盘存储或其他磁存储设备。如本文使用的磁盘和光盘包括致密盘(cd)、激光盘、光盘、数字多功能盘(dvd)、软盘和蓝光盘,其中磁盘通常磁性地再现数据,而光盘通常用激光光学地再现数据。上述的组合也应被包括在计算机可读介质的范围内。计算机程序产品可以包括计算机可读介质。
73.本公开的技术可在广泛多样的设备或装置中实施,这些设备或装置包括无线手持设备、集成电路(ic)或ic集(例如,芯片集)。在本公开中描述了各种组件、模块或单元以强调被配置为执行所公开的技术的设备的各功能方面,但不一定需要由不同的硬件单元来实现。相反,如上所述,各种单元可以结合在任何硬件单元中或由包括如上所述的一个或多个处理器的交互操作硬件单元的集合连同合适的软件和/或固件来提供。因此,如本文所用的术语“处理器”可以指任何前述结构或适用于实施本文描述的技术的任何其他结构。此外,这些技术可以在一个或多个电路或逻辑元素中完全实施。
74.已经描述了各种示例。这些和其他示例在以下权利要求的范围内。

技术特征:


1.一种通用寄存器(gpr)解除分配的方法,包括:基于为可执行着器定义的常量确定所述可执行着器内的至少一个未使用的分支;基于所述至少一个未使用的分支确定能够从已分配的gpr中解除分配的gpr的数量;以及对于绘制调用内的后续线程,基于所确定的gpr的数量在所述可执行着器的执行期间从所述已分配的gpr中解除分配所述数量的gpr。2.根据权利要求1所述的方法,其中,基于所述至少一个未使用的分支确定能够被解除分配的gpr的数量包括:确定在缺少所述至少一个未使用的分支的情况下执行所述可执行着器所需要的gpr总数量;以及基于所分配的gpr的数量超出所确定的gpr总数量,确定能够被解除分配的gpr的所述数量。3.根据权利要求1所述的方法,其中,所述数量的gpr在所述可执行着器的执行之前被解除分配。4.根据权利要求1所述的方法,其中,所述方法当由图形处理单元(gpu)执行时由所述可执行着器内的前导着器在所述可执行着器的主部分之前执行。5.根据权利要求4所述的方法,还包括:由所述前导着器获取所定义的常量;以及将所定义的常量存储在所述可执行着器内可访问的本地常量缓冲区中。6.根据权利要求1所述的方法,其中,所述方法当由图形处理单元(gpu)执行时在所述可执行着器的主部分内被执行,并且应用于所述绘制调用内的所述可执行着器的所述主部分的后续调用。7.根据权利要求1所述的方法,其中,所述方法由图形处理单元(gpu)内的命令处理器执行。8.根据权利要求1所述的方法,还包括:确定所述可执行着器内的分支数量;以及基于所确定的分支数量分配gpr,其中从所分配的gpr中解除分配所述数量的gpr。9.根据权利要求1所述的方法,其中,所述常量在所述可执行着器编译时未定义。10.一种用于通用寄存器(gpr)解除分配的装置,包括:存储器;以及至少一个处理器,耦接至所述存储器并且被配置为:基于为可执行着器定义的常量确定所述可执行着器内的至少一个未使用的分支;基于所述至少一个未使用的分支确定能够从已分配的gpr中解除分配的gpr的数量;以及对于绘制调用内的后续线程,基于所确定的gpr的数量在所述可执行着器的执行期间从所述已分配的gpr中解除分配所述数量的gpr。11.根据权利要求10所述的装置,其中,被配置为基于所述至少一个未使用的分支确定能够被解除分配的gpr的数量的所述至少一个处理器还被配置为:确定在缺少所述至少一个未使用的分支的情况下执行所述可执行着器所需要的gpr
总数量;以及基于所分配的gpr的数量超出所确定的gpr总数量,确定能够被解除分配的gpr的所述数量。12.根据权利要求10所述的装置,其中,所述数量的gpr在所述可执行着器的执行之前被解除分配。13.根据权利要求10所述的装置,其中,所述至少一个处理器的动作当由图形处理单元(gpu)执行时由所述可执行着器内的前导着器在所述可执行着器的主部分之前执行。14.根据权利要求13所述的装置,其中,所述至少一个处理器还被配置为:由所述前导着器获取所定义的常量;以及将所定义的常量存储在所述可执行着器内可访问的本地常量缓冲区中。15.根据权利要求10所述的装置,其中,所述至少一个处理器的动作当由图形处理单元(gpu)执行时在所述可执行着器的主部分内执行,并且应用于所述绘制调用内的所述可执行着器的所述主部分的后续调用。16.根据权利要求10所述的装置,其中,所述至少一个处理器的动作由图形处理单元(gpu)内的命令处理器执行。17.根据权利要求10所述的装置,其中,所述至少一个处理器还被配置为:确定所述可执行着器内的分支数量;以及基于所确定的分支数量分配gpr,其中从所分配的gpr中解除分配所述数量的gpr。18.根据权利要求10所述的装置,其中,所述常量在所述可执行着器编译时未定义。19.根据权利要求10所述的装置,其中,所述装置是无线通信设备。20.一种存储计算机可执行代码的计算机可读介质,当所述代码由至少一个处理器执行时,使所述至少一个处理器:基于为可执行着器定义的常量确定所述可执行着器内的至少一个未使用的分支;基于所述至少一个未使用的分支确定能够从已分配的gpr中解除分配的gpr的数量;以及对于绘制调用内的后续线程,基于所确定的gpr的数量在所述可执行着器的执行期间从所述已分配的gpr中解除分配所述数量的gpr。

技术总结


本公开提供了基于GPR释放机制在GPU中进行GPR优化的系统、设备、装置和方法,包括被编码在存储介质上的计算机程序。更具体地,GPU可以基于为可执行着器定义的常量确定可执行着器内的至少一个未使用的分支。基于至少一个未使用的分支,GPU可以进一步确定能够从先前分配的GPR中解除分配的GPR的数量。GPU可以为绘制调用内的后续线程基于所确定的要解除分配的GPR数量在可执行着器的执行期间从先前分配的GPR中解除分配该数量的GPR。前分配的GPR中解除分配该数量的GPR。前分配的GPR中解除分配该数量的GPR。


技术研发人员:

A.E.格鲁伯 杜云

受保护的技术使用者:

高通股份有限公司

技术研发日:

2021.04.14

技术公布日:

2022/12/23

本文发布于:2024-09-22 02:01:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/48724.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:着色器   常量   分配   多个
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议