字符串匹配的方法、设备和异构计算系统的制作方法_3

文档序号:9646568阅读:来源:国知局
配的方法包括以下步骤:
[0091]步骤101、计算单元中的每个GPU核分别获取对应的待匹配的子字符串,并将待匹配的子字符串输入自动机中进行第一匹配,其中,该自动机是根据多个模式串预先生成的,该自动机的每一个节点对应一个状态,在该第一匹配的匹配过程中,该计算单元中的每个GPU核在该自动机的当前状态时,若没有匹配到模式串,则直接跳转到该自动机的下一个状态进行匹配。
[0092]本实施例中,采用AC算法进行字符串匹配,AC算法是常用的多模式字符串匹配算法。AC算法对于一个给定长度为η的被匹配字符串和规模为i的模式串集合P{pl,p2,…pi},找到被匹配的字符串中包含的所有的模式串的时间复杂度为0(n),并且其时间复杂度与模式串集合的规模i无关。在进行匹配之前,首先要根据多个模式串生成一个有限状态的自动机。
[0093]例如,对于模式串集合:P{he,she, his, hers},其对应的自动机如图6所示,图6为自动机的一种结构示意图,图6中的每一个圆圈为自动机的一个节点,每个节点表示自动机的一个状态,状态0是初始状态,自动机从状态0开始跳转,加粗的圆圈表示在这个状态匹配到了模式串,没有加粗的圆圈为中间状态,表示在这个状态没有匹配到模式串,箭头表示状态跳转的路径。在AC算法的具体实现过程中,自动机一般使用稀疏矩阵表示,稀疏矩阵的每一行代表一个状态,每一列代表可能输入的字符。稀疏矩阵具有随机访问的特性,虽然相对于链表,占用了更多的存储空间,但是访问速度更快。同时,由于稀疏矩阵是顺序表而非链表,在其内部是地址无关的,所以可以方便的在异构计算系统的不同设备之间传输,例如在CPU和GPU核之间传输。
[0094]以图6所示的自动机为例,对自动机的生成过程进行详细说明,对于模式串集合:P {he, she, his, hers},首先,将每个模式串添加到自动机中,空的自动机只有初始状态0,先将模式串he中的字符h输入到自动机,添加状态1,然后输入字符e,添加状态2,并将状态2标识为匹配态,这个状态匹配到了模式串he。以此类推,继续添加模式串she,his, hers到自动机中。其中,每条路径对应至少一个模式串,例如,字符串he和hers由于前两个字符相同,因此,字符串he和hers在同一条路径上。
[0095]然后,为每个状态添加失败跳转路径(图6中虚线所示的为失败跳转路径,图6中只标出了状态1的失败跳转路径,其它的失败跳转路径省略)。失败跳转是指在当前状态的输入没有跳到下一个确定的状态的路径时,自动机应该如何进行回溯跳转。例如,状态1,在添加完所有模式串后,只有输入字符e和字符i时,才有跳转到下一个状态的路径。对于其它输入,比如字符a,则匹配失败,需要跳回状态0,而如果输入字符s,跳回0状态后由于0状态有字符s的跳转路径,所以直接将状态1输入字符s后跳转的下一个状态指向状态3。类似的,添加其它状态的失败跳转。在具体实现中,失败跳转可以通过递归的方式生成,本实施例中不再一一赘述。
[0096]本实施例中,自动机可以由CPU根据该多个模式串生成,并将生成的该自动机存储到GPU的全局内存中,然后,计算单元中的每个GPU核分别从GPU的全局内存中读取该自动机。如何根据模式串生成状态机为现有技术,本发明实施例可以采用现有的任意一种算法生成自动机,上述只是举例说明而已。
[0097]本实施例中,该计算单元中的每个GPU核分别获取对应的待匹配的子字符串具体为:该每个GPU核分别从该GPU的全局内存中将对应的待匹配的子字符串读取到自己的私有内存中。其中,该待匹配的子字符串由CPU分配,CPU接收待匹配的目标字符串后,将该目标字符串发送到该GPU的全局内存中,然后,将该目标字符串按照分段规则将该目标字符串划分成多个待匹配的子字符串,指示该计算单元的每个GPU核对分配给自己的待匹配的子字符串进行处理,该多个待匹配的子字符串中每一个待匹配的子字符串由该计算单元中的一个GPU核处理,每个GPU核从该GPU的全局内存中读取自己待处理的待匹配的子字符串。
[0098]本实施例中,每个GPU核只对对应的待匹配的子字符串进行第一匹配,第一匹配只是对所有待匹配的子字符串进行粗略的匹配,第一匹配只需要确定待匹配的子字符串是否匹配到了某一个模式串,并不会确定具体匹配到了哪个模式串,以及匹配到的模式串的位置等信息。通过第一匹配GPU核确定匹配到了某一个模式串,则GPU确定需要对匹配到模式串的待匹配的子字符串进行第二匹配,将第一匹配的匹配结果发送给CPU,由CPU对待匹配的子字符串进行第二匹配,第二匹配会对待匹配的子字符串进行详细的匹配,需要记录待匹配的子字符串具体匹配到了哪个模式串,匹配到模式串在待匹配的子字符串的具体位置等。
[0099]具体地,该每个GPU核将对应的待匹配的子字符串中每一个字符依次输入到自动机中进行第一匹配。例如,从状态0开始,输入字符h,将跳转到状态1,如果再输入字符e,将跳转到状态2,状态2为匹配态,匹配到的模式串为he。如果当前状态是状态1,输入字符s,将会通过失败跳转路径跳到状态3,如果输入字符h,则停留在状态1,如果输入其它字符,则跳到状态0,将待匹配的子字符串中的字符依次输入到状态机中,直到最后一个字符被输入后,完成所有匹配。
[0100]本实施例中,在第一匹配的匹配过程中,每个GPU核在匹配到模式串后,并不记录待匹配的子字符串的匹配信息,该匹配信息包括:待匹配的子字符串匹配到的模式串的标识、匹配到的模式串在该待匹配的子字符串中的位置信息。因此,当该计算单元中的某个GHJ核在当前状态没有匹配到模式串后,不需要等待该计算单元中的其他GPU核的执行,而是直接跳转到该自动机的下一个状态进行匹配。由于GPU核在没有匹配到模式串时不需要等待,从而提高了字符串匹配算法在GPU上的执行速度,提高了字符串匹配的整体效率。
[0101]图7为现有技术中GPU的执行时序的示意图,如图7所示,GPU的一个计算单元中共有四个GPU核同时进行字符串匹配:GPU核0、1、2、3。每一组相邻的白色矩形方块和横线矩形方块代表GPU核在匹配态的总执行时间,每一组相邻的窄白色矩形方块和宽灰色矩形方块代表GPU核在匹配态的总执行时间。这里的匹配态是指GPU核在当前状态时没有匹配至IJ模式串,GPU核在匹配态的总执行时间由等待时间和实际执行时间组成,图6中写有匹配态的宽灰色矩形方块表示匹配态的实际执行时间,写有等待的窄白色矩形方块表示匹配态的等待时间。图6中每一组相邻的窄白色矩形方块代表和宽白色矩形方块表示GPU核在非匹配态时的总执行时间,非匹配态是指GPU核在当前状态匹配到了模式串。GPU核在非匹配态的总执行时间由等待时间和实际执行时间组成,图6中写有非匹配态的白色窄矩形方块表示非匹配态的实际执行时间,写有等待的白色宽矩形方块表示非匹配态的等待时间。
[0102]从图7可以看出,现有技术中,GPU核在非匹配态和匹配态时的总执行时间相同,GPU核在匹配态时的实际执行时间大于等待时间,GPU核在非匹配态时的等待时间大于实际执行时间,可知,GPU核在非匹配时将大部分时间浪费在等待其他GPU核的执行中,这主要是由于GPU采用sn?方式,所以需要保证GPU的每个计算单元内部的所有GPU核在同一时刻执行相同的指令,因此,每个GPU核在没有匹配到模式串之后,并不能跳转到下一个状态,而是需要等待计算单元内部的其他处于匹配态的GPU核完成匹配后,才会跳转到下一个状态。而在NIDS系统中,绝大多数的网络数据包为正常数据包,不会有模式串被匹配到,也就是说大多数情况下GPU核都是非匹配态,由于GPU核在非匹配态时的等待时间大于实际执行时间,造成GPU核在非匹配态时将大部分时间浪费在等待中,因此,采用现有技术的方法,造成了 GPU的计算资源的浪费,并且使得GPU的字符串匹配效率低。
[0103]另外,从图7中还可以看出,GPU核在匹配态时的实际执行时间大于GPU核在非匹配态时的实际执行时间,这主要是由于GPU核在匹配态时,在匹配到模式串之后,还需要记录字符串的匹配信息,而GPU核在非匹配态时,若没有匹配到模式串,GPU核不执行其他操作,由于这些额外的操作所需的时间远大于匹配的时间,所以GPU核在匹配态时的实际执行时间大于GPU核在非匹配态时的实际执行时间。由于GPU核在匹配态时的实际执行时间大于GPU核在非匹配态时的实际执行时间,因此,GPU核在非匹配态时要等待较长时间才能跳转到下一个状态。
[0104]为了解决现有技术的问题,本实施例中,计算单元中的每个GPU核先并行的对对应的待匹配的子字符串进行第一匹配,若匹配到模式串,则该GPU核并不记录待匹配的子字符串的匹配信息,而是将第一匹配的结果发送给CPU,由CPU进行第二匹配,GPU核并不记录待匹配的子字符串的匹配信息,而是跳转到下一个状态继续进行匹配。若没有匹配到模式串,GPU核会跳转到下一个状态进行匹配,不需要等待。可知,本实施例中,每个GPU核在匹配态和非匹配态的实际执行时间相同,当某一 GPU核在当前状态没有匹配到模式串时,也不需要等待同一个计算单元的其他GPU核的执行,从而提高了字符串匹配算法在GPU上的执行速度,提高了字符串匹配的整体效率。
[0105]图8为本实施例提供的字符串匹配的方法中GPU的执行时序的示意图,如图8所示,GPU中共有四个GPU核同时进行字符串匹配:GPU核0、1、2、3。图8中写有非匹配态的白色矩形方块表示GPU核在非匹配态的实际执行时间,写有匹配态的灰色矩形方块表示GPU核在非匹配态的时间执行时间,通过图8可知,GPU核在非匹配态和匹配态时都不需要等待,即没有等待时间。对比图7和图8可知,本实施例的方法中,由于GPU核在匹配态时不执行额外的操作,因此,使得GPU核在匹配态和非匹配态都不需要等待,使得GPU核在匹配态和非匹配态时的时间都减少,从而提高了 GPU的字符串匹配速率。
[0106]步骤102、计算单元中的每个GPU核将的第一匹配的结果发送给CPU,以使CPU根据计算单元中的每个GPU核的第一匹配的结果,对计算单元中的每个GPU核对应的待匹配的子字符串进行第二匹配。
[0107]本实施例中,每个GPU核只对对应的待匹配的子字符串进行第一匹配,然后将第一匹配的匹配结果发送给CPU,由CPU根据每个GPU核的第一匹配的结果对每个GPU核对应的待匹配的子字符串进行第二匹配。
[0108]本实施例中,计算单元中的每个GPU核只对对应的待匹配的子字符串进行第一匹配,通过第一匹配能够确定各待匹配的子字符串是否匹配到了某一个模式串,然后,将第一匹配的匹配结果发送给CPU,由CPU根据第一匹配结果对在第一匹配中匹配到模式串的待匹配的子字符串进行第二匹配,第二匹配会对待匹配的子字符串进行详细的匹配,需要记录待匹配的子字符串具体匹配到了哪个模式串,匹配到模式串在待匹配的子字符串的具体位置等。由于每个GPU核在第一匹配的匹配过程中,在匹配到模式串后并不记录待匹配的子字符串的匹配信息,从而使得GPU核在匹配态和非匹配态时所需的执行时间相同,因此,当GPU核在非匹配态时,不需要浪费时间等待计算单元中的其他GPU核的执行,而是直接跳转到该自动机的下一个状态进行匹配,从而缩短了 GPU核的匹配时间,提高了 GPU核的匹配效率,也提高了 GPU核的计算资源的利用率。
[0109]下面
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1