CN108628953A - 一种基于fpga的并行字符串匹配算法 - Google Patents

一种基于fpga的并行字符串匹配算法 Download PDF

Info

Publication number
CN108628953A
CN108628953A CN201810307836.4A CN201810307836A CN108628953A CN 108628953 A CN108628953 A CN 108628953A CN 201810307836 A CN201810307836 A CN 201810307836A CN 108628953 A CN108628953 A CN 108628953A
Authority
CN
China
Prior art keywords
string
character
substring
parallel
fpga
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.)
Granted
Application number
CN201810307836.4A
Other languages
English (en)
Other versions
CN108628953B (zh
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.)
Sun Yat Sen University
Original Assignee
Sun Yat Sen University
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 Sun Yat Sen University filed Critical Sun Yat Sen University
Priority to CN201810307836.4A priority Critical patent/CN108628953B/zh
Publication of CN108628953A publication Critical patent/CN108628953A/zh
Application granted granted Critical
Publication of CN108628953B publication Critical patent/CN108628953B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种基于FPGA的并行字符串匹配算法,通过FPGA并行处理来实现在一个时钟周期找到模式字符串前j个字符的子串,以及它的前缀和后缀的最大公共元素值,通过前缀和后缀的最大公共元素值可直接得到并输出NEXT数组,利用NEXT数组可实现多个模式字符串的并行匹配。

Description

