一种分支预测器的隔离方法、预测方法及分支预测器
文献发布时间:2023-06-19 09:49:27
技术领域
本申请涉及分支预测技术领域,具体而言,涉及一种分支预测器的隔离方法、预测方法及分支预测器。
背景技术
处理器核作为硬件资源,通常会被很多软件通过调度的方式共享。比如:用户态(user)和系统态(supervisor)之间的共享、客户机(guest)和宿主机(host)之间的共享,以及同步多线程(SMT)的共享。对于用户态和系统态的相互切换,即,处理器可以在一段时间内执行用户程序A,在下一段时间内执行系统程序,再在下一段时间内又执行用户程序B。对于客户机和宿主机之间的切换,即,处理器可以在一段时间内执行客户机A,在下一段时间段内执行宿主机,再在下一段时间内执行客户机B。对于同步多线程来说,处理器具有多个硬件线程,可以同时执行多个软件程序。
分支预测器作为处理器核的一部分,通常也是直接共享的。由于分支预测器共享的特性,攻击程序可以将分支预测器训练到特定状态,从而改变合法程序的预测结果和推测执行,达到泄露信息的目的。近来的幽灵漏洞(spectre)就是利用了这种特性。现有技术中,通过将不同的程序之间隔离开来保证用户的信息安全,例如:通过在分支预测器的表项中增加程序对应的ID,这样将额外的增加了分支预测表的存储空间,将会带来较大的存储开销。
发明内容
本申请实施例的目的在于提供一种分支预测器的隔离方法、预测方法及分支预测器,用以以较低的存储开销来保证用户信息安全。
第一方面,本申请实施例提供一种分支预测器的隔离方法,包括:获取训练信息,所述训练信息包括分支信息和第一地址信息,所述第一地址信息包括第一取指地址和/或第一分支历史;获取所述训练信息对应的待隔离软件的多个第一软件属性,并利用预设编码方式对所述多个第一软件属性进行编码,获得一个第一编码信息;根据所述第一地址信息和所述第一编码信息,利用哈希算法从分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,以实现对所述待隔离软件的分支信息与其他待隔离软件的分支信息隔离。
本申请实施例通过将多个软件属性进行统一编码,避免了设置多种比较逻辑,只需要一种比较逻辑即可,降低了硬件开销和硬件设计的复杂度。
进一步地,所述多个第一软件属性包括所述待隔离软件对应的线程标识、用户系统态标识、客户宿主模式标识、用户ID和宿主ID中的多项;所述利用预设编码方式对所述多个第一软件属性进行编码,获得一个第一编码信息,包括:将所述线程标识、用户系统态标识、客户宿主模式标识、用户ID和宿主ID中的多项进行拼接,获所述第一编码信息。
进一步地,所述根据所述第一地址信息和所述第一编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,包括:利用第一哈希算法对所述第一地址信息进行哈希计算,获得对应的第一索引信息;利用第二哈希算法对所述第一编码信息进行哈希计算,获得对应的第一安全信息;若所述分支预测表不包括tag项,则根据所述第一索引信息从所述分支预测表中获取对应的表项;将所述第一安全信息和所述分支信息写入所述表项中。本申请实施例通过在分支预测表中增加对第一编码信息进行哈希后获得第一安全信息,用以区分分支预测表中分支信息的用户,从而实现了将分支信息进行隔离,一方面提高了对分支信息的安全性,另一方面降低了分支预测器的存储开销。
进一步地,所述根据所述第一地址信息和所述第一编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,还包括:若所述分支预测表包括tag项,则利用第三哈希算法对所述第一地址信息进行哈希计算,获得对应的第一tag;根据所述第一索引信息和所述第一tag从所述分支预测表中获取目标分支预测表中的表项;将所述第一安全信息/所述分支信息写入所述表项中。
对于分支预测表中包含tag项的情况,本申请实施例通过将待隔离软件的第一编码信息进行哈希后作为安全信息与分支信息一同写入,因此,通过安全信息实现了分支信息的安全,并通过哈希的方式降低了预测表的存储开销。
进一步地,所述根据所述第一地址信息和所述第一编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,包括:根据所述第一地址信息和所述第一编码信息生成新的第一地址信息;若所述分支预测表不包括tag项,则利用第四哈希算法对所述新的第一地址信息进行哈希计算,获得对应的第二索引信息;根据所述第二索引信息从所述分支预测表中获取对应的表项;将所述分支信息写入所述表项中。本申请实施例通过将第一编码信息与第一地址信息进行拼接,获得新的第一地址信息,用新的第一地址信息将分支信息写入分支预测表中,一方面提高了分支信息的安全性,另一方面,不需要额外增加信息,进一步降低了分支预测器的存储开销。
进一步地,所述根据所述第一地址信息和所述编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,还包括:若所述分支预测表包括tag项,则利用第四哈希算法对所述第一地址信息或所述新的第一地址信息进行哈希计算,获得对应的第三索引信息;利用第五哈希算法对所述第一地址信息或所述新的第一地址信息进行哈希计算,获得对应的第二tag;其中所述第三索引信息和所述第二tag中,有至少一个是对新的第一地址信息进行哈希计算获得的;根据所述第三索引信息和所述第二tag从所述分支预测表中获取目标分支预测表中的表项;将所述分支信息写入所述表项中。本申请实施例通过将第一编码信息与第一地址信息进行拼接,获得新的第一地址信息,用新的第一地址信息将分支信息写入分支预测表中,一方面提高了分支信息的安全性,另一方面,不需要额外增加信息,进一步降低了分支预测器的存储开销。
进一步地,所述利用第二哈希算法对所述第一编码信息进行哈希计算,包括:按照预设周期生成第一随机数,并根据所述第一随机数和所述第一编码信息生成随机第一编码信息;利用所述第二哈希算法对所述随机第一编码信息进行哈希计算。通过加入随机数防止了黑客的反向工程,从而提高分支信息的安全性。
进一步地,所述利用第四哈希算法对所述新的第一地址信息进行哈希计算,包括:根据预设周期生成第二随机数,根据所述第二随机数和所述新的第一地址信息生成随机第一地址信息;利用第四哈希算法对所述随机第一地址信息进行哈希计算。本申请实施例通过引入随机数进一步提高了信息的安全性。通过加入随机数防止了黑客的反向工程,从而提高分支信息的安全性。
第二方面,本申请实施例提供一种分支预测器的预测方法,包括:
获取预测信息,所述预测信息包括第二地址信息,所述第二地址信息包括第二取指地址和/或第二分支历史;获取所述预测信息对应的待预测软件的多个第二软件属性,并利用预设编码方式对所述多个第二软件属性进行编码,获得一个第二编码信息;根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息;根据所述分支信息进行分支预测。本申请实施例通过对多个第二软件属性进行统一编码,从而只需要通过一套比较逻辑,降低了硬件开销。
进一步地,所述根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息,包括:利用第一哈希算法对所述第二地址信息进行哈希计算,获得对应的第二索引信息;利用第二哈希算法对所述第二编码信息进行哈希计算,获得对应的第二安全信息;所述分支预测表不包括tag项,则根据所述第二索引信息从所述分支预测表中获取对应的表项;若所述表项中的第一安全信息与所述第二安全信息一致,则从所述表项中获取对应的分支信息。本申请实施例通过利用第二安全信息对软件进行安全验证,在验证通过的情况下获取对应的分支信息,从而确保获取分支信息的软件为合法软件。
进一步地,所述根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息,还包括:若所述分支预测表包括tag项,则利用第三哈希算法对所述第二地址信息进行哈希计算,获得对应的第二tag;根据所述第二索引信息和所述第二tag从所述分支预测表中获取对应的表项;若所述表项中的第一安全信息与所述第二安全信息一致,则从所述表项中获取对应的分支信息。本申请实施例通过利用第二安全信息对软件进行安全验证,在验证通过的情况下获取对应的分支信息,从而确保获取分支信息的软件为合法软件。
进一步地,所述根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息,包括:根据所述第二地址信息和所述第二编码信息生成新的第二地址信息;若所述分支预测表不包括tag项,则利用第四哈希算法对所述新的第二地址信息进行哈希计算,获得对应的第四索引信息;根据所述第四索引信息从所述分支预测表中获取对应的表项;获取所述表项中的分支信息。
进一步地,所述根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息,还包括:若所述分支预测表包括tag项,则利用第四哈希算法对所述第二地址信息或所述新的第二地址信息进行哈希计算,获得对应的第五索引信息;利用第五哈希算法对所述第二地址信息或所述新的第二地址信息进行哈希计算,获得对应的第三tag;其中,所述第五索引信息和所述第三tag中至少一个为对所述新的第二地址信息进行哈希计算获得;根据所述第五索引信息和所述第三tag从多张分支预测表中获取目标分支预测表中的表项;获取所述表项中的分支信息。
本申请实施例通过将第二编码信息与第二地址信息进行拼接,获得新的第二地址信息,由于新的第二地址信息中包括了表征软件身份的第二编码信息,因此在根据新的第二地址信息获取分支信息时,能够保证分支预测表中的分支信息只被合法身份的软件获取,提高了分支预测器的安全性。
进一步地,所述利用第二哈希算法对所述第二编码信息进行哈希计算,包括:按照预设周期生成第三随机数,并根据所述第三随机数和所述第二编码信息生成随机第二编码信息;利用所述第二哈希算法对所述随机第二编码信息进行哈希计算。
进一步地,所述利用第四哈希算法对所述新的第二地址信息进行哈希计算,包括:按照预设周期生成第四随机数,根据所述第四随机数和所述新的第二地址信息生成随机第二地址信息;利用第四哈希算法对所述随机第二地址信息进行哈希计算。
本申请实施例通过在哈希计算时加入随机数,防止黑客通过反向工程获得对应的索引信息,提高了分支信息的安全性。
第三方面,本申请实施例提供一种分支预测器,包括:训练信息获取模块,用于获取训练信息,所述训练信息包括分支信息和第一地址信息,所述第一地址信息包括第一取指地址和/或第一分支历史;第一编码模块,用于获取所述训练信息对应的待隔离软件的多个第一软件属性,并利用预设编码方式对所述多个第一软件属性进行编码,获得一个第一编码信息;写入模块,用于根据所述第一地址信息和所述第一编码信息,利用哈希算法从分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,以实现对所述待隔离软件的分支信息与其他待隔离软件的分支信息隔离。
第四方面,本申请实施例提供另一种分支预测器,包括:预测信息获取模块,用于获取预测信息,所述预测信息包括第二地址信息,所述第二地址信息包括第二取指地址和/或第二分支历史;第二编码模块,用于获取所述预测信息对应的待预测软件的多个第二软件属性,并利用预设编码方式对所述多个第二软件属性进行编码,获得一个第二编码信息;信息读取模块,用于根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息;预测模块,用于根据所述分支信息进行分支预测。
第五方面,本申请实施例提供一种处理器,包括第二方面所述的分支预测器。
第六方面,本申请实施例提供一种电子设备,包括:处理器、存储器和总线,其中,所述处理器中包括第二方面所述的分支预测器;所述处理器和所述存储器通过所述总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器中的分支预测器调用所述程序指令能够执行第一方面或第二方面的方法。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为对照实施例提供的分支预测器预测的流程示意图;
图2为本申请实施例提供的分支预测器的隔离方法流程示意图;
图3为本申请实施例提供的一种无tag的分支预测表的分支预测器隔离方法流程示意图;
图4为本申请实施例提供的一种有tag的分支预测表的分支预测器隔离方法流程示意图;
图5为本申请实施例提供的另一种包含有tag的分支预测表的分支预测器隔离方法流程示意图;
图6为本申请实施例提供的另一种无tag的分支预测表的分支预测器隔离方法流程示意图;
图7为本申请实施例提供的又一种有tag的分支预测表的分支预测器隔离方法流程示意图;
图8为本申请实施例提供的再一种有tag的分支预测表的分支预测器隔离方法示意图;
图9为本申请实施例提供的一种分支预测器的预测方法流程示意图;
图10为本申请实施例提供的一种分支预测器的预测方法示意图;
图11为本申请实施例提供的另一种分支预测器的预测方法示意图;
图12为本申请实施例提供的分支预测器的结构示意图;
图13为本申请实施例提供的另一种分支预测器的结构示意图;
图14为本申请实施例提供的电子设备实体结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
现有的处理器架构一般使用流水线(pipeline)技术实现多条指令的并行处理,并结合使用分支预测、乱序执行等技术提升流水线的执行效率。作为一种实施方式,五级流水线的处理过程包括取值(instruction fetch)、译码(instruction decode)、执行(execute)、访存(memory access)和写回(write back);为解决在处理分支指令时,处理器核等待分支指令的执行结果来确定下一步取指而导致的流水线延迟,流水线的前端可设置分支预测单元,以实现分支预测。分支指令通常分为两种情况:分支指令不跳转,则下一步指令为分支指令下一步顺序的指令;分支指令跳转,则下一步指令为跳转到的指令。
当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕。流水线越长,处理器等待的时间便越长,因为它必须等待分支指令处理完毕,才能确定下一条进入流水线的指令。
分支预测技术便是为解决这一问题而出现的。分支预测技术包含编译时进行的静态分支预测和硬件在执行时进行的动态分支预测。
静态分支预测方法就是任选一条分支:1)认为branch一定会token;2)认为branch一定不会token;这样平均命中率为50%。
动态分支预测策略是分支预测缓冲区(Branch Prediction Buff)或分支历史表(branch history table)。对于BTB来说,BTB用于记录一条分支指令的位置、类型、跳转地址等信息;BHT用于记录分支过去是否跳转的历史信息。
分支预测器具有共享的特征,不同的共享方式会导致不同层面的信息安全问题。例如:SMT的多个硬件线程相互共享分支预测器,会导致攻击者可以影响运行在一个物理核上的其他线程的预测结果和推测执行;User和Supervisor共享分支预测器,会导致作为用户程序的攻击者可以影响系统态程序的预测结果和推测执行;Guest和Host共享分支预测器,会导致作为客户机的攻击者可以影响宿主机程序的预测结果和推测执行;User/Guest和User/Guest之间分时共享分支预测器(进程/Guest切换),会导致作为用户程序/客户机的攻击者可以影响后续切换进来的其他用户程序/客户机的预测结果和推测执行等等。
图1为对照实施例提供的分支预测器预测的流程示意图,如图1所示,分支预测器中存储有分支预测表,可以理解的是,该分支预测表可以是上述提到的BTB,也可以是分支历史表。分支预测表中存储有分支信息,作为一种实施方式,图1中的分支预测器中的分支预测表输入为取指地址和分支历史,在实际应用中,分支预测表中还可以是一张单独的表,具体根据实际情况创建相应个数的表。采用两种不同的哈希方式将取指地址和分支历史进行哈希,获得对应的索引信息(index)和标签(tag)。其中,index用于同时从两路分支预测表中各读取出一个表项;tag用于与读出的两个表项中的tag域进行比较,将与哈希获得的tag与表项中的tag域相同的分支信息取出进行预测。
同样地,分支预测表在初始时可以是空的,需要后续将分支信息写入表中,其写入的过程与读取类似,获取取指地址、分支历史和分支信息,通过对取指地址和分支历史进行哈希,获得index,根据index将分支信息存入对应的分支预测表的表项中。
隔离可以解决上述共享带来的信息安全问题,目前有两种隔离方案:
第一种,通过冲刷(flush)的方式,由于大部分的共享都是通过软件切换实现的,那么在软件切换时,可以将分支预测器中存储的状态全部冲刷掉,从而避免切换前的软件(攻击者)可以影响切换后的软件(受害者)。但是这种方式会导致每次软件切换后分支预测器都需要重新训练,会带来性能开销。
第二种,通过在分支预测器的表项中增加额外的信息。例如:SMT ID,user/supervisor,guest/host,user ID,guest ID等,这些信息记录了分支预测器表项被创建的程序的标识,在预测时,只有具有与该程序同样的权限或更高的权限的程序才可以使用该表项。这种方式面对每种隔离范围的需求,都需要添加相应的信息进入分支预测器表项,增加额外的存储空间,并且,上述各个信息对应的比特数(bit)不同,分支预测器在进行判断时需要多种比较逻辑,给从而使得硬件开销较大。
为了能够实现分支预测器的隔离,并且不会增加较大的硬件开销,本申请实施例提供一种分支预测器的隔离方法,该方法通过将待隔离软件的身份信息进行统一编码,从而使得分支预测期只通过一套比较逻辑便能实现将不同待隔离软件进行隔离的目的,减少了硬件上的开销。
下面将具体介绍分支预测器的隔离方法,如图2所示,该方法包括:
步骤201:获取训练信息,所述训练信息包括分支信息和第一地址信息,所述第一地址信息包括第一取指地址和/或第一分支历史;
步骤202:获取所述训练信息对应的待隔离软件的多个第一软件属性,并利用预设编码方式对所述多个第一软件属性进行编码,获得对应的第一编码信息;
步骤203:根据所述第一地址信息和所述第一编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,以实现对所述待隔离软件的分支信息与其他待隔离软件的分支信息隔离。
在步骤201中,训练信息中的第一取指地址可以是通过取指地址生成模块生成。同样的,第一分支历史可以通过分支历史生成模块生成。分支信息可以包括跳转类型、分支地址、目标地址和跳转计数器中的一种或多种。其中,跳转类型可以是间接跳转、直接跳转或条件跳转等。跳转计数器的数值用于表征跳转或不跳转的可信度。
在步骤202中,待隔离软件为取指地址对应的软件,例如可以是运行在逻辑核上的软件、用户态、系统态、客户机、宿主机,还可以是多线程中的一个等。每个软件都对应用于表征其身份信息的多个第一软件属性,其中,多个第一软件属性信息中包括待隔离软件对应的线程标识、用户系统态标识、客户宿主模式标识、用户ID和宿主ID中的多项,还可以包括其他标识信息,本申请实施例对此不作具体限定。其中,线程标识用于表征待隔离软件运行在哪个线程(thread)上,可以用1bit区分;用户系统态用于表征待隔离软件运行在用户态模式还是运行在系统态模式,可以用1bit区分;客户宿主模式标识用于表征待隔离软件运行在客户机模式还是运行在宿主机模型,也可以用1bit区分;用户ID即为待隔离软件的标识,可以用32个bit表示;宿主ID可以用12bit区分,若待隔离软件运行在宿主机模式,则用0表示,若待隔离软件运行在客户机模式,则就是待隔离软件的宿主ID。可以理解的是,上述每个标识对应的bit数可以根据实际情况设定,本申请实施例只是一种举例。由上可知,待隔离软件对应的多个第一软件属性中包括了多个位数不同的标识,为了能够通过一套比较逻辑实现对待隔离软件的区分,本申请实施例利用预设编码方式对多个第一软件属性进行统一编码,使得将所有的待隔离软件对应的多个第一软件属性都编码成统一位数的编码信息。可以理解的是,编码方式可以有很多种,只要能够实现将待隔离软件对应的多个第一软件属性编码成统一格式即可。本申请实施例不对具体的编码方式进行限定。
在步骤203中,哈希算法是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。常用的哈希算法包括:直接寻址法、数字分析法、平方取中法、折叠法、随机数法和除留余数法等。根据第一地址信息和第一编码信息,利用哈希算法可以从分支预测表中获取对应的表项,并且将分支信息写入到表项中。
本申请实施例通过将多个软件属性进行统一编码,避免了设置多种比较逻辑,只需要一种比较逻辑即可,降低了硬件开销和硬件设计的复杂度。
在上述实施例的基础上,在对第一身份信息进行编码时,可以将线程标识、用户系统态标识、客户宿主模式标识、用户ID和宿主ID进行拼接,按照上述实施例中各个标识对应的bit数,拼接后可以获得一个47bit的第一编码信息。对第一身份信息进行编码相比于直接在分支预测表中增加对应的位,除了降低了硬件开销外,还可以更灵活的对特定的隔离功能进行开关。即,如果不需要某种隔离功能,现有技术中需要将相应的bit从分支预测表中删除掉,那么则需要进行硬件上的改动,或者关闭相应的比较逻辑,存在硬件的浪费。而本申请实施例通过对第一身份信息进行编码,只需要将编码中对应的bit全部置0或全部置1即可,不需要改动硬件。
在另一实施方式中,本申请实施例提供另一种编码方式,可以将各个待隔离软件统一编码为44位key,如下表所述:
可以理解的是,若需要增加更多的隔离范围,可以进一步拓展上述表格,比如,同一进程内可能也需要进行隔离(如浏览器)。
在上述实施例的基础上,本申请实施例提供一种隔离方法,即对第一编码信息进行哈希计算,获得对应的安全信息,并将安全信息存入分支预测表中,通过利用安全信息实现对各个待隔离软件的隔离。本申请实施例提供了两种分支预测表,一种是不包含tag项的情况,另一种是包含tag项的情况。下面将分别针对两种情况进行介绍。
第一种:分支预测表中不包含tag项的情况,如图3所示,上述步骤203具备包括如下:
步骤301:利用第一哈希算法对所述第一地址信息进行哈希计算,获得对应的第一索引信息(index);第一哈希算法可以从上述实施例提供的哈希算法中选择,也可以采用其他哈希算法,本申请实施例对此不做具体限定。可以理解的是,第一地址信息包括第一取指地址和/或第一分支历史,即,第一地址信息可以为第一取指地址,也可以为第一分支历史,还可以为第一取指地址和第一分支历史。因此,可以利用第一哈希算法对第一取指地址进行哈希计算,也可以利用第一哈希算法对第一分支历史进行哈希计算,还可以利用第一哈希算法同时对第一取指地址和第一分支历史进行哈希计算,具体可以根据实际情况确定,本申请实施例对此不作具体限定。
步骤302:利用第二哈希算法对所述第一编码信息进行哈希计算,获得对应的第一安全信息;第二哈希算法也可以是从上述所列的几种哈希算法中选择其中一种,可以理解的是,第一哈希算法跟第二哈希算法可以相同,也可以不同。
步骤303:根据所述第一索引信息从所述分支预测表中获取对应的表项;在分支预测表中包括了多个表项,每个表项都有对应的索引信息,但应当说明的是,每个表项的索引信息并不存储在表项中,索引信息的作用是表示第几个表项。从分支预测表中读取索引信息对应的表项,执行步骤304;
步骤304:将所述第一安全信息和所述分支信息写入所述表项中。
第二种:分支预测表中包含tag项的情况,如图4所示,上述步骤203具备包括如下:
步骤401:利用第一哈希算法对所述第一地址信息进行哈希计算,获得对应的第一索引信息;
步骤402:利用第二哈希算法对所述第一编码信息进行哈希计算,获得对应的第一安全信息;
步骤403:利用第三哈希算法对所述第一地址信息进行哈希计算,获得对应的第一tag;第三哈希算法也可以为上述实施例中所列的哈希算法中的一种。
步骤404:根据所述第一索引信息和所述第一tag从分支预测表中获取目标分支预测表中的表项;根据第一索引信息分别多每张分支预测表中获取对应的一个表项,并将获取的表项中的tag与第一tag进行匹配,选择与第一tag相匹配的表项。可以理解的是,也可能存在没有与第一tag相匹配的表项的情况,对于这种情况,可以按照预设的算法从分支预测表中选择一个表项。
步骤405:将所述第一安全信息和所述分支信息写入所述表项中。对于有与第一tag相匹配的表项的情况,将第一安全信息和分支信息写入该表项中;对于没有与第一tag相匹配的表项的情况,将第一安全信息、分支信息和第一tag写入选择的表项中,即,用第一tag覆盖选择的表项中原来的tag。
应当说明的是,步骤401-步骤402与上述实施例中步骤301-步骤302一致,此处不再赘述。
应当说明的是,上述包含tag项和不包含tag项的分支预测表均可能是一张分支预测表,也可能是多张分支预测表。
作为一种实施方式,本申请实施例提供一种分支预测器中包括两张分支预测表,且分支预测表中包含tag项的情况,如图5所示,包括第一分支预测表(way0)和第二分支预测表(way1)。在获得第一索引信息后,从两张分支预测表中获取与第一索引信息对应的表项,可以理解的是,可以从两张分支预测表中均获取到一个对应的表项。利用第一tag分别与两个表项中的tag域进行比较,将第一安全信息和分支信息写入与第一tag相等的tag域对应的表项中。若两个表项的tag域均与第一tag不同,则根据预先设定的规则,将第一安全信息、分支信息和第一tag写入其中一个分支预测表的表项中。
本申请实施例通过将第一安全信息跟分支信息一并存入分支预测表中,通过第一安全信息来对软件的身份进行验证,提高了分支信息的安全性。
可以理解的是,对于多张分支预测表,也可以不包含tag项,仍以两张分支预测表为例,当需要将第一安全信息写入分支预测表时,从两张分支预测表中获取与第一索引信息对应的表项,按照原始的分支信息写入算法写入到对应的表项中。例如:若原始的分支信息写入算法是将分支信息分别写入到从两张分支预测表中获得的表项中,则将第一安全信息和分支信息分别写入到从两张分支预测表中获得的表项中;若原始的分支信息写入算法是从两张分支预测表中选择其中一个写入,那么将第一安全信息和分支信息写入经过写入算法选择的其中一个表项中。另外,对于包含tag的分支预测表,也可能出现多个表中tag相同的情况,这种也可以根据原始的分支信息写入算法决定是写入其中一个分支预测表中,还是写入多个分支预测表中。
在上述实施例的基础上,所述利用第二哈希算法对所述第一编码信息进行哈希计算,包括:
按照预设周期生成第一随机数,并根据所述第一随机数和所述第一编码信息生成随机第一编码信息;
利用所述第二哈希算法对所述随机第一编码信息进行哈希计算。
在具体的实施过程中,为了避免获得的第一编码信息被黑客反向工程,可以随着时间不断调整哈希方法,增大黑客破解的难度,调整的周期可以预先设定,比如秒级。其中,一种调整方式是按照预设周期生成第一随机数,根据第一编码信息和第一随机数生成随机第一编码信息,具体可以是将第一随机数接在第一编码信息后面,也可以放在第一编码信息前面,还可以放置在第一编码信息的其他预先指定的位置上。然后再利用第二哈希算法对随机第一编码信息进行哈希计算。这样会使得同样的待隔离软件,不同的预设周期获得的第一编码信息不同,进行哈希之后也会得到不同的安全信息。
本申请实施例提供另一种隔离方法,即在获得索引信息或tag时,加入第一编码信息进行哈希计算,从而根据获得的索引信息和tag找出分支预测器中的表项,将分支信息写入该表项中,这种方法不需要在分支预测器中增加附加信息,更加节省分支预测器的存储开销。同样的,本申请实施例也针对两种情况,一种是分支预测表中不含tag项,另一种是分支预测表中包括tag项。下面分别针对两种情况进行介绍。
第一种:分支预测表中不包含tag项的情况,上述步骤203具备包括如下步骤,参见图6:
步骤601:根据所述第一地址信息和所述第一编码信息生成新的第一地址信息;可以将第一编码信息与第一地址信息拼接,具体可以是将第一编码信息拼接在第一地址信息后面,也可以将第一编码信息拼接在第一地址信息前面,还可以将第一编码信息插入第一地址信息中间某个固定的位置,生成新的第一地址信息。
步骤602:利用第四哈希算法对所述新的第一地址信息进行哈希计算,获得对应的第二索引信息;可以理解的是,第四哈希算法也可以是上述实施例中所列举的哈希算法中的一种。
步骤603:根据所述第二索引信息从所述分支预测表中获取对应的表项。
步骤604:将所述分支信息写入所述表项中。
第二种:分支预测表中包括tag项的情况,步骤203具体包括如下步骤,参见图7:
步骤701:利用第四哈希算法对所述第一地址信息或所述新的第一地址信息进行哈希计算,获得对应的第三索引信息;利用第五哈希算法对所述第一地址信息或所述新的第一地址信息进行哈希计算,获得对应的第二tag;其中所述第三索引信息和所述第二tag中,有至少一个是对新的第一地址信息进行哈希计算获得的。
可以理解的是,第四哈希算法和第五哈希算法中可以都是用新的第一地址信息,也可以只有其中一个使用新的第一地址信息。
步骤702:根据所述第三索引信息和所述第二tag从分支预测表中获取目标分支预测表中的表项。根据第三索引信息分别多每张分支预测表中获取对应的一个表项,并将获取的表项中的tag与第二tag进行匹配,选择与第二tag相匹配的表项。可以理解的是,也可能存在没有与第二tag相匹配的表项的情况,对于这种情况,可以按照预设的算法从分支预测表中选择一个表项。
步骤703:将所述分支信息写入所述表项中。对于有与第二tag相匹配的表项的情况,将分支信息写入该表项中;对于没有与第二tag相匹配的表项的情况,将分支信息和第二tag写入选择的表项中,即,用第二tag覆盖选择的表项中原来的tag。
在具体的实施过程中,本申请实施例提供一种分支预测器中包括两张分支预测表,且包含tag项的情况,如图8所示,包括第一分支预测表(way0)和第二分支预测表(way1)。在获得第三索引信息后,从两张分支预测表中获取与第三索引信息对应的表项,可以理解的是,可以从两张分支预测表中均获取到一个对应的表项。利用第二tag分别与两个表项中的tag域进行比较,将分支信息写入与第二tag相等的tag域对应的表项中。若两个表项的tag域均与第二tag不同,则根据预先设定的规则,将分支信息以及第二tag写入其中一个分支预测表的表项中。
本申请实施例通过将第一地址信息与第一编码信息进行拼接,获得新的第一地址信息,由于不同的软件对应不同的第一编码信息,因此,可以通过新的第一地址信息利用哈希算法获得对应的第三索引信息和第二tag,并根据第三索引信息和第二tag将分支信息存入分支预测表的表项中,只有对应的软件才能够将分支信息读取出,保证了分支信息的安全性。
同样,可以理解的是,多张分支预测表中也可以不包含tag项,对于不包含tag项的情况,在获得第三索引信息后,从多张分支预测表中分别获取与第三索引信息对应的表项,按照原始的分支信息写入算法将分支信息写入对应的表项中。
在上述实施例的基础上,所述利用第四哈希算法对所述新的第一地址信息进行哈希计算,包括:
根据预设周期生成第二随机数,根据所述第二随机数和所述新的第一地址信息生成随机第一地址信息;
利用第四哈希算法对所述随机第一地址信息进行哈希计算。
在具体的实施过程中,为了避免获得的新的第一地址信息被黑客反向工程,可以随着时间不断调整哈希方法,增大黑客破解的难度,调整的周期可以预先设定,比如秒级。其中,一种调整方式是按照预设周期生成第二随机数,根据第二随机数和新的第一地址信息生成随机第一地址信息,具体可以是将第二随机数接在新的第一地址信息后面,也可以放在新的第一地址信息前面,还可以放置在新的第一地址信息的其他预先指定的位置上。然后再利用第四哈希算法对随机第一地址信息进行哈希计算。这样会使得同样的待隔离软件,不同的预设周期获得的第一编码信息不同,进行哈希之后也会得到不同的安全信息。
图9为本申请实施例提供的一种分支预测器的预测方法流程示意图,如图9所示,该方法包括:
步骤901:获取预测信息,所述预测信息包括第二地址信息,所述第二地址信息包括第二取指地址和/或第二分支历史。
其中,分支预测器包括训练阶段和预测阶段,且训练阶段和预测阶段可以穿插执行,即在对分支预测器进行训练后,可以利用训练后的分支预测器进行预测,也可以在利用分支预测器进行一轮或多轮预测后,根据预测结果再次对分支预测器进行训练。在预测时,分支预测器从存储有取指地址的寄存器中获取第二取指地址,还可以从存储有分支历史的寄存器中获取第二分支历史。可以理解的是,第二取指地址和第二分支历史均为待预测软件对应的。
步骤902:获取待预测软件对应的多个第二软件属性,并利用预设编码方式对所述多个第二软件属性进行编码,获得一个第二编码信息。
其中,对多个第二软件属性进行编码的方式与上述实施例中对多个第一软件属性进行编码的方式一致,此处不再赘述。
步骤903:根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息;
步骤904:根据所述分支信息进行分支预测。
本申请实施例通过对第二软件属性进行编码,从而使得分支预测器只实现一种比较逻辑即可,不需要根据多个第二软件属性分别设置对应的比较逻辑,降低了硬件开销。
在上述实施例的基础上,针对分支预测表中不包含tag项的情况,上述步骤903具体包括:
利用第一哈希算法对所述第二地址信息进行哈希计算,获得对应的第二索引信息;其中,第二地址信息中具体包含的内容与第一地址信息一致,例如:在对分支预测器进行训练时,利用第一哈希算法对第一取指地址进行哈希计算,那么在预测阶段也是利用第一哈希算法对第二取指地址进行哈希计算。若在训练时,利用第一哈希算法对第一取指地址和第一分支历史进行哈希计算,那么在预测阶段也是利用第一哈希算法对第二取指地址和第二分支历史进行哈希计算。
利用第二哈希算法对所述第二编码信息进行哈希计算,获得对应的第二安全信息;可以理解的是,利用第二哈希算法对不同的第二编码信息进行哈希计算后获得的第二安全信息也不同,并且第二编码信息用于唯一标识软件的身份,不同的第二编码信息对应的软件不同,因此,第二安全信息也可以用于区分软件的身份。并且经过哈希后获得的第二安全信息所占用的存储空间更少。
根据所述第二索引信息从所述分支预测表中获取对应的表项。
若所述表项中的第一安全信息与所述第二安全信息一致,则从所述表项中获取对应的分支信息。在从分支预测表中获取到对应的表项之后,从该表项中读取安全信息,并将读取到的表项中的安全信息与待预测软件对应的安全信息进行匹配,若二者相同,则说明待预测软件对应的身份为合法身份;若二者不同,则说明待预测软件对应的身份为非法身份。在判断待预测软件对应的身份为合法身份的情况下,从对应的表项中获取分支信息。可以理解的是,分支预测器中可以包括一张分支预测表,也可以包括多张分支预测表,对于多张分支预测表的情况,可以根据第二索引信息从每张分支预测表中获取一个对应的表项,分别将表项中的第一安全信息与第二安全信息进行匹配,获取与第一安全信息匹配的第二安全信息对应的分支信息,进行后续的预测流程。
在上述实施例的基础上,针对分支预测表中包含tag项的情况,上述步骤903具体包括:
利用第三哈希算法对所述第二地址信息进行哈希计算,获得对应的第二tag;
根据所述第二索引信息和所述第二tag从所述分支预测表中获取对应的表项;
若所述表项中的第一安全信息与所述第二安全信息一致,则从所述表项中获取对应的分支信息。
在具体的实施过程中,以两张分支预测表的结构为例,如图10所示,在进行分支预测时,还需要利用第三哈希算法对第二地址信息进行哈希计算,获得第二tag。根据第二索引信息从两张分支预测表中各获取一个表项。将获取到的分支预测表对应的表项中的第一tag与第二tag进行匹配。若获取到匹配一致的表项,则判断该表项中的第一安全信息是否与待预测软件对应的第二安全信息相同,如果相同,则说明该待预测软件的身份为合法身份,可以从表项中读取分支信息,并根据读取的分支信息进行预测;否则不执行后续的预测流程。
本申请实施例中,在从分支预测表中读取分支信息时,需要进行安全信息的确认,当哈希获得的第二安全信息与表项中的第一安全信息相同,才能够将表项中的分支信息读取出,由于第一安全信息和第二安全信息是由对应的软件的编码信息进行哈希获得,因此,能够保证只有合法的软件才能够读取出分支信息,提高了分支信息的安全性。
本申请实施例还提供另一种预测方法,同样地,下面分别针对包含tag项的分支预测表和不包含tag项的分支预测表进行介绍。
第一种:分支预测表中不包括tag项,上述实施例中步骤903具体包括:
根据所述第二地址信息和所述第二编码信息生成新的第二地址信息;
利用第四哈希算法对所述新的第二地址信息进行哈希计算,获得对应的第四索引信息;
根据所述第四索引信息从所述分支预测表中获取对应的表项;
获取所述表项中的分支信息。
在具体的实施过程中,将第二地址信息与第二编码信息进行拼接,生成新的第二地址信息,可以理解的是,拼接的方法与第二地址信息与第一编码信息拼接的方法一致,此处不再赘述。
可以理解的是,在进行分支预测时所使用的第四哈希算法与分支训练时所使用的第四哈希算法一致。在利用第四哈希算法对新的第一地址信息进行哈希计算获得对应的第二索引信息之后,从分支预测表中获取与第二索引信息对应的表项,将该表项中的分支信息取出用于后续的分支预测。
第二种:分支预测表中包括tag项,上述实施例中步骤903具体包括:
利用第四哈希算法对所述第二地址信息或所述新的第二地址信息进行哈希计算,获得对应的第五索引信息;利用第五哈希算法对所述第二地址信息或所述新的第二地址信息进行哈希计算,获得对应的第三tag;
根据所述第五索引信息和所述第三tag从分支预测表中获取目标分支预测表中的表项;
获取所述表项中的分支信息。
在具体的实施过程中,本申请实施例以两张分支预测表构成,如图11所示,分别利用第四哈希算法和第五哈希算法对第二地址信息或新的第二地址信息进行哈希计算,由于在对分支预测器进行训练时,第四哈希算法和第五哈希算法中,至少有一个哈希算法对新的第一地址信息进行哈希计算。因此,可以有以下三种方式:利用第四哈希算法对第一地址信息进行哈希计算,利用第五哈希算法对新的第一地址信息进行哈希计算;利用第四哈希算法对新的第一地址信息进行哈希计算,利用第五哈希算法对第一地址信息进行哈希计算;利用第四哈希算法和第五哈希算法均对新的第一地址信息进行哈希计算。在进行分支预测时,第四哈希算法与第五哈希算法分别计算的对象与训练时一致。
根据第五索引信息分别从两张分支预测表中均获取一个对应的表项,由于每个表项中均包括对应的第二tag,将获取的两个表项中的第二tag与第三tag进行比对,选择与第三tag相等的第二tag对应的表项中的分支信息,用该分支信息进行分支预测。
本申请实施例通过将第二编码信息与第二地址信息进行拼接,获得新的第二地址信息,由于不同的软件对应的第二编码信息不同,因此在对新的第二地址信息进行哈希计算后,获得的第五索引信息和第三tag也不同,通过该方法能够保证只有合法身份的软件才能够从分支预测表中获取对应的分支信息,提高了分支信息的安全性。
在上述实施例的基础上,所述利用第二哈希算法对所述第二编码信息进行哈希计算,包括:
按照预设周期生成第三随机数,并根据所述第三随机数和所述第二编码信息生成随机第二编码信息;
利用所述第二哈希算法对所述随机第二编码信息进行哈希计算。
在具体的实施过程中,预设周期可以预先设定的,例如一秒、两秒等,也可以是毫秒级的,本申请实施例对此不做具体限定。生成的第三随机数可以由硬件自动生成,采用伪随机数发生器,或真随机数发生器;也可以由软件每隔一段时间配置一次,可以是软件计算的伪随机数,也可以是采用ReadRand指令读出的真随机数。若生成的第三随机数与上述实施例中生成第一随机数在同一个周期内,那么第三随机数与第一随机数相同,否则不同。
在生成第三随机数后,将第二编码信息与第三随机数进行拼接,获得随机第二编码信息,可以理解的是,随机第一编码信息与随机第二编码信息生成的方式一致,此处不再赘述。
对随机第二编码信息进行哈希计算的第二哈希算法与上述实施例中对随机第一编码信息进行哈希计算的第二哈希算法一致。
可以理解的是,若在一个预设周期内写入分支预测表的分支信息,可以让合法用户在同一个预设周期内读出对应的分支信息,在其他周期内,写入分支预测表的分支信息则无法被读取出。
本申请实施例通过生成第三随机数,并利用第二哈希算法对第三随机数和第二编码信息进行哈希计算,从而防止了不合法的用户破解,提高了存入分支预测表中的分支信息的安全性。
在上述实施例的基础上,所述利用第四哈希算法对所述新的第二地址信息进行哈希计算,包括:
按照预设周期生成第四随机数,根据所述第四随机数和所述新的第二地址信息生成随机第二地址信息;
利用第四哈希算法对所述随机第二地址信息进行哈希计算。
在具体的实施过程中,对于分支预测表中不包含tag项的情况,也可以按照上述实施方式中生成随机数的方式生成第四随机数,并且生成第四随机数的预设周期可以与生成第三随机数的周期相等,也可以不相等,具体周期可以根据实际情况预先设定。若生成的第四随机数与上述实施例中生成第二随机数在同一个周期内,那么第四随机数与第二随机数相同,否则不同。在生成第四随机数之后,将第四随机数与新的第二地址信息进行拼接,生成随机第二地址信息,然后利用第四哈希算法对随机第二地址信息进行哈希计算获得对应的第四索引信息。
对于分支预测表中包括tag项的情况,以两张分支预测表为例,在生成第四随机数之后,将第四随机数加入第四哈希算法和/或第五哈希算法中,具体的哈希计算根据训练阶段时确定,例如:若在训练阶段时,将第二随机数加入第一地址信息或新的第一地址信息生成随机第一地址信息,然后利用第四哈希算法对随机第一地址信息进行哈希计算,那么,在分支预测时,将第四随机数加入第二地址信息或新的第二地址信息,生成随机第二地址信息,然后利用第四哈希算法对随机第二地址信息哈希计算;若在训练阶段,将第二随机数加入第一地址信息或新的第一地址信息生成第一地址信息,然后利用第五哈希算法对随机第一地址信息进行哈希计算,那么,在分支预测时,将第五随机数加入第二地址信息或新的第二地址信息,生成随机第二地址信息,然后利用第五哈希算法对随机第二地址信息哈希计算。
本申请实施例通过在哈希计算时加入随机数,能够有效防止黑客进行攻击,提高了分支预测表中分支信息的安全性。
图12为本申请实施例提供的分支预测器的结构示意图,该装置可以是电子设备上的模块、程序段或代码。应理解,该装置与上述图2方法实施例对应,能够执行图2方法实施例涉及的各个步骤,该装置具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。该分支预测器包括:训练信息获取模块1201、第一编码模块1202和写入模块1203,其中:
训练信息获取模块1201用于获取训练信息,所述训练信息包括分支信息和第一地址信息,所述第一地址信息包括第一取指地址和/或第一分支历史;第一编码模块1202用于获取所述训练信息对应的待隔离软件的多个第一软件属性,并利用预设编码方式对所述多个第一软件属性进行编码,获得一个第一编码信息;写入模块1203用于根据所述第一地址信息和所述第一编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,以实现对所述待隔离软件的分支信息与其他待隔离软件的分支信息隔离。
在上述实施例的基础上,写入模块1203具体用于:
利用第一哈希算法对所述第一地址信息进行哈希计算,获得对应的第一索引信息;
利用第二哈希算法对所述第一编码信息进行哈希计算,获得对应的第一安全信息;
若所述分支预测表不包括tag项,则根据所述第一索引信息从所述分支预测表中获取对应的表项;
将所述第一安全信息和所述分支信息写入所述表项中。
在上述实施例的基础上,写入模块1203具体用于:
若所述分支预测表包括tag项,则利用第三哈希算法对所述第一地址信息进行哈希计算,获得对应的第一tag;
根据所述第一索引信息和所述第一tag从分支预测表中获取目标分支预测表中的表项;
将所述第一安全信息和所述分支信息写入所述表项中。
在上述实施例的基础上,写入模块1203具体用于:
根据所述第一地址信息和所述第一编码信息生成新的第一地址信息;
若所述分支预测表不包括tag项,则利用第四哈希算法对所述新的第一地址信息进行哈希计算,获得对应的第二索引信息;
根据所述第二索引信息从所述分支预测表中获取对应的表项;
将所述分支信息写入所述表项中。
在上述实施例的基础上,写入模块1203具体用于:
若所述分支预测表包括tag项,则利用第四哈希算法对所述第一地址信息或所述新的第一地址信息进行哈希计算,获得对应的第三索引信息;利用第五哈希算法对所述第一地址信息或所述新的第一地址信息进行哈希计算,获得对应的第二tag;其中所述第三索引信息和所述第二tag中,有至少一个是对新的第一地址信息进行哈希计算获得的;
根据所述第三索引信息和所述第二tag从分支预测表中获取目标分支预测表中的表项;
将所述分支信息写入所述表项中。
在上述实施例的基础上,写入模块1203具体用于:
按照预设周期生成第一随机数,并根据所述第一随机数和所述第一编码信息生成随机第一编码信息;
利用所述第二哈希算法对所述随机第一编码信息进行哈希计算。
在上述实施例的基础上,写入模块1203具体用于:
根据预设周期生成第二随机数,根据所述第二随机数和所述新的第一地址信息生成随机第一地址信息;
利用第四哈希算法对所述随机第一地址信息进行哈希计算。
图13为本申请实施例提供的另一种分支预测器的结构示意图,该装置可以是电子设备上的模块、程序段或代码。应理解,该装置与上述图9方法实施例对应,能够执行图9方法实施例涉及的各个步骤,该装置具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。该分支预测器包括:预测信息获取模块1301、第二编码模块1302、信息读取模块1303和预测模块1304,其中:
预测信息获取模块1301用于获取预测信息,所述预测信息包括第二地址信息,所述第二地址信息包括第二取指地址和/或第二分支历史;第二编码模块1302用于获取所述预测信息对应的待预测软件的多个第二软件属性,并利用预设编码方式对所述多个第二软件属性进行编码,获得一个第二编码信息;信息读取模块1303用于根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息;预测模块1304用于根据所述分支信息进行分支预测。
在上述实施例的基础上,信息读取模块1303具体用于:
利用第一哈希算法对所述第二地址信息进行哈希计算,获得对应的第二索引信息;
利用第二哈希算法对所述第二编码信息进行哈希计算,获得对应的第二安全信息;
所述分支预测表不包括tag项,则根据所述第二索引信息从所述分支预测表中获取对应的表项;
若所述表项中的第一安全信息与所述第二安全信息一致,则从所述表项中获取对应的分支信息。
在上述实施例的基础上,信息读取模块1303具体用于:
若所述分支预测表包括tag项,则利用第三哈希算法对所述第二地址信息进行哈希计算,获得对应的第二tag;
根据所述第二索引信息和所述第二tag从所述分支预测表中获取对应的表项;
若所述表项中的第一安全信息与所述第二安全信息一致,则从所述表项中获取对应的分支信息。
在上述实施例的基础上,信息读取模块1303具体用于:
根据所述第二地址信息和所述第二编码信息生成新的第二地址信息;
若所述分支预测表不包括tag项,则利用第四哈希算法对所述新的第二地址信息进行哈希计算,获得对应的第四索引信息;
根据所述第四索引信息从所述分支预测表中获取对应的表项;
获取所述表项中的分支信息。
在上述实施例的基础上,信息读取模块1303具体用于:
若所述分支预测表包括tag项,则利用第四哈希算法对所述第二地址信息或所述新的第二地址信息进行哈希计算,获得对应的第五索引信息;利用第五哈希算法对所述第二地址信息或所述新的第二地址信息进行哈希计算,获得对应的第三tag;其中,所述第五索引信息和所述第三tag中至少一个为对所述新的第二地址信息进行哈希计算获得;
根据所述第五索引信息和所述第三tag从分支预测表中获取目标分支预测表中的表项;
获取所述表项中的分支信息。
在上述实施例的基础上,信息读取模块1303具体用于:
按照预设周期生成第三随机数,并根据所述第三随机数和所述第二编码信息生成随机第二编码信息;
利用所述第二哈希算法对所述随机第二编码信息进行哈希计算。
在上述实施例的基础上,信息读取模块1303具体用于:
按照预设周期生成第四随机数,根据所述第四随机数和所述新的第二地址信息生成随机第二地址信息;
利用第四哈希算法对所述随机第二地址信息进行哈希计算。
图14为本申请实施例提供的电子设备实体结构示意图,如图14所示,所述电子设备,包括:处理器(processor)1401、存储器(memory)1402和总线1403;其中,
所述处理器1401和存储器1402通过所述总线1403完成相互间的通信;
所述处理器1401中包括上述实施例提供的分支预测器,用于执行上述各方法实施例所提供的方法,例如包括:获取训练信息,所述训练信息包括分支信息和第一地址信息,所述第一地址信息包括第一取指地址和/或第一分支历史;获取所述训练信息对应的待隔离软件的多个第一软件属性,并利用预设编码方式对所述多个第一软件属性进行编码,获得一个第一编码信息;根据所述第一地址信息和所述第一编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并将所述分支信息写入所述表项中,以实现对所述待隔离软件的分支信息与其他待隔离软件的分支信息隔离。或
获取预测信息,所述预测信息包括第二地址信息,所述第二地址信息包括第二取指地址和/或第二分支历史;获取所述预测信息对应的待预测软件的多个第二软件属性,并利用预设编码方式对所述多个第二软件属性进行编码,获得一个第二编码信息;根据所述第二地址信息和所述第二编码信息,利用哈希算法从所述分支预测表中获取对应的表项,并获取所述表项中的分支信息;根据所述分支信息进行分支预测。
处理器1401可以是一种集成电路芯片,具有信号处理能力。上述处理器1401可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。其可以实现或者执行本申请实施例中公开的各种方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器1402可以包括但不限于随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)等。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
- 一种分支预测器的隔离方法、预测方法及分支预测器
- 处理器、分支预测器及其数据处理方法、分支预测方法