CN105404635B - 字符串匹配的方法、设备和异构计算系统 - Google Patents
字符串匹配的方法、设备和异构计算系统 Download PDFInfo
- Publication number
- CN105404635B CN105404635B CN201410472862.4A CN201410472862A CN105404635B CN 105404635 B CN105404635 B CN 105404635B CN 201410472862 A CN201410472862 A CN 201410472862A CN 105404635 B CN105404635 B CN 105404635B
- Authority
- CN
- China
- Prior art keywords
- matched
- gpu
- substring
- matching
- gpu core
- 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
Landscapes
- Multi Processors (AREA)
- Image Processing (AREA)
Abstract
本发明实施例提供一种字符串匹配的方法、设备和异构计算系统,包括:GPU的计算单元中的每个GPU核只对待匹配的子字符串进行第一匹配,通过第一匹配确定待匹配的子字符串是否匹配到了模式串,然后,每个GPU核将第一匹配的匹配结果发送给CPU,由CPU根据第一匹配结果对在第一匹配中匹配到模式串的待匹配的子字符串进行第二匹配。由于在第一匹配时,若匹配到了模式串,GPU核并不记录待匹配的子字符串的匹配信息,从而使得GPU核在匹配态和非匹配态时的执行时间相同,因此,当某个GPU核没有匹配到模式串时,也不需要等待计算单元中匹配到模式串的GPU核的执行,而是直接跳转到自动机的下一个状态进行匹配,从而缩短了GPU核的匹配时间,提高了GPU核的匹配效率。
Description
技术领域
本发明实施例涉及通信技术,尤其涉及一种字符串匹配的方法、设备和异构计算系统。
背景技术
多模式字符串匹配算法广泛应用在以字符串模式匹配为基础的网络入侵检测系统(Network Intrusion Detection System,简称NIDS)、深度包检测(Deep packetinspection,简称DPI)等系统中。模式匹配的目的是在目标串中找出与模式串相同的子串,多模式匹配就是在目标串中一次匹配多个模式串。NIDS系统通过多模式匹配算法能够检测出网络数据包中的入侵数据包,然后,对入侵数据包采取主动反应或发出警报。多模式字符串匹配占用了整个NIDS系统大部分的中央处理器(Central Processing Unit,简称CPU)处理时间。例如在Snort中,多模式字符串匹配占用的CPU处理时间达到70%以上,多模式字符串匹配的速度成了整个系统处理速度的瓶颈,所以需要提高多模式字符串匹配引擎的匹配速度,以应付更大的网络流量的处理。并行化是对字符串匹配进行加速的常用方法,通过并行化可以充分利用多核CPU的多个核心,从而提高字符串匹配的速度,但是CPU的处理能力有限,无法满足字符串匹配的速度要求。
为了进一步提高字符串匹配的速度,现有技术中,利用图形处理器(GraphicsProcessing Unit,简称GPU)分担一部分字符串匹配任务,CPU和GPU协同工作称为异构计算,GPU由数以千计的更小、更高效的核心组成,这些核心专为同时处理多个任务而设计,因此,GPU也具有很强的运算能力。图1为现有技术中异构计算环境下字符串模式匹配的流程示意图,如图1所示,首先,CPU对模式串集合进行预处理,然后,将被匹配的目标字符串分段,GPU的每个GPU核匹配一段目标字符串,GPU将处理结果发送给CPU,CPU分析与处理最终匹配结果。上述方式中,GPU的核被划分为多个计算单元,每个计算单元包括多个处理单元,每个处理单元即一个GPU的核心。计算单元内部采用单指令多数据(Single instruction,multiple data,简称SIMD)方式,使得计算单元内部的多个处理单元在同一时刻执行相同的指令处理不同的数据。现有的多模式字符串匹配算法中,当处理单元判断自动机的当前状态为匹配态时,处理单元还需要存储匹配串的当前位置、当前状态的编号等信息,而当处理单元判断自动机的当前状态为非匹配态时,处理单元不再执行存储匹配串的当前位置、当前状态的编号等后续操作,由于在匹配态下处理单元要执行很多额外的操作,所以匹配态的执行时间远大于非匹配态的执行时间。因此,当计算单元内的一个处理单元执行匹配态时,而该计算单元内的其他处理单元执行非匹配态时,其他处理单元需要等待该处理单元执行完匹配态后,才能跳转到下一个状态,使得GPU的匹配速度低。
发明内容
本发明实施例提供一种字符串匹配的方法、设备和异构计算系统,以提高GPU核的匹配效率。
本发明第一方面提供一种字符串匹配的方法,所述方法应用于异构计算系统中,所述异构计算系统包括:中央处理单元CPU和图形处理器GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,所述方法包括:
所述计算单元中的每个GPU核分别获取对应的待匹配的子字符串,并将所述待匹配的子字符串输入自动机中进行第一匹配,其中,所述自动机是根据多个模式串预先生成的,所述自动机的每一个节点对应一个状态,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
所述计算单元中的每个GPU核将第一匹配的结果发送给所述CPU,以使所述CPU根据所述计算单元中的每个GPU核的第一匹配的结果,对所述计算单元中的每个GPU核对应的待匹配的子字符串进行第二匹配。
结合本发明第一方面,在本发明第一方面的第一种可能的实现方式中,所述每个GPU核的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配;
相应地,所述方法还包括:
所述计算单元中的每个GPU核根据第一匹配的结果分别更新对应的待匹配的子字符串的匹配标志位的值;
所述计算单元中的每个GPU核将第一匹配的结果发送给所述CPU,包括
所述计算单元中的每个GPU核将对应的待匹配的子字符串的匹配标志位的值发送给所述CPU。
结合本发明第一方面的第一种可能的实现方式,在本发明第一方面的第二种可能的实现方式中,所述计算单元中的每个GPU核根据第一匹配的结果分别更新对应的待匹配的子字符串的匹配标志位的值,包括:
若所述计算单元中的第一GPU核对应的待匹配的子字符串匹配到了所述多个模式串中的至少一个模式串,则所述第一GPU核将对应的待匹配的子字符串的匹配标志位的值更新为需要进行所述第二匹配,其中,所述第一GPU核为所述计算单元中的任意一个GPU核;
若所述第一GPU核对应的待匹配的子字符串没有匹配到所述多个模式串中任意一个模式串,则所述第一GPU核将对应的待匹配的子字符串的匹配标志的值为更新为不需要进行所述第二匹配。
结合本发明第一方面的第一种可能的实现方式,在本发明第一方面的第三种可能的实现方式中,所述计算单元中的每个GPU核将对应的待匹配的子字符串的匹配标志位的值发送给所述CPU,包括:
所述计算单元中的每个GPU核将对应的待匹配的子字符串的匹配标志位的值从自己的私有内存写入所述计算单元的本地内存中;
所述计算单元将每个GPU核对应的待匹配的子字符串的匹配标志位的值从所述本地内存写入所述GPU的全局内存中,以使所述CPU从所述GPU的全局内存中将所述计算单元中的每个GPU核对应的待匹配的子字符串的匹配标志位的值读取到所述CPU的内存中。
结合本发明第一方面以及本发明第一方面的第一种至第三种可能的实现方式,在本发明第一方面的第四种可能的实现方式中,所述计算单元中的每个GPU核分别获取对应的待匹配的子字符串之前,所述方法还包括:
所述计算单元中的每个GPU核分别从所述GPU的全局内存中读取所述自动机,其中,所述自动机是所述CPU根据所述多个模式串生成并存储到所述GPU的全局内存中的。
结合本发明第一方面以及本发明第一方面的第一种至第三种可能的实现方式,在本发明第一方面的第五种可能的实现方式中,所述计算单元中的每个GPU核分别获取对应的待匹配的子字符串,包括:
所述计算单元中的每个GPU核分别从所述GPU的全局内存中将对应的待匹配的子字符串读取到自己的私有内存中。
本发明第二方面提供一种字符串匹配的方法,所述方法应用于异构计算系统中,所述异构计算系统包括:中央处理单元CPU和具有多个核的图形处理器GPU,所述GPU的多个核被划分成多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,所述方法包括:
所述CPU接收所述计算单元中的每个GPU核发送的第一匹配的结果,其中,所述每个GPU核发送的第一匹配的结果是所述每个GPU核根据获取的待匹配的子字符串和自动机中进行第一匹配得到的,其中,所述自动机是根据多个模式串预先生成的,所述自动机的每一个节点对应一个状态,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
所述CPU根据所述每个GPU核的第一匹配的结果,确定是否对所述计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,所述第一GPU核为所述计算单元中的任意一个GPU核;
若所述CPU确定对所述第一GPU核对应的待匹配的子字符串进行第二匹配,则所述CPU将所述第一GPU核对应的待匹配的子字符串输入所述自动机进行第二匹配,并记录所述第一GPU核对应的待匹配的子字符串的匹配信息。
结合本发明第二方面,在本发明第二方面的第一种可能的实现方式中,所述每个GPU核发送的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,其中,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配;
所述CPU根据所述计算单元中的每个GPU核的第一匹配的结果,确定是否对所述计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,包括:
所述CPU判断所述第一GPU核对应的待匹配的子字符串的匹配标志位的值是否指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配;
若所述第一GPU核对应的待匹配的子字符串的匹配标志位的值指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配,则所述CPU确定对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配。
结合本发明第二方面,在本发明第二方面的第二种可能的实现方式中,所述方法还包括:
所述CPU接收待匹配的目标字符串,将所述目标字符串发送到所述GPU的全局内存中;
所述CPU按照分段规则将所述目标字符串划分成多个待匹配的子字符串,所述多个待匹配的子字符串中每一个待匹配的子字符串由所述计算单元中的一个GPU核处理。
结合本发明第二方面以及本发明第二方面的第一种和第二种可能的实现方式,在本发明第二方面的第三种可能的实现方式中,所述方法还包括:
所述CPU根据所述多个模式串生成所述自动机,并将所述自动机发送到所述GPU的全局内存中。
结合本发明第二方面以及本发明第二方面的第一种和第二种可能的实现方式,在本发明第二方面的第四种可能的实现方式中,所述第一GPU核对应的待匹配的子字符串的匹配信息包括:所述第一GPU核对应的待匹配的子字符串匹配到的模式串的标识、所述第一GPU核对应的待匹配的子字符串匹配到的模式串在所述第一GPU核对应的待匹配的子字符串中的位置信息。
本发明第三方面提供一种图形处理器GPU,所述GPU应用于异构计算系统中,所述异构计算系统包括:中央处理单元CPU和所述GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,所述计算单元中的每个GPU核包括:
获取模块,用于获取所述GPU核对应的待匹配的子字符串;
匹配模块,用于将所述待匹配的子字符串输入自动机中进行第一匹配,其中,所述自动机是根据多个模式串预先生成的,所述自动机的每一个节点对应一个状态,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
发送模块,用于将所述待匹配的子字符串的第一匹配的结果发送给所述CPU,以使所述CPU根据所述计算单元中的每个GPU核的第一匹配的结果,对所述计算单元中的每个GPU核对应的待匹配的子字符串进行第二匹配。
结合本发明第三方面,在本发明第三方面的第一种可能的实现方式中,所述每个GPU核的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配;
相应地,所述匹配模块还用于:更新所述待匹配的子字符串的匹配标志位的值;
所述发送模块,具体用于将所述待匹配的子字符串的匹配标志位的值发送给所述CPU。
结合本发明第三方面的第一种可能的实现方式,在本发明第三方面的第二种可能的实现方式中,所述匹配模块具体用于:
若所述待匹配的子字符串匹配到了所述多个模式串中的至少一个模式串,则将所述待匹配的子字符串的匹配标志位的值更新为需要进行所述第二匹配;
若所述待匹配的子字符串没有匹配到所述多个模式串中任意一个模式串,则将所述待匹配的子字符串的匹配标志的值为更新为不需要进行所述第二匹配。
结合本发明第三方面的第一种可能的实现方式,在本发明第三方面的第三种可能的实现方式中,所述发送单元具体用于:
将所述待匹配的子字符串的匹配标志位的值从所述GPU核的私有内存写入所述计算单元的本地内存中;
将所述待匹配的子字符串的匹配标志位的值从所述计算单元的本地内存写入所述GPU的全局内存中,以使所述CPU从所述GPU的全局内存中将所述待匹配的子字符串的匹配标志位的值读取到所述CPU的内存中。
结合本发明第三方面以及本发明第三方面的第一种至第三种可能的实现方式,在本发明第三方面的第四种可能的实现方式中,所述获取模块还用于:
从所述GPU的全局内存中读取所述自动机,其中,所述自动机是所述CPU根据所述多个模式串生成并存储到所述GPU的全局内存中的。
结合本发明第三方面以及本发明第三方面的第一种至第三种可能的实现方式,在本发明第三方面的第五种可能的实现方式中,所述获取模块具体用于:
从所述GPU的全局内存中将所述待匹配的子字符串读取到所述GPU核的私有内存中。
本发明第四方面提供一种中央处理器CPU,所述CPU应用于异构计算系统中,所述异构计算系统包括:所述CPU和图形处理器GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,所述CPU包括:
接收模块,用于接收所述计算单元中的每个GPU核发送的第一匹配的结果,其中,所述每个GPU核发送的第一匹配的结果是所述每个GPU核根据获取的待匹配的子字符串和自动机中进行第一匹配得到的,其中,所述自动机是根据多个模式串预先生成的,所述自动机的每一个节点对应一个状态,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
确定模块,用于根据所述每个GPU核的第一匹配的结果,确定是否对所述计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,所述第一GPU核为所述计算单元中的任意一个GPU核;
匹配模块,用于若确定对所述第一GPU核对应的待匹配的子字符串进行第二匹配,则所述CPU将所述第一GPU核对应的待匹配的子字符串输入所述自动机进行第二匹配,并记录所述第一GPU核对应的待匹配的子字符串的匹配信息。
结合本发明第四方面,在本发明第四方面的第一种可能的实现方式中,所述每个GPU核发送的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,其中,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配;
所述确定模块具体用于:判断所述第一GPU核对应的待匹配的子字符串的匹配标志位的值是否指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配;
若所述第一GPU核对应的待匹配的子字符串的匹配标志位的值指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配,则确定对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配。
结合本发明第四方面,在本发明第四方面的第二种可能的实现方式中,所述CPU还包括:划分模块和发送模块;
所述接收模块,还用于接收待匹配的目标字符串;
所述划分模块,用于按照分段规则将所述目标字符串划分成多个待匹配的子字符串,所述多个待匹配的子字符串中每一个待匹配的子字符串由所述计算单元中的一个GPU核处理;
所述发送模块,用于将所述目标字符串发送到所述GPU的全局内存中。
结合本发明第四方面以及本发明第四方面的第一种和第二种可能的实现方式,在本发明第四方面的第三种可能的实现方式中,所述CPU还包括:
生成模块,用于根据所述多个模式串生成所述自动机,并将所述自动机发送到所述GPU的全局内存中。
结合本发明第四方面以及本发明第四方面的第一种和第二种可能的实现方式,在本发明第四方面的第四种可能的实现方式中,所述第一GPU核对应的待匹配的子字符串的匹配信息包括:所述第一GPU核对应的待匹配的子字符串匹配到的模式串的标识、所述第一GPU核对应的待匹配的子字符串匹配到的模式串在所述第一GPU核对应的待匹配的子字符串中的位置信息。
本发明第五方面提供一种异构计算系统,所述异构计算系统包括:中央处理单元CPU和图形处理器GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,其中,所述计算单元中的每个GPU核用于执行本发明第一方面以及本发明第一方面的第一种至第五种可能的实现方式提供的任一项所述的方法,所述CPU用于执行本发明第二方面以及本发明第二方面的第一种至第四种可能的实现方式提供的任一项所述的方法。
本发明实施例提供的字符串匹配的方法、设备和异构计算系统,GPU的计算单元中的每个GPU核只对对应的待匹配的子字符串进行第一匹配,通过第一匹配能够确定各待匹配的子字符串是否匹配到了某一个模式串,然后,将第一匹配的匹配结果发送给CPU,由CPU根据第一匹配结果对在第一匹配中匹配到模式串的待匹配的子字符串进行第二匹配。由于每个GPU核在第一匹配的匹配过程中,在匹配到模式串后并不记录待匹配的子字符串的匹配信息,从而使得GPU核在匹配态和非匹配态时所需的执行时间相同,因此,当GPU核在非匹配态时,不需要浪费时间等待计算单元中的其他GPU核的执行,而是直接跳转到该自动机的下一个状态进行匹配,从而缩短了GPU核的匹配时间,提高了GPU核的匹配效率,也提高了GPU核的计算资源的利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中异构计算环境下字符串模式匹配的流程示意图;
图2为本发明各实施例所适用的一种异构计算系统的结构示意图;
图3为多核CPU的一种结构示意图;
图4为GPU的一个计算单元的结构示意图;
图5为本发明实施例一提供的字符串匹配的方法的流程图;
图6为自动机的一种结构示意图;
图7为现有技术中GPU的执行时序的示意图;
图8为本实施例提供的字符串匹配的方法中GPU的执行时序的示意图;
图9为本发明实施例二提供的字符串匹配的方法的流程图;
图10为GPU的内存的一种结构示意图;
图11为本发明实施例三提供的字符串匹配的方法的流程图;
图12为CPU的执行时序的示意图;
图13为目标字符串的一种分段示意图;
图14为本发明实施例四提供的GPU核的结构示意图;
图15为本发明实施例五提供的CPU的结构示意图;
图16为本发明实施例六提供的CPU的结构示意图;
图17为本发明实施例七提供的异构计算系统的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明各实施例的方法适用于异构计算系统,图2为本发明各实施例所适用的一种异构计算系统的结构示意图,如图2所示,该异构计算系统包括:CPU和GPU,所述GPU包括多个计算单元,多个计算单元中的每个计算单元包括多个GPU核,该多个计算单元之间并行对数据进行处理,每个计算单元内部的多个GPU核之间并行对数据进行处理,每个计算单元中有一个控制单元。其中,该CPU可以包括一个或多个处理器核,图3为多核CPU的一种结构示意图,如图3所示,CPU包括4个CPU核,每个CPU核包括控制单元和运算单元,其中,控制单元主要负责取指令、指令解码等指令执行流程的控制,运算单元用于根据控制单元发送的指令进行运算,CPU的各个处理器核相对独立进行运算。图4为GPU的一个计算单元的结构示意图,如图4所示,该计算单元包括4个GPU核和一个控制单元,该控制单元主要负责取指令、指令解码等指令执行流程的控制,GPU核用于根据控制单元发送的指令进行运算。由于GPU的计算单元内部的各个GPU核共享一个控制单元,因此,GPU采用SIMD的执行方式,即计算单元内的各个GPU核在同一时刻执行相同的指令处理不同的数据。
图5为本发明实施例一提供的字符串匹配的方法的流程图,如图5所示,本实施例提供的字符串匹配的方法包括以下步骤:
步骤101、计算单元中的每个GPU核分别获取对应的待匹配的子字符串,并将待匹配的子字符串输入自动机中进行第一匹配,其中,该自动机是根据多个模式串预先生成的,该自动机的每一个节点对应一个状态,在该第一匹配的匹配过程中,该计算单元中的每个GPU核在该自动机的当前状态时,若没有匹配到模式串,则直接跳转到该自动机的下一个状态进行匹配。
本实施例中,采用AC算法进行字符串匹配,AC算法是常用的多模式字符串匹配算法。AC算法对于一个给定长度为n的被匹配字符串和规模为i的模式串集合P{p1,p2,…pi},找到被匹配的字符串中包含的所有的模式串的时间复杂度为O(n),并且其时间复杂度与模式串集合的规模i无关。在进行匹配之前,首先要根据多个模式串生成一个有限状态的自动机。
例如,对于模式串集合:P{he,she,his,hers},其对应的自动机如图6所示,图6为自动机的一种结构示意图,图6中的每一个圆圈为自动机的一个节点,每个节点表示自动机的一个状态,状态0是初始状态,自动机从状态0开始跳转,加粗的圆圈表示在这个状态匹配到了模式串,没有加粗的圆圈为中间状态,表示在这个状态没有匹配到模式串,箭头表示状态跳转的路径。在AC算法的具体实现过程中,自动机一般使用稀疏矩阵表示,稀疏矩阵的每一行代表一个状态,每一列代表可能输入的字符。稀疏矩阵具有随机访问的特性,虽然相对于链表,占用了更多的存储空间,但是访问速度更快。同时,由于稀疏矩阵是顺序表而非链表,在其内部是地址无关的,所以可以方便的在异构计算系统的不同设备之间传输,例如在CPU和GPU核之间传输。
以图6所示的自动机为例,对自动机的生成过程进行详细说明,对于模式串集合:P{he,she,his,hers},首先,将每个模式串添加到自动机中,空的自动机只有初始状态0,先将模式串he中的字符h输入到自动机,添加状态1,然后输入字符e,添加状态2,并将状态2标识为匹配态,这个状态匹配到了模式串he。以此类推,继续添加模式串she,his,hers到自动机中。其中,每条路径对应至少一个模式串,例如,字符串he和hers由于前两个字符相同,因此,字符串he和hers在同一条路径上。
然后,为每个状态添加失败跳转路径(图6中虚线所示的为失败跳转路径,图6中只标出了状态1的失败跳转路径,其它的失败跳转路径省略)。失败跳转是指在当前状态的输入没有跳到下一个确定的状态的路径时,自动机应该如何进行回溯跳转。例如,状态1,在添加完所有模式串后,只有输入字符e和字符i时,才有跳转到下一个状态的路径。对于其它输入,比如字符a,则匹配失败,需要跳回状态0,而如果输入字符s,跳回0状态后由于0状态有字符s的跳转路径,所以直接将状态1输入字符s后跳转的下一个状态指向状态3。类似的,添加其它状态的失败跳转。在具体实现中,失败跳转可以通过递归的方式生成,本实施例中不再一一赘述。
本实施例中,自动机可以由CPU根据该多个模式串生成,并将生成的该自动机存储到GPU的全局内存中,然后,计算单元中的每个GPU核分别从GPU的全局内存中读取该自动机。如何根据模式串生成状态机为现有技术,本发明实施例可以采用现有的任意一种算法生成自动机,上述只是举例说明而已。
本实施例中,该计算单元中的每个GPU核分别获取对应的待匹配的子字符串具体为:该每个GPU核分别从该GPU的全局内存中将对应的待匹配的子字符串读取到自己的私有内存中。其中,该待匹配的子字符串由CPU分配,CPU接收待匹配的目标字符串后,将该目标字符串发送到该GPU的全局内存中,然后,将该目标字符串按照分段规则将该目标字符串划分成多个待匹配的子字符串,指示该计算单元的每个GPU核对分配给自己的待匹配的子字符串进行处理,该多个待匹配的子字符串中每一个待匹配的子字符串由该计算单元中的一个GPU核处理,每个GPU核从该GPU的全局内存中读取自己待处理的待匹配的子字符串。
本实施例中,每个GPU核只对对应的待匹配的子字符串进行第一匹配,第一匹配只是对所有待匹配的子字符串进行粗略的匹配,第一匹配只需要确定待匹配的子字符串是否匹配到了某一个模式串,并不会确定具体匹配到了哪个模式串,以及匹配到的模式串的位置等信息。通过第一匹配GPU核确定匹配到了某一个模式串,则GPU确定需要对匹配到模式串的待匹配的子字符串进行第二匹配,将第一匹配的匹配结果发送给CPU,由CPU对待匹配的子字符串进行第二匹配,第二匹配会对待匹配的子字符串进行详细的匹配,需要记录待匹配的子字符串具体匹配到了哪个模式串,匹配到模式串在待匹配的子字符串的具体位置等。
具体地,该每个GPU核将对应的待匹配的子字符串中每一个字符依次输入到自动机中进行第一匹配。例如,从状态0开始,输入字符h,将跳转到状态1,如果再输入字符e,将跳转到状态2,状态2为匹配态,匹配到的模式串为he。如果当前状态是状态1,输入字符s,将会通过失败跳转路径跳到状态3,如果输入字符h,则停留在状态1,如果输入其它字符,则跳到状态0,将待匹配的子字符串中的字符依次输入到状态机中,直到最后一个字符被输入后,完成所有匹配。
本实施例中,在第一匹配的匹配过程中,每个GPU核在匹配到模式串后,并不记录待匹配的子字符串的匹配信息,该匹配信息包括:待匹配的子字符串匹配到的模式串的标识、匹配到的模式串在该待匹配的子字符串中的位置信息。因此,当该计算单元中的某个GPU核在当前状态没有匹配到模式串后,不需要等待该计算单元中的其他GPU核的执行,而是直接跳转到该自动机的下一个状态进行匹配。由于GPU核在没有匹配到模式串时不需要等待,从而提高了字符串匹配算法在GPU上的执行速度,提高了字符串匹配的整体效率。
图7为现有技术中GPU的执行时序的示意图,如图7所示,GPU的一个计算单元中共有四个GPU核同时进行字符串匹配:GPU核0、1、2、3。每一组相邻的白色矩形方块和横线矩形方块代表GPU核在匹配态的总执行时间,每一组相邻的窄白色矩形方块和宽灰色矩形方块代表GPU核在匹配态的总执行时间。这里的匹配态是指GPU核在当前状态时没有匹配到模式串,GPU核在匹配态的总执行时间由等待时间和实际执行时间组成,图6中写有匹配态的宽灰色矩形方块表示匹配态的实际执行时间,写有等待的窄白色矩形方块表示匹配态的等待时间。图6中每一组相邻的窄白色矩形方块代表和宽白色矩形方块表示GPU核在非匹配态时的总执行时间,非匹配态是指GPU核在当前状态匹配到了模式串。GPU核在非匹配态的总执行时间由等待时间和实际执行时间组成,图6中写有非匹配态的白色窄矩形方块表示非匹配态的实际执行时间,写有等待的白色宽矩形方块表示非匹配态的等待时间。
从图7可以看出,现有技术中,GPU核在非匹配态和匹配态时的总执行时间相同,GPU核在匹配态时的实际执行时间大于等待时间,GPU核在非匹配态时的等待时间大于实际执行时间,可知,GPU核在非匹配时将大部分时间浪费在等待其他GPU核的执行中,这主要是由于GPU采用SIMD方式,所以需要保证GPU的每个计算单元内部的所有GPU核在同一时刻执行相同的指令,因此,每个GPU核在没有匹配到模式串之后,并不能跳转到下一个状态,而是需要等待计算单元内部的其他处于匹配态的GPU核完成匹配后,才会跳转到下一个状态。而在NIDS系统中,绝大多数的网络数据包为正常数据包,不会有模式串被匹配到,也就是说大多数情况下GPU核都是非匹配态,由于GPU核在非匹配态时的等待时间大于实际执行时间,造成GPU核在非匹配态时将大部分时间浪费在等待中,因此,采用现有技术的方法,造成了GPU的计算资源的浪费,并且使得GPU的字符串匹配效率低。
另外,从图7中还可以看出,GPU核在匹配态时的实际执行时间大于GPU核在非匹配态时的实际执行时间,这主要是由于GPU核在匹配态时,在匹配到模式串之后,还需要记录字符串的匹配信息,而GPU核在非匹配态时,若没有匹配到模式串,GPU核不执行其他操作,由于这些额外的操作所需的时间远大于匹配的时间,所以GPU核在匹配态时的实际执行时间大于GPU核在非匹配态时的实际执行时间。由于GPU核在匹配态时的实际执行时间大于GPU核在非匹配态时的实际执行时间,因此,GPU核在非匹配态时要等待较长时间才能跳转到下一个状态。
为了解决现有技术的问题,本实施例中,计算单元中的每个GPU核先并行的对对应的待匹配的子字符串进行第一匹配,若匹配到模式串,则该GPU核并不记录待匹配的子字符串的匹配信息,而是将第一匹配的结果发送给CPU,由CPU进行第二匹配,GPU核并不记录待匹配的子字符串的匹配信息,而是跳转到下一个状态继续进行匹配。若没有匹配到模式串,GPU核会跳转到下一个状态进行匹配,不需要等待。可知,本实施例中,每个GPU核在匹配态和非匹配态的实际执行时间相同,当某一GPU核在当前状态没有匹配到模式串时,也不需要等待同一个计算单元的其他GPU核的执行,从而提高了字符串匹配算法在GPU上的执行速度,提高了字符串匹配的整体效率。
图8为本实施例提供的字符串匹配的方法中GPU的执行时序的示意图,如图8所示,GPU中共有四个GPU核同时进行字符串匹配:GPU核0、1、2、3。图8中写有非匹配态的白色矩形方块表示GPU核在非匹配态的实际执行时间,写有匹配态的灰色矩形方块表示GPU核在非匹配态的时间执行时间,通过图8可知,GPU核在非匹配态和匹配态时都不需要等待,即没有等待时间。对比图7和图8可知,本实施例的方法中,由于GPU核在匹配态时不执行额外的操作,因此,使得GPU核在匹配态和非匹配态都不需要等待,使得GPU核在匹配态和非匹配态时的时间都减少,从而提高了GPU的字符串匹配速率。
步骤102、计算单元中的每个GPU核将的第一匹配的结果发送给CPU,以使CPU根据计算单元中的每个GPU核的第一匹配的结果,对计算单元中的每个GPU核对应的待匹配的子字符串进行第二匹配。
本实施例中,每个GPU核只对对应的待匹配的子字符串进行第一匹配,然后将第一匹配的匹配结果发送给CPU,由CPU根据每个GPU核的第一匹配的结果对每个GPU核对应的待匹配的子字符串进行第二匹配。
本实施例中,计算单元中的每个GPU核只对对应的待匹配的子字符串进行第一匹配,通过第一匹配能够确定各待匹配的子字符串是否匹配到了某一个模式串,然后,将第一匹配的匹配结果发送给CPU,由CPU根据第一匹配结果对在第一匹配中匹配到模式串的待匹配的子字符串进行第二匹配,第二匹配会对待匹配的子字符串进行详细的匹配,需要记录待匹配的子字符串具体匹配到了哪个模式串,匹配到模式串在待匹配的子字符串的具体位置等。由于每个GPU核在第一匹配的匹配过程中,在匹配到模式串后并不记录待匹配的子字符串的匹配信息,从而使得GPU核在匹配态和非匹配态时所需的执行时间相同,因此,当GPU核在非匹配态时,不需要浪费时间等待计算单元中的其他GPU核的执行,而是直接跳转到该自动机的下一个状态进行匹配,从而缩短了GPU核的匹配时间,提高了GPU核的匹配效率,也提高了GPU核的计算资源的利用率。
下面采用几个具体的实施例,对实施例一的技术方案进行详细说明。
图9为本发明实施例二提供的字符串匹配的方法的流程图,本实施例主要对实施例一中的步骤102进行详细说明,本实施例中,该每个GPU核的第一匹配的结果为该每个GPU核对应的待匹配的子字符串的匹配标志位的值,该匹配标志位用于指示是否需要对对应的待匹配的子字符串进行该第二匹配。如图9所示,本实施例提供的方法包括以下步骤:
步骤201、该计算单元中的每个GPU核分别获取对应的待匹配的子字符串,并将待匹配的子字符串输入自动机中进行第一匹配,其中,该自动机是根据多个模式串预先生成的,该自动机的每一个节点对应一个状态,在该第一匹配的匹配过程中,该计算单元中的每个GPU核在该自动机的当前状态时,若没有匹配到模式串,则直接跳转到该自动机的下一个状态进行匹配。
步骤201的具体实现方式可参照实施例一中步骤101的相关描述,这里不再赘述。
步骤202、计算单元中的每个GPU核根据第一匹配的结果分别更新对应的待匹配的子字符串的匹配标志位的值。
该计算单元中的每个GPU核根据第一匹配的结果分别更新自己对应的待匹配的子字符串的匹配标志位的值,具体为:若该计算单元中的第一GPU核对应的待匹配的子字符串匹配到了该多个模式串中的至少一个模式串,则该第一GPU核将对应的待匹配的子字符串的匹配标志位的值更新为需要进行该第二匹配,其中,该第一GPU核为该计算单元中的任意一个GPU核。若该第一GPU核对应的待匹配的子字符串没有匹配到该多个模式串中任意一个模式串,则该第一GPU核将对应的待匹配的子字符串的匹配标志的值为更新为不需要进行该第二匹配。
具体地,该匹配标志位的初始值可以设置为0,在第一匹配的匹配过程中,在输入一个字符后,自动机会从上一个状态跳转到当前状态,第一GPU核判断当前状态是否为匹配态,若当前状态为匹配态,说明匹配到了模式串,若当前状态为非匹配态,说明没有匹配到模式串。若当前状态为匹配态,则第一GPU核将匹配标志位的值加1,然后,根据输入的字符跳转到下一个状态继续进行匹配,若当前状态为非匹配态,则第一GPU核根据输入的字符跳跳转到下一个状态进行匹配。每次第一GPU核在匹配到模式串后,都会将匹配标志位的值加1。第一GPU核在匹配完成后,若没有匹配到任意一个模式串,那么匹配标志位的值为0,若第一GPU核匹配到了模式串,那么匹配标志位的值为非0。
第一GPU核在判断当前状态是否为匹配态时,具体可以根据当前状态的Match bit位的指进行判断,在自动机中每一个状态都设置有Match bit位,Match bit位用来表示对应的状态是否为匹配态。具体可以采用1和0表示匹配态和非匹配态两种状态,若当前状态的Match bit位的值为1,则说明当前状态为匹配态,若当前状态的Match bit位的值为0,则说明当前状态为非匹配态。
步骤203、计算单元中的每个GPU核将对应的待匹配的子字符串的匹配标志位的值发送给CPU。
每个GPU核在第一匹配结束后,将对应的待匹配的子字符串的匹配标志位的值发送给CPU,CPU根据待匹配的子字符串对应的匹配标志位的值确定是否对待匹配的子字符串进行第二匹配。
该计算单元中的每个GPU核将自己对应的待匹配的子字符串的匹配标志位的值发送给该CPU,具体为:首先,计算单元中的每个GPU核将自己对应的待匹配的子字符串的匹配标志位的值从自己的私有内存(Private Memory)写入该计算单元的本地内存中;然后,该计算单元将每个GPU核对应的待匹配的子字符串的匹配标志位的值从该本地内存(LocalMemory)写入该GPU的全局内存中,以使该CPU从该GPU的全局内存(Global/ConstantMemory)中将该计算单元中的每个GPU核对应的待匹配的子字符串的匹配标志位的值读取到该CPU的内存中。
图10为GPU的内存的一种结构示意图,如图10所示,GPU共有两个计算单元,每个计算单元都有两个GPU核,每个GPU核有一个私有内存,私有内存只能被所属的GPU核访问,不能被其他GPU核访问。每个计算单元有一个本地内存,本地内存可以被计算单元内的所有GPU核访问,但是不能被其他计算单元的GPU核访问。GPU有一个全局内存,全局内存可以被GPU中的所有的GPU核访问。上述三种内存中,每种内存的大小和访问速度都有差别,其中,私有内存的存储空间最小,但是访问速度最快,私有内存可以为寄存器。本地内存的大小一般为几十KB,访问速度比私有内存的速度慢,并且在某些低端设备或早期设备上没有本地内存。全局内存的大小最大,访问速度最慢,全局内存可以通过PCI-E与CPU的内存进行数据交换,全局内存为只读的,且通常为片外存储器,例如GPU的显存。
本实施例中,每个GPU核对应的待匹配的子字符串的匹配标志位的值存储在GPU核的私有内存中,每个GPU核在匹配到一个模式串时,将自己私有内存中的匹配标志位的值进行累加。在第一匹配结束后,计算单元中的每个GPU都将自己对应的待匹配的子字符串的匹配标志位的值写入计算单元的本地内存中,然后,计算单元会将本地内存中的每个GPU都将自己对应的待匹配的子字符串的匹配标志位的值写入GPU的全局内存中。CPU可以从GPU的全局内存中将每个GPU都将自己对应的待匹配的子字符串的匹配标志位的值读取到自己的内存。
本实施例中,计算单元中的每个GPU核只对对应的待匹配的子字符串进行第一匹配,通过第一匹配能够确定各待匹配的子字符串是否匹配到了某一个模式串,然后,将第一匹配的匹配结果更新待匹配的子字符串的匹配标志位的值,并将各待匹配的子字符串的匹配标志位的值发送给CPU,以使CPU根据各匹配标志位的值对待匹配的子字符串进行第二匹配。由于每个GPU核在第一匹配的匹配过程中,在匹配到模式串后并不记录待匹配的子字符串的匹配信息,从而使得GPU核在匹配态和非匹配态时所需的执行时间相同,因此,当GPU核在非匹配态时,不需要浪费时间等待计算单元中的其他GPU核的执行,而是直接跳转到该自动机的下一个状态进行匹配,从而缩短了GPU核的匹配时间,提高了GPU核的匹配效率,也提高了GPU核的计算资源的利用率。
图11为本发明实施例三提供的字符串匹配的方法的流程图,如图10所示,本实施例提供的字符串匹配的方法可以包括以下步骤:
步骤301、CPU接收计算单元中的每个GPU核发送的第一匹配的结果,其中,该每个GPU核发送的第一匹配的结果是该每个GPU核根据获取的待匹配的子字符串和自动机中进行第一匹配得到的。
其中,该自动机是根据多个模式串预先生成的,该自动机每一个节点对应一个状态,在该第一匹配的匹配过程中,该计算单元中的每个GPU核在该自动机的当前状态时,若没有匹配到模式串,则直接跳转到该自动机的下一个状态进行匹配。
该自动机可以是该CPU根据多个模式串预先生成的,自动机的生成过程和第一匹配的匹配过程可参照实施例一中的相关描述,这里不再赘述。CPU接收计算单元中的每个GPU核发送的第一匹配的结果,具体为,CPU将每个GPU核的第一匹配的结果,从GPU的全局内存中读取到CPU的内存中,然后,从CPU内存中读取每个GPU核的第一匹配的结果。
步骤302、CPU根据该每个GPU核的第一匹配的结果,确定是否对该计算单元中的第一GPU核对应的待匹配的子字符串进行匹配,该第一GPU核为该计算单元中的任意一个GPU核。
本实施例中,该每个GPU核发送的第一匹配的结果可以为该每个GPU核对应的待匹配的子字符串的匹配标志位的值,其中,该匹配标志位用于指示是否需要对对应的待匹配的子字符串进行该第二匹配。
当每个GPU核发送的第一匹配的结果可以为该每个GPU核对应的待匹配的子字符串的匹配标志位的值时,该CPU根据该计算单元中的每个GPU核的第一匹配的结果,确定是否对该计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,具体为:该CPU判断该第一GPU核对应的待匹配的子字符串的匹配标志位的值是否指示对该第一GPU核对应的待匹配的子字符串进行该第二匹配;若该第一GPU核对应的待匹配的子字符串的匹配标志位的值指示对该第一GPU核对应的待匹配的子字符串进行该第二匹配,则该CPU确定对该第一GPU核对应的待匹配的子字符串进行该第二匹配。
当待匹配的子字符串的匹配标志位的值用0和非0表示时,该CPU判断第一GPU核对应的待匹配的子字符串的匹配标志位的值是否为非0值,若为非0值,则确定第一GPU核对应的待匹配的子字符串需要进行第二匹配。
步骤303、若该CPU确定对该第一GPU核对应的待匹配的子字符串进行第二匹配,则该CPU将该第一GPU核对应的待匹配的子字符串输入该自动机进行第二匹配,并记录该第一GPU核对应的待匹配的子字符串的匹配信息。
该第一GPU核对应的待匹配的子字符串的匹配信息包括:该第一GPU核对应的待匹配的子字符串匹配到的模式串的标识、该第一GPU核对应的待匹配的子字符串匹配到的模式串在该第一GPU核对应的待匹配的子字符串中的位置信息。
图12为CPU的执行时序的示意图,如图11所示,CPU中共有四个核同时进行字符串匹配,写有非匹配态的白色矩形方块表示CPU在非匹配态时的实际执行时间,写有匹配态的灰色矩形方块表示CPU核在匹配态时的实际执行时间。在匹配态CPU核还需要额外的记录该待匹配的子字符串的匹配信息,因此,CPU核在匹配态时的实际执行时间大于在非匹配态时的实际执行时间。当在多核CPU上进行模式串匹配时,由于多核CPU的各个核相对独立,当某一CPU核在当前状态匹配到模式串,那么该CPU核记录该待匹配的子字符串的匹配信息,并不影响其他CPU核的执行,当该CPU核在当前状态没有匹配到模式串,该CPU核也不需要等待,直接跳转到下一个状态继续执行。通过比较图7和图11也可知,CPU核在匹配态和非匹配态时都不需要等待,即没有等待时间。
本实施例中,CPU根据每个GPU核的第一匹配的结果,确定是否对该计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,该第一GPU核为该计算单元中的任意一个GPU核,若第一GPU核在第一匹配中匹配到了模式串,那么CPU需要对第一GPU核对应的待匹配的子字符串进行第二匹配,若第一GPU核在第一匹配中没有匹配到模式串,CPU不对第一GPU核对应的待匹配的子字符串进行第二匹配。本实施例中,由于在第一匹配中第一GPU核在匹配到模式串时,不记录待匹配的子字符串的匹配信息,使得第一GPU核在没有匹配到模式串时不需要等待计算单元中的其他GPU核,缩短了每个GPU核的执行时间,从而提高了GPU核的执行效率,提高了GPU核的计算资源的利用率。
在实施例三的基础上,GPU核在进行第一匹配之前,CPU还要执行以下操作:该CPU接收待匹配的目标字符串,将该目标字符串发送到该GPU的全局内存中;该CPU按照分段规则将该目标字符串划分成多个待匹配的子字符串,该多个待匹配的子字符串中每一个待匹配的子字符串由该计算单元中的一个GPU核处理。CPU可以按照现有的任意一种分段规则对该目标字符串进行分段。
在NIDS或DPI系统中,对于网络数据包检测的并行化方法,可分为两类:包间并行,利用不同数据流的包之间没有相关性,进行并行匹配,每个GPU核对一个数据包进行匹配;包内并行,多个GPU核同时对同一数据包的不同分段进行匹配。对于包内并行,为了避免跨越相邻段而造成的漏检,分段数据需要有重叠区域,重叠区域的长度为最长模式串长度,例如,在Snort中,模式串的最大长度不超过20字节。图13为目标字符串的一种分段示意图,如图13所示,目标字符被划分为3段,分段1的最后部分与分段2的最前部分有重叠区域,分段2的最后部分与分段3的最前部分有重叠区域。
图14为本发明实施例四提供的GPU核的结构示意图,所述GPU核应用于异构计算系统中,所述异构计算系统包括:CPU和GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,如图14所示,本实施例中,所述计算单元中的每个GPU核包括:获取模块11、匹配模块12和发送模块13。
其中,获取模块11,用于获取所述GPU核对应的待匹配的子字符串;
匹配模块12,用于将所述待匹配的子字符串输入自动机中进行第一匹配,其中,所述自动机是根据多个模式串预先生成的,所述自动机的每一个节点对应一个状态,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
发送模块13,用于将所述待匹配的子字符串的第一匹配的结果发送给所述CPU,以使所述CPU根据所述计算单元中的每个GPU核的第一匹配的结果,对所述计算单元中的每个GPU核对应的待匹配的子字符串进行第二匹配。
所述获取模块12具体用于:从所述GPU的全局内存中将所述待匹配的子字符串读取到所述GPU核的私有内存中。
可选地,所述每个GPU核的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配。相应地,所述匹配模块12还用于:更新所述待匹配的子字符串的匹配标志位的值。所述匹配模块12具体用于:若所述待匹配的子字符串匹配到了所述多个模式串中的至少一个模式串,则将所述待匹配的子字符串的匹配标志位的值更新为需要进行所述第二匹配;若所述待匹配的子字符串没有匹配到所述多个模式串中任意一个模式串,则将所述待匹配的子字符串的匹配标志的值为更新为不需要进行所述第二匹配。
当所述每个GPU核的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值时,所述发送模块13,具体用于将所述待匹配的子字符串的匹配标志位的值发送给所述CPU。具体地,所述发送模块13用于将所述待匹配的子字符串的匹配标志位的值从所述GPU核的私有内存写入所述计算单元的本地内存中;然后,将所述待匹配的子字符串的匹配标志位的值从所述计算单元的本地内存写入所述GPU的全局内存中,以使所述CPU从所述GPU的全局内存中将所述待匹配的子字符串的匹配标志位的值读取到所述CPU的内存中。
进一步,所述获取模块11还用于:从所述GPU的全局内存中读取所述自动机,其中,所述自动机是所述CPU根据所述多个模式串生成并存储到所述GPU的全局内存中的。
本实施例的GPU核可用于执行实施例一和实施例二提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。
图15为本发明实施例五提供的CPU的结构示意图,所述CPU应用于异构计算系统中,所述异构计算系统包括:所述CPU和图形处理器GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,本实施例中,所述CPU包括:接收模块21、确定模块22和匹配模块23。
其中,接收模块21,用于接收所述计算单元中的每个GPU核发送的第一匹配的结果,其中,所述每个GPU核发送的第一匹配的结果是所述每个GPU核根据获取的待匹配的子字符串和自动机中进行第一匹配得到的,其中,所述自动机是根据多个模式串预先生成的,所述自动机的每一个节点对应一个状态,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
确定模块22,用于根据所述每个GPU核的第一匹配的结果,确定是否对所述计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,所述第一GPU核为所述计算单元中的任意一个GPU核;
匹配模块23,用于若确定对所述第一GPU核对应的待匹配的子字符串进行第二匹配,则所述CPU将所述第一GPU核对应的待匹配的子字符串输入所述自动机进行第二匹配,并记录所述第一GPU核对应的待匹配的子字符串的匹配信息。
所述第一GPU核对应的待匹配的子字符串的匹配信息包括:所述第一GPU核对应的待匹配的子字符串匹配到的模式串的标识、所述第一GPU核对应的待匹配的子字符串匹配到的模式串在所述第一GPU核对应的待匹配的子字符串中的位置信息。
本实施例提供的CPU可用于执行实施例三提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。
图16为本发明实施例六提供的CPU的结构示意图,如图16所示,本实施例的CPU在图15所示CPU的基础上,还包括:划分模块24和发送模块25。
所述接收模块21,还用于接收待匹配的目标字符串;
所述划分模块24,用于按照分段规则将所述目标字符串划分成多个待匹配的子字符串,所述多个待匹配的子字符串中每一个待匹配的子字符串由所述计算单元中的一个GPU核处理;
所述发送模块25,用于将所述目标字符串发送到所述GPU的全局内存中。
可选地,本实施例中,所述每个GPU核发送的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,其中,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配。相应的,所述确定模块22具体用于:判断所述第一GPU核对应的待匹配的子字符串的匹配标志位的值是否指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配;若所述第一GPU核对应的待匹配的子字符串的匹配标志位的值指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配,则确定对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配。
进一步地,所述CPU还包括:生成模块26,用于根据所述多个模式串生成所述自动机;所述发送模块25,还用于将所述自动机发送给所述每个GPU核。
本实施例提供的CPU可用于执行实施例三提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。
图17为本发明实施例七提供的异构计算系统的结构示意图,如图17所示,本实施例的异构计算系统包括:CPU31和GPU32,其中,CPU31可以采用图15或16所示的结构所示的结构,对应地,可以执行实施例三的技术方案,GPU32可以包括多个计算单元,每个计算单元可以包括多个GPU核,每个GPU核可以采用,可以执行实施例一和实施例二任一实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (19)
1.一种字符串匹配的方法,所述方法应用于异构计算系统中,所述异构计算系统包括:中央处理单元CPU和图形处理器GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,其特征在于,所述方法包括:
所述计算单元中的每个GPU核分别从所述GPU的全局内存中读取自动机,其中,所述自动机是所述CPU根据多个模式串生成,并存储到所述GPU的全局内存中的,所述自动机包含至少一个节点,每一个节点对应一个状态;
所述计算单元中的每个GPU核分别获取对应的待匹配的子字符串,并将所述待匹配的子字符串输入自动机中进行第一匹配,其中,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
所述计算单元中的每个GPU核将第一匹配的结果发送给所述CPU,以使所述CPU根据所述计算单元中的每个GPU核的第一匹配的结果,对所述计算单元中的每个GPU核对应的待匹配的子字符串进行第二匹配。
2.根据权利要求1所述的方法,其特征在于,所述每个GPU核的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配;
相应地,所述方法还包括:
所述计算单元中的每个GPU核根据第一匹配的结果分别更新对应的待匹配的子字符串的匹配标志位的值;
所述计算单元中的每个GPU核将第一匹配的结果发送给所述CPU,包括
所述计算单元中的每个GPU核将对应的待匹配的子字符串的匹配标志位的值发送给所述CPU。
3.根据权利要求2所述的方法,其特征在于,所述计算单元中的每个GPU核根据第一匹配的结果分别更新对应的待匹配的子字符串的匹配标志位的值,包括:
若所述计算单元中的第一GPU核对应的待匹配的子字符串匹配到了所述多个模式串中的至少一个模式串,则所述第一GPU核将对应的待匹配的子字符串的匹配标志位的值更新为需要进行所述第二匹配,其中,所述第一GPU核为所述计算单元中的任意一个GPU核;
若所述第一GPU核对应的待匹配的子字符串没有匹配到所述多个模式串中任意一个模式串,则所述第一GPU核将对应的待匹配的子字符串的匹配标志的值为更新为不需要进行所述第二匹配。
4.根据权利要求2所述的方法,其特征在于,所述计算单元中的每个GPU核将对应的待匹配的子字符串的匹配标志位的值发送给所述CPU,包括:
所述计算单元中的每个GPU核将对应的待匹配的子字符串的匹配标志位的值从自己的私有内存写入所述计算单元的本地内存中;
所述计算单元将每个GPU核对应的待匹配的子字符串的匹配标志位的值从所述本地内存写入所述GPU的全局内存中,以使所述CPU从所述GPU的全局内存中将所述计算单元中的每个GPU核对应的待匹配的子字符串的匹配标志位的值读取到所述CPU的内存中。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述计算单元中的每个GPU核分别获取对应的待匹配的子字符串,包括:
所述计算单元中的每个GPU核分别从所述GPU的全局内存中将对应的待匹配的子字符串读取到自己的私有内存中。
6.一种字符串匹配的方法,所述方法应用于异构计算系统中,所述异构计算系统包括:中央处理单元CPU和具有多个核的图形处理器GPU,所述GPU的多个核被划分成多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,其特征在于,所述方法包括:
所述CPU根据多个模式串生成自动机,并将所述自动机发送到所述GPU的全局内存中,所述自动机包含至少一个节点,每一个节点对应一个状态;
所述CPU接收所述计算单元中的每个GPU核发送的第一匹配的结果,其中,所述每个GPU核发送的第一匹配的结果是所述每个GPU核根据获取的待匹配的子字符串和从所述全局内存中获取的所述自动机中进行第一匹配得到的,其中,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
所述CPU根据所述每个GPU核的第一匹配的结果,确定是否对所述计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,所述第一GPU核为所述计算单元中的任意一个GPU核;
若所述CPU确定对所述第一GPU核对应的待匹配的子字符串进行第二匹配,则所述CPU将所述第一GPU核对应的待匹配的子字符串输入所述自动机进行第二匹配,并记录所述第一GPU核对应的待匹配的子字符串的匹配信息。
7.根据权利要求6所述的方法,其特征在于,所述每个GPU核发送的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,其中,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配;
所述CPU根据所述计算单元中的每个GPU核的第一匹配的结果,确定是否对所述计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,包括:
所述CPU判断所述第一GPU核对应的待匹配的子字符串的匹配标志位的值是否指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配;
若所述第一GPU核对应的待匹配的子字符串的匹配标志位的值指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配,则所述CPU确定对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
所述CPU接收待匹配的目标字符串,将所述目标字符串发送到所述GPU的全局内存中;
所述CPU按照分段规则将所述目标字符串划分成多个待匹配的子字符串,所述多个待匹配的子字符串中每一个待匹配的子字符串由所述计算单元中的一个GPU核处理。
9.根据权利要求6-8中任一项所述的方法,其特征在于,所述第一GPU核对应的待匹配的子字符串的匹配信息包括:所述第一GPU核对应的待匹配的子字符串匹配到的模式串的标识、所述第一GPU核对应的待匹配的子字符串匹配到的模式串在所述第一GPU核对应的待匹配的子字符串中的位置信息。
10.一种图形处理器GPU,所述GPU应用于异构计算系统中,所述异构计算系统包括:中央处理单元CPU和所述GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,其特征在于,所述计算单元中的每个GPU核包括:
获取模块,用于从所述GPU的全局内存中读取自动机,其中,所述自动机是所述CPU根据多个模式串生成,并存储到所述GPU的全局内存中的,所述自动机包含至少一个节点,每一个节点对应一个状态;
所述获取模块,还用于获取所述GPU核对应的待匹配的子字符串;
匹配模块,用于将所述待匹配的子字符串输入自动机中进行第一匹配,其中,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
发送模块,用于将所述待匹配的子字符串的第一匹配的结果发送给所述CPU,以使所述CPU根据所述计算单元中的每个GPU核的第一匹配的结果,对所述计算单元中的每个GPU核对应的待匹配的子字符串进行第二匹配。
11.根据权利要求10所述的GPU,其特征在于,所述每个GPU核的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配;
相应地,所述匹配模块还用于:更新所述待匹配的子字符串的匹配标志位的值;
所述发送模块,具体用于将所述待匹配的子字符串的匹配标志位的值发送给所述CPU。
12.根据权利要求10所述的GPU,其特征在于,所述匹配模块具体用于:
若所述待匹配的子字符串匹配到了所述多个模式串中的至少一个模式串,则将所述待匹配的子字符串的匹配标志位的值更新为需要进行所述第二匹配;
若所述待匹配的子字符串没有匹配到所述多个模式串中任意一个模式串,则将所述待匹配的子字符串的匹配标志的值为更新为不需要进行所述第二匹配。
13.根据权利要求11所述的GPU,其特征在于,所述发送模块具体用于:
将所述待匹配的子字符串的匹配标志位的值从所述GPU核的私有内存写入所述计算单元的本地内存中;
将所述待匹配的子字符串的匹配标志位的值从所述计算单元的本地内存写入所述GPU的全局内存中,以使所述CPU从所述GPU的全局内存中将所述待匹配的子字符串的匹配标志位的值读取到所述CPU的内存中。
14.根据权利要求10-13中任一项所述的GPU,其特征在于,所述获取模块具体用于:
从所述GPU的全局内存中将所述待匹配的子字符串读取到所述GPU核的私有内存中。
15.一种中央处理器CPU,所述CPU应用于异构计算系统中,所述异构计算系统包括:所述CPU和图形处理器GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,其特征在于,所述CPU包括:
生成模块,用于根据多个模式串生成自动机,并将所述自动机发送到所述GPU的全局内存中,所述自动机包含至少一个节点,每一个节点对应一个状态;
接收模块,用于接收所述计算单元中的每个GPU核发送的第一匹配的结果,其中,所述每个GPU核发送的第一匹配的结果是所述每个GPU核根据获取的待匹配的子字符串和从所述全局内存中获取的所述自动机中进行第一匹配得到的,其中,在所述第一匹配的匹配过程中,所述计算单元中的每个GPU核在所述自动机的当前状态时,若没有匹配到模式串,则直接跳转到所述自动机的下一个状态进行匹配;
确定模块,用于根据所述每个GPU核的第一匹配的结果,确定是否对所述计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,所述第一GPU核为所述计算单元中的任意一个GPU核;
匹配模块,用于若确定对所述第一GPU核对应的待匹配的子字符串进行第二匹配,则所述CPU将所述第一GPU核对应的待匹配的子字符串输入所述自动机进行第二匹配,并记录所述第一GPU核对应的待匹配的子字符串的匹配信息。
16.根据权利要求15所述的CPU,其特征在于,所述每个GPU核发送的第一匹配的结果为所述每个GPU核对应的待匹配的子字符串的匹配标志位的值,其中,所述匹配标志位用于指示是否需要对对应的待匹配的子字符串进行所述第二匹配;
所述确定模块具体用于:判断所述第一GPU核对应的待匹配的子字符串的匹配标志位的值是否指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配;
若所述第一GPU核对应的待匹配的子字符串的匹配标志位的值指示对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配,则确定对所述第一GPU核对应的待匹配的子字符串进行所述第二匹配。
17.根据权利要求15所述的CPU,其特征在于,所述CPU还包括:划分模块和发送模块;
所述接收模块,还用于接收待匹配的目标字符串;
所述划分模块,用于按照分段规则将所述目标字符串划分成多个待匹配的子字符串,所述多个待匹配的子字符串中每一个待匹配的子字符串由所述计算单元中的一个GPU核处理;
所述发送模块,用于将所述目标字符串发送到所述GPU的全局内存中。
18.根据权利要求15-17中任一项所述的CPU,其特征在于,所述第一GPU核对应的待匹配的子字符串的匹配信息包括:所述第一GPU核对应的待匹配的子字符串匹配到的模式串的标识、所述第一GPU核对应的待匹配的子字符串匹配到的模式串在所述第一GPU核对应的待匹配的子字符串中的位置信息。
19.一种异构计算系统,所述异构计算系统包括:中央处理单元CPU和图形处理器GPU,所述GPU包括多个计算单元,所述多个计算单元中的每个计算单元包括多个GPU核,所述多个计算单元之间并行对数据进行处理,所述每个计算单元内部的多个GPU核之间并行对数据进行处理,其特征在于:
所述计算单元中的每个GPU核用于执行权利要求1-5中任一项所述的方法,所述CPU用于执行权利要求6-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410472862.4A CN105404635B (zh) | 2014-09-16 | 2014-09-16 | 字符串匹配的方法、设备和异构计算系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410472862.4A CN105404635B (zh) | 2014-09-16 | 2014-09-16 | 字符串匹配的方法、设备和异构计算系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105404635A CN105404635A (zh) | 2016-03-16 |
CN105404635B true CN105404635B (zh) | 2019-05-28 |
Family
ID=55470125
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410472862.4A Active CN105404635B (zh) | 2014-09-16 | 2014-09-16 | 字符串匹配的方法、设备和异构计算系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105404635B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105868300B (zh) * | 2016-03-24 | 2019-05-07 | 国家计算机网络与信息安全管理中心 | 一种众核环境下的字符串匹配方法 |
CN106067158B (zh) * | 2016-05-26 | 2019-09-06 | 东方网力科技股份有限公司 | 一种基于gpu的特征比对方法及装置 |
CN110096628B (zh) * | 2018-04-20 | 2021-01-22 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN108762812B (zh) * | 2018-05-21 | 2021-12-03 | 北京中科睿芯科技集团有限公司 | 面向通用字符串处理的硬件加速结构装置及控制方法 |
CN108874725A (zh) * | 2018-06-04 | 2018-11-23 | 武汉导航与位置服务工业技术研究院有限责任公司 | 提高地基增强系统计算服务器计算效能的系统及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7818806B1 (en) * | 2005-11-08 | 2010-10-19 | Nvidia Corporation | Apparatus, system, and method for offloading pattern matching scanning |
CN102929900A (zh) * | 2012-01-16 | 2013-02-13 | 中国科学院北京基因组研究所 | 一种字符串匹配的方法及装置 |
CN103377259A (zh) * | 2012-04-28 | 2013-10-30 | 北京新媒传信科技有限公司 | 一种多模式字符串匹配方法和装置 |
CN103559017A (zh) * | 2013-10-23 | 2014-02-05 | 东软集团股份有限公司 | 基于gpu异构计算平台的字符串匹配方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010165169A (ja) * | 2009-01-15 | 2010-07-29 | Kddi Corp | モーションキャプチャデータの楽曲同期システムにおけるリズムマッチング並列処理装置およびそのコンピュータプログラム |
-
2014
- 2014-09-16 CN CN201410472862.4A patent/CN105404635B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7818806B1 (en) * | 2005-11-08 | 2010-10-19 | Nvidia Corporation | Apparatus, system, and method for offloading pattern matching scanning |
CN102929900A (zh) * | 2012-01-16 | 2013-02-13 | 中国科学院北京基因组研究所 | 一种字符串匹配的方法及装置 |
CN103377259A (zh) * | 2012-04-28 | 2013-10-30 | 北京新媒传信科技有限公司 | 一种多模式字符串匹配方法和装置 |
CN103559017A (zh) * | 2013-10-23 | 2014-02-05 | 东软集团股份有限公司 | 基于gpu异构计算平台的字符串匹配方法及系统 |
Non-Patent Citations (3)
Title |
---|
"一种基于CPU-GPU协同的特征码匹配机制";杨科等;《科学技术与工程》;20120229;第12卷(第5期);全文 |
"基于CPU+GPU异构平台的字符串匹配算法研究与实现";彭江锋;《中国优秀硕士学位论文全文数据库 信息科技辑》;20120115(第1期);摘要,第2.4、3.2、3.4节 |
"基于GPU的位并行多模式串匹配研究";赵光南等;《计算机工程》;20110731;第37卷(第14期);全文 |
Also Published As
Publication number | Publication date |
---|---|
CN105404635A (zh) | 2016-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105404635B (zh) | 字符串匹配的方法、设备和异构计算系统 | |
CN109522254B (zh) | 运算装置及方法 | |
CN102741859B (zh) | 用于减少模式辨识处理器中的功率消耗的方法及设备 | |
CN102804135B (zh) | 用于处理向量指令的数据处理设备和方法 | |
KR102028252B1 (ko) | 자율 메모리 아키텍처 | |
KR101747966B1 (ko) | 자율 서브시스템 아키텍처 | |
CN101751333A (zh) | 用于支援程序解析的方法、及其计算机程序以及计算机系统 | |
CN104011681A (zh) | 向逻辑分区提供反映处理器核的独占使用的硬件线程特定信息 | |
CN107851017A (zh) | 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法 | |
US11334358B2 (en) | Hardware accelerator having reconfigurable instruction set and reconfigurable decoder | |
CN112667170A (zh) | 一种面向滑动窗口数据分析的Spark数据缓存方法 | |
US8938484B2 (en) | Maintaining dependencies among supernodes during repeated matrix factorizations | |
CN111258950B (zh) | 原子访存方法、存储介质、计算机设备、装置和系统 | |
KR102594770B1 (ko) | 데이터 처리장치에서의 연속값들의 매칭 | |
CN103955443A (zh) | 一种基于gpu加速的蚁群算法优化方法 | |
CN115774784A (zh) | 一种文本对象的识别方法及装置 | |
US20170364809A1 (en) | Parallelization techniques for variable selection and predictive models generation and its applications | |
CN111290855B (zh) | 分布式环境中多gpu服务器的gpu卡管理方法、系统及存储介质 | |
CN111258653A (zh) | 原子访存方法、存储介质、计算机设备、装置和系统 | |
US11630667B2 (en) | Dedicated vector sub-processor system | |
US11841792B1 (en) | Instructions with multiple memory access modes | |
JP7342544B2 (ja) | 学習プログラムおよび学習方法 | |
US20220398015A1 (en) | Accelerating decision tree inferences | |
Ong et al. | A parallel bloom filter string searching algorithm on a many-core processor | |
Ozsoy et al. | Towards tera-scale performance for longest common subsequence using graphics processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |