用于函数调用中可重复使用和相对索引的寄存器资源分配的方法和装置与流程

文档序号:34140444发布日期:2023-05-12 22:06阅读:161来源:国知局
用于函数调用中可重复使用和相对索引的寄存器资源分配的方法和装置与流程

本发明大体上涉及寄存器资源优化领域,尤其涉及一种用于优化函数调用中资源分配的方法和装置。


背景技术:

1、处理器通常具有通用寄存器或寄存器堆,由处理线程共用,并在运行时进行分区。这些资源提供了非常快速地存取处理器的存储能力,但由于这些资源的硬件成本,资源数量有限。处理器还会使用更多较便宜的内存资源,例如,缓存和主存,但读/写性能也会慢得多。在处理过程中耗尽寄存器资源迫使处理器将寄存器中保存的值溢出到缓存和/或主存中。这种溢出对处理造成了很大的损失,而且在性能和能量两方面带来高成本,因此效率非常低。

2、对于函数调用,常规调用约定通常要求调用方和被调用方将活性寄存器溢出到堆栈中,并在被调用方返回后恢复活性寄存器。此类常规调用约定要求确定需要为调用方保存多少寄存器,需要将多少寄存器传递给被调用方,从而导致对可用寄存器堆进行分区,并导致大量溢出到其它内存资源。

3、这可能导致寄存器堆的利用率不足(即,尽管存在足够的寄存器来保存调用方和被调用方的实时数据,但数据往返堆栈存储/加载)。除此之外,处理器编程通常在可能的情况下使用内联(具有大的主函数和小的调用函数)。

4、例如,特定的计算环境可能会加剧此问题:使用图形处理单元(graphicalprocessing unit,gpu)进行光线跟踪处理的问题,其中,着色器管线使着色器之间的交互更加动态。着色器可以调用其它着色器,很像过程式编程中的间接方法调用。在此计算环境中,内联甚至不可能实现。

5、通常,所有函数/着色器寄存器资源分配请求都会在编译时解析和最终完成。这些请求被编码在生成的二进制中,因此一旦编译完成,寄存器资源分配是不可改变的。间接函数调用使寄存器资源分配在函数/着色器调用方和被调用方之间是动态的。


技术实现思路

1、本发明技术提供了一种寄存器分配方案,以使被调用方“重复使用”调用点处的空闲寄存器资源(动态调用的基本类别),这种分配方案是“相对”于调用方的。更具体地说,本发明技术使得编译器在调用(尤其是间接调用)中执行优化的动态寄存器资源分配。本发明技术通过动态资源重复使用和动态索引的资源访问,优化寄存器资源分配,例如,调用中的寄存器分配。本发明技术提出了一种新的机制,以基于每个调用点在编译时的实际资源使用分析,在运行时管理和优化寄存器资源分配,从而实现更加高效的资源利用率,并降低由于寄存器堆资源耗尽而因此溢出操作的概率。本发明技术为编译器提供了优化运行时代码的能力,所述运行时代码预期和处理寄存器资源耗尽,其中仅在资源实际上即将耗尽时,才会溢出该资源。

2、本发明技术使编译器能够执行寄存器资源数据流分析,以找到每个调用点处的资源重复使用模式。基于所述分析,编译器创建了自定义的分配映射和分配指针供被调用方使用,实现了调用方和一个或多个被调用方之间的优化、动态的分配方案。

3、本发明技术还提出了动态相对寄存器资源访问机制,以促进分配方案,其使编译器能够在运行时灵活地生成经过编译的代码的一个拷贝,以用于不同的分配场景。

4、因此,本发明技术的目标是提供一种通过利用空闲寄存器的可用性来优化函数对寄存器堆的使用的技术,以避免必须将寄存器中保存的值溢出到慢得多的缓存和/或主存。本文中公开的装置、方法和系统使得编译器在分析函数之间的调用交互之后,将相关索引传递到被调用函数,使得这些函数在必须从寄存器溢出值之前使用寄存器堆中的空闲寄存器。

5、根据此目标,本发明技术的一个方面提供了一种通过编译器使用包括多个(nof_regfile)寄存器的寄存器堆来优化模块中函数si(i>0)的寄存器资源分配的方法。所述方法包括:在所述模块中执行过程间分析;(i)计算所述函数si使用的寄存器的数量nof_regi;(ii)将所述函数si编译到最终机器代码中,其中,如果所述编译器检测到对另一个函数si的调用j,(j<>i),则所述编译器将调用指令保留为伪指令callsiteij;所述方法还包括:对于每个callsiteij,(i)将一个或多个被调用函数sk(k<>i)确定为calltargetijk;(ii)计算所述函数si在callsiteij处使用的活性寄存器的最大数量maxregindexij,并计算regindexforrelindexij=maxregindexij+1。所述方法还包括:对于每个callsiteij和每个calltargetijk将所述调用指令扩展到所述最终机器代码,以:读取所述函数si的相对索引rel_indexi的值,并计算所述函数calltargetijk的总和rel_indexi+regindexforrelindexij+nof_regk;(ii)将所述计算到的总和与nof_regfile进行比较,其中,如果所述计算到的总和小于或等于nof_regfile,则计算并设置传递到callsiteij处的每个calltargetijk的相对索引rel_indexijk,以供calltargetijk用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;否则,计算并从所述寄存器堆中溢出寄存器,计算并设置关联的相对索引rel_indexijk,其中,所述相对索引解释说明所述溢出的寄存器,并传递到callsiteij处的每个calltargetijk,以供calltargetijk用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;重复对所述模块中的所有函数si进行计算、编译、确定、计算、读取、比较、计算和溢出和设置。

6、在所述方法的一些实施例中,所述函数si是在图形处理单元(graphicalprocessing unit,gpu)中执行光线跟踪的着色器函数。

7、在所述方法的一些其它实施例中,所述在所述模块中执行过程间分析包括:对(i)所述函数si之间的调用方-被调用方关系或(ii)函数sk调用目标信息中的至少一个进行分析。

8、在所述方法的一些其它实施例中,所述编译器除了执行过程间分析之外,还使用画像信息。

9、在所述方法的一些其它实施例中,所述相对索引rel_indexijk是通过将所述相对索引写入calltargetijk的寄存器r0来传递的。

10、在所述方法的一些其它实施例中,所述相对索引rel_indexijk是通过将所述相对索引写入不属于所述寄存器堆的处理器寄存器,并通过所述calltargetijk在所述寄存器中提取所述相对索引来传递到calltargetijk。

11、在所述方法的一些其它实施例中,当在所述模块中执行过程间分析包括对所述函数si之间的调用方-被调用方关系进行分析时,所述计算供所述函数si使用的寄存器的数量nof_regi通过以下步骤执行:(i)计算所述函数si中的每个叶子函数的nof_regi;(ii)对于每个叶子函数,迭代地计算与所述叶子函数存在调用方-被调用方关系的所述函数si中的沿调用链向上移动的每个函数的nof_regi。

12、在所述方法的一些其它实施例中,当在所述模块中执行过程间分析包括对函数sk调用目标信息进行分析时,所述计算供所述函数si使用的寄存器的数量nof_regi是按需执行的,如果callsiteij的调用目标信息未知,则所述编译器返回nof_regi作为nof_regfile。

13、在所述方法的一些其它实施例中,在所述计算到的总和小于或等于nof_regfile的情况下,所述计算并设置传递到callsiteij处的每个calltargetijk的相对索引rel_indexijk包括:将所述调用指令扩展到所述最终机器代码,以:(i)计算:rel_indexijk=r0+regindexforrelindexij,其中,r0保存函数si的rel_indexi;(ii)将所述值rel_indexijk存储在以regindexforrelindexij为索引的存储器rregindexforrelindexij中;(iii)设置:rel_indexk=rregindexforrelindexij;(v)调用sk;(v)计算:r0=r0–rregindexforrelindexij;(vi)设置:rel_indexi=r0。

14、在所述方法的一些其它实施例中,在所述计算到的总和小于或等于nof_regfile的情况下,所述计算并设置传递到callsiteij处的每个calltargetijk的相对索引rel_indexijk包括:将所述调用指令扩展到所述最终机器代码,以:(i)计算从所述寄存器堆溢出的寄存器的数量nspillij:nspillij=(nof_regfile–(r0+regindexforrelindexij+nof_regk);(ii)设置:rel_indexi=rel_indexijk;(iii)溢出寄存器r0至rnspillij–1;(iv)将rel_indexijk存储在r0中,并将(regindexforrelindexij–nspillij)存储在r1中;(v)调用sk;(vi)计算:rfree=r0+r1,并将rfree存储在除了r0或r1之外的寄存器中;(vi)不溢出寄存器r0至rnspillij–1;(vii)设置:设置rel_indexi=rfree。

15、根据此目标,本发明技术的另一个方面提供了一种装置。所述装置包括处理器、包括多个(nof_regfile)寄存器的寄存器堆和存储器,所述处理器运行编译器,所述编译器用于将包括函数s的模块编译到处理器可执行指令中,所述编译器还用于优化所述模块中函数si(i>0)的寄存器资源分配,所述优化包括:在所述模块中执行过程间分析,(i)计算所述函数si使用的寄存器的数量nof_regi;(ii)将所述函数si编译到处理器可执行指令中。所述优化还包括:如果所述编译器检测到对另一个函数si的调用j(j<>i),则将调用指令保留为伪指令callsiteij;对于每个callsiteij,(i)将一个或多个被调用函数sk(k<>i)确定为calltargetijk;(ii)计算函数si在callsiteij处使用的活性寄存器的最大数量maxregindexij,并计算regindexforrelindexij=maxregindexij+1。所述优化还包括:对于每个callsiteij和每个calltargetijk,将所述调用指令扩展到所述处理器可执行指令,以:(i)读取所述函数si的相对索引rel_indexi的值,并计算所述函数calltargetijk的总和rel_indexi+regindexforrelindexij+nof_regk;(ii)将所述计算到的总和与nof_regfile进行比较,其中,如果所述计算到的总和小于或等于nof_regfile,则计算并设置传递到callsiteij处的每个calltargetijk的相对索引rel_indexijk,以供calltargetijk用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;否则,计算并将寄存器从所述寄存器堆中溢出到所述存储器,计算并设置关联的相对索引rel_indexijk,其中,所述相对索引解释说明所述溢出的寄存器,并传递到callsiteij处的每个calltargetijk,以供calltargetijk用作通过所述寄存器堆的可用部分来运行的寄存器偏移量。对所述模块中的所有函数si重复进行计算、编译、确定、计算、读取、比较、计算和溢出和设置。

16、在所述装置的一些实施例中,所述处理器是图形处理单元(graphicalprocessing unit,gpu),所述函数si是执行光线跟踪的着色器函数。

17、在所述装置的一些其它实施例中,所述相对索引rel_indexijk是通过将所述相对索引写入所述calltargetijk的寄存器r0来传递的。

18、在所述装置的一些其它实施例中,所述相对索引rel_indexijk是通过将所述相对索引写入所述处理器中的不属于所述寄存器堆的寄存器,并通过calltargetijk在所述寄存器中提取所述相对索引来传递到所述calltargetijk。

19、根据此目标,本发明技术的又一方面提供了一种存储有计算机可执行指令的非瞬时性计算机可读介质。所述指令在由处理器执行时,使得所述处理器使用包括多个(nof_regfile)寄存器的寄存器堆来优化模块中函数si(i>0)的寄存器资源分配,所述优化包括:在所述模块中执行过程间分析;(i)计算所述函数si使用的寄存器的数量nof_regi;(ii)将所述函数si编译到最终机器代码中,其中,如果所述编译器检测到对另一个函数si的调用j(j<>i),则所述编译器将调用指令保留为伪指令callsiteij。所述优化还包括:对于每个callsiteij,(i)将一个或多个被调用函数sk(k<>i)确定为calltargetijk;(ii)计算函数si在callsiteij处使用的活性寄存器的最大数量maxregindexij,并计算regindexforrelindexij=maxregindexij+1。所述优化还包括:对于每个callsiteij和每个calltargetijk,将所述调用指令扩展到所述最终机器代码,以:读取所述函数si的相对索引rel_indexi的值,并计算所述函数calltargetijk的总和rel_indexi+regindexforrelindexij+nof_regk;(ii)将所述计算到的总和与nof_regfile进行比较,其中,如果所计算的总和小于或等于nof_regfile,则计算并设置传递到callsiteij处的每个calltargetijk的相对索引rel_indexijk,以供calltargetijk用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;否则,计算并从所述寄存器堆中溢出寄存器,计算并设置关联的相对索引rel_indexijk,其中,所述索引解释说明所述溢出的寄存器,并传递到callsiteij处的每个calltargetijk,以供calltargetijk用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;重复对所述模块的所有函数si进行计算、编译、确定、计算、读取、比较、计算和溢出和设置。

20、在所述存储有计算机可执行指令的非瞬时性计算机可读介质的一些实施例中,所述在所述模块中执行过程间分析包括:对(i)函数si之间的调用方-被调用方关系或(ii)函数sk调用目标信息中的至少一个进行分析。

21、在所述存储有计算机可执行指令的非瞬时性计算机可读介质的又一些其它实施例中,所述编译器除了执行过程间分析之外,还使用画像信息。

22、在本描述的上下文中,表述“处理器”旨在包括单个专用处理器、单个共享处理器或其中的一些可被共用的多个单独处理器提供。在本发明技术的一些方面中,处理器可以是例如通用处理器,例如中央处理单元(central processing unit,cpu),专用处理器,例如gpu,或在fpga中实现的处理器。也可以包括其它常规的和/或定制的硬件。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1