CN102110052A - 一种程序行为动态剖析的并行加速方法 - Google Patents
一种程序行为动态剖析的并行加速方法 Download PDFInfo
- Publication number
- CN102110052A CN102110052A CN2011100509272A CN201110050927A CN102110052A CN 102110052 A CN102110052 A CN 102110052A CN 2011100509272 A CN2011100509272 A CN 2011100509272A CN 201110050927 A CN201110050927 A CN 201110050927A CN 102110052 A CN102110052 A CN 102110052A
- Authority
- CN
- China
- Prior art keywords
- burst
- program
- analyzed
- thread
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种程序行为动态剖析的并行加速方法,首先捕获被分析程序,依据资源和负载状态生成被分析程序的各线程的分片;然后对各分片进行分析代码插桩;接着将插桩后的分片分派到指定处理器核与被分析线程并发执行;最后对执行结束的分片的执行结果进行归约处理,依据归约处理结果获知程序行为信息。本发明利用闲置的计算资源收集程序的行为信息,加速了程序的动态剖析过程。
Description
技术领域
本发明属于程序行为动态剖析领域,具体涉及一种多线程程序(主要针对基于共享内存体系结构的多线程编程模型,例如基于OpenMP和Intel TBB等编程模型的多线程程序)行为动态剖析的并行加速方法,适用于程序的动态剖析、动态插桩、以及利用多核进行并行加速等的研究。
背景技术
程序行为是指程序在CPU上执行过程所表现的一系列特性,例如缓存(cache)缺失率、分支预测信息、程序内存使用量和运行时间、及多线程间的同步和通信等。理解程序的动态行为特征对于体系结构设计、编译器优化、程序的性能和瓶颈分析具有非常重要的作用。
随着处理器频率的不断提高,制造工艺尺寸的不断降低,处理器面临着功耗和发热控制瓶颈,使得很难单纯依靠提高处理器频率来提高处理器性能。处理器开始朝着多核多线程的方向发展,片上多处理器(Chip Multiprocessor)以及同时多线程技术(Simultaneous Multi-Threading)逐渐成为主流的计算平台。硬件支持的核心和线程数量的不断增加,使得多线程程序设计逐渐成为主流编程模型,但由于多线程程序设计固有的复杂性,例如任务分解、死锁、竞争以及多线程程序执行的不确定性,使得设计编写高效的多线程程序是件艰巨的工作,这就急需能对多线程程序进行高效剖析的方法。另一方面,软件工程思想和软件设计技术的不断发展,为提高设计灵活性和***的动态可配置性,通常引人越来越多的间接层次,例如虚拟机、中间件以及OPENMP之类的编程模型,间接层次的引入简化了应用程序的开发,但也引入了抽象和复杂性,因此带来了一定的开销。软件开发人员需要更高效的、更透明的和易用的调试和分析工具,来了解软件的动态行为和发现软件的缺陷及性能瓶颈,保证软件的可靠性和缩短软件开发和测试过程。此外,理解程序的动态行为特征对于体系结构设计和编译器优化也具有非常重要的作用。体系结构设计者经常需要利用程序的动态行为信息优化***的体系结构设计和***仿真及模拟;编译器设计者可以利用程序执行时信息优化代码生成和自动并行化。
目前对程序进行剖析(profiling)主要有两种方法:一是基于硬件计数器(Hardware Performance Counter)的技术;二是基于软件的动态插桩(Dynamic Instrumentation)技术。基于硬件计数器的剖析技术,通常开销低但收集数据比较粗糙。基于插装的性能剖析技术,通常能收集详细准确的数据而且灵活可定制性强,基于动态插装可以构建cache建模,容错分析,内存泄露等工具,但引入的额外开销较高,主流动态插桩工具,例如Pin、DynamoRIO和Valgrind,在做简单的基本块计数统计时,被分析程序插桩后执行时间为不插桩时执行时间的2.5倍以上,如果对程序做复杂的剖析,性能会下降的更多,例如cache模拟时,Valgrind通常比本地(native)执行时慢上100多倍。一般来说,好的剖析工具具有两个特征:一是收集尽可能多和准确的数据;二是具有较低的开销。但这两者在实现中却是矛盾的,收集全而准确的性能数据通常意味着高的开销,反之亦然。
本发明针对剖析工具对收集数据准确性和剖析开销的矛盾,以及多线程程序开发者对多线程程序行为高效动态剖析的迫切需求与动态插桩开销很大的矛盾,提出利用多核处理器的闲置资源,对动态插桩后的程序进行分割并行执行,从而达到加快程序行为动态剖析的目的,同时能平衡数据完整准确性和剖析开销,使对长时间运行程序进行复杂剖析成为可能。
发明内容
本发明的目的是提供一种多线程程序行为动态剖析的并行加速方法,加快了程序行为剖析速度。
一种程序行为动态剖析的并行加速方法,其步骤为:
(1)捕获被分析程序;
(2)生成被分析程序的各线程的分片;
(3)对各分片进行分析代码插桩;
(4)将插桩后的分片分派到指定处理器核与被分析程序并发执行;
(5)对执行结束的分片的执行结果进行归约处理,依据归约处理结果获知程序行为信息。
所述步骤(2)具体为:
(21)对被分析程序的各线程分别采样,并向各线程发送对应采样信号;
(22)线程收到采样信号后,判断CPU负载是否小于预定负载阀值,若是,进入步骤(23),否则,进入步骤(24);
(23)当***当前执行的分片数小于预定分片阀值时,直接生成收到采样信号的线程的一个分片,否则,结束执行超时或阻塞的分片,再生成收到采样信号的线程的一个分片,进入步骤(25);
(24)当***当前执行的分片数小于预定阀值时,进入步骤(25),否则,结束执行超时或处于阻塞状态的分片,进入步骤(25);
(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_TOT_INS硬件计数器事件并设定阈值为5M条指令进采样;CPU负载=当前执行的线程数/CPU核心数,负载的阀值设为1;分片数的阀值设为CPU核心数减去被分析程序的线程数。
(3)生成分片和执行
在接收到第一阶段采样信号时,监视器对应用程序进行插桩,***本发明方法的检查点代码。当检查点代码被执行时,其执行第二阶段的采样,监控器根据CPU负载和当前分片数,决定是否生成一个分片,并采取和执行后续相关操作。
(4)分片调度
在本实例中,分片调度策略初始化为采用操作***的默认调度策略,也即分片产生后由操作***去调度。
(5)并行执行与插桩
分片与被分析线程并行执行,并在执行过程中***基本块统计代码。
(6)结果统计分析与输出
在本实例中,直接归并和汇总各分片的数据,输出分析和统计结果。
以上所述,仅为本发明最佳的具体实现方式,本发明的实现方法并不局限于此,任何在本发明领域内不脱离本发明精神下的改变,都应涵盖在本发明范围内。
Claims (4)
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所述的并行加速方法,其特征在于,所述预定分片阀值为处理器核数减去被分析程序的线程数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100509272A CN102110052A (zh) | 2011-03-03 | 2011-03-03 | 一种程序行为动态剖析的并行加速方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100509272A CN102110052A (zh) | 2011-03-03 | 2011-03-03 | 一种程序行为动态剖析的并行加速方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102110052A true CN102110052A (zh) | 2011-06-29 |
Family
ID=44174218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011100509272A Pending CN102110052A (zh) | 2011-03-03 | 2011-03-03 | 一种程序行为动态剖析的并行加速方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102110052A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929581A (zh) * | 2012-10-18 | 2013-02-13 | 无锡江南计算技术研究所 | 代码处理的方法及其装置 |
CN104881840A (zh) * | 2015-05-11 | 2015-09-02 | 华中科技大学 | 一种基于图数据处理***的数据并行访问方法 |
CN105183642A (zh) * | 2015-08-18 | 2015-12-23 | 中国人民解放军信息工程大学 | 基于插桩的程序行为获取及结构分析方法 |
CN106257425A (zh) * | 2016-07-20 | 2016-12-28 | 东南大学 | 一种基于并发控制流图的Java并发程序路径剖析方法 |
CN107391124A (zh) * | 2017-06-30 | 2017-11-24 | 东南大学 | 一种基于黄金分割搜索及软件执行轨迹的条件切片方法 |
CN112363860A (zh) * | 2020-11-11 | 2021-02-12 | 中国建设银行股份有限公司 | 一种批处理作业异常中断检测方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1949185A (zh) * | 2005-10-13 | 2007-04-18 | 同济大学 | 异构环境下支持多语言多平台的并行调试及性能分析方法 |
-
2011
- 2011-03-03 CN CN2011100509272A patent/CN102110052A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1949185A (zh) * | 2005-10-13 | 2007-04-18 | 同济大学 | 异构环境下支持多语言多平台的并行调试及性能分析方法 |
Non-Patent Citations (3)
Title |
---|
张伟富: "基于多核的动态剖析加速方法研究", 《华中科技大学硕士学位论文》 * |
沈立等: "多核平台下应用程序的动态优化", 《计算机科学与探索》 * |
马桂杰等: "基于插桩技术的并行程序性能分析方法设计和实现", 《计算机应用研究》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929581A (zh) * | 2012-10-18 | 2013-02-13 | 无锡江南计算技术研究所 | 代码处理的方法及其装置 |
CN104881840A (zh) * | 2015-05-11 | 2015-09-02 | 华中科技大学 | 一种基于图数据处理***的数据并行访问方法 |
CN104881840B (zh) * | 2015-05-11 | 2017-10-31 | 华中科技大学 | 一种基于图数据处理***的数据并行访问方法 |
CN105183642A (zh) * | 2015-08-18 | 2015-12-23 | 中国人民解放军信息工程大学 | 基于插桩的程序行为获取及结构分析方法 |
CN105183642B (zh) * | 2015-08-18 | 2018-03-13 | 中国人民解放军信息工程大学 | 基于插桩的程序行为获取及结构分析方法 |
CN106257425A (zh) * | 2016-07-20 | 2016-12-28 | 东南大学 | 一种基于并发控制流图的Java并发程序路径剖析方法 |
CN106257425B (zh) * | 2016-07-20 | 2019-04-09 | 东南大学 | 一种基于并发控制流图的Java并发程序路径剖析方法 |
CN107391124A (zh) * | 2017-06-30 | 2017-11-24 | 东南大学 | 一种基于黄金分割搜索及软件执行轨迹的条件切片方法 |
CN107391124B (zh) * | 2017-06-30 | 2020-06-16 | 东南大学 | 一种基于黄金分割搜索及软件执行轨迹的条件切片方法 |
CN112363860A (zh) * | 2020-11-11 | 2021-02-12 | 中国建设银行股份有限公司 | 一种批处理作业异常中断检测方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Liang et al. | Timing analysis of concurrent programs running on shared cache multi-cores | |
US8595701B2 (en) | Symbolic execution and test generation for GPU programs | |
Argollo et al. | COTSon: infrastructure for full system simulation | |
CN102110052A (zh) | 一种程序行为动态剖析的并行加速方法 | |
Kim et al. | Predicting potential speedup of serial code via lightweight profiling and emulations with memory performance model | |
WO2012096849A2 (en) | System and method for controlling excessive parallelism in multiprocessor systems | |
Liu et al. | Pinpointing data locality bottlenecks with low overhead | |
Maas et al. | GPUs as an opportunity for offloading garbage collection | |
Feldman et al. | Extending LDMS to enable performance monitoring in multi-core applications | |
Chatzopoulos et al. | Estima: Extrapolating scalability of in-memory applications | |
Schulz et al. | Owl: next generation system monitoring | |
Cho et al. | Practical lock/unlock pairing for concurrent programs | |
Hofer et al. | Lightweight Java profiling with partial safepoints and incremental stack tracing | |
Luo et al. | Compositional model of coherence and NUMA effects for optimizing thread and data placement | |
Nilakantan et al. | Platform-independent analysis of function-level communication in workloads | |
Liu et al. | Photon: A fine-grained sampled simulation methodology for GPU workloads | |
Lloyd et al. | Automated GPU grid geometry selection for OpenMP kernels | |
Yuan et al. | Automatic enhanced CDFG generation based on runtime instrumentation | |
Shukla et al. | Investigating policies for performance of multi-core processors | |
Herbegue et al. | Formal architecture specification for time analysis | |
Mijaković et al. | Specification of periscope tuning framework plugins | |
Grass et al. | Sampled simulation of task-based programs | |
Tripp et al. | Tightfit: Adaptive parallelization with foresight | |
Acosta et al. | XFeatur: Hardware feature extraction for DNN auto-tuning | |
Lazarescu et al. | Energy-aware parallelization toolset and flow for C code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110629 |