[发明专利]用于函数调用中可重复使用和相对索引的寄存器资源分配的方法和装置在审
申请号: | 202180054297.8 | 申请日: | 2021-05-20 |
公开(公告)号: | CN116113927A | 公开(公告)日: | 2023-05-12 |
发明(设计)人: | 罗燕;艾哈迈德·穆罕默德·埃尔沙菲·穆罕默德·埃尔坦塔维;泰勒·布莱斯·诺维基 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 函数 调用 重复使用 相对 索引 寄存器 资源 分配 方法 装置 | ||
1.一种通过编译器使用包括多个(Nof_regfile)寄存器的寄存器堆来优化模块中函数Si(i0)的寄存器资源分配的方法,其特征在于,所述方法包括:
在所述模块中执行过程间分析;
计算所述函数Si使用的寄存器的数量Nof_regi;
将所述函数Si编译到最终机器代码中,其中,如果所述编译器检测到对另一个函数Si的调用j(ji),则所述编译器将调用指令保留为伪指令Callsiteij;
对于每个Callsiteij,
将一个或多个被调用函数Sk(ki)确定为Calltargetijk;
计算所述函数Si在Callsiteij处使用的活性寄存器的最大数量maxRegIndexij,并计算RegIndexForRelIndexij=maxRegIndexij+1;
对于每个Callsiteij和每个Calltargetijk,将所述调用指令扩展到所述最终机器代码,以:
读取所述函数Si的相对索引Rel_Indexi的值,并计算所述函数Calltargetijk的总和Rel_Indexi+RegIndexForRelIndexij+Nof_regk;
将所述计算到的总和与Nof_regfile进行比较,其中,
如果所述计算到的总和小于或等于Nof_regfile,则计算并设置传递到Callsiteij处的每个Calltargetijk的相对索引Rel_Indexijk,以供Calltargetijk用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;
否则,计算并从所述寄存器堆中溢出寄存器,计算并设置关联的相对索引Rel_Indexijk,其中,所述相对索引解释说明所述溢出的寄存器,并传递到Callsiteij处的每个Calltargetijk,以供Calltargetijk用作通过所述寄存器堆的可用部分来运行的寄存器偏移量;
重复对所述模块中的所有函数Si进行计算、编译、确定、计算、读取、比较、计算和溢出和设置。
2.根据权利要求1所述的方法,其特征在于,所述函数Si是在图形处理单元(GraphicalProcessing Unit,GPU)中执行光线跟踪的着色器函数。
3.根据权利要求1或2所述的方法,其特征在于,所述在所述模块中执行过程间分析包括:对(i)函数Si之间的调用方-被调用方关系或(ii)函数Sk调用目标信息中的至少一个进行分析。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述编译器除了执行过程间分析之外,还使用画像信息。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述相对索引Rel_Indexijk是通过将所述相对索引写入Calltargetijk的寄存器R0来传递的。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述相对索引Rel_Indexijk是通过将所述相对索引写入不属于所述寄存器堆的处理器寄存器,并通过Calltargetijk在所述寄存器中提取所述相对索引来传递到Calltargetijk。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202180054297.8/1.html,转载请声明来源钻瓜专利网。