CN111857815A - 指令处理的方法及装置 - Google Patents

指令处理的方法及装置 Download PDF

Info

Publication number
CN111857815A
CN111857815A CN201910334245.0A CN201910334245A CN111857815A CN 111857815 A CN111857815 A CN 111857815A CN 201910334245 A CN201910334245 A CN 201910334245A CN 111857815 A CN111857815 A CN 111857815A
Authority
CN
China
Prior art keywords
instruction
branch
instructions
register
sequence
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.)
Pending
Application number
CN201910334245.0A
Other languages
English (en)
Inventor
王蕾
王立国
罗伟坚
全龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201910334245.0A priority Critical patent/CN111857815A/zh
Publication of CN111857815A publication Critical patent/CN111857815A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请提供了一种指令处理的方法及装置。该指令处理的方法包括:对第一程序中需要上提的分支指令和所述分支指令的依赖指令中的写变量进行重命名,使所述写变量具有全局唯一的变量名;根据所述写变量重命名后的分支指令和依赖指令获得第一指令序列。本申请提供的技术方案可以解决分支转换技术中由相同命名的写变量导致的读写问题。

Description

指令处理的方法及装置
技术领域
本申请涉及数据处理领域,具体地,尤其是一种指令处理的方法及装置。
背景技术
分支指令是一类可以改变指令流向的指令。在当前基于流水线结构的处理器芯片中, 分支指令(如跳转指令)的存在可能会导致指令流水线出现排空或者增加处理器的处理延 迟,从而影响处理器的执行性能。
在处理器的设计中,为了加速转发查表操作,常常使用多路分支硬件加速器来进行多 路分支查询,也即将部分的类似多路分支(类似switch)语句结构的分支转化为硬件加速 的查询方式进行优化,但仍存在较多数量的未被优化的分支跳转指令。当前,一种简单的 减少分支指令个数的方法是改进程序员的编程模型,尽可能使用具有多路分支结构(类似 switch语句结构)的语句代替双分支结构(类似if语句的语句结构),但是这种方法会严 重影响编程模型的灵活性。另一种减少分支指令个数方法是通过分支转换技术进行编译阶 段的优化处理,通过利用多路分支加速器来降低网络转发时延,同时又不限制程序员的编 程模型。但是,这种方法由于需要在判断条件的位置均增设硬件加速器,会导致硬件资源 的浪费。
因此,如何有效降低分支指令的个数,提高处理器的执行性能成为亟待解决的问题。
发明内容
本申请实施例提供了一种指令处理的方法及装置,能够解决在指令上提过程中,上提 指令个数过多的问题。
第一方面,提供了一种指令处理的方法,包括:对第一程序中需要上提的分支指令和 所述分支指令的依赖指令中的写变量进行重命名,使所述写变量具有全局唯一的变量名; 根据所述写变量重命名后的分支指令和依赖指令获得第一指令序列。
根据本申请实施例的指令处理的方法,通过对需要上提的分支指令和其依赖指令中的 写变量进行重命名,使该写变量具有全局唯一的变量名,从而保证写变量在分支执行单元 的运算过程中不会存在读写冲突的问题。
结合第一方面,在第一方面的某些实现方式中,根据所述写变量重命名后的分支指令 和依赖指令获得第一指令序列,包括:插入一个PHI节点,所述PHI节点用于指示所述写 变量可能的取值信息;根据所述PHI节点和至少一条路径包括的所述写变量,获得至少一 个第二指令序列,所述第二指令序列包括所述至少一条路径中的任意一条路径对应的所述 写变量;所述至少一个第二指令序列组成所述第一指令序列。
根据本申请实施例的指令处理方法,通过插入PHI节点,可以由该PHI节点获知分支 合并处或者使用重命名后的写变量的位置处可以选择的写变量,以便于后续筛选出实际执 行程序过程中所用的具体写变量。
结合第一方面,在第一方面的某些实现方式中,所述至少一个第二指令序列组成第一 指令序列,包括:上提所述至少一个第二指令序列至第一寄存器,所述第一寄存器用于专 门存储所述上提的分支指令和分支指令的依赖指令的相关的数据信息;所述至少一个第二 指令序列在所述第一寄存器组成所述第一指令序列。
根据本申请实施例的指令处理的方法,通过构建专门用于存储与上提的指令序列中的 分支指令和依赖指令相关的数据信息的寄存器,可以减轻通用寄存器在存储该数据信息时 出现的空间资源不足的问题。避免上述数据信息所占用的空间超出该通用寄存器的空间使 用限制,从而使寄存器成为程序执行过程中的瓶颈,降低了程序执行的效率以及处理器的 执行性能。
应理解,该第一寄存器专门用于存储上提指令序列中的分支指令和依赖指令相关的数 据信息,而不对其他指令进行存储。其中,相关的数据信息例如可以是执行该上提的分支 指令和依赖指令时所需要的操作数,操作数是运算符作用于的实体,是指令中的一个组成 部分,它规定了指令中进行数字运算的量。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:执行所述第一指令 序列后,释放所述第一寄存器中所述第一指令序列所占的空间。
结合第一方面,在第一方面的某些实现方式中,所述释放所述第一寄存器中所述第一 指令序列中分支指令和依赖指令相关的数据信息所占的空间,包括:所述第一寄存器中所 述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间由硬件自动清空。
根据本申请实施例的指令处理的方法,当上提的至少一个第二指令序列组成第一指令 序列之后,也即完成了最终上提指令序列的组合,硬件加速器可以通过该第一指令序列进 行多路分支的选择,则可以将该第一指令序列中分支指令和依赖指令相关的数据信息所占 用的空间由硬件自动清空,这样就不需要通过人工清空,提高了寄存器清空的效率。
第二方面,提供了一种指令的处理方法,包括:构建第一寄存器,所述第一寄存器用 于专门存储上提的分支指令和所述分支指令的依赖指令的相关的数据信息;上提所述分支 指令和所述依赖指令组成的指令序列至所述第一寄存器。
根据本申请实施例的指令处理的方法,通过构建专门用于存储上提的指令序列中的分 支指令和依赖指令的相关数据信息的寄存器,可以解决通用寄存器在存储该数据信息时出 现的空间资源不足的问题。避免上述数据信息所占用可能超出该通用寄存器的空间使用限 制,从而使寄存器成为程序执行过程中的瓶颈,降低了程序执行的效率以及处理器的执行 性能。
结合第二方面,在第二方面的某些实现方式中,所述方法还包括:对所述分支指令和 所述依赖指令中的写变量进行重命名,使所述写变量具有全局唯一的变量名。
根据本申请实施例的指令处理的方法,通过对需要上提的分支指令和依赖指令中的写 变量进行重命名,使该写变量具有全局唯一的变量名,从而保证写变量在分支执行单元的 运算过程中不会存在读写冲突的问题。
结合第二方面,在第二方面的某些实现方式中,所述上提所述分支指令和所述依赖指 令组成的指令序列至所述第一寄存器,包括:插入一个PHI节点,所述PHI节点用于指示 所述写变量可能的取值信息;根据所述PHI节点和至少一条路径包括的所述写变量,获得 至少一个第二指令序列,所述第二指令序列包括所述至少一条路径中的任意一条路径对应 的所述写变量;上提所述至少一个第二指令序列至所述第一寄存器。
根据本申请实施例的指令处理方法,通过插入PHI节点,可以由该PHI节点获知分支 合并处或者使用重命名后的写变量的位置处可以选择的写变量,以便于后续筛选出实际执 行程序过程中所用的具体写变量。
结合第二方面,在第二方面的某些实现方式中,所述方法还包括:所述至少一个第二 指令序列在所述第一寄存器组成第一指令序列。
结合第二方面,在第二方面的某些实现方式中,所述方法还包括:执行所述第一指令 序列后,释放所述第一寄存器中所述第一指令序列所占的空间。
结合第二方面,在第二方面的某些实现方式中,所述释放所述第一寄存器中所述第一 指令序列中分支指令和依赖指令相关的数据信息所占的空间,包括:所述第一寄存器中所 述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间由硬件自动清空。
根据本申请实施例的指令处理的方法,当上提的至少一个第二指令序列组成第一指令 序列之后,也即完成了最终上提指令序列的组合,硬件加速器可以通过该第一指令序列进 行多路分支的选择,则可以将该第一指令序列中分支指令和依赖指令相关的数据信息所占 用的空间由硬件自动清空,这样就不需要通过人工清空,提高了寄存器清空的效率。
第三方面,提供了一种指令处理的装置,包括:第一处理单元,所述第一处理单元用 于对第一程序中需要上提的分支指令和所述分支指令的依赖指令中的写变量进行重命名, 使所述写变量具有全局唯一的变量名;第二处理单元,所述第二处理单元用于根据所述写 变量重命名后的分支指令和依赖指令获得第一指令序列。
结合第三方面,在第三方面的某些实现方式中,所述根据所述写变量重命名后的分支 指令和依赖指令获得第一指令序列,包括:插入一个PHI节点,所述PHI节点用于指示所 述写变量可能的取值信息;根据所述PHI节点和至少一条路径包括的所述写变量,获得至 少一个第二指令序列,所述第二指令序列包括所述至少一条路径中的任意一条路径对应的 所述写变量;所述至少一个第二指令序列组成所述第一指令序列。
结合第三方面,在第三方面的某些实现方式中,所述至少一个第二指令序列组成第一 指令序列,包括:上提所述至少一个第二指令序列至第一寄存器,所述第一寄存器用于专 门存储所述上提的分支指令和分支指令的依赖指令的相关的数据信息;所述至少一个第二 指令序列在所述第一寄存器组成所述第一指令序列。
结合第三方面,在第三方面的某些实现方式中,还包括:第三处理单元,所述第三处 理单元用于当执行所述第一指令序列后,释放所述第一寄存器中所述第一指令序列所占的 空间。
结合第三方面,在第三方面的某些实现方式中,所述释放所述第一寄存器中所述第一 指令序列所占的空间,包括:所述第一寄存器中所述第一指令序列所占的空间由硬件自动 清空。
第四方面,提供了一种指令处理的装置,包括至少一个存储器和处理器,其中,所述 存储器用于存储计算机程序;所述处理器用于从所述存储器调用并运行所述计算机程序, 使得所述装置执行上述第一方面和第二方面所述的方法。
第五方面,提供了一种指令处理的系统,所述系统包括指令处理的装置和第一寄存器, 其中,所述指令处理的装置用于执行第一方面和第二方面中任一实现方式中所述的方法; 所述第一寄存器用于专门存储上提的分支指令和所述分支指令的依赖指令。
本申请实施例的指令处理的方法及装置,通过对上提指令序列包括的分支指令和依赖 指令中的写变量进行重命名,使得该写变量具有全局唯一的变量名,以解决后续程序执行 过程中,写变量使用处存在的写变量读写冲突的问题。此外,通过构建专门用于存储上提 的指令序列中的分支指令和依赖指令的相关的数据信息的寄存器,解决了使用通用寄存器 存储该数据信息而导致的空间资源占用过多、甚至超出通用寄存器空间使用限制的问题。 此外,本申请实施例的指令处理方法有效降低了上提的指令的数量,从而减少了上提的指 令所占用的存储器的空间资源。
附图说明
图1为分支转换技术涉及的示例性程序对应的控制流图示意图。
图2(a)为对图1所示控制流图进行深度优先遍历生成的profile示意图。
图2(b)示出了对指令序列进行上提后的示意图。
图3(a)为源程序所生成的控制流图的示意图。
图3(b)为对图3(a)中控制流图进行指令复制的复制结果示意图。
图4为本申请实施例提供的一种指令处理方法的示意性流程图。
图5为本申请实施例提供的依赖关系分析过程的示意图。
图6为本申请实施例提供的一种指令处理方法的示意性流程图。
图7为本申请实施例提供的另一种指令处理方法的示意性流程图。
图8为本申请实施例提供的又一种指令处理方法的示意性流程图。
图9为本申请提供的新增寄存器的窗口的示意性结构图。
图10为本申请提供的一种指令处理的装置的示意性结构图。
图11为本申请提供的一种指令处理的装置的示意性结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地 描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请 中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施 例,都属于本申请保护的范围。
计算机程序的执行体现为处理器对取指令、分析指令、执行指令等几个步骤的重复执 行。为了降低程序执行的速度以及提升处理器的执行性能,当前可以采用的一种方法是利 用分支转换技术(或者分支条件上提技术)将程序中的判断条件均上提至分支跳转之前, 进行编译阶段的优化处理,同时利用多路分支加速器降低网络转发时延,这种方法减少了 对程序员的编程限制,并且可以实现降低分支指令的个数。但是由于这种方法需要在分支 条件处均设置硬件加速器,因此,会造成硬件资源的浪费。此外,在目前采用的分支转换 技术中,上提的指令会存储到同一个分支执行单元中,由于分支执行单元中的指令是顺序 执行的,因此,程序中有相同命名的写变量时,若仅对指令进行简单的提取,则相同命名的写变量之间会存在读写冲突的问题。
此外,目前对于上提的分支指令,仍然采用通用寄存器对其进行操作。上提的指令会 对寄存器资源分配产生影响,例如,当上提的分支指令和/或与分支指令对应的依赖指令 的数量较多时,会导致寄存器资源紧张。当前寄存器一直是网络处理器的资源瓶颈之一, 分配其作为对上提分支指令进行操作的寄存器会导致这种瓶颈更加严重。与此同时,使用 通用寄存器也会导致该通用寄存器的生命周期延长,从而为编译器维护变量生命周期带来 困难。
针对上述问题,本申请提出一种指令处理的方法,能够减少上提指令的数量,提高程 序执行的效率。此外,还通过增加专门用于存储上提的分支指令以及依赖指令执行时所需 的数据的寄存器,减缓上提分支指令对通用寄存器带来的资源占用和工作负载,提高寄存 器的执行性能。为了便于对本申请技术方案的理解,首先结合附图对本申请实施例中可能 涉及的分支转换技术进行简单的介绍。
一般来讲,对程序中分支条件的一次确定选择形成的指令序列可以被称为profile,一 条profile即代表程序一次可能的执行路径。分支转换技术是在程序执行之前,将该程序中 一条profile的条件判断前提至指令执行之前,预先计算出后续可能执行分支的判断条件, 以达到直接执行多个前提分支结果指令的目的的技术。其中,分支转换技术又可以被称为 条件分支上提技术,分支指令也即条件分支指令或者条件判断指令等,为了表述简洁,下 文统称为分支指令,且本申请中的分支指令可以是跳转指令。
下面结合附图对分支转换技术做具体介绍。如下所示的示例性程序,其对应的控制流 图的示意图如图1所示。
Figure BDA0002038655710000051
图1所示的控制流图包括基本块(basic block,BB)0至基本块4,并且存在两个分支指令([a>1]和[b>10])。若对该控制流图的基本块进行深度优先遍历,可以生成相应的profile。
图2(a)示出了对图1所示的控制流图进行深度优先遍历后生成的两条profile(记为 profile1和profile2)。其中,profile1对应的路径为:从基本块0开始,选择[a>1]的执行 分支之后执行基本块1,接着在[b>10]的分支执行完毕后继续执行基本块2。类似地,profile2 的路径为:从基本块0开始,执行完毕分支指令[a>1]后,继续执行基本块1,且在执行完 [b>10]后继续执行基本块3。
图2(b)示出了将分支指令和与分支指令相关指令组成的指令序列进行上提后的示 意图。
具体地,对图2(a)中的分支指令以及与该分支指令相关指令组成的指令序列上提后, 将其存储至分支单元(branch unit,BU),例如,将分支指令[a>1]、[b>10]存储至分支单 元。同时,为了保证分支指令上提后的正确性,需要将与上提的分支指令存在依赖关系的 依赖指令也上提至分支执行单元,例如,将与分支指令[a>1]、[b>10]具有依赖关系的指令 上提至分支执行之前。
应理解,上文所说的依赖指令可以是与分支指令的执行存在依赖关系的指令,也即分 支指令的执行可能有赖于依赖指令的结果,或者分支指令中的数据与依赖指令的数据结果 具有依赖关系等。本申请实施例所说的依赖是指写依赖,例如指令[a=b]中b的值依赖于指 令[b=c]。当把与分支指令具有依赖关系的依赖指令前提或者上提至分支执行之前,条件谓 词逻辑可以进行组合以达到原来分支选择等价的结果。
此外,在将分支指令组成的指令序列上提至分支单元之外,还可以将上提的分支指令 对应的后续具体功能相关的指令在动作执行单元(action unit,AU)中执行。以图2(b) 所示的控制流图为例,在指令上提过程中,将分支指令[a>1]、[b>10]上提至分支执行单元, 同时可以将基本块0至基本块4中的具体执行动作相关的指令在动作执行单元中执行。
当分支指令以及该分支指令的依赖指令组成的指令序列均上提至分支执行单元后,可 以由该分支指令和依赖指令组建指令序列(记为组KEY)。其中,该指令序列可以是最终指令序列,并且可以用于实现后续硬件执行程序时对具体profile的查找。
应理解,若不对分支指令(如[a>1]、[b>10])组成的指令序列进行上提,为了加速转 发查表操作,则需要在分支指令或者分支条件处增设硬件加速器,但由此会带来硬件资源 浪费的问题。若将分支指令和依赖指令组成的指令序列上提,当前可以采用的一种方法是 将每一条profile上相关的上提指令(即分支指令和依赖指令)均进行复制上提,下面结合 图3(a)和图3(b)对目前通过复制方式进行指令上提的方法进行介绍。
图3(a)为源程序所生成的控制流图的示意图,对该控制流图进行深度优先遍历可以 得出两条路径(也即profile)。其中,路径1包括基本块1、2、4,路径2包括基本块1、 3、4。对于路径1(也即profile 1),需要上提的指令可以包括该路径上包括的分支指令, 此外,需要上提的指令还可以包括该指令的依赖指令,例如,基本块1中的A=xxx、B=xxx, 基本块2中的[A=C,1]等。根据需要将每条路径上需要上提的指令进行复制,复制结果示 意图如图3(b)所示,可以看出,在图3(a)所示的控制流图中,每条路径需要上提的 指令数量为5条。此外,图3(b)示出了将路径1和路径2中的上提的分支指令和依赖 指令组成的指令序列合并后的示意图,也即将路径1和路径2中的分支指令和依赖指令上 提至分支执行单元后组成的最终指令结果,一共为10条指令。
应理解,当按照每条profile,对profile中的分支指令和依赖指令依次进行复制时,由 于每条路径中包括的分支指令和依赖指令均需要复制,当某个分支指令同时处于多条路径 上时,则该分支指令则需要被复制多次,最终由上提分支指令和依赖指令组成的指令序列 中的指令数量较多。特别地,profile的数量随着分支个数的增加是呈指数级别增加的,因 此,随着profile数量的增加,指令的复制将会更加严重,过多的复制的指令会严重影响存 储至BU部分的指令个数,进而导致分支资源的指令空间不足。
针对上述问题,本申请实施例提供了一种指令处理的方法,其中该指令处理方法利用 基于静态单赋值(static single assignment,SSA)的分支转换算法降低上提指令的个数, 提高程序执行的效率。
应理解,SSA是一种经典编译器中间表示形式,其核心思想是程序中的变量有且只被 定值一次,也即每个名字在SSA中仅被赋值一次。具体的SSA转换过程主要包括变量重命名技术和维护PHI节点,其中,PHI节点为一个虚拟指令,可以用于根据当前基本块的 之前执行的是哪一个前任基本块来得到相应的值。
下面结合附图对本申请提供的基于SSA的分支转换技术进行详细说明。
图4示出了一种指令处理方法的示意性流程图。具体地,该指令处理方法主要为基于 SSA的分支转换算法,也即程序执行的静态编译优化算法,其实施阶段可以是控制流图构 建之后和寄存器分配之前。以下为该指令处理过程的具体步骤。
S410,对第一程序中需要上提的分支指令和所述分支指令中的写变量进行重命名,使 所述写变量具有全局唯一的变量名。
一个具体的实施方式中,在对需要上提的分支指令和依赖指令中的写变量进行上提操 作之前,首先确定第一程序中需要上提的分支指令,并对该需要上提的分支指令对应的依 赖关系进行分析。具体地,当需要对程序中的分支指令和依赖指令进行上提时,首先根据 需要确定上提的指令,然后可以以该要上提的分支指令作为驱动,按照需求分析分支指令 中变量的依赖关系。通过仅针对需要上提的分支指令中的变量的依赖关系进行分析、查找, 可以减少对整体程序的数据依赖分析的开销。
示例性的,如图5所示的指令处理的方法的示意图。寄存器通过预先计算可以分析出 该控制流图的种子条件,以该种子条件作为输入开始分析其依赖关系(分析所沿的路径如 图5虚线部分所示)。其中,种子条件例如可以是:由于需要对硬件的查找入口(entry)进行构建,为了最少的使用硬件资源,可以将一个硬件执行分支的入口用比特位(bit)(如1bit)来代替,该比特位即可以看做是算法要得到的输入“种子”。其中,路径1经由分支 指令(即图5所示“判断是否A=B?”代表的指令)、基本块4、基本块3、分支指令(即 图5中“若A=B,执行左侧分支;若A≠B,执行右侧分支”代表的指令)以及基本块1,通 过对需要上提的分支指令中的写变量的依赖关系进行分析可以获得该路径中需要上提的 依赖指令。
一个具体的实施方式中,确定需要上提的分支指令例如可以先收集待上提的指令,从 该待上提的指令中提出需要上提的条件变量。
一个具体的实施方式中,在分析分支指令中的变量的依赖关系时可以迭代的计算变量 的依赖关系,也可以将获取的依赖关系的指令记录到重命名标签集合(rename labelset) 中。
此外,由于需要将分支指令以及依赖指令均上提至寄存器的分支执行单元中,为了避 免当写变量具有相同命名时导致的读写冲突问题,需要对写变量进行合理的重命名,使得 当前程序中的写变量具有全局唯一的变量名。
应理解,本申请提供的指令处理方法借鉴了SSA表示的思想,也即对上提指令中的写变量进行重命名,使该写变量具有全局唯一的变量名,从而保证写变量在分支执行单元的运算过程中不会存在读写冲突的问题。
具体地,对指令中的写变量进行重命名的过程以图6所示的控制流图示意图为例进行 说明。
一个具体的实施方式中,将各个分支指令和该分支指令对应的依赖指令中的写变量进 行重命名。例如,将基本块1中的写变量A重命名为A1,将基本块2中的A重命名为 A2,此外,将基本块1中的B重命名为B1,将基本块3中的B重命名为B2。应理解, 当重命名完成后,重命名后的信息会向后传入,找到其使用的位置。例如,写变量A的使 用位置可以是图6所示的基本块4。
通过对需要上提的指令中的写变量进行重命名,可以避免将分支指令和依赖指令组成 的指令序列上提后存在的读写冲突的问题,且不需要将每条路径上的需要上提的指令均进 行复制,减少了上提的指令的数量。
S420,根据所述写变量重命名后的分支指令和依赖指令获得第一指令序列。
一个具体的实施方式中,上提的分支指令和依赖指令可以先组成至少一个第二指令序 列,再由至少一个第二指令序列组成第一指令序列。其中,第二指令序列可以是生成第一 指令序列的中间指令序列,一个第二指令序列可以包括一条路径的对应的写变量。具体地, 可以根据至少一条路径包括的写变量获得至少一个第二指令序列。第一指令序列可以为最 终上提指令序列,也即硬件可以根据输入条件匹配该上提指令序列中包括的具体路径,例 如上文所说的KEY。
一个具体的实施方式中,将分支指令和依赖指令组成的至少一个第二指令序列上提, 例如,可以上提至寄存器的分支单元,该寄存器可以是专门构建用于存储上提指令相关数 据的寄存器,该上提指令的相关数据信息例如可以是执行该上提指令时所需的数据(如操 作数)等。此外,该寄存器专门用于存储与上提指令相关的数据或者仅针对上提指令进行 操作,换句话说,该寄存器不对上提指令之外的其他指令的相关数据进行存储并且不对其 他指令进行操作。
应理解,本申请中涉及的分支单元包括存储器、寄存器、多路分支加速器等,其中,上提的指令可以村处置该分支单元的存储器中,该上提的指令相关的数据信息可以存储至分支单元的寄存器中。
一个具体的实施方式中,可以在对写变量重命名的过程中,插入PHI节点,该PHI节点用于指示该写变量可能的取值信息。
应理解,当对写变量进行重命名后,为了使使用该写变量的位置能够清楚的获知具体 使用哪一个重命名后的写变量来赋值,需要获知重命名后的写变量分别对应的来源信息 (如传递路径)。具体地,以图6为例,当写变量A和B未被重命名之前,基本块4中 的[CMP cc1=A,B]可以根据程序执行的路径选择对写变量赋值,所赋的值可能分别是基 本块2中的A和B的计算结果,也可能分别是基本块3中的A和B的计算结果;而对写 变量A和B重命名后,可以通过插入PHI节点表示基本块4中的写变量可能赋的值的传 递路径,从而获知[CMP cc1=A,B]中A和B可以采用的赋值,从而使得该程序可以准确 的执行。
应理解,插入PHI节点用于表示对写变量重命名后,分支合并处或者使用写变量处能 够采取的赋值的选择范围。由于在基于SSA的分支转换过程中,每个写变量仅能够被赋值一次,因此,若在不同的基本块中出现命名相同的写变量时,该命名相同的写变量无法被重复赋值,导致程序无法正常执行。当对写变量进行重命名后,在分支合并处若需要使用该写变量,为了表示该写变量可能采取的重命名后的写变量与路径的对应关系,则需要插入PHI节点,由该PHI节点表示分支合并处可以采用的写变量有哪些。也即,PHI节点 主要解决的问题是SSA一次赋值的问题。因此,为了表示控制流图中分支合并处的写变 量可能的取值信息,插入PHI节点。此外,本实施例仅以插入PHI节点为例对使用写变量 的位置可能采用的重命名后的写变量的选择范围进行表示,但本实施例对此并不限定。
作为一个示例,在如下左侧所示的伪代码中,若v的值小于10,写变量a就要被赋值为2,由于SSA只能让变量赋值一次,因此,最后在给b赋值时,b无法确定取2还是取 1。针对这一问题,可以通过添加一个PHI节点(如下右侧伪代码所示),由其来表示能 够选择的a(a1或者a2)来给b赋值,其中,PHI节点根据控制流是从哪个基本块到达或 者到达的是a1还是a2来决定给b赋何值。
Figure BDA0002038655710000091
具体而言,该PHI节点可以用于表示来自分支不同侧可能的变量定值,换句话说,PHI 节点需要保持当前变量的来源信息,也即当前变量是从哪个具体路径传递到当前变量的。
作为另一个示例,图7中,在基本块4中的[CMP cc1]语句中涉及到的写变量A,其可以来自基本块2中A的计算结果,也可以来自基本块1中的计算结果,基本块1中赋值 后的A经由基本块3传递至基本块4中,为了表示基本块4中变量A的可能的来源信息, 插入与写变量A相关的PHI节点,也即{A<A1:[1,3,4]>,<A2:[2,4]>},基本块4中写变量B 的来源信息与写变量A类似,插入与写变量B相关的PHI节点{B<B2:[3,4]>,<A2:[1,2,4]>}。 其中写变量A的[1,3,4]、[2,4]以及写变量B的[3,4]、[1,2,4]分别表示的是写变量A和B的 取值的传递路径,也即对A和B所赋的值的来源路径。因此,最终基本4中的[CMP cc1=A,B] 中的PHI节点信息如下:
{A<A1:[1,3,4]>,<A2:[2,4]>}
{B<B2:[3,4]>,<A2:[1,2,4]>}
一个具体的实施方式中,对写变量重命名的过程和插入PHI节点的过程可以是动态 的。以图6所示的伪代码为例,当对基本块1中的写变量A和B分别重命名为A1和B1 时,可以插入用于表示到达当前写变量的控制流的路径信息的PHI节点{A<A1:[0],B <B1:[0]>},当对基本块2中的写变量A重命名为A2,对基本块3中的写变量B重命名 为B2时,可以在分支合并处,也即基本块4处插入PHI节点{A<A1:[0,2,3]>,<A2:[1,3]>} 和节点{B<B2:[2,3]>,<B1:[0,1,3]>}。也即对写变量的重命名和插入PHI节点可以是交 替进行的。
应理解,上文仅以基本块4中的写变量A和B为例对插入PHI进行了介绍,在本实 施例中,PHI节点并不限制于仅在基本块4处插入,而是在任何有分支合并的位置都可以 插入,以表示分支合并位置的写变量的可能的取值信息。
此外,本申请实施例仅用PHI节点作为一种用于表示对分支合并处写变量所赋的值的 路径来源的方式的示例,也可以以其他方式对分支合并处的可能采取的重命名后的写变量 进行表示,本申请对此不做限定。
由于PHI节点为虚拟节点,其仅表示写变量可能的取值信息,而在后续的程序执行过 程中需要具体的写变量取值,因此在后续过程中若获取了写变量的具体取值,则将PHI节点消除。
具体地,根据每条profile上包括的写变量以及该profile上分支合并位置插入的PHI 节点信息获取上提的第二指令序列。由于profile是确定的执行路径,因此可以用该profile 中具体的值与对应的分支合并位置插入的PHI节点表示的写变量可能的取值进行匹配,即 可以通过具体路径对PHI节点进行筛选,该PHI节点中包括的写变量被具体值匹配后消除, 此时PHI节点在具体的一个profile中消除后则生成完整的指令序列。
一个具体的实施方式中,以拓扑序列遍历每一个节点,迭代地处理指令,同时对PHI 节点进行插入和消除以记录写变量重命名后的映射关系。
示例性的,如图7所示,当前经过深度优先遍历后生成的两条profile,即profile1: [1,2,4]和profile 2:[1,3,4]后,根据每条profile中包括的基本块对PHI节点中的路径进行筛选。以指令[CMP cc1=A,B]为例,对于profile 1的路径[1,2,4],PHI节点<A2:[1,3]>和PHI节点<B1:[0,1,3]>均可以与该profile 1匹配,也即PHI节点包括的基本 块所在的路径属于profile 1。当生成写变量所在的具体的路径后,就可以消除与该具体路 径对应的PHI节点。
一个具体的实施方式中,生成的写变量的具体路径可以是一条指令,该指令可以用于 表示某一路径与该路径上包括的写变量的对应关系,例如,生成key1=A2,B1可以用于 表示profile 1包括的写变量可以有A2和B1,也即A2和B1经历的基本块所在的路径为profile 1的子集。此外,该指令序列还可以作为后续进行硬件加速器组KEY使用的变量。
类似地,对于profile 2的路径[1,3,4],PHI节点<A1:[1,3,4]>和PHI节点<B2:[2,3]>将会被匹配,且生成一条指令:key2=A1,B2。
应理解,上文所说的用于替换虚拟PHI节点的指令(如key1或者key2)可以作为硬件执行程序时对分支进行选择的依据。
图8示出了基于SSA的分支转换算法的示意图。由图7右侧示出的最终上提指令序列可以看出,对分支指令中的写变量进行重命名后再进行上提使得最终上提指令序列中的上提指令仅为7条,相对于目前采取的直接复制每条路径上提指令的方法,大大降低了上提指令的数量,减缓了用于存储上提指令的存储器的资源紧张的问题。
本申请实施例提供的指令处理的方法,有效地降低了上提指令的个数,将目前采用复 制方法上提指令中指数级别的指令个数降低至近似线性复杂度级别,通过按需的分析仅上 提分支指令与该分支指令所依赖的指令,使得需要上提的变量在全局有唯一的定值点,重 命名变量个数可以达到最小化。
除了上文所说的基于SSA的指令处理方法,本申请还在硬件层面做出了改进。具体地,为了解决将指令序列上提至通用寄存器后对寄存器造成的存储空间不足、资源紧张的问题,本申请构建专门用于存储上提的分支指令以及该分支指令的依赖指令的相关信息的第一寄存器。其中,该相关信息可以是执行上提的分支指令和依赖指令是所需要的数据(如操作数),此外,该第一寄存器也可以对上提的指令进行操作,例如,上提的指令序列在 该第一寄存器中组建最终指令序列等。也即,本实施例上提的指令序列中的分支指令和依 赖指令的相关数据信息均存储于该第一寄存器中,且该第一寄存器不用于存储上提指令之外的其他指令的相关信息以及不对其他指令进行操作等。
图9为本申请实施例新增的寄存器的示意图。
在网络处理器中,报文(message)处理逻辑可以被抽象为查表匹配-分支-执行(match-branch-action)结构,对应在硬件结构中,分别为查表单元(table unit)、分支单元和动作执行单元。本申请所构建的第一寄存器正是用于专门存储上提的指令序列中的分支指令和依赖指令的相关数据信息以及使上提的指令序列在分支单元中组合最终指令序列的。
一个具体的实施方式中,构建第一寄存器,其中,该第一寄存器用于专门存储上提的 指令序列中的分支指令和与该分支指令具有依赖关系的依赖指令的相关数据信息。
一个具体的实施方式中,上提分支指令和该分支指令的依赖指令组成的第二指令序 列,其中,可以将该第二指令序列中的分支指令和依赖指令存储至分支单元。此外,可以将依赖指令上提至分支指令之前,使得在执行程序时,能够在准确获知依赖指令的基础上执行分支指令以选择正确的程序执行路径。
一个具体的实施方式中,上提的第二指令序列在第一寄存器中组成第一指令序列,也 即最终指令序列。其中,最终指令序列包括与不同路径相匹配的指令序列集合,硬件在执 行程序时可以与该最终指令序列中的与不同路径相匹配的指令序列进行匹配,进而确定在 执行过程中应该选择的具体路径。
一个具体的实施方式中,上提的指令序列可以在寄存器中生成最终指令序列的列表, 该列表中可以包括不同的控制流路径对应的指令序列,硬件在执行程序时可以先与该列表 中的指令序列进行匹配,然后选择与该指令序列对应的执行路径。
一个具体的实施方式中,该寄存器可以在当前所执行的程序的全局范围内进行读取, 以保证资源复用。
一个具体的实施方式中,当多路分支加速器完成组KEY之后,该寄存器中最终指令序列的相关的数据信息所占用的存储空间将被释放或者清空。其中,该寄存器窗口可以是被硬件自动释放或者清空,也就是说,程序员无需维护其生命周期。
应理解,通过构建专门用于存储上提指令序列中的分支指令和依赖指令的相关的数据 信息的寄存器,使得与分支上提的指令相关的数据不再被分配使用通用寄存器存储,因而 不会增加通用寄存器的工作载荷,缓解通用寄存器空间资源紧张。在特殊的情况下,可以 将分支相关指令在动作执行单元中删除,进一步降低通用寄存器资源的使用。此外,本申 请构建的寄存器可以由硬件维护其生命周期,当分支单元中组合最终指令序列完成后,可 以对该上提的指令序列中指令所占据的空间进行释放或者清空,从而降低了寄存器分配过 程的复杂度,且组成最终指令序列的过程对编程模型透明,也提高了编程模型的灵活性。
本申请提供的基于SSA的指令处理方法以及构建专门寄存器可以单独执行也可以同 时执行。当同时采用本申请实施例提供的指令处理方法和构建专门寄存器时,两者具有相 辅相成的关系,当两者结合实施时,一方面可以有效减少上提的指令数量,节省了用于存 储该上提的指令的存储器的空间资源,另一方面解决了通用寄存器的使用瓶颈问题,且当 上提指令数量较少时,也可以缓解专用寄存器的空间资源紧张的问题,从而使寄存器具有 更优的执行性能。
图10为一种指令处理的装置1000。该指令处理装置可用于执行上文所述的指令处理 的方法。该指令处理的装置1000包括第一处理单元1010和第二处理单元1020。
一个具体的实施方式中,第一处理单元1010,用于对第一程序中需要上提的分支指 令和所述分支指令的依赖指令中的写变量进行重命名,使所述写变量具有全局唯一的变量 名;
一个具体的实施方式中,第二处理单元1020,用于根据所述写变量重命名后的分支 指令和依赖指令获得第一指令序列。
一个具体的实施方式中,该指令处理装置的第二处理单元1020还可以用于插入一个 PHI节点,所述PHI节点用于指示所述写变量可能的取值信息;根据所述PHI节点和至少一条路径包括的所述写变量,获得至少一个第二指令序列,所述第二指令序列包括所述至少一条路径中的任意一条路径对应的所述写变量;所述至少一个第二指令序列组成所述第一指令序列。
一个具体的实施方式中,该指令处理装置还可以包括第三处理单元,用于当执行所述 第一指令序列后,释放所述第一寄存器中所述第一指令序列所占的空间。其中,该第一指 令序列所占的空间由硬件自动清空。
图11为本申请实施例提供的一种指令处理的装置。该指令处理的装置1100包括至少 一个存储器1101和处理器1102。
一个具体的实施方式中,存储器1101用于存储计算机程序,处理器1102用于从所述 存储器1101调用并运行所述计算机程序,使得该指令处理的装置能够执行上文提供的指 令处理的方法。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及 算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以 硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可 以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本 申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装 置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元 的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或 组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所 显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的 间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的 部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络 单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各 个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储 在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现 有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机 软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计 算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而 前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随 机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代 码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟 悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖 在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (18)

1.一种指令处理的方法,其特征在于,包括:
对第一程序中需要上提的分支指令和所述分支指令的依赖指令中的写变量进行重命名,使所述写变量具有全局唯一的变量名;
根据所述写变量重命名后的分支指令和依赖指令获得第一指令序列。
2.根据权利要求1所述的方法,其特征在于,根据所述写变量重命名后的分支指令和依赖指令获得第一指令序列,包括:
插入一个PHI节点,所述PHI节点用于指示所述写变量可能的取值信息;
根据所述PHI节点和至少一条路径包括的所述写变量,获得至少一个第二指令序列,所述第二指令序列包括所述至少一条路径中的任意一条路径对应的所述写变量;
所述至少一个第二指令序列组成所述第一指令序列。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
构建第一寄存器,所述第一寄存器用于专门存储所述上提的分支指令和分支指令的依赖指令的相关的数据信息。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述方法还包括:
执行所述第一指令序列后,释放所述第一寄存器中所述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间。
5.根据权利要求4所述的方法,其特征在于,所述释放所述第一寄存器中所述第一指令序列所占的空间,包括:
所述第一寄存器中所述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间由硬件自动清空。
6.一种指令的处理方法,其特征在于,包括:
构建第一寄存器,所述第一寄存器用于专门存储上提的分支指令和所述分支指令的依赖指令的相关的数据信息;
上提分支指令和所述分支指令的依赖指令组成的指令序列,并根据所述第一寄存器中的所述数据信息执行所述分支指令和所述依赖指令。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
对所述分支指令和所述依赖指令中的写变量进行重命名,使所述写变量具有全局唯一的变量名。
8.根据权利要求7所述的方法,其特征在于,所述上提所述分支指令和所述分支指令的依赖指令组成的指令序列,包括:
插入一个PHI节点,所述PHI节点用于指示所述写变量可能的取值信息;
根据所述PHI节点和至少一条路径包括的所述写变量,获得至少一个第二指令序列,所述第二指令序列包括所述至少一条路径中的任意一条路径对应的所述写变量;
上提所述至少一个第二指令序列。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
所述至少一个第二指令序列组成第一指令序列。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
执行所述第一指令序列后,释放所述第一寄存器中所述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间。
11.根据权利要求10所述的方法,其特征在于,所述释放所述第一寄存器中所述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间,包括:
所述第一寄存器中所述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间由硬件自动清空。
12.一种指令处理的装置,其特征在于,包括:
第一处理单元,所述第一处理单元用于对第一程序中需要上提的分支指令和所述分支指令的依赖指令中的写变量进行重命名,使所述写变量具有全局唯一的变量名;
第二处理单元,所述第二处理单元用于根据所述写变量重命名后的分支指令和依赖指令获得第一指令序列。
13.根据权利要求12所述的装置,其特征在于,所述根据所述写变量重命名后的分支指令和依赖指令获得第一指令序列,包括:
插入一个PHI节点,所述PHI节点用于指示所述写变量可能的取值信息;
根据所述PHI节点和至少一条路径包括的所述写变量,获得至少一个第二指令序列,所述第二指令序列包括所述至少一条路径中的任意一条路径对应的所述写变量;
所述至少一个第二指令序列组成所述第一指令序列。
14.根据权利要求13所述的装置,其特征在于,所述至少一个第二指令序列组成第一指令序列,包括:
上提所述至少一个第二指令序列至第一寄存器,所述第一寄存器用于专门存储所述上提的分支指令和分支指令的依赖指令的相关的数据信息;
所述至少一个第二指令序列在所述第一寄存器组成所述第一指令序列。
15.根据权利要求12-14中任一项所述的装置,其特征在于,还包括:
第三处理单元,所述第三处理单元用于当执行所述第一指令序列后,释放所述第一寄存器中所述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间。
16.根据权利要求15所述的装置,其特征在于,所述释放所述第一寄存器中所述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间,包括:
所述第一寄存器中所述第一指令序列中分支指令和依赖指令相关的数据信息所占的空间由硬件自动清空。
17.一种指令处理的装置,其特征在于,包括至少一个存储器和处理器,其中,
所述存储器用于存储计算机程序;
所述处理器用于从所述存储器调用并运行所述计算机程序,使得所述装置执行权利要求1至11中任一项所述的方法。
18.一种指令处理的系统,其特征在于,所述系统包括指令处理的装置和第一寄存器,其中,
所述指令处理的装置用于执行权利要求1至11中任一项所述的方法;
所述第一寄存器用于专门存储上提的分支指令和所述分支指令的依赖指令的相关的数据信息。
CN201910334245.0A 2019-04-24 2019-04-24 指令处理的方法及装置 Pending CN111857815A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910334245.0A CN111857815A (zh) 2019-04-24 2019-04-24 指令处理的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910334245.0A CN111857815A (zh) 2019-04-24 2019-04-24 指令处理的方法及装置

Publications (1)

Publication Number Publication Date
CN111857815A true CN111857815A (zh) 2020-10-30

Family

ID=72952242

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910334245.0A Pending CN111857815A (zh) 2019-04-24 2019-04-24 指令处理的方法及装置

Country Status (1)

Country Link
CN (1) CN111857815A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021239056A1 (zh) * 2020-05-29 2021-12-02 中科寒武纪科技股份有限公司 计算程序中数据依赖关系的方法及计算机可读存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101490693A (zh) * 2006-07-18 2009-07-22 松下电器产业株式会社 指令生成装置
CN103150146A (zh) * 2013-01-31 2013-06-12 西安电子科技大学 基于可扩展处理器架构的专用指令集处理器及其实现方法
US20180165092A1 (en) * 2016-12-14 2018-06-14 Qualcomm Incorporated General purpose register allocation in streaming processor
CN108427576A (zh) * 2018-02-12 2018-08-21 华夏芯(北京)通用处理器技术有限公司 一种免受Spectre攻击的高性能推测执行算法
CN109582368A (zh) * 2017-09-29 2019-04-05 英特尔公司 用于将单一静态指派指令映射至数据流架构中的数据流图上的方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101490693A (zh) * 2006-07-18 2009-07-22 松下电器产业株式会社 指令生成装置
CN103150146A (zh) * 2013-01-31 2013-06-12 西安电子科技大学 基于可扩展处理器架构的专用指令集处理器及其实现方法
US20180165092A1 (en) * 2016-12-14 2018-06-14 Qualcomm Incorporated General purpose register allocation in streaming processor
CN109582368A (zh) * 2017-09-29 2019-04-05 英特尔公司 用于将单一静态指派指令映射至数据流架构中的数据流图上的方法和装置
CN108427576A (zh) * 2018-02-12 2018-08-21 华夏芯(北京)通用处理器技术有限公司 一种免受Spectre攻击的高性能推测执行算法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021239056A1 (zh) * 2020-05-29 2021-12-02 中科寒武纪科技股份有限公司 计算程序中数据依赖关系的方法及计算机可读存储介质

Similar Documents

Publication Publication Date Title
JP3311462B2 (ja) コンパイル処理装置
US6954747B1 (en) Methods for comparing versions of a program
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US7383422B2 (en) Very long instruction word (VLIW) computer having an efficient instruction code format
US6412105B1 (en) Computer method and apparatus for compilation of multi-way decisions
TWI387927B (zh) 程式碼轉換之部分無效碼刪除最佳化
US7401329B2 (en) Compiling computer programs to exploit parallelism without exceeding available processing resources
US6925639B2 (en) Method and system for register allocation
US7069548B2 (en) Inter-procedure global register allocation method
US10430191B2 (en) Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption
GB2415812A (en) Compiler for producing an optimised parallel program using execution cycles between fork source and destination points
GB2415811A (en) Compiler for producing an optimised parallel program using execution performance index values
US8943484B2 (en) Code generation method and information processing apparatus
US9823911B2 (en) Method and apparatus for compiling code based on a dependency tree
WO2015050594A2 (en) Methods and apparatus for parallel processing
GB2415813A (en) Program parallelising apparatus, method and program for compiling an optimised parallelised program
CN102193811A (zh) 消除内存访问冲突的编译装置及其实现方法
JPH096627A (ja) 最適化装置
US20170193055A1 (en) Method and apparatus for data mining from core traces
WO2024065867A1 (zh) 一种用于神经网络编译的内存优化方法及装置
CN111857815A (zh) 指令处理的方法及装置
CN116414396A (zh) 一种llvm的目标定义文件生成方法、装置和电子设备
JP2022140995A (ja) 情報処理装置、コンパイルプログラムおよびコンパイル方法
Koizumi et al. Reduction of instruction increase overhead by STRAIGHT compiler
Krall Implementation techniques for Prolog.

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination