一种基于图形处理单元的非确定有限自动机的匹配方法及装置的制作方法

文档序号:6375157阅读:152来源:国知局

专利名称::一种基于图形处理单元的非确定有限自动机的匹配方法及装置的制作方法
技术领域
:本发明涉及计算机应用
技术领域
,尤其涉及一种基于GPU(graphicprocessingunit,图形处理单兀)的NFA(non-deterministicfiniteautomaton,非确定性有限自动机)的匹配方法及装置。
背景技术
:在计算机
技术领域
中,正则表达式是用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。目前,许多程序设计语言都支持利用正则表达式进行字符串操作。正则表达式在现代计算机应用领域使用十分广泛,正则表达式因其简洁、高效、强大的文本处理能力得到普遍认可和采用。—个正则表达式是一个模式,描述符合一系列句法规则的字符串;在具体匹配操作当中,通常是将正则表达式通过标准的Thompson算法或者Glushkov算法等算法转换为NFA(non-deterministicfiniteautomaton,非确定性有限自动机)或者DFA(deterministicfiniteautomaton,确定性有限自动机),然后借助有限自动机完成匹配操作。基于有限自动机的正则表达式匹配技术需要解决的两大难题存储体积和匹配速度,亦即时间复杂度和空间复杂度;在这两个衡量指标上DFA和NFA互有优劣。其中,DFA中每个源状态对于输入字符转移到一个唯一的目的状态,即在DFA运行过程中,有且仅有一个活跃状态,DFA的匹配特征是确定和简单的,但是DFA需要存储状态的空间可能呈现指数级膨胀,最极端的情况下,具有N个状态的NFA其等价的DFA可能有多大2N个状态。相比DFA,相应的NFA的存储体积不存在指数膨胀问题,与正则表达式规则集大小呈现线性增长关系,但是在NFA匹配过程中,NFA包含的每一个状态对于一个输入字符,可能会有多个目的状态被激活,因此在NFA的运行过程中会有数目不确定的状态处于激活状态,这些活跃状态组成一个活跃状态集合,因此,在NFA的匹配过程中,需要维护一个活跃状态集合,针对输入字符的转换表现为状态集合之间的转换,相应的匹配过程比DFA下的匹配过程复杂,导致NFA匹配效率较低。目前还没有一种方式能够降低NFA匹配过程中的复杂程度,以有效提高相应的NFA匹配过程中的效率。
发明内容本发明的目的是提供一种基于图形处理单元的非确定有限自动机的匹配方法及装置,从而可以降低NFA匹配过程中的复杂程度,有效提高NFA匹配效率。本发明的目的是通过以下技术方案实现的一种基于图形处理单元的非确定有限自动机的匹配方法,包括计算非确定有限自动机NFA中所有状态两两之间的相容性,并根据所述相容性对所述各个状态进行编码形成虚拟NFA,以获得虚拟NFA对应的虚拟NFA状态转换表;其中,所述相容性是指,若NFA中的两个状态在NFA匹配过程中不同时处于活跃状态,则该两个状态相容,否则,为不相容;将所述虚拟NFA状态转换表存储在图形处理单元GPU的全局存储器中,并基于该虚拟NFA状态转换表匹配经过交织处理的待处理数据包中数据。可选地,所述计算NFA中所有状态两两之间的相容性的步骤包括针对NFA状态建立NXN的二维表,N为NFA的状态数目,NFA状态依次为0,1,2,…,N-I;在该二维表中,第i+Ι行和第j+Ι列的表项由[i,j]表示;如果状态i和j是相容的,则表项[i,j]内容设置为true,如果状态i和j是不相容的,则表项[i,j]内容设置为false;其中,分别将表项,[1,1],[2,2],…,[N_1,N_1]的内容置为false;建立初始为空的第一队列queue并进行初始化,依次将状态对(0,O),(1,1),(2,2),···,(N-1,N-1)压入第一队列queue中;·弹出第一队列queue首部的状态对(i,j),使用状态i,j遍历全部可能的输入字符0-255查询NFA状态,其中,以当前输入字符作为转换字符,以状态i为源状态,查询该NFA状态获得目的状态集合Di,以状态j为源状态,查询该NFA状态获得目的状态集合Dj;检查状态集合Di和状态集合Dj的并集DiUDj,并将该并集当中的任意两个状态所组成的状态对(s,t)对应的所述二维表表项内容置为false,若状态对(s,t)所对应的二维表表项中的内容之前记录为true,则还需要将状态对(s,t)压入第一队列queue的尾部;判断第一队列queue是否非空,如果是,过程结束,否则,继续再执行所述弹出第一队列queue首部的状态对(i,j)的步骤。可选地,所述根据所述相容性对所述各个状态进行编码形成虚拟NFA的步骤包括根据所述相容性将NFA中的所有状态分组,获得至少一个相容组,所述相容组中的任意两个状态之间相容;将得到的所述相容组合并获得超级相容组,再对所述超级相容组进行编码形成虚拟状态,并获得虚拟NFA。可选地,所述根据所述相容性将NFA中的所有状态分组,获得至少一个相容组的步骤包括获得空的第二队列queue,在建立的无向图中一次或多次选取边度数最大的一条边,将该边对应的两个顶点对应的状态压入所述第二队列queue,并从该无向图当中去除这条边,更新剩余无向图当中各项顶点度数和边度数;其中,所述无向图的顶点为NFA的一个状态,边为NFA中两个不相容的状态对应的顶点之间的连线,顶点度数为与该顶点相连的边的总数目,边度数为该边所关联的两个顶点的顶点度数之和;在建立的无向图中一次或多次选取边度数最大的一条边的过程中,若当前被选中边从无向图当中移除,剩余图变为空,则这条边不压入第二队列queue,拆分这条边的两个关联顶点,各自构成一个单元素的独立集,再使用第二队列queue中收集的边对应的状态对构成新的无向图,并执行所述获得空的第二队列queue的步骤,所述的独立集对应一个相容组;若剩余无向图中不存在边并且非空,则将无向图中剩余顶点构成一个顶点独立集,将第二队列queue中与该独立集中的状态相容的NFA状态加入该独立集中,再使用第二队列queue中剩余的顶点构成新的无向图,并执行所述获得空的第二队列queue的步骤;若第二队列queue空,则过程结束。可选地,所述将得到的所述相容组合并获得超级相容组的步骤包括按照相容组状态数的大小进行降序排序,得到降序排列的相容组集合;从所述降序排列的相容组集合中依次顺序取出相容组并加入到当前占用比特数最少的超级相容组当中,同时更新该超级相容组占用的比特数,其中,每个超级相容组初始占用的比特数为O。6、根据权利要求3所述的方法,其特征在于,所述获得虚拟NFA的步骤包括在超级相容组中,对各个相容组包含的状态进行编码,获得相容组的组内状态的编码作为组状态编码结果,还对超级相容组的组编号进行编码,获得组编号编码结果;将所述组状态编码结果与所述组编号编码结果联结,构成该超级相容组中虚拟状态的完整的编码,获得虚拟NFA的状态,还建立所述虚拟NFA状态之间的转换关系,获得包含虚拟NFA状态和虚拟NFA状态之间的转换关系的虚拟NFA,用于获得虚拟NFA对应的虚拟NFA状态转换表。可选地,建立所述虚拟NFA状态之间的转换关系的处理包括以所述虚拟状态作为源状态,对于输入字符进行状态转换,根据所述组状态编码结果,分别针对输入字符按照NFA中状态转换关系进行状态转换,得到各自的目的状态集合,再将目的状态集合当中的状态按照所属的相容组的不同归入不同的超级相容组当中,并进行连接构成目的虚拟状态,以建立源虚拟状态到目的虚拟状态间的转换关系,即建立虚拟NFA之间的转换关系。可选地,所述交织处理包括若图形处理单元GPU并行处理的数据包的数目为P,则将数据包内的数据划分为等长W字节的数据分片,并在存储所述数据包时,相邻的数据分片彼此相距PXW字节的存储,以实现针对所述数据包的交织处理;其中,对于数据包进行数据分片的划分时,如果存在数据分片的实际长度小于W字节,则使用0x00进行填充直至满足W字节。可选地,所述基于该虚拟NFA匹配经过交织处理的待处理数据包中数据的步骤包括线程分片中的各个线程依据自身线程编号计算索引值来读出位于全局存储器的数据包中不同的数据,并将读出的数据存入共享存储器,其中,所述线程分片是由GPU线程束中的连续若干个线程构成;线程分片中的各个线程依据自身线程编号计算出索引值访问位于共享存储器当中的活跃状态表中不同的位置,各个线程读出一个活跃状态编号,并清空该活跃状态表;线程分片从所述共享存储器中直接读取所述数据,并将其各个字节作为输入字符,再以各个线程所持有的状态编号作为行坐标,以当前的输入字符作为列坐标,索引查询所述虚拟NFA对应的虚拟NFA状态转换表,分别得到状态集合;其中,所述虚拟NFA状态转换表包括超级相容组当中的虚拟NFA状态以及各个虚拟NFA状态之间的转换关;在得到的所述状态集合中,对于任一个集合中的各个状态,根据各个线程的线程编号及对应的各个线程读出的活跃状态编号中集成的组编号,确定该状态在所述活跃状态表当中存储的位置,并将该状态的组编码值写入至所述活跃状态表中的该位置,所述的组编码值包含对超级相容组中的虚拟NFA状态进行编码获得的组状态编码结果和对超级相容组的组编号进行编码获得组编号编码结果;若当前处理的状态为接受状态时,则标记当前正处理的数据包,否则不标记;继续处理所述数据包中后续数据,直至数据包中的数据处理完毕。一种基于图形处理单元的非确定有限自动机的匹配装置,包括虚拟NFA建立模块,用于计算非确定有限自动机NFA中所有状态两两之间的相容性,并根据所述相容性对所述各个状态进行编码形成虚拟NFA,获得虚拟NFA对应的虚拟NFA状态转换表;其中,所述相容性是指,若NFA中的两个状态在NFA匹配过程中不同时处于活跃状态,则该两个状态相容,否则,为不相容;匹配处理模块,用于将所述虚拟NFA建立模块获得的虚拟NFA状态转换表存储在图形处理单元GPU的全局存储器中,并基于该虚拟NFA状态转换表匹配经过交织处理的待处理数据包中数据。可选地,所述虚拟NFA建立模块为执行计算NFA中所有状态两两之间的相容性的处理,则包括状态表建立模块,用于针对NFA状态建立NXN的二维表,N为NFA的状态数目,NFA状态依次为0,I,2,-,N-I;在该二维表中,第i+Ι行和第j+Ι列的表项由[i,j]表示;如果状态i和j是相容的,则表项[i,j]内容设置为true,如果状态i和j是不相容的,则表项[i,j]内容设置为false;其中,分别将表项,[1,1],[2,2],…,[N_l,N-1]的内容置为false;第一队列建立模块,用于建立初始为空的第一队列queue并进行初始化,依次将状态对(0,0),(1,1),(2,2),…,(N-LN-I)压入第一队列queue中;二维表调整模块,用于弹出所述第一队列建立模块建立的第一队列queue首部的状态对(i,」_),使用状态1,j遍历全部可能的输入字符0-255查询NFA状态,其中,以当前输入字符作为转换字符,以状态i为源状态,查询该NFA状态获得目的状态集合Di,以状态j为源状态,查询该NFA状态获得目的状态集合Dj;检查状态集合Di和状态集合Dj的并集DiUDj,并将该并集当中的任意两个状态所组成的状态对(s,t)对应的所述状态表建立模块建立的二维表表项内容置为false,若状态对(s,t)所对应的二维表表项中的内容之前记录为true,则还需要将状态对(s,t)压入第一队列queue的尾部;判断模块,用于在所述二维表调整模块执行操作后,判断所述第一队列queue是否非空,如果是,过程结束,否则,通知所述二维表调整模块,以继续再执行所述弹出第一队列queue首部的状态对(i,j)的步骤。可选地,所述虚拟NFA建立模块为执行根据所述相容性对所述各个状态进行编码形成虚拟NFA的处理,则包括相容组建立模块,用于根据所述相容性将NFA中的所有状态分组,获得至少一个相容组,所述相容组中的任意两个状态之间相容;获得虚拟NFA模块,用于将所述相容组建立模块得到的所述相容组合并获得超级相容组,再对所述超级相容组进行编码形成虚拟状态,获得虚拟NFA。可选地,所述相容组建立模块包括第二队列处理模块,用于获得空的第二队列queue,在建立的无向图中一次或多次选取边度数最大的一条边,将该边对应的两个顶点对应的状态压入所述第二队列queue,并从该无向图当中去除这条边,更新剩余无向图当中各项顶点度数和边度数;其中,所述无向图的顶点为NFA的一个状态,边为NFA中两个不相容的状态对应的顶点之间的连线,顶点度数为与该顶点相连的边的总数目,边度数为该边所关联的两个顶点的顶点度数之和;无向图处理模块,用于所述第二队列处理模块在建立的无向图中一次或多次选取边度数最大的一条边的过程中,若当前被选中边从无向图当中移除,剩余图变为空,则通知所述第二队列处理模块这条边不压入第二队列queue,拆分这条边的两个关联顶点,各自构成一个单元素的独立集,再使用第二队列queue中收集的边对应的状态对构成新的无向图,并通知所述第二队列处理模块执行所述获得空的第二队列queue的处理,所述的独立集对应一个相容组;若剩余无向图中不存在边并且非空,则将无向图中剩余顶点构成一个顶点独立集,将所述第二队列queue中与该独立集中的状态相容的NFA状态加入该独立集中,再使用第二队列queue中剩余的顶点构成新的无向图,并通知所述第二队列处理模块执行所述获得空的第二队列queue的处理;若第二队列queue空,则过程结束。可选地,所述获得虚拟NFA模块为执行将得到的所述相容组合并获得超级相容组的处理,则包括排序处理模块,用于按照相容组状态数的大小进行降序排序,得到降序排列的相容组集合;超级相容组建立模块,用于从所述排序处理模块得到的降序排列的相容组集合中依次顺序取出相容组并加入到当前占用比特数最少的超级相容组当中,并同时更新该超级相容组占用的比特数,其中,每个超级相容组初始占用的比特数为O。可选地,所述获得虚拟NFA模块为执行获得虚拟NFA的处理,则包括相容组编码模块,用于在所述超级相容组建立模块建立的超级相容组中,对各个相容组包含的状态进行编码,获得相容组的组内状态的编码作为组状态编码结果,还对超级相容组的组编号进行编码,获得组编号编码结果;虚拟NFA获得子模块,用于将所述相容组编码模块获得的组状态编码结果与组编号编码结果联结,构成该超级相容组中虚拟状态的完整的编码,获得虚拟NFA的状态,还建立所述虚拟NFA状态之间的转换关系,获得包含虚拟NFA状态和虚拟NFA状态之间的转换关系的虚拟NFA。可选地,所述虚拟NFA获得子模块建立所述虚拟NFA状态之间的转换关系的处理包括以所述虚拟状态作为源状态,对于输入字符进行状态转换,根据所述组状态编码结果,分别针对输入字符按照NFA中状态转换关系进行状态转换,得到各自的目的状态集合,再将目的状态集合当中的状态按照所属的相容组的不同归入不同的超级相容组当中,并进行连接构成目的虚拟状态,以建立源虚拟状态到目的虚拟状态间的转换关系,即建立虚拟NFA之间的转换关系。可选地,所述匹配处理模块执行的交织处理具体包括若图形处理单元GPU并行处理的数据包的数目为P,则将数据包内的数据划分为等长W字节的数据分片,并在存储所述数据包时,相邻的数据分片彼此相距PXW字节的存储,以实现针对所述数据包的交织处理;其中,对于数据包进行数据分片的划分时,如果存在数据分片的实际长度小于W字节,则使用OxOO进行填充直至满足W字节。可选地,所述匹配处理模块为执行基于该虚拟NFA匹配经过交织处理的待处理数据包中数据的处理,则包括数据读取模块,用于通过线程分片中的各个线程依据自身线程编号计算索引值来读出位于全局存储器的数据包中不同的数据,并将读出的数据存入共享存储器,其中,所述线程分片是由GPU线程束中的连续若干个线程构成;活跃状态表操作模块,用于通过线程分片中的各个线程依据自身线程编号计算出索引值访问位于共享存储器当中的活跃状态表中不同的位置,各个线程读出一个活跃状态编号,并清空该活跃状态表;状态匹配模块,用于通过线程分片从所述数据读取模块存储有数据的共享存储器中直接读取所述数据,并将其各个字节作为输入字符,再以各个线程所持有的通过所述活跃状态表操作模块读出的活跃状态编号作为行坐标,以该输入字符作为列坐标,索引查询虚拟NFA对应的虚拟NFA状态转换表,分别得到状态集合;其中,所述虚拟NFA状态转换表包括超级相容组当中的虚拟NFA状态以及各个虚拟NFA状态之间的转换关系;活跃状态表更新模块,用于在所述状态匹配模块得到的所述状态集合中,对于任一个集合中的各个状态,根据各个线程的线程编号及对应的所述各个线程读出的活跃状态编号中集成的组编号,确定该状态在所述活跃状态表当中存储的位置,并将该状态的组编码值写入至所述活跃状态表中的该位置,所述的组编码值包含对超级相容组中的虚拟NFA状态进行编码获得的组状态编码结果和对超级相容组的组编号进行编码获得组编号编码结果;数据包标记模块,用于在所述活跃状态表更新模块当前处理的状态为接受状态时,则标记当前正处理的数据包,否则不标记;之后,通知继续处理所述数据包中后续数据,直至数据包中的数据处理完毕。由上述本发明提供的技术方案可以看出,本发明实施例提供的技术方案中,采用了将NFA转换为等价的虚拟NFA的技术手段,在虚拟NFA中包含了各个状态之间的相容状况,使得在应用虚拟NFA匹配数据过程中能够有效降低匹配过程中的复杂程度,提高基于NFA的匹配速度,很好地当前克服了现有技术中存在的问题。为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。图I为本发明实施例提供的匹配方法的流程图;图2为本发明实例提供的用于匹配正则表达式ab.*Cd和ef.*gh的NFA的示意图;图3为本发明实例提供的计算NFA状态间相容性的示意图;图4为本发明实例提供的将NFA中状态划分为相容组时所构造的无向图的示意图5为本发明实例提供的将图2中NFA状态划分得到的相容组的示意图;图6为本发明实例提供的对于超级相容组当中状态进行编码的示意图;图7为本发明实例提供的将数据报数据进行交织存储的示意图;图8为本发明实例提供的GPU并行线程使用虚拟NFA处理数据的示意图;图9为本发明实例提供的匹配装置的结构示意图。具体实施例方式下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。本发明实施例提供的一种基于图形处理单元的非确定有限自动机的匹配方法的具体实现过程可以包括步骤1,计算非确定有限自动机NFA中所有状态两两之间的相容性,其中,相应的相容性是指,若NFA中的两个状态在NFA匹配过程中不同时处于活跃状态,则该两个状态相容,否则,为不相容;所述计算NFA中所有状态两两之间的相容性的步骤包括针对NFA状态建立NXN的二维表,N为NFA的状态数目,NFA状态依次为0,1,2,…,N-I;在该二维表中,第i+Ι行和第j+Ι列的表项由[i,j]表示;如果状态i和j是相容的,则表项[i,j]内容设置为true,如果状态i和j是不相容的,则表项[i,j]内容设置为false;其中,分别将表项,[1,1],[2,2],…,[N_1,N_1]的内容置为false;建立初始为空的第一队列queue并进行初始化,依次将状态对(0,0),(1,1),(2,2),···,(N-1,N-1)压入第一队列queue中;弹出第一队列queue首部的状态对(i,j),并使用该状态对i,j遍历全部可能的输入字符0-255查询NFA状态,其中,以当前输入字符作为转换字符,以状态i为源状态,查询该NFA状态获得目的状态集合Di,以状态j为源状态,查询该NFA状态获得目的状态集合Dj;再检查状态集合Di和状态集合Dj的并集DiUDj,并将该并集当中的任意两个状态所组成的状态对(s,t)对应的在所述二维表表项中的内容置为false,若状态对(s,t)所对应的二维表表项中的内容之前记录为true,贝U还需要将状态对(s,t)压入第一队列queue的尾部;即如果状态对(s,t)所对应的二维表表项中的内容已经为false,则该状态对(s,t)就不需要压入第一队列queue中;判断第一队列queue是否非空,如果是,过程结束,否则,继续再执行所述弹出第一队列queue首部的状态对(i,j)的步骤。步骤2,根据NFA状态之间的相容性对NFA状态包含的各个状态进行编码形成虚拟NFA,进而获得虚拟NFA对应的虚拟NFA状态转换表,具体地,在获得相应的虚拟NFA后便可以建立确定与其对应的虚拟NFA状态转换表,虚拟NFA状态转换表中记录了虚拟NFA状态和虚拟NFA状态之间的转换关系;其中,根据相容性对NFA包含的各个状态进行编码形成虚拟NFA的步骤包括步骤21,根据NFA状态之间的相容性将NFA中的所有状态分组,获得至少一个相容组,在每个相容组中的任意两个状态之间相容;进一步地,根据所述相容性将NFA中的所有状态分组,获得至少一个相容组的步骤包括获得空的第二队列queue,在建立的无向图中一次或多次选取边度数最大的一条边,将该边对应的两个顶点对应的状态压入所述第二队列queue,并从该无向图当中去除这条边,更新剩余无向图当中各项顶点度数和边度数;其中,所述无向图的顶点为NFA的一个状态,边为NFA中两个不相容的状态对应的顶点之间的连线,顶点度数为与该顶点相连的边的总数目,边度数为该边所关联的两个顶点的顶点度数之和;在建立的无向图中一次或多次选取边度数最大的一条边的过程中,若当前被选中边从无向图当中移除,剩余图变为空,则这条边不压入第二队列queue,拆分这条边的两个关联顶点,各自构成一个单元素的独立集,再使用第二队列queue中收集的边对应的状态对构成新的无向图,并执行所述获得空的第二队列queue的步骤,所述的独立集对应一个相容组;若剩余无向图中不存在边并且非空,则将无向图中剩余顶点构成一个顶点独立集,将第二队列queue中与该独立集中的状态相容的NFA状态加入该独立集中,再使用第二队列queue中剩余的顶点构成新的无向图,并执行所述获得空的第二队列queue的步骤;若第二队列queue空,则过程结束。步骤22,将得到的相容组合并获得超级相容组;具体地,将得到的相容组合并获得超级相容组的步骤具体可以包括首先,按照相容组状态数的大小进行降序排序,得到降序排列的相容组集合;之后,从该降序排列的相容组集合中依次顺序取出相容组并加入到当前占用比特数最少的超级相容组当中,同时更新该超级相容组占用的比特数,以便于后续过程中再次将取出相容组准确地加入到当前占用比特数最少的超级相容组中,其中,每个超级相容组初始占用的比特数为0,之后,则根据加入到其中的相容组的情况实时调整对应的超级相容组占用的比特数。步骤23,对相应的超级相容组进行编码形成虚拟状态,获得虚拟NFA;进一步地,相应的获得虚拟NFA的步骤可以包括首先,在超级相容组中,对各个相容组包含的状态进行编码,获得相容组的组内状态的编码作为组状态编码结果,还对超级相容组的组编号进行编码,即对若干个超级相容组的组编号(即当前超级相容组在所有超级相容组中的序号)进行编码,获得各个超级相容组的组编号编码结果,例如,假设有3个超级相容组,则相应的3个超级相容组的组编号二进制编码结果分别可以为00,01,10;之后,再将上述组状态编码结果与组编号编码结果联结,构成该超级相容组中虚拟状态的完整的编码,获得虚拟NFA的状态,还建立所述虚拟NFA状态之间的转换关系,获得包含虚拟NFA状态和虚拟NFA状态之间的转换关系的虚拟NFA,以便于后续过程中可以基于该虚拟NFA获得虚拟NFA对应的虚拟NFA状态转换表;其中,建立相应的虚拟NFA状态之间的转换关系的处理可以包括以所述虚拟状态作为源状态,对于输入字符进行状态转换,根据所述组状态编码结果,分别针对输入字符按照NFA中状态转换关系进行状态转换,得到各自的目的状态集合,再将目的状态集合当中的状态按照所属的相容组的不同归入不同的超级相容组当中,并进行连接构成目的虚拟状态,以建立源虚拟状态到目的虚拟状态间的转换关系,即建立虚拟NFA之间的转换关系。步骤3,将所述虚拟NFA状态转换表存储在图形处理单元GPU的全局存储器中,并基于该虚拟NFA状态转换表匹配经过交织处理的待处理数据包中数据;在该步骤中,相应的交织处理过程具体可以包括若图形处理单元GPU并行处理的数据包的数目为P,则将数据包内的数据划分为等长W字节的数据分片,并在存储所述数据包时,相邻的数据分片彼此相距PXW字节的存储,以实现针对所述数据包的交织处理;其中,对于数据包进行数据分片的划分时,如果存在数据分片的实际长度小于W字节,则使用0x00进行填充直至满足W字节。进一步地,该步骤中的基于该虚拟NFA匹配经过交织处理的待处理数据包中数据的步骤具体可以包括线程分片中的各个线程依据自身线程编号计算索引值来读出位于全局存储器的数据包中不同的数据,并将读出的数据存入共享存储器,其中,所述线程分片是由GPU线程束中的连续若干个线程构成;线程分片中的各个线程依据自身线程编号计算出索引值访问位于共享存储器当中的活跃状态表中不同的位置,各个线程读出一个活跃状态编号,并清空该活跃状态表;线程分片从所述共享存储器中直接读取所述数据,并将其各个字节作为输入字符,再以各个线程所持有的状态编号作为行坐标,以该输入字符作为列坐标,索引查询虚拟NFA对应的虚拟NFA状态转换表,分别得到状态集合;其中,所述虚拟NFA状态转换表由超级相容组当中的虚拟NFA状态以及各个虚拟NFA状态之间的转换关系构成;在得到的所述状态集合中,对于任一个集合中的各个状态,根据各个线程的线程编号及对应的各个线程读出的活跃状态编号中集成的组编号,确定该状态在所述活跃状态表当中存储的位置,并将该状态的组编码值写入至所述活跃状态表中的该位置,所述的组编码值包含对超级相容组中的虚拟NFA状态进行编码获得的组状态编码结果和对超级相容组的组编号进行编码获得组编号编码结果;若当前处理的状态为接受状态时,则标记当前正处理的数据包,否则不标记;继续处理所述数据包中后续数据,直至数据包中的数据处理完毕。为使本发明方案的目的、技术方案和创新点更加清楚,下面将结合附图,对本发明实施例进行清晰、完整地描述。本发明实施例提供的匹配方法的具体实现流程如图I所示,可以包括步骤SlOl,计算NFA中所有状态彼此之间的相容性;上述相容性是指对于NFA中的任意两个状态i和j,如果它们在NFA的匹配过程当中不会同时处于活跃状态,则称这两个状态之间相容,否则称这两个状态之间是不相容;在确定NFA中的状态之间的相容性的过程中,具体可以采用逐步迭代的方式计算确定,相应的计算确定NFA所有状态两两之间的相容性过程可以包括(11)假设NFA的状态数目记为N,且其状态依次为0,1,2,…,N_l,则建立一个NXN的二维表,记为compatible-table,用于记录NFA中的各状态之间的相容性;在compatible-table中,第i+Ι行和第j+Ι列的表项由compatible-table[i][j]表示(O彡i,j〈N);如果状态i和j之间相容,贝丨J表项compatible-table[i][j]和compatible-table[j][i]内容为true(真),如果状态i和j之间不相容,贝丨J表项compatible-table[i][j]和compatible-table[j][i]的内容均为false(假);(12)建立第一队列queue并进行初始化;第一队列queue初始为空队列,对于NFA状态0,1,2,…,N-1,分别将表项compatible-table[O][O],compatible-table[I][I],compatible-table[2][2],···,compatible-table[N~l][N_l]的内容置为false,其余表项均为true;同时依次将状态对(0,0),(1,1),(2,2),…,(N_l,N-1)压入相应的第一队列queue中;(13)如果第一队列queue非空,则弹出队列首部的状态对(i,j),使用这两个状态i和j遍历0-255共256种输入查询NFA;对于当前的某个输入字符C,以状态i为源状态,字符c为转换字符,查询该NFA获得目的状态集合Di;以状态j为源状态,字符c为转换字符,查询该NFA获得目的状态集合Dj;(14)获得步骤(13)中得到的状态集合Di和状态集合Dj的并集DiUDj,对于该并集当中的任意两个状态所组成的状态对(s,t),如果表项compatible-table[s][t](或者compatible-table[t][s])的内容为true,则将该表项内容置为false,同时将状态对(s,t)压入队列queue的尾部,以实现针对建立的二维表中的各状态之间的相容性的识别记录;(15)判断上述第一队列是否非空,如果第一队列queue非空,返回执行步骤(13),否则,过程结束。通过上述计算处理过程可以看出,计算NFA所有状态之间相容性的过程中,若NFA的状态数为N,则至多需要进行N2次迭代就可以完成对所有状态的相容性计算。步骤S102,利用上述计算确定的相容性,将NFA状态划分到相容组中,该相容组是指在该相容组对应的一个状态集合中,任意两个状态之间均相容;在进行相容组的划分过程中,具体可以将NFA状态依据相容性进行分组的问题转换为等价的图论中求无向图独立集的问题。为便于对无向图的理解,下面首先对无向图中涉及的若干个概念进行描述,具体如下顶点,在NFA中的一个状态即为无向图中的一个顶点;边,NFA中如果两个状态不相容,则在这两个状态所代表的顶点之间连接一条边,称为无向图中的边;顶点度数,对于无向图中的一个顶点,与该顶点连接的边的总的数目称作是该顶点的顶点度数;边度数,无向图中一条边所关联的两个顶点的顶点度数之和称作该边的边度数。下面将对通过求解无向图独立集的方式进行相容组的划分的过程进行描述。在该过程中,是在将NFA中的状态和状态间相容性关系转换为一张无向图后,计算无向图顶点独立集,每个独立集对应一个相容组。具体的处理步骤包括(21)获得第二队列queue,如果第二队列queue已存在,则清空该队列,否则建立空的第二队列queue;(22)在当前的无向图中选取边度数最大的一条边,将该边压入第二队列queue中,同时从该无向图当中去除这条边,并更新剩余无向图当中各顶点度数和边度数;(23)判断是否出现以下任一种情况,若没有,则重复执行步骤(22),否则,执行以下两种情况中对应的处理情况一,当某一条边被选中并从无向图当中移除时,剩余图变为空,则这条边不压入第一队列queue,而拆分这条边的两个关联顶点,各自构成一个单元素的独立集,然后使用第一队列queue当中收集的边对应的状态对(即一个边对应一个状态对)构成新的无向图,并重新执行步骤(21);情况二,当剩余图中不存在边并且第二队列queue非空,则将剩余图中顶点构成一个顶点独立集,还将第二队列queue中可以放入该独立集的顶点加入到该独立集当中,之后使用队列当中剩余的顶点构成新的无向图,并重新执行步骤(21);其中,可以放入该独立集的顶点是指第二队列queue中与上述一个顶点独立集中的状态相容的顶点。在上述处理过程中,如果第二队列queue为空,即NFA中的各个状态均划分到相应的相容组中,则处理过程结束。完成上述处理过程后,NFA中状态对应的顶点集合被划分为一个或者多个顶点独·立集,即NFA中的状态被划分为与顶点独立集数目相同的相容组,每个顶点独立集中顶点由所代表的状态替换后便得到相应的一个相容组,整个NFA中状态最终被分入一个或多个相容组中,从而完成了相容组的划分操作。步骤S103,将上述步骤S102获得的相容组合并为超级相容组,该超级相容组是由一个或者多个相容组中的状态集合在一个分组中获得;在该步骤中,合并生成超级相容组的具体处理过程可以包括(31)若将M个相容组(CojCijC2,..·,CM_J合并成K个超级相容组{S。,S1,S2,..·,SK_J,其中0〈K(Μ,Κ和M均为正整数,则需要按照各个相容组内状态数的大小进行降序排序,得到lc',,C12,...,c'M_J,对于相容组Ci,其状态数记为ICi|,对该集合中所有状态完成编码,至少需要的比特数为flog2(|Ci|+1)1;(32)建立K个超级相容组(Sc^SpS2,...,SK_J,各个超级相容组初始时均为空集,即其所占用比特数均为O;(33)从降序排列的相容组集合IC'0,C'1;C'2,...,C'M_J当中顺序依次取出相容组C|,并将其加入到当前占用比特数最少的超级组Sk当中,并更新该超级相容组Sk占用的比特数;每个超级相容组当前占用的比特数为其所包含的相容组各自所占比特数之和,假设超级相容组Sk原有占用的比特数为B,加入相容组Cl之后,所占用的比特数B~B*Eog2i|CijI)1步骤S104,对于超级相容组组内的状态进行重新编码,形成虚拟状态(即虚拟NFA的状态),并构造出虚拟NFA;通常一个超级相容组由若干个相容组组成,由这若干个相容组各自提供自身组内的一个状态进行联结,所构成的复合状态即为超级相容组的状态,称为虚拟状态,或称为虚拟NFA的状态;由于超级相容组首先是由相容组合并得来,因此,对于超级相容组中状态进行编码时,首先要完成对于相容组中的NFA状态的编码,在这些编码基础上构造出超级相容组中的状态的编码。具体的重新编码过程可以包括(41)当前共有K个超级相容组{\,S1,S2,,SK_J,依次对于各个超级相容组Sk进行编码,获得针对各个超级相容组Sk的组状态编码结果;具体地,超级相容组Sk由m(m>0)个相容组{C。,C1,C2,,Cm_J组成,对于各个相容组Cj的组内状态进行编码,相容组Cj的状态数为IcjI,编码后的状态编号为1,2,3,…,icj,编码所需要的比特数为权利要求1.一种基于图形处理单元的非确定有限自动机的匹配方法,其特征在于,包括计算非确定有限自动机NFA中所有状态两两之间的相容性,并根据所述相容性对所述各个状态进行编码形成虚拟NFA,以获得虚拟NFA对应的虚拟NFA状态转换表;其中,所述相容性是指,若NFA中的两个状态在NFA匹配过程中不同时处于活跃状态,则该两个状态相容,否则,为不相容;将所述虚拟NFA状态转换表存储在图形处理单元GPU的全局存储器中,并基于该虚拟NFA状态转换表匹配经过交织处理的待处理数据包中数据。2.根据权利要求I所述的方法,其特征在于,所述计算NFA中所有状态两两之间的相容性的步骤包括针对NFA状态建立NXN的二维表,N为NFA的状态数目,NFA状态依次为O,1,2,…,N-I;在该二维表中,第i+Ι行和第j+Ι列的表项由[i,j]表示;如果状态i和j是相容的,则表项[i,j]内容设置为true,如果状态i和j是不相容的,则表项[i,j]内容设置为false;其中,分别将表项,[1,1],[2,2],…,[N_1,N_1]的内容置为false;建立初始为空的第一队列queue并进行初始化,依次将状态对(0,0),(1,1),(2,2),···,(N-1,N-1)压入第一队列queue中;弹出第一队列queue首部的状态对(i,j),使用状态i,j遍历全部可能的输入字符0-255查询NFA状态,其中,以当前输入字符作为转换字符,以状态i为源状态,查询该NFA状态获得目的状态集合Di,以状态j为源状态,查询该NFA状态获得目的状态集合Dj;检查状态集合Di和状态集合Dj的并集DiUDj,并将该并集当中的任意两个状态所组成的状态对(s,t)对应的所述二维表表项内容置为false,若状态对(s,t)所对应的二维表表项中的内容之前记录为true,则还需要将状态对(s,t)压入第一队列queue的尾部;判断第一队列queue是否非空,如果是,过程结束,否则,继续再执行所述弹出第一队列queue首部的状态对(i,j)的步骤。3.根据权利要求I或2所述的方法,其特征在于,所述根据所述相容性对所述各个状态进行编码形成虚拟NFA的步骤包括根据所述相容性将NFA中的所有状态分组,获得至少一个相容组,所述相容组中的任意两个状态之间相容;将得到的所述相容组合并获得超级相容组,再对所述超级相容组进行编码形成虚拟状态,并获得虚拟NFA。4.根据权利要求3所述的方法,其特征在于,所述根据所述相容性将NFA中的所有状态分组,获得至少一个相容组的步骤包括获得空的第二队列queue,在建立的无向图中一次或多次选取边度数最大的一条边,将该边对应的两个顶点对应的状态压入所述第二队列queue,并从该无向图当中去除这条边,更新剩余无向图当中各项顶点度数和边度数;其中,所述无向图的顶点为NFA的一个状态,边为NFA中两个不相容的状态对应的顶点之间的连线,顶点度数为与该顶点相连的边的总数目,边度数为该边所关联的两个顶点的顶点度数之和;在建立的无向图中一次或多次选取边度数最大的一条边的过程中,若当前被选中边从无向图当中移除,剩余图变为空,则这条边不压入第二队列queue,拆分这条边的两个关联顶点,各自构成一个单元素的独立集,再使用第二队列queue中收集的边对应的状态对构成新的无向图,并执行所述获得空的第二队列queue的步骤,所述的独立集对应一个相容组;若剩余无向图中不存在边并且非空,则将无向图中剩余顶点构成一个顶点独立集,将第二队列queue中与该独立集中的状态相容的NFA状态加入该独立集中,再使用第二队列queue中剩余的顶点构成新的无向图,并执行所述获得空的第二队列queue的步骤;若第二队列queue空,则过程结束。5.根据权利要求3所述的方法,其特征在于,所述将得到的所述相容组合并获得超级相容组的步骤包括按照相容组状态数的大小进行降序排序,得到降序排列的相容组集合;从所述降序排列的相容组集合中依次顺序取出相容组并加入到当前占用比特数最少的超级相容组当中,同时更新该超级相容组占用的比特数,其中,每个超级相容组初始占用的比特数为O。6.一种基于图形处理单元的非确定有限自动机的匹配装置,其特征在于,包括虚拟NFA建立模块,用于计算非确定有限自动机NFA中所有状态两两之间的相容性,并根据所述相容性对所述各个状态进行编码形成虚拟NFA,获得虚拟NFA对应的虚拟NFA状态转换表;其中,所述相容性是指,若NFA中的两个状态在NFA匹配过程中不同时处于活跃状态,则该两个状态相容,否则,为不相容;匹配处理模块,用于将所述虚拟NFA建立模块获得的虚拟NFA状态转换表存储在图形处理单元GPU的全局存储器中,并基于该虚拟NFA状态转换表匹配经过交织处理的待处理数据包中数据。7.根据权利要求6所述的装置,其特征在于,所述虚拟NFA建立模块为执行计算NFA中所有状态两两之间的相容性的处理,则包括状态表建立模块,用于针对NFA状态建立NXN的二维表,N为NFA的状态数目,NFA状态依次为O,I,2,-,N-I;在该二维表中,第i+Ι行和第j+Ι列的表项由[i,j]表示;如果状态i和j是相容的,则表项[i,j]内容设置为true,如果状态i和j是不相容的,则表项[i,j]内容设置为false;其中,分别将表项[O,O],[1,I],[2,2],…,[N_1,N_1]的内容置为false;第一队列建立模块,用于建立初始为空的第一队列queue并进行初始化,依次将状态对(0,0),(1,1),(2,2),…,(N-LN-I)压入第一队列queue中;二维表调整模块,用于弹出所述第一队列建立模块建立的第一队列queue首部的状态对(i,」_),使用状态1,j遍历全部可能的输入字符0-255查询NFA状态,其中,以当前输入字符作为转换字符,以状态i为源状态,查询该NFA状态获得目的状态集合Di,以状态j为源状态,查询该NFA状态获得目的状态集合Dj;检查状态集合Di和状态集合Dj的并集DiUDj,并将该并集当中的任意两个状态所组成的状态对(s,t)对应的所述状态表建立模块建立的二维表表项内容置为false,若状态对(s,t)所对应的二维表表项中的内容之前记录为true,则还需要将状态对(s,t)压入第一队列queue的尾部;判断模块,用于在所述二维表调整模块执行操作后,判断所述第一队列queue是否非空,如果是,过程结束,否则,通知所述二维表调整模块,以继续再执行所述弹出第一队列queue首部的状态对(i,j)的步骤。8.根据权利要求6或7所述的装置,其特征在于,所述虚拟NFA建立模块为执行根据所述相容性对所述各个状态进行编码形成虚拟NFA的处理,则包括相容组建立模块,用于根据所述相容性将NFA中的所有状态分组,获得至少一个相容组,所述相容组中的任意两个状态之间相容;获得虚拟NFA模块,用于将所述相容组建立模块得到的所述相容组合并获得超级相容组,再对所述超级相容组进行编码形成虚拟状态,获得虚拟NFA。9.根据权利要求8所述的装置,其特征在于,所述相容组建立模块包括第二队列处理模块,用于获得空的第二队列queue,在建立的无向图中一次或多次选取边度数最大的一条边,将该边对应的两个顶点对应的状态压入所述第二队列queue,并从该无向图当中去除这条边,更新剩余无向图当中各项顶点度数和边度数;其中,所述无向图的顶点为NFA的一个状态,边为NFA中两个不相容的状态对应的顶点之间的连线,顶点度数为与该顶点相连的边的总数目,边度数为该边所关联的两个顶点的顶点度数之和;无向图处理模块,用于所述第二队列处理模块在建立的无向图中一次或多次选取边度数最大的一条边的过程中,若当前被选中边从无向图当中移除,剩余图变为空,则通知所述第二队列处理模块这条边不压入第二队列queue,拆分这条边的两个关联顶点,各自构成一个单元素的独立集,再使用第二队列queue中收集的边对应的状态对构成新的无向图,并通知所述第二队列处理模块执行所述获得空的第二队列queue的处理,所述的独立集对应一个相容组;若剩余无向图中不存在边并且非空,则将无向图中剩余顶点构成一个顶点独立集,将所述第二队列queue中与该独立集中的状态相容的NFA状态加入该独立集中,再使用第二队列queue中剩余的顶点构成新的无向图,并通知所述第二队列处理模块执行所述获得空的第二队列queue的处理;若第二队列queue空,则过程结束。10.根据权利要求8所述的装置,其特征在于,所述获得虚拟NFA模块为执行将得到的所述相容组合并获得超级相容组的处理,则包括排序处理模块,用于按照相容组状态数的大小进行降序排序,得到降序排列的相容组集合;超级相容组建立模块,用于从所述排序处理模块得到的降序排列的相容组集合中依次顺序取出相容组并加入到当前占用比特数最少的超级相容组当中,并同时更新该超级相容组占用的比特数,其中,每个超级相容组初始占用的比特数为O。全文摘要本发明公开了一种基于图形处理单元的非确定有限自动机的匹配方法及装置,其包括首先,计算非确定有限自动机NFA中所有状态两两之间的相容性,并根据所述相容性对所述各个状态进行编码形成虚拟NFA,获得虚拟NFA对应的虚拟NFA状态转换表;其中,所述相容性是指,若NFA中的两个状态在NFA匹配过程中不同时处于活跃状态,则该两个状态相容,否则,为不相容;之后,将所述虚拟NFA状态转换表存储在图形处理单元GPU的全局存储器中,并基于该虚拟NFA状态转换表匹配经过交织处理的待处理数据包中数据。本发明实施例的实现可以有效降低匹配过程中的复杂程度,提高基于NFA的匹配速度,很好地当前克服了现有技术中存在的问题。文档编号G06F17/30GK102902713SQ20121029034公开日2013年1月30日申请日期2012年8月15日优先权日2012年3月29日发明者董群峰申请人:中国科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1