一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

在GPU处的软件控制的可变波前大小执行的制作方法

2022-02-18 18:27:20 来源:中国专利 TAG:

在gpu处的软件控制的可变波前大小执行


背景技术:

1.图形处理单元(gpu)是被配置为执行图形处理任务的复杂集成电路。例如,gpu可执行终端用户应用程序(诸如视频游戏应用程序)所要求的图形处理任务。gpu还越来越多地用来执行与图形无关的其他任务。gpu可以是分立的装置,或者可被包括在与诸如中央处理单元(cpu)的另一个处理器相同的装置中。
2.在许多应用程序(诸如gpu中的图形处理)中,处理工作项的序列(其也可称为线程)以便输出最终结果。在许多现代并行处理器中,例如,单指令多数据(simd)核心内的处理器同步地执行一组工作项。由单独的处理器处理的多个相同的同步工作项被称为波前或经纱。
3.在处理期间,一个或多个simd核心同时执行多个波前。在波前内的所有工作项完成处理时终止波前的执行。每个波前包括使用相同指令集并行处理的多个工作项。在一些情况下,波前中的工作项的数量不匹配simd核心的执行单元的数量。在一个实施方案中,simd核心的每个执行单元是算术逻辑单元(alu)。当波前中的工作项的数量不匹配simd核心的执行单元的数量时,确定如何调度指令来执行可能是有挑战性的。
附图说明
4.通过结合附图参考以下描述可更好地理解本文所描述的方法和机制的优点,在附图中:
5.图1是计算系统的一个实施方案的框图。
6.图2是gpu的一个实施方案的框图。
7.图3是一组向量通用寄存器(vgpr)的一个实施方案的框图。
8.图4示出了示例波前和示例指令序列的一个实施方案。
9.图5示出了处理器的第一操作模式的一个实施方案的图。
10.图6示出了处理器的第二操作模式的一个实施方案的图。
11.图7是示出用于调度处理器上的指令的方法的一个实施方案的一般化流程图。
12.图8是示出用于确定在并行处理器中使用哪个操作模式的方法的一个实施方案的一般化流程图。
13.图9是示出用于利用并行处理器的不同操作模式的方法的一个实施方案的一般化流程图。
14.图10是图1的计算系统的软件架构的一个实施方案的框图。
15.图11是示出用于生成经修改着色器程序以基于程序段动态地控制处理器的操作模式的方法的一个实施方案的一般化流程图。
16.图12示出了着色器程序的寄存器使用分析的一个实施方案的图。
17.图13示出了修改着色器程序以实现对着色器程序的段的子向量循环的一个实施方案的图。
18.图14示出了修改着色器程序以实现对着色器程序的段的子向量循环的另一个实
施方案的图。
19.图15示出了修改着色器程序以实现对着色器程序的段的子向量循环的又一个实施方案的图。
具体实施方式
20.在以下描述中,阐述了许多具体细节以提供对本文所呈现的方法和机制的彻底理解。然而,本领域一般技术人员应认识到,可在没有这些具体细节的情况下实践各种实施方案。在一些情况下,没有详细地示出众所周知的结构、部件、信号、计算机程序指令和技术以免模糊本文描述的方法。应理解,为了说明的简单和清楚起见,附图中示出的元件未必按比例绘制。例如,一些元件的尺寸可相对于其他元件放大。
21.公开了利用与在处理器上处理可变波前大小的各种系统、设备、方法和计算机可读介质。当在第一模式下操作时,处理器先在波前的多个部分上执行相同的指令,再进行到着色器程序的下一指令。当在第二模式下操作时,处理器在波前的第一部分上执行指令集,并且当处理器完成在波前的第一部分上执行该指令集时,处理器在波前的第二部分上执行该指令集,以此类推,直到处理了波前的所有部分为止。然后,处理器继续执行着色器程序的后续指令。
22.在一个实施方案中,在代码序列内声明指示,其中该指示指定将哪个模式用于程序的给定区域。在另一个实施方案中,编译器在生成可执行代码时生成指示,其中该指示指定处理器操作模式。在另一个实施方案中,处理器包括控制单元,该控制单元确定处理器操作模式。
23.现在参考图1,示出了计算系统100的一个实施方案的框图。在一个实施方案中,计算系统100包括耦合到存储器150的片上系统(soc)105。soc 105也可被称为集成电路(ic)。在一个实施方案中,soc 105包括处理单元115a至115n、输入/输出(i/o)接口110、共享高速缓存120a至120b、构架125、图形处理单元(gpu)130以及存储器控制器140。soc 105还可包括图1中未示出以避免使图混淆不清的其他部件。处理单元115a至115n代表任何数量和类型的处理单元。在一个实施方案中,处理单元115a至115n是中央处理单元(cpu)核心。在另一个实施方案中,处理单元115a至115n中的一者或多者是其他类型的处理单元(例如,专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp))。处理单元115a至115n耦合到共享高速缓存120a至120b和构架125。
24.在一个实施方案中,处理单元115a至115n被配置为执行特定指令集架构(isa)的指令。每个处理单元115a至115n包括一个或多个执行单元、高速缓存存储器、调度器、分支预测电路等。在一个实施方案中,处理单元115a至115n被配置为执行系统100(诸如操作系统)的主要控制软件。一般而言,在使用期间由处理单元115a至115n执行的软件可控制系统100的其他部件来实现系统100的期望功能。处理单元115a至115n还可执行其他软件,诸如应用程序。
25.gpu 130至少包括计算单元145a至145n,所述计算单元代表用于图形或通用处理的任何数量和类型的计算单元。计算单元145a至145n也可被称为“着色器阵列”、“着色器引擎”、“单指令多数据(simd)单元”或“simd核心”。每个计算单元145a至145n包括多个执行单元。gpu 130耦合到共享高速缓存120a至120b和构架125。在一个实施方案中,gpu 130被配
置为执行图形流水线操作,诸如绘制命令、像素操作、几何计算以及用于渲染图像以供显示的其他操作。在另一个实施方案中,gpu 130被配置为执行与图形无关的操作。在又一个实施方案中,gpu 130被配置为执行图形操作和非图形相关操作两者。
26.gpu 130被配置为接收着色器程序的指令和波前以供执行。在一个实施方案中,gpu 130被配置为在不同的模式下操作。在一个实施方案中,每个波前中的工作项的数量大于gpu 130中的执行单元的数量。
27.在一个实施方案中,响应于检测到第一指示,gpu 130先调度第一指令以在第一波前的第一部分和第二部分上执行,再调度第二指令以在第一波前的第一部分上执行。只要检测到第一指示,对于着色器程序的其他指令并且对于其他波前,gpu 130遵循这个模式。应当注意,“调度指令”也可被称为“发出指令”。根据实施方案,第一指示可在软件中指定,或者第一指示可由gpu 130基于一个或多个操作条件来生成。在一个实施方案中,第一指示是让gpu 130在第一模式下操作的命令。
28.在一个实施方案中,响应于未检测到第一指示,gpu 130先调度第一指令和第二指令以在第一波前的第一部分上执行,再调度第一指令以在第一波前的第二部分上执行。只要未检测到第一指示,对于着色器程序的其他指令并且对于其他波前,gpu 130遵循这个模式。
29.i/o接口110耦合到构架125,并且i/o接口110代表任何数量和类型的接口(例如,外围部件互连(pci)总线、pci扩展(pci

x)、pcie(pci express)总线、吉比特以太网(gbe)总线、通用串行总线(usb))。各种类型的外围装置可耦合到i/o接口110。此类外围装置包括(但不限于)显示器、键盘、鼠标、打印机、扫描仪、操纵杆或其他类型的游戏控制器、媒体记录装置、外部存储装置、网络接口卡等等。
30.soc 105耦合到存储器150,该存储器包括一个或多个存储器模块。存储器模块中的每一者包括安装在其上的一个或多个存储器装置。在一些实施方案中,存储器150包括安装在母板或也安装有soc105的其他载体上的一个或多个存储器装置。所实现的ram可以是静态ram(sram)、动态ram(dram)、电阻式(reram)、相变ram(pcram)或者任何其他易失性或非易失性ram。用来实现存储器150的dram的类型包括(但不限于)双数据速率(ddr)dram、ddr2 dram、ddr3 dram等尽管图1中未明确地示出,但soc 105还可包括在处理单元115a至115n和/或计算单元145a至145n内部的一个或多个高速缓存存储器。在一些实施方案中,soc 105包括处理单元115a至115n和计算单元145a至145n所使用的共享高速缓存120a至120b。在一个实施方案中,高速缓存120a至120b是包括高速缓存控制器的高速缓存子系统的部分。
31.在各种实施方案中,计算系统100可以是计算机、膝上型计算机、移动装置、服务器或者各种其他类型的计算系统或装置中的任一种。应当注意,计算系统100和/或soc 105的部件的数量可随实施方案而不同。可存在比图1所示的数量更多或更少的每个部件/子部件。例如,在另一个实施方案中,soc 105可包括耦合到多个存储器的多个存储器控制器。还应当注意,计算系统100和/或soc 105可包括图1中未示出的其他部件。另外,在其他实施方案中,计算系统100和soc 105可以与图1所示不同的方式进行构造。
32.现在转到图2,示出了图形处理单元(gpu)200的一个实施方案的框图。在一个实施方案中,gpu 200至少包括simd 210a至210n、分支和消息单元240、调度器单元245、指令缓
冲器255以及高速缓存260。应当注意,gpu 200还可包括图2中未示出以避免使图混淆不清的其他逻辑。还应当注意,其他处理器(例如,fpga、asic、dsp)可包括gpu 200中示出的电路。
33.在一个实施方案中,gpu 200被配置为在不同的模式下操作,以在不同大小的波前上处理着色器程序的指令。gpu 200根据正在处理的工作负载类型和/或每个波前中的工作项的数量而利用给定的模式来优化性能、功耗和/或其他因素。在一个实施方案中,每个波前包括一定数量的工作项,该数量大于simd 210a至210n中的通道215a至215n、220a至220n和225a至225n的数量。在该实施方案中,gpu 200基于gpu 200的操作模式来不同地处理波前。在另一个实施方案中,gpu 200基于一个或多个检测到的条件来不同地处理波前。simd 210a至210n的每个通道215a至215n、220a至220n和225a至225n也可被称为“执行单元”。
34.在一个实施方案中,gpu 200接收针对具有大于simd 210a至210n中的通道总数的数量的工作项的波前的多个指令。在该实施方案中,当gpu 200处于第一模式时,gpu 200先在波前的多个部分上执行第一指令,再进行到第二指令。只要gpu 200处于第一模式,对于后续指令,gpu 200继续这个执行模式。在一个实施方案中,第一模式可由软件生成的声明指定。如果gpu 200处于第二模式,那么gpu 200先在波前的第一部分上执行多个指令,再进行到波前的第二部分。当gpu 200处于第二模式时,gpu 200在波前的不同部分之间共享向量通用寄存器(vgpr)230a至230n的一部分。另外,当gpu 200处于第二模式时,如果掩码250中的执行掩码指示波前的给定部分被临时地遮掩,那么gpu 200不针对波前的给定部分执行指令。
35.在另一个实施方案中,如果波前大小大于simd的数量,则gpu200为程序确定高速缓存260的高速缓存未命中率。如果高速缓存未命中率小于阈值,那么gpu 200先在波前的多个部分上执行第一指定,再进行到第二指令。只要高速缓存未命中率被确定或预测为小于阈值,对于后续指令,gpu 200继续该执行模式。阈值可被指定为字节的数量、高速缓存260的百分比或任何其他合适的度量。如果高速缓存未命中率大于或等于阈值,那么gpu 200先在波前的第一部分上执行多个指令,再在波前的第二部分上执行多个指令。另外,如果高速缓存未命中率大于或等于阈值,则gpu 200在波前的不同部分之间共享向量通用寄存器(vgpr)230a至230n的一部分,并且如果执行掩码指示给定部分被遮掩,则gpu 200跳过针对波前的给定部分的指令。
36.应当注意,本文中显示在各种结构旁边的字母“n”一般意指该结构的任何数量的元件(例如,任何数量的simd 210a至210n)。另外,图2中的使用字母“n”的不同附图标记(例如,simd 210a至210n和通道215a至215n)并不意图指示提供相等数量的不同元件(例如,simd 210a至210n的数量可不同于通道215a至215n的数量)。
37.现在参考图3,示出了一组向量通用寄存器(vgpr)300的一个实施方案的框图。在一个实施方案中,vgpr 300被包括在gpu 200的simd 210a至210n(图2)中。vgpr 300可包括任何数量的寄存器,具体取决于实施方案。
38.如图3所示,vgpr 300包括用于第一波前的vgpr 305、用于第二波前的vgpr 310,以及用于其他数量的波前的任何数量的其他vgpr。出于本讨论的目的假设第一波前和第二波前具有2*n个工作项,其中n是正整数,并且其中n随实施方案而不同。在一个实施方案中,n等于32。vgpr 305包括具有私有vgpr的区域和共享vgpr区域315。类似地,vgpr 310包括具
有私有vgpr的区域和共享vgpr区域320。
39.在一个实施方案中,如果主机gpu(例如,gpu 200)处于第一模式,那么共享vgpr 315和共享vgpr 310分别不在第一波前和第二波前的不同部分之间共享。然而,当主机gpu处于第二模式时,那么共享vgpr 315和共享vgpr 310分别在第一波前和第二波前的不同部分之间共享。在其他实施方案中,共享或不共享的实现是基于检测到第一指示,而不是基于第一模式或第二模式。第一指示可由软件生成、基于高速缓存未命中率生成,或基于一个或多个其他操作条件生成。
40.现在转到图4,示出了示例波前405和示例指令序列410的一个实施方案。波前405意图说明根据一个实施方案的波前的一个示例。波前405包括2*n个工作项,其中“n”是正整数,并且其中“n”是向量单元420中的通道425a至425n的数量。向量单元420也可被称为simd单元或并行处理器。波前405的第一部分包括工作项w0至wn

1,并且波前405的第二部分包括工作项wn至w2n

1。波前405的单个部分意图在给定的指令周期中在向量单元420的通道425a至425n上执行。在其他实施方案中,波前405可包括其他数量的部分。
41.在一个实施方案中,n是32,并且每波前的工作项的数量是64。在其他实施方案中,n可以是其他值。在n是32时的实施方案中,向量单元420还包括被示出为通道425a至425n的32个通道。在其他实施方案中,向量单元420可包括其他数量的通道。
42.指令序列410说明指令序列的一个示例。如图4所示,指令序列410包括指令415a至415d,所述指令代表着色器程序的任何数量和类型的指令。出于本讨论的目的应当假设,指令415a是指令序列410的第一指令,其中指令415b是第二指令,指令415c是第三指令,并且指令415d是第四指令。在其他实施方案中,指令序列可具有其他数量的指令。波前405、指令序列410和向量单元420在下面针对图5和图6继续的讨论期间重复使用。
43.现在参考图5,示出了处理器的第一操作模式的一个实施方案的图。图5的讨论是关于图4的讨论的继续。在一个实施方案中,波前的大小是向量单元420的大小的两倍。在另一个实施方案中,波前的大小是向量单元420的大小的整数倍。在这些实施方案中,处理器可实现不同的操作模式以用于确定如何使用向量单元420来执行波前的工作项。
44.在第一操作模式下,先在波前的不同子集上执行每个指令,再在不同的子集上执行下一指令。例如,在向量单元420的通道425a至425n上的第一指令周期期间,针对波前的前一半(即,工作项w0至wn

1)执行指令415a,并且然后在通道425a至425n上的第二指令周期期间,针对第一波前的后一半(即,工作项wn至w2n

1)执行指令415a。例如,在第一指令周期期间,工作项w0可在通道425a上执行,工作项w1可在通道425b上执行,以此类推。
45.然后,在通道425a至425n上的第三指令周期期间,针对波前的前一半执行指令415b,并且然后在通道425a至425n上的第四指令周期期间,针对波前的后一半执行指令415b。接下来,在通道425a至425n上的第五指令周期期间,针对波前的前一半执行指令415c,并且然后在通道425a至425n上的第六指令周期期间,针对波前的后一半执行指令415c。然后,在通道425a至425n上的第七指令周期期间,针对在向量单元420的通道425a至425n上的波前的前一半执行指令415d,并且然后在通道425a至425n上的第八指令周期期间,针对在向量单元420的通道425a至425n上的波前的后一半执行指令415d。出于本讨论的目的,可假设第二指令周期在第一指令周期后,第三指令周期在第二指令周期后,以此类推。
46.现在转到图6,示出了处理器的第二操作模式的一个实施方案的图。图6的讨论是关于图5的讨论的继续。在第二操作模式下,先在波前的同一部分上执行整个指令序列410,再在波前的下一部分上执行整个指令序列410。
47.例如,在第一指令周期中,针对在向量单元420的通道425a至425n上的波前的前一半(即,工作项w0至wn

1)执行指令415a。然后,在第二指令周期中,针对在通道425a至425n上的波前的前一半执行指令415b。接下来,在第三指令周期中,针对在通道425a至425n上的波前的前一半执行指令415c。然后,在第四指令周期中,针对在通道425a至425n上的波前的前一半执行指令415d。
48.接下来,在波前的后一半上执行指令序列410。因此,在第五指令周期中,针对在向量单元420的通道425a至425n上的波前的后一半(即,工作项wn至w2n

1)执行指令415a。然后,在第六指令周期中,针对在通道425a至425n上的波前的后一半执行指令415b。接下来,在第七指令周期中,针对在通道425a至425n上的波前的后一半执行指令415c。然后,在第八指令周期中,针对在通道425a至425n上的波前的后一半执行指令415d。
49.在另一个实施方案中,如果波前具有4*n个工作项,则指令序列410可在波前的第一四分之一上执行,然后指令序列410可在波前的第二四分之一上执行,接着是第三四分之一且然后是波前的第四四分之一。可以对于第二操作模式的类似方式利用其他大小的其他波前和/或具有其他数量的通道的向量单元。
50.现在参考图7,示出了用于在处理器上调度指令的方法700的一个实施方案。出于讨论的目的,按顺序次序示出该实施方案中的步骤和图8至图9的那些步骤。然而,应当注意,在所述方法的各种实施方案中,同时执行、以与所示不同的次序执行或完全地省略所述元件中的一者或多者。还在需要时执行其他附加的元件。本文描述的各种系统、设备或计算装置中的任一者被配置为实现方法700。
51.处理器接收波前和着色器程序的多个指令以供执行(框705)。在一个实施方案中,处理器至少包括多个执行单元、调度器、高速缓存以及多个gpr。在一个实施方案中,处理器是gpu。在其他实施方案中,处理器是各种其他类型的处理器中的任一者(例如,dsp、fpga、asic、多核心处理器)。在一个实施方案中,波前中的工作项的数量大于处理器的执行单元的数量。例如,在一个实施方案中,波前包括64个工作项并且处理器包括32个执行单元。在该实施方案中,波前中的工作项的数量等于执行单元的数量的两倍。在其他实施方案中,波前可包括其他数量的工作项,并且/或者处理器可包括其他数量的执行单元。在一些情况下,处理器接收多个波前以供执行。在这些情况下,对于多个波前可将方法700实现多次。
52.接下来,处理器确定是否已经检测到第一指示(条件框710)。在一个实施方案中,第一指示是在软件指令内声明的设置或参数,其中该设置或参数指定处理器要利用的操作模式。在另一个实施方案中,第一指示是基于波前的高速缓存未命中率生成的。在其他实施方案中,其他类型的指示是可能的并且是预期的。
53.如果检测到第一指示(条件框710,“是”分支),那么处理器先调度多个执行单元以在波前的第一部分和第二部分上执行第一指令,再调度多个执行单元以在波前的第一部分上执行第二指令(框715)。只要检测到第一指示,对于多个指令的剩余部分,处理器可遵循这个相同的调度指令模式。如果未检测到第一指示(条件框710,“否”分支),那么处理器先调度多个执行单元以在波前的第一部分上执行第一指令和第二指令,再调度多个执行单元
以在波前的第二部分上执行第一指令(框720)。只要未检测到第一指示,对于多个指令的剩余部分,处理器可遵循这个相同的调度指令模式。另外,如果未检测到第一指示,则处理器在波前的第一部分与波前的第二部分之间共享gpr的一部分(框725)。在框715和725之后,方法700结束。
54.现在转到图8,示出了用于确定在并行处理器中使用哪个操作模式的方法800的一个实施方案。处理器的控制单元确定波前的高速缓存未命中率(框805)。根据实施方案,在框805中,控制单元可确定波前的一部分或整个波前的高速缓存未命中率。根据实施方案,使用硬件和/或软件的任何合适的组合来实现控制单元。在一个实施方案中,控制单元预测波前的高速缓存未命中率。在另一个实施方案中,控制单元接收由软件生成的指示,其中该指示指定波前的高速缓存未命中率。接下来,控制单元确定波前的高速缓存未命中率是否小于阈值(条件框810)。可选地,如果控制单元接收到由软件生成的指示,则该指示可指定高速缓存未命中率是否小于阈值。在一个实施方案中,阈值是可编程的。在另一个实施方案中,阈值是预先确定的。
55.如果波前的高速缓存未命中率小于阈值(条件框810,“是”分支),那么处理器在处理波前时利用第一操作模式(框815)。在一个实施方案中,第一操作模式涉及先在波前的所有部分上发出指令,再移动到着色器程序中的下一指令。如果波前的高速缓存未命中率大于或等于阈值(条件框810,“否”分支),那么处理器在处理波前时利用第二操作模式(框820)。在一个实施方案中,第二操作模式涉及在波前的第一部分上执行指令集,然后在波前的第二部分上执行相同的指令集,以此类推,直到处理了波前的所有部分为止。在框815和820之后,方法800结束。
56.现在参考图9,示出了用于利用并行处理器的不同操作模式的方法900的另一个实施方案。处理器的控制单元确定波前的操作模式(框905)。根据实施方案,使用硬件和/或软件的任何合适的组合来实现控制单元。控制单元用来确定选择哪个操作模式的标准可随实施方案而不同。可利用的标准的一个示例在图8中的关于方法800的讨论中描述。可用于选择处理器操作模式的标准的其他示例是可能的并且是预期的。
57.如果控制单元选择第一操作模式(条件框910,“第一”分支),那么处理器不在被处理器处理的波前的不同子集之间共享寄存器(框915)。否则,如果控制单元选择第二操作模式(条件框910,“第二”分支),那么处理器在被处理器处理的波前的不同子集之间共享一个或多个寄存器(框920)。例如,在一个实施方案中,对于第一指令集,共享寄存器涉及处理器将寄存器文件的共享部分用于波前的第一部分。然后,处理器将寄存器文件的共享部分重复用于波前的第二部分。如果波前具有两个以上部分,那么处理器将寄存器文件的共享部分重复用于波前的附加部分。在框920之后,方法900结束。
58.应当注意,在一些实施方案中,处理器可具有两个以上操作模式。在这些实施方案中,可应用条件框910,使得操作模式的第一子集(例如,第一模式、第三模式、第七模式)遵循“第一”分支,并且操作模式的第二子集(例如,第二模式、第四模式、第六模式)遵循图7所示的“第二”分支。可选地,在另一个实施方案中,寄存器文件的被共享的部分的大小可根据不同的操作模式而变。例如,对于第二模式,共享第一数量的寄存器,对于第三模式,共享第二数量的寄存器,对于第四模式,共享第三数量的gpr,以此类推。
59.现在参考图10至图15,公开了计算系统的实施方案,其中基于程序段针对寄存器
使用来分析着色器程序,并且然后修改该着色器程序以便基于其寄存器使用针对每个程序段来控制计算系统的gpu的操作模式。在至少一个实施方案中,计算系统在cpu或其他处理单元处采用编译器来分析着色器程序的一些或全部的每个段,以确定针对整个波前(即,针对波前的所有工作项)执行对应的段预期需要的vgpr的数量。对于被识别为预期需要不超过指定的阈值的数量的vgpr的每个段,编译器避免修改着色器程序,使得该段由计算系统的gpu在gpu先调度其执行单元以先针对波前的每个部分(即,整个波前)执行每个指令再针对波前的每个部分执行下一指令的模式下执行,如上所述。对于被识别为预期需要超过指定的阈值的数量的vgpr的每个段,编译器修改着色器程序,使得该段由gpu在gpu先调度其执行单元以针对波前的第一部分执行着色器程序的指令集(即,两个或更多个指令)再调度执行单元以针对同一波前的第二部分执行该同一指令集的不同模式下执行,也如上所述。如果波前由两个以上部分组成,则在该模式期间,gpu调度其执行单元以在针对波前的第二部分调度执行单元之后然后针对波前的第三部分执行指令集,以此类推。为了便于参考,前一模式在下文被称为“常规模式”(在图1至图9的前述描述中标识为“第一模式”),并且后一模式在下文被称为“子向量循环模式”(在图1至图9的前述描述中标识为“第二模式”)。本技术中采用的着色器程序的段可构成单独指令、指令的逻辑序列或块(例如,指令循环或子例程)等。在一个实施方案中,应用于每个段的寄存器使用来确定要用于执行该段的操作模式的指定的阈值是基于可供在每个执行单元处使用的vgpr的数量。
60.参考图10,示出了在图1的计算系统100中用于动态子向量循环的示例软件架构1000。软件架构1000包括操作系统(os)1002,该操作系统支持处理单元115中的一者或多者(例如,cpu)和gpu 130共同地执行一个或多个软件应用程序1004。os 1002和软件应用程序1004通常驻留在系统存储器150中,正如处理单元115所利用的大部分数据和gpu 130所利用的一些数据一样。
61.软件应用程序1004包括一个或多个可执行指令集1006以及一个或多个着色器程序1008。可执行指令集1006表示已经编译成适合于在处理单元115处执行的机器语言代码的一种或多种语言。每个着色器程序1008(通常也称为“计算内核”或简称为“着色器”)是表示意图至少部分地由gpu 130执行的任务或工作负载的程序,并且通常其中着色器程序1008的多个实例由gpu 130的计算单元145(图1)中的两者或更多者并行地执行。这种着色器程序可以是图形相关的,诸如像素着色器、顶点着色器、几何着色器、细分曲面着色器等,或者可以是机器学习(ml)着色器或其他通用计算着色器。
62.os 1002包括os内核1010、一个或多个内核模式驱动器1012、一个或多个应用程序编程接口(api)1014以及一个或多个用户模式驱动器1016。os内核1010表示os 1002的功能核心,并且负责启动初始化、存储器分配/解除分配、输入/输出控制和其他基本硬件控制,以及促进软件应用程序1004的执行。内核模式驱动器1012管理gpu130的硬件的一般操作,包括gpu 130的初始化、设置显示模式、管理鼠标硬件、管理对gpu 130的物理存储器的分配/解除分配、管理系统存储器150中的促进将命令从处理单元115派遣到gpu 130的命令缓冲器(未示出)等。
63.用户模式驱动器1016作为软件应用程序1004的一个或多个着色器程序1008到gpu 130的接口进行操作。然而,为了促进硬件抽象,着色器程序1008通常不在软件应用程序1004中实现为机器可读代码(即,“原生”代码),而是被实现为源代码(即,用人类可读的语
法),诸如opengl(tm)着色语言(glsl)或高级着色语言(hlsl)语法,或以部分编译的字节代码实现,诸如标准移植中间表示(spir)字节代码格式,并且依赖于一个或多个api 1014(诸如opencl(tm)api、opengl(tm)api、direct3d(tm)api、cuda(tm)api等)及其相关联的储存库。由于着色器程序1008未采用原生代码格式,因此用户模式驱动器1016采用着色器编译器1018,该着色器编译器操作来执行着色器程序1008的源代码或字节代码表示到gpu 130可执行的机器可读代码的运行时编译(也被称为实时编译或即时(jit)编译)。在其他实施方案中,采用离线编译器来将表示着色器程序1008的代码编译成可执行原生代码。着色器程序1008的经编译的可执行代码表示然后由用户模式驱动器1016经由命令缓冲器(未示出)提供到gpu130,该命令缓冲器在系统存储器150中实现并且由例如调度器程序245(图2)管理。
64.现在参考图11,示出了着色器编译器1018的示例实现方式以及其用于修改着色器程序1008来实现软件控制的动态子向量循环的操作的示例方法1100。在所描绘的实现方式中,着色器编译器1018包括在被执行时用于操纵处理单元115来执行一组任务的指令集,其中该组任务在逻辑上被组织为前端级1102、动态子向量修改级1104和后端级1106。根据实现方式,着色器程序1008以人类可读源代码或部分编译的字节代码的形式提供到前端级1102。前端级1102执行一个或多个初始准备过程,诸如词汇、语法和语义分析,并且然后生成着色器程序1008的中间表示1108,这可包括例如将人类可读源代码转换为字节代码或者从较高级着色器语言转换为较低级着色器语言。在子向量修改级1104处,着色器编译器1018应用一种或多种寄存器使用分析技术来逐段地分析寄存器使用,并且然后修改着色器程序1008的中间表示1108以逐段地实现子向量循环的软件控制的选择性实现方式,并且从而生成着色器程序1008的经修改表示1110。下文参考方法1100详细地描述这个过程。然后由后端级1106处理经修改表示1110,该后端级将经修改表示1110转换为用gpu 130的机器语言表示的一个或多个着色器对象并且连接一个或多个对象,以便创建经修改着色器程序的可执行机器语言表示,其在本文中标识为“原生代码着色器1112”。然后可经由存储器150中的命令缓冲器将原生代码着色器1112传递到gpu 130上,接着一个或多个计算单元145并行地执行可执行着色器表示、即原生代码着色器1112。
65.如上所述,波前中的工作项的数量可超过gpu 130的simd核心中的执行单元的数量,从而使得难以调度波前的指令。同样,在一些实现方式中,波前可在大于被分配来存储数据结构的数据的高速缓存的数据结构(诸如顶点缓冲器或结构的其他阵列)上操作,这在gpu130尝试调度整个波前以并行地执行时可导致显著的高速缓存颠簸且因此导致低效的执行性能。因此,如上所述且在下面进一步解释,gpu 130采用至少两个不同的操作模式,其中一个涉及gpu 130对于整个波前并行地执行每个指令(即,“常规模式”或“第一模式”),并且在另一个模式中,gpu 130在波前的一部分上并行地执行指令集,然后转到在波前的另一个部分上执行该同一指令集,以此类推(即,“子向量循环模式”或“第二模式”)。在一些实施方案中,gpu 130包括控制器或其他基于硬件的机构以独立地识别何时从常规操作模式切换到子向量循环操作模式将是有利的,反之亦然。然而,在其他实施方案中,替代地在编译时实现这个模式选择过程,并且因此提供软件实现的动态模式切换,以便更好地优化着色器程序的不同段的执行。图11的方法1100示出了这种基于软件的技术的示例实现方式。
66.如下所述,在一些实施方案中,方法1100依赖于将着色器程序1008的每个段的
vgpr使用与指定的vgpr使用进行比较以确定是否实现子向量循环模式来执行对应的段。因此,作为初始化的部分,在框1120处,计算系统100识别要采用的指定的vgpr使用阈值。在一个实施方案中,先前已经诸如通过将vgpr使用阈值设置为在实现着色器编译器1018的代码中的常量、通过对熔断式或一次性可编程元件进行编程等来识别和确定vgpr使用阈值。在其他实施方案中,vgpr使用阈值是用户可编程或以其他方式可编程的,诸如经由客户可访问的寄存器进行编程。在另外的其他实施方案中,计算系统100针对方法1100的每次迭代来动态地识别或计算vgpr使用阈值。在这些方法中的任一者中,vgpr使用可基于每个执行单元可用的vgpr的最大数量进行设置。例如,假设每个执行单元具有可用的12个专用vgpr。在该示例中,vgpr使用阈值可被设置为等于该专用vgpr的数量(即,vgpr使用阈值=12个vgpr),或被设置为某一固定的百分比等。
67.在框1122处,着色器编译器1018的动态子向量修改状态1104分析着色器程序1008的中间表示1108(或在一些情况下,着色器程序1008本身),以逐段地针对着色器程序1008的每个段识别预期的vgpr使用。为此,着色器程序1008(或其中间表示1108)可使用多种标准中的任一种或标准的组合在逻辑上分割成多个段。例如,循环的所有指令可一起被指定为单个段,如子例程或函数调用的指令也可这样。类似地,对于未被包括在循环或子例程中的指令,可基于序列中的指定数量的指令来指定段。在另外的其他实施方案中,段可被识别为在着色器程序1008的vgpr使用超过vgpr使用阈值的实例与vgpr使用然后降至低于vgpr使用阈值的下一实例之间出现的所有指令(即,可相对于vgpr使用和vgpr使用阈值来定义段)。可使用多种技术中的任一种来确定着色器程序1008在指令序列中的任何给定点或对于任何给定段的vgpr使用。例如,在一些实施方案中,着色器编译器1018使用多种众所周知或专用的寄存器“活跃度”分析技术(通常也称为“活跃变量分析”)来确定vgpr使用。
68.在框1124处,着色器编译器1018将着色器程序1008的选定段的vgpr使用与在框1120处确定的vgpr使用阈值进行比较。如果选定段的vgpr使用超过vgpr使用阈值,那么在框1126处,着色器编译器1018修改着色器程序1008,使得在gpu 130执行所得的经修改着色器程序(例如,着色器程序1008的经修改表示1110)时,gpu130被配置为在子向量循环模式下操作,以执行选定段的指令。
69.如下面参考图13至图15更详细地描述,这种修改可采用多种形式中的任一种。在gpu 130提供对子向量循环模式的直接硬件支持的情况下,对着色器程序1008的修改可包括在选定段的指令之前插入第一指令或其他命令和在选定段的指令之后插入第二指令或其他命令,其中第一指令和第二指令是gpu 130的isa的部分,并且在由gpu 130执行时分别将gpu 130配置为切换到在子向量循环模式下操作和切换到在常规模式下操作。在gpu 130不提供对子向量循环的直接硬件支持或者不期望利用这种硬件支持的实现方式中,对着色器程序1008的修改替代地可采取用指令集或代码替换选定段的指令的形式,所述指令集或代码引入致使针对波前的每个部分或通过针对波前的每个部分明确地复制选定段的指令执行选定段的指令的循环。返回框1124,如果选定段的vgpr使用不超过vgpr使用阈值,那么着色器编译器1018避免针对选定段来修改着色器程序1008(并且从而因不存在任何修改而指示gpu 130在常规模式下执行选定段)。
70.在框1128处,着色器编译器1018确定是否要考虑任何其他段。如果是的话,则着色器编译器1018选择着色器程序1008的下一个段并且针对选定段重复框1124和1126的过程。
如果否的话,那么在框1130处,着色器编译器1018将所得的经修改着色器程序(例如,经修改表示1110)从动态子向量修改级1104发出到后端级1106,以便进一步处理并从经修改着色器程序生成原生代码着色器1112。
71.现在参考图12,示出了描绘方法1100的简化示例实现方式的图1200。图1200的横坐标表示着色器程序1008的十个段的序列,这十个段表示为段0至段9,其中按着色器程序1008的程序次序,段0最先执行并且段9最后执行。图1200的纵坐标表示每个段的vgpr使用,其中最大vgpr使用表示为“k”,并且在该示例中,vgpr使用阈值表示为水平线1202(并且因此在本文中也称为“vgpr使用阈值1202”)。因此,线1204表示段0至9的vgpr使用,如由着色器编译器1018通过可变活跃度分析或着色器程序1008的其他类型的寄存器使用分析来确定(方法1100的框1122)。在该示例中,段0、1、2、6、8和9不超过vgpr使用阈值1202,而段3、4、5和7超过vgpr使用阈值1202。因此,在编译期间,着色器编译器1018将修改着色器程序1008,使得段3、4、5和7由gpu 130使用子向量训练模式来执行,并且关于段0、1、2、6、8和9,将避免对着色器程序1008的任何修改,使得这些段由gpu 130使用常规模式来执行。
72.如上所述,修改着色器程序1008使得vgpr使用超过阈值的段由gpu 130使用子向量循环模式来执行可以多种方式中的任一种实现。参考图13,示出了基于isa的命令修改方案。在一些实施方案中,gpu 130提供子向量循环模式的硬件实现方式(即,gpu 130的硬编码逻辑可实现子向量循环模式的多程方法,而无需重新配置着色器程序1008)。在此类实现方式中,可修改着色器程序1008以通过由着色器编译器1018将模式切换命令插入着色器程序1008中来在常规模式与子向量循环模式之间切换,由此这些模式切换命令是gpu 130的isa的部分,并且当由gpu 130执行时触发gpu 130切换模式。为了说明,图13的框1300描绘了表示来自图12的示例的段6、7和8的着色器程序1008的代码的一部分。段6由具有指令inst0至inst2的指令集1302表示,段7由具有指令inst3至inst6的指令集1304表示,并且段8由具有指令inst7至inst9的指令集1306表示。
73.在图12的示例中,段6和8具有不超过指定的vgpr使用阈值1202(图12)的vgpr使用,而段7具有超过指定的vgpr使用阈值1202的vgpr使用。因此,在该示例中,着色器编译器1018修改着色器程序1008,使得通过以下方式在子向量循环模式下执行表示段7的指令集1304:按程序次序将子向量循环模式进入指令1308(标记为“s_subvector_start”)插入在集1304的第一指令(inst3)之前,并且将子向量循环模式退出指令13010(标记为“s_subvector_start)插入在集1304的最后一个指令(inst6)之后,以便在由框1312表示的所得的经修改着色器程序中生成经修改的指令集1314。子向量循环模式进入指令1308是在由gpu 130执行时触发gpu 130在子向量循环模式下操作的支持isa的指令。相反,子向量循环模式退出指令1310是在由gpu 130执行时触发gpu 130退出子向量循环模式并开始在常规模式下执行的支持isa的指令。因此,经修改着色器程序中的表示段6的指令集1302将由gpu 130在常规模式下执行,然后gpu 130将切换到子向量循环模式以执行表示段7的指令集1304,并且然后gpu 130将切换回到常规模式以执行表示段8的指令集1306。
74.该示例展示了当要在vgpr使用不超过vgpr使用阈值的两个段之间执行vgpr使用超过vgpr使用阈值的单个段时进行的修改。在要在gpu 130处于子向量循环模式时连续执行多个段的情况下,着色器编译器1018替代地可在该序列中的第一段的第一指令之前插入单个子向量循环模式进入指令1308并且在该序列中的最后一个段的最后一个指令之后插
入单个子向量循环模式退出指令1310,而不是针对每个这样的段单独地插入子向量循环模式进入指令1308和子向量循环模式退出指令1310。例如,由于段3至5均超过vgpr使用阈值1202,因此在生成经修改着色器程序时,着色器编译器1018可在段3的第一指令之前插入单个子向量循环模式进入指令1308并且在段5的最后一个指令之后插入单个子向量循环模式退出指令1310。此外,尽管基于修改着色器程序1008以使得修改被识别为预期的寄存器使用超过阈值的段以便将gpu 130从作为默认模式的常规模式重新配置到子向量循环模式,在上文描述了图13并且在下文描述图14和图15,但在其他实施方案中,子向量循环模式是默认模式,并且着色器编译器1018替代地修改寄存器使用不超过阈值的段,以便触发gpu 130从作为默认模式的子向量循环模式切换到常规模式来执行此类段。
75.现在参考图14,示出了用于软件实现的子向量循环的基于复制的修改方案。在gpu 130不提供子向量循环模式的硬件实现方式或不希望利用任何此类硬件实现方式的情况下,gpu 130可被配置为通过着色器程序1008的软件重新配置来提供子向量循环模式,其中要在子向量循环模式下执行的段的指令针对要单独执行段的波前的每个部分复制一次。为了说明,图14的框1400描绘了表示来自图13的示例的段6、7和8的着色器程序1008的代码的一部分。段6由具有指令inst0至inst2的指令集1402表示,段7由具有指令inst3至inst6的指令集1404表示,并且段8由具有指令inst7至inst9的指令集1406表示。在图12的示例中,段6和8具有不超过指定的vgpr使用阈值1202(图12)的vgpr使用,而段7具有超过指定的vgpr使用阈值1202的vgpr使用。
76.因此,在该示例中,着色器编译器1018修改着色器程序1008以通过针对波前的每个部分复制经修改着色器程序中的集1304以及插入指令以将每个复制的指令集1404的执行限于对应的波前来提供每次仅在波前的一个部分上执行指令集1304。为了说明,如表示经修改着色器程序的所得的部分的框1412所示,用于段7的指令集1404被替换指令集1414替换,该替换指令集包括指令集1404的两个复本,这两个复本在所得的经修改着色器程序中表示为集1404_l和集1404_h。针对波前的下一半插入复制集1404_h,并且针对波前的上一半插入复制集1404_h。如图所示,替换指令集1414还包括将复制集1404_l的指令的执行限于波前的前一半并且将复制集1404_h的指令的执行限于波前的后一半的指令。
77.现在参考图15,示出了用于软件实现的子向量循环的基于循环的修改方案。gpu 130替代地可被配置为通过着色器程序1008的软件重新配置来提供子向量循环模式而不是复制要在基于软件的子向量循环模式下执行的段的指令集,其中指令被添加到要在子向量循环模式下执行的段,使得针对波前的每个部分执行该段的迭代。为了说明,图15的框1500描绘了表示来自图12的示例的段6、7和8的着色器程序1008的代码的部分。段6由具有指令inst0至inst2的指令集1402表示,段7由具有指令inst3至inst6的指令集1404表示,并且段8由具有指令inst7至inst9的指令集1506表示。如先前所指出,段6和8具有不超过指定的vgpr使用阈值1202(图12)的vgpr使用,而段7具有超过指定的vgpr使用阈值1202的vgpr使用。
78.在该示例中,着色器编译器1018修改着色器程序1008以通过包括有效地将指令集1504放在经修改着色器程序中的循环中并且致使按顺序针对波前的不同部分执行循环的每次迭代的指令来提供用于每次仅在同一波前的一个部分上执行指令集1504。为了说明,如表示经修改着色器程序的所得的部分的框1512所示,用于段7的指令集1504被替换指令
集1414替换,该替换指令集包括将指令集1504放在循环中并且提供在波前的单独部分上执行循环的每次迭代的指令1516。如图所示,这些指令1516包括函数调用“s_subvector_loop_end”和“s_subvector_loop_begin”,其表示以下函数:
79.s_subvector_loop_end:
80.如果(exec_hi!=0)exec_lo=s0,继续//结束第二程或仅高程
81.否则
82.如果(s0==0)继续//完成:执行低程,并且跳过高程
83.否则:exechi=s0,s0=execlo,execlo=0,branch loopstart//进行2个程中的第2程
84.s_subvector_loop_begin:
85.如果(exec[63:0]==0)branch skip_all//无程

跳过整个循环
[0086]
否则如果(exec_lo==0)s0=exec_lo//仅高程
[0087]
否则s0=exec_hi//先低程:两个程或仅低程
[0088]
因此,如果exec_hi=0,则仅执行指令集1504一次:将exec_lo存储在s0中并且在结束时恢复,但它无论如何都是零。如果exec_lo在开始时是零,结果相同。如果exec掩码的两半是非零,则首先执行低程(将exechi存储在s0中),然后恢复exechi并保存execlo,并且再次执行该程。然后,在第二程结束时恢复execlo。通过观察exec的哪一半是零来对“程#”进行编码。
[0089]
在一些实施方案中,上文描述的技术的某些方面可由执行软件的处理系统的一个或多个处理器实现。软件包括存储或以其他方式有形地体现在非暂时性计算机可读存储介质上的一个或多个可执行指令集。软件可包括在由一个或多个处理器执行时操纵一个或多个处理器来执行上文描述的一个或多个方面的指令和某些数据。此类非暂时性计算机可读存储介质可包括例如光学介质(例如,压缩光盘(cd)、数字通用光盘(dvd)、蓝光光盘)、磁性介质(例如,软盘、磁带或磁性硬盘)、易失性存储器(例如,随机存取存储器(ram)或高速缓存)、非易失性存储器(例如,只读存储器(rom)或闪存存储器)或基于微机电系统(mems)的存储介质。计算机可读存储介质可嵌入在计算系统中(例如,系统ram或rom)、固定地附接到计算系统(例如,磁性硬盘驱动器)、可移除地附接到计算系统(例如,光盘或基于通用串行总线(usb)的闪存存储器),或者经由有线或无线网络耦合到计算机系统(例如,网络可存取存储(nas))。存储在非暂时性计算机可读存储介质上的可执行指令可呈源代码、汇编语言代码、对象代码或由一个或多个处理器解译或以其他方式执行的其他指令格式。
[0090]
应当注意,并不要求上文在一般描述中描述的所有活动或元件,可能不要求具体活动或装置的一部分,并且可能执行一个或多个其他活动,或者可能包括除了所描述的元件之外的元件。另外,列出活动的次序不一定是执行活动的次序。另外,已经参考具体实施方案描述了各概念。然而,本领域普通技术人员应当了解,在不脱离如在所附权利要求中所阐述的本公开的范围的情况下,可作出各种修改和改变。因此,本说明书和附图将被视为是说明性而非限制性的,并且所有此类修改都意图被包括在本公开的范围内。
[0091]
上文已经参考具体实施方案描述了益处、其他优点以及问题的解决方案。然而,所述益处、优点、问题的解决方案以及可致使任何益处、优点或者问题的解决方案出现或变得更突出的任何特征都不应当被解释为是任何或所有权利要求的关键、必需或必要特征。此
外,上文公开的特定实施方案只是说明性的,因为所公开的主题可按受益于本文教义的本领域技术人员显而易见的不同但等效的方式来修改和实践。除了如在所附权利要求中所描述的之外,并不意在限制本文示出的构造或设计的细节。因此,明显的是,可更改或修改上文公开的特定实施方案,并且所有此类变化形式都被认为是在所公开的主题的范围内。因此,本文寻求的保护如在所附权利要求中所阐述。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献