- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于GPU加速快速字符串匹配算法
基于GPU加速快速字符串匹配算法
摘要:如何提高字符串实际匹配效率一直是信息匹配领域中非常重要的研究课题。在分析字符串匹配并行规律的基础上,结合GPU并行体系结构,对Sunday算法实现并行化。在CPU和GPU不同计算平台上分别做了对比实验,实验结果显示基于GPU并行实现的Sunday算法比传统Sunday算法具有更高的匹配速度。
关键词关键词:CUDA;Sunday算法;并行计算
DOIDOI:10.11907/rjdk.143766
中图分类号:TP312
文献标识码:A文章编号文章编号2015)002005103
基金项目基金项目:山东省自然科学基金项目(ZR2013FL015);山东省研究生教育创新资助计划项目(SDYY12060)
作者简介作者简介:续士强(1990-),男,山东滕州人,曲阜师范大学信息科学与工程学院硕士研究生,研究方向为网络与并行计算;祝永志(1964-),男,吉林榆树人,曲阜师范大学信息科学与工程学院教授、硕士生导师,研究方向为网络与并行计算。
0引言
字符串匹配被广泛应用于解决搜索引擎、网络入侵检测、计算机病毒特征码匹配以及DNA序列匹配等诸多问题中。目前关于字符串匹配算法的研究已经相对成熟,传统的串匹配算法实现思想主要分为前缀搜索、后缀搜索和子串搜索,经典的算法[1]有KMP算法、Shift-And算法、BM算法、BDM算法等等。然而传统算法在实际应用中并没有表现理论上的优势,比如,在一个普通文本文件中查找字符串,BF算法用的时间通常比KMP算法要少,即使后者在时间复杂度上要优于前者。因此,选择一种在实际应用中性能较好的算法,对于提高效率至关重要。
随着图形处理器性能的不断提高,特别是通用并行计算架构(CUDA)的推出,图形处理器已不再局限于图形图像处理,其在通用计算方面已经远远超越了CPU。由于GPU的特点就是处理密集型数据和并行数据计算,因此,CUDA编程模型非常适合解决大规模并行计算问题。
1CUDA编程模型
CUDA(Compute Unified Device Architecture),是由NVIDIA推出的通用并行计算架构,它在C语言基础上添加了适用于GPU并行计算的API和开发库,是在GPU强大计算能力基础上建立的效率更高的密集数据计算解决方案。
在NVIDIA的GPU中,最基本的处理单元是SP(流处理器),多个SP组成一个SM(流多处理器),它们之间可以共享控制逻辑和指令缓存。在CUDA编程下,程序执行的最小单位是thread(线程),每个thread都有各自的一份register和local memory。一组thread组成一个block(线程块),在同一个block中的thread可以存取同一块共享内存,最后执行同一kernel函数的block构成一个grid(块网格)。CUDA架构下的程序包括运行在CPU上负责串行执行的Host端,以及运行在GPU上作并行计算的Device端。Kernel函数由host端调用,能生成大量的线程,每个线程处理对应的数据块,从而实现了数据的并行处理。grid的所有线程都执行同一个kernel函数。CUDA的device在实际执行时,以block为单位,并将每个block分给SM执行,同一block中的thread,又以32个组成一个warp一起执行。每个SM只执行一个block中的warp,由于在实际执行过程中,某个warp需要访问全局存储器,这时SM就会切换到别的warp来继续执行。因此,一个SM可以同时处理多个block。
2基于GPU的Sunday算法并行化
2.1Sunday字符串匹配算法
Sunday算法源于BM算法充分利用坏字符的思想。Sunday算法将计算好后缀的时间节约下来,将所有情况归为坏字符规则来匹配,这对短模式串匹配十分有利。因此,Sunday算法的匹配过程基本应用的就是BM算法的坏字符规则,即当字符串不匹配时,判断目标串进行匹配的下一字符是否在模式串中出现,如果出现,则模式串移动到目标串中最右端的该字符串的下一位置;如果没有出现,则模式串直接跳过模式串字符长度。
Sunday算法实现如下:
while(main_imainStrLen)
{
int tem=main_i;
while(sub_jsubStrLen)
{
if(mainStr[main_i] == subStr[sub_j])
{
main_i++;
sub_j++;
continue;
}
else{
if(tem+subStrLen mainSt
原创力文档


文档评论(0)