重叠指令存取单元和重叠指令存取方法

文档序号:6612244阅读:328来源:国知局
专利名称:重叠指令存取单元和重叠指令存取方法
技术领域
本发明涉及一种重叠指令存取单元和重叠指令存取方法、以及用于对程 序进行压缩和存储的装置和方法。
背景技术
随着片上系统(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-lo叩filtering(环内滤波)等步骤组成;在处理数据流时,H.264解码器 对数据流依序执行这些步骤,并且这些步骤中的每一个在被执行时与其它步 骤是互相独立的。在读取程序之后,为了将该程序转换成机器可读的代码,需要对该程序 进行编译。编译后的程序由两部分组成,即数据段声明部分和指令部分。 本发明主要应用于指令部分。如上所述,对于指令部分,可以将其看作由若 干个指令段组成,并且各个指令段通过跳转指令而互相链接。根据本发明的、用于对程序进行压缩和存储的装置100基于上述事实, 其将要由处理单元执行的程序的指令部分划分为多个独立的指令段,并且压 缩这些指令段,以便减'J、存储所述程序所需的存储空间。下面,将结合图1来详细描述根据本发明的、用于对程序进行压缩和存 储的装置100。图1示出了根据本发明的、用于对程序进行压缩和存储的装置100的框 图。如图1所示,装置100包括编译器101和连接到编译器101的中央指令 存储器102。编译器101可以由执行本发明所述的功能的硬件的组合实现,也可以由 现。编译器101用于对要由处理单元执行的程序进行编译,利用程序中的跳
转指令将编译后的程序的指令部分划分为多个指令段,压缩所述多个指令段, 并且将所获得的压缩指令段存储在中央指令存储器102中。中央指令存储器102可以是诸如只读存储器(ROM)、快闪存储器的非易 失性存储器,并且用于存储由编译器101提供的压缩指令段。下面,将结合图1和图2来详细描述装置100的操作。图2示出了根据 本发明的、由图1所示的装置执行的用于对程序进行压缩和存储的方法的流 程图。首先,在步骤S201中,编译器IOI读入该程序,并且以本领域公知的方 法对该程序进行编译。在编译过程中,编译器确定该程序中的跳转指令的位 置,并且生成表示该程序中的各个函数(或指令段)之间的调用关系的调用图。 编译器用来生成调用图的方法是公知的,为简单起见,在此省略对该方法的 描述。接下来,在步骤S202中,编译器101利用程序中的跳转指令作为划分点, 将编译后的程序的指令部分划分为多个指令段。具体地说,当在程序中发现 第一个跳转指令时,编译器101将位于该跳转指令前面的指令划分为一个指 令段,然后,当编译器101发现下一跳转指令时,它将该跳转指令作为新的 划分点而将位于前一跳转指令和当前跳转指令之间的指令划分为一个新的指 令段。以这一方式,编译器101利用程序中的跳转指令而将程序的指令部分 划分为多个指令段。然而,在某些程序中,可能出现在该程序的某一区域中存在大量跳转指 令的情况,尽管这种情况在媒体应用的环境下比较少。此时,如果编译器利 用所发现的每个跳转指令来划分所述程序,则可能获得大量指令段,并且其 中的很多指令段的长度比较小,这将导致最终整个程序的压缩率下降并且该 程序的执行效率降低。为了解决这一问题,最好使用以下方法来划分所述程 序。在产生调用图之后,编译器101基于该调用图确定程序中各个跳转指令 的跳转距离,该跳转距离可以是当前跳转指令与下一跳转指令的存储器偏移 地址之间的差。然后,编译器101将每个跳转指令的跳转距离与预定的阈值 进行比较。当跳转指令的跳转距离小于所述阈值时,编译器101不利用该指 令来划分所述程序。当跳转指令的跳转距离大于或等于所述阈值时,编译器 101将该跳转指令作为划分点来划分所述程序。所述阈值可以由用户根据实际需要来确定。例如,用户可以根据所执行的程序的总长度、程序中的跳转 指令的密度、可用于存储所述程序的存储器的容量、希望获得的程序执行效 率等因素来确定所述阈值,从而控制最终获得的指令段的数目和长度。除了使用以上方法来划分程序以外,优选地,还可以利用程序中的注释(annotation)来划分所述程序。通常,在编写程序时,程序员会在每个函数的 开头添加相应的注释以便说明该函数的功能等。所述注释包括但不限于添加 在函数开头的特定提示(hint)。通过识别这些注释,编译器101可以识别出各 个函数,并且利用各个函数末尾处的跳转指令将组成这些函数的指令划分为 指令段。以这一方式,由于整个函数被划分为一个指令段,因此可以增大指 令段的长度并且减少跳转次数,从而提高整个程序的压缩率。不过,在利用 注释来划分程序时,如果函数本身的长度较长,则可能出现所获得的对应指 令段的长度较长的情况,此时,编译器101可以根据该函数内部的跳转指令 来将该指令段进一步划分为多个指令段,从而提高执行效率。如本领域^^知的那样,当编-泽器101编-泽所述程序时,该程序中的各个 指令的地址是从O开始依序偏移的。因此,在编译完成之后,编译器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示意性地示出了根据本发明的、当利用图l所示的装置来处理程序 时的各个阶段的处理结果。如图3所示,才艮据本发明的用于对程序进行压缩
和存储的装置和方法有效地减'J、 了存储所述程序所需的存储空间。此外,本领域技术人员应当理解尽管在上文中使用单个部件(即,编译 器)来对程序进行分段、压缩和存储,但这仅仅是出于说明的目的,而不是限 制性的。实际上,除了使用单独的编译器以外,也可以使用多个模块来实现 上述功能。例如,可以使用包括编译部件、划分部件和压缩部件的装置按照 与上面所述相似的方式来实现相同的功能,其中,编译部件编译程序,产生 调用图,并且记录划分该程序所需的信息。划分部件根据编译部件提供的信息来将该程序划分为多个指令段,然后压缩部件压缩各个指令段;接下来, 类似地,编译部件在每个指令段的开头和末尾添加上述首标和跳转指令。当 然,本领域技术人员也可以根据实际需要采用具有上述各个功能的其它部件 和/或这些部件的组合,只要这些部件和/或组合能够实现上述功能即可。接下来,将参照附图来描述根据本发明的重叠指令存取单元和重叠指令 存耳又方法。图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用于响应于处理单元执行程序时发出的指令读取请 求,从中央指令存储器IO读出所请求的压缩程序段的首标并且由此读取该压 缩程序段中的压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令 段存储到指令高速緩冲存储器402中以供处理单元401使用。为了提高执行 效率,指令解压缩单元403还在处理单元401执行当前指令段的同时,根据 所述首标而从中央指令存储器10中预先读取在执行了当前指令段之后要调 用的下一压缩指令段,将该压缩指令段解压缩,然后将解压缩后的指令段存 储到指令高速緩冲存储器402中以供处理单元401后续使用。压缩指令緩冲器404用于暂时存储指令解压缩单元403从中央指令存储 器IO读取的首标和压缩指令段、以及指令解压缩单元403在将所述压缩指令 段解压缩期间的临时数据。中央指令管理单元20用于响应于指令解压缩单元403的请求而从中央指 令存储器IO读取所请求的首标或压缩指令段,并且将所读取的首标或压缩指 令段传送给压缩指令緩冲器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从 中央指令存储器IO读取所请求的压缩程序段的首标和对应的压缩指令段,将 该压缩指令段解压缩并存储在指令高速緩沖存储器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响应于该请求而从中央 指令存储器IO读取所述存储地址上的压缩指令段及其末尾的跳转指令,并且 将所读取的压缩指令段及跳转指令发送到压缩指令缓沖器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的存储器需求,降 低了系统成本。而且,由于程序是被分段压缩存储的,因此根据本发明的方 法和装置可以支持更长的程序。尽管已经示出和描述了本发明的 一些示例性实施例,本领域技术人员应 当理解,在不背离权利要求及其等价物中限定的本发明的范围和精神的情况 下,可以对这些示例性实施例做出各种形式和细节上的变化。
权利要求
1. 一种用于对程序进行压缩和存储的方法,包括以下步骤编译该程序;利用程序中的跳转指令将编译后的程序的指令部分划分为多个指令段;压缩所述多个指令段以获得多个压缩指令段;以及将所述多个压缩指令段存储在存储器中。
2. 如权利要求l所述的方法,其中,在所述划分步骤中,通过识别程序 中的函数开头处的注释而识别出所述函数,并且利用所述函数末尾的跳转指 令来划分所述指令部分。
3. 如权利要求l所述的方法,其中,在所述划分步骤中,利用编译后的 程序中的每个跳转指令来划分所述指令部分。
4. 如权利要求l所述的方法,其中,在所述划分步骤中,判断编译后的 程序中的每个跳转指令的跳转距离,并且当该跳转指令的跳转距离超过预定 阈值时,利用该跳转指令来划分所述指令部分。
5. 如权利要求l-4之一所述的方法,其中,在所述压缩步骤中,利用针 对所使用的硬件平台进行了优化的压缩算法来压缩所述多个指令段。
6. 如权利要求1-5之一所述的方法,还包括分别在所述多个压缩指令段中的每一个的开头和末尾处添加首标和所述 跳转指令以形成多个对应的压缩程序段,所述首标包含基于程序中的调用关 系预测的接下来要调用的压缩程序段在存储器中的存储地址、所述每个压缩 指令段的长度、以及所述每个压缩指令段在存储器中的存储地址,所述跳转 指令包含与在编写所述程序时利用该跳转指令指定的接下来要调用的指令段 相对应的压缩程序段在存储器中的存储地址。
7. 如权利要求6所述的方法,其中,在所述编译步骤中生成所述函数的 调用图,并且其中,利用由所述调用图表示的调用关系来预测在所述首标中指示的接下来要 调用的压缩程序段。
8. —种用于对程序进行压缩和存储的装置,包括编译器,用于编译该程序,利用程序中的跳转指令将编译后的程序的指 令部分划分为多个指令段,并且压缩所述多个指令段以获得多个压缩指令段;以及存储器,用于存储所述多个压缩指令段。
9. 如权利要求8所述的装置,其中,编译器通过识别程序中的函数开头 处的注释而识别出所述函数,并且利用所述函数末尾的跳转指令来划分所述 指令部分。
10. 如权利要求8所述的装置,其中,编译器利用编译后的程序中的每 个跳转指令来划分所述指令部分。
11. 如权利要求8所述的装置,其中,编译器判断编译后的程序中的每 个跳转指令的跳转距离,并且当该跳转指令的跳转距离超过预定阈值时,编译器利用该跳转指令来划分所述指令部分。
12. 如权利要求8-11之一所述的装置,其中,编译器利用针对所使用的 硬件平台进行了优化的压缩算法来压缩所述多个指令段。
13. 如权利要求8-12之一所述的装置,其中,编i斧器分别在所述多个压 缩指令段中的每一个的开头和末尾处添加首标和所述跳转指令以形成多个对 应的压缩程序段,所述首标包含由该编译器基于程序中的调用关系预测的接 下来要调用的压缩程序段在存储器中的存储地址、所述每个压缩指令段的长 度、以及所述每个压缩指令段在存储器中的存储地址,所述跳转指令包含与 在编写所述程序时利用该跳转指令指定的接下来要调用的指令段相对应的压 缩程序段在存储器中的存储地址。
14. 如权利要求13所述的装置,其中,编译器在编译程序时生成所述函 数的调用图,并且利用由所述调用图表示的调用关系来预测在首标中指示的 接下来要调用的压缩程序段。
15. —种由包括处理单元、緩沖器和解压缩单元的重叠指令存取单元执 行的重叠指令存取方法,用于读取和执行以多个压缩程序段的形式存储在存 储器中的程序,其中,每个压缩程序段包括开头处的首标、压缩指令段和末 尾处的跳转指令,所述首标包含基于程序中的调用关系预测的接下来要调用 的压缩程序段的存储地址和所述压缩指令段的存储地址,所述跳转指令包含 在编写所述程序时指定的接下来要调用的压缩程序段的存储地址,所述重叠 指令存取方法包括由处理单元发出指令读取请求;由解压缩单元响应于所述指令读取请求而从存储器中读取所请求的压缩 指令段,将其解压缩,并且将解压缩后的指令段存储在緩冲器中;以及 由处理单元从緩冲器中读取和执行所述指令段,其中,在处理单元执行所述指令段的同时,由解压缩单元根据与该指令段对应 的首标中的要调用的压缩程序段的存储地址,从存储器中读取对应的压缩指 令段,将该压缩指令段解压缩,并将解压缩后的指令段存储在緩冲器中。
16. 如权利要求15所述的重叠指令存取方法,其中,所述指令读取请求包含与要读取的压缩指令段相对应的首标的存储地址,并且其中,该首标包含的对应的压缩指令段的存储地址而从存储器中读取该压缩指令段。
17. 如权利要求15-16所述的重叠指令存取方法,还包括以下步骤当 接收到指令读取请求时,解压缩单元检查所请求的压缩指令段是否已经在緩 沖器中以及是否已经被完全解压缩。
18. 如权利要求17所述的重叠指令存取方法,其中,当所请求的压缩指令段已经在緩沖器中并且已经完全被解压缩时,解压 缩单元向处理单元发送信号以启动该处理单元;当所请求的压缩指令段已经在緩沖器中但是尚未被完全解压缩时,解压 缩单元继续将该指令段解压缩,并在解压缩完成后向处理单元发送信号以启 动该处理单元;以及当所请求的压缩指令段不在緩冲器中时,解压缩单元根据所述指令读取 请求而从存储器读取所请求的压缩指令段,将其解压缩并存储在緩冲器中。
19. 如权利要求15-18所述的重叠指令存取方法,其中, 所述存储器由多个重叠指令存取单元共享。
20. —种重叠指令存取单元,用于读取和执行以多个压缩程序段的形式 存储在存储器中的程序,其中,每个压缩程序段包括开头处的首标、压缩指 令段和末尾处的跳转指令,所述首标包含基于程序中的调用关系预测的接下 来要调用的压缩程序段的存储地址和所述压缩指令段的存储地址,所述跳转 指令包含在编写所述程序时指定的接下来要调用的压缩程序段的存储地址, 所述重叠指令存取单元包括.緩沖器;处理单元,用于发送指令读取请求,从緩冲器读取指令,并且执行该指令;解压缩单元,用于响应于处理单元发送的指令读取请求,从存储器中读 取所请求的压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令段 存储在緩冲器中以供处理单元执行,其中,在处理单元执行所述指令段的同时,解压缩单元根据与该指令段对应的 首标中的要调用的压缩程序段的存储地址,从存储器中读取对应的压缩指令段,将该压缩指令^a解压缩,并将解压缩后的指令段存储在緩沖器中。
21. 如权利要求20所述的重叠指令存取单元,其中,所述指令读取请求包含与要读取的压缩指令段相对应的首标的存储地址,解压缩单元根据该首标的存储地址而从存储器中读取所述首标,并且根据该首标包含的对应的压 缩指令段的存储地址而从存储器中读取该压缩指令段。
22. 如权利要求20-21所述的重叠指令存取单元,其中,当接收到所述 指令读取请求时,解压缩单元检查所请求的指令段是否已经在緩沖器中以及 是否已经被完全解压缩。
23. 如权利要求22所述的重叠指令存取单元,其中, 当所请求的压缩指令段已经在緩冲器中并且已经完全被解压缩时,解压缩单元向处理单元发送信号以启动该处理单元;当所请求的压缩指令段已经在緩冲器中但是尚未被完全解压缩时,解压缩单元继续将该指令段解压缩,并在解压缩完成后向处理单元发送信号以启 动该处理单元;以及当所请求的压缩指令段不在緩沖器中时,解压缩单元根据所述指令读取 请求而从存储器读取所请求的压缩指令段,将其解压缩并存储在緩沖器中。
24. 如权利要求20-23所述的重叠指令存取单元,其中, 所述存储器由多个重叠指令存取单元共享。
全文摘要
本发明提供了一种重叠指令存取单元和方法以及用于对程序进行压缩和存储的方法和装置。所述重叠指令存取单元用于执行以多个压缩程序段的形式存储在存储器中的程序,并且包括缓冲器;处理单元,发送指令读取请求,从缓冲器读取指令并执行该指令;解压缩单元,响应于处理单元的指令读取请求而从存储器中读取所请求的压缩指令段,将该压缩指令段解压缩,并且将解压缩后的指令段存储在缓冲器中,其中在处理单元执行所述指令段的同时,解压缩单元根据与该指令段对应的首标中的要调用的压缩程序段的存储地址,从存储器中读取对应的压缩指令段,将该压缩指令段解压缩,并将解压缩后的指令段存储在缓冲器中以供处理单元随后使用。
文档编号G06F9/45GK101398752SQ20071015320
公开日2009年4月1日 申请日期2007年9月29日 优先权日2007年9月29日
发明者宽 冯, 敏 朱, 峥 王, 亮 陈 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1