CN1152287C - 二进制程序转换设备和转换方法 - Google Patents
二进制程序转换设备和转换方法 Download PDFInfo
- Publication number
- CN1152287C CN1152287C CNB971211957A CN97121195A CN1152287C CN 1152287 C CN1152287 C CN 1152287C CN B971211957 A CNB971211957 A CN B971211957A CN 97121195 A CN97121195 A CN 97121195A CN 1152287 C CN1152287 C CN 1152287C
- Authority
- CN
- China
- Prior art keywords
- binary program
- instruction
- instruction block
- program
- computing machine
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种二进制程序转换设备,能将一个原始二进制程序转换成一个新的二进制程序,以便在一台带有高速缓冲存储器的目标计算机中以更高速度运行。该二进制程序转换设备由一个执行部分,一个生成部分和一个制作部分组成。执行部分执行该原始二进制程序。生成部分生成用于指示由该执行部分执行的第一指令块的执行块信息。制作部分根据由该生成部分生成的执行块信息,制作新的二进制程序。
Description
技术领域
本发明涉及一种二进制程序转换设备和方法,用于将原始二进制程序转换成新的、在电脑上运行更快的二进制程序。
背景技术
为了改善计算机***的性能,很多年来人们付出许多努力去加速主存储器。然而,高速缓冲存储器的发展已经能够不用加速主存储器而改善计算机***的性能。
高速缓冲存储器是一种位于主存储器和CPU之间的小型快速存储器。在一个带有高速缓冲存储器的计算机***中,当CPU需要一个字(一条指令或数据)时,先检查所需要的字是否在高速缓冲存储器中存在。如果所需要的字在高速缓冲存储器中存在,这个在高速缓冲存储器中的字被送入CPU。另一方面,如果所需要的字在高速缓冲存储器中不存在,则一个固定尺寸的、包含所需要的词的数据块,称为一个块或行,被从主存储器中取回,并放置在该高速缓冲存储器中。然后,在高速缓冲存储器中的、包含在该数据(行)中的所需要的字被送入CPU。
这就是说,程序倾向于重新使用它们最近使用过的指令和数据,并倾向于使用在一个较短时间内、其地址彼此接近的字。(注意前一特性和后一特性分别被称为参考时间局部性和参考空间局部性。)换句话说,CPU在最近的将来执行某一程序时所需要的、在主存储器中的字可以有一定程度的提前。
既然高速缓冲存储器存储这样的字,则带有该高速缓冲存储器的计算机中的CPU可以以不是相对于主存储器的存取速度而是相对于高速缓冲存储器的存取速度的速度得到为执行某个程序所需要的大多数词语。结果,带有一个高速缓冲存储器的计算机的运行速度与不带高速缓冲存储器而带有高速主存储器的***的速度相同。
此外,既然带高速缓冲存储器的计算机只需要小容量的高速存储器,所以使用高速缓冲存储器降低了制造一台具有一定性能的计算机的成本。因而,近年来的大多数计算机都提供有高速缓冲存储器。
再者,近年来个人电脑的普及大大降低了存储器设备的价格。结果,为改善计算机的性能而修改某个程序(软件)使主存储器的利用率得以提高就变得不是很重要。因为,在一台为了发挥大容量的主存储器的作用而安装有许多价格便宜的存储器设备的计算机中,主存储器的利用率非常高,以致于没有影响运行速度。
因此,通过修改某个程序以提高计算机的性能,更有效的方法就是修改程序使高速缓冲存储器的利用率得以提高。也就是说,改进程序的访问局部性,最大限度地发挥高速缓冲存储器的性能变得更加重要。
到目前为止,要改进某台计算机中高速缓冲存储器的利用率,需通过为该计算机开发的编译器来编译源程序。也就是说,要利用这个重编译技术,每个程序用户不仅必须保留二进制程序,这是实际中使用的程序,而且要保留它们的源程序。
此外,由于计算机硬件的进步非常迅速,相应于一个新的计算机结构而开发新的编译器需要时间,很可能在该编译器的开发完成以前,更新的硬件就已开发出来。也就是说,通过传统重编译技术方法的对应并不能赶上硬件的进步,这是一个问题。
出于这些原因,人们希望有一种程序转换技术,它能不使用其源程序,将某个程序转换成适合目标计算机的新程序。
发明内容
本发明的一个目的在于提供一种二进制程序转换设备和一种二进制程序转换方法,它能将原始二进制程序转换成另外一种无需使用该原始二进制程序的源程序的、在计算机中以高速运行的二进制程序。
本发明的另一个目的在于提供一种程序记录媒体,它带有一种使一台计算机象二进制转换设备那样发挥作用的程序。
根据本发明的第一个方面的一种二进制程序转换设备,用于将包含一组第一指令块的某个第一二进制程序转换成在一台具有高速缓冲存储器的计算机中执行的一个第二二进制程序。
该二进制程序转换设备包括一个执行部分,一个生成部分和一个制作部分。该执行部分执行该第一二进制程序。
该生成部分生成用于指示由该执行部分执行的第一指令块的执行块信息。
该制作部分根据由该生成部分生成的执行块信息,制作第二二进制程序,它包含相应于该组第一指令块的第二指令块,并且当在计算机中执行时,使计算机将相应于由该执行部分执行的第一指令块的第二指令块,存储在该高速缓冲存储器的不同位置。
由此,第一个方面的二进制程序转换设备将某个二进制程序(第一二进制程序),通过执行包括重排二进制代码(执行块)的过程,转换成在带有高速缓冲存储器的计算机中快速运行的、新的二进制程序(第二二进制程序)。所以,根据这个二进制程序转换设备,可以无需使用(管理)其源程序而得到适合带有高速缓冲存储器的计算机的二进制程序。
根据第一个方面的该二进制程序转换设备的实现涉及到该制作部分的使用,它制作第二二进制程序,包括相应于由该执行部分执行的第一指令块的第二指令块是连续布置的一个部分。
根据本发明的第一个方面的该二进制程序转换设备还包括一个建立部分和一个控制部分。该建立部分建立一个行数据,用于指示当由该制作部分制作的第二二进制程序在计算机中被执行时,将要被使用的高速缓冲存储器的行。
该控制部分控制该执行部分,以执行一个最初包含一组第三指令块的第三二进制程序。然后,该控制部分控制该生成部分,以生成用于指示由该执行部分执行的第三指令块的第二执行块信息。此外,该控制部分还控制该制作部分,以制作一个第四二进制程序,当在计算机中被执行时,它使计算机将相应于由该执行部分执行的第三指令块的第四指令块存储在除该行数据所指示的行之外的、该高速缓冲存储器的行的不同位置上。
根据所构造的二进制转换设备,在同一时刻执行的两个二进制程序(第一,第三二进制程序),可以被转换成以高速在计算机中运行的、两个新的二进制程序(第二,第四二进制程序)。
该二进制程序转换设备还包括一个识别部分,用于通过监控由该执行部分执行的第一二进制程序的运行状态,识别该高速缓冲存储器的每行的数据存取的使用频率,以及选择部分,它基于该识别部分的识别结果,从该高速缓冲存储器的所有行中选出用于存储相应于由该执行部分执行的第一指令块的第二指令块的行。在这种情况下,采用该制作部分,它制作第二二进制程序,当在计算机中被执行时,该程序使计算机将相应于由该执行部分执行的第一指令块的第二指令块存储在由该选择部分所选出的行的不同位置上。
根据所构造的二进制转换设备,可以得到在一个指令存取和一个数据存取之间不产生或几乎不产生冲突错误的一个新的二进制程序(第二二进制程序)。
此外,当使用该制作部分制作,包括相应于由该执行部分执行的第一指令块的第二指令块是连续布置的一个部分的第二二进制程序时,该二进制程序转换设备可以通过增加一个搜索部分和一个改变部分而构造。
该搜索部分从由该制作部分制作的二进制程序中搜索一个在其结尾包含一个其分支目的地被设置为下一个第二指令块的、条件分支指令的第二指令块。该改变部分改变一个分支条件和该条件分支指令的分支目的地,从而无需分支,产生从该搜索部分搜索出的第二指令块到下一个第二指令块的转移。
根据所构造的二进制转换设备,可以得到以高速运行的一个新的二进制程序(第二二进制程序)。
根据本发明的第二个方面的二进制程序转换设备,用于将一个第一二进制程序转换成一个在计算机中被执行的第二二进制程序。
根据第二个方面的二进制程序转换设备包括一个搜索部分和一个制作部分。该搜索部分用于从该第一二进制程序中搜索第一指令字符串,每一个这种字符串至少包括一个预定的指令代码。该制作部分用于,通过以指定给该第一指令字符串的第二指令字符串替代由该搜索部分搜索出的相应指令字符串,制作该第二二进制程序。
由此,第二个方面的二进制程序转换设备将一个原始的二进制程序(第一二进制程序),通过替换该原始二进制程序中的指令字符串,转换成一个在目标计算机中快速运行的、新的二进制程序(第二二进制程序)。所以,根据这个二进制程序转换设备,可以无需使用(管理)其源程序而得到适合目标计算机的二进制程序。
请注意,本发明的二进制程序转换设备可以通过运行一个记录在一台普通计算机的程序媒体中的相应程序而实现。
根据本发明的第一个方面的二进制程序转换方法,用于将一个包括一组第一指令块的第一二进制程序转换成一个由带有高速缓冲存储器的计算机执行的第二二进制程序。
根据第一个方面的二进制程序转换方法包括一个执行步骤,一个生成步骤和一个制作步骤。在该执行步骤中,该第一二进制程序被执行。在该生成步骤中,生成用于指示在该执行步骤中所执行的第一指令块的执行块信息。在该制作步骤中,基于在该生成步骤中生成的执行块信息,产生第二二进制程序,它包含相应于第一二进制程序的该组第一指令块的第二指令块,并且,当在计算机中被执行时,使计算机将相应于在该执行步骤中所执行的第一指令块的第二指令块存储在高速缓冲存储器的不同位置上。
根据第一个方面的二进制程序转换方法可以采用制作步骤,它涉及制作包括相应于由该执行步骤中执行的第一指令块的第二指令块是连续布置的一个部分的第二二进制程序。
对该程序转换方法增加一个建立步骤和一个控制步骤也是切实可行的。该建立步骤包括建立一个行数据,用于指示当在该制作步骤中所制作的第二二进制程序在计算机中被执行时,该高速缓冲存储器的行的一个过程。该控制步骤包括控制该执行步骤,以执行一个包含一组第三指令块的第三二进制程序,和控制该生成步骤,以生成用于指示在该执行步骤中所执行的第三指令块的第二执行块信息,以及控制该制作步骤,以基于该第二执行块信息和该行数据,制作一个第四二进制程序,它包含相应于该组第三指令块的第四指令块,并且当在计算机中被执行时,使计算机在除该行数据所指示的行之外的、该高速缓冲存储器的行的不同位置上存储相应于由该所述方法所执行的第三指令块的第四指令块的过程。
对根据本发明的第一个方面的二进制程序转换方法,增加一个识别步骤和一个选择步骤也是可以的。
该识别步骤包括通过监控由该执行步骤中所执行的第一二进制程序的运行状态,识别该高速缓冲存储器的每行的数据存取使用的频率的过程。该选择步骤包括,基于该识别步骤的识别结果,从该高速缓冲存储器的所有行中选出用于存储第二指令块的行的过程。顺便说及,在这种情况下,也采用了制作步骤,包括制作第二二进制程序,当在计算机中被执行时,该程序使计算机在该选择步骤所选出的行的不同位置上存储相应于由该执行步骤所执行的第一指令块的第二指令块。
当采用该制作步骤,包括制作相应于由该执行步骤所执行的第一指令块的第二指令块是连续布置的一个部分的第二二进制程序的过程时,对该二进制程序转换方法最好增加一个搜索步骤和一个改变步骤。
该搜索步骤包括搜索一个在其结尾包含一个其分支目的地被设置为下一个第二指令块的、条件分支指令的第二指令块的过程。该改变步骤包括改变一个分支条件和该条件分支指令的分支目的地,从而无需分支,产生从该搜索步骤中所搜索出的第二指令块到下一个第二指令块的转移的过程。
根据本发明的第二个方面二进制程序转换方法,用于将一个第一二进制程序转换成一个在计算机中被执行的第二二进制程序。该二进制程序转换方法包括一个搜索步骤和一个制作步骤。
该搜索步骤包括从该第一二进制程序中搜索第一指令字符串的过程,每一个这种字符串至少包括一个预定的指令代码。该制作步骤通过以指定给该第一指令字符串的第二指令字符串替代由该搜索步骤搜索出的相应指令字符串,制作该第二二进制程序。
附图说明
在以下结合附图的讨论中,本发明的其它目的和优点会变得非常明显。其中;
附图1是说明图,描述了本发明的实施例中的二进制程序转换设备的构造;
附图2显示了由在该实施例的二进制程序转换设备中的记录分析器所生成的文本表的说明图;
附图3显示由该记录分析器生成的数据使用行表的说明图;
附图4显示由该二进制程序转换设备中的一个高速缓存分配器生成的行表的说明图;
附图5显示由该二进制程序转换设备转换的一个二进制程序的说明图;
附图6显示该二进制程序转换设备的运行过程的原理的说明图;
附图7显示该二进制程序转换设备在转换同时执行的两个二进制程序的运行过程中的前半部分的说明图;
附图8显示该二进制程序转换设备在转换同时执行的两个二进制程序的运行过程中的后半部分的说明图;
附图9是流程图,显示该高速缓存分配器的运行过程;
附图10是流程图,显示该二进制程序转换设备中一个目标代码转换程序的整体运行过程;
附图11是由该目标代码转换器实施的块拷贝过程的流程图;
附图12是由该目标代码转换器实施的拷贝过程的流程图;
附图13是由该目标代码转换器实施的分支条件逆过程的流程图;
附图14是由该目标代码转换器实施的CTI再定位过程的流程图;
附图15是由该目标代码转换器实施的分支件预测过程的流程图;
附图16是由该目标代码转换器实施的再定位过程的流程图;
附图17显示该二进制程序转换设备在转换同时执行的两个二进制程序的运行过程中的原理的说明图;
附图18显示当两个可执行的目标程序被该二进制程序转换设备生成时,该高速缓冲存储器是如何被使用的的说明图;
附图19至26是用于描述该二进制程序转换设备的运行过程的部分程序列表;
附图27A,27B显示在转换前后执行的二进制程序时,该高速缓冲存储器是如何被使用的说明图。
具体实施方式
现在结合附图对本发明进行描述。
在一个实施例中的该二进制程序转换设备将某个二进制程序转换成在一台带有高速缓冲存储器的目标计算机中以高速运行的另一个二进制程序。将某个存储在象CD-ROM这样的记录媒体中的程序安装到该目标计算机,即可实现该二进制程序转换设备的功能。
因此,在讨论该二进制程序转换设备的运行过程之前,先描述该实施例中所使用的计算机的构造和结构。
该计算机带有1MB的、划分成行的高速缓冲存储器,每行由连续的64个字节组成。即,该高速缓冲存储器有16384(=1MB/64字节)行。这16384行分别用从0到16383的行数进行管理。
此外,该实施例中的计算机也被虚拟存储器所支持。也就是说,来自CPU的虚拟地址被翻译成实际地址,用于存取主存储器或高速缓冲存储器。
在该计算机中,当CPU需要一个字节的指令/数据时,它先检查该指令/数据是否存在于高速缓冲存储器中。如果该指令/数据在高速缓冲存储器中不存在,则包含该指令/数据的主存储器中的64字节的数据从主存储器被取回,并被放置在高速缓冲存储器中。然后,包含在高速缓冲存储器的该取回数据中的该指令/数据被送入CPU。
存储包含该指令/数据的取回数据的行由所需要的指令/数据的虚拟地址而唯一地决定。实际上,由该高速缓冲存储器的尺寸所划分的虚拟地址的余数被用作存储该取回数据的行的索引。
以下,假定该计算机具有上述的构造和结构,来描述该实施例中二进制程序转换设备的运行。请注意,在以下的讨论中,编译过的源程序(或源代码)表示成目标程序,存储目标程序的文件表示成目标文件。通过连接一个和多个目标程序而得到的可在计算机中执行的程序表示成可执行的目标程序。此外,二进制程序一般将被用作目标程序和可执行的目标程序。
首先,通过给出一个可执行的目标程序被转换的例子来描述该二进制程序转换设备的运行过程的轮廓。
如上所述,将为该二进制程序转换设备开发的二进制程序转换程序安装到计算机上即可实现该二进制程序转换设备的功能。当运行所安装的二进制程序转换程序时,计算机开始运行由一个连接编辑器11,一个简表生成器12,一个记录分析器13,一个高速缓存分配器14和一个目标代码转换器15组成的二进制程序转换设备,如附图1所示。
连接编辑器11将一个与该高速缓冲存储器有相同大小(在该实施例中为1MB)的高速缓冲块区域(以下简称CaB区)增加到待转换的一个可执行的目标程序。实际上,连接编辑器11连接一个伪函数以保证带有待转换的可执行目标程序的该CaB区(以下将详细描述),从而生成另一个可执行的目标程序。连接编辑器11还在该可执行的目标程序中存储有再定位信息(地址常量),已完成该目标代码转换器15的完全的再定位。请注意,在以下的描述中,由连接编辑器11生成的该可执行的目标程序中除CaB区以外的一个区域将被表示成MTXT区。
简表生成器12跟踪(执行)在其中CaB区被保证的该可执行的目标程序,并生成一个包含有关所执行的指令代码的信息的执行简表。
记录分析器13分析由简表生成器12生成的执行简表,并生成一个文本表和一个数据使用行表。该文本表是一张记录了为转换该可执行的目标程序所需的信息的表。实际上,它所保持的记录,每一个都由10项所构成,如附图2所示。数据使用行表所保持的记录,每一个都由高速缓冲行数(“LINE”)和被该高速缓冲行数所决定,该行用于存储数据的次数(“USE”)组成,如附图3所示。
高速缓存分配器14基于由记录分析器13所生成的文本表中的信息,识别由简表生成器11所执行的MTXT区中存储所有的指令块所必需的一个容量(大小)。然后,高速缓存分配器14确定L,它是为保持所执行的指令块所需的最小高速缓冲行数,并基于数据使用行表中的信息、选择、具有最低数据存取使用频率的第一L行。再后,高速缓存分配器14将所选出的行分成若干组,每一组均由连续的行构成,并且生成一个包含用以指示所分类的组的信息的行表。实际上,高速缓冲分配器14生成一个包含记录的行表,每项记录都包括开始行号(“FROM”),结尾行号(“TO”),和由连续行组成的一个区域的行数,如附图4所示。
请注意,当存储所有所执行的指令块所需的尺寸大于该高速缓冲存储器的尺寸时,高速缓存分配器14执行与上述过程不同的过程。以下将详细描述该过程。
在行表生成后,目标代码转换器15开始转换可执行的目标程序的过程。
在转换可执行的目标程序的过程中,目标代码转换器15将简表生成器12所执行的指令块拷贝到与高速缓存分配器14基于该文本表和行表中的信息所选出的高速缓冲行相应的、该CaB区范围内的区域中。然后,目标代码转换器15在其拷贝是在该CaB区中完成的每个指令块的开始位置上写下一个无条件分支指令,使转移到CaB区中该拷贝的起始位置源。此外,目标代码转换器改变CTIs(控制转移指令,分支,调用,jmpl等等)的目标偏移/地址。也就是说,目标代码转换器14修改目标程序使CaB区中该拷贝被执行。
由此生成的可执行的目标程序的运行速度要比转换前的可执行的目标程序更快。原因如下。
例如,假定让该二进制程序转换设备转换一个包含三个在某个运行条件下执行的指令块a,b和c的可执行的目标程序。还假定指令块a和b存在于与高速缓冲存储器中的相同的行相应的位置上,如附图5所示。
在这种情况下,该二进制程序转换设备,如附图6所示,拷贝该CaB区中的指令块a,b和c,从而生成一个新的、其CaB区中的指令块被执行的可执行的目标程序。也就是说,该二进制程序转换设备生成其指令块a,b和c将被存储在该高速缓冲存储器中不同行上的可执行的目标程序。
随后,当运行由该二进制程序转换设备生成的可执行的目标程序时,不会发生由于指令存取之间的冲突而在该高速缓冲存储器中错过的情况。结果,所转换的可执行的目标程序的运行速度要比原始的可执行的目标程序更快。
以下,通过给出两个在同一时刻被执行的可执行的目标程序A和B被转换的例子来更详细地描述该二进制程序转换设备的运行过程。
在这种情况下,如附图7所示,连接编辑器连接伪函数以保证带有可执行的目标程序A和B的CaB区,从而生成可执行的目标程序A′和B′,A′和B′中每个程序都有一个CaB区。此时,要完成目标转换器再定位,连接编辑器将再定位信息(地址常量)存储在每个可执行的目标程序中。
然后,简表生成器单独或同时跟踪该可执行的目标程序A′和B′,并生成一个包含有关所执行的指令代码的信息的一个执行简表。
在生成执行简表后,如附图8所示,记录分析器生成文本表A和B,并基于该执行记录中的信息生成数据使用行表A和B。
此后,基于文本表A和B中的信息,高速缓冲分配器确定该可执行程序的目标程序A′和B′中所执行的指令块的整体尺寸(大小)。然后,如果整体尺寸小于高速缓冲存储器的尺寸(CaB区;本实施例中的1MB),则高速缓冲分配器选出高速缓冲行以用于基于数据使用行表A和B中的信息保持全部执行指令块。再后,它将由所选出的高速缓冲行组成的区域划分成连续行区域,并生成一个包含一个或多个用于指示一个连续行区域的记录的行表。
反之,如果该执行指令块的整体尺寸大于高速缓冲存储器的尺寸,该高速缓存分配器生成一个具有一个记录的行表,该记录由开始行号,结尾行号,和不用选出高速缓冲行的该高速缓冲存储器的行数组成。此外,该高速缓存分配器从所有执行的指令块中选出将要拷贝到CaB区的指令块,并改变文本表A和B的内容以将选择结果通知目标代码转换器。
实际上,如附图9所示,高速缓存分配器首先确定SUMtot,即由该简表生成器基于所有文本表中的信息执行的指令块的尺寸的总额(步骤100)。然后,高速缓冲分配器判断SUMtot>CZ是否满足(步骤101)。这里,CZ是高速缓冲存储器的尺寸。
当SUMtot>CZ满足时(步骤101:T),高速缓存分配器确定一个SUM(X)>CZ得以满足的最大值X,并将X存储为MAXRUN(步骤102)。这里,SUM(X)是该指令块至少被执行X次的尺寸的总额。请注意,高速缓存分配器确定MAXRUN如下。高速缓存分配器首先从所有文本表中取回有关指令块的记录。其次,它使用RUN作为关键词,按降序对所取回的记录进行排序,从而,通过对该排序记录的第一批记录的SZ的值求和,SUM(X)可以得到计算。然后,高速缓存分配器减少X的值计算SUM(X),并将第一次满足不等式SUM(X)>CZ的X的值存储为MAXRUN。
确定MAXRUN之后,高速缓存分配器将记录中有关指令块的RUN的值,它等于或小于MAXRUN,改变为“0”(步骤103)。然后,高速缓存分配器生成包含一个记录,该记录由开始行号,结尾行号,和该高速缓冲存储器的行数组成,的一个行表(步骤104)。即,高速缓冲分配器生成包含一个记录的行表,其中FROM,TO,和LINE的值分别设为0,16383,和16384。生成该行表之后,高速缓存分配器终止附图所示的过程。
另一方面,当SUMtot>CZ没有满足时(步骤101:F),高速缓存分配器确定为保持由简表生成器基于高速缓存组成信息(行尺寸)和SUMtot而执行的所有指令块所必需的行数,L(步骤105)。然后,高速缓冲分配器使用USE作为关键词对所有数据使用行表中的记录按升序进行排序,以选出具有最低USE的第一批L记录(步骤106)。
在L记录选出后,高速缓冲分配器使用行数(LINE)作为关键词对记录按升序进行排序,并将排过序的记录分成若干组,每一组都由一个和多个具有连续行数的记录组成。然后,它确定开始行号,结尾行号,和由每组记录指示的连续行区域的行数(步骤107)。
以后,高速缓存分配器生成一个行表(见附图4),其中每组记录都由开始行号,结尾行号,和按行号的降序放置的一个连续行区域的行数(步骤108),并终止该过程。
在行表生成后,目标代码转换器开始转换可执行的目标程序A′和B′的过程。
如附图8所示,当转换属于待转换的第一个程序的可执行的目标程序A′时,目标代码转换器使用文本表A′和行表。另一方面,当转换待转换的第二个程序的可执行的目标程序B′时,目标代码转换器使用文本表B′,行表和一个在对可执行的目标程序A′的转换过程中生成的行记录A。
以下,结合附图10至16描述由目标代码转换器所执行的转换过程的细节。
当开始转换过程时,如附图10所示,目标转换器首先判断待处理的可执行的目标程序是否是要转换的第一个程序(步骤110)。当目标程序是第一个程序时(步骤110:T),目标代码转换器相继执行一个块拷贝过程(步骤112),一个CTI再定位过程(步骤113),和一个地址常量再定位过程(步骤114)。
附图11显示目标代码转换器在块拷贝过程中的运行步骤。当开始块拷贝过程时,目标代码转换器针对文本表中的一个指令块选出一个记录,并判断RUN(Si)≥1是否满足(步骤120)。这里,Si代表与所选记录相关的一个指令块,RUN(Si)代表在所选记录中的RUN值(指令块被执行的次数)。
当RUN(Si)≥1没有满足时(步骤120:F),目标代码转换器判断是否已完成对所有指令块的处理(步骤127)。当对所有指令块的处理没有完成时(步骤127:F),目标代码转换器返回步骤120,并开始对下一个指令块的处理。
当RUN(Si)≥1满足时(步骤120:T),为了将MTXT区域中的指令块Si拷贝到CaB区,目标代码转换器指令一个拷贝过程。
附图12显示目标代码转换器在拷贝过程中的运行步骤。当开始拷贝过程时,目标代码转换器首先基于行表中的信息和高速缓存组成信息,确定一个拷贝目标地址,从该地址,指令块Si将要被拷贝(步骤130)。然后,目标代码转换器判断指令块Si是否能被布置在包括该拷贝目标地址的CaB区域内的一个连续区域上,并且与行表中一个记录所指示的连续行区域相对应(步骤131)。当指令块Si可以被布置在连续区域中时(步骤131:T),目标代码转换器将指令块Si拷贝到该连续区域中(步骤132),并终止拷贝过程。
当指令块Si不能被布置在连续区域中时(步骤131:F),目标代码转换器将指令块Si划分成若干块,并将所划分的块拷贝到若干连续区域(步骤133)。在这一步骤中,当拷贝除最后一个划分块以外的每一划分块时,目标代码转换器在其中拷贝有所划分的块的连续区域的结尾位置写入一个无条件分支,该无条件分支使转移到下一个将被用于保持下一个划分块的连续区域。然后,它终止拷贝过程。
拷贝过程完成之后,目标代码转换器,如附图11所示,在MTXT区域中指令块Si的开始位置写入一个无条件分支指令,它使转移到CaB区域中的指令块Si(步骤122)。
随后,目标代码转换器确定将要被拷贝到CaB区域的指令块Sj,并计算MADDR(Sj),它是指令块Sj的开始地址(步骤123)。然后,目标代码转换器判断一个分支指令Ci是否被包括在块Si中(步骤124)。
当没有分支指令包括在指令块Si中时(步骤124:F),目标代码转换器判断MADDR(Sj)!=MADDR(Si)+SZ(Si)是否满足(步骤128)。这里,SZ(Si)是指令块Si的尺寸。当MADDR(Sj)!=MADDR(Si)+SZ(Si)满足时(步骤128:T),目标代码转换器在紧临CaB区域中的拷贝指令块Si的位置写入一个无条件分支指令,它使转移到地址“MADDR(Si)+SZ(Si)”(步骤129),并进行步骤127。另一方面,当MADDR(Sj)!=MADDR(Si)+SZ(Si)不满足时,也就是说,MADDR(Sj)=MADDR(Si)+SZ(Si)满足时(步骤128:F),目标代码转换器不写入无条件分支指令就进行步骤127。
当一个分支指令Ci包括在指令块Si中时(步骤124:T),目标代码转换器判断MADDR(Sj)=TADDR(Ci)是否满足(步骤125)。这里,TADDR(Ci)是分支指令Ci的目标地址(分支地址)。当MADDR(Sj)=TADDR(Ci)满足时(步骤125:T),目标代码转换器执行一个分支条件反转过程(步骤126)。
以下结合附图13描述目标代码转换器在分支条件逆过程中的运行步骤。请注意,进行这一过程的理由将在以后描述。
当开始分支条件逆过程时,目标代码转换器首先判断分支指令Ci是否是一个取消的分支指令(步骤140)。该取消的分支指令(延迟无效分支指令)是一个当该分支被采用时指导CPU执行其后续指令(延迟指令),以及当该分支不被采用时不执行后续指令的分支指令。
当分支指令Ci不是一个取消的分支指令时(步骤140:F),目标代码转换器反转该分支Ci的分支条件(步骤143)。另一方面,当分支指令Ci是一个取消的分支指令时(步骤140:T),目标代码转换器反转该分支Ci的分支条件,并去除该取消的限制(步骤141)。然后,目标代码转换器在该分支指令和该延迟指令之间***一个指令“nop”(指导CPU进行无效运行的指令)(步骤142)。
也就是说,在原始程序中的该取消的分支指令是一条仅当某个条件满足时,使CPU执行一个延迟指令的指令。但是,只要该取消的分支指令的分支条件被反转,该反转指令使CPU仅当某个条件不满足时执行该延迟指令。由此,目标代码转换器去除该取消的限制,增加“nop”指令,从而生成指令代码的组合,使CPU仅当某个条件满足时执行该“delay”指令。
在执行步骤142或步骤143后,目标代码转换器判断其分支条件被反转的分支指令是否是一个“bn”(步骤144)。这里,“bn”(永不发生的分支)是一个永远不引起一个分支的分支指令,并且删除该“bn”会导致任何问题。由此,当分支指令是一个“bn”时(步骤144:T),目标代码转换器删除该指令(步骤145)。然后,目标代码转换器判断该分支指令的后续指令是否是一个“nop”(步骤146)。当后续指令是一个“nop”时(步骤146:T),目标代码转换器删除该指令(步骤147),并终止分支条件反转过程。
当所改变的分支指令不是一个“bn”(步骤144:F)或者后续指令不是一个“nop”(步骤146:F),目标代码转换器不删除任何指令而终止该分支条件反转过程。
在该分支条件反转过程终止后,目标代码转换器,如附图11所示,进行步骤127,并判断对所有指令块的处理是否已经完成。当对所有指令块的处理已经完成时(步骤127:T),目标代码转换器终止块拷贝过程,并开始CTI再定位过程。
附图14显示目标代码转换器在该CTI再定位过程中的运行步骤。
在该CTI再定位过程中,目标代码转换器首先选出一个与文本表中的CTI有关的记录,并判断地址TADDR(Ci)处的一个代码是否已经被拷贝到该CaB区(步骤150)。这里,TADDR(Ci)是与所选记录有关的指令Ci的目标地址。
当TADDR(Ci)处的代码已经被拷贝到该CaB区时(步骤150:T),目标代码转换器再定位TADDR(Ci)(步骤151),并对MTXT区域中的指令Ci执行一个分支预测过程(以下将描述细节)(步骤152)。然后,目标代码转换器判断包含指令Ci的指令块Si是否已经被拷贝到该CaB区(步骤153)。当指令块Si已经被拷贝到该CaB区时(步骤153:T),目标代码转换器再定位该CaB区中指令Ci的拷贝的目标地址(步骤154),并对该CaB区中的指令Ci执行分支预测过程(步骤155)。
然后,当对所有CTI的处理没有完成时(步骤156:F),目标代码转换器返回步骤150,并开始处理下一个CTI。另一方面,当对所有CTI的处理完成时(步骤156:T),目标代码转换器生成一个行记录,它保持了用于指示高速缓冲行的、其中的该指令块在当所转换的可执行的目标程序执行时被存储的信息(步骤157),并终止该CTI再定位过程。
在该CTI再定位过程终止后,目标代码转换器,如前所述(见附图10),执行地址常量再定位过程。
在描述地址常量再定位过程之前,先参考附图15描述分支预测过程(步骤152,155)。
当开始分支预测过程时,目标代码转换器首先判断目标计算机中的CPU是否支持一个预测性分支指令(步骤160)。请注意,该预测性分支指令是一个具有一个预测位的、来显示将被采用的分支的可能性是高于或不高于0.5的分支指令。当具有的预测位、显示该可能性高于0.5的该预测性分支指令“BPcc,pt”给出时,支持该预测性分支指令的CPU预取当该分支被采用时将被执行的指令。当具有一个预测位、来显示该可能性不高于0.5的该预测性分支指令“BPcc,pn”给出时,CPU不预取指令而执行该分支指令。
当CPU支持该预测性分支指令时(步骤160:T),目标代码转换器判断BT(Ci)/RUN(Ci)>0.5(“分支指令被采用的次数”/“分支指令被执行的次数”>0.5)是否满足(步骤161)。当BT(Ci)/RUN(Ci)>0.5满足时(步骤161:T),目标代码转换器以“BPcc,pt”重写指令Ci(步骤162),并终止该预测分支过程。另一方面,当BT(Ci)/RUN(Ci)>0.5不满足时(步骤161:F),目标代码转换器以分支指令“BPcc,pn”重写Ci(步骤163),并终止该预测分支过程。
以下参考附图16描述目标代码转换器在地址常量再定位过程中的运行步骤。请注意,执行地址常量再定位过程是为了防止控制被一个以寄存器为条件的分支指令转移到MTXT区域中的一个指令。
当开始地址常量再定位过程时,目标代码转换器在由连接编辑器存储在该可执行的目标程序中的地址常量中选出一个地址常量,并判断该所选的地址常量是否指向其拷贝是在CaB上作出的指令块上的任何位置(步骤170)。当该地址常量指向任何这样的位置时(步骤170:T),目标代码转换器以一个CaB区中的相应地址重写地址常量(步骤171),并进行步骤172。另一方面,当该地址常量不指向任何这样的位置时(步骤170:F),目标代码转换器不重写该地址常量而进行步骤172。
在步骤172中,目标代码转换器判断对所有地址常量的处理是否已经完成(步骤172)。当对所有地址常量的处理没有完成时(步骤172:F),目标代码转换器返回步骤170,并开始处理下一个地址常量。
当识别出对所有地址常量的处理已完成时(步骤172:T),目标代码转换器终止地址常量再定位过程。
当地址常量再定位过程终止时,对目标程序A′的转换过程便完成。即,生成了比目标程序A运行更快的目标程序A″。然后,将开始对下一个可执行的目标程序B′的转换过程,如附图8,10所示。
在这种情况下,由于该目标程序B′不是第一个程序,目标代码转换器进行步骤111,并删除有关将被用于基于在目标程序A′的CTI再定位过程中生成的行记录A中的信息,保持来自行表的目标程序A″中的指令块的高速缓冲行的记录。在更新该行表内容之后,目标代码转换器相继执行块拷贝过程(步骤112),CTI再定位过程(步骤113),和针对可执行的目标程序B′的地址常量再定位过程(步骤114)。
随后,如附图17所示,目标程序B中的该执行的指令块被拷贝到CaB区,所用的方式为,CaB区中该拷贝的指令块,当被执行时,被存储到不用于存储该拷贝的指令块的目标程序A″中的高速缓冲行中。
以下,使用附图19至26所示的程序列表更实际地描述以上讨论的二进制程序转换设备的运行步骤。请注意,在以下的讨论中,为方便起见,假定该二进制程序转换设备(目标代码转换器)在执行其它过程之前,将所有的执行的指令块拷贝到CaB区中。每一程序列表中的符号都是基于一种用于某个计算机结构的汇编语言。
首先,通过给出其列表如附图19所示的一个可执行的目标程序被转换的例子来讨论该二进制程序转换设备的基本运行步骤。请注意,列表中指令“seticc”代表一个用于设置称为条件分支指令的条件代码的指令。指令“be”(分支相等)是一个当一个相等条件满足时产生一个分支的指令。“c-.”跟在“be”之后表示该分支目标的偏移值是一个通过从块c的开始地址减去现有地址(“·”)而得到的值。指令“延迟”是一个与该分支指令同时被执行的延迟指令。甚至当该分支被采用时也执行该“延迟”。也就是说,在一个分支指令和相应的“延迟”被执行时,就执行一个分支目标的指令。
如前所述,当一个程序被转换时,只有由简表生成器执行的指令块被拷贝到CaB区。因此,如果附图19所示的程序中的块a和b由简表生成器所执行,则该程序被修改为附图20所示的程序。也就是说,具有指令块a′和b′的程序,它们是指令块a和b的拷贝,在CaB区中被生成。
然后,执行再定位使指令块a′和b′被执行。结果,附图20所示的程序被修改为附图21所示的程序。
也就是说,一个使转移到CaB区中的块a′的无条件分支指令“ba,aa′-·”被设置在MTXT区中块a的开始地址(*1)。类似的,一个使转移到块b′的无条件分支指令“ ba,a b′-·”被设置在块b的开始地址(*2)。请注意,指令“ba,a a′-·”中或“ba,a b′-·”中的“,a”代表该指令是一个使CPU不执行其后续指令的取消分支指令。
此外,块a′中分支指令的目标偏移值被重写,从而使控制转移到MTXT区中的块c(*3)。关于CaB区中的块b′,既然紧跟块b之后的块c没有拷贝到CaB区,则无条件分支指令“ba,a c-·”被增加到其末尾(*4)。
以下,通过给出附图19所示的程序中块a和c由简表生成器所执行的一个例子来描述该分支条件反转过程中的运行步骤。
在这种情况下,附图19所示的程序被转换成附图22所示的程序。也就是说,对块a′和c′的无条件分支指令被设置在MTXT区中块a和c中的开始地址(*5,*7)处。此外,由于块a中的分支指令“be”的分支目标是其拷贝在CaB区中作出的指令块c,分支指令的目标偏移值被重写,从而该分支指令使转移到该指令块c′(*6)。
进一步,由于块b′中的分支指令“be”的目标是其拷贝在CaB区中和在CaB区紧接块b′的位置作出的指令块c,该指令被分支指令“bne”(分支不相等)替代,其目标偏移值被重写,从而使一个分支在该分支条件反转过程中导向MTXT区中的块b(*8)。
以下,通过给出将附图23所示的程序提供给该二进制程序转换设备和由简表生成器所执行的块a和c的一个例子来描述对一个取消的分支指令的分支条件反转过程中的运行步骤。
在这种情况下,该二进制程序转换设备生成附图24所示的程序。也就是说,关于MTXT区中的指令块a和c,类似于程序不包括一个取消的分支指令的情况,增加无条件分支指令和再定位目标偏移值(见附图22)。
然后,关于块a′中该取消的分支指令“be,a c-·”(图中未画出),由于其分支目标(即块c)被拷贝到紧接块b′的位置,其分支条件被反转,该取消的限制被去除。也就是说,该取消的分支指令“be,a”被未取消的分支指令“bne”所取代。此外,“bne”的目标偏移值被重写,从而使一个分支转移到向MTXT区中的块b(*9)。再者,指令“nop”***进所修改的分支指令和指令“delay”之间(*10)。
因此,当所转换的程序是在块a′中的分支指令“bne b-”产生一个分支的情况下被执行时,其后续指令“nop”被执行,但指令“delay”不执行。另一方面,当该程序是在分支指令“bne b-”不产生一个分支的情况下被使用时,指令“delay”被执行。所以,由该二进制程序转换设备生成的程序按照原始程序的方式控制CPU。
以下,通过给出将附图25所示的程序提供给该二进制程序转换设备和程序中块a和c被简表生成器所执行的一个例子来描述分支预测过程中的运行步骤。请注意,在以下的描述中,假定所执行的指令块中分支指令的BT/RUN值(*11,*12)大于0.5。
在这种情况下,附图25所示的程序被转换成附图26所示的程序。即,首先,对该程序进行,将所执行的指令块拷贝到CaB区,再定位,反转分支指令的分支条件。随后,所处理的程序中对MTXT区中具有很高可能性转移的分支指令“be”和“bg”分别被相应的预测分支指令“be,pt”和“bg,pt”所替代(*13,*14)。块c′中所拷贝的分支指令“bg”也被相应的预测分支指令“bg,pt”所替代(*16)。另一方面,关于块a′中所拷贝的分支指令,由于已经进行对分支条件的反转处理,则执行预测分支指令”bne,pn”的替换(*15)。
如上的详细讨论,该二进制程序转换设备,当被提供一个或多个目标程序用于转换时,对每个目标程序在该高速缓冲存储器中的不同位置增加一个将被存储的CaB区字,并检查将被执行的指令块。然后,如果将被执行的指令块的整体尺寸不大于该高速缓冲存储器的尺寸,它将部分将被执行的指令块拷贝到CaB区,并修改若干指令代码,从而使该CaB区的指令块的拷贝被使用。如果将被执行的指令块的整体尺寸小于该高速缓冲存储器的尺寸,它将所有将被执行的指令块拷贝到CaB区,从而使该拷贝被存储在不经常用于存储数据的高速缓冲行中,并并修改若干指令代码,从而使该CaB区的指令块的拷贝被使用。
因此,根据本二进制程序转换设备,可以得到一个和多个新的目标程序,由于指令存取之间的冲突,它们在将被执行的指令块的整体尺寸大于原始目标程序中该高速缓冲存储器的尺寸的情况下,比其原始目标程序具有较低的错误率。此外,在将被执行的指令块的整体尺寸小于原始目标程序中该高速缓冲存储器的尺寸的情况下,可以得到由于指令存取之间的冲突不产生错误以及由于指令存取和数据存取之间的冲突产生更少的错误的新的目标程序。
此外,由于通过将指令块压缩到CaB区来进行转换,由该二进制程序转换设备生成的目标程序与其原始程序相比,只占用极小的高速缓冲存储器的容量用于存储不必要的指令块。换句话说,该二进制程序转换设备生成的目标程序充分有效地利用了高速缓冲存储器的行。
例如,根据本二进制程序转换设备,在附图27A所示的条件下为高速缓冲存储器所利用的一个目标程序被转换成在附图27B所示的条件下为高速缓冲存储器所利用的一个新的目标程序。
请注意,在附图27A和27B中,“line”列中的值代表高速缓冲存储器的一个行号,“wi”(i=0-15)列中的值代表在相应的高速缓冲行中存取第i个字(4个字节)的次数。“access”列中的值代表在相应的高速缓冲行中存取第0个字至第15个字的次数的总额。“wc”列中的值代表在相应的高速缓冲行中所存取的(所使用的)字数。“n”列中的值代表存储在相应的高速缓冲行中的程序行数。即,其“n”的值大于1的一个高速缓冲行是一个被另一个程序行替换过几次(至少一次)的行。
如附图27A所示,当在转换前运行目标程序时,会出现几次一个高速缓冲行被用于保持一个包含许多不必要的字的程序行(见“wc”的值)。
另一方面,由于该二进制程序转换设备将待执行的指令块压缩到CaB区,从而生成一个新的目标程序,则当运行该生成的新的目标程序时,每一高速缓冲行都被用于保持一个不包含或几乎不包含不必要的词的程序行,如附图27B所示。事实上,高速缓冲行的字使用率的平均值,如附图27B所示,是94.4%(15.1个词/行),而对原始目标程序来说是59.4%(9.5个词/行)。因此,根据本二进制程序转换设备可以得到具有很高的字使用率的目标程序。
请注意,新的目标程序由该二进制程序转换设备生成时,包括在相对于附图27A所示具有值3698的“line”和15的“wc”的行的(第二行)原始目标程序中程序行中的指令代码被存储在其行数是9742的高速缓冲行的第10个至第15个字中,以及其行数是9743的高速缓冲行的第0个至第9个字中,包括在相对于第三,第五,第六,第八,第十,第十二,和第十五排的程序行中的指令代码和被存储的指令代码将被存储在其行数是9743-9748的高速缓冲行内,剩余的指令代码将被存储在行数为9742,9728和9729的高速缓冲行中的剩余字(指令代码不被分配的字)中。
此外,该二进制程序转换设备修改目标程序,使因采用分支转移控制的频率变低,并用新的,更合适的指令代码替换一些指令代码,这些修改同样提高了目标程序的速度。
也就是说,由于一般而言,因采用一个分支,控制转移到较远的地址要比控制转移到下一个地址需要更长的时间,修改分支指令将提高目标程序的速度。此外,经常有这样的情况,即,一个指令代码(或一个指令代码组合)不能被一个目标CPU快速执行,但该代码(或组合)能被另一个CPU快速执行。同样也存在这样的情况,目标CPU通常有一个可选择的该代码的指令代码。结果,替换指令代码也提高了目标程序的速度。
因此,根据本实施例中的二进制程序转换设备,因为对原始二进制程序可作出各种优化,所以可以很方便地得到在目标计算机中以极高速度运行的新的二进制程序。
应当注意,这里所讨论的二进制转换技术可以应用于本实施例的计算机之外的各种计算机。
例如,本实施例中的计算机带有每行64字节,16384行的高速缓冲存储器。当然,本技术也可应用于带有任意行和尺寸的高速缓冲存储器的计算机。此外,有些计算机在CPU和主存储器之间带有多级(通常为两级)高速缓冲存储器。该技术也可应用于这样的计算机。
此外,本实施例中的高速缓冲存储器是一个存储数据和指令的集成型高速缓冲存储器,本技术也可应用于带有所谓由一个保持数据的数据高速缓冲,和一个保持指令的指令高速缓冲组成的分离型高速缓冲存储器的计算机。当将本技术应用于这样的计算机时,使用行表的数据处理过程可以省略,因为在该分离型高速缓冲存储器中不会发生由于一个指令存取和一个数据存取之间的冲突而出现错误的情况。
该技术可应用于带有成组关联高速缓冲或完全关联高速缓冲的计算机,因为本实施例中的计算机具有直接映象高速缓冲(等同于单路成组关联高速缓冲)。在这类高速缓冲存储器中,一个放置有包含所需字的高速缓冲行不能由该所需的字的一个地址所决定。但是,一组(一组高速缓冲行)放置有包含所需字的高速缓冲行能由该地址所决定,并且该行被放置在位于该组中并不用于存储一行的一个高速缓冲行上。
结果,关于这些高速缓冲存储器,一个将被用于保持该行的高速缓冲行可以基于该所需字的地址而指定。因此,本技术可以应用于带有成组关联或完全关联高速缓冲存储器的计算机。
事实上,本技术可以应用于带有不是虚拟高速缓冲而是使用物理地址进行索引的物理高速缓冲存储器的计算机。
简而言之,该二进制转换技术可以应用于其中该高速缓冲存储器中的一个所需字的存储位置可由其地址猜出的每一种计算机。
还应当注意,该技术的一部分可以应用于不带高速缓冲存储器的计算机。例如,在分支预测过程中所演示的替代技术,对不带高速缓冲存储器的计算机同样有效。因为,利用本技术,包含不适用于目标计算机的指令代码的一个原始目标程序,可以被转换成一个新的包含适用于该计算机的指令代码的目标程序。
Claims (12)
1.一种二进制程序转换设备,用于将一个由一组第一指令块组成的第一二进制程序转换成一个由带有高速缓冲存储器的计算机执行的第二二进制程序,包括:
执行部分,用于执行该第一二进制程序;
生成部分,用于生成指示由该执行部分执行的第一指令块的执行块信息;和
制作部分,用于根据由该生成部分生成的执行块信息,制作第二二进制程序,它包含相应于该组第一指令块的第二指令块,并且当在计算机中执行时,使计算机将相应于由该执行部分执行的第一指令块的第二指令块,存储在该高速缓冲存储器的不同位置。
2.根据权利要求1的二进制程序转换设备,其中所述的制作部分制作第二二进制程序,包括相应于由该执行部分执行的第一指令块的第二指令块是连续布置的一个部分。
3.根据权利要求1的二进制程序转换设备,还包括:
建立部分,用于建立一个行数据,它指示当由该制作部分制作的第二二进制程序在计算机中被执行时,将要被使用的高速缓冲存储器的行;和
控制部分,用于控制所述的执行部分,使其执行一个由一组第三指令块组成的第三二进制程序,还用于控制所述的生成部分,使其生成指示由所述的执行部分执行的第三指令块的第二执行块信息,还用于控制所述的制作部分,使其基于第二执行块信息和行数据,制作一个第四二进制程序,它包含相应于所述组第三指令块的第四指令块,并且当在计算机中被执行时,它使计算机将相应于由该执行部分执行的第三指令块的第四指令块存储在除该行数据所指示的行之外的、该高速缓冲存储器的行的不同位置上。
4.根据权利要求1的二进制程序转换设备,还包括:
识别部分,用于通过监控由所述执行部分执行的第一二进制程序的运行状态,识别该高速缓冲存储器的每行的数据存取的使用频率;和
选择部分,用于基于所述识别部分的识别结果,从该高速缓冲存储器的所有行中选出用于存储相应于由所述执行部分执行的第一指令块的第二指令块的行,以及
其中所述的制作部分制作第二二进制程序,当在计算机中被执行时,该程序使计算机将相应于由所述的执行部分执行的第一指令块的第二指令块存储在由所述选择部分所选出的行的不同位置上。
5.根据权利要求2的二进制程序转换设备,还包括:
搜索部分,用于从由所述制作部分制作的二进制程序中搜索一个在其结尾包含一个其分支目的地被设置为下一个第二指令块的、条件分支指令的第二指令块;和
改变部分,用于改变一个分支条件和该条件分支指令的分支目的地,从而无需分支,产生从所述搜索部分搜索出的第二指令块到下一个第二指令块的转移。
6.一种二进制程序转换设备,用于将一个第一二进制程序转换成一个在计算机中执行的第二二进制程序,包括:
一个搜索部分,用于从该第一二进制程序中搜索第一指令字符串,每一个这种字符串至少包括一个预定的指令代码;和
一个制作部分,用于通过以指定给该第一指令字符串的第二指令字符串替代由所述搜索部分搜索出的相应指令字符串,制作该第二二进制程序,其中所述指令字符串在其末尾包括一个条件分支指令。
7.一种二进制程序转换方法,用于将一个由一组第一指令块组成的第一二进制程序转换成一个由带有高速缓冲存储器的计算机执行的第二二进制程序,包括:
一个执行步骤,执行该第一二进制程序;
一个生成步骤,生成用于指示在该执行步骤中所执行的第一指令块的执行块信息;和
一个制作步骤,基于在该生成步骤中生成的执行块信息,制作第二二进制程序,它包含相应于第一二进制程序的该组第一指令块的第二指令块,并且,当在计算机中被执行时,使计算机将相应于在该执行步骤中所执行的第一指令块的第二指令块存储在高速缓冲存储器的不同位置上。
8.根据权利要求7的二进制程序转换方法,其中制作步骤涉及制作包括相应于由该执行步骤中执行的第一指令块的第二指令块是连续布置的一个部分的第二二进制程序。
9.根据权利要求7的二进制程序转换方法,进一步包括下列步骤:
建立步骤,建立一个行数据,用于指示当在该制作步骤中所制作的第二二进制程序在计算机中被执行时,该高速缓冲存储器的行;和
一个控制步骤,控制该执行步骤,执行一个包含一组第三指令块的第三二进制程序,和控制该生成步骤,生成用于指示在该执行步骤中所执行的第三指令块的第二执行块信息,以及控制该制作步骤,基于该第二执行块信息和该行数据,制作一个第四二进制程序,它包含相应于该组第三指令块的第四指令块,并且当在计算机中被执行时,使计算机在除该行数据所指示的行之外的、该高速缓冲存储器的行的不同位置上存储相应于由所述执行步骤所执行的第三指令块的第四指令块。
10.根据权利要求7的二进制程序转换方法,进一步包括下列步骤:
一个识别步骤,通过监控由该执行步骤中所执行的第一二进制程序的运行状态,识别该高速缓冲存储器的每行的数据存取的使用频率;和
一个选择步骤,基于该识别步骤的识别结果,从该高速缓冲存储器的所有行中选出用于存储第二指令块的行,以及
其中制作步骤涉及制作第二二进制程序,当在计算机中被执行时,该程序使计算机在该选择步骤所选出的行的不同位置上存储相应于由该执行步骤所执行的第一指令块的第二指令块。
11.根据权利要求8的二进制程序转换方法,进一步包括下列步骤:
一个搜索步骤,搜索一个在其结尾包含一个其分支目的地被设置为下一个第二指令块的、条件分支指令的第二指令块;和
一个改变步骤,改变一个分支条件和该条件分支指令的分支目的地,从而无需分支,产生从该搜索步骤中所搜索出的第二指令块到下一个第二指令块的转移。
12.一种二进制程序转换方法,用于将一个第一二进制程序转换成一个在计算机中被执行的第二二进制程序,包括;
一个搜索步骤,从该第一二进制程序中搜索第一指令字符串,每一个这种字符串至少包括一个预定的指令代码;和
一个制作步骤,通过以指定给该第一指令字符串的第二指令字符串替代由该搜索步骤搜索出的相应指令字符串,制作该第二二进制程序,其中所述指令字符串在其末尾包括一个条件分支指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP285670/1996 | 1996-10-28 | ||
JP285670/96 | 1996-10-28 | ||
JP28567096 | 1996-10-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1181528A CN1181528A (zh) | 1998-05-13 |
CN1152287C true CN1152287C (zh) | 2004-06-02 |
Family
ID=17694540
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB971211957A Expired - Fee Related CN1152287C (zh) | 1996-10-28 | 1997-10-27 | 二进制程序转换设备和转换方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US6591414B2 (zh) |
EP (1) | EP0838755B1 (zh) |
KR (1) | KR100297172B1 (zh) |
CN (1) | CN1152287C (zh) |
DE (1) | DE69735342T2 (zh) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2344907A (en) * | 1998-12-19 | 2000-06-21 | Int Computers Ltd | Instruction translation and execution mechanism |
US7275246B1 (en) * | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US6826748B1 (en) | 1999-01-28 | 2004-11-30 | Ati International Srl | Profiling program execution into registers of a computer |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US8121828B2 (en) | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
US6675377B1 (en) * | 1999-09-13 | 2004-01-06 | Matsushita Electric Industrial Co., Ltd. | Program conversion apparatus |
US6415379B1 (en) * | 1999-10-13 | 2002-07-02 | Transmeta Corporation | Method and apparatus for maintaining context while executing translated instructions |
KR100345401B1 (ko) * | 1999-10-19 | 2002-07-26 | 한국전자통신연구원 | 바이너리 프로그램 변환 장치 및 그 방법 |
JP2001273138A (ja) * | 2000-03-24 | 2001-10-05 | Fujitsu Ltd | プログラム変換装置および方法 |
JP2001344120A (ja) * | 2000-05-30 | 2001-12-14 | Hitachi Ltd | プログラム制御システム及びプログラム制御方法 |
GB2364852A (en) * | 2000-07-14 | 2002-02-06 | Nokia Mobile Phones Ltd | Alert signal generation |
US6834383B2 (en) * | 2001-11-26 | 2004-12-21 | Microsoft Corporation | Method for binary-level branch reversal on computer architectures supporting predicated execution |
CA2724141A1 (en) * | 2003-03-10 | 2004-09-23 | Mudalla Technology, Inc. | Dynamic configuration of a gaming system |
US6925928B2 (en) * | 2003-09-18 | 2005-08-09 | Anthony Fox | Trash compactor for fast food restaurant waste |
US20070216696A1 (en) * | 2006-03-16 | 2007-09-20 | Toshiba (Australia) Pty. Limited | System and method for document rendering employing bit-band instructions |
US8719807B2 (en) * | 2006-12-28 | 2014-05-06 | Intel Corporation | Handling precompiled binaries in a hardware accelerated software transactional memory system |
US8286152B2 (en) * | 2007-08-22 | 2012-10-09 | International Business Machines Corporation | Systems, methods, and computer products for just-in-time compilation for virtual machine environments for fast application startup and maximal run-time performance |
JP5082716B2 (ja) * | 2007-09-20 | 2012-11-28 | 富士通セミコンダクター株式会社 | プログラム変換装置、プログラム変換方法およびプログラム変換プログラム |
US8700860B2 (en) * | 2009-10-16 | 2014-04-15 | Canon Kabushiki Kaisha | Information processing apparatus, method and computer program |
JP5778983B2 (ja) * | 2011-05-17 | 2015-09-16 | キヤノン株式会社 | データ処理装置、データ処理装置の制御方法、およびプログラム |
US8661222B2 (en) * | 2011-09-13 | 2014-02-25 | International Business Machines Corporation | Data object profiling during program execution |
JP2013079860A (ja) | 2011-10-04 | 2013-05-02 | Advantest Corp | ソケット及び電子部品試験装置 |
US20130138888A1 (en) * | 2011-11-30 | 2013-05-30 | Jama I. Barreh | Storing a target address of a control transfer instruction in an instruction field |
WO2013130548A2 (en) * | 2012-02-27 | 2013-09-06 | University Of Virginia Patent Foundation | Method of instruction location randomization (ilr) and related system |
US8954546B2 (en) | 2013-01-25 | 2015-02-10 | Concurix Corporation | Tracing with a workload distributor |
US8997063B2 (en) | 2013-02-12 | 2015-03-31 | Concurix Corporation | Periodicity optimization in an automated tracing system |
US8924941B2 (en) | 2013-02-12 | 2014-12-30 | Concurix Corporation | Optimization analysis using similar frequencies |
US20130283281A1 (en) | 2013-02-12 | 2013-10-24 | Concurix Corporation | Deploying Trace Objectives using Cost Analyses |
US9665474B2 (en) | 2013-03-15 | 2017-05-30 | Microsoft Technology Licensing, Llc | Relationships derived from trace data |
CN104063234B (zh) * | 2013-03-19 | 2017-06-27 | 华为技术有限公司 | 一种兼容方法及装置 |
US9575874B2 (en) | 2013-04-20 | 2017-02-21 | Microsoft Technology Licensing, Llc | Error list and bug report analysis for configuring an application tracer |
US9292415B2 (en) | 2013-09-04 | 2016-03-22 | Microsoft Technology Licensing, Llc | Module specific tracing in a shared module environment |
WO2015071778A1 (en) | 2013-11-13 | 2015-05-21 | Concurix Corporation | Application execution path tracing with configurable origin definition |
US10209962B2 (en) | 2017-02-06 | 2019-02-19 | International Business Machines Corporation | Reconstructing a high level compilable program from an instruction trace |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5212794A (en) * | 1990-06-01 | 1993-05-18 | Hewlett-Packard Company | Method for optimizing computer code to provide more efficient execution on computers having cache memories |
US5317738A (en) * | 1992-02-18 | 1994-05-31 | Ncr Corporation | Process affinity scheduling method and apparatus |
JP3206100B2 (ja) | 1992-05-19 | 2001-09-04 | 東レ株式会社 | 自動車ラジエタータンクトップおよびベース |
US5752038A (en) * | 1994-03-16 | 1998-05-12 | Microsoft Corporation | Method and system for determining an optimal placement order for code portions within a module |
US6129458A (en) * | 1994-03-23 | 2000-10-10 | At&T Global Information Solutions Company | Cache optimization method |
US5664191A (en) * | 1994-06-30 | 1997-09-02 | Microsoft Corporation | Method and system for improving the locality of memory references during execution of a computer program |
US5842017A (en) * | 1996-01-29 | 1998-11-24 | Digital Equipment Corporation | Method and apparatus for forming a translation unit |
US5815720A (en) * | 1996-03-15 | 1998-09-29 | Institute For The Development Of Emerging Architectures, L.L.C. | Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system |
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
US5765204A (en) * | 1996-06-05 | 1998-06-09 | International Business Machines Corporation | Method and apparatus for adaptive localization of frequently accessed, randomly addressed data |
-
1997
- 1997-10-03 US US08/943,207 patent/US6591414B2/en not_active Expired - Fee Related
- 1997-10-15 EP EP97308175A patent/EP0838755B1/en not_active Expired - Lifetime
- 1997-10-15 DE DE69735342T patent/DE69735342T2/de not_active Expired - Lifetime
- 1997-10-24 KR KR1019970054724A patent/KR100297172B1/ko not_active IP Right Cessation
- 1997-10-27 CN CNB971211957A patent/CN1152287C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP0838755B1 (en) | 2006-03-01 |
CN1181528A (zh) | 1998-05-13 |
EP0838755A3 (en) | 2000-05-24 |
EP0838755A2 (en) | 1998-04-29 |
US20010003822A1 (en) | 2001-06-14 |
DE69735342D1 (de) | 2006-04-27 |
DE69735342T2 (de) | 2006-08-03 |
KR100297172B1 (ko) | 2001-08-07 |
KR19980033137A (ko) | 1998-07-25 |
US6591414B2 (en) | 2003-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1152287C (zh) | 二进制程序转换设备和转换方法 | |
CN1302385C (zh) | 编译装置 | |
CN1613058A (zh) | 配有jit编译器的虚拟计算机,操作所述计算机的方法以及包括所述虚拟计算机的终端设备 | |
CN1287257C (zh) | 用于算术表达式优化的方法和装置 | |
CN100340975C (zh) | 计算机***、编译器装置以及编译方法 | |
CN1127016C (zh) | 计算机处理装置和方法 | |
CN1752934A (zh) | 编译器、编译方法以及编译程序 | |
CN1141647C (zh) | 赋予高级微处理器内存储器数据别名的方法和装置 | |
CN1265290C (zh) | 优化链接后代码的方法 | |
CN1570870A (zh) | 终极管道和最优重排技术 | |
CN1879092A (zh) | 高速缓冲存储器及其控制方法 | |
CN1783012A (zh) | 程序转换器件及方法、程序转换执行器件及转换执行方法 | |
CN1609796A (zh) | 应用编程接口(api)的设计 | |
CN1234548A (zh) | 混合执行堆栈及异常处理 | |
CN1677364A (zh) | 对代码覆盖使用硬件辅助的自主测试用例反馈的方法和设备 | |
CN1672150A (zh) | 用于软件原子化的视图 | |
CN1218222A (zh) | 数据序列产生方法及设备、转换方法及计算机 | |
CN1922574A (zh) | 无需额外的代码分析来进行链接时代码优化的方法和*** | |
CN101055588A (zh) | 获取限制词信息的方法、优化输出的方法和输入法*** | |
CN1392985A (zh) | 多处理器***、数据处理***、数据处理方法和计算机程序 | |
CN1278226C (zh) | 模拟装置、模拟方法 | |
CN1143774A (zh) | 优化器 | |
CN1584884A (zh) | 检索结构化文档的数据的设备和方法 | |
CN1140870C (zh) | 处理器及程序翻译装置 | |
CN1823322A (zh) | 用于程序代码转换的共享代码缓存方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
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: 20040602 Termination date: 20101027 |