CN114610288B - 基于阵列式解析基元结构的后端编译器实现方法及装置 - Google Patents
基于阵列式解析基元结构的后端编译器实现方法及装置 Download PDFInfo
- Publication number
- CN114610288B CN114610288B CN202210511925.7A CN202210511925A CN114610288B CN 114610288 B CN114610288 B CN 114610288B CN 202210511925 A CN202210511925 A CN 202210511925A CN 114610288 B CN114610288 B CN 114610288B
- Authority
- CN
- China
- Prior art keywords
- analysis
- hardware
- primitive
- array
- logic
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Abstract
本发明公开了基于阵列式解析基元结构的后端编译器实现方法及装置,基于阵列式解析基元结构的可编程目标硬件,可完成对软件定义的协议解析逻辑进行编译的需求。通过对软件描述的协议解析处理逻辑进行翻译和解释,生成目标硬件中矩阵式可编程解析资源能识别的解析操作指令,操作指令以解析基元参数阵列的形式与目标硬件中可配置的解析基元阵列形成映射关系,通过解析基元参数阵列控制器,将解析基元参数阵列中的有效解析基元参数配置到硬件上对应的可编程解析基元中,完成对目标硬件可编程解析基元资源的编程,从而完成通过软件编程硬件来实现协议无关数据解析的目标。
Description
技术领域
本发明涉及协议无关可编程解析、编译器、智能网卡技术领域,尤其是涉及一种基于阵列式解析基元结构的后端编译器实现方法及装置。
背景技术
P4作为一种数据包处理的高级编程语言,实现了协议无关、目标设备无关的编程需求,但是这种无关性仅限于其提供配套的中间表示(IR,IntermediateRepresentation),如果用户想要设计一个协议无关的硬件可编程解析器并且通过软件进行编程,就需要设计一个后端编译器,用于配置自己的可编程硬件,关于后端编译器的实现方法,目前业界还没有一个统一的标准,并且编译器与目标硬件之间的能力适配过程繁琐,此外,解析器硬件的规格众多,编译器对不同规格的解析器进行适配灵活性、可操作性还有待提高。
发明内容
为解决现有技术的不足,实现简化编译器与目标硬件之间能力适配过程,提高编译器适配不同解析器的灵活性和可操作性的目的,本发明采用如下的技术方案:
一种基于阵列式解析基元结构的后端编译器实现方法,包括如下步骤:
步骤S1:目标硬件解析器编程能力定义过程,将目标硬件中执行一个节点解析操作的可编程解析资源,作为一个可编程解析基元,编译器将目标硬件作为由多个可编程解析基元组成的基元阵列,基元阵列中的每一个元素为一个可独立编程的硬件解析基元,定义编译器目标硬件解析基元规格和硬件解析基元阵列规模;
步骤S2:目标硬件基元参数阵列生成过程,将软件解析逻辑转换为硬件可识别的解析基元参数阵列,也即是将软件解析逻辑转化为配置硬件解析基元的配置参数;所生成的基元参数阵列的个数与软件所定义的并列的解析逻辑块的个数相关,将一个解析逻辑块作为一个完整的解析状态节点;
步骤S3:目标硬件基元阵列参数控制过程,完成目标硬件配置比特流的生成,根据解析基元参数阵列和解析参数列表,以阵列的列编号为硬件解析基元的配置基地址,按照步骤S1中定义的基元参数规格,即启动与级联OLD信息和工作OL信息的参数格式,为阵列中每个元素生成其对应的配置信息。
进一步地,所述步骤S1包括如下步骤:
步骤S1-1:目标硬件解析基元能力定义子过程;将解析基元的编程参数定义为基元参数,基元参数包括启动与级联OLD信息和工作OL信息,启动与级联OLD信息是硬件解析基元的启动参数和级联参数,工作OL信息是解析基元的工作参数,工作参数的数量决定硬件解析基元可编程能力,对解析基元可编程能力的定义过程,是对一组基元参数规格的定义过程;
步骤S1-2:目标硬件解析基元阵列定义子过程;是对目标硬件可编程能力进行综合描述的过程,描述硬件基元阵列的行列规模;行数表示硬件最大可并行处理的能力,列数表示硬件可支持的解析分支的最大长度,行数与列数的乘积表示硬件的综合能力,用于描述目标硬件具备的可编程逻辑资源的多少;基元阵列的规模直接反应了目标硬件的硬件能力,将硬件的可编程能力等效为硬件基元阵列的行列参数,描述方法简单直观,而且易于表达,便于编译器与目标硬件之间进行参数匹配。
步骤S1-3:目标硬件基元参数阵列定义子过程;对目标硬件中解析基元阵列进行划分,将硬件中可编程解析基元映射为一个或多个二维基元矩阵,整个目标硬件被定义为一个或多个并列的可编程的解析基元矩阵,矩阵中的每个元素均是一个可编程的解析基元,矩阵行元素的个数用于决定硬件所能支持的软件解析逻辑状态跳转的最大次数,对应软件逻辑解析的可编程深度;矩阵列元素的元素个数用于决定硬件所能支持的软件解析逻辑的最大解析逻辑分支数,对应软件解析逻辑的逻辑分支复杂度;矩阵的个数用于决定目标硬件所能支持的解析逻辑的最大并行度,个数越多对应硬件能够解析数据带宽越大。
进一步地,所述S1-1中,基元参数规格的定义过程,包括启动与级联OLD信息的解析子参数、长度子参数和信息提取子参数的数值范围,工作参数个数以及工作OL信息的解析子参数和长度子参数的数值范围,解析子参数和长度子参数的数值范围为一个解析节点数据解析范围和解析内容的长度,用于间接决定了一个解析基元的解析能力大小,信息提取子参数的数值范围表示解析器提取信息的范围。
进一步地,所述步骤S1-2中,基元阵列的行元素的数目用于决定硬件解析器的可编程度,行中元素的个数越多,硬件可支持的可编程度越大,对应支持的软件解析逻辑的状态分支越长,能够实现的解析逻辑复杂度越高;基元阵列的列元素数目用于决定硬件解析器的解析并行度和解析状态并行度,列中元素的个数越多,硬件能够支持的解析并行度越大,和/或能够并行解析的状态节点越多,对应硬件能够处理的解析数据流的带宽大小,和/或支持的软件能够描述的解析状态分支越多。
进一步地,所述步骤S2中,生成的基元参数阵列为二维矩阵,矩阵行元素的个数与步骤S1-2中定义的矩阵的行元素个数一致,配置参数一一对应;矩阵列元素的个数与步骤S1-2中矩阵的列元素个数一致,配置参数一一对应;包括如下步骤:
步骤S2-1:软件解析逻辑块搜索子过程;对软件所定义解析逻辑块数目进行搜索,解析逻辑块是软件所描述的并行存在解析逻辑块的个数,每个解析逻辑块对应一个软件所定义的解析状态节点;通常情况下,只存在一个软件逻辑块,对于比较复杂的软件解析逻辑,也可以存在多个解析状态机。由于基元参数阵列的生成是以逻辑块为单位进行的,所以逻辑块的个数也影响了步骤S2-4中的合并次数。
步骤S2-2:解析状态节点搜索子过程;对软件解析逻辑定义的解析状态节点进行提取和编号;
步骤S2-3:状态阵列生成子过程;包括生成解析状态分支矢量、构成矢量阵列和简化处理。
步骤S2-4:状态阵列合并子过程;步骤S2-1中决定了步骤S2-3中生成的状态阵列的个数,将多个状态阵列进行合并处理,以矩阵的列为单位,合并重复的状态节点。
进一步地,所述步骤S2-2中,首先提取解析逻辑块中所有不重复的解析状态节点进行逻辑编号,作为逻辑解析节点号;然后针对每个逻辑解析节点号,按照步骤S1-1中的定义,提取并生成解析基元参数,将解析基元参数以逻辑节点号为索引,保存为一个解析参数列表,该列表中包含了软件逻辑所定义的所有解析节点的解析参数。
进一步地,所述步骤S2-3中,根据步骤S2-1中生成的解析逻辑块的数目,重复执行如下步骤:
步骤S2-3-1:生成逻辑块解析状态矢量;遍历解析逻辑块中的逻辑分支,将每一个逻辑分支均表示由一组解析逻辑节点号组成的解析状态矢量;解析状态矢量中包含了对应解析状态分支中出现的所有解析状态节点,每个解析状态节点均用逻辑解析节点编号表示;为每个解析状态分支都生成一个解析状态矢量;
步骤S2-3-2:生成解析状态矢量阵列;将步骤S2-3-1中生成的所有解析状态矢量的进行对齐,将小的状态矢量通过填充无效状态的方式,对齐到最大的解析状态矢量,使得所有解析状态矢量的长度全部一致;然后用对齐后的所有解析状态矢量构成一个解析状态矩阵,最后以矩阵的列为单位,将每列中节点号相同的元素进行合并,合并后每列的长度可能大小不一,通过补零的方式将所有列的长度保持一致,最终将所有列重新组成一个新矩阵,即解析状态矢量矩阵,矩阵中的每个元素都对应一个逻辑解析节点号。
进一步地,所述步骤S2-4中,合并前先将每个解析状态矩阵通过扩展的方式,扩展为一样大小的矩阵,然后以列为单位,将不同矩阵的对应列中的逻辑解析节点号进行合并,不同的逻辑解析节点号全部保留,相同的节点号仅保留一个,最终生成一个解析状态矩阵,也即是解析基元参数矩阵,该矩阵与解析参数列表一起,构成了完整的配置参数。
进一步地,步骤S3负责根据解析状态矩阵和解析参数列表,生成一个最终的解析基元参数阵列,并将阵列中的所有参数以列为单位,按照硬件所定义的解析基元参数格式,合并为一个最终的配置比特流,将配置比特流配置到目标硬件中即完成了对解析器的编程操作。具体操作流程为:以解析基元参数阵列的列编号为基地址,以列中元素的行号为偏移量,以阵列中元素的值为解析参数列表的索引,针对阵列中的每个元素生成一个带有地址信息的启动与级联OLD信息+工作OL信息的配置信息表,将所有元素的配置信息表汇聚到一起构成了目标硬件的配置比特流,所述步骤S3包括如下步骤:
步骤S3-1:基元配置参数地址控制子过程;根据解析基元参数阵列信息生成配置解析基元的配置地址,以参数阵列的列为单位,同一列中不同的解析基元参数对应同一个基地址的不同偏移地址;
步骤S3-2:基元配置参数内容控制子过程;根据列中每个元素对应的解析节点逻辑号从解析参数列表中找出对应的具体参数内容,生成配置数据;
步骤S3-3:基元配置比特流控制子过程;将参数地址和参数内容组成一条配置指令,并将阵列中所有参数对应的配置指令转换为一个配置比特流。
一种基于阵列式解析基元结构的后端编译器实现装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现所述的一种基于阵列式解析基元结构的后端编译器实现方法。
本发明的优势和有益效果在于:
本发明编译器生成的阵列式解析基元参数,与目标硬件中的阵列式解析基元可编程资源形成对应关系,支持以配置参数矩阵行列参数的方式,适配不同规格的可编程解析器目标硬件,实现方式非常灵活,扩展性很好;以硬件解析基元阵列的行列参数以及解析基元参数确定编译器的目标硬件的可编程能力,表达方式简单、高效、直观;以软件解析逻辑翻译并解释为解析基元参数阵列的表达形式,实现方法思路清晰,操作方便,实现简单。
附图说明
图1是本发明实施例中方法的流程图。
图2是本发明实施例的方法中定义目标硬件编程能力的流程图。
图3是本发明实施例的方法中生成目标硬件基元参数阵列的流程图。
图4a是本发明实施例的方法中抽象后的软件解析逻辑块1的解析状态流程图。
图4b是本发明实施例的方法中抽象后的软件解析逻辑块2的解析状态流程图。
图5是本发明实施例的方法中控制目标硬件基元参数阵列流程图。
图6是本发明实施例中装置的结构图。
具体实施方式
以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
本发明的实现思路是将软件所定义的协议解析处理逻辑先抽象成一个或多个并列的解析逻辑块,然后对解析逻辑块中的解析状态节点做归一化的等效处理,将单个解析状态节点的处理过程等效成一个硬件可执行的解析操作指令,等效为硬件解析基元的编程参数,即解析基元参数,解析基元参数是一个硬件可执行的最小操作参数。软件解析逻辑的编译过程就解释为生成目标硬件配置参数的过程,将软件解析逻辑的编译结果解释为一个指定格式的目标硬件可识别的解析基元参数阵列,并通过解析基元参数阵列控制器生成可编程解析目标硬件所需要的编程配置比特流,配置到目标硬件中,完成对目标硬件的编程过程。
本编译器的实现机制,将基于软件的协议解析逻辑进行解释,提取软件解析逻辑中的操作参数,以目标硬件中一个最小的可编程资源单元为节点对象,将软件的解析逻辑抽象并解释成由一个个解析节点参数组成的参数阵列,参数阵列的行元素个数与目标硬件中解析基元阵列的行元素个数一致,参数阵列的列元素个数小于等于目标硬件中解析基元阵列的列元素个数。
如图1所示,本发明的基于阵列式解析基元结构的后端编译器实现方法及装置,将软件可编程解析逻辑编译成目标硬件解析器所识别的配置逻辑的需求,以目标硬件的可编程解析基元为最小配置单元,将IR中表示的软件解析逻辑解释为一个参数阵列,阵列中的每个元素均对应一个确定的状态节点解析参数,将软件的解析逻辑翻译成一个由解析基元参数构成的参数阵列,与硬件解析器阵列式解析基元的架构形成映射关系,通过硬件解析基元规格以及硬件基元阵列的规模,即可全方面描述目标硬件的解析能力,将编译器与目标硬件之间繁琐的能力适配过程简化为一种通用、简洁、高效的参数阵列表达方式,使得编译器可轻松适配不同规格的解析器硬件,具有很大的灵活性和可操作性的优势,具体包括如下步骤:
步骤S1:目标硬件解析器编程能力定义过程,主要完成编译器目标硬件的解析基元规格定义和硬件解析基元阵列规模定义,如图2所示,包括如下步骤:
步骤S1-1:目标硬件解析基元能力定义子过程;针对目标硬件中一个可编程解析基本单元的能力定义过程。将目标硬件中执行一个节点解析操作的可编程解析资源抽象为一个解析基元,编译器把目标硬件看作是由很多可编程解析基元组成的基元阵列,阵列中的每一个元素都是一个可独立编程的硬件解析基元。这里将解析基元的编程参数定义为基元参数,基元参数由启动与级联OLD和工作OL两类信息组成。启动与级联OLD信息是硬件解析基元的启动参数和级联参数,工作OL信息是解析基元的工作参数。基元参数中工作参数数目的多少直接决定了一个硬件解析基元可编程能力的大小,对解析基元可编程能力的定义过程就是对一组基元参数规格的定义过程。具体包括启动与级联OLD信息中解析、长度和信息提取三个子参数的数值范围,工作参数个数以及工作OL信息内解析和长度两个子参数的数值范围等。解析和长度子参数的数值范围间接决定了一个解析基元的解析能力大小,具体体现为一个解析节点数据解析范围和解析内容的长度。
步骤S1-2:目标硬件解析基元阵列定义子过程;对目标硬件可编程能力综合描述的过程,描述了硬件基元阵列的行列规模。基元阵列的行元素的数目决定了硬件解析器的可编程度,行中元素的个数越多,硬件可支持的可编程度就越大,对应支持的软件解析逻辑的状态分支就越长,可实现的解析逻辑复杂度就越高;基元阵列的列元素数目决定了硬件解析器的解析并行度和解析状态并行度,列中元素的个数越多,硬件可支持的解析并行度就越大或可并行解析的状态节点就越多,对应了硬件可处理的解析数据流的带宽大小或支持的软件可描述的解析状态分支就越多。基元阵列的规模直接反应了目标硬件的硬件能力,将硬件的可编程能力等效为硬件基元阵列的行列参数,描述方法简单直观,而且易于表达,便于编译器与目标硬件之间进行参数匹配,是本实现方法的一个核心亮点。行数代表了硬件最大可并行处理的能力,列数代表了硬件可支持的解析分支的最大长度,行数与列数的乘积则代表了硬件的一个综合能力,可用于描述目标硬件具备的可编程逻辑资源的多少。
步骤S1-3:目标硬件基元参数阵列定义子过程;主要完成对目标硬件中解析基元阵列的划分,将硬件中所有可编程解析基元映射为一个或多个二维基元矩阵,整个目标硬件被定义为一个或多个并列的可编程的解析基元矩阵,矩阵中的每个元素均是一个可编程的解析基元,矩阵行元素的个数决定了硬件所能支持的软件解析逻辑状态跳转的最大次数,对应软件逻辑解析的可编程深度;矩阵列元素的元素个数决定了硬件所能支持的软件解析逻辑的最大解析逻辑分支数,对应软件解析逻辑的逻辑分支复杂度。矩阵的个数决定了目标硬件所能支持的解析逻辑的最大并行度,个数越多对应硬件可的解析数据带宽就越大。
本发明的实施例中,首先确定目标硬件的解析基元和基元阵列的相关能力,并在编译器中进行相关参数的定义,定义的目的是使得编译器的编译参数与目标硬件的解析能力保持一致。这里假定目标硬件所支持的解析基元矩阵的行列参数分别为15和5,解析基元的参数规格为OLDp1+OLDp2+OLp1+OLp2+OLp3;这里15表示矩阵的行数,5表示矩阵的列数,15和5表示了某个具体硬件的整体可编程能力,对编译器来说,不同硬件能力的目标设备的行列参数也可能是其他值,不过没有任何影响,在编译之前都会先确定硬件能力所对应的行列参数。解析基元参数的规格代表了一个硬件解析基元的可编程能力,这里假定的解析基元参数中包含3个工作参数,即一个解析节点最多可提取3个解析参数,当然,其他目标硬件的解析基元参数也可以是其他值,这里仅是举例说明。
步骤S2:目标硬件基元参数阵列生成过程,主要完成将软件解析逻辑转换为硬件可识别的解析基元参数阵列的过程,也即是将软件解析逻辑转化为配置硬件解析基元的配置参数的过程。所生成的基元参数阵列的个数与软件所定义的并列的解析逻辑块的个数相关,这里一个解析逻辑块也可以认为是一个完整的解析状态机。步骤S2所生成的基元参数阵列的也是一个二维矩阵,矩阵行元素的个数与步骤S1-2中定义的矩阵的行元素个数一致,配置参数一一对应。参数矩阵列元素的个数与步骤S1-2中矩阵的列元素个数一致,配置参数一一对应,如图3所示,具体包括如下步骤:
步骤S2-1:软件解析逻辑块搜索子过程;主要完成对软件所定义解析逻辑块数目的搜索,这里的解析逻辑块认为是软件所描述的并行存在解析逻辑块的个数,每个解析逻辑块对应一个软件所定义的解析状态机。通常情况下,只存在一个软件逻辑块,对于比较复杂的软件解析逻辑,也可以存在多个解析状态机。由于基元参数阵列的生成是以逻辑块为单位进行的,所以逻辑块的个数也影响了步骤S2-4中的合并次数。
本发明的实施例中,假定软件逻辑定义了两个并列的解析逻辑块,抽象之后的逻辑块的解析状态流程图,如图4a、图4b所示:两个解析逻辑块的状态跳转也是随机假定的。这里有一个前提:解析逻辑块中最大的解析状态分支里包含的解析状态节点数不能超过5,因为步骤一中假定的硬件能力为5。不能超过对应目标硬件解析基元阵列的列数。
步骤S2-2:解析状态节点搜索子过程;主要完成对软件解析逻辑定义的解析状态节点的提取和编号。首先提取解析逻辑块中所有不重复的解析状态节点进行逻辑编号,这里称为逻辑解析节点号。然后针对每个逻辑解析节点号,按照S1-1中定义的格式,提取并生成解析基元参数,将解析基元参数以逻辑节点号为索引,保存为一个解析参数列表,该列表中包含了软件逻辑所定义的所有解析节点的解析参数。
本发明的实施例中,将软件解析逻辑块中所有状态节点进行统一编号,如图4a、图4b所示,两个解析逻辑块中总共有15个不同的解析状态节点。这里为了方便描述,在逻辑图中已经对解析节点进行了编号。编号不具有实际意义,仅用于区分不同的解析状态节点。然后根据软件所定义的解析节点的处理逻辑,为每个节点生成一组启动与级联OLD和工作OL信息。由于启动与级联OLD信息和工作OL信息的规格与目标硬件的设计细节和支持的能力密切相关,而且对编译器来说仅代表一组特定格式的参数而已,没有其他特别的含义,这里不再详细举例,这里认为逻辑块每个节点里都已经提取出了一组可通过启动与级联OLD信息+工作OL信息表示的参数,记为OLD_OL参数,为了描述方便,OLD_OL1表示节点1的基元参数,OLD_OL2表示节点2的基元参数…
步骤S2-3:状态阵列生成子过程;主要实现解析状态分支矢量生成、矢量阵列构成和简化等处理过程。以下过程将会被重复执行多次,取决于S2-1中生成的解析逻辑块的数目。针对一个逻辑块的执行如下两个步骤:
步骤S2-3-1:生成逻辑块解析状态矢量。遍历解析逻辑块中的逻辑分支,将每一个逻辑分支均表示由一组解析逻辑节点号组成的解析状态矢量。解析状态矢量中包含了对应解析状态分支中出现的所有解析状态节点,每个解析状态节点均用逻辑解析节点编号表示。为每个解析状态分支都生成一个解析状态矢量。
步骤S2-3-2:生成解析状态矢量阵列。将步骤S2-3-1中生成的所有解析状态矢量的进行对齐,把小的状态矢量通过填充无效状态的方式,对齐到最大的解析状态矢量,使得所有解析状态矢量的长度全部一致。然后用对齐后的所有解析状态矢量构成一个解析状态矩阵,最后以矩阵的列为单位,将每列中节点号相同的元素进行合并,合并后的每个的长度可能大小不一,还是通过补零的方式将所有列的长达也保持一致,最终将所有列重新组成一个新矩阵,即解析状态矢量矩阵,矩阵中的每个元素都对应一个逻辑解析节点号。
本发明的实施例中,找出逻辑块中定义的所有解析状态分支。以软件解析逻辑块1中描述的流程为例,在状态图中,按照从上到下,从左到右的顺序,提取出的解析状态分支如下:
解析状态分支1:节点1-> 节点4-> 节点8-> 节点9-> 节点10
解析状态分支2:节点1-> 节点4-> 节点5-> 节点9-> 节点10
解析状态分支3:节点1-> 节点5-> 节点9->节点10
解析状态分支4:节点1-> 节点2-> 节点6-> 节点10
解析状态分支5:节点2-> 节点6-> 节点10
解析状态分支6:节点3-> 节点2-> 节点6->节点10
解析状态分支7:节点3-> 节点7-> 节点6->节点10
解析状态分支8:节点3-> 节点7-> 节点10
然后将每个解析状态分支都用其解析节点对应的逻辑编号表示,生成的解析状态矢量如下:
解析状态矢量1:[1 4 8 9 10]
解析状态矢量2:[1 4 5 9 10]
解析状态矢量3:[1 5 9 10]
解析状态矢量4:[1 2 6 10]
解析状态矢量5:[2 6 10]
解析状态矢量6:[3 2 6 10]
解析状态矢量7:[3 7 6 10]
解析状态矢量8:[3 7 10]
将解析状态矢量通过填充0元素的方式进行对齐,使得每个解析状态矢量的长度一样。填充和对齐后的状态矢量如下:
状态矢量1:[1 4 8 9 10]
状态矢量2:[1 4 5 9 10]
状态矢量3:[1 5 9 10 0]
状态矢量4:[1 2 6 10 0]
状态矢量5:[2 6 10 0 0]
状态矢量6:[3 2 6 10 0]
状态矢量7:[3 7 6 10 0]
状态矢量8:[3 7 10 0 0]
则将所有的状态矢量构成一个状态矢量阵列S1,如下述公式:
以S1矩阵的列为单位,合并节点状态,同一列中相同的节点号仅保留一个,合并后的节点状态互不重复,矩阵列中以合并后的最大节点数为新矩阵的行数,生成的新矩阵如下:
同理,将状态机2按照同样的方式生成的矩阵如下:
步骤S2-4:状态阵列合并子过程;步骤S2-1中决定了步骤S2-3中生成的状态阵列的个数,这里的主要处理是多个状态阵列进行合并处理,同样是以矩阵的列为单位,合并重复的状态节点。合并前先将每个解析状态矩阵通过扩展的方式,扩展为一样大小的矩阵,然后以列为单位,将不同矩阵的对应列中的逻辑解析节点号进行合并,不同的逻辑解析节点号全部保留,相同的节点号仅保留一个,最终生成一个解析状态矩阵,也即是解析基元参数矩阵,该矩阵与解析参数列表一起,构成了完整的配置参数。
本发明的实施例中,合并状态矢量阵列。将C1与C2合并,以列为单位,将两个矩阵中的元素合并到一起,同样只保留互不重复的元素,得到的最终的状态矩阵C如下:
矩阵中元素的值对应的是软件逻辑解析状态节点的逻辑编号,每个标号还会对应一组启动与级联OLD信息+工作OL信息的参数。矩阵行元素的个数代表了解析逻辑的一个解析状态分支中的最大节点数,列元素的个数代表了解析逻辑中最大并行出现的解析状态数。
步骤S3:目标硬件基元阵列参数控制过程,完成了目标硬件配置比特流的生成。根据步骤S2中生成的解析基元参数阵列和解析参数列表,以阵列的列编号为硬件解析基元的配置基地址,按照步骤S1中定义的启动与级联OLD信息和工作OL信息的参数格式,为阵列中每个元素生成其对应的配置信息。步骤S3负责根据解析状态矩阵和解析参数列表,生成一个最终的解析基元参数阵列,并将阵列中的所有参数以列为单位,按照硬件所定义的解析基元参数格式,合并为一个最终的配置比特流,将配置比特流配置到目标硬件中即完成了对解析器的编程操作。具体操作流程为:以解析基元参数阵列的列编号为基地址,以列中元素的行号为偏移量,以阵列中元素的值为解析参数列表的索引,针对阵列中的每个元素生成一个带有地址信息的启动与级联OLD信息+工作OL信息的配置信息表,将所有元素的配置信息表汇聚到一起构成了目标硬件的配置比特流。如图5所示,具体包括如下步骤:
步骤S3-1:基元配置参数地址控制子过程;负责根据解析基元参数阵列信息生成配置解析基元的配置地址。以参数阵列的列为单位,同一列中不同的解析基元参数对应同一个基地址的不同偏移地址上。
步骤S3-2:基元配置参数内容控制子过程;负责根据列中每个元素对应的解析节点逻辑号从解析参数列表中找出对应的具体参数内容,生成配置数据。
步骤S3-3:基元配置比特流控制子过程;负责将参数地址和参数内容组成一条配置指令,并将阵列中所有参数对应的配置指令转换为一个配置比特流。
本发明的实施例中,以矩阵C的列编号为基地址,以行编号为偏移量,以元素本身为解析参数列表的索引,则生成的解析配置指令信息如下:
BaseAddress1:OLD_OL1;
BaseAddress1+1:OLD_OL2;
BaseAddress1+2:OLD_OL3;
BaseAddress2:OLD_OL2;
BaseAddress2+1:OLD_OL4;
BaseAddress2+2:OLD_OL5;
BaseAddress2+3:OLD_OL6;
…
BaseAddress5:OLD_OL6;
BaseAddress5+1:OLD_OL10;
配置指令的地址信息指定了配置信息对应的硬件解析基元的位置,生成解析基元配置指令时只针对矩阵中的非零元素,即有效元素。所有的解析配置指令一起构成了最终的配置比特流信息。
与前述基于阵列式解析基元结构的后端编译器实现方法的实施例相对应,本发明还提供了基于阵列式解析基元结构的后端编译器实现装置的实施例。
参见图6,本发明实施例提供的基于阵列式解析基元结构的后端编译器实现装置,包括存储器和一个或多个处理器,存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现上述实施例中的基于阵列式解析基元结构的后端编译器实现方法。
本发明基于阵列式解析基元结构的后端编译器实现装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图6所示,为本发明基于阵列式解析基元结构的后端编译器实现装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的基于阵列式解析基元结构的后端编译器实现方法。
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、SD卡、闪存卡(Flash Card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的范围。
Claims (8)
1.一种基于阵列式解析基元结构的后端编译器实现方法,其特征在于包括如下步骤:
步骤S1:目标硬件解析器编程能力定义过程,将目标硬件中执行一个节点解析操作的可编程解析资源,作为一个可编程解析基元,编译器将目标硬件作为由多个可编程解析基元组成的基元阵列,基元阵列中的每一个元素为一个可独立编程的硬件解析基元,定义编译器目标硬件解析基元规格和硬件解析基元阵列规模;目标硬件解析基元阵列的行数表示硬件最大可并行处理的能力,列数表示硬件可支持的解析分支的最大长度,行数与列数的乘积表示硬件的综合能力,用于描述目标硬件具备的可编程逻辑资源的多少;
步骤S2:目标硬件基元参数阵列生成过程,将软件解析逻辑转化为配置硬件解析基元的配置参数;所生成的基元参数阵列的个数与软件所定义的并列的解析逻辑块的个数相关;生成的基元参数阵列为二维矩阵,矩阵行元素的个数与步骤S1中定义的目标硬件解析基元阵列的行元素个数一致,配置参数一一对应;矩阵列元素的个数与步骤S1中目标硬件解析基元阵列的列元素个数一致,配置参数一一对应;包括如下步骤:
步骤S2-1:软件解析逻辑块搜索子过程;对软件所定义解析逻辑块数目进行搜索,解析逻辑块是软件所描述的并行存在解析逻辑块的个数,每个解析逻辑块对应一个软件所定义的解析状态节点;
步骤S2-2:解析状态节点搜索子过程;对软件解析逻辑定义的解析状态节点进行提取和编号;
步骤S2-3:状态阵列生成子过程;根据步骤S2-1中生成的解析逻辑块的数目,重复执行如下步骤:
步骤S2-3-1:生成逻辑块解析状态矢量;遍历解析逻辑块中的逻辑分支,将每一个逻辑分支均表示由一组解析逻辑节点号组成的解析状态矢量;解析状态矢量中包含了对应解析状态分支中出现的所有解析状态节点,每个解析状态节点均用逻辑解析节点编号表示;为每个解析状态分支都生成一个解析状态矢量;
步骤S2-3-2:生成解析状态矢量阵列;将步骤S2-3-1中生成的所有解析状态矢量的进行对齐,将小的状态矢量通过填充无效状态的方式,对齐到最大的解析状态矢量,使得所有解析状态矢量的长度全部一致;然后用对齐后的所有解析状态矢量构成一个解析状态矩阵,最后以矩阵的列为单位,将每列中节点号相同的元素进行合并,通过补零的方式将所有列的长度保持一致,最终将所有列重新组成一个新矩阵,即解析状态矢量矩阵,矩阵中的每个元素都对应一个逻辑解析节点号;
步骤S2-4:状态阵列合并子过程;将多个状态阵列进行合并处理,以矩阵的列为单位,合并重复的状态节点;
步骤S3:目标硬件基元阵列参数控制过程,完成目标硬件配置比特流的生成,根据解析基元参数阵列,以阵列的列编号为硬件解析基元的配置基地址,按照步骤S1中定义的基元参数规格,为阵列中每个元素生成其对应的配置信息。
2.根据权利要求1所述的一种基于阵列式解析基元结构的后端编译器实现方法,其特征在于所述步骤S1包括如下步骤:
步骤S1-1:目标硬件解析基元能力定义子过程;将解析基元的编程参数定义为基元参数,基元参数包括启动与级联OLD信息和工作OL信息,启动与级联OLD信息是硬件解析基元的启动参数和级联参数,工作OL信息是解析基元的工作参数,工作参数的数量决定硬件解析基元可编程能力,对解析基元可编程能力的定义过程,是对一组基元参数规格的定义过程;
步骤S1-2:目标硬件解析基元阵列定义子过程;是对目标硬件可编程能力进行综合描述的过程,描述硬件基元阵列的行列规模;行数表示硬件最大可并行处理的能力,列数表示硬件可支持的解析分支的最大长度,行数与列数的乘积表示硬件的综合能力,用于描述目标硬件具备的可编程逻辑资源的多少;
步骤S1-3:目标硬件基元参数阵列定义子过程;对目标硬件中解析基元阵列进行划分,将硬件中可编程解析基元映射为一个或多个二维基元矩阵,整个目标硬件被定义为一个或多个并列的可编程的解析基元矩阵,矩阵中的每个元素均是一个可编程的解析基元,矩阵行元素的个数用于决定硬件所能支持的软件解析逻辑状态跳转的最大次数,对应软件逻辑解析的可编程深度;矩阵列元素的元素个数用于决定硬件所能支持的软件解析逻辑的最大解析逻辑分支数,对应软件解析逻辑的逻辑分支复杂度;矩阵的个数用于决定目标硬件所能支持的解析逻辑的最大并行度,个数越多对应硬件能够解析数据带宽越大。
3.根据权利要求2所述的一种基于阵列式解析基元结构的后端编译器实现方法,其特征在于:所述S1-1中,基元参数规格的定义过程,包括启动与级联OLD信息的解析子参数、长度子参数和信息提取子参数的数值范围,工作参数个数以及工作OL信息的解析子参数和长度子参数的数值范围,解析子参数和长度子参数的数值范围为一个解析节点数据解析范围和解析内容的长度,用于间接决定了一个解析基元的解析能力大小,信息提取子参数的数值范围表示解析器提取信息的范围。
4.根据权利要求2所述的一种基于阵列式解析基元结构的后端编译器实现方法,其特征在于:所述步骤S1-2中,基元阵列的行元素的数目用于决定硬件解析器的可编程度,行中元素的个数越多,硬件可支持的可编程度越大,对应支持的软件解析逻辑的状态分支越长,能够实现的解析逻辑复杂度越高;基元阵列的列元素数目用于决定硬件解析器的解析并行度和解析状态并行度,列中元素的个数越多,硬件能够支持的解析并行度越大,和/或能够并行解析的状态节点越多,对应硬件能够处理的解析数据流的带宽大小,和/或支持的软件能够描述的解析状态分支越多。
5.根据权利要求1所述的一种基于阵列式解析基元结构的后端编译器实现方法,其特征在于:所述步骤S2-2中,首先提取解析逻辑块中所有不重复的解析状态节点进行逻辑编号,作为逻辑解析节点号;然后针对每个逻辑解析节点号,按照步骤S1-1中的定义,提取并生成解析基元参数,将解析基元参数以逻辑节点号为索引,保存为一个解析参数列表,该列表中包含了软件逻辑所定义的所有解析节点的解析参数。
6.根据权利要求1所述的一种基于阵列式解析基元结构的后端编译器实现方法,其特征在于:所述步骤S2-4中,合并前先将每个解析状态矩阵通过扩展的方式,扩展为一样大小的矩阵,然后以列为单位,将不同矩阵的对应列中的逻辑解析节点号进行合并,不同的逻辑解析节点号全部保留,相同的节点号仅保留一个,最终生成一个解析状态矩阵,该矩阵与解析参数列表一起,构成了完整的配置参数。
7.根据权利要求1所述的一种基于阵列式解析基元结构的后端编译器实现方法,其特征在于:所述步骤S3包括如下步骤:
步骤S3-1:基元配置参数地址控制子过程;根据解析基元参数阵列信息生成配置解析基元的配置地址,以参数阵列的列为单位,同一列中不同的解析基元参数对应同一个基地址的不同偏移地址;
步骤S3-2:基元配置参数内容控制子过程;根据列中每个元素对应的解析节点逻辑号从解析参数列表中找出对应的具体参数内容,生成配置数据;
步骤S3-3:基元配置比特流控制子过程;将参数地址和参数内容组成一条配置指令,并将阵列中所有参数对应的配置指令转换为一个配置比特流。
8.一种基于阵列式解析基元结构的后端编译器实现装置,其特征在于:包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现权利要求1-7中任一项所述的一种基于阵列式解析基元结构的后端编译器实现方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210511925.7A CN114610288B (zh) | 2022-05-12 | 2022-05-12 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
PCT/CN2022/118927 WO2023216485A1 (zh) | 2022-05-12 | 2022-09-15 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210511925.7A CN114610288B (zh) | 2022-05-12 | 2022-05-12 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114610288A CN114610288A (zh) | 2022-06-10 |
CN114610288B true CN114610288B (zh) | 2022-09-16 |
Family
ID=81870652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210511925.7A Active CN114610288B (zh) | 2022-05-12 | 2022-05-12 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114610288B (zh) |
WO (1) | WO2023216485A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114610288B (zh) * | 2022-05-12 | 2022-09-16 | 之江实验室 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
CN114816434B (zh) * | 2022-06-28 | 2022-10-04 | 之江实验室 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022001154A1 (zh) * | 2020-06-28 | 2022-01-06 | 烟台东方威思顿电气有限公司 | 一种脚本化的智能电表事件判断解析方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5005152A (en) * | 1989-04-05 | 1991-04-02 | Allen-Bradley Company | Industrial controller with decompilable user program |
EP1742159A3 (en) * | 2000-08-07 | 2007-06-20 | Altera Corporation | Software-to-Hardware compiler |
US7565631B1 (en) * | 2004-07-02 | 2009-07-21 | Northwestern University | Method and system for translating software binaries and assembly code onto hardware |
CN1842081B (zh) * | 2005-03-30 | 2010-06-02 | 华为技术有限公司 | 扩展巴克斯范式字符串模式匹配和解析的方法及装置 |
US11755382B2 (en) * | 2017-11-03 | 2023-09-12 | Coherent Logix, Incorporated | Programming flow for multi-processor system |
US10891414B2 (en) * | 2019-05-23 | 2021-01-12 | Xilinx, Inc. | Hardware-software design flow for heterogeneous and programmable devices |
CN114115834B (zh) * | 2022-01-25 | 2022-04-26 | 之江实验室 | 一种软硬件协同编译处理方法及系统 |
CN114610288B (zh) * | 2022-05-12 | 2022-09-16 | 之江实验室 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
-
2022
- 2022-05-12 CN CN202210511925.7A patent/CN114610288B/zh active Active
- 2022-09-15 WO PCT/CN2022/118927 patent/WO2023216485A1/zh unknown
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022001154A1 (zh) * | 2020-06-28 | 2022-01-06 | 烟台东方威思顿电气有限公司 | 一种脚本化的智能电表事件判断解析方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2023216485A1 (zh) | 2023-11-16 |
CN114610288A (zh) | 2022-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114610288B (zh) | 基于阵列式解析基元结构的后端编译器实现方法及装置 | |
US10191788B2 (en) | Programmable device, heirarchical parallel machines, and methods for providing state information | |
US9792097B2 (en) | Method and apparatus for compiling regular expressions | |
CN111045655B (zh) | 一种页面渲染的方法、装置、渲染服务器和存储介质 | |
CN106598581B (zh) | 基于xml的asterix报文解析代码生成方法 | |
CN101364098B (zh) | 一种将梯形图转换为指令表程序及解释执行的方法与系统 | |
CN107168698B (zh) | 图形化编程的自动编译方法 | |
Hagemeyer et al. | Design of homogeneous communication infrastructures for partially reconfigurable fpgas. | |
CN101276278A (zh) | 代码转换装置 | |
CN104820393B (zh) | 一种基于plc梯形图矩阵编译解释方法 | |
Cedersjö et al. | Toward efficient execution of dataflow actors | |
CN102541611A (zh) | 指令翻译装置和方法、指令处理装置和处理器 | |
CN108170602B (zh) | 一种测试用例生成方法、装置、终端及计算机可读介质 | |
CN114398080A (zh) | 一种数据处理方法、装置、设备及计算机存储介质 | |
CN102446112B (zh) | 指令处理装置和处理器、指令翻译装置和方法 | |
US20160246825A1 (en) | Columnar database processing method and apparatus | |
CN107180193B (zh) | 一种将程序代码转换成数据约束的方法和装置 | |
US20050125775A1 (en) | Program development supporting apparatus, method, program and recording medium | |
CN102004647A (zh) | Osd应用程序框架的实现方法、装置及多媒体终端 | |
CN114816434B (zh) | 一种面向可编程交换的硬件解析器及解析器实现方法 | |
US20090228502A1 (en) | Efficient storage for finite state machines | |
Filliâtre et al. | Producing all ideals of a forest, functionally | |
Townsend et al. | Hardware in Haskell: Implementing memories in a stream-based world | |
Mishchenko | Introduction to zero-suppressed decision diagrams | |
CN113759884A (zh) | 一种分散控制系统输入输出点产物文件生成方法和系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |