【技术实现步骤摘要】
【国外来华专利技术】用于函数调用中可重复使用和相对索引的寄存器资源分配的方法和装置
[0001]相关申请
[0002]本专利技术要求于2020年9月4日提交的申请号为17/012,203、专利技术名称为“用于函数调用中可重复使用和相对索引的寄存器资源分配的方法和装置(METHOD AND APPARATUS FOR REUSABLE AND RELATIVE INDEXED REGISTER RESOURCE ALLOCATION IN FUNCTION CALLS)”的在先提交的美国非临时申请的优先权,其内容在允许此类并入的司法管辖区内以引用的方式并入本申请中。
[0003]本专利技术大体上涉及寄存器资源优化领域,尤其涉及一种用于优化函数调用中资源分配的方法和装置。
技术介绍
[0004]处理器通常具有通用寄存器或寄存器堆,由处理线程共用,并在运行时进行分区。这些资源提供了非常快速地存取处理器的存储能力,但由于这些资源的硬件成本,资源数量有限。处理器还会使用更多较便宜的内存资源,例如,缓存和主存,但读/写性能也会慢得多。在处理 ...
【技术保护点】
【技术特征摘要】
【国外来华专利技术】1.一种通过编译器使用包括多个(Nof_reg
file
)寄存器的寄存器堆来优化模块中函数S
i
(i>0)的寄存器资源分配的方法,其特征在于,所述方法包括:在所述模块中执行过程间分析;计算所述函数S
i
使用的寄存器的数量Nof_reg
i
;将所述函数S
i
编译到最终机器代码中,其中,如果所述编译器检测到对另一个函数S
i
的调用j(j<>i),则所述编译器将调用指令保留为伪指令Callsite
ij
;对于每个Callsite
ij
,将一个或多个被调用函数S
k
(k<>i)确定为Calltarget
ijk
;计算所述函数S
i
在Callsite
ij
处使用的活性寄存器的最大数量maxRegIndex
ij
,并计算RegIndexForRelIndex
ij
=maxRegIndex
ij
+1;对于每个Callsite
ij
和每个Calltarget
ijk
,将所述调用指令扩展到所述最终机器代码,以:读取所述函数S
i
的相对索引Rel_Index
i
的值,并计算所述函数Calltarget
ijk
的总和Rel_Index
i
+RegIndexForRelIndex
ij
+Nof_reg
k
;将所述计算到的总和与Nof_reg
file
进行比较,其中,如果所述计算到的总和小于或等于Nof_reg
file
,则计算并设置传递到Callsite
ij
处的每个Calltarget
ijk
的相对索引Rel_Index
ijk
,以供Calltarget
ijk
用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;否则,计算并从所述寄存器堆中溢出寄存器,计算并设置关联的相对索引Rel_Index
ijk
,其中,所述相对索引解释说明所述溢出的寄存器,并传递到Callsite
ij
处的每个Calltarget
ijk
,以供Calltarget
ijk
用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;重复对所述模块中的所有函数S
i
进行计算、编译、确定、计算、读取、比较、计算和溢出和设置。2.根据权利要求1所述的方法,其特征在于,所述函数S
i
是在图形处理单元(Graphical Processing Unit,GPU)中执行光线跟踪的着色器函数。3.根据权利要求1或2所述的方法,其特征在于,所述在所述模块中执行过程间分析包括:对(i)函数S
i
之间的调用方
‑
被调用方关系或(ii)函数S
k
调用目标信息中的至少一个进行分析。4.根据权利要求1至3中任一项所述的方法,其特征在于,所述编译器除了执行过程间分析之外,还使用画像信息。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述相对索引Rel_Index
ijk
是通过将所述相对索引写入Calltarget
ijk
的寄存器R0来传递的。6.根据权利要求1至5中任一项所述的方法,其特征在于,所述相对索引Rel_Index
ijk
是通过将所述相对索引写入不属于所述寄存器堆的处理器寄存器,并通过Calltarget
ijk
在所述寄存器中提取所述相对索引来传递到Calltarget
ijk
。7.根据权利要求3所述的方法,其特征在于,当在所述模块中执行过程间分析包括对所述函数S
i
之间的调用方
‑
被调用方关系进行分析时,所述计算所述函数S
i
使用的寄存器的数量Nof_reg
i
通过以下步骤执行:
计算所述函数S
i
中的每个叶子函数的Nof_reg
i
;对于每个叶子函数,迭代地计算与所述叶子函数存在调用方
‑
被调用方关系的所述函数S
i
中的沿调用链向上移动的每个函数的Nof_reg
i
。8.根据权利要求3所述的方法,其特征在于,当在所述模块中执行过程间分析包括对函数S
k
调用目标信息进行分析时,所述计算所述函数S
i
使用的寄存器的数量Nof_reg
i
是按需执行的,如果Callsite
ij
的调用目标信息未知,则所述编译器返回Nof_reg
i
作为Nof_reg
file
。9.根据权利要求1至8中任一项所述的方法,其特征在于,在所述计算到的总和小于或等于Nof_reg
file
的情况下,所述计算并设置传递到所述Callsite
ij
处的每个Calltarget
ijk
的相对索引Rel_Index
ijk
包括:将所述调用指令扩展到所述最终机器代码,以:计算:Rel_Index
ijk
=R0+RegIndexForRelIndex
ij
,其中,R0保存函数S
i
的Rel_Index
i
;将所述值Rel_Index
ijk
存储在以RegIndexForRelIndex
ij
为索引的寄存器R
RegIndexForRelIndexij
中;设置:Rel_Index
k
=R
RegIndexForRelIndexij
;调用S
k
;计算:R0=R0
–
R
RegIndexForRelIndexij
;设置:Rel_Index
i
=R0。10.根据权利要求1至9中任一项所述的方法,其特征在于,在所述计算到的总和大于Nof_reg
file
的情况下,所述计算并设置传递到Callsite
ij
处的每个Calltarget
ijk
的相对索引Rel_Index
ijk
包括:将所述调用指令扩展到所述最终机器代码,以:计算从所述寄存器堆溢出的寄存器的数量NSpill
ij
:NSpill
ij
=(Nof_reg
file
–
(R0+RegIndexForRelIndex
ij
+Nof_reg
k
);设置:Rel_Index
i
=Rel_Index
ijk
;溢出寄存器R0至R
NSpillij
–1;将Rel_Index
ijk
存储在R0中,并将(RegIndexForRelIndex
ij
–
NSp...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。