一种串匹配算法的加速方法及装置与流程

文档序号:12271278阅读:198来源:国知局
一种串匹配算法的加速方法及装置与流程

本发明涉及信息检索、模式识别和计算机体系结构领域,特别涉及一种串匹配算法的加速方法及装置。



背景技术:

串匹配算法广泛应用在生物信息学、入侵检测、信息过滤、数据库、中文分词等众多领域,高性能串匹配算法研究具有重要的理论意义和应用价值。

在多模式串匹配算法中基于状态机的模式匹配算法最具代表性,应用也最为广泛,基于状态机的模式匹配算法具备性能稳定的特点,该类算法以Aho-Corasick算法为代表,Aho-Corasick算法由贝尔实验室的Aho和Corasick于1975年提出,它采用有限状态自动机结构一次接收所有模式串,通过构造状态机来扫描匹配文本,在状态机结构中,无论某个前缀同时属于几个模式,它都有唯一的状态来表示,Aho-Corasick算法的时间复杂度为O(n),其中,n为输入串的长度。

IBM苏黎世研究院的Lunteren在2006年提出了带优先级的状态机类算法,它通过对转换规则进行优先级划分,从而进一步压缩了Aho-Corasick算法所需存储空间,尽管该算法具有很好的存储效率,并可以针对正则表达式进行匹配,但并没有进一步找到AC算法存储空间很大的本质原因。

Smith等人在2008年提出了将每个状态结合一个扩展变量的扩展状态机XFA,该方法可以通过定义变量进一步减少多模式产生的状态机规模,给出了一种灵活压缩状态机的办法,然而,该方法由于复杂的状态操作,更适用于软件实现,硬件实现复杂性较高.尽管Smith也给出了相关的硬件设计,但由于关键路径相关性很高,无法进行有效的流水线设计,延长了最短路径时间,从而降低了频率影响整体性能。

Yang等人提出了针对多正则表达式匹配的时空可切换半确定状态机SFA,该状态机是DFA(确定有穷自动机)和NFA(不确定有穷自动机)之间的一种结构,由确定数量并行DFA组成,但由该方法构造的状态机十分复杂,不适合大规模模式使用。

此外,GPU作为高速处理引擎,近年来也被引入多模式匹配领域,由于GPU具有高度并行性,且编程容易,已有方法都取得了较好效果,由于网络处理具有较为固定的处理模式,不需要经常改变,定制电路设计相比GPU,在芯片使用效率和成本上更有优势。

随着对模式匹配性能需求的增加,基于状态机类的模式匹配算法成为高性能模式匹配体系结构设计的基础,但是,这类算法生成的DFA规模较大,尤其是对于大规模模式集(10万以上规模的模式集),所生成状态机规模对存储空间需求很大,既不利于软件算法快速实现,也无法适合硬件实现,为此,国际上相关研究主要围绕如何降低状态机类算法所需的规模和存储空间展开,应该说,简洁且有效的算法是解决该领域问题的首选,过分追求存储空间最优但造成结构复杂的方法生命力有限。



技术实现要素:

针对现有技术的不足,本发明提出一种串匹配算法的加速方法及装置。

本发明提出一种串匹配算法的加速方法,包括

构造基本转换规则与交叉转换规则,根据缓存策略函数确定状态缓存寄存器中的状态Sc1与Sc2,判断当前状态Si在基本转换规则和n步交叉转换规则中是否存在接收当前字符c的转换规则,如果存在对应的转换规则,则应用对应的转换规则,并跳到下一个状态Sk,应用基本转换规则或n步交叉转换规则,同时按缓存策略函数更新缓存寄存器中的状态Sc1与Sc2;否则,将被缓存的状态Sc2取出,并以状态Sc2为当前状态,在基本转换规则与n步交叉转换规则中寻找接收当前字符c的转换规则;如果寻找到对应的转换规则,则跳转到对应的下一个状态Sj,并应用2步交叉转换规则;否则,将被缓存的状态Sc1取出,并以状态Sc1为当前状态在基本转换规则与n步交叉转换规则中寻找接收当前字符c的转换规则;如果寻找到对应的转换规则,则跳转到对应的下一个状态Sj,并应用1步交叉转换规则;否则,判断初始状态S0是否接收字符c;如果接收字符c,则跳到相应状态,应用重启转换规则;否则,跳转到初始状态S0,用于失败转换规则。

通过状态转换函数R构造所述交叉转换规则,所述状态转换函数R的定义为:

其中,Si为当前状态,Sj为被缓存的状态、Rbasic为基本转换规则、Rn-cross为交叉转换规则、字符c、状态Sj、状态Si、状态Sk、状态Sc1、状态Sc2、初始状态S0、priority为优先级标识,4为最高优先级,0为最低优先级,如果高优先级的结果有效,则与最高优先级的结果被优先采纳。

所述重启转换规则为从其他状态转换到初始状态的后一个状态的转换规则。

所述失败转换规则为从其他状态转换到初始状态的转换规则。

本发明还提出一种串匹配算法的加速装置,包括

构造基本转换规则模块,用于构造基本转换规则;

构造交叉转换规则模块,用于构造交叉转换规则;

匹配模块,用于根据缓存策略函数确定状态缓存寄存器中的状态Sc1与Sc2,判断当前状态Si在基本转换规则和n步交叉转换规则中是否存在接收当前字符c的转换规则,如果存在对应的转换规则,则应用对应的转换规则,并跳到下一个状态Sk,应用基本转换规则或n步交叉转换规则,同时按缓存策略函数更新缓存寄存器中的状态Sc1与Sc2;否则,将被缓存的状态Sc2取出,并以状态Sc2为当前状态,在基本转换规则与n步交叉转换规则中寻找接收当前字符c的转换规则;如果寻找到对应的转换规则,则跳转到对应的下一个状态Sj,并应用2步交叉转换规则;否则,将被缓存的状态Sc1取出,并以状态Sc1为当前状态在基本转换规则与n步交叉转换规则中寻找接收当前字符c的转换规则;如果寻找到对应的转换规则,则跳转到对应的下一个状态Sj,并应用1步交叉转换规则;否则,判断初始状态S0是否接收字符c;如果接收字符c,则跳到相应状态,应用重启转换规则;否则,跳转到初始状态S0,用于失败转换规则。

通过状态转换函数R构造所述交叉转换规则,所述状态转换函数R的定义为:

其中,Si为当前状态,Sj为被缓存的状态、Rbasic为基本转换规则、Rn-cross为交叉转换规则、字符c、状态Sj、状态Si、状态Sk、状态Sc1、状态Sc2、初始状态S0、priority为优先级标识,4为最高优先级,0为最低优先级,如果高优先级的结果有效,则与最高优先级的结果被优先采纳。

所述重启转换规则为从其他状态转换到初始状态的后一个状态的转换规则。

所述失败转换规则为从其他状态转换到初始状态的转换规则。

还包括缓存寄存器模块,用于缓存各状态。

还包括选通电路。

由以上方案可知,本发明的优点在于:

本发明通过增加状态缓存组件和选通电路,如寄存器组和多路选通器,在串匹配过程中动态生成转换规则,实现了串匹配算法的加速,同时能够消除传统串匹配算法中需存储的大量转换规则,降低生成状态机的规模,提高串匹配算法的执行速度。

附图说明

图1为本发明的总体结构图;

图2为交叉转换规则动态生成装置图;

图3为总体流程框图;

图4为有穷状态机DFA图。

具体实施方式

本发明的总体结构图如图1所示,包含如下步骤:

步骤1)转换规则预处理

步骤11)构造基本转换规则

基本转换规则是指从确定有穷状态自动机DFA初始状态开始直接接收模式所包含字符串的转换规则,以Rbasic表示。

步骤12)构造交叉转换规则

交叉转换规则表示状态机中某个状态代表的模式后缀与其他模式或该模式的前缀相同,其实质是某一段子模式与其他模式或者该模式的前缀相同。在此处只需构造3步及3步以上的交叉转换规则,以Rn-cross表示,其中n为步长值,而大量的1步和2步交叉转换规则在后续步骤中动态生成。

步骤13)构造重启转换规则和失败转换规则

重启转换规则为DFA中从其他状态转换到初始状态的后一个状态的转换规则,这类转换规则在模式匹配问题中表示输入字符无法正确匹配当前的模式路径,但可以从初始状态重新开始一次模式匹配过程,并已经接收了第1个字符;失败转换规则为DFA中从其他状态转换到初始状态的转换规则,这类转换规则代表输入字符无法正确地匹配任何模式及其子模式,因此状态机回到初始位置。根据已有的带优先级的状态机类算法,可将重启转换规则和失败转换规则合并,并控制在256条规则以内。

步骤2)构造1步和2步交叉转换规则生成装置

步骤21)状态转换函数

状态转换函数R的定义为:

其中,Si为当前状态,Sj为被缓存的状态,空集表示不存在对应的转换规则;priority为优先级标识,4为最高优先级,0为最低优先级,如果高优先级的结果有效(非空),则该结果被优先采纳;如果优先级高的结果无效,则低优先级结果被采纳,结果无效是指某一状态Si在Rbasic和Rn-cross转换函数中没有接收字符c的转换规则。

步骤22)交叉转换规则动态生成装置

交叉转换规则动态生成装置如图2所示。

生成装置在原有状态机功能中增加对历史信息的记录,并由当前状态、当前输入符号和状态机的历史信息一起决定下一个状态,从外部接口来看,生成装置与传统状态机一样,仅接收输入符号,输出状态机的判断结果。所不同之处在于内部增加了缓存寄存器,能够对状态按照缓存策略函数T进行状态缓存。

步骤3)多模式串匹配

步骤31)根据缓存策略函数确定状态缓存寄存器1和2缓存的状态Sc1和Sc2,others是指不满足if后面的表达式的所有情况,即if(Rbasic(Sc1,c)≠Sj&&Rn-cross(Sc1,c)≠Sj):

步骤32)根据步骤1)的转换规则集和步骤2)中的状态转换函数进行串匹配:

判断当前状态Si在基本转换规则和n步交叉转换规则中是否存在接收当前字符c的转换规则:

步骤321)如果存在对应的转换规则,则应用该规则,跳到下一个状态Sk,实施基本转换规则或n步交叉转换规则,同时按缓存策略函数更新缓存寄存器1和缓存寄存器2中的转换规则Sc1和Sc2

步骤322)如果不存在对应的转换规则,则将被缓存的状态Sc2取出,并以Sc2状态为当前状态在基本转换规则和n步交叉转换规则中寻找接收当前字符c的转换规则:

步骤3221)如果存在对应的转换规则,则跳转到对应的下一个状态Sj,实施2步交叉转换规则;

步骤3222)如果不存在对应的转换规则,则将被缓存的状态Sc1取出,并以Sc1状态为当前状态在基本转换规则和n步交叉转换规则中寻找接收当前字符c的转换规则:

步骤32221)如果存在对应的转换规则,则跳转到对应的下一个状态Sj,实施1步交叉转换规则;

步骤32222)如果不存在对应的转换规则,则判断初始状态S0是否接收字符c:

步骤322221)如果接收字符c,则跳到相应状态,实施重启转换规则;

步骤322222)如果不接收字符c,跳转到初始状态S0,实施失败转换规则。

本发明还提出一种串匹配算法的加速装置,包括

构造基本转换规则模块,用于构造基本转换规则;

构造交叉转换规则模块,用于构造交叉转换规则;

匹配模块,用于根据缓存策略函数确定状态缓存寄存器中的状态Sc1与Sc2,判断当前状态Si在基本转换规则和n步交叉转换规则中是否存在接收当前字符c的转换规则,如果存在对应的转换规则,则应用对应的转换规则,并跳到下一个状态Sk,应用基本转换规则或n步交叉转换规则,同时按缓存策略函数更新缓存寄存器中的状态Sc1与Sc2;否则,将被缓存的状态Sc2取出,并以状态Sc2为当前状态,在基本转换规则与n步交叉转换规则中寻找接收当前字符c的转换规则;如果寻找到对应的转换规则,则跳转到对应的下一个状态Sj,并应用2步交叉转换规则;否则,将被缓存的状态Sc1取出,并以状态Sc1为当前状态在基本转换规则与n步交叉转换规则中寻找接收当前字符c的转换规则;如果寻找到对应的转换规则,则跳转到对应的下一个状态Sj,并应用1步交叉转换规则;否则,判断初始状态S0是否接收字符c;如果接收字符c,则跳到相应状态,应用重启转换规则;否则,跳转到初始状态S0,用于失败转换规则。

通过状态转换函数R构造所述交叉转换规则,所述状态转换函数R的定义为:

其中,Si为当前状态,Sj为被缓存的状态、Rbasic为基本转换规则、Rn-cross为交叉转换规则、字符c、状态Sj、状态Si、状态Sk、状态Sc1、状态Sc2、初始状态S0、priority为优先级标识,4为最高优先级,0为最低优先级,如果高优先级的结果有效,则与最高优先级的结果被优先采纳。

所述重启转换规则为从其他状态转换到初始状态的后一个状态的转换规则。

所述失败转换规则为从其他状态转换到初始状态的转换规则。

还包括缓存寄存器模块,用于缓存各状态;选通电路。

以下为本发明的具体实施例,如下所示:

本方法的总体流程框图如图3所示:

现在采用一个模式集为{BASIC,SIEAN}的实例作为本发明的一个实施例,结合本发明的算法,对输入“BASIEAN”进行串匹配操作。

步骤1转换规则预处理:

首先,构建基本转换规则Rbasic的DFA图,如图4所示:

接着由此DFA图建立基本转换规则表1:(12)

由于没有3个字符及以上的子串与模式集的前缀相同,故3步及3步以上的交叉转换规则无。

重启规则和失败规则见表2:(13)

步骤2利用1步和2步交叉转换规则生成装置动态生成转换规则并完成串匹配:

第一个周期接收字符“B”,此时应用规则R1,当前状态S0变为S1,同时根据缓存策略函数可得缓存寄存器2的内容则为空(Sc2=φ,others),缓存寄存器1的内容为状态S1(Sc1=Rbasic(S0,B)=S1);

第二个周期接收字符“A”,此时应用规则R2,当前状态S1变为S2,同时缓存寄存器2的内容则为S2(Sc2=Rbasic(Sc1,A)||Rn-cross(Sc1,A)=Rbasic(S1,A)||Rn-cross(S1,A)=S2),缓存寄存器1的内容为状态S0(Rbasic(S0,A)=φ→Sc1=S0);

第三个周期接收字符“S”,此时应用规则R3,当前状态S2变为S3,同时缓存寄存器2的内容则为S6(Sc2=Rbasic(Sc1,S)||Rn-cross(Sc1,S)=Rbasic(S0,S)||Rn-cross(S0,S)=S6),缓存寄存器1的内容为状态S6(Sc1=Rbasic(S0,S)=S6);

第四个周期接收字符“I”,此时应用规则R4,当前状态S3变为S4,同时缓存寄存器2的内容为S7(Sc2=Rbasic(Sc1,S)||Rn-cross(Sc1,S)=Rbasic(S6,I)||Rn-cross(S6,I)=S7),缓存寄存器1的内容为状态S0(Rbasic(S0,I)=φ→Sc1=S0);

第五个周期接收字符“E”,基本转换规则都为空,此时取出缓存寄存器2的内容S7,应用规则R8,当前状态S4变为S8,同时缓存寄存器2的内容变为空(Sc2=Rbasic(Sc1,E)||Rn-cross(Sc1,E)=Rbasic(S0,E)||Rn-cross(S0,E)=φ),缓存寄存器1的内容为状态S0(Rbasic(S0,E)=φ→Sc1=S0);

第六个周期接收字符“A”,此时应用规则R9,当前状态S8变为S9,同时缓存寄存器2的内容则为空(Sc2=Rbasic(Sc1,A)||Rn-cross(Sc1,A)=Rbasic(S0,A)||Rn-cross(S0,A)=φ),缓存寄存器1的内容为状态S0(Rbasic(S0,A)=φ→Sc1=S0);

第七个周期接收字符“N”,此时应用规则R10,当前状态S9变为S10,S10为终止状态且字符输入完毕,故成功匹配字符串“SIEAN”,串匹配结束。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1