CN112765027B - 一种检测应用程序执行过程中冗余零的方法 - Google Patents

一种检测应用程序执行过程中冗余零的方法 Download PDF

Info

Publication number
CN112765027B
CN112765027B CN202110085463.2A CN202110085463A CN112765027B CN 112765027 B CN112765027 B CN 112765027B CN 202110085463 A CN202110085463 A CN 202110085463A CN 112765027 B CN112765027 B CN 112765027B
Authority
CN
China
Prior art keywords
redundant
zero
value
data object
redundancy
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
Application number
CN202110085463.2A
Other languages
English (en)
Other versions
CN112765027A (zh
Inventor
杨海龙
游心
栾钟治
钱德沛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN202110085463.2A priority Critical patent/CN112765027B/zh
Publication of CN112765027A publication Critical patent/CN112765027A/zh
Application granted granted Critical
Publication of CN112765027B publication Critical patent/CN112765027B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种检测应用程序执行过程中冗余零的方法,包括:1)识别由于数据结构使用不当、数据宽度过大以及无用计算造成的冗余零;2)提示冗余零发生的源代码行与执行上下文来提供直观的优化指导;3)依据应用检测出的冗余零信息进行针对性优化可以显著提高应用的执行性能或能效。本发明充分挖掘了应用内部广泛存在的冗余零现象,并能够在有效识别应用软件中存在的冗余零的同时,给出准确、直观的优化指导建议来实现显著的加速效果并降低执行应用程序来完成计算任务的总能耗。

Description

一种检测应用程序执行过程中冗余零的方法
技术领域
本发明涉及性能分析工具、高性能计算等领域,特别是涉及一种检测应用程序执行过程中冗余零方法。
背景技术
在高性能计算领域,高性能应用软件依赖于众多第三方库并拥有大量复杂的控制、数据流来处理应用数据。如此高的软件复杂性带来了不可预知的软件低效行为,使得高性能应用软件无法达到其所预期的最佳性能。应用软件常常包含有冗余操作,例如重复地从内存加载相同的值,向内存写入无用的值,向内存的同一位置上覆盖不会用到的中间结果,或者重复地计算相同的数值。此外,还有一系列应用软件会使用稀疏数据作为其输入进行处理。倘若这些软件使用稠密的数据结构存储,甚至使用稠密的算法进行处理,则会浪费大量的资源去处理数据结构或者算法中引入的频繁的、冗余的零值。
在当前,已经有大量的真实应用已经报告了大量冗余零的存在并对其进行了优化来达到更好的效果。例如在深度神经网络领域,研究人员已经提出了软件或者硬件的优化方法来实现对神经网络中稀疏性的自动检测以及特定的稀疏优化来达到更好的性能;在视频编码领域,研究人员提出了一些全零块(all-zero block)检测方法来跳过这些块的计算来达到更高的性能。这些方法都是对于特定领域上的工作,并不能对其他领域的应用上提供对于冗余零的检测或优化。目前,对于冗余计算,尤其是冗余零的自动检测方法上,已有的解决方案主要分为以下两个方面:
(1)硬件扩展或新型硬件
这方面的研究是通过开发硬件扩展或者新型硬件来检测应用执行过程中的冗余零并对其进行针对性的优化。如有研究人员提出过零值内容增广缓存(ZCA cache)以及解耦零值压缩内存(DZC memory)来检测、消除缓存以及内存中存在的冗余零;此外,eDRAM中存在的冗余零被利用来减少冗余的内存刷新从而降低内存的能耗;研究人员也提出了利用冗余零信息的零值感知缓存算法(Zero-Chunk)来提高冗余零的访问速度并减少其资源消耗。但这些硬件方法都需要对现有计算机硬件系统进行扩展,并没有融合进现有的商业服务器中,使得真实的应用软件并不能直接使用这些硬件扩展或新型硬件。
(2)纯软件方法,例如编译器优化,性能分析工具
这方面的研究是通过纯软件方法对应用执行过程中的冗余操作进行检测或者进行针对性的优化。这方面研究主要包含两类方法:编译器优化和性能分析工具。对于编译器优化,现有的研究已经应用了一系列冗余优化方法,包括值编号(value numbering)、公共子表达式消除、常量传播等,但这些方法都受限于有限的优化范围以及不准确的指针、同义评估。链接时优化(Link-time optimization)可以一定程度上扩大编译器优化的范围,但其优化后的性能提升有限。结合上述静态编译优化方法,研究人员也提出了性能侧写导向的编译优化来结合性能数据与编译优化,但这些技巧还没有识别冗余零相关的内存、计算操作来进一步优化生成代码。此外,现有的性能分析工具(例如Perf、HPCToolkit、VTune、gprof等)可以监测应用程序的执行过程并采集、报告应用执行过程中的性能数据来指导优化,包括CPU墙钟时间,缓存命中率,计算密集度等。其他如RedSpy和LoadSpy等性能工具可以识别冗余的内存写与读,但上述工具都只能识别应用程序的热点以及资源利用率,但并不能识别软件中蕴含的冗余零相关的低效行为,也不能提供相关的优化指导。
综上所述,现有的硬件或者软件方法都不能识别深藏在软件层层抽象下的冗余零导致的软件低效行为。
发明内容
本发明技术解决问题:克服现有技术的不足和缺陷,充分挖掘了应用内部广泛存在的冗余零现象,并能够在有效识别应用软件中存在的冗余零的同时,给出准确、直观的优化指导建议来实现显著的加速效果并降低执行应用程序来完成计算任务的总能耗。本发明提出了新的可行的性能分析方法来充分挖掘应用内部广泛存在的冗余零现象,将这些冗余零根据其来源分类为由于数据结构使用不当、数据宽度过大以及无用计算造成的冗余零,并能够在有效识别应用软件中存在的冗余零的同时,给出准确、直观的优化指导建议来实现显著的加速效果并降低执行应用程序来完成计算任务的总能耗。
本发明的技术解决方案,一种检测应用程序执行过程中冗余零的方法,包括如下步骤:
步骤1:用户在CPU集群上指定四种执行模式中的一种来启动一个CPU应用,所述四种执行模式包括:代码模式、数据对象模式、缓存级别模式以及内存页级别模式;其中代码模式会以代码为中心对应用执行过程进行分析,从而得到指令级别的冗余零信息;数据对象模式会以应用执行过程中访问的数据对象为中心进行分析,从而得到各个数据对象的冗余零信息;而缓存级别模式以及内存页级别模式则分别对访问的缓存行、内存页级别进行分析,从而得到体系结构层面的冗余零信息;
步骤2:在应用运行时,对应用进行动态插桩,在每个内存读操作前都插入分析函数,并将该内存读操作的指令ins以及目标内存地址M作为参数传入该分析函数中;
步骤3:判断应用程序是否执行完,如果未执行完,则继续判断该操作是否是内存读操作,如果是,则进入步骤4,否则回到步骤3;如果已经执行完,则进入步骤13;
步骤4:如果为代码模式,则进入步骤5;如果为数据对象模式,则进入步骤8;如果为缓存级别模式,则进入步骤11;如果为内存页级别模式,则进入步骤12;
步骤5:获取该内存读操作的调用上下文C,内存读操作目标内存地址M中存储的值V,如果该内存读操作指令ins为整数指令,则进入步骤6,否则进入步骤7;
步骤6:将值V转化为二进制表示的冗余映射redmap:b1b2…bn,记录其中冗余零的个数Nzero,并将该冗余映射合并到该指令ins在该调用上下文C下的整数冗余映射RINT(ins,C)中,最后返回步骤2;
步骤7:按照IEEE 754浮点格式将值V转化为尾数和指数两组冗余映射b1b2…bk和bk+1bk+2…bn,记录其中冗余零的个数Nzero,并将两组冗余映射分别合并到该指令ins在该调用上下文C下的浮点冗余映射RFP(ins,C)的两个分量Rman(ins,C)和Rexp(ins,C)中,最后返回步骤2;
步骤8:获取该内存读操作目标内存地址所在的数据对象D,内存读操作目标内存地址M中存储的值V,且如果数据对象D不是堆栈上的数据对象,则返回步骤2,否则仅在该内存读操作指令ins为整数指令时进入步骤9,否则,如果该内存读操作指令ins为非整数指令时进入步骤10;
步骤9:将值V转化为二进制表示的冗余映射redmap:b1b2…bn,记录其中冗余零的个数Nzero,并将该冗余映射合并到该内存地址M在该数据对象D下的整数冗余映射RINT(M,D)中,最后返回步骤2;
步骤10:判断值V是否为0,并将结果合并到该内存地址M在该数据对象D下的浮点冗余映射RFP(M,D)中以及冗余零个数Nzero,最后返回步骤2;
步骤11:获取该内存读操作目标地址M的缓存编号Kcache(M),其存储的值V,将其转化为二进制表示的冗余映射b1b2…bn,以及其对应的冗余零的个数Nzero,并将b1b2…bn以及Nzero合并到Kcache(M)所对应的记录,返回步骤2;
步骤12:获取该内存读操作目标地址M的内存页编号Kpage(M),其存储的值V,将其转化为二进制表示的冗余映射b1b2…bn,以及其对应的冗余零的个数Nzero,并将b1b2…bn以及Nzero合并到Kpage(M)所对应的记录,返回步骤2;
步骤13:统计并生成最终冗余零检测报告。
进一步的,所述步骤6、7、9、10、12中,将值V转化为二进制表示的冗余映射b1b2…bn的方法为:
(1)定义值V的字节表示(byte representation)为B1B2…Bn,n为字节数量,其中Bn为值V的最高字节位,定义值V的冗余映射redmap为二进制向量b1b2…bn,其中i=1,2,…,n;
(1-3)如果Bi=0,则bi=0;
(1-4)否则bi=1;
(2)在值V为64位整型或更低位的整型时,使用在单个字节内循环按位与操作来快速并行地获取对应的冗余映射。
进一步的,在步骤6、7、9、10、12中,从值V得到冗余零个数的方法为:
(1)若值V的长度为64位或更小,则直接根据其冗余映射b1b2…bn得到预先计算好的冗余零个数Nzero
(2)否则,从最高位i=n开始,依次比较bi=0,直到某一个值k,使得bk≠0,其中,1≤k≤n,此时Nzero=n-k,否则Nzero=0。
进一步的,在步骤6中的指令ins在调用上下文C下的整数冗余映射RINT(ins,C)合并公式为:RINT(inst,C)=RINT(inst,C)&(b1b2…bn),其中&为按位与操作。
进一步的,在步骤7中的指令ins在调用上下文C下的浮点数冗余映射RFP(ins,C)合并公式为:
Figure BDA0002910637810000041
其中&为按位与操作,在单精度浮点数下k=23,n=32,在双精度浮点数下k=52,n=64。
进一步的,在步骤9中的内存地址M在数据对象D下的整数冗余映射RINT(M,D)合并公式为:RINT(M,D)=RINT(M,D)&(b1b2…bn),其中&为按位与操作。
进一步的,在步骤10中的内存地址M在数据对象D下的浮点数冗余映射RFP(M,D)合并公式为:RFP(M,D)=RFP(M,D)&(V≡0),其中&为按位与操作。
进一步的,在步骤11中的内存地址M对应的缓存编号Kcache(M)的计算公式为:
Kcache(M)=M&(~MASK1)
其中MASK1是掩码,代表缓存行大小,用户根据具体系统自行定义该掩码值;
进一步的,在步骤12中的内存地址M对应的内存页编号Kpage(M)的计算公式为:
Kpage(M)=M&(~MASK2)
其中MASK2是掩码,代表内存页大小,用户可以根据具体系统自行定义该掩码值;
进一步的,在步骤13中统计并报告的冗余零信息包括:
(1)代码模式的报告包括:
(1-1)冗余零占比Rtotal:在该指令中在该调用上下文中访问的冗余零在整个程序执行过程中访问的冗余零的占比,其计算公式为:
Figure BDA0002910637810000051
(1-2)局部冗余零占比Rlocal:在该指令中在该调用上下文中访问的冗余零占其访问字节数的占比,其计算公式为:
Figure BDA0002910637810000052
(1-3)冗余映射RINT或RFP:该指令在该调用上下文中访问冗余零的模式
(1-4)调用上下文信息C:如果有调试信息,则还会给出对应的源代码位置信息;
(2)数据对象模式的报告包括:
(2-1)数据对象大小S,单位为字节;
(2-2)数据对象中未访问的数据大小a,单位为字节,及其占比A,其中
Figure BDA0002910637810000053
(2-3)数据对象中冗余零的数据大小r,单位为字节,及其占比R,其中
Figure BDA0002910637810000054
(2-4)数据对象类型,以及其对应的调试信息,所述数据对象类型包括堆对象Dynamic Object,栈对象Static Object;其中堆对象为其申请空间时的调用上下文信息,栈对象为其对应的变量名称;
(3)所有模式都包含应用执行中总体的冗余零占比
Figure BDA0002910637810000055
进一步的,检测到的冗余零包含三类原因导致的资源浪费以及性能下降,分别为:
(1)数据宽度过大:使用超过预定长度的数据宽度对一个值域有限的数据进行存储;例如,使用64位整型来存储8位整型数可以代表的值域等;
(2)数据结构使用不当:稀疏矩阵使用稠密矩阵/算法进行存储/处理;
(3)冗余零参与的无用计算:冗余零参与的众多无用计算直接跳过。
有益效果:
本发明与现有技术相比的优点在于:本发明充分挖掘了应用内部广泛存在的冗余零现象,并能够在有效识别应用软件中存在的冗余零的同时,给出准确、直观的优化指导建议来实现显著的加速效果并降低执行应用程序来完成计算任务的总能耗。
附图说明
图1是实现本发明提出方法的总体流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示:本发明具体实施步骤如下:
步骤1:用户在CPU集群上指定四种执行模式中的一种来启动一个CPU应用,包括:代码模式、数据对象模式、缓存级别模式以及内存页级别模式。其中代码模式会以代码为中心对应用执行过程进行分析,从而得到指令级别的冗余零信息;数据对象模式会以应用执行过程中访问的数据对象为中心进行分析,从而得到各个数据对象的冗余零信息;而缓存级别模式以及内存页级别模式则分别对访问的缓存行、内存页级别进行分析,从而得到体系结构层面的冗余零信息。
步骤2:在应用运行时,对应用进行动态插桩,在每个内存读操作前都插入分析函数,并将该内存读操作的指令ins以及目标内存地址M作为参数传入该分析函数中;
步骤3:在应用运行到内存读操作时进入分析代码中,直至应用执行结束后进入步骤13;
步骤4:如果为代码模式,则进入步骤5;如果为数据对象模式,则进入步骤8;如果为缓存级别模式,则进入步骤11;如果为内存页级别模式,则进入步骤12;
步骤5:获取该内存读操作的调用上下文C,内存读操作目标内存地址M中存储的值V,如果该内存读操作指令ins为整数指令,则进入步骤5,否则进入步骤6;
步骤6:将值V转化为二进制表示的冗余映射(redmap)b1b2…bn,记录其中冗余零的个数Nzero,并将该冗余映射合并到该指令ins在该调用上下文C下的整数冗余映射RINT(ins,C)中,最后返回步骤2;其中:
(1)将值V转化为二进制表示的冗余映射b1b2…bn的方法为:
(1-1)定义值V的字节表示(byte representation)为B1B2…Bn,其中Bn为值V的最高字节位,定义值V的冗余映射(redmap)为二进制向量b1b2…bn,其中(i=1,2,…,n):
(1-1-1)如果Bi=0,则bi=0;
(1-1-2)否则bi=1;
(1-2)在值V为64位整型或更低位的整型时,使用在单个字节内循环按位与操作来快速并行地获取对应的冗余映射;
(2)从值V得到冗余零个数Nzero的方法为:
(2-1)若值V的长度为64位或更小,则直接根据其冗余映射b1b2…bn得到预先计算好的冗余零个数Nzero
(2-2)否则,从最高位(i=n)开始,依次比较bi=0,直到某一个值k(1≤k≤n),使得bk≠0,此时Nzero=n-k,否则Nzero=0;
(3)RINT(ins,C)合并公式为:RINT(inst,C)=RINT(inst,C)&(b1b2…bn),其中&为按位与操作;
步骤7:按照IEEE 754浮点格式将值V转化为尾数和指数两组冗余映射b1b2…bk和bk+1bk+2…bn,记录其中冗余零的个数Nzero,并将两组冗余映射分别合并到该指令ins在该调用上下文C下的浮点冗余映射RFP(ins,C)的两个分量Rman(ins,C)和Rexp(ins,C)中,最后返回步骤2;其中RFP(ins,C)合并公式为:
Figure BDA0002910637810000071
其中&为按位与操作,在单精度浮点数下k=23,n=32,在双精度浮点数下k=52,n=64;
步骤8:获取该内存读操作目标内存地址所在的数据对象D,内存读操作目标内存地址M中存储的值V,且如果数据对象D不是堆栈上的数据对象,则返回步骤2,否则仅在该内存读操作指令ins为整数指令时进入步骤9,否则进入步骤10;
步骤9:将值V转化为二进制表示的冗余映射(redmap)b1b2…bn,记录其中冗余零的个数Nzero,并将该冗余映射合并到该内存地址M在该数据对象D下的整数冗余映射RINT(M,D)中,最后返回步骤2;其中内存地址M在数据对象D下的整数冗余映射RINT(M,D)合并公式为:RINT(M,D)=RINT(M,D)&(b1b2…bn),其中&为按位与操作;
步骤10:判断值V是否为0,并将结果合并到该内存地址M在该数据对象D下的浮点冗余映射RFP(M,D)中以及冗余零个数Nzero,最后返回步骤2;其中内存地址M在数据对象D下的浮点数冗余映射RFP(M,D)合并公式为:RFP(M,D)=RFP(M,D)&(V≡0),其中&为按位与操作;
步骤11:获取该内存读操作目标地址M的缓存编号Kcache(M),其存储的值V,将其转化为二进制表示的冗余映射b1b2…bn,以及其对应的冗余零的个数Nzero,并将b1b2…bn以及Nzero合并到Kcache(M)所对应的记录,返回步骤2;其中内存地址M对应的缓存编号Kcache(M)的计算公式为:
Kcache(M)=M&(~0x3F)
其中0x3F是掩码,代表64字节的缓存行大小,用户可以根据具体系统自行定义该掩码值;
步骤12:获取该内存读操作目标地址M的内存页编号Kpage(M),其存储的值V,将其转化为二进制表示的冗余映射b1b2…bn,以及其对应的冗余零的个数Nzero,并将b1b2…bn以及Nzero合并到Kpage(M)所对应的记录,返回步骤2;其中内存地址M对应的内存页编号Kpage(M)的计算公式为:
Kpage(M)=M&(~0xFFF)
其中0xFFF是掩码,代表4KB的内存页大小,用户可以根据具体系统自行定义该掩码值;
步骤13:统计并生成最终冗余零检测报告,其中统计并报告的冗余零信息包括:
(1)代码模式的报告包括:
(1-1)冗余零占比Rtotal:在该指令中在该调用上下文中访问的冗余零在整个程序执行过程中访问的冗余零的占比,其计算公式为:
Figure BDA0002910637810000081
(1-2)局部冗余零占比Rlocal:在该指令中在该调用上下文中访问的冗余零占其访问字节数的占比,其计算公式为:
Figure BDA0002910637810000082
(1-3)冗余映射RINT或RFP:该指令在该调用上下文中访问冗余零的模式;
(1-4)调用上下文信息C:如果有调试信息,则还会给出对应的源代码位置信息;
(2)数据对象模式的报告包括:
(2-1)数据对象大小S,单位为字节;
(2-2)数据对象中未访问的数据大小a(单位:字节),及其占比A,其中
Figure BDA0002910637810000083
(2-3)数据对象中冗余零的数据大小r(单位:字节),及其占比R,其中
Figure BDA0002910637810000084
(2-4)数据对象类型(堆对象Dynamic Object,栈对象Static Object),以及其对应的调试信息,其中堆对象为其申请空间时的调用上下文信息,栈对象为其对应的变量名称;
(3)所有模式都包含应用执行中总体的冗余零占比
Figure BDA0002910637810000085
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,且应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

Claims (11)

1.一种检测应用程序执行过程中冗余零的方法,其特征在于,包括以下步骤:
步骤1:用户在CPU集群上指定四种执行模式中的一种来启动一个CPU应用,所述四种执行模式包括:代码模式、数据对象模式、缓存级别模式以及内存页级别模式;其中代码模式会以代码为中心对应用执行过程进行分析,从而得到指令级别的冗余零信息;数据对象模式会以应用执行过程中访问的数据对象为中心进行分析,从而得到各个数据对象的冗余零信息;而缓存级别模式以及内存页级别模式则分别对访问的缓存行、内存页级别进行分析,从而得到体系结构层面的冗余零信息;
步骤2:在应用运行时,对应用进行动态插桩,在每个内存读操作前都插入分析函数,并将该内存读操作的指令ins以及目标内存地址M作为参数传入该分析函数中;
步骤3:判断应用程序是否执行完,如果未执行完,则继续判断该操作是否是内存读操作,如果是,则进入步骤4,否则回到步骤3;如果已经执行完,则进入步骤13;
步骤4:如果为代码模式,则进入步骤5;如果为数据对象模式,则进入步骤8;如果为缓存级别模式,则进入步骤11;如果为内存页级别模式,则进入步骤12;
步骤5:获取该内存读操作的调用上下文C,内存读操作目标内存地址M中存储的值V,如果该内存读操作指令ins为整数指令,则进入步骤6,否则进入步骤7;
步骤6:将值V转化为二进制表示的冗余映射redmap:b1b2...bn,记录其中冗余零的个数Nzero,并将该冗余映射合并到该指令ins在该调用上下文C下的整数冗余映射RINT(ins,C)中,最后返回步骤2;
步骤7:按照IEEE 754浮点格式将值V转化为尾数和指数两组冗余映射b1b2...bk和bk+ 1bk+2...bn,记录其中冗余零的个数Nzero,并将两组冗余映射分别合并到该指令ins在该调用上下文C下的浮点冗余映射RFP(ins,C)的两个分量Rman(ins,C)和Rexp(ins,C)中,最后返回步骤2;
步骤8:获取该内存读操作目标内存地址所在的数据对象D,内存读操作目标内存地址M中存储的值V,且如果数据对象D不是堆栈上的数据对象,则返回步骤2,否则仅在该内存读操作指令ins为整数指令时进入步骤9,否则,如果该内存读操作指令ins为非整数指令时进入步骤10;
步骤9:将值V转化为二进制表示的冗余映射redmap:b1b2...bn,记录其中冗余零的个数Nzero,并将该冗余映射合并到该内存地址M在该数据对象D下的整数冗余映射RINT(M,D)中,最后返回步骤2;
步骤10:判断值V是否为0,并将结果合并到该内存地址M在该数据对象D下的浮点冗余映射RFP(M,D)中以及冗余零个数Nzero,最后返回步骤2;
步骤11:获取该内存读操作目标地址M的缓存编号Kcache(M),其存储的值V,将其转化为二进制表示的冗余映射b1b2...bn,以及其对应的冗余零的个数Nzero,并将b1b2...bn以及Nzero合并到Kcache(M)所对应的记录,返回步骤2;
步骤12:获取该内存读操作目标地址M的内存页编号Kpage(M),其存储的值V,将其转化为二进制表示的冗余映射b1b2...bn,以及其对应的冗余零的个数Nzero,并将b1b2...bn以及Nzero合并到Kpage(M)所对应的记录,返回步骤2;
步骤13:统计并生成最终冗余零检测报告。
2.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:所述步骤6、7、9、10、12中,将值V转化为二进制表示的冗余映射b1b2...bn的方法为:
(1)定义值V的字节表示(byte representation)为B1B2...Bn,n为字节数量,其中Bn为值V的最高字节位,定义值V的冗余映射redmap为二进制向量b1b2...bn,其中i=1,2,...,n;
(1-1)如果Bi=0,则bi=0;
(1-2)否则bi=1;
(2)在值V为64位整型或更低位的整型时,使用在单个字节内循环按位与操作来快速并行地获取对应的冗余映射。
3.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:在步骤6、7、9、10、12中,从值V得到冗余零个数的方法为∶
(1)若值V的长度为64位或更小,则直接根据其冗余映射b1b2...bn得到预先计算好的冗余零个数Nzero
(2)否则,从最高位i=n开始,依次比较bi=0,直到某一个值k,使得bk≠0,其中,1≤k≤n,此时Nzero=n-k,否则Nzero=0。
4.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:在步骤6中的指令ins在调用上下文C下的整数冗余映射RINT(ins,C)合并公式为:RINT(inst,C)=RINT(inst,C)&(b1b2...bn),其中&为按位与操作。
5.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:在步骤7中的指令ins在调用上下文C下的浮点数冗余映射RFP(ins,C)合并公式为:
Figure FDA0002910637800000031
其中&为按位与操作,在单精度浮点数下k=23,n=32,在双精度浮点数下k=52,n=64。
6.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:在步骤9中的内存地址M在数据对象D下的整数冗余映射RINT(M,D)合并公式为:RINT(M,D)=RINT(M,D)&(b1b2...bn),其中&为按位与操作。
7.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:在步骤10中的内存地址M在数据对象D下的浮点数冗余映射RFP(M,D)合并公式为:RFP(M,D)=RFP(M,D)&(V≡0),其中&为按位与操作。
8.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:在步骤11中的内存地址M对应的缓存编号Kcache(M)的计算公式为:
Kcache(M)=M&(~MASK1)
其中MASK1是掩码,代表缓存行大小,用户根据具体系统自行定义该掩码值。
9.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:在步骤12中的内存地址M对应的内存页编号Kpage(M)的计算公式为:
Kpage(M)=M&(~MASK2)
其中MASK2是掩码,代表内存页大小,用户可以根据具体系统自行定义该掩码值。
10.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:在步骤13中统计并报告的冗余零信息包括:
(1)代码模式的报告包括:
(1-1)冗余零占比Rtotal:在该指令中在该调用上下文中访问的冗余零在整个程序执行过程中访问的冗余零的占比,其计算公式为:
Figure FDA0002910637800000032
(1-2)局部冗余零占比Rlocal:在该指令中在该调用上下文中访问的冗余零占其访问字节数的占比,其计算公式为:
Figure FDA0002910637800000033
(1-3)冗余映射RINT或RFP:该指令在该调用上下文中访问冗余零的模式
(1-4)调用上下文信息C:如果有调试信息,则还会给出对应的源代码位置信息;
(2)数据对象模式的报告包括:
(2-1)数据对象大小S,单位为字节;
(2-2)数据对象中未访问的数据大小a,单位为字节,及其占比A,其中
Figure FDA0002910637800000034
(2-3)数据对象中冗余零的数据大小r,单位为字节,及其占比R,其中
Figure FDA0002910637800000035
(2-4)数据对象类型,以及其对应的调试信息,所述数据对象类型包括堆对象DynamicObject,栈对象Static Object;其中堆对象为其申请空间时的调用上下文信息,栈对象为其对应的变量名称;
(3)所有模式都包含应用执行中总体的冗余零占比
Figure FDA0002910637800000041
11.根据权利要求1所述的一种检测应用程序执行过程中冗余零的方法,其特征在于:检测到的冗余零包含三类原因导致的资源浪费以及性能下降,分别为:
(1)数据宽度过大:使用超过预定长度的数据宽度对一个值域有限的数据进行存储;
(2)数据结构使用不当:稀疏矩阵使用稠密矩阵/算法进行存储/处理;
(3)冗余零参与的无用计算:冗余零参与的众多无用计算直接跳过。
CN202110085463.2A 2021-01-22 2021-01-22 一种检测应用程序执行过程中冗余零的方法 Active CN112765027B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110085463.2A CN112765027B (zh) 2021-01-22 2021-01-22 一种检测应用程序执行过程中冗余零的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110085463.2A CN112765027B (zh) 2021-01-22 2021-01-22 一种检测应用程序执行过程中冗余零的方法

Publications (2)

Publication Number Publication Date
CN112765027A CN112765027A (zh) 2021-05-07
CN112765027B true CN112765027B (zh) 2022-05-17

Family

ID=75702549

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110085463.2A Active CN112765027B (zh) 2021-01-22 2021-01-22 一种检测应用程序执行过程中冗余零的方法

Country Status (1)

Country Link
CN (1) CN112765027B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105024702A (zh) * 2015-07-08 2015-11-04 西安理工大学 一种面向科学计算的浮点型数据无损压缩方法
CN106775501A (zh) * 2017-02-14 2017-05-31 华南师范大学 基于非易失内存设备的数据去冗余方法及系统
CN109901840A (zh) * 2019-02-14 2019-06-18 中国科学院计算技术研究所 一种线程间冗余删除的异构编译优化方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2884748B1 (en) * 2013-12-11 2016-10-19 Squadeo S.A.S. Apparatus and method for decoding compressed video
US10061591B2 (en) * 2014-06-27 2018-08-28 Samsung Electronics Company, Ltd. Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105024702A (zh) * 2015-07-08 2015-11-04 西安理工大学 一种面向科学计算的浮点型数据无损压缩方法
CN106775501A (zh) * 2017-02-14 2017-05-31 华南师范大学 基于非易失内存设备的数据去冗余方法及系统
CN109901840A (zh) * 2019-02-14 2019-06-18 中国科学院计算技术研究所 一种线程间冗余删除的异构编译优化方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Norbert Görtz 等.On the combination of redundant and zero-redundant channel error detection in CELP speech-coding.《9th European Signal Processing Conference (EUSIPCO 1998)》.2015, *
一种高效的冗余编码Mesh流媒体覆盖网;王锐等;《西安交通大学学报》;20091010;第43卷(第10期);第56-60页 *

Also Published As

Publication number Publication date
CN112765027A (zh) 2021-05-07

Similar Documents

Publication Publication Date Title
US10394694B2 (en) Unexplored branch search in hybrid fuzz testing of software binaries
US10114554B1 (en) Arrangements for storing more data in faster memory when using a hierarchical memory structure
US7421540B2 (en) Method, apparatus, and program to efficiently calculate cache prefetching patterns for loops
TW201737115A (zh) 一種機器學習系統的訓練方法和訓練系統
CN110569629A (zh) 二进制代码文件溯源方法
CN113688062B (zh) 用于存储数据的方法和相关产品
US11960846B2 (en) Embedding inference
JP2000039997A (ja) サブクラス及びサブタイプの高速チェックを実現する方法及び装置
US7403961B1 (en) Dangling reference detection and garbage collection during hardware simulation
Ahmed et al. Towards a novel framework for automatic big data detection
Zhu et al. A performance prediction framework for irregular applications
CN112765027B (zh) 一种检测应用程序执行过程中冗余零的方法
CN117785540A (zh) 内存错误检测方法、装置、设备及介质
WO2019136799A1 (zh) 数据离散化方法、装置、计算机设备及存储介质
CN111126619B (zh) 一种机器学习方法与装置
WO2023050885A1 (zh) 应用的性能测试方法、建立性能测试模型的方法及装置
Amaris et al. Evaluating execution time predictions on gpu kernels using an analytical model and machine learning techniques
CN113010550B (zh) 结构化数据的批处理对象生成、批处理方法和装置
CN111290946B (zh) 基于原子状态函数的浮点数误差检测方法和装置
CN108846248B (zh) 一种应用建模及性能预测方法
CN114462381A (zh) 数据处理方法、装置、设备及存储介质
Zheng et al. A multitype software buffer overflow vulnerability prediction method based on a software graph structure and a self-attentive graph neural network
WO2023071611A1 (zh) 一种不友好访存检测方法及相关设备
US20240054074A1 (en) Computer-readable recording medium storing information processing program, information processing method, and information processing device
US10713167B2 (en) Information processing apparatus and method including simulating access to cache memory and generating profile information

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant