CN115934103A - 节点融合处理方法、装置及电子设备 - Google Patents
节点融合处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN115934103A CN115934103A CN202211733741.1A CN202211733741A CN115934103A CN 115934103 A CN115934103 A CN 115934103A CN 202211733741 A CN202211733741 A CN 202211733741A CN 115934103 A CN115934103 A CN 115934103A
- Authority
- CN
- China
- Prior art keywords
- node
- nodes
- directed acyclic
- acyclic graph
- negation
- 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
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本申请实施例提供一种节点融合处理方法、装置及电子设备,所述方法包括:获取源程序代码,对源程序代码进行预处理操作,得到目标平台对应的中间代码,根据预设规则对中间代码进行拟合,得到与目标平台对应的有向无环图,判断有向无环图中各节点分别对应的操作类型,若有向无环图中包含表示取反操作的多个节点时,则将表示取反操作的多个节点转换为一个取反操作节点,根据取反操作节点以及有向无环图中除取反操作节点之外的其他节点各自对应的目标指令,得到待处理业务对应的可执行程序。本申请减少了实现取反操作的节点个数,降低了各节点之间的依赖性,有利于后续的指令调度和指令优化。
Description
技术领域
本申请实施例涉及数据处理技术领域,尤其涉及一种节点融合处理方法、装置及电子设备。
背景技术
编译器为一种将高级语言转换为二进制指令的程序,可以应用于多种平台。
现有技术中,编译器在对数据执行取反操作时,可能涉及到多个操作过程,不同的操作过程对应不同的节点,因此,需要通过多个节点来实现数据的取反操作。
然而,在使用多个节点执行数据的取反操作时,各节点之间具有数据依赖关系,即后继节点所需的数据需要等待前继节点运算完成后才能获得,各节点之间的依赖性过大,不利于后续的指令调度和指令优化,进而影响了业务的正常实现。
发明内容
本申请实施例提供一种节点融合处理方法、装置及电子设备,以降低各节点之间的依赖性。
第一方面,本申请实施例提供一种节点融合处理方法,包括:
获取源程序代码;其中,所述源程序代码为待应用于目标平台的待处理业务对应的高级语言代码;
对所述源程序代码进行预处理操作,得到所述目标平台对应的中间代码;根据预设规则对所述中间代码进行拟合,得到与所述目标平台对应的有向无环图;其中,所述有向无环图中包含至少一节点,每个节点表示实现所述待处理业务中的一个操作;
判断所述有向无环图中各节点分别对应的操作类型,若所述有向无环图中包含表示取反操作的多个节点时,则将所述表示取反操作的多个节点转换为一个取反操作节点;
根据所述取反操作节点以及所述有向无环图中除所述取反操作节点之外的其他节点各自对应的目标指令,得到所述待处理业务对应的可执行程序。
可选的,所述若所述有向无环图中包含表示取反操作的多个节点时,则将所述表示取反操作的多个节点转换为一个取反操作节点,包括:
在有向无环图合并阶段,若所述有向无环图中包含表示对浮点类型的数据执行取反操作的多个节点时,则将所述表示对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点,
其中,所述表示对浮点类型的数据执行取反操作的多个节点中包含的操作数为全零数据和待执行取反操作的浮点数,所述取反操作节点的操作数为所述待执行取反操作的浮点数。
可选的,所述在有向无环图合并阶段,若所述有向无环图中包含表示对浮点类型的数据执行取反操作的多个节点时,则将所述表示对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点,包括:
在有向无环图合并阶段,对所述有向无环图中的节点进行遍历操作;
若所述有向无环图中包含数据类型为浮点类型,且输出数据为对输入数据执行取反操作的多个节点时,则将所述多个节点转换为一个取反操作节点。
可选的,所述根据所述取反操作节点以及所述有向无环图中除所述取反操作节点之外的其他节点各自对应的目标指令,得到所述待处理业务对应的可执行程序,包括:
对所述取反操作节点执行降级处理,得到与所述目标平台对应的平台取反操作节点;
从与所述目标平台对应的预设指令集中确定所述平台取反操作节点对应的第一指令;其中,所述第一指令用于将待执行取反操作的浮点数对应符号位所在的比特位取反;
从与所述目标平台对应的预设指令集中确定所述有向无环图中除所述取反操作节点之外的其他节点对应的第二指令;其中,所述第二指令用于实现所述待处理业务中除对浮点数执行取反操作的其他操作;
对所述第一指令以及所述第二指令进行处理,得到实现所述待处理业务对应的可执行程序。
可选的,所述对所述取反操作节点执行降级处理,得到与所述目标平台对应的平台取反操作节点,包括:
在指令选择阶段,获取与所述目标平台对应的平台节点;
根据所述平台节点与所述取反操作节点得到所述目标平台对应的平台取反操作节点。
可选的,所述对所述源程序代码进行预处理操作,得到所述目标平台对应的中间代码;根据预设规则对所述中间代码进行拟合,得到与所述目标平台对应的有向无环图,包括:
对所述源程序代码进行分析处理,得到所述源程序代码对应的中间代码;
根据预设的优化规则对所述中间代码进行筛选,得到与所述优化规则对应的中间代码;
根据预设规则对与所述优化等级对应的中间代码进行拟合,得到与所述目标平台对应的有向无环图。
第二方面,本申请实施例提供一种节点融合处理装置,包括:
获取模块,用于获取源程序代码;其中,所述源程序代码为待应用于目标平台的待处理业务对应的高级语言代码;
处理模块,用于对所述源程序代码进行预处理操作,得到所述目标平台对应的中间代码;根据预设规则对所述中间代码进行拟合,得到与所述目标平台对应的有向无环图;其中,所述有向无环图中包含至少一节点,每个节点表示实现所述待处理业务中的一个操作;
所述处理模块,还用于判断所述有向无环图中各节点分别对应的操作类型,若所述有向无环图中包含表示取反操作的多个节点时,则将所述表示取反操作的多个节点转换为一个取反操作节点;
所述处理模块,还用于根据所述取反操作节点以及所述有向无环图中除所述取反操作节点之外的其他节点各自对应的目标指令,得到所述待处理业务对应的可执行程序。
第三方面,本申请实施例提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如上第一方面以及第一方面各种可能的设计所述的节点融合处理方法。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,以实现如上第一方面以及第一方面各种可能的设计所述的节点融合处理方法。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时,以实现如上第一方面以及第一方面各种可能的设计所述的节点融合处理方法。
本申请实施例提供了一种节点融合处理方法、装置及电子设备,采用上述方案后,可以先获取源程序代码,然后可以对源程序代码进行预处理操作,得到目标平台对应的中间代码,然后可以根据预设规则对中间代码进行拟合,得到与目标平台对应的有向无环图,且每个节点表示实现待处理业务中的一个操作,并可以对有向无环图中的节点进行筛查,若有向无环图中包含表示取反操作的多个节点时,则可以将表示取反操作的多个节点转换为一个取反操作节点,再根据取反操作节点以及有向无环图中除取反操作节点之外的其他节点各自对应的目标指令,得到待处理业务对应的可执行程序。通过将有向无环图中表示取反操作的多个节点转换为一个取反操作节点,并根据取反操作节点来实现待处理业务的方式,减少了实现取反操作的节点个数,降低了各节点之间的依赖性,有利于后续的指令调度和指令优化,进而提高了业务程序的实现效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的节点融合处理方法的应用系统的架构示意图;
图2为本申请实施例提供的节点融合处理方法的流程示意图;
图3为本申请实施例提供的优化前的有向无环图的结构示意图;
图4为本申请实施例提供的优化后的有向无环图的结构示意图;
图5为本申请另一实施例提供的节点融合处理方法的流程示意图;
图6为本申请实施例提供的节点融合处理装置的结构示意图;
图7为本申请实施例提供的电子设备的硬件结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例还能够包括除了图示或描述的那些实例以外的其他顺序实例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
相关技术中,在业务实现过程中,经常涉及到对数据执行取反操作。在执行取反操作时,一般需要先获取一数据均为0的全零数据节点以及需要执行取反操作的数据节点,然后可以通过减法节点来将全零数据节点与需要取反操作的数据节点进行减运算,进而实现数据的取反操作。例如,需要执行取反操作的数据节点为A,可以先获取一全零数据节点以及需要执行取反操作的数据节点,然后可以通过减法节点来将全零数据节点与需要取反操作的数据节点进行减运算,得到取反操作后的数据节点-A。然而,在对数据执行取反操作的过程中,涉及到了多个节点,各节点之间具有数据依赖关系,即后继节点所需的数据需要等待前继节点运算完成后才能获得,增大了各节点之间的依赖性,不利于后续的指令调度和指令优化,进而影响了业务的正常实现。例如,A、B与C三个节点有数据依赖关系,在指令调度时,A、B与C三个节点的相对位置不能发生变化。在进行指令流水线优化时,A、B与C三个节点所对应生成的指令不能并行执行。
基于上述技术问题,本申请通过将有向无环图中表示取反操作的多个节点转换为一个取反操作节点,并根据取反操作节点来实现待处理业务的方式,减少了实现取反操作的节点个数,达到了既降低了各节点之间的依赖性,有利于后续的指令调度和指令优化,又提高了业务程序的实现效率的技术效果。
图1为本申请实施例提供的节点融合处理方法的应用系统的架构示意图,如图1所示,所述应用系统可以包括:编译器101、处理器102和操作系统103,编译器101可以对获取的源程序代码进行预处理,得到目标平台对应的中间代码,然后可以根据预设规则对中间代码进行拟合,得到与目标平台对应的有向无环图,然后可以对该有向无环图中包含表示取反操作的多个节点进行节点融合优化处理,得到一个取反操作节点,并根据取反操作节点以及有向无环图中除取反操作节点之外的其他节点各自对应的目标指令,得到待处理业务对应的可执行程序。此外,操作系统103还可以将待处理业务对应的可执行程序发送至处理器102执行。
下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图2为本申请实施例提供的节点融合处理方法的流程示意图,本实施例的方法可以由编译器101执行。如图2所示,本实施例的方法,可以包括:
S201:获取源程序代码;其中,源程序代码为待应用于目标平台的待处理业务对应的高级语言代码。
在本实施例中,源程序代码是指未经编译的,按照一定的程序设计语言规范书写的,用户可读的文本文件。通常由高级语言编写,示例性的,可以采用C语言或C++等高级语言。
此外,源程序代码的内容可以由开发人员根据项目的实际内容确定,在此不再具体进行限定。
其中,目标平台可以为各种类型的处理器架构,比如RISC(Reduced InstructionSet Computing,精简指令集计算机)、CISC(Complex Instruction Set Computer,复杂指令集计算机),最终生成的可以直接执行的指令也为各类处理器架构对应的指令集。
此外,编译器可以采用现有的编译器,示例性的,可以为LLVM(Low Level VirtualMachine,底层虚拟机)编译器。
S202:对源程序代码进行预处理操作,得到目标平台对应的中间代码,根据预设规则对中间代码进行拟合,得到与目标平台对应的有向无环图;其中,有向无环图中包含至少一节点,每个节点表示实现待处理业务中的一个操作。
在本实施例中,待处理业务的实现过程可以包括多个操作,即多个操作组合起来即可实现待处理业务。因此,源程序代码可以为待处理业务中包含的操作对应的代码。在得到源程序代码之后,可以先对源程序代码进行预处理操作,得到目标平台对应的中间代码,然后可以根据预设规则对中间代码进行拟合,得到与目标平台对应的有向无环图,后续可以通过该有向无环图实现待处理业务。其中,有向无环图中可以包含一个或多个节点,每个节点可以表示实现待处理业务中的一个操作。
进一步的,所述对所述源程序代码进行预处理操作,得到所述目标平台对应的中间代码,根据预设规则对所述中间代码进行拟合,得到与所述目标平台对应的有向无环图,具体可以包括:
对所述源程序代码进行分析处理,得到所述源程序代码对应的中间代码。
根据预设的优化规则对所述中间代码进行筛选,得到与所述优化规则对应的中间代码。
根据预设规则对与所述优化等级对应的中间代码进行拟合,得到与所述目标平台对应的有向无环图。
具体的,在得到源程序代码之后,可以先对源程序代码进行分析处理,得到与源程序代码对应的中间代码。对应的,分析处理可以包括编译器前端对源程序代码中的取反操作进行词法分析、语法分析、语义分析后生成对应的中间代码。
示例性的,源程序代码可以为:v8f32 foo(v8f32 a){return-a},即可以对浮点数a取反操作,得到-a。然后可以对源程序代码进行分析处理,得到源程序代码对应的中间代码。对应的,编译器前端在收到源程序代码的输入后,可以将源程序代码分解为token流,每个token可表示标识符、字面量以及运算符等,然后可以将token流传递给语法分析器,语法分析器可以在语言的CFG(Context Free Grammar,上下文无关语法)的指导下将token流组织成AST(Abstract Syntax Code,抽象语法树)。编译器前端可以继续进行语义分析,检查语义正确性,然后生成中间代码LLVM IR。
其中,中间表示可以为:
define<8x float>@foo(<8x float>%a)#0{
entry:%a.addr=alloca<8x float>,align 32;
store<8x float>%a,<8x float>*%a.addr,align 32;
%0=load<8x float>,<8x float>*%a.addr,align 32;
%fneg=fneg<8x float>%0ret<8x float>%fneg
};
此外,在得到源程序代码对应的中间代码之后,还可以根据预设的优化规则对中间代码进行筛选,得到与优化规则对应的中间代码。对应的,优化规则可以根据实际应用场景自定义进行设置,且不同的优化规则对应着编译器将会对中间代码执行不同的优化程度。可选的,优化规则可以包含O0等级、O1等级、O2等级和O3等级。其中,O0等级表示编译器的中端优化器opt不执行任何优化。O1等级到O3等级表示开启优化,但是优化的程度不同,其中,O1级别表示优化的程度最轻的,O2级别开启的优化比O1更多,O3级别将开启所有优化,尽力减少指令数量,并将指令流水调度到最优的程度,且通过对中间代码的优化,可以生成更优的指令序列,进而减少后续程序的执行时间。
此外,在得到优化规则对应的中间代码之后,还可以根据预设规则对与优化规则对应的中间代码进行降级操作,并在降级操作的过程中生成有向无环图(DAG,DirectedAcyclic Graph)。可选的,可以采用现有的方式来通过中间代码生成有向无环图。
示例性的,在中间代码转换为有向无关图的过程中,每条IR语句可以转换为DAG图中的一个节点。DAG节点可以由LLVM编译器后端的SelectionDAGBuilder类创建,该类可以调用visit()函数,编译每个IR指令来创建DAG图。
S203:判断有向无环图中各节点分别对应的操作类型,若有向无环图中包含表示取反操作的多个节点时,则将表示取反操作的多个节点转换为一个取反操作节点。
在本实施例中,降级操作的过程除了可以包括生成有向无环图之外,还可以包括DAG图合并、DAG图合法化、指令选择等阶段。因此,在得到有向无环图之后,可以在DAG图合并阶段对有向无环图中的节点进行筛查,确定有向无环图中是否有可以优化的节点。
可选的,可以确定有向无环图中是否有可以优化的取反节点。对应的,若有向无环图中包含表示取反操作的多个节点时,则可以确定有向无环图中包含可以优化的取反节点,然后可以将表示取反操作的多个节点转换为一个取反操作节点。
S204:根据取反操作节点以及有向无环图中除取反操作节点之外的其他节点各自对应的目标指令,得到待处理业务对应的可执行程序。
在本实施例中,在得到取反操作节点之后,可以对有向无环图进行更新,得到包含取反操作节点的新的有向无环图,然后可以对新的有向无环图执行DAG图合法化、指令选择等阶段,并根据取反操作节点以及有向无环图中除取反操作节点之外的其他节点各自对应的目标指令,得到待处理业务对应的可执行程序,然后可以根据该可执行程序来实现待处理业务。
采用上述方案后,可以先获取源程序代码,然后可以对源程序代码进行预处理操作,得到目标平台对应的中间代码,然后可以根据预设规则对中间代码进行拟合,得到与目标平台对应的有向无环图,且每个节点表示实现待处理业务中的一个操作,并可以对有向无环图中的节点进行筛查,若有向无环图中包含的多个节点表示一个取反操作时,则可以将表示取反操作的多个节点转换为一个取反操作节点,再根据取反操作节点以及有向无环图中除取反操作节点之外的其他节点各自对应的目标指令,得到待处理业务对应的可执行程序。通过将有向无环图中表示取反操作的多个节点转换为一个取反操作节点,并根据取反操作节点来实现待处理业务的方式,减少了实现取反操作的节点个数,降低了各节点之间的依赖性,有利于后续的指令调度和指令优化,进而提高了业务程序的实现效率。
基于图2的方法,本说明书实施例还提供了该方法的一些具体实施方案,下面进行说明。
在另一实施例中,所述若所述有向无环图中包含表示取反操作的多个节点时,则将所述表示取反操作的多个节点转换为一个取反操作节点,具体可以包括:
在有向无环图合并阶段,若所述有向无环图中包含表示对浮点类型的数据执行取反操作的多个节点时,则将所述表示对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点。
其中,所述表示对浮点类型的数据执行取反操作的多个节点中包含的操作数为全零数据和待执行取反操作的浮点数,所述取反操作节点的操作数为待执行取反操作的浮点数。
在本实施例中,取反操作可以为对浮点类型的数据执行取反操作。在有向无环图合并阶段,可以判断有向无环图中是否包含表示对浮点类型的数据执行取反操作的多个节点,若包含,则可以将表示对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点。可选的,取反操作节点可以为LLVM架构中现有的fneg节点。
进一步的,所述在有向无环图合并阶段,若所述有向无环图中包含表示对浮点类型的数据执行取反操作的多个节点时,则将所述表示对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点,具体可以包括:
在有向无环图合并阶段,对所述有向无环图中的节点进行遍历操作。
若所述有向无环图中包含数据类型为浮点类型,且输出数据为对输入数据执行取反操作的多个节点时,则将所述多个节点转换为一个取反操作节点。
具体的,在有向无环图合并阶段,可以对有向无环图中的节点进行遍历操作,然后判断有向无环图中是否有符合条件的多个节点,若确定有符合条件的多个节点,则可以将多个节点转换为一个取反操作节点。
可选的,在判断有向无环图中是否有符合条件的多个节点时,可以先判断有向无环图中是否包含数据类型为浮点类型的节点,若包含,则可以继续判断是否包含输出数据为对输入数据执行取反操作的多个节点,若包含,则可以将对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点。
可选的,有向无环图中的节点的数据结构可以为SDNode,通过SDNode数据结构可以确定节点对应的操作类型。
示例性的,SDNode的定义可以为:
class SDNode<string opcode,SDTypeProfile typeprof。
list<SDNodeProperty>props=[],string sdclass="SDNode">;
SDPatternOperator{
string Opcode=opcode;
string SDClass=sdclass;
let Properties=props;
SDTypeProfile TypeProfile=typeprof
};
其中,opcode可以表示节点的操作类型。另外,在编译的过程中,当通过SDNode数据结构中的信息找到需要优化的节点时,可以将需要优化的多个节点看作一个整体,并将这个整体的输入数据流和输出数据流传递给优化后的节点(即取反操作节点),然后可以对DAG图进行更新,形成优化后的DAG图。
示例性的,图3为本申请实施例提供的优化前的有向无环图的结构示意图,图4为本申请实施例提供的优化后的有向无环图的结构示意图。
如图3所示,优化前的有向无环图中包含多个节点,分别可以为:
t0节点:表示函数的入口,
t1节点:表示一个v8f32类型的向量寄存器,
t2节点:表示拷贝函数输入参数的操作,
t3节点:表示栈帧,
t5节点:未定义节点,将在后续的编译流程中被删除,
t6节点:存储节点,表示存储操作,
t7节点:加载节点,表示加载操作,
t9节点:表示一个v8f32类型的向量寄存器,
t10节点:表示拷贝函数输出参数的操作,
t11节点:函数返回操作节点,
t14节点:表示浮点减法节点,
t15节点:立即数节点,表示一个立即数,
t16节点:表示一个通过立即数构造向量数据类型的节点,
t17节点:表示数据类型转换操作,
GraphRoot节点:表示DAG图的根节点。
如图4所示,优化后的有向无环图中包含多个节点,与优化前的有向无环图对比,可以将t14节点、t17节点、t16节点和t15节点转换为t8节点(即取反操作节点),即将优化前的fsub节点、bitcast节点、build_vector节点和t15节点在优化后转换为了fneg节点。
对应的,如图3所示,转换前的有向无环图中:
t15节点可以为1个i32(其中,i表示整型)数据类型的数据节点,具体数值可以为浮点数-0.0(也可以为0.0,若减完的结果是用浮点数表示,则-0.0和0.0对最终结果没有影响;若减完的结果通过定点数表示则最终结果不同,通过定点数表示时正浮点零减完得到的是整数,负浮点零减完得到的是负数,具体情况可以根据实际场景选择)对应的定点数(即整型数据类型)的数值。
t16节点有8条数据流指向t15节点,因此,t16节点可以通过8个t15构建一个v8i32数据类型的向量,即t16节点是将8个i32数据类型的立即数作为v8i32类型的向量的元素,并将这8个组合成一个v8i32类型的向量数据类型。
t17节点可以将v8i32数据类型的向量转化为v8f32(即浮点型)数据类型的向量,即得到操作数0对应的浮点类型的向量。
t14节点可以表示t17节点中的操作数减去t7节点中的操作数,即通过t14节点可以将浮点向量类型的-0.0减去待执行取反操作的浮点数,进而实现对t7节点表示的待执行取反操作的浮点数的取反操作。
此外,如图4所示,转换后的有向无环图中,t8节点可以直接对t7节点中表示待执行取反操作的浮点数的符号位进行比特位取反,进而实现对待执行取反操作的浮点数的取反操作。
此外,在判断有向无环图中的节点是否需要优化时,可以先判断节点中是否有浮点类型的节点(例如,t17节点,其类型为v8f32),然后可以判断节点中是否有对浮点类型的数据执行取反操作的过程,即输出数据为对输入数据执行取反操作(例如,t14节点即对t7节点中的浮点类型的数据执行取反操作),则可以根据优化规则对多个相关节点进行优化。
此外,节点的数据结构可以为SDNode,以图中的fneg节点为例,其中包含的信息包括节点操作数的数量(图中每个节点内部的第一行)、节点代表的操作的名称(图中每个节点内部的第二行)、节点在DAG图中的编号(例如,t8)和节点的数据类型(例如,v8f32)。
综上,本申请结合国际标准IEEE二进制浮点数算术标准和浮点数据的存储方式进行节点融合优化,将多个对浮点类型的数据执行取反操作的节点融合为一个高效的节点,且该高效节点作为整体在指令调度和指令流水线优化时具有更好的优化效果。
图5为本申请另一实施例提供的节点融合处理方法的流程示意图,如图5所示,所述根据所述取反操作节点以及所述有向无环图中除所述取反操作节点之外的其他节点各自对应的目标指令,得到所述待处理业务对应的可执行程序,可以包括:
S501:对取反操作节点执行降级处理,得到与目标平台对应的平台取反操作节点。
在本实施例中,在指令选择阶段,在得到取反操作节点之后,可以先对取反操作节点进行降级处理,得到与目标平台对应的平台取反操作节点,然后再通过与目标平台对应的取反操作节点来实现后续的处理过程。
进一步的,所述对所述取反操作节点执行降级处理,得到与所述目标平台对应的平台取反操作节点,具体可以包括:
在指令选择阶段,获取与所述目标平台对应的平台节点。
根据所述平台节点与所述取反操作节点得到所述目标平台对应的平台取反操作节点。
具体的,在得到取反操作节点之后,该取反操作节点可能无法适应各个平台,因此,需要对取反操作节点进行降级处理,使得该取反操作节点可以适应各个对应的平台。可选的,可以先获取与目标平台对应的平台节点,然后可以将平台节点与取反操作节点进行整合,得到目标平台对应的平台取反操作节点。其中,目标节点可以为现有节点,在此不再详细进行论述。
S502:从与目标平台对应的预设指令集中确定平台取反操作节点对应的第一指令;其中,第一指令用于将待执行取反操作的浮点数对应符号位所在的比特位取反。
S503:从与目标平台对应的预设指令集中确定有向无环图中除取反操作节点之外的其他节点对应的第二指令;其中,第二指令用于实现待处理业务中除对浮点数执行取反操作的其他操作。
在本实施例中,在得到平台取反操作节点之后,可以在指令选择阶段确定对应的指令。可选的,可以先确定平台取反操作节点对应的第一指令,且该第一指令用于将待执行取反操作的浮点数的符号位所在的比特位取反。其中,根据国际标准IEEE二进制浮点数算术标准(IEEE 754)中对浮点数格式的要求,浮点数value的表示方式为value=sign×exponent×fraction,即浮点数的实际值,等于符号位(sign bit)乘以指数偏移值(exponent bias)再乘以分数值(fraction)。示例性的,若待执行取反操作的浮点数的符号位所在的比特位为1,则将待执行取反操作的浮点数的符号位所在的比特位更新为0;若待执行取反操作的浮点数的符号位所在的比特位为0,则将待执行取反操作的浮点数的符号位所在的比特位更新为1。
示例性的,与目标平台对应的预设指令集可以为MatcherTable,MatcherTable为TableGen根据编译器设置的规则生成的文件,TableGen生成的MatcherTable为一个数组。其中,数组的大小取决于架构编写的匹配规则的多少。在最终的指令选择时,节点可以根据MatcherTable匹配最终的指令,得到第一指令与第二指令。
S304:对第一指令以及第二指令进行处理,得到实现待处理业务对应的可执行程序。
在本实施例中,在得到第一指令以及第二指令之后,可以对第一指令与第二指令进行处理,得到实现待处理业务对应的可执行程序,然后可以根据该可执行程序实现待处理业务。
可选的,在经过指令选择后,DAG中的节点均可以转换为架构相关的节点,中间代码IR可以转换为MIR,MIR在经过指令调度和寄存器分配等阶段后可以进行代码发射,代码发射阶段可以根据不同的输出对应不同的流程。当输出的为二进制文件时,MIR可以通过LoongArchMCCodeEmitter类转换为二进制形式的指令,然后可以通过MCObjectStreamer::EmitInstruction()函数将二进制形式的指令输出到二进制文件,二进制文件经过链接后,即可生成待处理业务对应的可执行程序。
综上,本申请通过结合国际标准IEEE二进制浮点数算术标准和浮点数据的存储方式进行节点融合优化,将多个节点融合为一个高效的数据处理节点,且将取反操作转换为位运算操作节点,消除了多个运算节点的数据依赖关系,进而提高了待处理业务的实现效率。
此外,在另一实施例中,在所述获取源程序代码之前,还可以包括:
在所述目标平台中部署所述取反操作节点的应用环境。
在本实施例中,现有的目标平台可能还不支持取反操作节点,因此,需要先在目标平台中部署取反操作节点的应用环境,使得目标平台可以调用取反操作节点,然后再根据源程序代码实现待处理业务。
可选的,在根据源程序代码实现待处理业务之前,可以先判断目标平台是否支持取反操作节点的调用,若支持,可以直接获取源程序代码;若不支持,则可以生成不支持提示,进而提醒运维人员在目标平台中部署取反操作节点的应用环境,进而保证了待处理业务的正常实现。
基于同样的思路,本说明书实施例还提供了上述方法对应的装置,图6为本申请实施例提供的节点融合处理装置的结构示意图,如图6所示,本实施例提供的装置,可以包括:
获取模块601,用于获取源程序代码,其中,所述源程序代码为待应用于目标平台的待处理业务对应的高级语言代码。
处理模块602,用于对所述源程序代码进行预处理操作,得到所述目标平台对应的中间代码;根据预设规则对所述中间代码进行拟合,得到与所述目标平台对应的有向无环图;其中,所述有向无环图中包含至少一节点,每个节点表示实现所述待处理业务中的一个操作。
所述处理模块602,还用于判断所述有向无环图中各节点分别对应的操作类型,若所述有向无环图中包含表示取反操作的多个节点时,则将所述表示取反操作的多个节点转换为一个取反操作节点。
所述处理模块602,还用于根据所述取反操作节点以及所述有向无环图中除所述取反操作节点之外的其他节点各自对应的目标指令,得到所述待处理业务对应的可执行程序。
在另一实施例中,所述处理模块602,还用于:
在有向无环图合并阶段,若所述有向无环图中包含表示对浮点类型的数据执行取反操作的多个节点时,则将所述表示对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点。
其中,所述表示对浮点类型的数据执行取反操作的多个节点中包含的操作数为全零数据和待执行取反操作的浮点数,所述取反操作节点的操作数为所述待执行取反操作的浮点数。
进一步的,所述处理模块602,还用于:
在有向无环图合并阶段,对所述有向无环图中的节点进行遍历操作。
若所述有向无环图中包含数据类型为浮点类型,且输出数据为对输入数据执行取反操作的多个节点时,则将所述多个节点转换为一个取反操作节点。
在另一实施例中,所述处理模块602,还用于:
对所述取反操作节点执行降级处理,得到与所述目标平台对应的平台取反操作节点。
从与所述目标平台对应的预设指令集中确定所述平台取反操作节点对应的第一指令;其中,所述第一指令用于将所述待执行取反操作的浮点数对应符号位所在的比特位取反。
从与所述目标平台对应的预设指令集中确定所述有向无环图中除所述取反操作节点之外的其他节点对应的第二指令;其中,所述第二指令用于实现所述待处理业务中除对浮点数执行取反操作的其他操作。
对所述第一指令以及所述第二指令进行处理,得到实现所述待处理业务对应的可执行程序。
进一步的,所述处理模块602,还用于:
在指令选择阶段,获取与所述目标平台对应的平台节点。
根据所述平台节点与所述取反操作节点得到所述目标平台对应的平台取反操作节点。
在另一实施例中,所述处理模块602,还用于:
对所述源程序代码进行分析处理,得到所述源程序代码对应的中间代码。根据预设的优化规则对所述中间代码进行筛选,得到与所述优化规则对应的中间代码。
根据预设规则对与所述优化规则对应的中间代码进行拟合,得到与所述目标平台对应的有向无环图。
本申请实施例提供的装置,可以实现上述如图2所示的实施例的方法,其实现原理和技术效果类似,此处不再赘述。
图7为本申请实施例提供的电子设备的硬件结构示意图,如图7所示,本实施例提供的设备700包括:处理器701,以及与所述处理器通信连接的存储器。其中,处理器701、存储器702通过总线703连接。
在具体实现过程中,处理器701执行所述存储器702存储的计算机执行指令,使得处理器701执行上述方法实施例中的方法。
处理器701的具体实现过程可参见上述方法实施例,其实现原理和技术效果类似,本实施例此处不再赘述。
在上述的图7所示的实施例中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component Interconnect,PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述方法实施例的节点融合处理方法。
本申请实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时,实现如上所述的节点融合处理方法。
上述的计算机可读存储介质,上述可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。可读存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(Application Specific IntegratedCircuits,简称:ASIC)中。当然,处理器和可读存储介质也可以作为分立组件存在于设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (10)
1.一种节点融合处理方法,其特征在于,包括:
获取源程序代码;其中,所述源程序代码为待应用于目标平台的待处理业务对应的高级语言代码;
对所述源程序代码进行预处理操作,得到所述目标平台对应的中间代码,根据预设规则对所述中间代码进行拟合,得到与所述目标平台对应的有向无环图;其中,所述有向无环图中包含至少一节点,每个节点表示实现所述待处理业务中的一个操作;
判断所述有向无环图中各节点分别对应的操作类型,若所述有向无环图中包含表示取反操作的多个节点时,则将所述表示取反操作的多个节点转换为一个取反操作节点;
根据所述取反操作节点以及所述有向无环图中除所述取反操作节点之外的其他节点各自对应的目标指令,得到所述待处理业务对应的可执行程序。
2.根据权利要求1所述的方法,其特征在于,所述若所述有向无环图中包含表示取反操作的多个节点时,则将所述表示取反操作的多个节点转换为一个取反操作节点,包括:
在有向无环图合并阶段,若所述有向无环图中包含表示对浮点类型的数据执行取反操作的多个节点时,则将所述表示对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点,
其中,所述表示对浮点类型的数据执行取反操作的多个节点中包含的操作数为全零数据和待执行取反操作的浮点数,所述取反操作节点的操作数为所述待执行取反操作的浮点数。
3.根据权利要求2所述的方法,其特征在于,所述将所述表示对浮点类型的数据执行取反操作的多个节点转换为一个取反操作节点,包括:
在有向无环图合并阶段,对所述有向无环图中的节点进行遍历操作;
若所述有向无环图中包含数据类型转换为浮点类型,且输出数据为对输入数据执行取反操作的多个节点时,则将所述多个节点转换为一个取反操作节点。
4.根据权利要求1所述的方法,其特征在于,所述根据所述取反操作节点以及所述有向无环图中除所述取反操作节点之外的其他节点各自对应的目标指令,得到所述待处理业务对应的可执行程序,包括:
对所述取反操作节点执行降级处理,得到与所述目标平台对应的平台取反操作节点;
从与所述目标平台对应的预设指令集中确定所述平台取反操作节点对应的第一指令;其中,所述第一指令用于将待执行取反操作的浮点数对应符号位所在的比特位取反;
从与所述目标平台对应的预设指令集中确定所述有向无环图中除所述取反操作节点之外的其他节点对应的第二指令;其中,所述第二指令用于实现所述待处理业务中除对浮点数执行取反操作的其他操作;
对所述第一指令以及所述第二指令进行处理,得到实现所述待处理业务对应的可执行程序。
5.根据权利要求4所述的方法,其特征在于,所述对所述取反操作节点执行降级处理,得到与所述目标平台对应的平台取反操作节点,包括:
在指令选择阶段,获取与所述目标平台对应的平台节点;
根据所述平台节点与所述取反操作节点得到所述目标平台对应的平台取反操作节点。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述对所述源程序代码进行预处理操作,得到所述目标平台对应的中间代码,根据预设规则对所述中间代码进行拟合,得到与所述目标平台对应的有向无环图,包括:
对所述源程序代码进行分析处理,得到所述源程序代码对应的中间代码;
根据预设的优化规则对所述中间代码进行筛选,得到与所述优化规则对应的中间代码;
根据预设规则对与所述优化规则对应的中间代码进行拟合,得到与所述目标平台对应的有向无环图。
7.一种节点融合处理装置,其特征在于,包括:
获取模块,用于获取源程序代码;其中,所述源程序代码为待应用于目标平台的待处理业务对应的高级语言代码;
处理模块,用于对所述源程序代码进行预处理操作,得到所述目标平台对应的中间代码;根据预设规则对所述中间代码进行拟合,得到与所述目标平台对应的有向无环图;其中,所述有向无环图中包含至少一节点,每个节点表示实现所述待处理业务中的一个操作;
所述处理模块,还用于判断所述有向无环图中各节点分别对应的操作类型,若所述有向无环图中包含表示取反操作的多个节点时,则将所述表示取反操作的多个节点转换为一个取反操作节点;
所述处理模块,还用于根据所述取反操作节点以及所述有向无环图中除所述取反操作节点之外的其他节点各自对应的目标指令,得到所述待处理业务对应的可执行程序。
8.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1-6中任一项所述的节点融合处理方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1-6中任一项所述的节点融合处理方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-6中任一项所述的节点融合处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211733741.1A CN115934103A (zh) | 2022-12-30 | 2022-12-30 | 节点融合处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211733741.1A CN115934103A (zh) | 2022-12-30 | 2022-12-30 | 节点融合处理方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115934103A true CN115934103A (zh) | 2023-04-07 |
Family
ID=86550600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211733741.1A Pending CN115934103A (zh) | 2022-12-30 | 2022-12-30 | 节点融合处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115934103A (zh) |
-
2022
- 2022-12-30 CN CN202211733741.1A patent/CN115934103A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20180373509A1 (en) | Loop execution with predicate computing for dataflow machines | |
US7493610B1 (en) | Versioning optimization for dynamically-typed languages | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
US20160321039A1 (en) | Technology mapping onto code fragments | |
JP4157016B2 (ja) | コンパイラ装置及びコンパイル方法 | |
JP2001166949A (ja) | シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 | |
KR950006608B1 (ko) | 다중 언어 최적화 컴파일러내의 상수 폴딩 메카니즘을 구성하는 방법 | |
JP4026940B2 (ja) | プログラム変換装置 | |
Pandey et al. | LLVM cookbook | |
CN115328493A (zh) | 用于带掩码的向量指令的编译方法、电子设备和介质 | |
US7694283B2 (en) | Method and apparatus for generating specification data | |
Tanaka et al. | Safe low-level code generation in Coq using monomorphization and monadification | |
Hofmann et al. | I/O guided detection of list catamorphisms: towards problem specific use of program templates in ip | |
JP6481515B2 (ja) | 情報処理装置、コンパイル方法、及びコンパイラプログラム | |
US20230116546A1 (en) | Method for compilation, electronic device and storage medium | |
CN115934103A (zh) | 节点融合处理方法、装置及电子设备 | |
CN114237619A (zh) | 节点融合处理方法、装置及电子设备 | |
Jana | C++ and object-oriented programming paradigm | |
WO2021005130A1 (en) | A streaming compiler for automatic adjoint differentiation | |
Danilewski et al. | Specialization through dynamic staging | |
Mailund | Domain-Specific Languages in R: Advanced Statistical Programming | |
US11954467B2 (en) | Convolutional neural network compiler for programmable functional array (PFA) processors | |
JP2004013190A (ja) | ソフトウエア開発環境、シミュレータ及び記録媒体 | |
WO2022233246A1 (en) | Methods, devices, and media for two-pass source code transformation | |
Pit-Claudel | Relational compilation: Functional-to-imperative code generation for performance-critical applications |
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 |