论文部分内容阅读
网络内容分析系统最核心问题之一是字符串模式匹配。串匹配是计算机领域最基本的问题,经过多年的研究,已经获得很多经典的算法。但是,传统的串匹配算法遇到了一个瓶颈,精确单模式和多模式字符串匹配算法复杂度下限是O(n/mlog|∑|m)和O(n/mlog|∑|rm),不少优秀经典算法,如BMH,Wu-Manber,都已经接近或达到这一最优时间复杂度。
本文从并行的角度出发,考虑突破这一瓶颈的办法。采用主流的双核处理器,研究多核指令、SSE指令和网格技术在传统的字符串匹配算法中的应用。本文主要进行了下面一些研究工作。
(1)在精确匹配算法中:
对基于滑动窗口的后缀算法进行了研究,提出并行后缀算法,主要思想是:每次正常比较(跳跃)后,利用SSE指令将下一个窗口跳跃可能到达的地方都预先取出来。这样每次比较能实现两个窗口的跳跃。
对基于子串的算法进行了研究,提出并行子串算法:在原算法中,采用Trie,FactorOracle和DAWG自动机对子串进行匹配,算法复杂度是0(m)。改成并行算法后,采用SSE匹配子串,算法复杂度是O(「m/16」)。
将两种算法结合,在普通的双核CPU(Intel E2200)上进行了实验。结果显示,对于目前公认最快的Boyer-Moore-Horspool和Wu-Manber算法,提出的并行算法达到了较高的并行加速比。
(2)在近似匹配算法的研究中:
在NFA自动机和BPM算法的研究中,发现这两种数据模型都可以转化成编辑距离矩阵,利用矩阵反对角线方向的数据独立性,提出了相应的并行算法。
在基于Hash的字符串匹配算法中,提出了一种并行算法,将原算法一次计算一个字符串的Hash值,改为一次并行计算多个字符串的Hash值,并在随后的Hash值粗略比较和逐字精确比较中也用并行算法实现。
(3)应用可分负载理论,在FuseGrid网格上对字符串匹配算法进行了研究和实验。通过拟合通讯和处理参数,得出了适合网格的字符串算法的范围。对多轮分配任务策略,提出一种快速启发式算法,能提高各个节点CPU的使用效率,缩短并行近似串匹配的时间。
计算和分析了基于网格的字符串匹配算法加速性能和扩展性,并和基于多核SSE的字符串匹配算法进行了比较,证明基于网格的字符串匹配算法具有良好的并行扩展性,参加的节点越多,获得的加速比就越高。
将基于网格的和基于多核的字符串匹配算法结合,证明可以互相结合,取长补短,实现了网格、多核、SSE三级并行加速。