一种基于GPU流的快速并行字符串匹配方法和系统技术方案

技术编号:28673671 阅读:15 留言:0更新日期:2021-06-02 02:49
本发明专利技术公开了一种基于GPU流的快速并行字符串匹配方法,其通过优化后的基于GPU流的并行字符串匹配加速,实现内核级的任务并行。本发明专利技术首先将大数据任务分割成没有依赖关系的小数据任务,然后将小数据任务调度到每个GPU设备上运行。字符串数据集存储在低速的全局内存中,模式串具有较高的访问频率,存放在高速的共享内存中。通过根据应用需求和资源状态启动合适的CUDA流数量,使得所有的任务能够异步并发执行。本发明专利技术能够解决现有BF算法由于采用全部遍历字符的暴力检索导致计算过程存在许多无意义的匹配计算的技术问题,以及现有BK算法计算过程的时间复杂度高的技术问题,以及现有KMP算法移动策略不佳、速度较慢的技术问题。

【技术实现步骤摘要】
一种基于GPU流的快速并行字符串匹配方法和系统
本专利技术属于互联网
,更具体地,涉及一种基于GPU流的快速并行字符串匹配方法和系统。
技术介绍
作为众多科学计算领域的基础,字符串匹配问题目前得到了广泛和深入的研究。字符串匹配在入侵检测、分子生物学、信息过滤、病毒检测、拼写检查、语言翻译、数字压缩、搜索引擎等诸多问题中得到广泛应用。现有的字符串匹配算法主要包括:暴力检索(BruteForce,简称BF)算法、哈希检索(Robin-Karp,简称RK)算法、Knuth-Morria-Pratt(简称KMP)算法、BoyerMoore(简称BM)算法;其中,BF算法主要是通过暴力检索所有的字符匹配结果,直到匹配成功或匹配结束;RK算法是对BF算法的改进,其主要通过首先通过对比子串的hash值筛选子串,然后再对子串执行BF算法;KMP算法相比BF算法有比较大的改进,主要是通过消除主串指针的回溯提高算法效率;BM算法主要通过坏字符和好后缀规则加速字符移动效率,相比KMP速度快3-5倍。然而,上述现有的字符串匹配方法,均存在一些不可忽略的缺陷:第一、上述BF算法采用全部遍历字符的暴力检索,计算过程存在许多无意义的匹配计算;第二、上述BK算法首先遍历所有可能匹配的子串的hash值,且大数据集计算的时间复杂度高;第三、上述KMP算法使用移位策略加速模式串的移动,但移动策略不是最优,速度较慢;第四、上述BM算法无法面向大数据集实现数据划分和基于GPU高并发设备的并行计算。
技术实现思路
针对现有技术的以上缺陷或改进需求,本专利技术提供了一种基于GPU流的快速并行字符串匹配方法和系统。其目的在于,解决现有BF算法由于采用全部遍历字符的暴力检索导致计算过程存在许多无意义的匹配计算的技术问题,以及现有BK算法计算过程的时间复杂度高的技术问题,以及现有KMP算法移动策略不佳、速度较慢的技术问题,以及现有BM算法无法面向大数据集实现数据划分和基于GPU高并发设备的并行计算的技术问题。为实现上述目的,按照本专利技术的一个方面,提供了一种基于GPU流的快速并行字符串匹配方法,是应用在包括一个主节点和多个从节点的分布式计算系统中,所述方法包括以下步骤:(1)主节点接收用户提交的应用程序,对该应用程序进行解析,以得到DAG图;(2)主节点对步骤(1)中DAG图中任务所对应的数据进行分割处理,以得到分割后的多个数据块;(3)主节点将步骤(2)得到的分割后的数据块发送到从节点。(4)从节点判断每个数据块中是否存在多个分割点。如果是则转入步骤(5),否则转入步骤(6);(5)从节点按照分割点对步骤(2)得到的每个数据块进行分割,以得到多个分割后的数据块,并创建k个GPU执行流,并将分割后的数据块平均分配给k个GPU执行流进行处理,以得到k个并行执行的任务执行流,其中k为小于等于64的整数;(6)从节点对步骤(2)得到的每个数据块按照前55%和后55%两部分进行分割,以得到独立的两个数据块,并将分割后的两个数据块分配给两个GPU执行流处理,以得到2个并行执行的任务执行流;(7)从节点为步骤(5)和(6)中得到的任务执行流配置s个线程,以得到包含s个并行控制流的控制流组,其中s的取值范围是128到512之间。(8)从节点利用步骤(7)得到的控制流组中的第m个控制流对首字符表F中第m个元素Fm到第m-1个元素Fm+1之间的字符串PSm进行匹配,以得到移位后的模式串P,其中m∈[1,s];(9)从节点判断步骤(8)移位后的模式串P和字符串PSm是否匹配成功,如果是则过程结束,否则进入步骤(10);(10)从节点判断首字符表F中第m+s个元素Fm+s是否处于首字符表F中,如果是,则进入步骤(11),否则过程结束;(11)从节点将首字符表F中第m个元素Fm设置为等于Fm+s,并返回步骤(8)。优选地,步骤(2)具体包括以下子步骤:(2-1)主节点对任务所对应的数据进行扫描,以得到坏字符表。(2-2)主节点对任务所对应的数据进行扫描,以得到首字符表F。(2-3)主节点获取从节点中的GPU总数,并根据该GPU总数确定每个GPU处理的平均数据块大小L。(2-4)主节点根据步骤(2-3)得到的平均数据块大小L对主节点任务所对应的数据进行分割,以得到分割后的多个数据块;优选地,步骤(2-4)具体为,分割过程的第一个分割点,是主节点任务所对应的数据所对应的字符串中,与距离L最近的字符所在的位置,其中L的起始点是字符串的起点,分割过程的第二个分割点,是主节点任务所对应的数据所对应的字符串中,与距离2L最近的字符所在的位置,分割过程的第三个分割点,是主节点任务所对应的数据所对应的字符串中,与距离3L最近的字符所在的位置,…,以此类推,然后以确定的这些分割点对数据进行分割,以得到分割后的多个数据块。优选地,坏字符表是通过如下子步骤构建:(2-1-1)设置计数器i=1,并获取主节点任务所对应的模式串P,并获取数组skip用于记录坏字符,其中数组skip的大小为256;(2-1-2)判断i是否等于256,如果是则过程结束,并将得到的数组skip作为最终的坏字符表,否则进入(2-1-3);(2-1-3)判断数组skip中第i个元素所对应的字符Ci是否位于模式串P中,若是则进入步骤(2-1-4),否则将数组skip中第i个元素设置为Plen,其中Plen表示主节点任务所对应的模式串P的长度;(2-1-4)将数组skip中第i个元素设置为Plen-1-max(PCi),其中PCi表示数组skip中第i个元素所对应的字符Ci在模式串P中的位置,max(PCi)表示字符Ci在模式串P中最右端的位置,然后进入步骤(2-1-5)。(2-1-5)设置i=i+1,并返回步骤(2-1-2)。优选地,步骤(2-2)包括以下子步骤:(2-2-1)设置计数器j=1,k=1,并获取主节点任务对应的模式串P、以及任务对应的数据所对应的字符串S,并获取可变长度数组str;(2-2-2)判断j是否等于字符串S的长度,如果是则过程结束,并将得到的数组str作为最终的首字符表F,否则进入步骤(2-2-3);(2-2-3)判断字符串S中第j个元素所对应的字符Sj是否等于模式串P中的首字符P1,如果是则可变长度数组str中的第k个元素设置为j,并设置k=k+1,然后进入步骤(2-2-4);否则直接进入步骤(2-2-4);(2-2-4)设置j=j+1,并返回步骤(2-2-2)。优选地,如果数据块中存在坏字符C,且该坏字符C不属于主节点任务所对应的模式串P中的任意字符,则该坏字符C在数据块中所在的位置就是分割点。优选地,步骤(8)包括以下子步骤:(8-1)设置计数器p=模式串P的长度,并获取模式串P中第p个位置的字符Cp、以及字符串PSm中第p个位置的字符CSp;(8-2)判断本文档来自技高网...

