CN101398752A - 重叠指令存取单元和重叠指令存取方法 - Google Patents
重叠指令存取单元和重叠指令存取方法 Download PDFInfo
- Publication number
- CN101398752A CN101398752A CNA2007101532034A CN200710153203A CN101398752A CN 101398752 A CN101398752 A CN 101398752A CN A2007101532034 A CNA2007101532034 A CN A2007101532034A CN 200710153203 A CN200710153203 A CN 200710153203A CN 101398752 A CN101398752 A CN 101398752A
- Authority
- CN
- China
- Prior art keywords
- instruction
- section
- condensed
- program
- processing unit
- 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 67
- 230000006837 decompression Effects 0.000 claims abstract description 90
- 230000006835 compression Effects 0.000 claims abstract description 26
- 238000007906 compression Methods 0.000 claims abstract description 24
- 230000006870 function Effects 0.000 claims description 25
- 230000004044 response Effects 0.000 claims description 10
- 230000005540 biological transmission Effects 0.000 claims description 2
- 238000007689 inspection Methods 0.000 claims 2
- 230000008569 process Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 3
- 238000001914 filtration Methods 0.000 description 2
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction 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
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3846—Speculative instruction execution using static prediction, e.g. branch taken strategy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种重叠指令存取单元和方法以及用于对程序进行压缩和存储的方法和装置。所述重叠指令存取单元用于执行以多个压缩程序段的形式存储在存储器中的程序,并且包括:缓冲器;处理单元,发送指令读取请求,从缓冲器读取指令并执行该指令;解压缩单元,响应于处理单元的指令读取请求而从存储器中读取所请求的压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令段存储在缓冲器中,其中在处理单元执行所述指令段的同时,解压缩单元根据与该指令段对应的首标中的要调用的压缩程序段的存储地址,从存储器中读取对应的压缩指令段,将该压缩指令段解压缩,并将解压缩后的指令段存储在缓冲器中以供处理单元随后使用。
Description
技术领域
本发明涉及一种重叠指令存取单元和重叠指令存取方法、以及用于对程序进行压缩和存储的装置和方法。
背景技术
随着片上系统(SOC)的规模的增大和SOC的应用程序的发展,需要将嵌入式处理器集成到整个系统中,以便基于优化的指令和结构来提供高性能。这种通用架构之一是将数字信号处理器(DSP)集成到系统中。在这种平台上构建的应用程序可以利用由DSP提供的高性能来对数字媒体进行处理。
将处理单元集成到系统中提高了SOC的可编程性。然而,对于用于存储这些处理器单元执行的指令的存储器的需求也相应地增大,这是因为每个处理单元都需要单独的指令存储器来存储用于执行的指令。对于多核架构下的单程序多数据应用(SPMD)而言,问题更加严重。在这种情况下,由于多核处理器的每个处理单元都需要读取和执行相同的程序,因此需要将所述程序复制到用于每个处理单元的指令缓冲器中以供其执行,这增大了对于指令存储器的需求。由于指令存储器是系统成本的主要来源(特别是SPMD模型),因此,将处理单元集成到系统中相应地增大了系统的成本。
因此,需要一种减小对于指令存储器的需求的方法。
发明内容
考虑到上述问题而提出了本发明。本发明的一个目的是提供一种用于对程序进行压缩和存储的方法和系统,其能够以压缩程序段的形式存储要由处理单元执行的程序,从而减小了对用于存储所述程序的存储器的需求。本发明的另一目的是提供一种重叠指令存取单元和重叠指令存取方法,其通过以重叠的方式进行对于当前解压缩的指令段的执行和对于接下来要调用的压缩指令段的解压缩而提高程序执行的效率。
具体地说,本发明利用了编译器技术和重叠存取技术来解决上述问题。具体地说,本发明利用编译器来将程序分为多个指令段,压缩这些指令段,并且将压缩后的指令段存储在存储器中,而不是像原来那样将程序直接存储在存储器中。此外,由于程序被以压缩指令段的形式存储,因此为了不降低处理单元的执行所述程序的效率,本发明使用了重叠存取技术,即,在处理单元执行当前指令段的同时,解压缩单元将接下来要调用的压缩指令段预先解压缩和存储在缓冲器中以供处理单元随后使用。
根据本发明的一个方面,提供了一种用于对程序进行压缩和存储的方法,包括以下步骤:编译该程序;利用程序中的跳转指令将编译后的程序的指令部分划分为多个指令段;压缩所述多个指令段以获得多个压缩指令段;以及将所述多个压缩指令段存储在存储器中。
根据本发明的另一方面,提供了一种用于对程序进行压缩和存储的装置,包括:编译器,用于编译该程序,利用程序中的跳转指令将编译后的程序的指令部分划分为多个指令段,并且压缩所述多个指令段以获得多个压缩指令段;以及存储器,用于存储所述多个压缩指令段。
根据本发明的另一方面,提供了一种由包括处理单元、缓冲器和解压缩单元的重叠指令存取单元执行的重叠指令存取方法,用于读取和执行以多个压缩程序段的形式存储在存储器中的程序,其中,每个压缩程序段包括开头处的首标、压缩指令段和末尾处的跳转指令,所述首标包含基于程序中的调用关系预测的接下来要调用的压缩程序段的存储地址和所述压缩指令段的存储地址,所述跳转指令包含在编写所述程序时指定的接下来要调用的压缩程序段的存储地址,所述重叠指令存取方法包括:由处理单元发出指令读取请求;由解压缩单元响应于所述指令读取请求而从存储器中读取所请求的压缩指令段,将其解压缩,并且将解压缩后的指令段存储在缓冲器中以供处理单元执行;以及由处理单元从缓冲器中读取和执行所述指令段,同时,由解压缩单元根据与该指令段对应的首标中的要调用的压缩程序段的存储地址,从存储器中读取该压缩程序段,将对应的压缩指令段解压缩,并将解压缩后的指令段存储在缓冲器中。
根据本发明的另一方面,提供了一种重叠指令存取单元,用于读取和执行以多个压缩程序段的形式存储在存储器中的程序,其中,每个压缩程序段包括开头处的首标、压缩指令段和末尾处的跳转指令,所述首标包含基于程序中的调用关系预测的接下来要调用的压缩程序段的存储地址和所述压缩指令段的存储地址,所述跳转指令包含在编写所述程序时指定的接下来要调用的压缩程序段的存储地址,所述重叠指令存取单元包括:缓冲器;处理单元,用于发送指令读取请求,从缓冲器读取指令,并且执行该指令;解压缩单元,用于响应于处理单元发送的指令读取请求,从存储器中读取所请求的压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令段存储在缓冲器中以供处理单元执行,其中,在处理单元从缓冲器中读取和执行所述指令段的同时,解压缩单元根据与该指令段对应的首标中的要调用的压缩程序段的存储地址,从存储器中读取该压缩程序段,将对应的压缩指令段解压缩,并将解压缩后的指令段存储在缓冲器中。
通过利用根据本发明的程序压缩方法和装置来对程序进行压缩和存储,减小了存储程序所需的存储空间,而且在某种程度上提高了程序的安全性。此外,在根据本发明的重叠指令存取方法中,处理单元执行指令段的过程和解压缩单元将要调用的下一指令段解压缩的过程是重叠的,解压缩单元可以将处理单元将需要的指令段预先存储在缓冲器中,因此减少了处理单元的等待时间,提高了执行效率。对于基于多核处理器的SPMD应用,多个根据本发明的重叠指令存取单元中的处理单元可以共同使用一个存储器来存储要执行的程序,因此,避免了将该程序复制到用于每个处理单元的指令存储器的需要,从而进一步减小了对于存储器的需求。
附图说明
通过结合附图对本发明的实施例进行详细描述,本发明的上述和其它目的、特征、优点将会变得更加清楚,其中:
图1是根据本发明的用于对程序进行压缩和存储的装置的框图。
图2是根据本发明的、由图1所示的装置执行的用于对程序进行压缩和存储的方法的流程图。
图3示意性地示出了根据本发明的、当利用图1所示的装置来处理程序时的各个阶段的处理结果。
图4是根据本发明的重叠指令存取单元的框图。
图5是根据本发明的、由图4所示的重叠指令存取单元执行的重叠指令存取方法的流程图。
图6是根据本发明的重叠指令存取方法的数据流图。
具体实施方式
下面,针对附图来描述本发明的实施例。应当理解:这里描述的实施例仅仅是说明性的,而不是限制本发明的范围。本领域技术人员将认识到:在不背离本发明的范围的情况下,可以对这些实施例做出各种修改和组合。
通常,程序由若干个指令段组成,并且这些指令段通过跳转指令而互相链接。在处理单元执行所述程序时,由于各个指令段之间的数据独立性,处理单元依序独立地执行这些指令段,并且在执行了一个指令段之后,根据所遇到的跳转指令而跳转到下一指令段。所述跳转指令包括jump、call等,其指示程序中各个指令段之间的调用关系。
基于这一特性,如果从序列图(sequence diagram)的角度来看,可以将各个指令段之间的调用关系视为列表。例如,对于H.264解码器,它的序列图由parsing(解析)、idct、intra/inter prediction(帧内/帧间预测)、reconstruction(重建)和in-loop filtering(环内滤波)等步骤组成;在处理数据流时,H.264解码器对数据流依序执行这些步骤,并且这些步骤中的每一个在被执行时与其它步骤是互相独立的。
在读取程序之后,为了将该程序转换成机器可读的代码,需要对该程序进行编译。编译后的程序由两部分组成,即:数据段声明部分和指令部分。本发明主要应用于指令部分。如上所述,对于指令部分,可以将其看作由若干个指令段组成,并且各个指令段通过跳转指令而互相链接。
根据本发明的、用于对程序进行压缩和存储的装置100基于上述事实,其将要由处理单元执行的程序的指令部分划分为多个独立的指令段,并且压缩这些指令段,以便减小存储所述程序所需的存储空间。
下面,将结合图1来详细描述根据本发明的、用于对程序进行压缩和存储的装置100。
图1示出了根据本发明的、用于对程序进行压缩和存储的装置100的框图。如图1所示,装置100包括编译器101和连接到编译器101的中央指令存储器102。
编译器101可以由执行本发明所述的功能的硬件的组合实现,也可以由公知的处理器或控制器结合用于执行本发明所述的功能的计算机软件来实现。编译器101用于对要由处理单元执行的程序进行编译,利用程序中的跳转指令将编译后的程序的指令部分划分为多个指令段,压缩所述多个指令段,并且将所获得的压缩指令段存储在中央指令存储器102中。
中央指令存储器102可以是诸如只读存储器(ROM)、快闪存储器的非易失性存储器,并且用于存储由编译器101提供的压缩指令段。
下面,将结合图1和图2来详细描述装置100的操作。图2示出了根据本发明的、由图1所示的装置执行的用于对程序进行压缩和存储的方法的流程图。
首先,在步骤S201中,编译器101读入该程序,并且以本领域公知的方法对该程序进行编译。在编译过程中,编译器确定该程序中的跳转指令的位置,并且生成表示该程序中的各个函数(或指令段)之间的调用关系的调用图。编译器用来生成调用图的方法是公知的,为简单起见,在此省略对该方法的描述。
接下来,在步骤S202中,编译器101利用程序中的跳转指令作为划分点,将编译后的程序的指令部分划分为多个指令段。具体地说,当在程序中发现第一个跳转指令时,编译器101将位于该跳转指令前面的指令划分为一个指令段,然后,当编译器101发现下一跳转指令时,它将该跳转指令作为新的划分点而将位于前一跳转指令和当前跳转指令之间的指令划分为一个新的指令段。以这一方式,编译器101利用程序中的跳转指令而将程序的指令部分划分为多个指令段。
然而,在某些程序中,可能出现在该程序的某一区域中存在大量跳转指令的情况,尽管这种情况在媒体应用的环境下比较少。此时,如果编译器利用所发现的每个跳转指令来划分所述程序,则可能获得大量指令段,并且其中的很多指令段的长度比较小,这将导致最终整个程序的压缩率下降并且该程序的执行效率降低。为了解决这一问题,最好使用以下方法来划分所述程序。在产生调用图之后,编译器101基于该调用图确定程序中各个跳转指令的跳转距离,该跳转距离可以是当前跳转指令与下一跳转指令的存储器偏移地址之间的差。然后,编译器101将每个跳转指令的跳转距离与预定的阈值进行比较。当跳转指令的跳转距离小于所述阈值时,编译器101不利用该指令来划分所述程序。当跳转指令的跳转距离大于或等于所述阈值时,编译器101将该跳转指令作为划分点来划分所述程序。所述阈值可以由用户根据实际需要来确定。例如,用户可以根据所执行的程序的总长度、程序中的跳转指令的密度、可用于存储所述程序的存储器的容量、希望获得的程序执行效率等因素来确定所述阈值,从而控制最终获得的指令段的数目和长度。
除了使用以上方法来划分程序以外,优选地,还可以利用程序中的注释(annotation)来划分所述程序。通常,在编写程序时,程序员会在每个函数的开头添加相应的注释以便说明该函数的功能等。所述注释包括但不限于添加在函数开头的特定提示(hint)。通过识别这些注释,编译器101可以识别出各个函数,并且利用各个函数末尾处的跳转指令将组成这些函数的指令划分为指令段。以这一方式,由于整个函数被划分为一个指令段,因此可以增大指令段的长度并且减少跳转次数,从而提高整个程序的压缩率。不过,在利用注释来划分程序时,如果函数本身的长度较长,则可能出现所获得的对应指令段的长度较长的情况,此时,编译器101可以根据该函数内部的跳转指令来将该指令段进一步划分为多个指令段,从而提高执行效率。
如本领域公知的那样,当编译器101编译所述程序时,该程序中的各个指令的地址是从0开始依序偏移的。因此,在编译完成之后,编译器101可以确定程序中的指令相对于0偏移地址的偏移地址。相应地,在如上所述将程序的指令部分划分为多个指令段之后,编译器101可以确定各个指令段的起始偏移地址和结束偏移地址。此时,在所述程序中用于划分所述程序的跳转指令所指示的跳转地址(即,在执行完该指令前面的指令段之后要调用的指令段的偏移地址)也是相对于0偏移地址的偏移地址。
接下来,在步骤S203中,编译器101利用针对所使用的硬件平台进行了优化的压缩算法来压缩所述多个指令段,并且确定压缩后的各个指令段的长度。这里所述的硬件平台是指多核处理器的指令系统,即,多核处理器的指令集架构。通常,不同的多核处理器可以具有不同的指令集架构和不同的编码特点。因此,使用针对多核处理器的编码特点而进行了优化的压缩算法来压缩所述指令段,可以明显提高每个指令段的压缩率。针对不同的多核处理器优化压缩算法的方法以及由此得到的优化的压缩算法是本领域技术人员公知的,为简单起见,在这里省略对它们的描述。应当注意的是:在上述压缩过程中,为了便于进行由于压缩导致的后续偏移地址调整,不对用于划分所述程序的跳转指令进行压缩。
在压缩了所述指令段之后,在步骤S204中,编译器101将原程序中用于划分所述程序的各个跳转指令添加到相应压缩指令段的末尾。具体地说,如上所述,在压缩各个指令段时,用于划分所述程序的各个跳转指令并没有被压缩;在压缩完成之后,编译器101将跟随在某个指令段之后并被用来划分所述程序的跳转指令添加到与该指令段相对应的压缩指令段的末尾。此时,该跳转指令中的跳转地址仍然是在执行了所述指令段之后要调用的指令段在被压缩之前的偏移地址。应当认识到:添加在压缩指令段末尾的跳转指令所指示的要跳转的指令段是程序员在编写所述程序时利用该跳转指令指定的指令段。
在添加了所述跳转指令之后,编译器101根据所产生的调用图示出的各个指令段之间的调用关系,预测在处理单元执行了各个指令段之后可能调用(跳转)的指令段,并且确定所预测的指令段在压缩之前的偏移地址。编译器101用来预测在执行了一个指令段之后要调用的指令段的方法是本领域公知的,因此为简单起见,在这里不对所述预测方法进行描述。然后,编译器101在每个压缩指令段的开头处添加具有预定格式和大小的首标,所述首标包括指示所述每个(当前)压缩指令段的长度的数据位、指示当前指令段(在被压缩之前)的偏移地址的数据位、以及在执行了当前指令段之后要调用的指令段(在被压缩之前)的偏移地址的数据位,其中,所述当前指令段(在被压缩之前)的偏移地址是指与当前压缩指令段相对应的原始指令段在被压缩之前相对于0偏移地址的偏移地址,所述当前指令段之后要调用的指令段是如上所述由编译器101根据调用图预测的要调用的指令段。应当认识到:本领域技术人员可以根据实际需要来选择首标的格式和大小。
在经过上述处理之后,形成了多个压缩程序段,每个压缩程序段包括:压缩指令段、位于该压缩指令段开头的首标、以及位于该压缩指令段末尾的跳转指令。应当认识到:上述添加跳转指令的步骤和添加首标的步骤的顺序仅仅是说明性的,也可以先添加首标,然后再添加跳转指令。
由于各个指令段在被压缩之后在长度上发生变化,因此,为了实现正确的跳转和调用,接下来必须根据压缩前后指令段长度的变化量来调整所述首标和跳转指令中的相关偏移地址。为此,编译器101将第一压缩程序段的起始偏移地址设置为0,然后根据各个压缩程序段(包括开头处的首标和末尾处的跳转指令)的长度来依次计算各个压缩程序段的起始偏移地址。由于压缩程序段中的首标、跳转指令和压缩指令段的长度是已知的,因此压缩程序段的长度也是已知的。作为示例,如果按照从低地址到高地址的顺序来存储所述压缩程序段,则由于第一压缩程序段的起始偏移地址为0,因此第二压缩程序段的起始偏移地址为0+第一压缩程序段的长度。同样,第三压缩程序段的起始偏移地址为第二压缩程序段的起始偏移地址+第三压缩程序段的长度。以这一方式,编译器101可以依次计算出各个压缩程序段相对于0偏移地址的起始偏移地址。继而,编译器101可以依次计算出各个压缩程序段中的压缩指令段相对于0偏移地址的起始偏移地址。
随后,编译器101根据各个压缩指令段在压缩之前的偏移地址、以及所计算的各个压缩指令段的偏移地址,计算各个指令段在被压缩前后的偏移地址的变化量。然后,利用该变化量,编译器101将添加在压缩程序段末尾的跳转指令中的跳转地址(即,要跳转的指令段的偏移地址)修改为所计算的、与该指令段相对应的压缩程序段在压缩之后的偏移地址,并且将首标中的当前指令段的偏移地址和要跳转的指令段的偏移地址分别修改为所计算的当前压缩指令段的偏移地址和所计算的与要跳转的指令段相对应的压缩程序段的偏移地址。
接下来,在步骤S205中,编译器101将所述多个压缩程序段依序存储在中央指令存储器102中。然后,在步骤S206中,编译器101确定第一压缩程序段在中央指令存储器102中的实际偏移地址,计算第一压缩程序段在存储前后的偏移地址变化量,并且根据该变化量而来相应地修改各个压缩程序段开头处的首标以及末尾处的跳转指令中的各个偏移地址,以使得所述各个偏移地址表示在中央指令存储器102中的真实存储地址。至此,用于对程序进行压缩和存储的过程结束。
经过上述处理之后,所述程序被以压缩程序段的形式存储在中央指令存储器102中,其中,在每个压缩程序段的末尾具有跳转指令,该跳转指令包含由程序员在编写所述程序时利用该跳转指令指定的指令段所对应的压缩程序段在中央指令存储器102中的存储地址,此外,在每个压缩程序段的开头还具有首标,该首标包含所述每个压缩程序段中的压缩指令段(即,当前压缩指令段)的长度、当前压缩指令段在中央指令存储器102中的存储地址、以及由编译器基于程序中的调用关系预测的要调用的指令段所对应的压缩程序段在中央指令存储器102中的存储地址。
图3示意性地示出了根据本发明的、当利用图1所示的装置来处理程序时的各个阶段的处理结果。如图3所示,根据本发明的用于对程序进行压缩和存储的装置和方法有效地减小了存储所述程序所需的存储空间。
此外,本领域技术人员应当理解:尽管在上文中使用单个部件(即,编译器)来对程序进行分段、压缩和存储,但这仅仅是出于说明的目的,而不是限制性的。实际上,除了使用单独的编译器以外,也可以使用多个模块来实现上述功能。例如,可以使用包括编译部件、划分部件和压缩部件的装置按照与上面所述相似的方式来实现相同的功能,其中,编译部件编译程序,产生调用图,并且记录划分该程序所需的信息。划分部件根据编译部件提供的信息来将该程序划分为多个指令段,然后压缩部件压缩各个指令段;接下来,类似地,编译部件在每个指令段的开头和末尾添加上述首标和跳转指令。当然,本领域技术人员也可以根据实际需要采用具有上述各个功能的其它部件和/或这些部件的组合,只要这些部件和/或组合能够实现上述功能即可。
接下来,将参照附图来描述根据本发明的重叠指令存取单元和重叠指令存取方法。
图4示出了根据本发明实施例的、用于读取和执行如上所述存储的压缩程序段的重叠指令存取单元的框图。
如图4所示,重叠指令存取单元400包括处理单元401、用于处理单元401的指令高速缓冲存储器402、指令解压缩单元403以及用于指令解压缩单元403的压缩指令缓冲器404。重叠指令存取单元400中的指令解压缩单元403通过中央指令管理单元20而连接到中央指令存储器10。
中央指令存储器10可以是诸如只读存储器(ROM)、快闪存储器的非易失性存储器,并且与在上文中针对图1所述的中央指令存储器102相似,在中央指令存储器10中存储了要由处理单元401执行的程序。所述程序是以压缩程序段的形式存储的,并且,通过由图1所示的装置按照图2所示的方法对所述程序进行分段和压缩而获得所述压缩程序段。如上文所述,每个压缩程序段包括位于开头的首标、压缩指令段、以及位于末尾的跳转指令。所述首标包含所述每个压缩程序段中的压缩指令段(即,当前压缩指令段)的长度、该当前压缩指令段在中央指令存储器10中的存储地址、由编译器基于程序中的调用关系预测的要调用的指令段所对应的压缩程序段在中央指令存储器10中的存储地址。此外,位于末尾的跳转指令指示由程序员在编写所述程序时利用该跳转指令指定的要跳转的指令段所对应的压缩程序段在中央指令存储器10中的存储地址。
处理单元401可以是多核处理器的一个处理单元,也可以是独立的处理器,其执行用于例如媒体应用的程序。
指令高速缓冲存储器402用于存储处理单元要执行的指令,其可以由诸如静态随机存取存储器(SRAM)的易失性存储器构成。
指令解压缩单元403用于响应于处理单元执行程序时发出的指令读取请求,从中央指令存储器10读出所请求的压缩程序段的首标并且由此读取该压缩程序段中的压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令段存储到指令高速缓冲存储器402中以供处理单元401使用。为了提高执行效率,指令解压缩单元403还在处理单元401执行当前指令段的同时,根据所述首标而从中央指令存储器10中预先读取在执行了当前指令段之后要调用的下一压缩指令段,将该压缩指令段解压缩,然后将解压缩后的指令段存储到指令高速缓冲存储器402中以供处理单元401后续使用。
压缩指令缓冲器404用于暂时存储指令解压缩单元403从中央指令存储器10读取的首标和压缩指令段、以及指令解压缩单元403在将所述压缩指令段解压缩期间的临时数据。
中央指令管理单元20用于响应于指令解压缩单元403的请求而从中央指令存储器10读取所请求的首标或压缩指令段,并且将所读取的首标或压缩指令段传送给压缩指令缓冲器404。
在基于多核架构的单程序多应用(SPMD)的情况下,中央指令存储器10以及中央指令管理单元20可以由同时执行一个程序的多个重叠指令存取单元中的多个处理单元共享。也就是说,由多个处理单元同时执行的程序被以上述压缩程序段的形式存储在中央指令存储器10中,这些处理单元可以在执行时独立地读取各个压缩程序段。由于各个处理单元所属的各个重叠指令存取单元的结构和操作相似,因此,在下文中将仅对一个重叠指令存取单元的操作进行描述。
当系统启动时,处理单元401向指令高速缓冲存储器402发出指令读取请求,该指令读取请求包含所述程序的第一压缩程序段的首标地址。然后,处理单元401进入暂停(stall)状态以等待所请求的指令。
指令解压缩单元403截获该请求,暂停当前正在执行的操作(如果有的话)并且保存与该操作有关的上下文。然后,指令解压缩单元403根据该请求中的首标地址而向中央指令管理单元20发出读取该首标的请求。中央指令管理单元20响应于该请求而从中央指令存储器10中读取所述首标,并且将该首标发送到压缩指令缓冲器404中。指令解压缩单元403从压缩指令缓冲器404中读取该首标,并且根据该首标中包含的当前压缩指令段的存储地址而判断所请求的压缩指令段是否已经存在于指令高速缓冲存储器402中以及是否已经被完全解压缩。
如果指令解压缩单元403确定所请求的压缩指令段已经存在于指令高速缓冲存储器402中并且已被解压缩,则指令解压缩单元403将指令就绪(ready)信号发送给处理单元401。处理单元401接收这一信号,并且从指令高速缓冲存储器402中读取所述指令段以便执行。
如果指令解压缩单元403确定所请求的压缩指令段已经存在于指令高速缓冲存储器402中但是正在被该单元解压缩,则指令解压缩单元403重新开始对所述指令段的解压缩,并且在完成解压缩之后将指令就绪信号发送给处理单元401。处理单元401接收这一信号,并且从指令高速缓冲存储器402中读取解压缩后的指令段以便执行。
由于此时系统刚刚启动,并且第一压缩指令段还没有被读取到指令高速缓冲存储器402中,因此,作为第三种情况,指令解压缩单元403发现所请求的压缩指令段不在指令高速缓冲存储器402中。于是,指令解压缩单元403向中央指令管理单元20发出读取该压缩指令段的请求,并且在所述请求中将所述首标中包含的第一压缩指令段的存储地址发送给中央指令管理单元20。中央指令管理单元20响应于该请求而从中央指令存储器10读取所述存储地址上的压缩指令段及其末尾的跳转指令,并且将所读取的压缩指令段及其末尾的跳转指令发送到压缩指令缓冲器404中。
接下来,指令解压缩单元403从压缩指令缓冲器404中读取该压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令段以及位于其末尾的跳转指令存储在指令高速缓冲存储器402中。然后,指令解压缩单元403向处理单元401发送指令就绪信号。处理单元401接收该信号,跳出暂停状态,并且从指令高速缓冲存储器402中读取和执行其中存储的指令。
在处理单元401执行指令段的同时,解压缩单元403读取与该指令段相对应的首标中包含的要跳转的下一压缩程序段的存储地址,然后按照与上面所述相同的方式通过中央指令管理单元404读取所述下一压缩程序段的首标。接下来,解压缩单元403根据该首标中包含的所述下一压缩程序段中的压缩指令段的存储地址,通过中央指令管理单元20而将该压缩指令段及其末尾的跳转指令从中央指令存储器10读取到压缩指令缓冲器404中,将该压缩指令段解压缩,并且将解压缩后的指令段及跳转指令存储到指令高速缓冲存储器402中以供处理单元随后使用。
当结束对于第一指令段的执行时,处理单元401根据所执行的指令段末尾的跳转指令而再次向指令高速缓冲存储器402发出指令读取请求,以便请求读取后续的指令。然后,处理单元401再次进入暂停状态以等待所请求的指令。
指令解压缩单元403拦截该请求,暂停当前正在执行的操作(如果有的话)并且保存与该操作相关的上下文。然后,按照与上面所述相似的方式,指令解压缩单元403检查所请求的压缩指令段是否已经存在于指令高速缓冲存储器402中。当编译器根据调用图预测的要调用的指令段与处理单元401接下来要执行的指令段相同时,所请求的指令段就是解压缩单元403根据首标预先解压缩的指令段,这意味着解压缩单元403已经读取了所请求的压缩指令段。此时,解压缩单元403确定所请求的压缩指令段是否已经被完全解压缩。如果所请求的压缩指令段已经被完全解压缩从而被存储在指令高速缓冲存储器402中,则指令解压缩单元403向处理单元401发出指令就绪的信号以重新启动处理单元401,处理单元401接收该信号,跳出暂停状态,并且从指令高速缓冲存储器402中读出所请求的指令段以便执行。反之,如果所请求的压缩指令段尚未被完全解压缩而是正处于解压缩的过程中,则指令解压缩单元403重新开始对所述指令段的解压缩操作以便继续将该程序段解压缩,并且在完成解压缩时向处理单元401发送指令就绪信号以重新启动处理单元401。
另一方面,如果编译器根据调用图预测的要调用的指令段与处理单元401接下来要执行的指令段不同,那么这意味着被指令解压缩单元403预先读取和解压缩的指令段不是处理单元401所请求的指令段。因此,指令解压缩单元403发现所请求的指令段不在指令高速缓冲存储器402中。于是,指令解压缩单元403按照与上面所述相同的方式,根据处理单元401发出的请求中包含的要调用的压缩程序段的存储地址而通过中央指令管理单元20从中央指令存储器10读取所请求的压缩程序段的首标和对应的压缩指令段,将该压缩指令段解压缩并存储在指令高速缓冲存储器402中以供处理单元使用。然后,同样,指令解压缩单元403向处理单元401发出指令就绪信号以启动处理单元401。处理单元401接收所述信号,跳出暂停状态,并且从指令高速缓冲存储器402读取和执行该程序段。
对于要执行的程序的所有压缩指令段,根据本发明的重叠指令存取单元重复上述过程,直到所有指令都被处理为止。
应当注意:在处理单元执行了存储在指令高速缓冲存储器中的指令之后,其可以从指令高速缓冲存储器中删除该指令,以便为后续的指令预留出存储空间,从而提高指令高速缓冲存储器的利用效率。
下面,将结合图4和图5来描述根据本发明的重叠指令存取方法。
图5示出了根据本发明的、由图4所示的重叠指令存取单元执行的重叠指令存取方法的流程图。
如图5所示,在步骤S501中,系统启动,处理单元401向指令高速缓冲存储器402发出指令读取请求,该指令读取请求包含所述程序的第一压缩程序段的首标地址。然后,处理单元401进入暂停(stall)状态以等待所请求的指令。
在步骤S502中,指令解压缩单元403截获该请求,暂停当前正在执行的操作(如果有的话)并且保存与该操作有关的上下文,并且根据该请求中的首标地址而向中央指令管理单元20发出读取该首标的请求。中央指令管理单元20响应于该请求而从中央指令存储器10中读取所述首标,并且将该首标发送给压缩指令缓冲器404中。然后,在步骤S503中,指令解压缩单元403从压缩指令缓冲器404中读取该首标,并且在步骤S504中根据该首标中包含的当前压缩指令段的存储地址而判断所请求的压缩指令段是否已经存在于指令高速缓冲存储器402中。
如果在步骤S504中确定所请求的压缩指令段已经在指令高速缓冲存储器402中,则该过程进行到步骤S505,在该步骤中,指令解压缩单元403确定该压缩指令段是否已经被完全解压缩。如果在步骤S505中确定该压缩指令段已经被解压缩,则该过程进行到步骤S509,并且指令解压缩单元403将指令就绪信号发送给处理单元401以重新启动处理单元。反之,如果在步骤S505中确定所述压缩指令段没有被完全解压缩而是正在被解压缩,则指令解压缩单元403在步骤S506中重新开始先前暂停的操作,即,继续将所述压缩指令段解压缩,并且在完成解压缩之后,在步骤S509中将指令就绪信号发送给处理单元401。
另一方面,如果在步骤S504中指令解压缩单元403发现所请求的压缩指令段不在指令高速缓冲存储器402中(这适用于上述系统刚刚启动的情况,因为第一压缩指令段此时还没有被读取到指令高速缓冲存储器402中),则在步骤S507中,指令解压缩单元403向中央指令管理单元20发出读取该压缩指令段的请求,并且在所述请求中将所述首标中包含的压缩指令段的存储地址发送给中央指令管理单元20。中央指令管理单元20响应于该请求而从中央指令存储器10读取所述存储地址上的压缩指令段及其末尾的跳转指令,并且将所读取的压缩指令段及跳转指令发送到压缩指令缓冲器404中。
接下来,在步骤S508中,指令解压缩单元403从压缩指令缓冲器404中读取该压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令段以及位于其末尾的跳转指令存储到指令高速缓冲存储器402中。然后,在步骤S509中,指令解压缩单元403向处理单元401发送指令就绪信号。在步骤S510中,处理单元401接收该信号,跳出暂停状态,并且从指令高速缓冲存储器402中读取和执行其中存储的指令。
在处理单元401执行指令段的同时,在步骤S511中,解压缩单元403读取与该指令段相对应的首标中包含的接下来要调用的压缩程序段的存储地址,然后按照与上面所述相同的方式通过中央指令管理单元404读取所述接下来要调用的压缩程序段的首标。接下来,在步骤S512中,解压缩单元403根据该首标中包含的对应压缩指令段的存储地址,通过中央指令管理单元20而将该压缩指令段及其末尾的跳转指令从中央指令存储器10读取到压缩指令缓冲器404中。然后,在步骤S513中,解压缩单元将该压缩指令段解压缩,并且将解压缩后的指令段及跳转指令存储到指令高速缓冲存储器402中以供处理单元随后使用。
当处理单元401结束对于指令段的执行时,处理单元401将根据所执行的指令段末尾的跳转指令而再次向指令高速缓冲存储器402发出指令读取请求,以便请求读取后续的指令。当接收到所述指令读取请求时,处理单元401将再次执行上述操作。
具体地说,当接收到所述指令读取请求时,指令解压缩单元403暂停当前正在执行的操作(如果有的话)并且保存与该操作相关的上下文。然后,指令解压缩单元403检查所请求的压缩指令段是否已经存在于指令高速缓冲存储器402中。当先前编译器根据调用图预测的要调用的指令段与处理单元401接下来要执行的指令段相同时,所请求的指令段就是解压缩单元403根据首标预先解压缩的指令段,这意味着解压缩单元403已经读取了所请求的压缩指令段。此时,解压缩单元403确定所请求的压缩指令段是否已经被完全解压缩。如果所请求的指令段已经被完全解压缩,则指令解压缩单元403向处理单元401发出指令就绪的信号,处理单元401接收该信号,跳出暂停状态,并且从指令高速缓冲存储器402中读出和执行所请求的指令段。反之,如果所请求的指令段正在被解压缩,则指令解压缩单元403继续将该指令段解压缩,并且在完成解压缩时向处理单元401发送指令就绪信号以重新启动处理单元401。
另一方面,如果先前编译器根据调用图预测的要调用的指令段与处理单元401接下来要执行的指令段不同,那么这意味着被指令解压缩单元403预先读取和解压缩的指令段不是处理单元401所请求的指令段,即,所请求的指令段不在指令高速缓冲存储器402中。因此,如上所述,指令解压缩单元403根据处理单元401发出的请求中包含的要调用的压缩程序段的存储地址而通过中央指令管理单元20从中央指令存储器10读取所请求的压缩程序段的首标和对应的压缩指令段,将该压缩指令段解压缩并存储在指令高速缓冲存储器402中。然后,指令解压缩单元403向处理单元401发出指令就绪信号以启动处理单元401。处理单元401接收所述信号,跳出暂停状态,并且从指令高速缓冲存储器402读取和执行该程序段。
对于要执行的程序的所有压缩指令段,重复上述过程,直到处理了所有指令为止。
如上所述,在根据本发明的重叠指令存取方法中,处理单元执行程序的过程与解压缩单元将接下来要调用的指令段解压缩的过程是重叠的,这样,提高了执行效率。图6是根据本发明的重叠指令存取单元时的示意数据流图,其清楚地示出了本发明的这一重叠特征。
对于基于多核架构的单程序多应用(SPMD),多核处理器的多个处理单元可以共享所述中央指令存储器。在这种情况下,不必为每个处理单元提供一个单独的指令存储器,而是只需为每个处理单元提供一个小得多的指令缓冲器,因此,显著减小了整个多个处理器所需的存储器的容量。例如,对于具有4个处理单元的多核处理器,通常,其需要4个32KB(总共128KB)的指令存储器;相比之下,在应用了本发明之后,只需要1个32KB的指令存储器和4个1KB的指令缓冲器(总共36KB),从而减少了96KB的存储器需求,降低了系统成本。而且,由于程序是被分段压缩存储的,因此根据本发明的方法和装置可以支持更长的程序。
尽管已经示出和描述了本发明的一些示例性实施例,本领域技术人员应当理解,在不背离权利要求及其等价物中限定的本发明的范围和精神的情况下,可以对这些示例性实施例做出各种形式和细节上的变化。
Claims (24)
1.一种用于对程序进行压缩和存储的方法,包括以下步骤:
编译该程序;
利用程序中的跳转指令将编译后的程序的指令部分划分为多个指令段;
压缩所述多个指令段以获得多个压缩指令段;以及
将所述多个压缩指令段存储在存储器中。
2.如权利要求1所述的方法,其中,在所述划分步骤中,通过识别程序中的函数开头处的注释而识别出所述函数,并且利用所述函数末尾的跳转指令来划分所述指令部分。
3.如权利要求1所述的方法,其中,在所述划分步骤中,利用编译后的程序中的每个跳转指令来划分所述指令部分。
4.如权利要求1所述的方法,其中,在所述划分步骤中,判断编译后的程序中的每个跳转指令的跳转距离,并且当该跳转指令的跳转距离超过预定阈值时,利用该跳转指令来划分所述指令部分。
5.如权利要求1-4之一所述的方法,其中,在所述压缩步骤中,利用针对所使用的硬件平台进行了优化的压缩算法来压缩所述多个指令段。
6.如权利要求1-5之一所述的方法,还包括:
分别在所述多个压缩指令段中的每一个的开头和末尾处添加首标和所述跳转指令以形成多个对应的压缩程序段,所述首标包含基于程序中的调用关系预测的接下来要调用的压缩程序段在存储器中的存储地址、所述每个压缩指令段的长度、以及所述每个压缩指令段在存储器中的存储地址,所述跳转指令包含与在编写所述程序时利用该跳转指令指定的接下来要调用的指令段相对应的压缩程序段在存储器中的存储地址。
7.如权利要求6所述的方法,其中,在所述编译步骤中生成所述函数的调用图,并且其中,
利用由所述调用图表示的调用关系来预测在所述首标中指示的接下来要调用的压缩程序段。
8.一种用于对程序进行压缩和存储的装置,包括:
编译器,用于编译该程序,利用程序中的跳转指令将编译后的程序的指令部分划分为多个指令段,并且压缩所述多个指令段以获得多个压缩指令段;以及
存储器,用于存储所述多个压缩指令段。
9.如权利要求8所述的装置,其中,编译器通过识别程序中的函数开头处的注释而识别出所述函数,并且利用所述函数末尾的跳转指令来划分所述指令部分。
10.如权利要求8所述的装置,其中,编译器利用编译后的程序中的每个跳转指令来划分所述指令部分。
11.如权利要求8所述的装置,其中,编译器判断编译后的程序中的每个跳转指令的跳转距离,并且当该跳转指令的跳转距离超过预定阈值时,编译器利用该跳转指令来划分所述指令部分。
12.如权利要求8-11之一所述的装置,其中,编译器利用针对所使用的硬件平台进行了优化的压缩算法来压缩所述多个指令段。
13.如权利要求8-12之一所述的装置,其中,编译器分别在所述多个压缩指令段中的每一个的开头和末尾处添加首标和所述跳转指令以形成多个对应的压缩程序段,所述首标包含由该编译器基于程序中的调用关系预测的接下来要调用的压缩程序段在存储器中的存储地址、所述每个压缩指令段的长度、以及所述每个压缩指令段在存储器中的存储地址,所述跳转指令包含与在编写所述程序时利用该跳转指令指定的接下来要调用的指令段相对应的压缩程序段在存储器中的存储地址。
14.如权利要求13所述的装置,其中,编译器在编译程序时生成所述函数的调用图,并且利用由所述调用图表示的调用关系来预测在首标中指示的接下来要调用的压缩程序段。
15.一种由包括处理单元、缓冲器和解压缩单元的重叠指令存取单元执行的重叠指令存取方法,用于读取和执行以多个压缩程序段的形式存储在存储器中的程序,其中,每个压缩程序段包括开头处的首标、压缩指令段和末尾处的跳转指令,所述首标包含基于程序中的调用关系预测的接下来要调用的压缩程序段的存储地址和所述压缩指令段的存储地址,所述跳转指令包含在编写所述程序时指定的接下来要调用的压缩程序段的存储地址,所述重叠指令存取方法包括:
由处理单元发出指令读取请求;
由解压缩单元响应于所述指令读取请求而从存储器中读取所请求的压缩指令段,将其解压缩,并且将解压缩后的指令段存储在缓冲器中;以及
由处理单元从缓冲器中读取和执行所述指令段,其中,
在处理单元执行所述指令段的同时,由解压缩单元根据与该指令段对应的首标中的要调用的压缩程序段的存储地址,从存储器中读取对应的压缩指令段,将该压缩指令段解压缩,并将解压缩后的指令段存储在缓冲器中。
16.如权利要求15所述的重叠指令存取方法,其中,所述指令读取请求包含与要读取的压缩指令段相对应的首标的存储地址,并且其中,
解压缩单元根据首标的存储地址而从存储器中读取所述首标,并且根据该首标包含的对应的压缩指令段的存储地址而从存储器中读取该压缩指令段。
17.如权利要求15-16所述的重叠指令存取方法,还包括以下步骤:当接收到指令读取请求时,解压缩单元检查所请求的压缩指令段是否已经在缓冲器中以及是否已经被完全解压缩。
18.如权利要求17所述的重叠指令存取方法,其中,
当所请求的压缩指令段已经在缓冲器中并且已经完全被解压缩时,解压缩单元向处理单元发送信号以启动该处理单元;
当所请求的压缩指令段已经在缓冲器中但是尚未被完全解压缩时,解压缩单元继续将该指令段解压缩,并在解压缩完成后向处理单元发送信号以启动该处理单元;以及
当所请求的压缩指令段不在缓冲器中时,解压缩单元根据所述指令读取请求而从存储器读取所请求的压缩指令段,将其解压缩并存储在缓冲器中。
19.如权利要求15-18所述的重叠指令存取方法,其中,
所述存储器由多个重叠指令存取单元共享。
20.一种重叠指令存取单元,用于读取和执行以多个压缩程序段的形式存储在存储器中的程序,其中,每个压缩程序段包括开头处的首标、压缩指令段和末尾处的跳转指令,所述首标包含基于程序中的调用关系预测的接下来要调用的压缩程序段的存储地址和所述压缩指令段的存储地址,所述跳转指令包含在编写所述程序时指定的接下来要调用的压缩程序段的存储地址,所述重叠指令存取单元包括:
缓冲器;
处理单元,用于发送指令读取请求,从缓冲器读取指令,并且执行该指令;
解压缩单元,用于响应于处理单元发送的指令读取请求,从存储器中读取所请求的压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令段存储在缓冲器中以供处理单元执行,其中,
在处理单元执行所述指令段的同时,解压缩单元根据与该指令段对应的首标中的要调用的压缩程序段的存储地址,从存储器中读取对应的压缩指令段,将该压缩指令段解压缩,并将解压缩后的指令段存储在缓冲器中。
21.如权利要求20所述的重叠指令存取单元,其中,所述指令读取请求包含与要读取的压缩指令段相对应的首标的存储地址,解压缩单元根据该首标的存储地址而从存储器中读取所述首标,并且根据该首标包含的对应的压缩指令段的存储地址而从存储器中读取该压缩指令段。
22.如权利要求20-21所述的重叠指令存取单元,其中,当接收到所述指令读取请求时,解压缩单元检查所请求的指令段是否已经在缓冲器中以及是否已经被完全解压缩。
23.如权利要求22所述的重叠指令存取单元,其中,
当所请求的压缩指令段已经在缓冲器中并且已经完全被解压缩时,解压缩单元向处理单元发送信号以启动该处理单元;
当所请求的压缩指令段已经在缓冲器中但是尚未被完全解压缩时,解压缩单元继续将该指令段解压缩,并在解压缩完成后向处理单元发送信号以启动该处理单元;以及
当所请求的压缩指令段不在缓冲器中时,解压缩单元根据所述指令读取请求而从存储器读取所请求的压缩指令段,将其解压缩并存储在缓冲器中。
24.如权利要求20-23所述的重叠指令存取单元,其中,
所述存储器由多个重叠指令存取单元共享。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101532034A CN101398752B (zh) | 2007-09-29 | 2007-09-29 | 重叠指令存取单元和重叠指令存取方法 |
US12/239,070 US8286151B2 (en) | 2007-09-29 | 2008-09-26 | Overlay instruction accessing unit and overlay instruction accessing method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101532034A CN101398752B (zh) | 2007-09-29 | 2007-09-29 | 重叠指令存取单元和重叠指令存取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101398752A true CN101398752A (zh) | 2009-04-01 |
CN101398752B CN101398752B (zh) | 2011-08-31 |
Family
ID=40509689
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101532034A Active CN101398752B (zh) | 2007-09-29 | 2007-09-29 | 重叠指令存取单元和重叠指令存取方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8286151B2 (zh) |
CN (1) | CN101398752B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729315A (zh) * | 2012-10-15 | 2014-04-16 | 华为技术有限公司 | 一种地址压缩、解压缩的方法、压缩器和解压缩器 |
WO2016134641A1 (en) * | 2015-02-23 | 2016-09-01 | Huawei Technologies Co., Ltd. | On-demand loading of dynamic scripting language code for reduced memory usage |
CN107085513A (zh) * | 2013-10-18 | 2017-08-22 | 威盛电子股份有限公司 | 微处理器以及选择性解压缩微程序码的方法 |
CN109709837A (zh) * | 2018-11-23 | 2019-05-03 | 上海琪埔维半导体有限公司 | 一种适用于单片机芯片的数据处理方法 |
CN110018852A (zh) * | 2018-01-10 | 2019-07-16 | 中兴通讯股份有限公司 | 一种系统二级引导方法、设备及存储介质 |
WO2020037542A1 (zh) * | 2018-08-22 | 2020-02-27 | 深圳市大疆创新科技有限公司 | 数据指令处理方法、存储芯片、存储系统和可移动平台 |
CN113885949A (zh) * | 2021-10-22 | 2022-01-04 | 瑞芯微电子股份有限公司 | 一种快速开机方法及系统 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8347023B2 (en) * | 2008-10-06 | 2013-01-01 | Marvell World Trade Ltd. | Compression based wear leveling for non-volatile memory |
US8731190B2 (en) * | 2009-06-09 | 2014-05-20 | Emc Corporation | Segment deduplication system with encryption and compression of segments |
US8401181B2 (en) * | 2009-06-09 | 2013-03-19 | Emc Corporation | Segment deduplication system with encryption of segments |
US8762348B2 (en) * | 2009-06-09 | 2014-06-24 | Emc Corporation | Segment deduplication system with compression of segments |
US8423974B2 (en) * | 2009-08-12 | 2013-04-16 | Apple Inc. | System and method for call replacement |
US8826251B2 (en) * | 2010-02-18 | 2014-09-02 | Samsung Electronics Co., Ltd | Method and apparatus for dynamically generating machine code |
KR20110138076A (ko) * | 2010-06-18 | 2011-12-26 | 삼성전자주식회사 | 데이터 저장 장치 및 그것의 쓰기 방법 |
US8862560B1 (en) * | 2010-06-21 | 2014-10-14 | Emc Corporation | Compression system pause and auto-resume |
WO2013110216A1 (en) * | 2012-01-29 | 2013-08-01 | Thomson Licensing | Method for flash compressed instruction caching for limited ram/flash device architectures |
US8639672B2 (en) * | 2012-03-27 | 2014-01-28 | International Business Machines Corporation | Multiplex classification for tabular data compression |
US9223554B1 (en) * | 2012-04-12 | 2015-12-29 | SourceDNA, Inc. | Recovering source code structure from program binaries |
CN103955355B (zh) * | 2013-03-18 | 2016-12-28 | 清华大学 | 一种应用于非易失处理器中的分段并行压缩方法及系统 |
US9374106B2 (en) * | 2013-08-28 | 2016-06-21 | International Business Machines Corporation | Efficient context save/restore during hardware decompression of DEFLATE encoded data |
US9800640B2 (en) | 2013-10-02 | 2017-10-24 | International Business Machines Corporation | Differential encoder with look-ahead synchronization |
US9372696B2 (en) * | 2013-10-18 | 2016-06-21 | Via Technologies, Inc. | Microprocessor with compressed and uncompressed microcode memories |
US9361097B2 (en) * | 2013-10-18 | 2016-06-07 | Via Technologies, Inc. | Selectively compressed microcode |
US9928066B2 (en) * | 2015-06-25 | 2018-03-27 | Intel Corporation | Instruction and logic for encoded word instruction compression |
CN106020786A (zh) * | 2015-11-02 | 2016-10-12 | 广州市动景计算机科技有限公司 | 一种动态修复应用程序的方法、装置及相关系统 |
US10311217B2 (en) * | 2016-12-09 | 2019-06-04 | Microsoft Technology Licensing, Llc | Application piracy prevention with secure enclave protection of automatically modularized functions |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5018154A (en) * | 1989-09-12 | 1991-05-21 | Brother Kogyo Kabushiki Kaisha | Semiconductor laser drive device |
US6216213B1 (en) * | 1996-06-07 | 2001-04-10 | Motorola, Inc. | Method and apparatus for compression, decompression, and execution of program code |
US5819058A (en) | 1997-02-28 | 1998-10-06 | Vm Labs, Inc. | Instruction compression and decompression system and method for a processor |
FR2785695B1 (fr) * | 1998-11-06 | 2003-01-31 | Bull Cp8 | Procede de compactage d'un programme de type code objet intermediaire executable dans un systeme embarque muni de ressources de traitement de donnees, systeme compacteur et systeme embarque multi-applications correspondants |
US6408382B1 (en) | 1999-10-21 | 2002-06-18 | Bops, Inc. | Methods and apparatus for abbreviated instruction sets adaptable to configurable processor architecture |
US6691305B1 (en) | 1999-11-10 | 2004-02-10 | Nec Corporation | Object code compression using different schemes for different instruction types |
JP3556556B2 (ja) * | 2000-02-08 | 2004-08-18 | 株式会社東芝 | 命令コード変換装置及び情報処理システム |
US6859870B1 (en) | 2000-03-07 | 2005-02-22 | University Of Washington | Method and apparatus for compressing VLIW instruction and sharing subinstructions |
US7051189B2 (en) | 2000-03-15 | 2006-05-23 | Arc International | Method and apparatus for processor code optimization using code compression |
US6694393B1 (en) | 2000-06-30 | 2004-02-17 | Lucent Technologies Inc. | Method and apparatus for compressing information for use in embedded systems |
US6865664B2 (en) * | 2000-12-13 | 2005-03-08 | Conexant Systems, Inc. | Methods, systems, and computer program products for compressing a computer program based on a compression criterion and executing the compressed program |
US7095343B2 (en) | 2001-10-09 | 2006-08-22 | Trustees Of Princeton University | code compression algorithms and architectures for embedded systems |
US7203935B2 (en) * | 2002-12-05 | 2007-04-10 | Nec Corporation | Hardware/software platform for rapid prototyping of code compression technologies |
US20040139298A1 (en) * | 2003-01-09 | 2004-07-15 | International Business Machines Corporation | Method and apparatus for instruction compression and decompression in a cache memory |
GB2414308B (en) * | 2004-05-17 | 2007-08-15 | Advanced Risc Mach Ltd | Program instruction compression |
JP2007226615A (ja) * | 2006-02-24 | 2007-09-06 | Matsushita Electric Ind Co Ltd | 情報処理装置、圧縮プログラム生成方法及び情報処理システム |
US7603604B2 (en) * | 2007-04-09 | 2009-10-13 | Advantest Corporation | Test apparatus and electronic device |
-
2007
- 2007-09-29 CN CN2007101532034A patent/CN101398752B/zh active Active
-
2008
- 2008-09-26 US US12/239,070 patent/US8286151B2/en active Active
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729315B (zh) * | 2012-10-15 | 2016-12-21 | 华为技术有限公司 | 一种地址压缩、解压缩的方法、压缩器和解压缩器 |
CN103729315A (zh) * | 2012-10-15 | 2014-04-16 | 华为技术有限公司 | 一种地址压缩、解压缩的方法、压缩器和解压缩器 |
US9495304B2 (en) | 2012-10-15 | 2016-11-15 | Huawei Technologies Co., Ltd. | Address compression method, address decompression method, compressor, and decompressor |
CN107092464A (zh) * | 2013-10-18 | 2017-08-25 | 威盛电子股份有限公司 | 产生选择性压缩微程序码和选择性解压缩微程序码的方法 |
CN107085513A (zh) * | 2013-10-18 | 2017-08-22 | 威盛电子股份有限公司 | 微处理器以及选择性解压缩微程序码的方法 |
CN107085513B (zh) * | 2013-10-18 | 2020-06-12 | 威盛电子股份有限公司 | 微处理器以及选择性解压缩微程序码的方法 |
CN106796525A (zh) * | 2015-02-23 | 2017-05-31 | 华为技术有限公司 | 按需加载动态脚本语言代码以减少内存使用 |
WO2016134641A1 (en) * | 2015-02-23 | 2016-09-01 | Huawei Technologies Co., Ltd. | On-demand loading of dynamic scripting language code for reduced memory usage |
US9772865B2 (en) | 2015-02-23 | 2017-09-26 | Futurewei Technologies, Inc. | On-demand loading of dynamic scripting language code for reduced memory usage |
CN106796525B (zh) * | 2015-02-23 | 2019-11-19 | 华为技术有限公司 | 按需加载动态脚本语言代码以减少内存使用 |
CN110018852A (zh) * | 2018-01-10 | 2019-07-16 | 中兴通讯股份有限公司 | 一种系统二级引导方法、设备及存储介质 |
CN110018852B (zh) * | 2018-01-10 | 2021-10-15 | 中兴通讯股份有限公司 | 一种系统二级引导方法、设备及存储介质 |
WO2020037542A1 (zh) * | 2018-08-22 | 2020-02-27 | 深圳市大疆创新科技有限公司 | 数据指令处理方法、存储芯片、存储系统和可移动平台 |
CN109709837A (zh) * | 2018-11-23 | 2019-05-03 | 上海琪埔维半导体有限公司 | 一种适用于单片机芯片的数据处理方法 |
CN113885949A (zh) * | 2021-10-22 | 2022-01-04 | 瑞芯微电子股份有限公司 | 一种快速开机方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101398752B (zh) | 2011-08-31 |
US8286151B2 (en) | 2012-10-09 |
US20090089507A1 (en) | 2009-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101398752B (zh) | 重叠指令存取单元和重叠指令存取方法 | |
US5537601A (en) | Programmable digital signal processor for performing a plurality of signal processings | |
US9977664B2 (en) | Information processing device and information processing method in heterogenous multi-cores having different architectures | |
CN102479098B (zh) | 使用快照图像的引导设备和方法 | |
US20070226722A1 (en) | Method and apparatus for selectively executing different executable code versions which are optimized in different ways | |
US20080098372A1 (en) | Program Converting Apparatus, Method, and Program | |
EP1926022B1 (en) | Apparatus and method for efficient memory use in portable terminal | |
KR20080023191A (ko) | 퓨전메모리 장치 및 방법 | |
US20120271802A1 (en) | Forward compatibility guaranteed data compression and decompression method and apparatus thereof | |
JP2011250431A (ja) | データ圧縮装置および方法 | |
JP2007124495A (ja) | ストリームデータ処理装置 | |
JP2007299279A (ja) | 演算装置、プロセッサシステム、及び映像処理装置 | |
US8413123B2 (en) | Compiling device and compiling method | |
US7523294B2 (en) | Maintaining original per-block number of instructions by inserting NOPs among compressed instructions in compressed block of length compressed by predetermined ratio | |
CN102129476A (zh) | 利用zip压缩格式的虚拟文件系统应用 | |
JP2004062220A (ja) | 情報処理装置、情報処理方法、およびプログラム変換装置 | |
US20120110307A1 (en) | Compressed instruction processing device and compressed instruction generation device | |
CN113495669B (zh) | 一种解压装置、加速器、和用于解压装置的方法 | |
KR20100062358A (ko) | 선택적 영상정보 무손실 압축, 복원 장치 및 방법 | |
US8351508B1 (en) | Multithreaded descriptor based motion estimation/compensation video encoding/decoding | |
US20070226724A1 (en) | Method and apparatus for firmware execution and provision | |
CN113641643A (zh) | 文件写入方法及装置 | |
CN113613058A (zh) | 一种网络视频流本地存储方法、设备及介质 | |
JP2010140233A (ja) | エミュレーションシステム及びエミュレーション方法 | |
US20230305718A1 (en) | Memory system |
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 |