基于GPU计算的字符串匹配方法和系统技术方案

技术编号:9642236 阅读:143 留言:0更新日期:2014-02-07 00:33
本发明专利技术提供一种基于GPU计算的字符串匹配方法及系统,其方法包括CPU预处理阶段和GPU匹配阶段;CPU预处理阶段包括:对特征字符串进行预处理和对待匹配数据进行预处理;分别在CPU主存和GPU全局存储器上分配待匹配数据缓存和结果缓存,将预处理后的待匹配数据从CPU主存中的待匹配数据缓存中复制到GPU全局存储器中的结果缓存中保存;GPU匹配阶段包括:采用GPU多线程任务并行执行方式对每个GPU线程中的预处理后的待匹配数据分别与预处理后的特征字符串前缀和特征字符串后缀进行匹配,将匹配成功的待匹配数据与相应的特征字符串逐字进行确认。利用本发明专利技术,能够解决Cache利用率低、启动线程数量多和访存开销大等问题,提升字符串匹配过程的性能。

【技术实现步骤摘要】
【专利摘要】本专利技术提供一种基于GPU计算的字符串匹配方法及系统,其方法包括CPU预处理阶段和GPU匹配阶段;CPU预处理阶段包括:对特征字符串进行预处理和对待匹配数据进行预处理;分别在CPU主存和GPU全局存储器上分配待匹配数据缓存和结果缓存,将预处理后的待匹配数据从CPU主存中的待匹配数据缓存中复制到GPU全局存储器中的结果缓存中保存;GPU匹配阶段包括:采用GPU多线程任务并行执行方式对每个GPU线程中的预处理后的待匹配数据分别与预处理后的特征字符串前缀和特征字符串后缀进行匹配,将匹配成功的待匹配数据与相应的特征字符串逐字进行确认。利用本专利技术,能够解决Cache利用率低、启动线程数量多和访存开销大等问题,提升字符串匹配过程的性能。【专利说明】基于GPU计算的字符串匹配方法和系统
本专利技术涉及信息识别
,更为具体地,涉及一种基于GPU计算的字符串匹配方法和系统。
技术介绍
随着网络技术的不断发展和日益丰富的网络应用,对网络的攻击方式层出不穷,因此网络安全产品也集成了越来越多的安全功能,如入侵防御系统、病毒检测、垃圾邮件检测、应用识别等,网络安全产品的应用需要以对通过的网络流量进行深度数据报文检测为基础,但是深度报文检测的模式匹配是制约整个安全产品系统性能的瓶颈。随着GPU (Graphic Processing Unit,图形处理器)技术的发展,GPU已经成为适合高并行性和计算量大的应用处理核心。由CPU和GPU组成的异构计算机为计算领域带来了一场革命。通过将工作负载的不同部分匹配到最适合的处理器,可以极大地提升计算机的性能,并且GPU在低成本的并行计算和良好的扩展性等方面的优点使其成为安全产品系统中一种字符串匹配的新的执行模型。图1示出了现有的基于GPU的字符串匹配方法流程。如图1所示,现有的基于GPU的字符串匹配方法流程包括:首先对特征串集合进行预处理,形成通常是二维数组的自动机状态转换表,并将该表拷贝到GPU全局存储器中且与纹理存储器绑定,使用带有Cache (高速缓冲存储器)的纹理存储器可以提高访存的效率,并在主机内存中采用双缓冲区机制分别用于存储积攒的网络数据报文和复制到GPU存储器中;然后启动大量线程对数据报文进行字符串匹配处理,数据报文存储在GPU全局存储器或纹理存储器中(或再从GPU全局存储器拷贝到共享存储器中以降低访存延时)接着在GPU中执行匹配函数;最终将匹配结果从GPU存储器复制到CPU主存中。在国内外已有的基于GPU的字符串匹配方法中,在GPU上进行字符串匹配主要有两种方法,第一种是数据并行,比如专利申请号为201010539214.8的中国专利申请所公开的基于GPU的高速网络报文内容检测方法,该专利申请披露了该方法执行的方式,将数据报文分成多个片段,然后每个片段启动一个线程执行字符串匹配工作;第二种是任务并行,比如台湾清华大学的Cheng-Hung Lin,Chen-Hsiung Liu,Lung-Sheng Chien和Shih-ChiehChang 四人在 ieee 上发表的论文《Accelerating Pattern Matching Using a NovelParallel Algorithm on GPUs)) (2012年12月),其中论述了以下执行方式:在GPU上启动与数据报文字符长度相等数量的线程,每个字符都作为匹配工作的开始位置,对应着一个线程。上述两种进行字符串匹配的方法各自存在着不足。在数据并行方式中,采用每个线程匹配等长的数据报文片段,因此每个线程处理的字符位置间隔较大,不利于集中访存,对于有Cache机制就会造成大量Cache的换进换出操作,增加了匹配过程中的访存开销。并且需要较大的数据报文才能启动足够数量的线程发挥GPU并行处理的优势。字符串匹配算法分支较多,多模字符串匹配算法在匹配失败时需要回退处理,由于GPU较差的逻辑处理能力,多模字符串匹配算法的执行流程包含过多的分支将造成GPU处理单元执行效率降低。同时,还需要考虑“边缘检测”的情况,即匹配命中的数据位于两个片段分片的位置。在任务并行方式中,每个字符都作为起始偏移,启动一个线程进行匹配。每字节的任务并行方式会启动大量的线程,即使有的线程执行时间较短,但是大量线程的启动也会有很大的时间开销。并且,每个启动的线程至少都会有两次访存操作,包括:从待匹配数据读值以及查找状态转换表。所以线程增加的同时也增加了内存访问的次数,进而影响性能。最后,每个线程都会返回一个结果,那么将匹配结果复制到CPU主存也会占用很多的时间。因此,以上两种现有的进行字符串匹配的方法都各自存在着效率不高的问题。
技术实现思路
鉴于上述问题,本专利技术的目的是提供一种基于GPU计算的字符串匹配方法和系统,以解决cache利用率低、启动线程数量多和访存开销大等问题,从而提升特征字符串匹配过程的性能。本专利技术提供的基于GPU计算的字符串匹配方法,包括CPU预处理阶段和GPU匹配阶段;其中,在CPU预处理阶段的过程中:对特征字符串进行预处理;其中,首先构建位向量掩码表,并根据位向量掩码表生成快速过滤子表;将位向量掩码表和快速过滤子表拷贝到GPU全局存储器;分别在CPU主存和GPU全局存储器上分配待匹配数据缓存和结果缓存; 对待匹配数据进行预处理,并将预处理后的待匹配数据从CPU主存中的待匹配数据缓存中复制到GPU全局存储器中的待匹配数据缓存中保存;在GPU匹配阶段的过程中,根据对特征字符串进行预处理所构建的位相量掩码表以及生成的快速过滤子表,采用GPU多线程任务并行执行方式对每个GPU线程中预处理后的待匹配数据分别与预处理后的特征字符串前缀和特征字符串后缀进行匹配;将匹配成功的预处理后的待匹配数据与相应的特征字符串逐字进行确认,并保存在结果缓存中,最后将结果缓存的数据拷贝到CPU主存中的结果缓存中。此外,优选的方案是,在采用GPU多线程任务并行执行方式对预处理后的待匹配数据与特征字符串前缀和特征字符串后缀分别进行匹配的过程中,根据每个GPU线程的标识确定预处理后的待匹配数据的起始偏移,根据第一特征字符串前缀的长度和第二特征字符串前缀的长度确定GPU线程的匹配窗口 ;从距离预处理后的待匹配数据的起始偏移的第一特征字符串前缀长度的位置上,获取一个算法字符,根据算法字符在所述纹理存储器中查到快速过滤子表的相应比特位,根据所述相应比特位判断GPU线程是否继续执行;如果相应比特位为0,结束GPU线程执行,如果相应比特位为1,则GPU线程继续执行;如果相应比特位为I时,根据算法字符在纹理存储器中查到所述位向量掩码表获取一个位向量掩码值,将位向量掩码值设为初始状态向量,以算法字符的位置作为起点,在GI^U线程的匹配窗口内正向依次获取算法字符,以位并行方式进行向量更新,在向量更新过程中,预处理后的待匹配数据与特征字符串后缀进行匹配;根据特征字符串后缀的匹配结果,将在以位并行方式进行向量更新中获取的最后的状态向量作为初始向量,以距离预处理后的待匹配数据的起始偏移的第二特征字符串前缀长度的位置作为起点,在GPU线程的匹配窗口内反向依次获取算法字符,以位并行方式进行反向向量更新;在反向向量更新中,预处理后的待匹配数据与特征字符本文档来自技高网
...

【技术保护点】
一种基于GPU计算的字符串匹配方法,包括CPU预处理阶段和GPU匹配阶段;其中,?在所述CPU预处理阶段的过程中:?对所述特征字符串进行预处理;其中,首先构建位向量掩码表,并根据所述位向量掩码表生成快速过滤子表;然后将所述位向量掩码表和所述快速过滤子表拷贝到GPU全局存储器;?分别在CPU主存和所述GPU全局存储器上分配待匹配数据缓存和结果缓存;?对待匹配数据进行预处理,并将预处理后的待匹配数据从所述CPU主存中的所述待匹配数据缓存中复制到所述GPU全局存储器中的所述待匹配数据缓存中保存;?在所述GPU匹配阶段的过程中,?根据对所述特征字符串进行预处理所构建的位相量掩码表以及生成的快速过滤子表,采用GPU多线程任务并行执行方式对每个GPU线程中的预处理后的待匹配数据分别与预处理后的所述特征字符串前缀和所述特征字符串后缀进行匹配;?将匹配成功的待匹配数据与相应的所述特征字符串逐字进行确认,并保存在所述结果缓存中,最后将结果缓存的数据拷贝到所述CPU主存中的所述结果缓存中。

【技术特征摘要】

【专利技术属性】
技术研发人员:侯智瀚杨枭
申请(专利权)人:东软集团股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1