一种程序行为动态剖析的并行加速方法

文档序号:6355350阅读:428来源:国知局
专利名称:一种程序行为动态剖析的并行加速方法
技术领域
本发明属于程序行为动态剖析领域,具体涉及一种多线程程序(主要针对基于共 享内存体系结构的多线程编程模型,例如基于OpenMP和^tel TBB等编程模型的多线程程 序)行为动态剖析的并行加速方法,适用于程序的动态剖析、动态插桩、以及利用多核进行 并行加速等的研究。
背景技术
程序行为是指程序在CPU上执行过程所表现的一系列特性,例如缓存(cache)缺 失率、分支预测信息、程序内存使用量和运行时间、及多线程间的同步和通信等。理解程序 的动态行为特征对于体系结构设计、编译器优化、程序的性能和瓶颈分析具有非常重要的 作用。随着处理器频率的不断提高,制造工艺尺寸的不断降低,处理器面临着功耗和 发热控制瓶颈,使得很难单纯依靠提高处理器频率来提高处理器性能。处理器开始朝着 多核多线程的方向发展,片上多处理器(Chip Multiprocessor)以及同时多线程技术 (Simultaneous Multi-Threading)逐渐成为主流的计算平台。硬件支持的核心和线程数量 的不断增加,使得多线程程序设计逐渐成为主流编程模型,但由于多线程程序设计固有的 复杂性,例如任务分解、死锁、竞争以及多线程程序执行的不确定性,使得设计编写高效的 多线程程序是件艰巨的工作,这就急需能对多线程程序进行高效剖析的方法。另一方面,软 件工程思想和软件设计技术的不断发展,为提高设计灵活性和系统的动态可配置性,通常 引人越来越多的间接层次,例如虚拟机、中间件以及OPENMP之类的编程模型,间接层次的 引入简化了应用程序的开发,但也引入了抽象和复杂性,因此带来了一定的开销。软件开发 人员需要更高效的、更透明的和易用的调试和分析工具,来了解软件的动态行为和发现软 件的缺陷及性能瓶颈,保证软件的可靠性和缩短软件开发和测试过程。此外,理解程序的动 态行为特征对于体系结构设计和编译器优化也具有非常重要的作用。体系结构设计者经常 需要利用程序的动态行为信息优化系统的体系结构设计和系统仿真及模拟;编译器设计者 可以利用程序执行时信息优化代码生成和自动并行化。目前对程序进行剖析(profiling)主要有两种方法一是基于硬件计数 (Hardware Performance Counter)白勺 7^ ; 二 ■于软 ^f牛白勺动 Hi (Dynamic
Instrumentation)技术。基于硬件计数器的剖析技术,通常开销低但收集数据比较粗糙。 基于插装的性能剖析技术,通常能收集详细准确的数据而且灵活可定制性强,基于动态插 装可以构建cache建模,容错分析,内存泄露等工具,但引入的额外开销较高,主流动态插 桩工具,例如PiruDynam0RIO和Valgrind,在做简单的基本块计数统计时,被分析程序插桩 后执行时间为不插桩时执行时间的2. 5倍以上,如果对程序做复杂的剖析,性能会下降的 更多,例如cache模拟时,Valgrind通常比本地(native)执行时慢上100多倍。一般来说, 好的剖析工具具有两个特征一是收集尽可能多和准确的数据;二是具有较低的开销。但 这两者在实现中却是矛盾的,收集全而准确的性能数据通常意味着高的开销,反之亦然。
本发明针对剖析工具对收集数据准确性和剖析开销的矛盾,以及多线程程序开发 者对多线程程序行为高效动态剖析的迫切需求与动态插桩开销很大的矛盾,提出利用多核 处理器的闲置资源,对动态插桩后的程序进行分割并行执行,从而达到加快程序行为动态 剖析的目的,同时能平衡数据完整准确性和剖析开销,使对长时间运行程序进行复杂剖析 成为可能。

发明内容
本发明的目的是提供一种多线程程序行为动态剖析的并行加速方法,加快了程序 行为剖析速度。—种程序行为动态剖析的并行加速方法,其步骤为(1)捕获被分析程序;(2)生成被分析程序的各线程的分片;(3)对各分片进行分析代码插桩;(4)将插桩后的分片分派到指定处理器核与被分析程序并发执行;(5)对执行结束的分片的执行结果进行归约处理,依据归约处理结果获知程序行 为信息。所述步骤O)具体为(21)对被分析程序的各线程分别采样,并向各线程发送对应采样信号;(22)线程收到采样信号后,判断CPU负载是否小于预定负载阀值,若是,进入步骤 (23),否则,进入步骤(24);(23)当系统当前执行的分片数小于预定分片阀值时,直接生成收到采样信号的 线程的一个分片,否则,结束执行超时或阻塞的分片,再生成收到采样信号的线程的一个分 片,进入步骤05);(24)当系统当前执行的分片数小于预定阀值时,进入步骤(25),否则,结束执行 超时或处于阻塞状态的分片,进入步骤05);(25)返回步骤(22),直到被分析程序结束。所述预定分片阀值取值为大于或等于1。所述预定分片阀值为处理器核数减去被分析程序的线程数。本发明的技术效果体现在本发明针对各线程生成分片,将各分片插桩后分派到 指定处理器核与被分析线程并发执行,使得被分析程序的运行不受插桩影响,加快程序动 态剖析的速度。进一步的,本发明采用两阶段采样来驱动整个系统的插桩和并行化工作。在 第一阶段采样中,当采样条件发生时插入本发明方法的检查代码;在第二阶段采样中,检查 代码检测第二阶段采样条件,当采样条件满足时创建分片并对分片插入分析代码。分片与 被分析程序在多核环境下并行的执行,从而实现分析代码与被分析程序的解耦和并行化。 对分片依据根据采样信号和CPU负载生成的分片进行插桩而不是原线程进行插桩,其实质 是利用多核处理器的闲置资源,对动态插桩后的程序进行分割并行执行,从而达到加快程 序行为动态剖析的目的,同时能平衡数据完整准确性和剖析开销,使对长时间运行程序进 行复杂剖析成为可能。本发明具有以下特点和优点(1)具有较好的扩展性和加速比,以及精确的数据采样和数据分析能力,并能直观地反映评测结果;(2)能平衡数据完整准确性和剖析开销, 使对长时间运行程序进行复杂剖析成为可能;(3)提供易于使用的编程API,用户使用API 能获得并行加速和基于硬件计数器的采样功能;(4)允许用户定义自己数据处理和分析函 数,对并行加速框架进行扩展。


图1为本发明的流程图;图2为本发明的体系结构图;图3为本发明的运行过程示意图。
具体实施例方式下面结合附图和实例对本发明进行详细说明。如图1所示,本发明方法的步骤为(1)开始(2)系统启动后,当被分析程序准备执行时,监控器捕获到被分析程序开始执行事 件,并将client (即待插入的代码)和自身加载进被分析程序的地址空间,并初始化CPU相 关信息(例如核心等)、分片调度和出错处理策略。(3)初始化采样策略,并设定采样事件、相关阈值(CPU负载使用当前执行的线程 数与CPU核心数的比值表示,用户可以指定负载阈值为大于或等于1的一个值,默认负载阈 值为1 ;分片阈值可以为用户指定,默认设置为CPU核心数减去被分析程序的线程数)以及 注册采样处理函数,启动采样。(4)在接收到第一阶段采样信号时,监视器对应用程序进行插桩,插入检查点代码。(5)当检查点代码被执行时,其执行第二阶段的采样。监控器根据CPU的负载和系 统当前执行的分片数进行判断若CPU负载小于预定负载阀值,当系统当前执行的分片数小于预定阀值时,生成 一个分片,对分片进行插桩执行。当系统当前执行的分片数大于或等于预定分片阀值时,首 先结束执行超时的或一直处于阻塞状态的分片,然后再生成一个新的分片;若CPU负载大于或等于预定负载阀值,当系统当前执行的分片数小于预定分片阀 值时,忽略该采样信号,当系统当前执行的分片数大于或等于预定阀值时,结束执行超时的 或一直处于阻塞状态的分片。(6)产生分片后,调度器根据CPU各处理器核心的利用情况和既定的调度策略对 分片进行调度和分派。(7)分片被分派到指定核心后与被分析线程并发执行。当分片时间执行完时,分片 结束并根据用户定义的归并处理函数,对分片数据进行规约处理。若分片执行过程出现错 误,则根据设定的策略进行重新执行或丢弃分片。(8)重复步骤(2) - (7),直到被分析程序结束。(9)当被分析程序结束时,监视器捕获到被分析程序结束的事件后,释放相应的资 源,真正结束动态剖析过程。
实例本发明的运行过程参考图3,下面用一个实例来详细说明(1)资源配置及被分析程序信息在一个四核的Linux系统上,运行一个具有两个线程的被分析程序。插桩代码为 基本块计数函数,对程序执行的基本块数目进行统计。(2)初始化在被分析程序准备执行时,监控器将插桩代码和自身加载到被分析程序的地址空 间,执行初始化操作。在本实例中,具体初始化了以下信息采样策略为使用PAPI_T0T_INS 硬件计数器事件并设定阈值为5M条指令进采样;CPU负载=当前执行的线程数/CPU核心 数,负载的阀值设为1 ;分片数的阀值设为CPU核心数减去被分析程序的线程数。(3)生成分片和执行在接收到第一阶段采样信号时,监视器对应用程序进行插桩,插入本发明方法的 检查点代码。当检查点代码被执行时,其执行第二阶段的采样,监控器根据CPU负载和当前 分片数,决定是否生成一个分片,并采取和执行后续相关操作。(4)分片调度在本实例中,分片调度策略初始化为采用操作系统的默认调度策略,也即分片产 生后由操作系统去调度。(5)并行执行与插桩分片与被分析线程并行执行,并在执行过程中插入基本块统计代码。(6)结果统计分析与输出在本实例中,直接归并和汇总各分片的数据,输出分析和统计结果。以上所述,仅为本发明最佳的具体实现方式,本发明的实现方法并不局限于此,任 何在本发明领域内不脱离本发明精神下的改变,都应涵盖在本发明范围内。
权利要求
1.一种程序行为动态剖析的并行加速方法,其步骤为 (1)捕获被分析程序;(2)生成被分析程序的各线程的分片;(3)对各分片进行分析代码插桩;(4)将插桩后的分片分派到指定处理器核与被分析程序并发执行;(5)对执行结束的分片的执行结果进行归约处理,依据归约处理结果获知程序行为信肩、ο
2.根据权利要求1所述的并行加速方法,其特征在于,所述步骤(2)具体为(21)对被分析程序的各线程分别采样,并向各线程发送对应采样信号;(22)线程收到采样信号后,判断CPU负载是否小于预定负载阀值,若是,进入步骤 (23),否则,进入步骤(24);(23)当系统当前执行的分片数小于预定分片阀值时,直接生成收到采样信号的线程的 一个分片,否则,结束执行超时或阻塞的分片,再生成收到采样信号的线程的一个分片,进 入步骤(25);(24)当系统当前执行的分片数小于预定阀值时,进入步骤(25),否则,结束执行超时 或处于阻塞状态的分片,进入步骤(25);(25)返回步骤(22),直到被分析程序结束。
3.根据权利要求2所述的并行加速方法,其特征在于,所述预定分片阀值取值为大于 或等于1。
4.根据权利要求2所述的并行加速方法,其特征在于,所述预定分片阀值为处理器核 数减去被分析程序的线程数。
全文摘要
本发明公开了一种程序行为动态剖析的并行加速方法,首先捕获被分析程序,依据资源和负载状态生成被分析程序的各线程的分片;然后对各分片进行分析代码插桩;接着将插桩后的分片分派到指定处理器核与被分析线程并发执行;最后对执行结束的分片的执行结果进行归约处理,依据归约处理结果获知程序行为信息。本发明利用闲置的计算资源收集程序的行为信息,加速了程序的动态剖析过程。
文档编号G06F9/46GK102110052SQ20111005092
公开日2011年6月29日 申请日期2011年3月3日 优先权日2011年3月3日
发明者喻之斌, 张伟富, 涂旭平, 金海 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1