定长指令集程序的运行方法及中央处理器与流程

文档序号:32743889发布日期:2022-12-30 20:58阅读:44来源:国知局
定长指令集程序的运行方法及中央处理器与流程

1.本披露一般涉及计算机领域。更具体地,本披露涉及一种定长指令集程序的运行方法及中央处理器。


背景技术:

2.指令集是中央处理器cpu对外封装的调度、管理、协同、执行接口的统成,是cpu封装对外指令的集合。目前指令集分为定长指令集以及变长指令集两种,其中,变长指令集中不同功能的指令长短不一致,能够将使用频率较高的语句设计得更简短,从而执行效率高,更加节省空间,并且支持指令扩展;而定长指令级的优点在于设计简单,不用考虑软件在编译、链接以及运行时的性能影响,在cpu设计和实现上相较于变长指令集更加简单,能够减短cpu设计流程周期成本。
3.但是基于定长指令集的cpu的缺点也显而易见,其在软件的编译效率、执行效率以及编译文件的空间占用率等指标上与变长指令集均存在显著差距。导致软件运行时,在编译阶段和执行阶段均会产生空间和时间上的冗余,影响软件运行效率。而设计变长指令集以及对应的编译器,对于技术人员的要求较高,花费的设计成本也随着增加。
4.有鉴于此,亟需提供一种定长指令集程序的运行方法能够对基于定长指令集cpu的指令编译和执行进行优化,以提高定长指令集程序的运行速度以及节省编译文件的空间占用率。


技术实现要素:

5.为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了一种定长指令集程序的运行方法及中央处理器,能够提高定长指令集程序的运行速度以及节省编译文件的空间占用率。
6.在第一方面中,本披露提供一种定长指令集程序的运行方法,包括:响应于应用程序的启动指令,启动程序进程;确定所述程序进程调用的优化指令;对所述优化指令进行转换以得到所述优化指令对应的定长指令;其中,优化指令的编码长度与其对应的定长指令的频度负相关;执行所述定长指令直至运行应用程序所需调用的定长指令集执行完毕。
7.在一些实施例中,所述确定所述程序进程调用的优化指令之前,还包括:对应用程序的程序代码进行编译,以得到运行应用程序所需调用的定长指令集;对所述定长指令集进行转换,以得到所述程序进程所需调用的优化指令集。
8.在一些实施例中,所述对所述定长指令集进行转换,包括:对所述定长指令集进行统计,以得到每一定长指令的频度;根据每一定长指令的频度生成每一定长指令的哈夫曼编码;基于所述哈夫曼编码生成定长指令与优化指令之间的映射关系;根据所述映射关系对所述定长指令集进行转换。
9.在一些实施例中,所述根据每一定长指令的频度生成每一定长指令的哈夫曼编码,包括:将定长指令集的指令列表在内存中以索引形式展开,其中,索引排序依照频度正
序;依据索引排序在哈夫曼树中填充定长指令,以生成每一定长指令的哈夫曼编码。
10.在第二方面中,本披露提供一种中央处理器,包括:控制器和运算器;所述控制器对接所述运算器,并配置成:在所述运算器启动程序进程之后,确定所述程序进程调用的优化指令;对所述优化指令进行转换以得到所述优化指令对应的定长指令;其中,优化指令的编码长度与其对应的定长指令的频度负相关;所述运算器,配置成:响应于应用程序的启动指令,启动程序进程;并在所述控制器对所述优化指令进行转换以得到所述优化指令对应的定长指令之后,执行所述优化指令对应的定长指令直至运行应用程序所需调用的定长指令集执行完毕。
11.在一些实施例中,所述控制器,包括:编译器,用于编译程序代码,以得到运行应用程序所需调用的定长指令集;虚拟化支撑器,用于对定长指令和优化指令进行转换,以在编译阶段将所述定长指令集转换为优化指令集;程序进程,用于存储应用程序所需调用的优化指令集,以及调用所述优化指令集中的优化指令以运行所述应用程序;所述虚拟化支撑器还用于在执行阶段将调用的优化指令转换为定长指令以供所述运算器执行。
12.在一些实施例中,所述控制器,还包括:实时统计模块,用于统计所述定长指令集中每一定长指令的频度,并根据每一定长指令的频度对每一定长指令再编码,以得到对应的优化指令。
13.在一些实施例中,所述实时统计模块采用哈夫曼树的树形结构,并配置成:根据每一定长指令的频度将定长指令填充在哈夫曼树的叶子节点中,以得到每一定长指令的哈夫曼编码。
14.在一些实施例中,所述实时统计模块,还配置成:将所述定长指令按照频度进行正序排序;依序在哈夫曼树中填充定长指令;根据每一定长指令的填充位置确定每一定长指令的哈夫曼编码,以生成每一定长指令对应的优化指令。
15.在一些实施例中,所述控制器,还包括:编译适配模块,其内部储存有所述应用程序的程序代码;所述编译器对接编译适配模块和实时统计模块,并配置成:对所述编译适配模块内的程序代码进行编译,以得到定长指令集供所述实时统计模块进行频度统计。
16.通过如上所提供的定长指令集程序的运行方法,本披露的方案设计程序进程调用优化指令以运行应用程序,由于优化指令的编码长度与其对应的定长指令的频度负相关,即在运行应用程序时,调用频繁的定长指令所对应的优化指令的编码长度较短,因此,存储在程序进程堆栈区域中的指令集所占用的空间得以缩减,节省了编译文件的空间占用率。并且程序进程运行时,调用的是在编码长度上缩减后的优化指令,数据长度的缩减使得指令读取和传输速度提升,提高了程序进程的运行效率。而在执行阶段,通过指令转换能够将优化指令再转换为定长指令,以适配定长指令集程序执行格式匹配的定长指令,能够保障指令准确执行。
17.进一步,在本披露的一些实施例中,通过哈夫曼编码生成每一定长指令对应的优化指令,该编码过程以定长指令的频度作为权重,权重越大的叶子节点距离哈夫曼树的根部越近,因此,得到的哈夫曼编码的长度也就越短,从而使编码之后的优化指令的编码长度期望值稳定降低。
附图说明
18.通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
19.图1示出了本披露实施例的定长指令集程序的运行方法的流程示意图;
20.图2示出了本披露的一些实施例的编译过程的流程示意图;
21.图3示出了本披露的一些实施例的定长指令与优化指令转换过程的流程示意图;
22.图4示出了本披露的一些实施例的哈夫曼树的结构示意图;
23.图5示出了本披露实施例的中央处理器的结构示意图;
24.图6示出了本披露的一些实施例的控制器的结构示意图。
具体实施方式
25.下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
26.应当理解,本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
27.还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
28.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0029]
目前,基于定长指令集的cpu在软件的编译效率、执行效率以及编译文件的空间占用率等指标上与变长指令集均存在显著差距。导致软件运行时,在编译阶段和执行阶段均会产生空间和时间上的冗余,影响软件运行效率。
[0030]
针对上述问题,本披露实施例提供了一种定长指令集程序的运行方法,在程序进程启动过程中,通过编码长度更简短的优化指令实现指令存储、调用和传输,从而提高运行效率,并降低编译文件的空间占用率。
[0031]
下面结合附图来详细描述本披露的具体实施方式。
[0032]
图1示出了本披露实施例的定长指令集程序的运行方法的流程示意图。参见图1,本披露实施例提供的定长指令集程序的运行方法可以包括:
[0033]
在步骤101中,响应于应用程序的启动指令,启动程序进程。
[0034]
在一些实施例中,应用程序的启动指令可以为首次启动应用程序所发出的指令,
响应于该启动指令,中央处理器cpu需对程序代码进行编译,使得应用程序由源语言编写的源程序形成二进制语言的目标程序,进而能够被计算机识别。
[0035]
在一些实施例中,应用程序的启动指令也可以为非首次启动应用程序所发出的指令,例如:二次启动该应用程序;或在首次启动中途暂停后,重新启动该应用程序所发出的指令。在该情况下,由于应用程序的程序代码已经被编译成计算机可以识别的二进制语言,因此,中央处理器的运算器可以直接执行对应定长指令以运行该应用程序。
[0036]
在一些实施例中,所述启动指令可以为外部指令,也可以为中央处理器的控制器生成的内部指令。此处不作唯一限定。
[0037]
在步骤102中,确定程序进程调用的优化指令。
[0038]
在本披露实施例中,上述优化指令与定长指令具有映射关系。区别于定长指令,不同优化指令之间,其编码长度存在差异。在本披露实施例中,优化指令的编码长度与其对应的定长指令的频度负相关。即可以理解为,在应用程序中使用频度越高的定长指令,其对应的优化指令的编码长度越短。
[0039]
需要说明的是,在实际应用中,频度高低可以按照频度区间进行划分,例如,频度位于80%至90%之间的定长指令,其对应的优化指令的编码长度为2;而频度位于60%至70%之间的定长指令,其对应的优化指令的编码长度为3。
[0040]
在计算机运行应用程序的过程中,程序进程产生,每一个程序进程对应有自己的地址空间,可以包括文本区域、数据区域和堆栈区域。其中,堆栈区域存储着程序进程运行过程调用的指令。
[0041]
在引入优化指令前,程序进程的堆栈区域存储定长指令,不论指令调用频度高低,指令的编码长度是既定的,导致高频的指令占用了大量的存储空间;而引入编码长度与频度相关的优化指令后,由于高频指令的编码长度得到大幅缩减,因此,在程序进程中,编译文件所占用的空间得以大量释放。并且程序指令调用指令的速度也得以提升。
[0042]
在步骤103中,对优化指令进行转换以得到优化指令对应的定长指令。
[0043]
虽然在程序进程中,本披露实施例的定长指令集程序的运行方法将存储、调用和运输的指令格式进行了转换,但由于中央处理器cpu仍是基于定长指令集设计的,其运算器仅能够识别定长指令,因此,在指令执行的阶段,需在步骤103中将优化指令转换为对应的定长指令,以运算器进行识别和执行。
[0044]
在一些实施例中,可以通过存储在cpu内部的映射关系表查找对应的定长指令。在一些实施例中,可以利用动态解码技术,对优化指令进行动态解码以得到对应的定长指令。相对于内部存储的映射关系表,利用动态解码技术能够降低附加数据的空间占用率。
[0045]
在步骤104中,执行定长指令直至运行应用程序所需调用的定长指令集执行完毕。
[0046]
在本披露实施例中,应用程序的运行过程可以看作具有执行次序的定长指令集的执行过程,当定长指令集中所有指令执行完毕,应用程序运行结束,直至新的任务产生。
[0047]
通过如上所提供的定长指令集程序的运行方法,本披露的方案设计程序进程调用优化指令以运行应用程序,由于优化指令的编码长度与其对应的定长指令的频度负相关,即在运行应用程序时,调用频繁的定长指令所对应的优化指令的编码长度较短,因此,存储在程序进程堆栈区域中的指令集所占用的空间得以缩减,节省了编译文件的空间占用率。并且程序进程运行时,调用的是在编码长度上缩减后的优化指令,数据长度的缩减使得指
令读取和传输速度提升,提高了程序进程的运行效率。而在执行阶段,通过指令转换能够将优化指令再转换为定长指令,以适配定长指令集程序执行格式匹配的定长指令,能够保障指令准确执行。
[0048]
在上述实施例的步骤101中,已经说明了应用程序的启动指令可以为首次启动应用程序所发出的指令。在此情况下,响应于该启动指令,cpu需对程序代码进行编译,使其转换为二进制语言以能够被计算机识别。
[0049]
本披露的一些实施例对上述编译过程进行了设计,以令编译后存储在程序进程内的为优化指令所构成的优化指令集。
[0050]
下面结合图2对本披露的一些实施例的编译过程进行说明,本披露的一些实施例中,在执行上述实施例中的步骤102之前,可以执行以下步骤,包括:
[0051]
在步骤201中,对应用程序的程序代码进行编译,以得到运行应用程序所需调用的定长指令集。
[0052]
在本披露实施例中,可以利用编译器处理技术人员所编写的程序代码,得到运行应用程序所需调用的定长指令集。本披露对于程序代码的编程语言并没有严格的限定,在实际应用中,可以采用多种编程语言,例如:c语言、python以及java等。
[0053]
程序是指令的有序集合,用于完成特定的功能。通过对应用程序的程序代码进行编译能够得到编译文件,即上述的运行应用程序所需调用的定长指令集,该定长指令集是由若干定长指令有序排列所形成的,程序运行过程即为该定长指令集中的定长指令有序执行的过程。
[0054]
在步骤202中,对定长指令集进行转换,以得到程序进程所需调用的优化指令集。
[0055]
需要说明的是,步骤202可以参考上述实施例中的步骤103,对定长指令与优化指令进行转换。即,在一些实施例中,可以通过存储在cpu内部的映射关系表将定长指令转换为对应的优化指令,以形成优化指令集。在一些实施例中,也可以利用动态编码技术,对优化指令进行动态编码以得到对应的优化指令,以形成优化指令集。
[0056]
为了便于本领域技术人员理解,下面以哈夫曼编码技术作为示例,说明定长指令与优化指令的转换过程。
[0057]
图3示出了本披露的一些实施例的定长指令与优化指令转换过程的流程示意图。请参见图3,在本披露的一些实施例中,可以按照以下步骤将定长指令转换为优化指令,具体包括:
[0058]
在步骤301中,对定长指令集进行统计,以得到每一定长指令的频度。在一些实施例中,在编译过程可以统计每一定长指令出现的次数,生成每一定长指令的频度。
[0059]
在步骤302中,根据每一定长指令的频度生成每一定长指令的哈夫曼编码。
[0060]
下面对哈夫曼编码过程进行示例性说明:
[0061]
假设统计得到定长指令a、b、c、d、e的频度依次为34%、18%、21%、13%、14%;定长指令a至e构成哈夫曼树构建的叶子集合。
[0062]
将叶子集合中频度最低的两个定长指令d和e取出作为新构造的哈夫曼树的左右子树,并以该两个定长指令d和e的频度之和作为其根节点de的权值;在叶子集合中删去定长指令d和e,并将删去的定长指令对应的根节点de作为新的叶子加入至叶子集合中;重复执行上述左右子树的构建步骤以及叶子集合的更新步骤,依次得到根节点bc和ade,直至叶
子集合中仅剩下一个根节点abcde为止,得到哈夫曼树;构造好哈夫曼树后,就可根据哈夫曼树进行哈夫曼编码。
[0063]
基于上述过程,最终可生成如图4所示的哈夫曼树。假设本披露实施例定义哈夫曼树向左分支前进编码为0,向右分支前进编码为1,对应的,定长指令a的哈夫曼编码为11;定长指令b的哈夫曼编码为00;定长指令c的哈夫曼编码为01;定长指令d的哈夫曼编码为100;定长指令e的哈夫曼编码为101。
[0064]
需要说明的是,哈夫曼树向左分支前进编码以及向右分支前进编码可以依据实际情况进行修改,例如,在实际应用中,也可以定义哈夫曼树向左分支前进编码为1,向右分支前进编码为0。
[0065]
由于定长指令集的编码长度是固定的,以目前常见的操作码opcode长度固定为12位的定长指令为例,每条定长指令需占领32位的内存空间,其中操作码opcode占据12位。而经过上述哈夫曼编码进行优化后,其操作码opcode可以缩减为最少2位,假如定长指令集内定长指令数量在4096条,经过上述哈夫曼编码进行优化后的优化指令的操作码opcode最多占领12位,由此可以大幅优化指令的空间占用率以及调用指令的时间占用率。
[0066]
在一些实施例中,在步骤302中,为了便于哈夫曼树的构建,可以将定长指令集的指令列表在内存中以索引形式展开,接着依据索引排序在哈夫曼树中填充定长指令,以生成每一定长指令的哈夫曼编码。其中,索引排序依照频度正序。
[0067]
可以将上述过程理解为,将叶子集合中的定长指令依照频度由低至高进行排序,每次执行左右子树的构建步骤时,在叶子集合中调取排序第一和排序第二的定长指令即可。
[0068]
在步骤303中,基于哈夫曼编码生成定长指令与优化指令之间的映射关系。
[0069]
在一些实施例中,一条指令除包含有上文所述的操作码opcode部分外,还可以包括有多个参数部分,本披露实施例可以对操作码opcode部分进行优化,使其占用更少的空间。对操作码opcode部分优化后,用优化后的编码替换原定长指令中的操作码opcode部分,可以得到对应的优化指令,进而形成定长指令与优化指令之间的映射关系。
[0070]
在一些实施例中,可以采用静态哈夫曼编码,将形成的哈夫曼树存储在一个地址空间,以形成一个存储在cpu内部的定长指令与优化指令之间的映射关系表。在另一些实施例中,还可以采用动态哈夫曼编码,其使用一棵动态变化的哈夫曼树,对新字符的编码是根据原始数据中旧字符得到的哈夫曼树来进行的,编码和解码使用相同的初始哈夫曼树,每处理完一个字符,编码和解码使用相同的方法修改哈夫曼树。
[0071]
由于动态哈夫曼树是实时动态更新的,且编码和解码使用相同的方法修改哈夫曼树,所以无需为解码而保存哈夫曼树的信息。通过动态哈夫曼编码能够使得哈夫曼树的存储空间降为零。在此基础上,中央处理器的内存空间在进行指令转换时进一步地得到释放,并且解码后得到的定长指令的准确性也得以保障。
[0072]
在步骤304中,根据映射关系对定长指令集进行转换。
[0073]
在一些实施例中,定长指令集转换为优化指令集后,存储在程序进程的堆栈区域,响应于应用程序的启动指令,应用程序被激活,程序进程开始调用堆栈区域内的优化指令。
[0074]
相应地,在一些实施例中,若哈夫曼树被存储在中央处理器的内部,上文提及的步骤103可以视作通过查表操作,根据优化指令得到对应的定长指令。在一些实施例中,若采
用了动态哈夫曼编码,则步骤103可以视作动态哈夫曼解码的过程,对哈夫曼编码进行动态解码以得到对应的定长指令。
[0075]
对应于上文任一实施例所述的定长指令集程序的运行方法,本披露还提供了一种中央处理器cpu。图5示出了本披露实施例的中央处理器的结构示意图,参见图5,本披露提供的中央处理器包括:控制器和运算器。
[0076]
其中,控制器对接运算器,并配置成:在所述运算器启动程序进程之后,确定所述程序进程调用的优化指令;对所述优化指令进行转换以得到所述优化指令对应的定长指令。其中,优化指令的编码长度与其对应的定长指令的频度负相关。
[0077]
其中,运算器配置成:响应于应用程序的启动指令,启动程序进程;并在所述控制器对所述优化指令进行转换以得到所述优化指令对应的定长指令之后,执行所述优化指令对应的定长指令直至运行应用程序所需调用的定长指令集执行完毕。
[0078]
运算器是计算机中进行各种算术和逻辑运算操作的部件,主要任务在于执行任务;控制器是作为中央处理器的决策机构,主要任务是发布命令,发挥计算机系统操作的协调与指挥作用。在本披露实施例中,控制器用于对定长指令与优化指令进行相互转换,在控制器中对指令进行处理时,以优化指令为对象,能够缩短处理指令所占用的内存,且能够提高处理效率;而通过控制器对定长指令与优化指令进行相互转换,能够在发布命令给运算器时,将指令的格式恢复成运算器可以识别的定长指令的格式,以保障任务的顺畅执行。
[0079]
本披露实施例提出的中央处理器还可以包括寄存器。寄存器是中央处理器内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。在本披露实施例中,寄存器中可以存放控制器处理得到的定长指令,和/或运算器执行定长指令所需的数据。
[0080]
通过上述实施例提供的中央处理器,能够解决现有的基于定长指令集设计的中央处理器在指令编译和执行时,空间占用率过高,存在空间和时间上的冗余,影响软件运行效率的问题。通过在控制器内部处理缩短编码长度后的优化指令,从而释放大量的内存空间,并且提高指令的调用和传输速度。
[0081]
进一步地,本披露的一些实施例对控制器的内部结构进行了设计,可参见图6,图6示出了本披露的一些实施例的控制器的结构示意图。
[0082]
下面结合图6对本披露的一些实施例的控制器的内部结构进行说明,在本披露的一些实施例中,所述控制器包括:编译器、虚拟化支撑器以及程序进程。
[0083]
其中,编译器用于编译程序代码,以得到运行应用程序所需调用的定长指令集。相应地,虚拟化支撑器用于对定长指令和优化指令进行转换,以在编译阶段将所述定长指令集转换为优化指令集。
[0084]
上述编译阶段指的是中央处理器运行应用程序时,对存储在中央处理器内的程序代码进行编译,以得到运行应用程序所需调用的定长指令集的阶段。
[0085]
其中,程序进程用于存储应用程序所需调用的优化指令集,以及调用所述优化指令集中的优化指令以运行所述应用程序。相应地,虚拟化支撑器还用于在执行阶段将调用的优化指令转换为定长指令以供运算器执行。
[0086]
上述执行阶段指的是定长指令被调用至运算器中进行指令执行的阶段。
[0087]
一方面,在编译阶段,虚拟化支撑器可以理解为一个上层的程序进程与下层的编
译器之间的中间层,在该中间层对定长指令和优化指令进行转换,进而在程序进程层面将指令的格式转换为优化指令的格式,以在程序进程层面节省指令的空间占用率。
[0088]
另一方面,在执行阶段,虚拟化支撑器还可以视作在上层的程序进程与底层的运算器之间的中间层,通过在该中间层对定长指令和优化指令进行转换,在运算器层面将指令格式调整回定长指令的格式,以便运算器识别和执行。
[0089]
在现有的中央处理器设计中,若使用变长指令集则需要设计相应的基于变长指令集的编译器,相应地,设计要求和复杂度大幅提升。通过构建中间层,即本披露实施例中的虚拟化支撑器,实现定长指令和优化指令的相互转换,令编译器无需改动,即可在程序进程层面使用编码长度不固定的优化指令。通过软件上的处理来弥补硬件性能的不足,进而节省程序进程中指令的空间占用率和时间占用率,继而提高程序运行效率。
[0090]
在一些实施例中,上述控制器还可以包括:指令列表。该指令列表为定长指令集中各类型定长指令的集合。虚拟化支撑器可以对接程序进程和指令列表,其可以存储有定长指令和优化指令之间的映射关系,并配置成:根据程序进程调用的优化指令在所述指令列表中确定待执行的定长指令,以发送给运算器进行执行。
[0091]
在一些实施例中,待执行的定长指令可以直接发送至运算器中进行执行。在另一些实施例中,待执行的定长指令也可以暂存在寄存器中,待运算器执行完当前正在执行的定长指令后,再从寄存器中调取并执行下一个定长指令。即,上述将定长指令发送至运算器进行执行的动作可以为直接发送,也可以为间接发送,本披露不作唯一限定。
[0092]
在本披露的一些实施例中,控制器还可以包括:实时统计模块。该实时统计模块用于统计定长指令集中每一定长指令的频度,并根据每一定长指令的频度对每一定长指令再编码,以得到对应的优化指令。
[0093]
进一步地,在一些实施例中,实时统计模块还可以对指令列表进行更新,例如,将得到的统计数据增加至指令列表中。该更新动作包括但不限于:将每一定长指令的频度填充至指令列表中相应的位置,和/或将每一定长指令再编码后的编码信息填充至指令列表中相应的位置。
[0094]
下面对实时统计模块的结构进行示例性说明,在一些实施例中,所述实时统计模块采用哈夫曼树的树形结构,并配置成:根据每一定长指令的频度将定长指令填充在哈夫曼树的叶子节点中,以得到每一定长指令的哈夫曼编码。
[0095]
可以理解的是,定长指令构成构建哈夫曼树的叶子集合,将叶子集合中的每一叶子元素填充至哈夫曼树中的叶子节点,即可得到哈夫曼树。而哈夫曼树中每一叶子节点都具有自己的哈夫曼编码,因此,将定长指令填充至叶子节点后即生成了每一定长指令的哈夫曼编码。
[0096]
其中,具体的填充过程已经在前述实施例的哈夫曼编码过程中进行了详尽的说明,此处不再展开赘述。
[0097]
需要说明的是,本披露实施例中的实时统计模块可以采用静态哈夫曼树结构,也可以采用动态哈夫曼树结构。采用动态哈夫曼树结构可以通过动态哈夫曼编码使得哈夫曼树的存储空间降为零。在此基础上,虚拟化支撑器能动态地重构出同步的哈夫曼编码树,而不需要任何附加数据,进一步降低了哈夫曼树的存储空间,且保证了解码后得到的定长指令的准确性。
[0098]
可以理解的是,上述对于实时统计模块的结构说明仅是本披露给出的一种示例性说明,不构成对本披露的唯一限定。
[0099]
进一步地,在一些实施例中,所述实时统计模块还可以配置成:将所述定长指令按照频度进行正序排序;依序在哈夫曼树中填充定长指令;根据每一定长指令的填充位置确定每一定长指令的哈夫曼编码,以生成每一定长指令对应的优化指令。
[0100]
实时统计模块预先根据频度对定长指令进行排序,由于哈夫曼树的构建过程是每次调取权值最低的两个叶子元素以构建左右子树,预先排序后,可以直接根据叶子元素的位置进行数据调取,而无需每次遍历叶子集合进行权值比较,提高了哈夫曼树的构建速度。
[0101]
可以理解的是,上述依序在哈夫曼树中填充定长指令的过程为依据频度正序调取定长指令,并根据哈夫曼树的构建规则将其填入对应的叶子节点中。
[0102]
在实际应用中,技术人员采用编程语言编写应用程序的程序代码,而计算机无法识别编程语言,其仅能够识别二进制语言,因此,需要编译器将程序代码编译为计算机可以识别的定长指令集。
[0103]
在本披露的一些实施例中,控制器内还包括:编译适配模块,其内部储存有所述应用程序的程序代码。在控制器中,编译器对接编译适配模块和实时统计模块,并配置成:对所述编译适配模块内的程序代码进行编译,以得到定长指令集供所述实时统计模块进行频度统计。
[0104]
在本披露实施例中,编译适配模块可以视作一块地址空间,用于搭载应用程序的程序代码,编译器对程序代码编译后生成计算机可运行的应用程序,当产生启动该应用程序的启动指令后,控制器生成基于优化指令的程序进程以运行该应用程序。
[0105]
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1