一种基于FPGA的并行字符串匹配算法
技术领域
本发明涉及信息处理领域,更具体地,涉及一种基于FPGA的并行字符串匹 配算法。
背景技术
随着计算机硬件的不断发展,服务器和终端中CPU加协处理器的并行处理 数据已得到广泛应用,尤其是FPGA在计算数据密集型中的加速。FPGA具有可 重构、并行化程度高等显著优点,已成为当下常用的加速设备,近年来,越来越 多的基于数据中心部署FPGA并行处理架构,利用FPGA的硬件资源将复杂算法 进行加速处理已成为一种优化性能的新途径。针对信息处理过程中的字符串匹配 算法,目前,较为经典的有KMP算法、BM算法以及基于BM算法改进提出的 一种QS算法。现在均已广泛用于各种字符串匹配的各种场合,尽管KMP算法 很早就已提出,但是其算法具有良好扩展性和实用性,时至今日仍然是目前广为应用的算法。但是,随着数据流的不断增长和近年来硬件加速的普遍化,在硬件 中实现KMP核心算法是非常有必要的,也是大势所趋。
KMP是一种模式匹配算法,此算法是在BF算法的基础上进行改进的一种 高效率算法。BF算法是一种朴素的字符串匹配算法,其实现过程是通过遍历字 符串的每一个位置,顺序匹配字符串的每一个字符。BF算法起始于文本字符串 T的第一个字符和模式字符串P中的第一个字符开始比较,如果其匹配成功,然 后比较后续字符,否则文本字符串的下一个字符起在重新和模式字符串的第一个 字符进行比较。算法描述如下:
文本字符串:T=s1s2…sn
模式字符串:P=p1p2…pm
以上字符串的长度一般满足条件n>m,那么朴素的BF算法完成匹配的执行 步骤为:
(1)文本字符串T与模式字符串P左端对齐,使得开始于s1与p1
(2)从左到右文本字符串T与模式串P的每一个字符,直到出现不匹配的 情况,就执行步骤(3),若是模式串P已经被完全匹配,则匹配成功,结束匹配。
(3)将P向右移动一个字符的位置,再次从模式串的第一个字符开始匹配;
(4)不断重复上述(2)的过程,直到匹配成功,结束匹配。
在模式字符串右移一位后,朴素的BF算法已将丢失了之前已经匹配到的字 符的所有信息。因此,它可能会重复比较文本字符串的字符与模式串中的字符。 这导致其最坏的情况下的复杂度是O(mn)。KMP算法利是基于此缺点,利用了 之前已经匹配到的信息,避免了重复匹配的情况。
因此,KMP算法的在搜索阶段的复杂度降到了O(n)。如图1所示的匹配过 程示例,在第三趟匹配中,当i=7、j=5字符比较不等时,又从i=4、j=1重新开 始比较,然而,在i=4和j=1,i=5和j=1以及i=6和j=1这三个比较都是不必进 行的。仅仅需要模式字符串向右滑动3个字符的位置继续进行i=7,j=2时的字 符串比较即可。同理,在第一趟匹配过程中出现不等时,仅需要模式字符串向右 移动两个字符的位置继续进行i=3,j=1时的字符比较。由此,整个匹配过程中, i指针都没有回溯。
一般地,假设文本串T=s1s2…sn,模式串为P=p1p2…pm,那么当匹配过 程中产生“失配”(即si≠pj)时,换言之,当文本串的中第i个字符与模式字符 串中第j个字符“失配”(即比较不等)时,文本中第i个字符应与模式串中的第 k(k<j)个字符继续进行比较。因此,模式字符串中前k-1个字符必须满足下列 关系式,且不可能存在k’>k满足下列关系式:
p1p2…pk-1=si-k+1si-k+2…si-1#(1-1)
而已经得到的“部分匹配”的结果是:
pj-k+1pj-k+2…pj-1=si-k+1si-k+2…si-1#(1-2)
由式(1-1)和式(1-2)可推出以下等式:
p1p2…pk-1=pj-k+1pj-k+2…pj-1#(1-3)
反之,如果模式字符串中存在满足式(1-3)的两个子串,则在匹配过程中,文 本串中第i个字符与模式串中第j个字符比较不等时,仅需要模式字符串向右滑 动至模式字符串中第k个字符与文本串中第i个字符对齐,此时,模式字符串种 前k-1个字符的子串p1p2…pk-1必然与文本串中第i个字符之前长度为k-1的子 串si-k+1si-k+2…si-1相等,由此,匹配仅需要从模式字符串中第k个字符与文本 字符串中第i个字符继续进行匹配。
若令NEXT[j]=k,则NEXT[j]就表示,当模式字符串中第j个字符与文本字符 串中相应字符“失配”时,在模式中需要重新和文本串中该字符进行比较的字符 的位置。由此可引出NEXT函数的定义:
由此定义可推出下列模式串的NEXT函数值:
j 1 2 3 4 5 6 7 8
模式串 a b a a b c a c
NEXT[j] 0 1 1 2 2 3 1 2
由定义可知,NEXT函数值仅取决于模式字符串本身而与相匹配的文本串无 关。本发明可以从定义出发用递推的方法求得NEXT函数值。
由定义知:
NEXT[1]=0#(1-4)
设NEXT[j]=k,这表明在模式字符串中存在下列关系:
p1…pk-1=pj-k+1…pj-1#(1-5)
其中k为满足1<k<j的某个值,并且不可能存在k’>k满足等式(1-5)。此时 模式字符串的下一个字符的NEXT函数值NEXT[j+1]取值满足以下两种情况:
(1)若pk=pj,则表明在模式字符串中有:
p1…pk=pj-k+1…pj#(1-6)
并且不可能存在k’>k满足等式(1-6),这就是说NEXT[j+1]=k+1,即
NEXT[j+1]=NEXT[j]+1#(1-7)
(2)若pk≠pj,则表明在模式字符串中
p1…pk≠pj-k+1…pj#(1-8)
此时,本发明可以把计算NEXT函数值的问题看成一个模式匹配的问题, 整个模式字符串既是文本字符串又是模式字符串,而当前在匹配的过程中已有 pj-k+1=p1,pj-k+2=p2,…,pj-1=pk-1,则当pk≠pj时,模式字符串向右滑动, 模式中的第NEXT[k]个字符和文本字符串中的第j个字符相比较。如NEXT[k]=k’, 且pk=pj,则说明在文本串中第j+1个字符之前存在一个长度为k’(即NEXT[k]) 的最长子串,和模式字符串从首字符起,长度为k’的子串相等,即
p1…pk′=pj-k′+1…pj(1<k′<k<j)#(1-8)
这就是说NEXT[j+1]=k’+1即
NEXT[j+1]=NEXT[NEXT[k]]+1#(1-9)
同理,如pj≠pk,,则继续向右滑动,直至模式字符串中第NEXT[k’]个字符 和pj对齐,……,以此类推,直至pj和模式串中某个字符匹配成功或者不存在任何 k’满足等式(1-8),则
NEXT[j+1]=1#(1-10)
例表1所示,已知前6个字符的NEXT函数值,现求NEXT[7],因为 NEXT[6]=3。
表1模式字符串NEXT函数值
又p6≠p3,则需要比较p6和p1(因为NEXT[3]=1),这就相等于将子模式串 向右移动。由于p6≠p1,而且NEXT[1]=0,所以NEXT[7]=1,而因为p7=p1,则 NEXT[8]=2。
根据以上分析,可得到NEXT函数值的算法。
伪代码如下:
以上计算模式字符串NEXT函数值的过程称为KMP算法的第一个阶段,即 就是模式字符串的自匹配过程。KMP算法的另一个阶段字符串匹配过程,该阶 段利用计算的NEXT值进行字符匹配。由前面的分析可知,在KMP算法执行过 程中,模式字符串匹配失败之后,模式字符串可以跳过一些无法匹配成功的位置, 无需从待匹配字符串的下一个位置进行匹配。这主要是因为模式字符串可利用计 算得到的NEXT数值进行快速匹配,是KMP算法在字符匹配是效率大大提升, 其算法的时间复杂度为O(m+n),这是因为模式字符串自匹配的时间复杂度为 O(m),搜索匹配的时间复杂度为O(n)。
发明内容
本发明提出了一种基于FPGA的并行字符串匹配算法,旨在针对于信息处理 过程中硬件加速字符串匹配以获得更高的匹配效率。
为实现以上发明目的,采用的技术方案是:
一种基于FPGA的并行字符串匹配算法,通过FPGA并行处理在一个时钟周 期找到模式字符串前j个字符的子串,以及它的前缀和后缀的最大公共元素值, 通过前缀和后缀的最大公共元素值直接得到并输出NEXT数组,利用NEXT数 组进行字符匹配。
通过对算法的分析可知,NEXT函数值的计算过程是一个递推的过程,已知 初值去求解下一个值,在pj≠pk时,是一个向前不断迭代的过程。为了发挥硬 件中的并行优势,采用状态机实现显然并不能将算法并行化。本发明考虑到硬件 的并行性,将使用以下方式去求解NEXT函数值。
首先,给出以下定义:
给定一个字符串P=p1p2…pm,其中,p1,p1p2,…,p1p2…pm称之为P的前 缀,而pm,pm-1pm,…,p1p2…pm则称之为P的后缀。例如,字符串‘abbc’的前缀 有‘a’,‘ab’,‘abb’,‘abbc’,同样地其后缀有‘c’,‘bc’,‘bbc’,‘abbc’。
结合以上定义,由NEXT函数定义可知,如果NEXT[j]=k,则在模式字符串 中满足关系:
p1…pk-1=pj-k+1…pj-1#(2-1)
其中k为满足1<k<j的某个值,并且不可能存在k’>k满足等式(2-1)。换句 话说就是,在模式字符串第j个字符之前的子串:p1…pj-1(已经匹配的字符串) 的前缀p1…pk-1和后缀pj-k+1…pj-1相等,并且不存在更大的前后缀相等,即满 足条件的前缀和后缀,是p1…pj-1子串(已经匹配的字符串)前缀和后缀最大的 公共元素,k-1为最大公共元素的长度。由这里的k为满足1<k<j的某个值,所 以,这里满足条件的前缀和后缀不包含p1…pj-1自身且最小前缀是p1最小后缀是 pj-1
假设有si≠pj,说明模式字符串的第j个元素失配,NEXT[j]是pj对应的 NEXT函数值,模式字符串需要向右滑动j-NEXT[j]个字符位置重新开始匹配。 由上面的关系,也等价于向右滑动j-(Max[j-1]+1)(Max[j-1]=k-1),这里的Max[j] 表示模式字符串的前j个子符的子串,除去本身的前缀和后缀最大的公共元素长 度值。于是综合可得到:
那么,如果满足条件1<Max[j]<j,即也就是满足式(2-1)。对应的最大元素长 度值和NEXT函数值的对应关系如表2所示,其中黑色箭头所指的Max值与 NEXT函数值满足式(2-2),即NEXT[j]=Max[j-1]。
由上面的推导可知模式字符串各字符对应的NEXT函数值与此字符前面的 子串,其前缀和后缀最大公共元素值Max的关系。例如,给定模式串’abcdabd’, 如表3所示,给出了前j个字符的子串,其前后缀以及最大公共元素长度的值。
表2 Max值与NEXT函数值关系表
综上推导可知,模式字符串的NEXT函数值的求解过程可用模式字符串前j 个字符的子串,其前缀和后缀的最大公共元素长度的求解过程替代。根据式(2-2) 可知,假设模式字符串长度为m,只需要找到前m-1字符的子串,其前缀和后 缀的最大公共元素的长度。这种操作过程在硬件中实现是非常有优势的,不需要 去实现迭代操作,用到的是硬件中最基本的比较操作。特别是在对多个模式处理 的系统中更是具有优越性。
表3模式串abcdabd前j个子串的前后缀情况
表4模式串abcdabd前j个子串的前后缀情况
根据式(2-2),由表3所求出的最大公共元素长度,本发明只需要Max[0]到 Max[j-1]这j-1个值,这是因为根据定义式(1-4)知NEXT[1]=0,本发明仅仅需要 求解NEXT[2]到NEXT[j]这j-1个值。而这j-1个NEXT函数值又与j-1个Max 值相关。当Max=0时,由式(2-2)可得NEXT[1]等于1,Max存在且不为零时, NEXT[j]=Max[j-1],于是有Max值可得出NEXT函数值,如表4所示。
本发明提出一种基于硬件的KMP算法的字符串匹配,在模式匹配的过程中 需要硬件实现NEXT函数值的计算。本发明采用并行的处理方式实现NEXT函 数的计算。具体过程如下:
根据前面的推论可知,本发明转而去寻找模式字符串前j个字符的子串,它 的前缀和后缀的最大公共元素长度。假设给定模式串p1p2…pm,首先,列出模 式字符串前j个字符的子串,j=1时,有子串为p1,j=2时,有子串为p1p2,…… 依次类推,j=k时,对应的子串是p1p2…pk。然后分别列出每一个子串,它所有 的前缀和后缀,然后,根据前后缀长度大小分别进行比较。每一个比较器输出用 1bit表示,如果相等就置1,否则就清零。显然,j=1时,子串为“a”,除去自身 后无其他前缀和后缀,所以Max[1]=0,根据式(2-2)可得NEXT[2]=1。于是处理 过程从j=2开始,假设模式串长度为m,那么处理的最后一个是j=m-1。于是需 要m-2个处理子模块。如图2所示,展示了j=2到j=6这5个子模块的并行处理 结构,具体分别为:
j=2:比较p1与p2,如果相等就输出s1=1,否则s1=0;
j=3:比较p1与p3,p1p2与p2p3,如果相等就分别输出s2=1,s3=1,否则s2=0, s3=0;
j=4:比较p1与p4,p1p2与p3p4,p1p2p3与p2p3p4,如果相等就分别输出s4=1, s5=1,s6=1,否则s4=0,s5=0,s6=0;
j=5:比较p1与p5,p1p2与p4p5,p1p2p3与p3p4p5,p1p2p3p4与p2p3p4p5,如果 相等就分别输出s7=1,s8=1,s9=1,s10=1,否则s7=0,s8=0,s9=0,s10=0;
j=6:比较p1与p6,p1p2与p5p6,p1p2p3与p4p5p6,p1p2p3p4与p3p4p5p6,p1p2p3p4p5与p2p3p4p5p6,如果相等就分别输出s11=1,s12=1,s13=1,s14=1,s15=1,否则 s11=0,s12=0,s13=0,s14=0,s15=0。
依次类推。
以上过程都是同时发生的,于是可以同时得到输出s1,s2,s3,s4,s5,s6, s7,s8,s9,s10,s11,s12,s13,s14,s15。将输出的这些二进制记为矢量标 志位。然后分别将标志位按s1,s2s3,s4s5s6,s7s8s9s10,s11s12s13s14s15作为 编码器的输入,如图3所示。通过编码器Encoder_1、Encoder_2、Encoder_3、 Encoder_4、Encoder_5对输入进行高位优先级进行编码,输出分别为Max[2]、 Max[3]、Max[4]、Max[5]、Max[6]。
然后根据式(2-2)非常容易判断,如果编码器的输出Max[j]=0,那么对应的 NEXT函数值NEXT[j+1]=1。如果编码器的输出Max[j]≠0,那么对应的NEXT 函数值NEXT[j+1]=Max[j]+1。于是得到对应的NEXT函数值NEXT[3],NEXT[4], NEXT[5],NEXT[6],NEXT[7]。
又由定义知,NEXT[1]=0,MAX[1]=0,那么NEXT[2]=1,从而所有的NEXT 函数值即可得到。这里在硬件中用分别用到一个比较器和一个加法器,即在Max 元素值到NEXT函数值之间通过一个零值比较器,如果为零,就赋NEXT函数 值为1,否则就通过加法器进行加1。通过以上的过程,最快可以实现在一个时 钟周期内完成。
以上提到的编码器采用最高位优先级编码,例如图3中的Encoder_5b编码 器,其编码如表5所示。编码实例如图7所示。
表5高位优先级编码
s15s14s13s12s11 Max[6] NEXT[7]
00000 0 1
00001 1 2
0001* 2 3
001** 3 4
01*** 4 5
1**** 5 6
为实现对多个模式匹配同时匹配的目的,本发明的技术方案为:
实现文本字符串对多个模式串的操作,可利用这种硬件的并行性提出一种多 模式匹配引擎,其引擎架构如图4所示。这也是KMP算法的第二个阶段,根据 NEXT函数值,实现移位匹配的过程。每一个模式字符串都对应一个NEXT数组。 前面已经完成了对NEXT函数值的实现,即在一个时钟周期就可完成模式字符 串的NEXT数组的计算。然后,构建并行的匹配引擎同时对不同的模式进行匹 配操作,如图5所示。在这里每一个匹配引擎过程其算法如下:
假设现在文本串T匹配到i位置,模式串匹配到j位置;
如果j=1,或者当前字符匹配成功(即T[i]==P[j]),则i++,j++,继续匹配 下一字符;
如果j!=1,且当前字符串匹配失败(即T[i]!=P[j]),则i保持不变,j=Next[j]。此过程表示,匹配失败时,模式串P相对于文本串T向右移动了j-NEXT[j]位。 换言之,当匹配失败时,模式串向右移动的位数位:匹配失败字符所在位置减去 匹配失败字符对应的NEXT值,而移动的实际位数是j-NEXT[j],且此值大于等 于1。
由此可见,在KMP算法执行过程中,当模式匹配失陪时,模式字符串可以 跳过一些无法匹配的位置,而无需从待匹配的字符串的下一个位置进行逐个匹配, 其核心是因为模式字符串可以利用自匹配过程中产生的NEXT数据进行快速匹 配,使KMP算法在字符串匹配时的效率大幅度提高。在实现多个模式匹配同时 匹配的目的,本发明对多个模式字符串并行地处理,在一个是时钟周期内就完成 相应NEXT数组的计算,然后,设计每一个单模式匹配引擎,形成多个匹配引 擎再实现同时匹配多个模式的匹配引擎。
KMP算法的伪代码如下:
根据以上分析,实现KMP算法的匹配过程这里采用状态机实现,总共有三 个状态完成整个文本字符串与模式字符串的匹配,各个状态的功能如下:
idle:此状态是开始匹配的起始状态,就是在模式字符串的第一个字符P[1] 与待匹配的文本串的第一个字符T[1]开始匹配。如果匹配成功就跳转到下一状态, 否则,继续在此状态内对文本串的下一个字符继续匹配,每一个时钟周期完成一 个字符的匹配过程,如果没有就一直在此状态内,直到有匹配成功才能跳转到下 一个状态start。
start:此状态是在idle状态完成模式串的第一个字符串匹配成功后进入的。 在此状态时钟周期的上升沿到来时继续匹配文本串T[2]与模式串P[1],如果匹配 失败就会跳转到下一状态kmp,如果继续匹配成功就还在此状态里重复之前的操 作,直到模式串的所有字符都匹配成功就说明在文本串中匹配到该模式串。
kmp:此状态是实现KMP算法的核心功能,在start状态发生失配时,将完 成算法操作的j=NEXT[j]后,在此过程实现通过将根据NEXT数组进行相应的移 位操作。然后再次就转到start状态,这里设置一个字符计数器counter对匹配到 的值进行计数。然后将直接作为输出的标志,在满足匹配完成条件,即模式字符 串全部匹配完成,就输出Match=1,表示匹配成功。
与现有技术相比,本发明的有益技术效果体现在:
1.经典的字符串KMP算法是以软件实现的,算法中的迭代、遍历操作都是 顺序实现的。当字符串长度数目很大时,匹配效率很低,近年来,通过将软件算 法的实现在硬件中已有实现,目前已有基于GPU并行的字符串匹配算法,而本 发明在同样地将算法的软件完成的任务卸载到硬件中实现,将在FPGA平台中实 现,具有更高度匹配速率。
2.本发明在基于FPGA的并行匹配字符串实现,由于FPGA的可重构性, 与GPU架构的实现相比,更加具有灵活性。
3.在计算KMP算法的核心内容NEXT数组的过程,实现了高度并行化,可 同时操作多个模式字符串。可用于同时匹配多模式的系统。
4.实验结果表明,本发明提出的基于FPGA的并行字符串匹配算法与基于 GPU并行的算法相比,具有更好的性能,能够更灵活地实现。
附图说明
图1是KMP算法执行过程图。
图2是子模块并行结构的示意图。
图3是编码并得到NEXT函数值的示意图。
图4是多模式匹配引擎的示意图。
图5是匹配状态过程图。
图6是实例并行比较图。
图7是实例编码过程图。
图8是实例KMP匹配过程图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
以下结合附图和实施例对本发明做进一步的阐述。
实施例1
为了方便说明技术方案进行详细说明,给出在FPGA中如何实现本方案的设 计,给出一个实例,模式字符串P=abcdabd,在表2-2中已经给出了前j个字符 的子串,以及它的前缀和后缀以及最大公共元素长度。如图6所示是此模式字符 串并行处理过程。对j=2到j=6对应的子串,分别进行比较,每一个视为一个模 块,具体分别为:
j=2:比较a与b,如果相等就输出s1=1,否则s1=0;
j=3:比较a与c,ab与bc,如果相等就分别输出s2=1,s3=1,否则s2=0, s3=0;
j=4:比较a与d,ab与cd,abc与bcd,如果相等就分别输出s4=1,s5=1, s6=1,否则s4=0,s5=0,s6=0;
j=5:比较a与a,ab与da,abc与cda,abcd与cdba,如果相等就分别输 出s7=1,s8=1,s9=1,s10=1,否则s7=0,s8=0,s9=0,s10=0;
j=6:比较a与b,ab与ab,abc与dab,abcd与cdab,abcda与bcdab,如 果相等就分别输出s11=1,s12=1,s13=1,s14=1,s15=1,否则s11=0,s12=0, s13=0,s14=0,s15=0。
综上可容易的s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15。按高位列出其 比较结果如下:
s s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1
0 0 0 1 0 0 0 0 1 0 0 0 0 0 0
由s15s14s13s12s11=00010,s10s9s8s7s=0001,s6s5s4s3s=000,s3s2=00,s1=0,如 图8所示,分别通过编码器Encoder_5、Encoder_4、Encoder_3、Encoder_2、Encoder_1编码后得到Max的值。
由定义知,Max[1]=0,而由图8中的过程的编码后知,Max[2]=0,Max[3]=0, Max[4]=0,Max[5]=1,Max[6]=2。列出如下:
j 1 2 3 4 5 6 7
pj a b c d a b d
Max 0 0 0 0 1 2 -
根据式(2-2),Max[1]=0,则NEXT[2]=1;Max[2]=0,则NEXT[3]=1;Max[3]=0,则NEXT[4]=1;Max[4]=0,则NEXT[5]=1;Max[5]=1,则NEXT[6]=2;Max[6]=2, 则NEXT[7]=3,此外,有NEXT函数的定义知,NEXT[1]=0,这里在硬件中, 从Max到NEXT函数值的转换只需要一个比较器和加法器。于是列出如下:
j 1 2 3 4 5 6 7
pj a b c d a b d
NEXT 0 1 1 1 1 2 3
综上所述是整个硬件实现的过程,以上的操作都是可以同时发生的。因此, 最快可以在一个时钟周期内完成模式字符串的NEXT函数值的计算,在实现多 模式匹配过程中能发挥其高效性能。
2.模式匹配引擎到实行过程
为了方便说明技术方案进行详细说明,给出在FPGA中如何实现本方案的设 计,给出一个实例,模式字符串依然用上例中的P=abcdabd,文本字符串可以取 T=bbcabcdaabcdabde。为了说明匹配状态的跳转过程,将以所在状态来说明:
(1)idle:此状态为起始状态,为了实行算法匹配时对模式字符串与文本字 符串的左端对齐,即开始比较字符P[1]与T[1],如果比较不等,保持模式字符串 的索引值j=1不变,对文本串的索引值i加1,同时将状态机的下一状态给定为 idle,也就是说接下来继续在此状态比较P[1]与T[2],直到在文本字符串中有字 符与模式字符串的第一个字符P[1]相等,就跳转到下一状态start。否则就一直在 idle状态之中。如图8(a)所示,是idle初始状态时P[1]≠T[1]的状态。
(2)start:在上一个状态idle中,由于T[4]==P[1],那么状态机的下一状态 就是start。在此状态中将同时对文本字符串和模式字符串的索引同时加1,也就 是进入此状态时比较T[5]与P[2],如果相等就执行一样的操作且一直在start状 态中,直到出现文本字符串字符与模式字符串不等时,如图8(b)所示,就跳转下 一状态kmp。
(3)kmp:在进入此状态之前的一个时钟周期,发现T[9]≠P[6],那么在进 入此状态时,保持文本字符串的索引值i=9不变,通过计算得到的NEXT函数值 可知NEXT[6]=2,于是状态机返回状态start,继续比较T[9]与P[2],可是发现不 巧的是T[9]≠P[2],如图8(c)所示。
(4)在T[9]≠P[2]时,同时给出状态机的下一状态是kmp,再次保持文本字 符串的索引值i=9保持不变,通过计算得到的NEXT函数值可知NEXT[2]=1, 于是状态机返回状态start,继续比较T[9]与P[1],如图8(d)所示。
(5)由于T[9]==P[1],于是状态机的下一状态再次跳入start,同时比较文 本字符串的下一个字符与模式字符串的下一个字符,直到模式串的最后一个字符 在本文字符串中找到,就说明在文本字符串中匹配到模式字符串。
以上过程就是给出实例的匹配实现状态跳转过程,在15个时钟周期就完成 了匹配的过程。表6是本发明与基于GPU并行算法在给定较大文本串长度的匹 配时间和性能对比表。表7给出了本发明与基于GPU并行算法在相同模式字符 串长度的计算时间对比。显然在计算多模式串匹配过程中更加有优势。
表6算法执行时间对比
表7 NEXT数组计算时间对比
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非 是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明 的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施 方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进 等,均应包含在本发明权利要求的保护范围之内。

Claims (6)

1.一种基于FPGA的并行字符串匹配算法,其特征在于:通过FPGA并行处理在一个时钟周期找到模式字符串前j个字符的子串,以及它的前缀和后缀的最大公共元素值,通过前缀和后缀的最大公共元素值可直接得到并输出NEXT数组,利用NEXT数组可实现多个模式的字符串并行匹配。
2.根据权利要求1所述的基于FPGA的并行字符串匹配算法,其特征在于:所述模式字符串前j个字符的子串,以及它的前缀和后缀的最大公共元素值的具体寻找过程如下:
步骤1:列出前j=2个字符的子串到除去模式字符串本身的最大的子串;
步骤2:分别比较步骤1中每一个子串的相同大小的前后缀,如果比较相等,输出用一位标志位s=1表示;
步骤3:每一个字串所有的比较的输出标志位s作为一个优先级编码器的输入,编码器输出即可得到该字符串最大的前后缀的公共元素值;
步骤4:通过NEXT函数值与前j个字符的子串,它的前后缀的最大公共元素值的关系转而得到NEXT数组。
3.根据权利要求2所述的基于FPGA的并行字符串匹配算法,其特征在于:所述得到NEXT数组的具体过程如下:
根据NEXT函数值的定义知,NEXT[1]=0;如果最大公共元素值Max[1]=0,也就是说,j=2时,前2字符是不等的,可得NEXT[2]=1;即如果得到的Max值为零,那么就等于1;如果,最大公共元素值不为零,那么就满足NEXT[j]=Max[j-1];即可一一对应NEXT函数值。
4.根据权利要求2所述的基于FPGA的并行字符串匹配算法,其特征在于:在所述模式字符串前j个字符的子串,以及它的前缀和后缀的最大公共元素值的实现方式如下:
步骤1:在模式串存储中按地址为分别可得到前j个字符的子串,每一个子串由8bit的ASCII码表示,j的值等于字节的数目;
步骤2:根据步骤1中的得到的j字节的二进制数,通过相应位的比较器,比较器输出1bit,相等输出为1,否则为0;
步骤3:根据每一个前j个字符的子串,它每一个比较器输出由高位到低位作为编码器的输入,以最高位优先级编码,得到对应第j位的Max值。
5.根据权利要求3所述的基于FPGA的并行字符串匹配算法,其特征在于:实现NEXT函数值的方式如下:
步骤1:根据得到Max值,此处用到比较器,判断Max值是否为零,然后在不为零的情况用到加法器执行加1操作,否则不执行,直接对应为赋值为1。
步骤2:根据上面比较器和加法器共同作用的结果后,依次按地址存放得到NEXT函数值。
6.根据权利要求1所述的基于FPGA的并行字符串匹配算法,实现多个模式字符串匹配的方式其特征在于:
根据实现的NEXT函数,每一个模式对应一个匹配引擎,同时对不同的NEXT函数值和模式串,实现的一对多同时比较,最后根据匹配的标志输出最终的匹配结果。
CN201810307836.4A 2018-04-08 2018-04-08 一种基于fpga的并行字符串匹配算法 Active CN108628953B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810307836.4A CN108628953B (zh) 2018-04-08 2018-04-08 一种基于fpga的并行字符串匹配算法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810307836.4A CN108628953B (zh) 2018-04-08 2018-04-08 一种基于fpga的并行字符串匹配算法

Publications (2)

Publication Number Publication Date
CN108628953A true CN108628953A (zh) 2018-10-09
CN108628953B CN108628953B (zh) 2022-02-15

Family

ID=63704828

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810307836.4A Active CN108628953B (zh) 2018-04-08 2018-04-08 一种基于fpga的并行字符串匹配算法

Country Status (1)

Country Link
CN (1) CN108628953B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110837584A (zh) * 2019-10-18 2020-02-25 中山大学 一种分块并行构造后缀数组的方法及系统
CN110865970A (zh) * 2019-10-08 2020-03-06 西安交通大学 一种基于fpga平台的压缩流量模式匹配引擎及模式匹配方法
CN112966157A (zh) * 2021-03-10 2021-06-15 浪潮云信息技术股份公司 一种基于kmp算法的单模板工作流优化方法
CN113807087A (zh) * 2020-06-16 2021-12-17 中国电信股份有限公司 网站域名相似度检测方法和装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9536011B1 (en) * 2014-08-18 2017-01-03 Google Inc. Applying string matching algorithms to finding ad unit availability interval

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9536011B1 (en) * 2014-08-18 2017-01-03 Google Inc. Applying string matching algorithms to finding ad unit availability interval

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
SHIMING LEI 等: "SCADIS: A Scalable Accelerator for Data-Intensive String Set Matching on FPGAs", 《2016 IEEE TRUSTCOM-BIGDATASE-ISPA》 *
周雅翠 等: "基于KMP 算法的next 函数理解与分析", 《吉林建筑工程学院学报》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110865970A (zh) * 2019-10-08 2020-03-06 西安交通大学 一种基于fpga平台的压缩流量模式匹配引擎及模式匹配方法
CN110865970B (zh) * 2019-10-08 2021-06-29 西安交通大学 一种基于fpga平台的压缩流量模式匹配引擎及模式匹配方法
CN110837584A (zh) * 2019-10-18 2020-02-25 中山大学 一种分块并行构造后缀数组的方法及系统
CN113807087A (zh) * 2020-06-16 2021-12-17 中国电信股份有限公司 网站域名相似度检测方法和装置
CN113807087B (zh) * 2020-06-16 2023-11-28 中国电信股份有限公司 网站域名相似度检测方法和装置
CN112966157A (zh) * 2021-03-10 2021-06-15 浪潮云信息技术股份公司 一种基于kmp算法的单模板工作流优化方法

Also Published As

Publication number Publication date
CN108628953B (zh) 2022-02-15

Similar Documents

Publication Publication Date Title
CN108628953A (zh) 一种基于fpga的并行字符串匹配算法
US8972415B2 (en) Similarity search initialization
JP2008299867A (ja) データ構造によるコンピュータ表現及びそれに関連する符号化/復号化方法
JP2001521702A (ja) 畳込み符号化データの幅優先復号におけるメトリック移動
Kempa et al. Dynamic suffix array with polylogarithmic queries and updates
CN111801665A (zh) 用于大数据应用的分层局部敏感哈希(lsh)分区索引
WO2018219195A1 (zh) 一种译码方法及译码器
CN107229759B (zh) 一种字符串模式匹配的方法
CN115269935A (zh) 一种集成电路展平式设计的字符串存储与查询系统及方法
Arroyuelo et al. Reducing the space requirement of LZ-index
CN108628907A (zh) 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法
CN106599097A (zh) 海量特征串集合的匹配方法和装置
CN110909214A (zh) 基于kmp匹配算法的字符串快速匹配方法
Brodal et al. Faster algorithms for computing longest common increasing subsequences
US6708168B2 (en) Method and apparatus for searching a data stream for character patterns
CN1490977A (zh) 通用路由平台命令行的解析方法
CN114647764A (zh) 图结构的查询方法、装置及存储介质
CN110909027B (zh) 一种哈希检索方法
CN112639761B (zh) 一种为数据建立索引的方法以及装置
Hyyrö et al. Increased bit-parallelism for approximate string matching
CN114117145A (zh) 一种基于位运算和simd并行操作的字符串过滤算法
Kurniawan et al. A new string matching algorithm based on logical indexing
Edmonds et al. Hardness of function composition for semantic read once branching programs
Cantone et al. Adapting boyer-moore-like algorithms for searching huffman encoded texts
CN116073952B (zh) 一种基于MaPU架构的快速并行卷积编译码方法、系统、设备及介质

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