【技术保护点】
1.一种基于GPU流的快速并行字符串匹配方法,是应用在包括一个主节点和多个从节点的分布式计算系统中,其特征在于,所述方法包括以下步骤:/n(1)主节点接收用户提交的应用程序,对该应用程序进行解析,以得到DAG图;/n(2)主节点对步骤(1)中DAG图中任务所对应的数据进行分割处理,以得到分割后的多个数据块;/n(3)主节点将步骤(2)得到的分割后的数据块发送到从节点。/n(4)从节点判断每个数据块中是否存在多个分割点。如果是则转入步骤(5),否则转入步骤(6);/n(5)从节点按照分割点对步骤(2)得到的每个数据块进行分割,以得到多个分割后的数据块,并创建k个GPU执行流,并将分割后的数据块平均分配给k个GPU执行流进行处理,以得到k个并行执行的任务执行流,其中k为小于等于64的整数;/n(6)从节点对步骤(2)得到的每个数据块按照前55%和后55%两部分进行分割,以得到独立的两个数据块,并将分割后的两个数据块分配给两个GPU执行流处理,以得到2个并行执行的任务执行流;/n(7)从节点为步骤(5)和(6)中得到的任务执行流配置s个线程,以得到包含s个并行控制流的控制流组,其中s的取值范围是128到512之间。/n(8)从节点利用步骤(7)得到的控制流组中的第m个控制流对首字符表F中第m个元素F...

【技术特征摘要】
1.一种基于GPU流的快速并行字符串匹配方法,是应用在包括一个主节点和多个从节点的分布式计算系统中,其特征在于,所述方法包括以下步骤:
(1)主节点接收用户提交的应用程序,对该应用程序进行解析,以得到DAG图;
(2)主节点对步骤(1)中DAG图中任务所对应的数据进行分割处理,以得到分割后的多个数据块;
(3)主节点将步骤(2)得到的分割后的数据块发送到从节点。
(4)从节点判断每个数据块中是否存在多个分割点。如果是则转入步骤(5),否则转入步骤(6);
(5)从节点按照分割点对步骤(2)得到的每个数据块进行分割,以得到多个分割后的数据块,并创建k个GPU执行流,并将分割后的数据块平均分配给k个GPU执行流进行处理,以得到k个并行执行的任务执行流,其中k为小于等于64的整数;
(6)从节点对步骤(2)得到的每个数据块按照前55%和后55%两部分进行分割,以得到独立的两个数据块,并将分割后的两个数据块分配给两个GPU执行流处理,以得到2个并行执行的任务执行流;
(7)从节点为步骤(5)和(6)中得到的任务执行流配置s个线程,以得到包含s个并行控制流的控制流组,其中s的取值范围是128到512之间。
(8)从节点利用步骤(7)得到的控制流组中的第m个控制流对首字符表F中第m个元素Fm到第m-1个元素Fm+1之间的字符串PSm进行匹配,以得到移位后的模式串P,其中m∈[1,s];
(9)从节点判断步骤(8)移位后的模式串P和字符串PSm是否匹配成功,如果是则过程结束,否则进入步骤(10);
(10)从节点判断首字符表F中第m+s个元素Fm+s是否处于首字符表F中,如果是,则进入步骤(11),否则过程结束;
(11)从节点将首字符表F中第m个元素Fm设置为等于Fm+s,并返回步骤(8)。


2.根据权利要求1所述的基于GPU流的快速并行字符串匹配方法,其特征在于,步骤(2)具体包括以下子步骤:
(2-1)主节点对任务所对应的数据进行扫描,以得到坏字符表。
(2-2)主节点对任务所对应的数据进行扫描,以得到首字符表F。
(2-3)主节点获取从节点中的GPU总数,并根据该GPU总数确定每个GPU处理的平均数据块大小L。
(2-4)主节点根据步骤(2-3)得到的平均数据块大小L对主节点任务所对应的数据进行分割,以得到分割后的多个数据块。


3.根据权利要求2所述的基于GPU流的快速并行字符串匹配方法,其特征在于,步骤(2-4)具体为,分割过程的第一个分割点,是主节点任务所对应的数据所对应的字符串中,与距离L最近的字符所在的位置,其中L的起始点是字符串的起点,分割过程的第二个分割点,是主节点任务所对应的数据所对应的字符串中,与距离2L最近的字符所在的位置,分割过程的第三个分割点,是主节点任务所对应的数据所对应的字符串中,与距离3L最近的字符所在的位置,…,以此类推,然后以确定的这些分割点对数据进行分割,以得到分割后的多个数据块。


4.根据权利要求1至3中任意一项所述的基于GPU流的快速并行字符串匹配方法,其特征在于,坏字符表是通过如下子步骤构建:
(2-1-1)设置计数器i=1,并获取主节点任务所对应的模式串P,并获取数组skip用于记录坏字符,其中数组skip的大小为256;
(2-1-2)判断i是否等于256,如果是则过程结束,并将得到的数组skip作为最终的坏字符表,否则进入(2-1-3);
(2-1-3)判断数组skip中第i个元素所对应的字符Ci是否位于模式串P中,若是则进入步骤(2-1-4),否则将数组skip中第i个元素设置为Plen,其中Plen表示主节点任务所对应的模式串P的长度;
(2-1-4)将数组skip中第i个元素设置为Plen-1-max(PCi),其中PCi表示数组skip中第i个元素所对应的字符Ci在模式串P中的位置,max(PCi)表示字符Ci在模式串P中最右端的位置,然后进入步骤(2-1-5)。
(2-1-5)设置i=i+1,并返回步骤(2-1-2)。


5.根据权利要求4所述的基于GPU流的快速并行字符串匹...

【专利技术属性】
技术研发人员:陈海军唐卓曹嵘晖刘妮叶晖
申请(专利权)人:湖南工商大学
类型:发明
国别省市:湖南;43

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

1