[发明专利]指针分析方法及装置在审
申请号: | 201310589292.2 | 申请日: | 2013-11-20 |
公开(公告)号: | CN104657257A | 公开(公告)日: | 2015-05-27 |
发明(设计)人: | 陈聪明;霍玮;李丰;冯晓兵 | 申请(专利权)人: | 华为技术有限公司;中国科学院计算技术研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京同立钧成知识产权代理有限公司 11205 | 代理人: | 刘芳 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 指针 分析 方法 装置 | ||
技术领域
本发明实施例涉及计算机技术,尤其涉及一种指针分析方法及装置。
背景技术
随着计算机的普及,计算机软件越来越复杂,其中使用的程序语句类型也更加灵活和丰富,以通常使用的C和C++程序语句为例进行说明,程序语句中指针的使用愈加广泛。指针语句的使用是决定程序被编译优化后运行性能优良的重要因素,因此,对于程序的编译优化基于对程序语句中指针的分析。
对指针的分析一般指对该指针变量性质和指向集的分析。目前,在进行指针分析时,通常使用精度较高的流敏感上下文敏感(Flow-Sensitive and Context-Sensitive,简称为:FSCS)的分析方法,但直接使用该类方法不适用于多线程程序。一种直观的针对多线程程序的指针分析,可以通过对全局变量进行指针分析获取全局共享量对程序的并行区域内不同线程间的交互影响;具体地,分析全局共享量在各程序点的指针指向集、线程间交互指向集和当前程序语句执行结束后在指向图中新增的指向边。
现有技术中对多线程程序的语句进行的指针分析方法,只考虑到全局共享量对程序的并行区域内线程间的交互影响,因此,进行指针分析的共享量仅局限于程序中的全局共享量,使得指针分析的对象,即程序中的共享量范围缩小,降低了指针分析的精度。
发明内容
本发明实施例提供一种指针分析方法及装置,以解决现有技术中对多线程程序的指针分析仅局限于程序中的全局共享量,分析结果不全面的问题。
第一方面,本发明实施例提供一种指针分析方法,包括:
读取待分析的多线程程序中的语句信息;
根据所述程序的语句信息对所述程序进行指针分析,获得所述程序的共享信息,所述共享信息包括共享量、指针指向集和访存行为,其中,共享量包括全局共享量和局部共享量;
根据所述程序的共享信息对所述共享量进行补偿分析。
在第一方面的第一种可能实现方式中,所述根据所述程序的语句信息对所述程序进行指针分析,获得所述程序的共享信息,包括:
根据全局共享判断规则对所述程序进行分析,获得所述程序中的全局共享量;
对所述程序中每个线程进行指针分析,获得每个线程中的指针指向集、局部共享量和与所述共享量对应的访存行为。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述全局共享判断规则包括:
若变量可以被程序中至少两个线程同时访问,则所述变量为全局共享量。
根据第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述对所述程序中每个线程进行指针分析,获得每个线程中的指针指向集、局部共享量和与所述共享量对应的访存行为,包括:
对所述程序中每个线程进行指针分析,获得每个线程中的指针指向集;
根据所述全局共享量、所述指针指向集和局部共享判断规则对每个线程进行分析,获得每个线程中的局部共享量;
根据所述全局共享量、所述局部共享量和所述指针指向集对每个线程进行分析,获得与所述共享量对应的访存行为。
根据第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述局部共享判断规则包括:
若给定线程中变量可以作为所述程序中某个线程的入口参数而被其他线程访问,则所述变量为局部共享量;或者,
若给定线程中变量可以通过被全局共享量间接引用的方式而被其他线程访问,则所述变量为局部共享量;或者,
若给定线程中变量可以通过全局共享量的赋值,使得所述变量的指向集包含所述全局共享量,则所述变量为局部共享量。
根据第一方面的第三种或第四种可能的实现方式,在第五种可能的实现方式中,所述根据所述全局共享量、所述指针指向集和局部共享判断规则对每个线程进行分析,获得每个线程中的局部共享量,包括:
根据所述全局共享量、所述指针指向集和局部共享识别规则,获取每个线程中可能逃逸的局部变量;
根据所述可能逃逸的局部变量和共享传播规则,确定从所述可能逃逸的局部变量中获取的可能被其他线程使用的局部变量为局部共享量。
根据第一方面、第一方面的第一种到第五种可能的实现方式中任一种,在第六种可能的实现方式中,所述根据所述程序的共享信息对每个共享量分别进行补偿分析之前,还包括:
根据所述程序的语句信息生成并行控制流图;
根据所述并行控制流图和所述共享信息生成针对所述程序的共享量访存图SAG;
所述根据所述程序的共享信息对所述共享量进行补偿分析,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司;中国科学院计算技术研究所;,未经华为技术有限公司;中国科学院计算技术研究所;许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310589292.2/2.html,转载请声明来源钻瓜专利网。