用于基于活跃分析的再具体化以减少寄存器不足并提高并行度的技术的制作方法

文档序号:6494628阅读:262来源:国知局
用于基于活跃分析的再具体化以减少寄存器不足并提高并行度的技术的制作方法
【专利摘要】并行处理单元(PPU)内的设备编译器和连接器配置为通过将入口活跃(live-in)变量的子集再具体化用于针对程序代码所生成的控制流图中的特定块来优化使能协处理器的应用的该程序代码。设备编译器和连接器识别具有最大数目的入口活跃变量的控制流图的块,然后选择与再具体化授予其最大所估计的收益的所识别的块相关联的入口活跃变量的子集。将入口活跃变量的给定子集再具体化的收益是基于所减少的入口活跃变量的数目、再具体化的成本、以及再具体化的潜在风险来确定的。
【专利说明】用于基于活跃分析的再具体化以减少寄存器不足并提高并行度的技术
[0001]相关串请的交叉引用
[0002]本申请要求于2011年11月7日提交的序列号为61/556,782的美国临时专利申请、以及于2012年11月5日提交的序列号为13/669,401的美国专利申请的权益。在此通过援引的方式对这些申请的每个加以合并。
【技术领域】
[0003]本发明总地涉及用于并行处理单元(PTO)的编译器,并且,更具体地,涉及一种用于基于活跃(live)分析的再具体化(rematerialization)以减少寄存器不足并提高并行度的技术。
【背景技术】
[0004]图形处理单元(GPU)已经随时间演变以支持面向图形的操作以外的广泛的操作。实际上,现代GPU能够执行任意程序指令。这种GPU —般包括编译程序指令用于在GPU内所包括的一个或多个处理内核上执行的编译器。每个这种内核可与其他执行执行线程的处理内核并行执行一个或多个不同的执行线程。
[0005]当GPU内的处理内核执行程序指令的集合时,处理内核可将与这些指令相关联的程序变量存储在寄存器存储器中。如本领域所知的,当寄存器存储器完全由程序变量所充满时,附加的程序变量可能“溢出”到系统存储器。常规方法对“溢出”的一个问题在于系统存储器比寄存器存储器具有高得多的时延。因此,在“溢出”事件发生后,程序指令执行的速度可能显著减小,这是因为不得不从系统存储器而非寄存器存储器访问程序变量。第二个问题在于在处理单元内给定的处理内核能够同时执行的线程的数目取决于可用的寄存器存储器。因此,用程序变量填充寄存器存储器最后可能减小同时执行的线程数并因此减小GPU的整体处理吞吐量。
[0006]因此,本领域所需要的是用于管理GPU内的寄存器存储器的更有效的技术。

【发明内容】

[0007]本发明的一个实施例阐述了用于优化能够被编译用于在并行处理单元(PTO)上执行的程序代码的计算机实现的方法,该方法包括针对程序代码生成控制流图、识别控制流图中的、与控制流图中的其他块相比具有最大数目的入口活跃(live-1n)变量的第一块、通过对与第一块相关联的入口活跃变量的不同子集实施收益分析来选择与第一块相关联的入口活跃变量的第一子集、以及通过将入口活跃变量的第一子集再具体化到在控制流图中的第一块之后的控制流图中的第二块中来优化程序代码,其中经优化的程序代码将在PPU上执行。
[0008]所公开的技术的一个优点是将入口活跃变量的某些子集再具体化减小了寄存器不足,从而减少溢出事件的可能性。减小寄存器不足还允许较大数目的执行线程在PPU内同时执行,从而增加PPU的整体处理吞吐量。
【专利附图】

【附图说明】
[0009]因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本公开更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本公开的典型实施例,因此不应被认为是对其范围的限制,本公开可以具有其他等效的实施例。
[0010]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
[0011]图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
[0012]图3示出了根据本发明的一个实施例的、用来编译使能协处理器的应用的构建过程;
[0013]图4是根据本发明的一个实施例的、用于用入口活跃变量的集合来实施基于活跃分析的再具体化的方法步骤的流程图;
[0014]图5是根据本发明的一个实施例的、用于对入口活跃变量的集合实施收益分析的方法步骤的流程图;
[0015]图6根据本发明的一个实施例阐述示范性控制流图以说明设备编译器和连接器(linker)的操作。
【具体实施方式】
[0016]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
[0017]系统概述
[0018]图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU) 102和系统存储器104。系统存储器104包括驱动程序103、使能协处理器的应用134和操作系统130的映像。操作系统130提供用于管理和协调计算机系统100的操作的详细指令。驱动程序103提供用于管理和协调并行处理子系统112和驻留在其中的一个或多个并行处理单元(PPU)的操作的详细指令,如下文更详细地结合图2所描述的。驱动程序103还提供编译设施用于生成经特定优化用于这种PPU的机器码,如下文更详细地结合图3-6所描述的。使能协处理器的应用134包含能够在CPU102和PPU上执行的指令,那些指令以诸如虚拟汇编的抽象格式所实现,并映射到用于并行处理子系统112内的PPU的机器码。用于那些PPU的机器码可存储在系统存储器104中或存储在耦连到PI3U的存储器中。
[0019]在一个实施例中,使能协处理器的应用134表不包含意图在并行处理子系统112上执行的编程指令的CUDA?代码。在本描述的上下文中,术语“应用”或“程序”指的是可使用处理器所执行的任意计算机代码、指令和/或函数。例如,在各种实施例中,使能协处理器的应用134可包括C代码、C++代码等。在一个实施例中,使能协处理器的应用134可包括计算机语目(例如C、C++等)的语目扩展。[0020]存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106 (例如超传输(HyperTransport)链路)连接到输入/输出(I/O)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108 (例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113 (例如外围部件互连(PCIe)、加速图形端口(AGP)或超传输链路)耦连到存储器桥105 ;在一个实施例中,并行处理子系统112是将像素传递到可以是任意传统的阴极射线管、液晶显示器、发光二极管显示器等等的显示设备110的图形子系统。系统盘114也连接到I/O桥107并可配置为存储内容和应用和数据用于由CPU102和并行处理子系统112使用。系统盘114提供非易失性存储用于应用和数据并可包括固定或可移动的硬盘驱动器、闪存设备以及压缩光盘(CD)只读存储器(ROM)、数字视频光盘(DVD) ROM、蓝光、高分辨率(HD) DVD或其他磁、光、或固态存储设备。
[0021]交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、⑶驱动器、DVD驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCIe、AGP、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
[0022]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
[0023]应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或两个以上的CPU102以及两个或两个以上的并行处理子系统112。本文所示的特定部件是可选的;例如,任意数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥 107。
[0024]图2示出了根据本发明一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U大于或等于I。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。[0025]参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PTO可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
[0026]在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
[0027]每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
[0028]在一个实施例中,如上所述,通信路径113是PCIe链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
[0029]有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥I。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
[0030]GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
[0031]存储器接口 214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D > I。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM) 220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
[0032]任意一个GPC208都可以处理要被写到并行处理存储器204内的任意DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任意分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口 214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口 214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
[0033]另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
[0034]PPU202可配备有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。可替代地,每个PPU202可用非统一存储器架构加以实现,并且每个这种PPU202可具有按照使能协处理器的应用134的引导对多个不同存储器空间的访问权限。
[0035]如上所示,在并行处理子系统112中可以包括任意数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
[0036]如上所述,每个PPU202配置为执行图1中所示的使能协处理器的应用134。使能协处理器的应用134由源自设备驱动程序103的设备编译器和连接器应用所编译,如下文更详细地结合图3所描述的。
[0037]图3示出了根据本发明的一个实施例的、用来编译图1的使能协处理器的应用134的构建过程。程序代码310包括主机源代码312和设备源代码314。主机源代码312包含意图在诸如基于x86的个人计算机(PC)或服务器的主机上执行的编程指令。源代码312中的编程指令可包括对在设备源代码314中所定义的函数的调用。任意技术上可行的机制都可用来指定哪些函数被指定为设备源代码314。
[0038]主机源代码312由主机编译器和连接器322所预处理、编译以及连接。主机编译器和连接器322生成主机机器码342,该机器码342存储在使能协处理器的应用134内。
[0039]设备源代码314由设备编译器和连接器324所预处理、编译以及连接。该编译操作构成设备源代码314的第一阶段编译。设备编译器和连接器324生成设备虚拟汇编346,其存储在设备代码库350中,与使能协处理器的应用134驻留在一起或驻留在使能协处理器的应用134内。虚拟指令翻译器334可根据设备虚拟汇编346生成设备机器码344。该编译操作构成设备源代码314的第二阶段编译。虚拟指令翻译器334可基于已知架构定义的可用性,生成多于一个版本的设备机器码344。例如,虚拟指令翻译器334可生成设备机器码344的第一版本,其调用2原生64位算术指令(在第一目标架构中可用)并可生成设备机器码344的第二版本,其在不包括原生64位算术指令的目标上模拟64位算术函数。
[0040]架构信息348指示用来生成设备机器码344的实际架构版本。实际架构版本定义在诸如PPU202的实际执行目标内的原生指令中所实现的特征。架构信息348还指示用来生成设备虚拟汇编346的虚拟架构版本。虚拟架构版本定义被假定为原生的或容易模拟的特征以及定义难以模拟的特征。例如,原子的加法操作在指令级是难以模拟的,虽然原子的加法操作在某些情况下在算法级可以一起避免,并且因此影响了哪些函数可能在第一编译阶段中编译。
[0041]除设备机器码344和设备虚拟汇编346之外,设备代码库还包括架构信息348,其指示当生成设备机器码344和设备虚拟汇编346时假定了哪些架构特征。本领域的技术人员将意识到,设备机器码344和虚拟汇编346内所包括的函数反映了与PPU202的实际架构相关联的函数。架构信息348提供用于设备机器码344的兼容性信息以及用于第二阶段编译操作的编译器提示,其可在使能协处理器的应用134的开发已经完成之后的某时间由设备驱动程序103所实施。
[0042]设备编译器和连接器324还配置为用程序代码310实施各种优化例程。一个这种优化例程涉及选择性地将入口活跃变量的集合再具体化,如下文更详细地结合图4所描述的。
[0043]基于活跃分析的再具体化
[0044]图4是根据本发明的一个实施例的、用于用入口活跃变量的集合实施基于活跃分析的再具体化的方法步骤的流程图。虽然结合图1-2的系统描述了方法步骤,但本领域的技术人员应理解的是,配置为以任意顺序实施方法步骤的任意系统在本发明的范围内。在一个实施例中,图3中所示的设备编译器和连接器324可配置为实现方法步骤。
[0045]如所示,方法400在步骤402开始,其中设备编译器和连接器324针对程序代码310生成控制流图。由设备编译器和连接器324所生成的控制流图可以是使用数据流分析技术所生成的常规控制图,并且因此,可包括代码块的合集。在步骤404,设备编译器和连接器324识别控制流图中的、包括最大数目的入口活跃变量的块。在一个实施例中,设备编译器和连接器324针对控制流图中的每个块确定入口活跃变量的数目并且随后识别具有最大数目的入口活跃变量的块。最大数目的入口活跃变量由被称为“最大入口活跃量(maxlive-1n)”的值所表示。最大入口活跃量可指示通过执行使能协处理器的应用134所致使的寄存器不足的数量。在步骤406,设备编译器和连接器324收集与在步骤404所识别的块相关联的入口活跃变量。
[0046]在步骤408,设备编译器和连接器324基于用入口活跃变量的不同子集实施收益分析来选择入口活跃变量的子集用于再具体化。设备编译器和连接器324可实施收益分析,来确定将入口活跃变量的给定子集再具体化的“收益”。入口活跃变量的给定子集的“收益”可以是反映通过将给定子集再具体化所减少的入口活跃变量的数目的数值。该值可附加地反映被拉入用于该再具体化的指令的数目和/或被允许用于每个线程的寄存器的最大数目,如下文更详细地结合图5所讨论的。
[0047]在步骤410,设备编译器和连接器324将给定子集中的入口活跃变量再具体化。设备编译器和连接器324可实现任意技术上可行的再具体化技术。在一个实施例中,设备编译器和连接器324通过从控制流图的块中首先移除涉及那些入口活跃变量的计算来将入口活跃变量的给定子集再具体化。然后设备编译器和连接器324可修改控制流图的随后的块以重新计算与随后的块内的子集相关联的入口活跃变量。这样,设备编译器和连接器324可按需要修改程序代码310。在步骤412,设备编译器和连接器324通过针对每个块识别入口活跃变量的数目以及识别具有最大数目的入口活跃变量的块来更新最大入口活跃量。然后方法400结束。
[0048]设备编译器和连接器324可迭代地实施步骤404、406、408、410以及412,直到满足具体目标为止。在一个实施例中,设备编译器和连接器324将那些步骤实施固定次数,例如5次。在另一个实施例中,设备编译器和连接器324迭代地实施步骤404、406、408、410以及412,直到最大入口活跃量减小到给定阈值以下,指示由于再具体化寄存器不足已充分减小。
[0049]图5是根据本发明的一个实施例的、用于对入口活跃变量的集合实施收益分析的方法步骤的流程图。虽然结合图1-2的系统描述了方法步骤,本领域的技术人员应理解的是,配置为以任意顺序实施方法步骤的任意系统在本发明的范围内。在一个实施例中,图3中所示的设备编译器和连接器324可配置为用与在方法400的步骤404中所识别的块相关联的入口活跃变量的子集实现方法步骤。
[0050]如所示,方法500在步骤502开始,其中设备编译器和连接器324基于经由再具体化所减少的入口活跃变量的数目来针对入口活跃变量的子集生成第一收益因数。例如,设备编译器和连接器324可确定再具体化将入口活跃变量的数目减少2并将该数目增加I,得到I个入口活跃变量的净减少。
[0051]在步骤504,设备编译器和连接器324基于被拉入用于再具体化的指令的数目和由再具体化所要求的使用位置(use-site)的成本来生成第二收益因数。由于不同的入口活跃变量可与不同复杂性的指令和/或具有不同成本的使用位置相关联,设备编译器和连接器324生成第二收益因数,以量化入口活跃变量的不同子集之间的这种区别。
[0052]在步骤506,设备编译器和连接器324基于所允许用于配置为执行使能协处理器的应用134的每个线程的寄存器的最大数目来生成第三收益因数。这样,设备编译器和连接器324可估计当超过寄存器的最大数目时将发生的“溢出”事件的成本。该成本除了反映其他方面,可反映例如存储器时延由于溢出事件而增加和/或程序执行速度的减小。在步骤508,设备编译器和连接器324基于在步骤402、404和406所分别生成的第一、第二及第三收益因数来估计将入口活跃变量的子集再具体化的收益。通常,将入口活跃变量的给定子集再具体化的“收益”是反映将该变量的子集再具体化的潜在益处的数值。
[0053]设备编译器和连接器324配置为用与在方法400的步骤404所识别的块相关联的入口活跃变量的集合的多个不同子集来实施方法500。这样,设备编译器和连接器324可估计将那些入口活跃变量的每个可能的子集再具体化的收益并随后选择具有最大收益的子集用于再具体化。
[0054]上文结合图4和5所分别描述的方法400和500在下文结合图6通过示例的方式更详细地加以说明。
[0055]图6根据本发明的一个实施例阐述示范性控制流图以说明设备编译器和连接器的操作。在方法400的步骤402,设备编译器和连接器324可基于程序代码310生成控制流图600,如上文结合图4所描述的。如所示,控制流图600包括块610和620。块610包括2个表达式并从先前块(未示出)接收I个入口活跃变量“t”。块620包括3个表达式并从块610接收2个入口活跃变量“X”和“y”。那些块内的表达式源自程序代码310。在下面的示例中,设备编译器和连接器324分别实施了上文结合图4和5所描述的方法400和500,以选择性地将控制流图600内的变量再具体化。这样,当给定的PPU202执行由控制流图600所表示的代码时,设备编译器和连接器324可减少寄存器不足。
[0056]一旦设备编译器和连接器324已生成控制流图600,设备编译器和连接器324识别控制流图600内的具有最大数目的入口活跃变量的块。由于块610接收I个入口活跃变量以及块620接收2个入口活跃变量,设备编译器和连接器324将块620识别为具有最大入口活跃量,类似于方法400的步骤404。设备编译器和连接器324随后基于用每个可能的子集所实施的收益分析来选择与块620相关联的入口活跃变量的子集。
[0057]在该示例中,设备编译器和连接器324可用包括入口活跃变量“X”、入口活跃变量“y”、或入口活跃变量“X”和“y”的子集来实施收益分析。结合图5所概括的收益分析将揭示,仅独自地将“X”或“y”再具体化将不会减少针对块620的入口活跃变量的数目,因为这么做将使“t”成为新入口活跃变量,得到O个入口活跃变量的净减少。然而,将“X”和“y”一起再具体化将会将入口活跃变量的数目减小2而入口活跃变量的数目只增加I,得到I个入口活跃变量的净减少。该净减少可反映在由设备编译器和连接器324在方法500的步骤502中针对包括“X”和“y”的子集所生成的第一收益因数中。
[0058]设备编译器和连接器324还配置为确定被拉入用于将给定子集中的入口活跃变量再具体化的指令的数目以及用于将那些入口活跃变量再具体化所要求的使用位置的成本,类似于方法500的步骤504。在该示例中,设备编译器和连接器324将分析入口活跃变量“X”和“y”的定义以及由那些定义所要求的存储器访问的类型,以确定将那些变量再具体化所涉及的“开销(overhead)”。在一些情况下,由于例如将某些入口活跃变量再具体化所要求的指令的复杂性、或与将那些变量再具体化相关联的使用位置成本,将给定子集中的入口活跃变量再具体化所涉及的开销可能是高昂的。通常,在方法500的步骤504由设备编译器和连接器324所生成的第二收益因数反映该开销。
[0059]针对该示例中所讨论的入口活跃变量的每个子集,具体地,包括“x”、“y”、或“X”和“y”的子集,设备编译器和连接器324生成上文以及分别结合方法500的步骤502和504所讨论的第一和第二收益因数。针对每个这种子集,设备编译器和连接器324还生成结合方法500的步骤506所讨论的第三收益因数。设备编译器和连接器324基于所允许用于配置为执行使能协处理器的应用134的每个线程的寄存器的最大数目以及当超过该数目的寄存器时可发生的“溢出”事件的成本来针对给定的子集生成第三收益因数。在这种情况下,给定子集中的入口活跃变量可能溢出到系统存储器。设备编译器和连接器324基于该溢出的“成本”,例如存储器时延的增加和/或程序执行速度的减小,来估计针对给定子集的第三收益因数。因此,针对入口活跃变量的给定子集所生成的第三收益因数表示与将该子集中的入口活跃变量再具体化相关联的“风险”程度。
[0060]设备编译器和连接器324基于针对每个这种子集的所生成的3个收益因数,来对将在该示例中所讨论的不同子集中的入口活跃变量再具体化的整体收益进行估计,类似于方法500的步骤508。设备编译器和连接器324随后将具有最大收益的子集中的入口活跃变量再具体化。在该示例中,包括“X”和“y”二者的子集具有最大收益,并且因此设备编译器和连接器通过修改程序代码310将块620内的那些变量再具体化。
[0061]总而言之,并行处理单元(PTO)内的设备编译器和连接器配置为:通过将针对程序代码所生成的控制流图中的特定块的入口活跃变量的子集再具体化来优化使能协处理器的应用的该程序代码。设备编译器和连接器识别控制流图的具有最大数目的入口活跃变量的块,然后选择与所识别的块相关联的入口活跃变量的子集,针对该所识别的块的再具体化表达所估计的最大收益。将入口活跃变量的给定子集再具体化的收益是基于所减少的入口活跃变量的数目、再具体化的成本、以及再具体化的潜在风险来确定的。
[0062]有利地,将入口活跃变量的某些子集再具体化减小了寄存器不足,从而减少溢出事件的可能性。减小寄存器不足还允许用PPU同时执行更大数目的执行线程,从而增加PPU的整体处理吞吐量。
[0063]本发明的一个实施例可实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写入的存储介质(例如,计算机内的只读存储器设备,诸如可由光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上永久性地存储信息jP(ii)可写入的存储介质(例如,软盘驱动器内的软盘或硬盘驱动器或者任意类型的固态随机存取半导体存储器),在其上存储可更改的信息。
[0064]以上已参照特定实施例对本发明进行了描述。然而,本领域技术人员将理解的是,可对此做出各种修改和变化,而不脱离如所附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是示例性的而非限制性的。
【权利要求】
1.一种用于优化能够被编译用于在并行处理单元(PPU)上执行的程序代码的计算机实现的方法,所述方法包括: 针对所述程序代码生成控制流图; 识别所述控制流图中的、与所述控制流图中的其他块相比具有最大数目的入口活跃变量的第一块; 通过对与所述第一块相关联的入口活跃变量的不同子集实施收益分析来选择与所述第一块相关联的入口活跃变量的第一子集;以及 通过将所述入口活跃变量的第一子集再具体化到在所述控制流图中的所述第一块之后的所述控制流图中的第二块中来优化所述程序代码,其中所述经优化的程序代码将在所述PI3U上执行。
2.根据权利要求1所述的计算机实现的方法,其中选择所述入口活跃变量的第一子集包括: 通过对所述不同子集中的每个实施所述收益分析来估计用于所述入口活跃变量的不同子集中的每个的收益值;以及 基于所述入口活跃变量的第一子集和与所述入口活跃变量的其他不同子集相关联的所述收益值相比具有最大收益值,来选择所述入口活跃变量的第一子集。
3.根据权利要求2所述的计算机实现的方法,其中用于入口活跃变量的给定子集的所述收益分析基于通过将所述入口活跃变量的给定子集再具体化到所述控制流图中的所述第二块中所减少的入口活跃变量的数目而生成。
4.根据权利要求3所述的计算机实现的方法,其中用于所述入口活跃变量的给定子集的所述收益分析进一步基于当将所述入口活跃变量的给定子集再具体化到所述第二块中时被拉入所述控制流图的所述第二块的指令的数目而生成。
5.根据权利要求4所述的计算机实现的方法,其中用于所述入口活跃变量的给定子集的所述收益分析进一步基于与将所述入口活跃变量的给定子集再具体化到所述控制流图的所述第二块中相关联的使用位置的数目而生成。
6.根据权利要求5所述的计算机实现的方法,其中用于所述入口活跃变量的给定子集的所述收益分析进一步基于以下成本的至少一个而生成:将所述入口活跃变量的给定子集从寄存器存储器转移到系统存储器的成本以及访问系统存储器内的所述入口活跃变量的给定子集的成本。
7.根据权利要求1所述的计算机实现的方法,进一步包括对所述程序代码实施数据流分析以生成所述控制流图。
8.根据权利要求1所述的计算机实现的方法,进一步包括迭代地优化所述程序代码并估计通过在所述PPU内执行所述经优化的程序代码所致使的寄存器不足的数量,直到所述通过在所述PPU内执行所述程序代码所致使的寄存器不足的数量落到阈值以下为止。
9.根据权利要求1所述的计算机实现的方法,进一步包括: 确定将所述入口活跃变量的第一集合再具体化使寄存器存储器中的寄存器的集合可用;以及 分配所述寄存器的集合给配置为在所述PPU上执行的一个或多个线程。
10.一种配置为优化能够被编译用于在并行处理单元(PPU)上执行的程序代码的计算设备,包括: 处理单元,配置为: 针对所述程序代码生成控制流图; 识别所述控制流图中的、与所述控制流图中的其他块相比具有最大数目的入口活跃变量的第一块; 通过对与所述第一块相关联的入口活跃变量的不同子集实施收益分析来选择与所述第一块相关联的入口活跃变量的第一子集;以及 通过将所述入口活跃变量的第一子集再具体化到在所述控制流图中的所述第一块之后的所述控制流图中的第二块中来优化所述程序代码,其中经优化的程序代码将在所述PPU上 执行。
【文档编号】G06F9/45GK103460188SQ201280013228
【公开日】2013年12月18日 申请日期:2012年11月6日 优先权日:2011年11月7日
【发明者】孔祥云, 王建中, 林 源, 维诺德·格罗弗 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1