CN104850411B - 存储系统基准评测程序生成方法及装置 - Google Patents
存储系统基准评测程序生成方法及装置 Download PDFInfo
- Publication number
- CN104850411B CN104850411B CN201510315936.8A CN201510315936A CN104850411B CN 104850411 B CN104850411 B CN 104850411B CN 201510315936 A CN201510315936 A CN 201510315936A CN 104850411 B CN104850411 B CN 104850411B
- Authority
- CN
- China
- Prior art keywords
- slice
- program
- code
- storage system
- sentence
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
提供了存储系统基准评测程序生成方法和装置,属于高性能计算性能评测领域。存储系统基准评测程序生成方法包括:从规范化后的源程序获得中间代码;识别中间代码中的切片起点;基于识别得到的切片起点进行静态程序切片;以及基于得到的各个静态程序切片生成精简代码。该方法基于程序切片技术,通过在编译器中分析数据依赖、控制依赖和通信依赖,自动抽取所有和输入输出相关的语句操作,组成一个可编译、可运行、人工可读、可移植的精简程序代码。该精简程序可忠实地反映原始应用程序的输入输出负载特征,且执行该精简程序需要更少的时间和资源,方便快速评测。对于快速评测高性能存储系统的性能、辅助存储系统设计,本精简程序生成方法十分有效。
Description
技术领域
本发明总体地涉及高性能计算集群的存储系统性能评测技术领域,更具体地涉及存储系统基准测试程序生成方法和装置。
背景技术
并行存储系统的性能评测对于存储系统架构人员、高性能程序开发人员、高性能用户都特别重要。对于大规模高性能计算程序的开发人员来说,性能评测可以帮助快速评价输入输出模式、参数;对于高性能存储系统的设计人员来说,性能评测可以指导采购、选择系统配置和调优参数;对于高性能应用程序用户来说,可以选择最优的输入输出中间件、对应用程序的内置参数进行设置。
但是高性能存储系统的性能评测是具有挑战性的工作。从存储设备、硬件缓存、系统内核和上层中间件,各层次之间的交互特别复杂,很难建立简单有效的评价模型。同时,系统的评测需要结合不同目标应用程序的具体特征,对一类程序较为友好的存储系统运行另外一类程序时,可能不能发挥最佳性能。
因此,高性能存储系统的评测需要根据目标程序的负载特征,选取合适的评测程序,设定代表性参数,进行重复多次试验综合评价。高性能存储系统性能评测的主要方法有:
·最精准的性能评测应该是选取目标应用程序直接多次运行并收集、分析性能结果,缺点是太耗费时间和资源,而不适合迭代式配置、评测、优化、配置的模式。
●与此相反,读写带宽专项项测试程序使用简单,缺点是不考虑具体应用程序的特点,只关心能达到最优性能的情况。
·采用人工合成的测试程序进行评测,通过运行参数来模拟不同应用程序的负载行为。考虑到高性能程序的负载特征多样性,设计一个具有功能多样的、具有代表性的、可配置的基准测试程序是十分困难的。
·运行大型应用程序的核心精简程序,代替原始应用程序运行,作为性能评测的参考。这种方法的优点是运行时间和占用资源都明显降低,同时又能相对准确反映原始应用的输入输出特征。
另外,这种方法也适合提供给第三方用来评测而无需担心知识产权问题。
综上,比较理想的存储系统性能评测方式是通过运行和原始程序输入输出特征完全一致的精简程序,快速、准确地评价存储系统。这里的主要挑战是:传统上生成精简程序依赖手工进行,目前没有一种自动生成此类精简程序的有效方法。手工对大型程序进行删减费时费力,而且容易出错。一般来说,由于代码结构和模块的复杂性,这类工作仅适合系统开发人员完成,普通用户难以胜任。
在高性能计算领域,一种比较流行的生成此类精简程序的方法是依靠分析、重放高性能程序的执行踪迹,合成精简程序用于评测。这种方法的显著缺点是收集执行踪迹的时间和资源开销太大、扩展性不好,而且不能适应不同参数配置的情况,比如输入输出模式、缓冲区大小和读写进程分组粒度等。另外,朴素的踪迹回放不能处理好生成评测程序的可移植性,不能适应平台配置的重要改变。
因此,迫切需要一种能够自动生成原始应用程序的精简程序的方法,以便使用这样的精简程序快速、准确地评价高性能存储系统的性能。
发明内容
(一)发明目的
本发明的目的是为了快速、准确评测高性能存储系统的性能、辅助存储系统设计。旨在提出一种自动化的评测程序生成方法,既能节省评测程序的运行时间和资源开销,又能保持较高精度,准确反应原始应用程序在高性能存储系统上面的性能。
(二)发明内容
本发明提出基于程序切片技术的此类精简程序生成方法,针对原始应用程序编译后的中间代码,通过在编译器中分析数据依赖、控制依赖、和通信依赖自动抽取所有和输入输出相关的语句操作,组成一个可编译、可运行、人工可读、可移植的精简程序。本发明建立在一个重要观察基础之上,即高性能程序读写操作的内容通常和程序的读写行为特征往往无关,而绝大部分计算和通信操作又是为了计算读写操作的内容而进行的,因而绝大部分计算和通信操作是与本发明所关注的程序的读写行为特征无关的。因此通过删除那些不相关的语句,从原始程序中生成精简程序可以有效实现本发明的目的。
根据本发明的一个方面,提供了一种计算机执行的通过对源应用程序进行精简,生成用于对存储系统进行评测的精简程序的存储系统基准评测程序生成方法,可以包括:从规范化后的源程序获得中间代码;识别中间代码中的切片起点;基于识别得到的切片起点进行静态程序切片;以及基于得到的各个静态程序切片生成精简代码。
在存储系统基准评测程序生成方法中,基于得到的各个静态程序切片生成精简代码可以包括在生成精简代码过程中进行插桩操作,由此能够在该存储系统基准评测程序被执行时统计读写操作次数、数据块大小、所需时间信息,从而生成读写带宽信息。
在存储系统基准评测程序生成方法中,在从源程序获得中间代码之前,还可以包括源代码规范化步骤,使得每一个独立的代码语句单独成行,包括将原本在一行的多条源代码语句分拆成多行连续的源代码。
在存储系统基准评测程序生成方法中,识别中间代码中的切片起点可以包括识别中间代码中的读写操作语句。
在存储系统基准评测程序生成方法中,识别中间代码中的切片起点可以包括:识别采用MPI-IO接口、POSIX接口、ADIOS接口中的任何一个的读写函数调用作为切片起点。
在存储系统基准评测程序生成方法中,所述基于识别得到的切片起点进行静态程序切片可以包括:基于识别到的每个切片起点,对程序中间代码进行迭代式静态分析,计算程序切片。
在存储系统基准评测程序生成方法中,所述基于切片起点对程序中间代码进行迭代式静态分析以计算程序切片过程可以包括:对于每个切片起点:根据数据依赖迭代式计算和该切片起点直接相关的变量和语句;根据控制依赖和通信依赖迭代式计算间接相关的变量和程序语句;以及收集所有直接相关和间接相关的语句作为程序切片。。
在存储系统基准评测程序生成方法中,根据数据依赖迭代式计算和该切片起点直接相关的变量和语句可以包括:根据不同读写函数的定义,将相关调用参数变量加入相应的初始相关变量集合,包括:1)将读写操作的数据内容变量作为无关变量,后续计算依赖时只保留包括声明、指针赋值在内相关操作;以及2)将其它所有变量视为读写行为控制变量,加入初始相关变量集合。
在存储系统基准评测程序生成方法中,基于得到的各个静态程序切片生成精简代码可以包括:记录切片后要删除的语句行号信息;基于所记录的切片后要删除的语句行号信息,从原始应用程序源代码中删除所述要删除的语句行号信息所指示的语句。
在存储系统基准评测程序生成方法中,基于得到的各个静态程序切片生成精简代码还可以包括:从原始应用程序源代码中识别并删除对应无关的计算和通信操作的语句。
存储系统基准评测程序生成方法还可以包括:代码精简时标记源程序中被删除的循环语句;以及在最终精简程序中标记位置处,插入休眠语句。
在存储系统基准评测程序生成方法中,生成精简代码还可以包括:处理精简源代码中各种兼容的语法、条件表达式、函数调用语句,以保证精简代码能够直接编译、运行。
在存储系统基准评测程序生成方法中,删除操作可以由编译器前端进行。
存储系统基准评测程序生成方法还可以包括:获得精简代码和原始程序在相同问题规模下的执行踪迹文件;对比精简代码和原始程序在相同问题规模下的执行踪迹文件,确定两者之间输入输出行为之间是否不同,当确定两者之前输入输出行为一致时,确定精简代码是正确的。
根据本发明的另一方面,提供了一种通过对源应用程序进行精简生成用于对存储系统进行评测的精简程序的存储系统基准评测程序生成装置,可以包括:中间代码获得部件,用于从源程序获得中间代码;切片起点识别部件,用于识别中间代码中的切片起点;静态程序切片部件,用于基于识别得到的切片起点进行静态程序切片;以及精简代码生成部件,用于基于得到的各个静态程序切片生成精简代码。
根据本发明的另一方面,提供了一种计算机执行的通过对源应用程序进行精简生成用于对存储系统进行评测的精简程序的存储系统基准评测程序生成方法,可以包括:从源程序获得中间代码;识别采用MPI-IO接口、POSIX接口、ADIOS接口中的任何一个的读写函数调用作为切片起点;基于识别得到的切片起点,通过分析数据依赖、控制依赖和通信依赖来进行静态程序切片;以及基于得到的各个静态程序切片生成精简代码。
(三)有益效果
本发明对比已有技术具有以下关键特征和显著优点:
1.本发明在源代码基础上自动进行数据、控制和通信的依赖性分析,进而自动化实行程序精简,无需人工干预;
2.本发明生成的精简程序主要源代码来自原始程序,保留了原始程序的结构化特征,具有极大的可读性;
3.本发明生成的精简程序可以直接编译运行,无需进行人工调试;
4.本发明生成的精简程序忠实地保留了原始应用程序的输入输出负载特征;
5.本发明生成的精简程序较之原始应用程序的执行,需要更短的执行时间和更少的资源(如内存、处理器、网络等)占用;
6.本发明生成的精简程序保留了原始程序的输入输出参数,因此可以在运行时配置原始程序一致的负载特征,较之执行踪迹分析的方法,本发明生成的精简评测程序具有很大的灵活性和可配置性。
附图说明
图1示出了根据本发明一个实施例的从原始应用程序生成精简程序的总体流程图。
图2示出了精简程序正确性验证的示例性过程的示意图。
图3示出了一个对应用程序进行切片从而生成精简程序的例子。
图4示出了根据本发明实施例的存储系统基准评测程序生成装置2000的配置框图。
具体实施方式
程序切片包括静态程序切片和动态程序切片,针对程序P中某条具体程序语句p、以及某个具体变量v,静态程序切片S包括在程序P中可能会影响在语句p处变量v取值的所有语句。程序切片开始时,定义切片标准为C=(p,v),初始切片S={p}。针对多个程序语句p1,p2,…,pn及语句中对应变量v1,v2,…,vn,定义切片标准C=({p1,p2,…,pn},{v1,v2,…,vn}),初始切片S={p1,p2,…,pn}。
通常静态程序切片通过分析程序语句之间的数据依赖和控制依赖获得,本发明面对的是并行程序,因此还需要同时分析不同进程间的通信依赖。数据所引起的依赖称为数据依赖,是现实世界的实体的属性之间的相互联系的抽象,表现为程序中变量之间相互关联,常见的数据依赖包括例如成员函数与数据成员之间的定义与使用关系。控制依赖,表示程序语句之间的相互调用,例如由一个断言语句的结果来决定另一语句是否执行和如何执行,则该另一语句在控制上依赖于该断言语句。通信依赖是指并行程序之中不同进程之间需要通信,由此引起的依赖关系。
一般来说,静态切片和动态切片的主要区别在于是否考虑程序的运行的某一次输入。前者在没有程序的输入作出假设的情况进行计算,后者依赖于一些具体测试样例和输入数据。静态切片不考虑某一次输入的具体值,因此不需要采集运行时的动态信息,可以通过静态分析完成。考虑到本发明旨在产生可配置、可移植的静态程序代码,不能依赖某一组特定的输入值,否则生成的基准程序不能输入其它数据集,因此静态切片更适合这个问题场景。至于程序切片实现中自底向上和自顶向下的方法,本发明都可以采用。程序切片还有其他分类方法,如基于数据流方程计算切片和根据依赖图关系计算切片等,只要是静态的也都可以采用。
图1示出了根据本发明一个实施例的从原始应用程序生成精简程序的总体流程图。
在步骤S1100中,编译规范化后的源程序,获得中间代码。
在一个示例中,首先进行源代码规范化步骤,使得每一个独立的代码语句单独成行。尽量让一条语句占用一行,尽量减少不必要的函数调用嵌套。这一步的主要动机是现代应用程序的源代码模块较多,函数调用图比较复杂,代码风格因为历史原因较为多变,如果不规范化会让最后删减时因为歧义太多而效率受影响。
编译程序获得中间代码。中间代码能够有效进行相关性分析。可以采用编译器本身的中间代码格式,主流编译器的中间代码层次介于程序源码和汇编代码中间。后续讨论基于中间代码进行。
考虑到程序切片中,一个函数中的返回值可能会被其他函数作为参数使用,函数之间也具有依赖关系。同时,很多编程语言(如C语言等)允许指针别名的存在。因此,精确的相关性分析(数据依赖、控制依赖和通信依赖)需要进行过程间分析。本发明后面的步骤通过分析整个程序的控制流信息进行过程间分析。S1100步骤最后,是将所有源代码文件编译成的独立的中间代码,链接成一个单一的中间代码文件。整个程序的控制流信息可以通过这个单一的文件获得,后续分析均针对这一个统一的中间代码进行。
在步骤S1200中,识别中间代码中的切片起点。
在一个示例中,识别中间代码中的切片起点包括识别中间代码中的读写操作语句。
在一个示例中,识别中间代码中的读写操作语句包括:识别采用MPI-IO接口、POSIX接口、ADIOS接口中的任何一个的读写函数调用作为切片起点。
在步骤S1300中,基于识别得到的切片起点进行静态程序切片。
在一个示例中,基于识别得到的切片起点进行静态程序切片包括:
基于识别到的每个切片起点,对程序中间代码进行迭代式静态分析,计算程序切片。
在一个示例中,对于每个切片起点:
根据数据依赖迭代式计算和该切片起点直接相关的变量和语句。由于数据依赖具有传递性,每次引入一个新的相关变量和语句,都需要分析该变量或语句依赖的其它语句,考虑到循环的存在,这个过程需要迭代进行;以及
根据控制依赖和通信依赖迭代式计算间接相关的变量和程序语句;以及
收集所有直接相关和间接相关的语句作为程序切片,非程序切片语句后续操作将予删除,实现代码精简。
在一个示例中,根据数据依赖迭代式计算和该切片起点直接相关的变量和语句包括:根据不同读写函数的定义,将相关调用参数变量加入相应的初始相关变量集合,主要包括两种:1)将读写操作的数据内容变量(一般是缓冲区变量)作为无关变量,后续计算依赖时只保留相关声明、指针赋值等相关操作即可;以及2)将其它所有变量视为读写行为控制变量,即视为影响输入输出行为的参数,加入初始相关变量集合。
在一个示例中,迭代式计算所有直接相关的变量和语句。直接相关是通过数据依赖分析完成。例如语句i中为了计算某已知相关的变量使用了另一变量v的值,计算变量v值的语句j如果可以直接跳转到语句i,那么视为语句j也为相关语句,并且该语句中使用的所有其他变量也都视为相关变量。
在一个示例中,考虑语句之间的控制依赖,主要包括条件分支语句if或者for,while循环语句等,计算所有间接相关的变量和语句。控制依赖主要用于分析计算分支条件本身所需要变量是否相关。
关于通信依赖,通信依赖是并行程序的固有特性,高性能程序往往采用MPI通信模型在不同进程间显式交换数据。因此,可以从源码级别进行一定程度的通信分析。例如点对点通信的发送和接收进程通常在程序中成对出现。通信依赖可以通过识别程序中所有可能匹配的计算操作来计算。在一个示例中,本发明实施例采用比较保守的策略,其中根据参数的类型和作用范围,尽量保留所有可能相关的语句,以保证生成程序的正确性。本发明不限定使用的通信依赖具体实现方法。
在步骤S1400中,基于得到的各个静态程序切片生成精简代码。
在一个示例中,基于得到的各个静态程序切片生成精简代码包括:记录切片后要删除的语句行号信息;基于所记录的切片后要删除的语句行号信息,从原始应用程序源代码中删除所述要删除的语句行号信息所指示的语句。
在一个示例中,为了获得要保留的相关语句在源程序中的位置和行号信息,从所有切片相关语句(中间代码格式)的元信息中收集该语句在原始代码中的文件路径、文件名和代码行号等信息。
在一个示例中,基于得到的各个静态程序切片生成精简代码还包括:从原始应用程序源代码中识别并删除对应无关的计算和通信操作的语句。
在一个示例中,为保证精简后代码可以直接编译、运行,所述生成精简代码的步骤还包括处理精简源代码中各种兼容的语法、条件表达式、函数调用等语句。这一部分可以借助编译器的前段分析工具辅助完成。
在一个示例中,所述基于得到的各个静态程序切片生成精简代码包括在生成精简代码过程中进行插桩操作,由此能够在该存储系统基准评测程序被执行时统计读写操作次数、数据块大小、所需时间信息,从而生成读写带宽信息。通过所述插桩操作,在精简的评测程序的源代码中增加额外的语句,记录输入输出操作的相关信息,比如数据块大小、迭代次数和时间等,并在程序最后进行统计读写带宽。这样,用户采用精简后的程序作为评测程序使用时,可直接获得直观的存储系统性能报告。
输入输出操作与计算和通信重叠的情况在一些应用程序中存在。如果简单地删除计算或通信声明语句,可能会减少或者删除两个连续操作间的间隔。这种情况下响应连续的输入输出请求,存储系统可能会表现出比原始应用程序较差的性能。为此,优选地,在S1400步骤中,标记原始程序中被全部删除的、不包含任何输入输出相关语句的循环块,并在代码删除时插入休眠语句sleep(time)模拟计算的执行。考虑到基准程序的源代码完全可用并且远比原始应用程序紧凑,整个代码精简过程结束后,程序的开发者可以在精简程序中,手动决定睡眠间隔time。
在一个示例中,图1所示实施例的存储系统基准评测程序生成方法还可以包括对生成的精简程序进行正确性验证的步骤,包括:获得精简代码和原始程序在相同问题规模下的执行踪迹文件;对比精简代码和原始程序在相同问题规模下的执行踪迹文件,确定两者之间输入输出行为之间是否不同,当确定两者之前输入输出行为一致时,确定精简代码是正确的。当精简程序运行时表现出和原始应用程序一致的输入输出特征时,即可投入使用,代替原始程序进行存储系统性能评测。图2示出了上述精简程序正确性验证的示例性过程的示意图,如图2所示,纸面左侧,高性能应用程序(即原始程序)通过插桩工具插桩,然后执行,得到执行踪迹;右侧,对应的精简评测程序执行,得到执行踪迹,然后比较两者的执行踪迹看是否一致,从而得出精简评测程序是否正确的评估结果。
附图1中的静态切片分析操作和精简代码生成步骤可以在目前的主流编译器中实现,例如LLVM、GCC和Open64。在一个优选示例中,采用LLVM编译器。本实施例采用自底向上的、静态分析方式的、基于数据流方程的切片计算方法。具体的数据流方程可采用业界主流做法或任何未来出现的适当的数据流方程,此非本发明关注焦点,为避免混淆要点,这里不做详细讨论。
图3示出了一个对应用程序进行切片从而生成精简程序的例子,用来阐明原始应用程序和切片后的精简程序间的不同。为了方便对比,此处没有展示统计输入输出的插桩代码。
如图3所示,原始应用程序是字符串变换和搜索,主要任务是进行字符串的变化,最后统计固定迭代步后得到的字符串中,某一字符的出现次数。其中每一步中间字符串都会存储起来以便故障恢复。这个程序是数据并行性比较好的程序,不同进程之间按照数据范围进行分割,每个进程都在字符串变换后,负责调MPI读写例程MPI_File_write_at_all将缓冲区的字符串写入到共享文件中的固定偏移位置。进程写入的文件偏移量范围没有重叠,是弱扩展的程序。这个程序受生物计算中的基因对匹配程序的启发,是一个样例程序。
为了收集和输入输出相关的语句,首先需要标示和输入输出直接相关的语句(图3中下划线的语句),这可以通过识别固定的MPI或者POSIX接口的函数调用完成。其次,程序切片工具会分析这些语句依赖的其他语句,并迭代式寻找新的依赖。
依赖的语句可能是数据依赖,即相关语句需要用到某一个变量的值,那么该值所有的计算语句都被识别为新的相关语句。例如48行的输出操作依赖47行对disp变量的计算。依赖也可能是控制依赖,例如第38行语句的执行依赖第37行的条件分支。最后,依赖还可能是通信依赖,例如48行的操作依赖第39行的广播通信。
经过程序切片,所有与输入输出相关的语句会被保留下来,剩下的无关语句会被删除。其中图2中,带删除线的程序语句即表示和输入输出不相关的语句,在精简程序中都被删除。对比原始程序和精简程序的源代码,可以发现二者的不同:
·函数transform中所有语句和main函数中45行的调用点全被删除。通过分析可知,这些计算和该程序的输入输出行为无关,因此可以删除。删除后的程序仍然可编译,是独立、完整的程序代码。若第45行没有被删除,可能会引发编译或者运行时错误。需要指出,函数transform中的临时变量的内存分配因为和输入输出无关,也可以直接删除。标准库调用sqrt也因此删除,减少了无关的计算。
●20行到22行间的不相关计算循环。该循环是为了计算输出的内容count,而count变量与输入输出模式无关。输入输出模式由读写操作频率、应用程序接口、数据大小、数据类型等因素决定,输入输出模式的定义不包括读写操作的具体内容(即缓冲区变量)。
●24行和25行间的集合通信。该集合通信因为也是为计算输出内容count服务,和最后的输出模式无关,因此也可以直接删除。
●精简程序中因为删掉了大量原始程序中无关计算和通信,因此初始处未使用的头文件可以被有效识别和删除。这样可以消除原始程序对于大量第三方库的依赖,使生成的精简程序更为轻量,容易移植。
●42行中对于变量memset初始化缓冲区。该缓冲区内容和输入输出模式无关,因此可以略去。这样对于精简内存密集型程序非常有帮助。最后生成的代码无论在内存大小方面还是在内存访问量方面都显著减少,从而适合作为快速评测程序使用。
上面的示例表明,精简之后的代码在计算、通信和内存使用上,都比原始程序显著减少。代码行数也一定程度地降低,最后生成的代码几乎全部取自原始程序,方便用户或者开发人员进行二次开发。
根据本发明的另一实施例,提供了一种通过对源应用程序进行精简生成用于对存储系统进行评测的精简程序的存储系统基准评测程序生成装置。
图4示出了根据本发明实施例的存储系统基准评测程序生成装置2000的配置框图。
如图4所示,该存储系统基准评测程序生成装置2000可以包括:中间代码获得部件2100,用于从源程序获得中间代码;切片起点识别部件2200,用于识别中间代码中的切片起点;静态程序切片部件2300,用于基于识别得到的切片起点进行静态程序切片;以及精简代码生成部件2400,用于基于得到的各个静态程序切片生成精简代码。有关上述各个部件的功能和实现可以参考结合图1对各个对应步骤的描述。
本发明的目的可以通过在任何计算装置上运行一个程序或一组程序来实现,当该一个程序或一组程序被计算装置运行时,执行前述结合实施例描述的从原始应用程序生成精简程序代码的方法。所述计算装置可以是公知的通用装置,例如台式机、笔记本电脑、平板电脑、移动终端等,也可以是专门设计的计算装置。因此,本发明的目的也可以通过提供包括实现上述方法的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来开发出来的任何存储介质。
还需要指出的是,在本发明的装置和方法中,在不违法逻辑或约束的情况下,各个部件或各个步骤是可以分解和/或重新组合的,这些分解和/或程序组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是只要不违反运行逻辑和约束,并不需要一定按时间顺序执行,在适当的情况下,某些步骤可以并行执行或者相互独立的执行。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Claims (8)
1.一种计算机执行的通过对源应用程序进行精简,生成用于对存储系统进行评测的精简程序的存储系统基准评测程序生成方法,包括:
从规范化后的源程序获得中间代码;
识别中间代码中的切片起点,所述识别中间代码中的切片起点包括识别中间代码中的读写操作语句,包括识别采用MPI-IO接口、POSIX接口、ADIOS接口中的任何一个的读写函数调用作为切片起点;
基于识别得到的切片起点进行静态程序切片;以及
基于得到的各个静态程序切片生成精简代码。
2.如权利要求1所述的存储系统基准评测程序生成方法,所述基于得到的各个静态程序切片生成精简代码包括在生成精简代码过程中进行插桩操作,由此能够在该存储系统基准评测程序被执行时统计读写操作次数、数据块大小、所需时间信息,从而生成读写带宽信息。
3.如权利要求1所述的存储系统基准评测程序生成方法,在从源程序获得中间代码之前,还包括源代码规范化步骤,使得每一个独立的代码语句单独成行,包括将原本在一行的多条源代码语句分拆成多行连续的源代码。
4.如权利要求1所述的存储系统基准评测程序生成方法,所述基于识别得到的切片起点进行静态程序切片包括:
基于识别到的每个切片起点,对程序中间代码进行迭代式静态分析,计算程序切片。
5.如权利要求4所述的存储系统基准评测程序生成方法,所述基于切片起点对程序中间代码进行迭代式静态分析以计算程序切片过程包括:
对于每个切片起点:
根据数据依赖迭代式计算和该切片起点直接相关的变量和语句;以及
根据控制依赖和通信依赖迭代式计算间接相关的变量和程序语句;以及
收集所有直接相关和间接相关的语句作为程序切片。
6.如权利要求5所述的存储系统基准评测程序生成方法,所述根据数据依赖迭代式计算和该切片起点直接相关的变量和语句包括:
根据不同读写函数的定义,将相关调用参数变量加入相应的初始相关变量集合,包括:
1)将读写操作的数据内容变量作为无关变量,后续计算依赖时只保留包括声明、指针赋值在内相关操作;以及
2)将其它所有变量视为读写行为控制变量,加入初始相关变量集合。
7.如权利要求1所述的存储系统基准评测程序生成方法,所述基于得到的各个静态程序切片生成精简代码包括:
记录切片后要删除的语句行号信息;
基于所记录的切片后要删除的语句行号信息,从原始应用程序源代码中删除所述要删除的语句行号信息所指示的语句。
8.如权利要求7所述的存储系统基准评测程序生成方法,基于得到的各个静态程序切片生成精简代码还包括:
从原始应用程序源代码中识别并删除对应无关的计算和通信操作的语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510315936.8A CN104850411B (zh) | 2015-06-10 | 2015-06-10 | 存储系统基准评测程序生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510315936.8A CN104850411B (zh) | 2015-06-10 | 2015-06-10 | 存储系统基准评测程序生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104850411A CN104850411A (zh) | 2015-08-19 |
CN104850411B true CN104850411B (zh) | 2018-06-22 |
Family
ID=53850074
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510315936.8A Active CN104850411B (zh) | 2015-06-10 | 2015-06-10 | 存储系统基准评测程序生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104850411B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105427695B (zh) * | 2015-11-03 | 2018-11-02 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN108228448B (zh) * | 2016-12-22 | 2021-03-26 | 中国移动通信集团公司 | 一种代码跟踪方法及装置 |
CN108363660B (zh) * | 2017-01-26 | 2021-06-01 | 华为技术有限公司 | 一种测试程序生成方法和装置 |
CN106933572B (zh) * | 2017-02-20 | 2020-05-19 | 南京邮电大学 | 一种基于llvm中间表示程序切片的度量模型 |
CN109887549B (zh) * | 2019-02-22 | 2023-01-20 | 天津大学 | 一种数据存储、还原方法及装置 |
CN110347594B (zh) * | 2019-06-28 | 2023-03-10 | 上海电气泰雷兹交通自动化系统有限公司 | Cbtc系统安全功能模块测试中静态变量同步和设定方法 |
US11163592B2 (en) | 2020-01-10 | 2021-11-02 | International Business Machines Corporation | Generation of benchmarks of applications based on performance traces |
CN114661503B (zh) * | 2022-01-26 | 2023-10-27 | 天津大学 | 基于程序切片的软件关联配置错误诊断方法及装置 |
CN114817061A (zh) * | 2022-05-16 | 2022-07-29 | 厦门大学 | 虚拟构建脚本的依赖性错误检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661409A (zh) * | 2009-09-22 | 2010-03-03 | 清华大学 | 并行程序通信模式的提取方法及系统 |
CN103914372A (zh) * | 2012-12-31 | 2014-07-09 | 北京启明星辰信息技术股份有限公司 | 基于程序切片的代码缺陷静态检测的并行化方法及装置 |
CN104484175A (zh) * | 2014-12-16 | 2015-04-01 | 上海交通大学 | Android应用程序密码学误用检测方法 |
-
2015
- 2015-06-10 CN CN201510315936.8A patent/CN104850411B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661409A (zh) * | 2009-09-22 | 2010-03-03 | 清华大学 | 并行程序通信模式的提取方法及系统 |
CN103914372A (zh) * | 2012-12-31 | 2014-07-09 | 北京启明星辰信息技术股份有限公司 | 基于程序切片的代码缺陷静态检测的并行化方法及装置 |
CN104484175A (zh) * | 2014-12-16 | 2015-04-01 | 上海交通大学 | Android应用程序密码学误用检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104850411A (zh) | 2015-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104850411B (zh) | 存储系统基准评测程序生成方法及装置 | |
Gao et al. | Estimating gpu memory consumption of deep learning models | |
Lee et al. | Compass: A framework for automated performance modeling and prediction | |
CN100561445C (zh) | 一种根据程序内容自动生成测试数据集的方法和装置 | |
CN101996131A (zh) | 基于xml封装关键字的gui自动测试方法及自动测试平台 | |
CN102567200A (zh) | 基于函数调用图的并行化安全漏洞检测方法 | |
CN104375941B (zh) | 可执行程序测试用例集二进制代码覆盖率自动化评估方法 | |
CN109871326A (zh) | 一种脚本录制的方法和装置 | |
CN103631573B (zh) | 可迁移函数执行时间的获得方法及系统 | |
US20070174711A1 (en) | Software test management program software test management apparatus and software test management method | |
Mariano | Benchmarking javascript frameworks | |
O'neal et al. | GPU performance estimation using software rasterization and machine learning | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测系统 | |
Williams et al. | Dyninst and mrnet: Foundational infrastructure for parallel tools | |
US11740875B2 (en) | Type inference in dynamic languages | |
CN105045698A (zh) | 使用python的matplotlib分析芯片验证进度的方法 | |
Hazott et al. | DSA monitoring framework for HW/SW partitioning of application kernels leveraging VPs | |
WO2022036783A1 (zh) | 一种c语言的指针类型分析方法 | |
Patil | Design and implementation of combinatorial testing based test suites for operating systems used for internet of things | |
Schulz et al. | The MPI Tool Interfaces: Past, Present, and Future—Capabilities and Prospects | |
Nilakantan et al. | Platform-independent analysis of function-level communication in workloads | |
Buzaid et al. | Reviewing dynamic feature location techniques: Basic elements and challenges | |
Liu | Integrating process mining with discrete-event simulation modeling | |
CN105700854B (zh) | 运行应用任务的方法及装置 | |
Llorens et al. | Tracking CSP computations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |