[发明专利]优化线程栈存储器的管理的系统、方法和计算机程序产品无效
申请号: | 201310675015.3 | 申请日: | 2013-12-11 |
公开(公告)号: | CN103870242A | 公开(公告)日: | 2014-06-18 |
发明(设计)人: | 阿德里安娜·玛丽亚·苏斯内亚;维诺德·格罗弗;肖恩·扬孙·李 | 申请(专利权)人: | 辉达公司 |
主分类号: | G06F9/30 | 分类号: | G06F9/30 |
代理公司: | 北京市磐华律师事务所 11336 | 代理人: | 谢栒;魏宁 |
地址: | 美国加利*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 优化 线程 存储器 管理 系统 方法 计算机 程序 产品 | ||
技术领域
本发明涉及编译器,并且更具体地,涉及存储器分配中的优化。
背景技术
可用于程序的执行的本地存储器是系统架构中的重要资源。该资源的适当管理对于程序的高效执行是至关重要的。理想地,在程序的执行期间,仅分配包括用于当前指令和未来指令的数据的存储器,而包含使用在先前被执行的指令中的数据的任何存储器被解除分配并被返回到自由存储器池。可由程序设计员来管理某一存储器,诸如通过在采用C++所写的程序中使用malloc和free指令以明确地分配和释放存储器块。
然而,就线程栈存储器(即充当后进先出(LIFO)队列的分配给程序线程的存储器的一部分)而言,程序设计员典型地不管理线程栈存储器。相反,线程栈存储器随程序执行而动态地得以分配。当前编译器通常不解决对于线程栈存储器的高效管理的优化。因此,存在对于解决该问题和/或与现有技术相关联的其他问题的需要。
发明内容
公开了用于优化线程栈存储器分配的系统、方法和计算机程序产品。方法包括以下步骤:接收用于程序的源代码,将源代码转译成中间表示,分析中间表示以标识可使用线程栈存储器中的第一所分配存储器空间的至少两个对象,以及通过以对至少两个对象中的第二对象的引用替换对至少两个对象中的第一对象的引用来修改中间表示。
附图说明
图1示出根据一个实施例的、用于优化线程栈存储器的分配的方法的流程图;
图2示出根据一个实施例的、用于优化线程栈存储器的分配的系统;
图3A示出根据一个实施例的、用于示范性程序的源代码;
图3B示出根据一个实施例的、与图3A的示范性程序相对应的中间表示;
图3C示出根据一个实施例的、是图3B的中间表示的经修改版本的中间表示;
图4示出根据一个实施例的、用于分析中间表示以确定哪些对象可以被分配到线程栈存储器中的相同的存储器空间的方法的流程图;
图5示出根据一个实施例的并行处理单元;
图6示出根据一个实施例的、图5的流多处理器;以及
图7示出在其中可实现各先前实施例的各架构和/或功能性的示例性系统。
具体实施方式
一些常规编译器通过实施数据流分析和将程序指令以使得某些寄存器可以被重新用来在程序执行中的不同时刻存储不同的值的方式进行排序,而在一定程度上优化寄存器的分配。编译器典型地将源代码(例如采用诸如C++的高级语言所写的程序)转译成中间表示(IR),该IR是表示程序的意义(包括执行次序)的数据结构。IR可以是用于抽象机器的中间语言。IR在生成要由处理器执行的机器代码之前使编译器能够实施数据流分析和重新排列程序的次序。
上文关于寄存器分配所描述的优化不能以相同方式应用到线程栈中的较大存储器结构。在线程栈中所分配的对象的大小可以变化。相反,寄存器具有定义明确的大小,诸如32位。当包括在程序中的指令将值存储在寄存器中时,值必需覆写先前分配到该寄存器的所有数据。线程栈存储器中的对象的表现不同。当值被存储在对象的元素诸如数组的一个条目中时,值覆写先前被存储在该条目中的数据。然而,对象的其它条目可能仍然是有效的并且分配给先前被存储在对象中的数据。尝试跟踪线程栈中的每个条目的数据流分析将变得非常复杂并且本将能够达到的优化可能无效。
下文所描述的算法实施一个不同类型的数据流分析,其跟踪分配到线程栈存储器的对象(即配栈对象(stack allocated object))在程序的不同部分是否是“活的”。下面的定义贯穿本公开而使用。在本描述的上下文中,如果存储在对象中的数据潜在地由当前指令或未来指令所需要,那么对象在程序中的某个点(即指令)处是活的。对象的def是将数据存储在对象中的指令。对象的def的示例包括存储指令、在指令的左边(LHS)具有指向对象的变量的指令等。指令不需要覆写分配给对象的整个存储器,而仅需要将数据写入对象的一部分中。针对对象的存储器的分配不是对象的def(因为对象中的数据未被初始化)。对象的use是使用具有对配栈对象的访问权的变量的指令。对象的use的示例包括加载指令、涉及指向对象的指针的二进制操作等。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于辉达公司,未经辉达公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310675015.3/2.html,转载请声明来源钻瓜专利网。