CN101655782A - 基于基本块的汇编代码得出程序的数据流图的实现方法 - Google Patents
基于基本块的汇编代码得出程序的数据流图的实现方法 Download PDFInfo
- Publication number
- CN101655782A CN101655782A CN200910102299A CN200910102299A CN101655782A CN 101655782 A CN101655782 A CN 101655782A CN 200910102299 A CN200910102299 A CN 200910102299A CN 200910102299 A CN200910102299 A CN 200910102299A CN 101655782 A CN101655782 A CN 101655782A
- Authority
- CN
- China
- Prior art keywords
- node
- instruction
- data flow
- chained list
- territory
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 238000010586 diagram Methods 0.000 claims description 30
- 238000000151 deposition Methods 0.000 claims description 6
- 230000001788 irregular Effects 0.000 abstract description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
Images
Landscapes
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
Abstract
本发明涉及处理器结构设计领域,旨在提供一种基于基本块的汇编代码得出程序的数据流图的实现方法。该方法包括下述步骤:分类模块对指令进行分类;关系分析模块对指令间的依赖关系进行分析并分类;数据流图分析模块针对第一种情况下的指令间的依赖关系得出数据流图。本发明中,程序的数据流图可能出现不规则的情况,这就意味着数据流图能够背分割成数据流子图。本发明是根据汇编代码对指令进行划分,得出3种指令,然后分别考虑3种指令中的两种指令之间的依赖关系,得出程序的数据流图。采用本方法可以提高指令的执行效率,还可以提高处理器性能。
Description
技术领域
本发明涉及处理器结构设计领域,特别是涉及一种基于基本块的汇编代码得出程序的数据流图的实现方法。
背景技术
乱序处理机可以通过增加指令发射的宽度来提高性能,但是,传统增加指令发射宽度的方法并不能提高计算机性能,也就是说增加了设计的复杂性和能耗需求。在执行核中,一个发射指令宽的处理器需要更大更宽的结构去支持更多的并行处理的指令,这些指令包括指令调度器、寄存器文件、旁路网络。如果设计采用更大更宽的结构,其流水线必须支持很大的时钟频率。但是在执行关键循环时,流水线结构可能会使性能下降。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种基于基本块的汇编代码得出程序的数据流图的实现方法。
本发明解决其技术问题采用的技术方案如下:
提供一种基于基本块的汇编代码得出程序的数据流图的实现方法,包括以下步骤:
(1)分类模块对指令进行分类
分类模块根据汇编代码把指令分为三类:第一种指令中有两个输入一个输出;第二种指令中含有一个输入一个输出;第三种指令中含有一个输入零个输出;
(2)关系分析模块对指令间的依赖关系进行分析并分类
指令间的依赖关系存在三种情况:
第一种情况:考虑第一种指令和第二种指令之间的依赖关系,再单独考虑第三种指令之间的依赖关系;
第二种情况:考虑第二种指令和第三种指令之间的依赖关系,再单独考虑第一种指令之间的依赖关系;
第三种情况:考虑第一种指令和第三种指令之间的依赖关系,再单独考虑第二种指令之间的依赖关系;
(3)数据流图分析模块针对第一种情况下的指令间的依赖关系得出数据流图
第一步,链表创建器建立链表
文件扫描器对汇编代码文件中的汇编指令逐条进行扫描,扫描的同时链表创建器对每条汇编指令建立指令结点;
指令结点node包含七个域:op域、输入一input1域、输入二input2域、输出output域、寄存器的个数num域、标签tag域、next域;
op域用来存放指令中的操作码,输入一input1域和输入二input2域是寄存器值的输入,输出output域是寄存器值的产生者,next域用来存放下一个节点的地址;当在一条指令中有两个相同的寄存器时,看作两个不同的寄存器,因为寄存器的值不相同,在建立链表的同时对标签tag域进行初始化为0,并计算每条指令中寄存器的个数num;
第二步,链表扫描器扫描链表
顺序查找过程:链表扫描器首先判断结点的num域是否等于1,如果等于1,则该结点单独作为一个数据流图;如果不为1,则把第一个结点的标签域tag设置为n,并且顺序比较第一个结点的输出域与其余结点的输入域;如果链表扫描器找到一个结点的输入域与第一个结点的输出域相同,则把该结点的标签域tag设置为n,并且把该结点作为第一个结点;顺序比较该结点的输出域与其余结点的输入域,如果相同,则把该结点的标签域tag设置为n;链表扫描器继续顺序查找,一直查找到链表末尾;
链表扫描器返回到链表的头结点,从头结点开始查找,本次查找是查找结点的标签域tag是否被修改过,如果找到结点的标签域tag没有被修改过,则把该结点作为第一个结点,重复上面的顺序查找过程,但是不同的是该结点的标签要修改等于n+1;如果链表扫描器找到标签域tag被修改的结点,则保持原来的值不变,并且在本次查找中,之前标签域tag修改为n+1的结点要重新修改为n,停止本次查找;重复上面的顺序查找过程;
新链表的顺序查找过程和顺序查找第一个链表num域值不为1的查找过程相同;
第三步,数据流图输出模块输出数据流图
数据流图输出模块根据链表中的每个结点的标签域tag值的不同,得到指令结点的数据流图;数据流图输出模块把相同tag值的结点作为一个数据流图,没有相同的则单独作为一个数据流图。
与背景技术相比,本发明具有的有益的效果是:
程序的数据流图可能出现不规则的情况,这就意味着数据流图能够背分割成数据流子图。本发明是根据汇编代码对指令进行划分,得出3种指令,然后分别考虑3种指令中的两种指令之间的依赖关系,得出程序的数据流图。采用本方法可以提高指令的执行效率,还可以提高处理器性能。
附图说明
图1为本发明中考虑第一种指令和第二种指令之间的依赖关系得出数据流图的流程图。
具体实施方式
本方法的具体过程及实例如下:
(1)分类模块对指令进行分类
分类模块根据汇编代码把指令分为三类。第一种指令:该指令中有两个输入一个输出,如:addq a1,t4,t0,这条指令意思就是将a1寄存器中的值加上t4寄存器中的值相加,并将其和存放到t0寄存器中,addq表示指令操作码,寄存器a1、t4表示两个输入,t0表示输出;第二种指令:该指令中含有一个输入一个输出,如:了ldl t3,0(t0),这条指令意思就是将寄存器t0中的值加上零后并将其和存储到寄存器t3中,ldl表示指令操作码,寄存器t0表示输入,寄存器t3表示输出;第三中指令:一个输入零个输出,如:bne t1,0x1200eb2b,这条指令意思就是如果寄存器t1中的值不相等零,就转到地址0x1200eb2b处继续执行,bne表示指令操作码,寄存器t1表示输入,0x1200eb2b是跳转地址。
(2)关系分析模块对指令间的依赖关系进行分析并分类
在本方法中主要考虑三中情况,第一种情况:考虑第一种指令和第二种指令之间的依赖关系,再单独考虑第三种指令之间的依赖关系;第二种情况:考虑第二种指令和第三种指令之间的依赖关系,再单独考虑第一种指令之间的依赖关系;第三种情况:考虑第一种指令和第三种指令之间的依赖关系,再单独考虑第二种指令之间的依赖关系。
(3)数据流图分析模块针对第一种情况下的指令间的依赖关系得出数据流图
本方法只实现第一种情况:考虑第一种指令和第二种指令之间的依赖关系,再单独考虑第三种指令之间的依赖关系,主要分为以下几步:
第一步,链表创建器建立链表
文件扫描器对汇编代码文件中的汇编指令逐条进行扫描,扫描的同时链表创建器对每条汇编指令建立指令结点。
指令结点node包含七个域:op域,输入一input1域,输入二input2域,输出output域,寄存器的个数num域,标签tag域,next域。op域用来存放指令中的操作码,输入一input1域和输入二input2域是寄存器值的输入,输出output域是寄存器值的产生者,next域用来存放下一个节点的地址,当在一条指令中有两个相同的寄存器时,看作两个不同的寄存器,因为寄存器的值不相同,在建立链表的同时对标签tag域进行初始化为0,并计算每条指令中寄存器的个数num。
第二步,链表扫描器扫描链表
顺序查找过程:链表扫描器首先判断结点的num域是否等于1,如果等于1,就意味着该条指令只有一个寄存器,也就是只有一个输入,没有输出,属于第三种指令,则建立新的链表,把该结点信息复制到该链表的第一个结点中,如果在扫描过程中第二次遇到结点num域为1的结点,则把结点信息复制到第二个结点中,依次类推;如果不为1,修改第一个结点的标签域tag等于n,并且顺序比较第一个结点的输出域与其余结点的输入域,如果链表扫描器找到一个结点的输入域与第一个结点的输出域相同,则修改该结点的标签域tag等于n,并且把该结点作为第一个结点,顺序比较该结点的输出域与其余结点的输入域,如果相同,则修改该结点的标签域tag等于n。链表扫描器继续顺序查找,一直查找到链表末尾。
链表扫描器返回到链表的头结点,从头结点开始查找,本次查找是查找结点的标签域tag是否被修改过,如果找到结点的标签域tag没有被修改过,则把该结点作为第一个结点,重复上面的顺序查找过程,但是不同的是该结点的标签要修改等于n+1;如果链表扫描器找到标签域tag被修改的结点,则保持原来的值不变,并且在本次查找中,之前标签域tag修改为n+1的结点要重新修改为n,停止本次查找;重复上面的顺序查找过程。
新链表的顺序查找过程和顺序查找第一个链表num域值不为1的查找过程相同。
第三步,数据流图输出模块输出数据流图
数据流图输出模块根据链表中每个结点的标签域tag值的不同,可以得到指令结点的数据流图。数据流图输出模块把具有相同tag值的结点作为一个数据流图,没有相同的则单独作为一个数据流图。
本发明中,分类模块、关系分析模块、数据流图分析模块、链表创建器、文件扫描器、链表扫描器和数据流图输出模块,均为常用的由软件实现的功能性模块。本领域技术人员通过对本申请文本的理解,结合之前已掌握的知识,可以轻易实现有关软件模块的编写,因此不再赘述。
Claims (1)
1、一种基于基本块的汇编代码得出程序的数据流图的实现方法,包括以下步骤:
(1)分类模块对指令进行分类
分类模块根据汇编代码把指令分为三类:第一种指令中有两个输入一个输出;第二种指令中含有一个输入一个输出;第三种指令中含有一个输入零个输出;
(2)关系分析模块对指令间的依赖关系进行分析并分类
指令间的依赖关系存在三种情况:
第一种情况:考虑第一种指令和第二种指令之间的依赖关系,再单独考虑第三种指令之间的依赖关系;
第二种情况:考虑第二种指令和第三种指令之间的依赖关系,再单独考虑第一种指令之间的依赖关系;
第三种情况:考虑第一种指令和第三种指令之间的依赖关系,再单独考虑第二种指令之间的依赖关系;
(3)数据流图分析模块针对第一种情况下的指令间的依赖关系得出数据流图
第一步,链表创建器建立链表
文件扫描器对汇编代码文件中的汇编指令逐条进行扫描,扫描的同时链表创建器对每条汇编指令建立指令结点;
指令结点node包含七个域:op域、输入一input1域、输入二input2域、输出output域、寄存器的个数num域、标签tag域、next域;
op域用来存放指令中的操作码,输入一input1域和输入二input2域是寄存器值的输入,输出output域是寄存器值的产生者,next域用来存放下一个节点的地址;当在一条指令中有两个相同的寄存器时,看作两个不同的寄存器,因为寄存器的值不相同,在建立链表的同时对标签tag域进行初始化为0,并计算每条指令中寄存器的个数num;
第二步,链表扫描器扫描链表
顺序查找过程:链表扫描器首先判断结点的num域是否等于1,如果等于1,则该结点单独作为一个数据流图;如果不为1,则把第一个结点的标签域tag设置为n,并且顺序比较第一个结点的输出域与其余结点的输入域;如果链表扫描器找到一个结点的输入域与第一个结点的输出域相同,则把该结点的标签域tag设置为n,并且把该结点作为第一个结点;顺序比较该结点的输出域与其余结点的输入域,如果相同,则把该结点的标签域tag设置为n;链表扫描器继续顺序查找,一直查找到链表末尾;
链表扫描器返回到链表的头结点,从头结点开始查找,本次查找是查找结点的标签域tag是否被修改过,如果找到结点的标签域tag没有被修改过,则把该结点作为第一个结点,重复上面的顺序查找过程,但是不同的是该结点的标签要修改等于n+1;如果链表扫描器找到标签域tag被修改的结点,则保持原来的值不变,并且在本次查找中,之前标签域tag修改为n+1的结点要重新修改为n,停止本次查找;重复上面的顺序查找过程;
新链表的顺序查找过程和顺序查找第一个链表num域值不为1的查找过程相同;
第三步,数据流图输出模块输出数据流图
数据流图输出模块根据链表中的每个结点的标签域tag值的不同,得到指令结点的数据流图;数据流图输出模块把相同tag值的结点作为一个数据流图,没有相同的则单独作为一个数据流图。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101022990A CN101655782B (zh) | 2009-09-10 | 2009-09-10 | 基于基本块的汇编代码得出程序的数据流图的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101022990A CN101655782B (zh) | 2009-09-10 | 2009-09-10 | 基于基本块的汇编代码得出程序的数据流图的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101655782A true CN101655782A (zh) | 2010-02-24 |
CN101655782B CN101655782B (zh) | 2012-07-18 |
Family
ID=41710081
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101022990A Expired - Fee Related CN101655782B (zh) | 2009-09-10 | 2009-09-10 | 基于基本块的汇编代码得出程序的数据流图的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101655782B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102222108A (zh) * | 2011-06-28 | 2011-10-19 | 用友软件股份有限公司 | 脚本处理方法和脚本处理装置 |
WO2012037732A1 (zh) * | 2010-09-26 | 2012-03-29 | Wang Jiaxiang | 建立数据结构及描述计算机运行状态及其状态迁移的方法 |
CN105389194A (zh) * | 2015-10-19 | 2016-03-09 | 华为技术有限公司 | 一种确定应用程序计算逻辑的方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100337202C (zh) * | 2004-12-03 | 2007-09-12 | 中国科学院计算技术研究所 | 一种汇编代码热函数中的热路径搜寻方法 |
CN101231598B (zh) * | 2008-01-30 | 2010-06-23 | 浙江大学 | 一种基于汇编程序构造语义流程图的方法 |
-
2009
- 2009-09-10 CN CN2009101022990A patent/CN101655782B/zh not_active Expired - Fee Related
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012037732A1 (zh) * | 2010-09-26 | 2012-03-29 | Wang Jiaxiang | 建立数据结构及描述计算机运行状态及其状态迁移的方法 |
CN103080898A (zh) * | 2010-09-26 | 2013-05-01 | 北京中天安泰信息科技有限公司 | 建立数据结构及描述计算机运行状态及其状态迁移的方法 |
CN103080898B (zh) * | 2010-09-26 | 2015-07-08 | 北京中天安泰信息技术有限公司 | 建立数据结构及描述计算机运行状态及其状态迁移的方法 |
US9519569B2 (en) | 2010-09-26 | 2016-12-13 | Antaios (Beijing) Information Technology Co., Ltd. | Method for constructing data structures and method for describing running states of computer and state transitions thereof |
CN102222108A (zh) * | 2011-06-28 | 2011-10-19 | 用友软件股份有限公司 | 脚本处理方法和脚本处理装置 |
CN105389194A (zh) * | 2015-10-19 | 2016-03-09 | 华为技术有限公司 | 一种确定应用程序计算逻辑的方法及装置 |
CN105389194B (zh) * | 2015-10-19 | 2019-02-01 | 华为技术有限公司 | 一种确定应用程序计算逻辑的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101655782B (zh) | 2012-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lemire et al. | Roaring bitmaps: Implementation of an optimized software library | |
US9916145B2 (en) | Utilizing special purpose elements to implement a FSM | |
US9383982B2 (en) | Data-parallel computation management | |
US11074055B2 (en) | Identification of components used in software binaries through approximate concrete execution | |
Evermann et al. | Clustering traces using sequence alignment | |
CN113283613B (zh) | 深度学习模型的生成方法、优化方法、装置、设备及介质 | |
CN109791492B (zh) | 流水线相关树查询优化器和调度器 | |
CN107615240B (zh) | 用于分析二进制文件的基于生物序列的方案 | |
Schätzle et al. | Large-scale bisimulation of RDF graphs | |
Ohmann et al. | Efficient clustering-based source code plagiarism detection using PIY | |
CN110389812B (zh) | 用于管理虚拟机的方法、设备和计算机可读存储介质 | |
CN109542455B (zh) | 合约执行方法、合约精简方法、设备和存储介质 | |
Shahrivari et al. | Distributed discovery of frequent subgraphs of a network using MapReduce | |
US10467272B2 (en) | Detecting longest regular expression matches | |
CN101655782B (zh) | 基于基本块的汇编代码得出程序的数据流图的实现方法 | |
US8266135B2 (en) | Indexing for regular expressions in text-centric applications | |
Guyet et al. | Incremental mining of frequent serial episodes considering multiple occurrences | |
RU2014102136A (ru) | Способ извлечения полезного контента из установочных файлов мобильных приложений для дальнейшей машинной обработки данных, в частности поиска | |
Pibiri et al. | Meta-colored compacted de Bruijn graphs | |
Mathew et al. | Efficient information retrieval using Lucene, LIndex and HIndex in Hadoop | |
Ahmad et al. | Analysis of dynamic web services | |
US9632762B2 (en) | Extending superword level parallelism | |
EP3113038A1 (en) | A data handling method | |
GB2539898A (en) | A data handling method | |
Zhang et al. | MapReduce Implementation of an Improved XML Keyword Search Algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120718 Termination date: 20130910 |