一种基于gpu的并行时间序列挖掘方法

文档序号:6544928阅读:153来源:国知局
一种基于gpu的并行时间序列挖掘方法
【专利摘要】本发明公开了一种基于GPU的并行时间序列挖掘方法,其特征在于,包括以下步骤:扫描输入序列数据库中的记录到CPU的内存缓冲区中;计算长度为1的候选序列以及所述长度为1的候选序列的支持度;计算得到长度为1的频繁序列;计算候选序列信息矩阵和候选事件信息矩阵并拷贝到GPU的显存中,采用CUDA在所述GPU上并行计算长度为2的候选序列以及其支持度,并将结果保存在GPU的显存中;计算得到长度为2的频繁序列;根据输入序列数据库计算得到垂直格式数据库;将长度为1和长度为2的频繁序列和垂直格式数据库拷贝到GPU的显存中,在GPU中并行计算得到其余长度的频繁序列。本发明能够提高计算效率。
【专利说明】—种基于GPU的并行时间序列挖掘方法
【技术领域】
[0001]本发明涉及数据库挖掘技术,尤其是涉及一种基于GPU的并行时间序列挖掘方法。
【背景技术】
[0002]互联网技术的快速发展把我们带进了一个信息大爆炸的时代,大数据已经成为不可逆转的时代潮流。随着数据存储设备成本的不断降低,以及数据采集方式和渠道的多样化,越来越多的公司和组织构建了自己的数据库,用于存储海量的用户数据。然而,数据的快速积累带来了信息超载的问题,企业和用户真正感兴趣的信息被湮没在大量纷繁复杂的数据当中,有用的信息难以被有效的挖掘。数据挖掘技术则被认为是当前解决信息超载问题的有效工具之一。通过对海量数据的分析和挖掘,我们可以从中获取大量有价值的信息,使大数据更好的为人们服务。
[0003]序列模式挖掘是作为数据挖掘领域的一个重要研究方向,越来越受到研究人员的关注。其目的在于寻找海量数据库中频繁出现的序列模式。序列模式是指数据库中按照一定的次序频繁出现的有序序列。传统的数据挖掘任务仅仅是找出用户可能会购买的物品集合,而不关心这些物品集合之间的次序问题,但序列模式挖掘则把时间信息考虑在内,不仅挖掘出用户购买的物品集合,还要指出这些物品集合在时间上的先后次序。如此以来,我们就可以更加准确的根据用户当前购买的物品预测下一步的购买行为,进而为用户提供一些更具价值的推荐信息,帮助用户更快的找到所需。正是由于序列模式挖掘引入了模式之间的相互次序信息,因此在实践中有着十分重要和广泛的应用。现实生活中的许多科学问题和商业问题都可以转化为寻找具有先后次序的序列问题。在网页实时推荐系统中,通过对网络访问日志中的记录进行序列挖掘,可以确定各个被访问页面之间的时态关系,以及网站的访问者浏览网页的次序,基于这些序列模型,我们可以对网页的布局进行优化,甚至可以给不同的用户提供个性化的访问体验。生物信息学中的基因序列检测、预测序列功能、研究序列之间的相互关系和作用等,均可以通过对DNA序列进行频繁模式挖掘,从而有效的指导基因的识别和功能注释、蛋白质序列组成信息的识别。
[0004]目前,序列模式挖掘算法主要分为两类,一类是基于候选序列生成及测试的方法,另一类是基于模式增长的方法。基于候选生成及测试的方法利用关联规则挖掘中的Apriori法则,通过迭代的过程,每次把长度为k的频繁序列模式按照既定的合并方式合并成长度为k+Ι的候选序列,然后扫描数据库对候选序列进行支持度计数,支持度大于阈值的候选模式成为频繁k+Ι序列,作为下次迭代的输入,直至搜索到所有的频繁模式则算法终止。基于模式增长的方法在生成频繁序列的过程中,不产生任何的候选序列,均是从构建原始数据库的一种特殊表示开始,对搜索空间进行分割,通过对已有的频繁序列添加频繁后缀来增长序列。
[0005]然而在大数据时代,无论是企业的数据库还是互联网上的信息,都具有数据量大的特征。对海量数据的序列挖掘过程,不可避免的会产生大量候选序列,通过计算筛选序列的过程必将是十分耗时的,这无疑对于处理器的性能和内存容量都是一个巨大的挑战。而现有的大部分算法均是以串行的方式执行,对于很多实时性要求极高的现实应用问题来讲,执行效率很难满足海量数据处理的需求。
[0006]由此可见,现有的时间序列挖掘技术还存在着如下问题:在执行海量数据挖掘任务时算法的速度很慢,执行效率低下。所以,实时性和快速性成了时间序列挖掘的关键技术和难点。

【发明内容】

[0007]本发明所要解决的技术问题是提供一种基于GPU的并行时间序列挖掘方法,以提高挖掘效率。
[0008]GPU作为当前最新的并行计算平台,具有超高的浮点运算能力,且具有低功耗、扩展性强、价格低廉等特点,作为现代计算机必备的硬件设备,应用十分广泛。充分利用GPU的大规模多线程并行处理能力,加速序列挖掘算法的执行速度,从而使得海量数据的挖掘效率得到大大提升,可以满足众多实际的序列模式挖掘应用对高效率的需求。据此,本发明通过下述手段解决前述技术问题:
[0009]一种基于GPU的并行时间序列挖掘方法,包括以下步骤:
[0010]步骤101:扫描输入序列数据库中的记录到CPU的内存缓冲区中;
[0011]步骤102:根据所述序列数据库中的记录,计算长度为I的候选序列以及所述长度为I的候选序列的支持度;
[0012]步骤103:根据所述长度为I的候选序列的支持度,计算得到长度为I的频繁序列;
[0013]步骤104:扫描所述输入序列数据库中的记录,计算候选序列信息矩阵和候选事件息矩阵;
[0014]步骤105:将所述候选序列信息矩阵和候选事件信息矩阵拷贝到GPU的显存中,采用CUDA在所述GPU上并行计算长度为2的候选序列以及所述长度为2的候选序列的支持度,并将结果保存在GPU的显存中;
[0015]步骤106:将所述长度为2的候选序列和长度为2的候选序列的支持度拷贝到CPU的内存缓冲区中,计算得到长度为2的频繁序列;
[0016]步骤107:根据所述输入序列数据库计算得到垂直格式数据库;
[0017]步骤108:将所述长度为I的频繁序列、长度为2的频繁序列和所述垂直格式数据库拷贝到GPU的显存中,在GPU中并行计算得到其余长度的频繁序列。
[0018]与现有技术相比,本发明提供的上述技术方案,采用GPU(英文全称:GraphicProcessing Unit,中文含义:图形处理器)并行优化加速长度大于I的频繁序列的计算过程以及通过垂直数据库计算候选序列支持度的过程,计算过程主要在GPU的显存中利用CUDA(英文全称:Compute Unified Device Architecture,中文含义:计算统一设备架构,系NVIDIA公司开发的用于GPU通用编程的编程模型)技术完成,其计算速度比现有的利用CPU进行计算的速度要快很多,解决了现有技术中计算频繁序列算法速度很慢的问题,提高了时间序列挖掘的效率,实现了快速的时间序列挖掘。【专利附图】

【附图说明】
[0019]图1是本发明实施例提供的基于GPU的并行时间序列挖掘方法流程图。
[0020]图2是本发明实施例中输入序列数据库的示意图。
[0021]图3是本发明实施例中的垂直格式数据库示意图。
【具体实施方式】
[0022]下面结合优选的实施方式对本发明作进一步说明。
[0023]如图1所示,本实施例的基于GPU的并行时间序列挖掘方法包括以下步骤:
[0024]步骤101:扫描输入序列数据库中的记录到CPU的内存缓冲区中。
[0025]本步骤可采用如下具体方法:将存储设备中的输入序列数据库中的记录分块读入到CPU的内存缓冲区中,所述内存缓冲区的容量大于预设的最小缓冲区阈值,小于系统的最大可用内存,当所述内存缓冲区中的记录被处理完毕时,从存储设备中的输入序列数据库中读取下一块数据到所述内存缓冲区进行处理,直至所述序列数据库中的所有记录被扫描完毕。更加优选和具体的实施方法如下:
[0026]输入序列数据库通常以文件的形式存储在系统的硬盘中,存储的类型可以有多种,如二进制格式或文本格式等。获取序列数据库中的记录时,具体地,可以从硬盘中读取,优选地,将读取的序列数据存储在系统内存中。输入的序列数据在内存中的存储格式可以根据需要预先定义,以方便在后续过程中按照该预先定义的存储格式从内存中读取。
[0027]具体地,还可以定义序列数据库的接口,包括为保存输入序列数据库记录开辟的内存缓冲区大小,序列数据指针,当前的数据块大小,当前数据块的读写位置以及数据块完全读取标志等。根据该序列数据库接口定义序列数据库读取函数,使用该序列数据库读取函数从硬盘打开输入序列数据库文件,获取序列数据库记录,按已定义的格式存储在内存中。例如,定义内存缓冲区的大小为2048,则定义的序列数据库读取函数从硬盘中的序列数据库文件中读入2048个整型大小的数据到内存中,当已读入的数据块处理完毕后,读取函数从硬盘中读取下一个2048个整型大小的数据到内存中,直至序列数据库文件被完全读入。
[0028]步骤102:根据所述序列数据库中的记录,计算长度为I的候选序列以及所述长度为I的候选序列的支持度。
[0029]作为一种优选方案,本步骤可采用如下方法:扫描一条内存缓冲区中的序列数据库记录,当所述序列数据库记录中第一次出现某项时,如果在之前的序列数据库记录中未出现过所述项,则将所述项保存作为一个长度为I的候选序列,并将所述项的支持度增加I;如果在所述序列数据库记录中多次出现所述项,则仅在第一次出现所述项时保存并增加其支持度,在所述序列数据库记录中再次出现所述项时不作任何处理,如果在其它任一序列数据库记录中首次出现所述项时,则将所述项的支持度增加I。本步骤更加优选和具体的方法如下:
[0030]在内存中开辟两个数组ItemCount和FrequentIndex,其中,数组ItemCount的大小为序列数据库中出现的最大项的值,用来记录序列中出现的项的支持度,另一个数组FrequentIndex的大小也为最大项的值,用于记录长度为I的频繁序列的编号。
[0031]扫描一条内存缓冲区中的序列数据库记录,当该记录中第一次出现某项,且在之前的记录中未出现过,则将该项在数组ItemCount中对应的位置加I ;如果在当前处理的序列数据库记录中多次出现该项,则仅在第一次出现时将ItemCount中对应的位置加I,在当前的记录中再次出现该项时不作任何处理,如果在其它序列数据库记录中出现该项,则将该项在ItemCount数组中对应的位置加1,如果在其它序列数据库记录中多次出现该项,贝U仅在第一次出现该项在ItemCount中对应的位置加I。将硬盘中的输入数据库文件按照上述方式扫描一遍后,得到的最终ItemCount数组即为输入序列数据库中每一个长度为I的候选序列的支持度。
[0032]步骤103:根据所述长度为I的候选序列的支持度,计算得到长度为I的频繁序列。
[0033]作为一种优选方案,本步骤可采用如下方法:将每一个长度为I的候选序列的支持度与预设的最小支持度阈值进行比较,如果所述支持度大于等于所述最小支持度阈值,则将该长度为I的候选序列保存为一个长度为I的频繁序列,如果所述支持度小于所述最小支持度阈值,则将该长度为I的候选序列保存为一个长度为I的非频繁序列。本步骤更加优选和具体的方法如下:
[0034]将ItemCount数组中的每一个元素与预设的最小支持度阈值比较,如果大于最小支持度阈值,则该元素对应的项成为长度为I的频繁序列。遍历ItemCount数组元素时按索引从小到大,得到的第一个长度为I的频繁序列,在FrequentIndex数组中相应位置填入I,得到的第二个长度为I的频繁序列,在FrequentIndex数组中相应位置填入2,依次类推,对于长度为I的非频繁序列,将其在FrequentIndex数组中对应的位置填入-1,用于计算长度为2的频繁序列。
[0035]其中,预设的最小支持度阈值可以是绝对支持度,也可以是相对支持度,在本实施例中,预设的最小支持度阈值为相对支持度0.01,即I %的输入序列包含候选序列时,则该候选序列成为频繁序列。
[0036]步骤104:扫描所述输入序列数据库中的记录,计算候选序列信息矩阵和候选事件息矩阵。
[0037]作为一种优选方案,本步骤可采用如下方法:将所述输入序列数据库中的记录读入CPU的内存缓冲区中,采用迭代算法依次处理所述内存缓冲区中的每一条记录,得到候选序列信息矩阵和候选事件信息矩阵;对所述内存缓冲区中的记录逐一进行遍历,将所述记录中长度为I的频繁序列第一次出现的位置和最后一次出现的位置保存在所述候选序列信息矩阵中,将所述记录中长度为I的频繁序列之后出现的长度为I的频繁序列的位置保存在所述候选事件信息矩阵中。本步骤更加优选和具体的方法如下:
[0038]长度为2的候选序列,具体地,可以分为序列类型和事件类型。序列类型中包含的两个项属于一条序列记录中的两个不同项集,事件类型中包含的两个项则属于一条序列记录中的同一个项集。例如,如果输入的一条序列记录为<(1,5,6) (2) (3,7) (2,4)>,其中尖括号代表一条序列,圆括号代表一个项集,圆括号中的数字代表项集中所包含的项,项集的次序代表着时间上的先后次序。候选序列〈(I) (3) >属于序列类型,由于项集(I)和项集(3)属于该序列记录中两个不同的项集(1,5,6)和(3,7),因此项(I)和项(3)在时间上具有先后次序。候选序列〈(1,5) >属于事件类型,由于项集(I)和项集(5)属于该序列记录中的同一项集(1,5,6),因此项(I)和项(5)是同时发生的事件。序列类型的候选序列产生需要候选序列信息矩阵,事件类型的候选序列产生需要候选事件信息矩阵。具体如下:
[0039]采用矩阵SequenceInfo存储候选序列信息。其中,SequenceInfo是一个二维矩阵,其第一维的大小为NumFrequent (长度为I的频繁序列的个数),第二维的大小可以是任意大于2的整数,在本实施例中,优选地,预设为10。SequenceInfo矩阵的第一维标号表示对应的长度为I的频繁序列,第二维的前两个存储空间中分别存储该长度为I的频繁序列在当前输入序列中第一次出现的项集编号和最后一次出现的项集编号。例如,输入的序列记录为〈(1,5,6) (2) (3,7) (2,4) >,对于长度为I的频繁序列2,其第一次出现的项集编号为2,最后一次出现的项集编号为4,故将SequenceInf0 [2] [O]置为其第一次出现的项集编号2,SequenceInfo [2] [I]置为其最后一次出现的项集编号4。扫描输入序列数据库,计算整个 SequenceInfo 矩阵。
[0040]采用矩阵ItemsetInfo存储候选事件信息。其中,矩阵ItemsetInfo是一个一维矩阵,其大小为NumFrequent*(NumFrequent-1)/2,记录了在每个长度为I的频繁序列之后出现的其它长度为I的频繁序列,其中NumFrequent长度为I的频繁序列的个数。例如,输入的序列记录为〈(1,5,6) (2) (3,7) (2,4)>,其中项1、2、3、4均为长度为I的频繁序列,对于长度为I的频繁序列1,在其后出现了频繁序列2、3、4,故将ItemsetInfo矩阵中长度为I的频繁序列对应的存储区域中的第2、第3、第4个位置置1,代表频繁项2、3、4出现在频繁项I之后。
[0041]步骤105:将所述候选序列信息矩阵和候选事件信息矩阵拷贝到GPU的显存中,采用CUDA在所述GPU上并行计算长度为2的候选序列以及所述长度为2的候选序列的支持度,并将结果保存在GPU的显存中。本步骤以前所做的处理均在内存中进行,期间计算得到的各种数据也都保存在内存当中,而本步骤中的计算过程是在GPU端的全局内存中完成的。
[0042]作为一种优选方案,本步骤可采用如下方法:在GPU的全局内存中开辟存储空间,将候选序列信息矩阵和候选事件信息矩阵从内存中拷贝到所述GPU的全局内存中;对每一个长度为I的频繁序列,在GPU中开辟一个独立的线程计算以所述长度为I的频繁序列为前缀的长度为2的候选序列以及所述长度为2的候选序列的支持度,将所述长度为2的候选序列及其支持度保存在GPU的全局内存空间中。本步骤更加优选和具体的方法如下:
[0043]使用CUDA提供的函数在GPU的全局内存中开辟存储空间,并将候选序列信息矩阵和候选事件信息矩阵从内存复制到GPU的全局内存中,本实施例中,使用CUDA提供的内存分配函数cudaMalloc O在GPU的全局内存中开辟存储空间,使用内存拷贝API函数cudaMemcpyO将上述各项数据从内存拷贝到GPU的全局内存中。
[0044]在GPU上利用候选序列信息矩阵和候选事件信息矩阵,并行计算长度为2的候选序列及其支持度。利用CUDA提供的kernel机制在GPU中启动一个kernel函数,该kernel函数可以在GPU中同时启动并行执行的线程,其中每个线程负责计算以某一个长度为I的频繁序列为前缀的一组候选2序列。在本实施例中,使用CUDA提供的内置变量threadldx和blockldx来确定每个GPU线程的索引号,与候选序列信息矩阵和候选事件信息矩阵中的数据相对应,计算长度为2的候选序列及其支持度。例如,I号线程计算以第一个长度为I的频繁序列为前缀的一组候选2序列,该线程通过访问候选序列信息矩阵中第一个长度为I的频繁序列首次出现的项集编号、末次出现的项集编号和其余长度为I的频繁序列的首次、末次出现的项集编号,可以得到长度为2的候选序列。如果第一个长度为I的频繁序列首次出现的项集编号小于另外一个长度为I的频繁序列末次出现的项集编号,则第一个长度为I的频繁序列和此长度为I的频繁序列组成一个长度为2的候选序列。另外,I号线程在计算过程中,可以再启动一个kernel函数,对候选事件信息矩阵中第一个长度为I的频繁序列对应的数据块进行并行处理,找出长度为2的事件类型的候选序列。在本实施例中,使用CUDA提供的Dynamic Parallelism技术从主kernel函数启动副kernel函数。
[0045]步骤106:将所述长度为2的候选序列和长度为2的候选序列的支持度拷贝到CPU的内存缓冲区中,计算得到长度为2的频繁序列。
[0046]作为一种优选方案,本步骤可采用下述方法:将所述长度为2的候选序列和长度为2的候选序列的支持度从GPU的全局内存中拷贝到CPU的内存缓冲区中,采用所述CPU计算长度为2的频繁序列;将每一个所述长度为2的候选序列的支持度和预设的最小支持度阈值比较,如果所述候选序列的支持度大于等于最小支持度阈值,则将所述长度为2的候选序列保存为长度为2的频繁序列,如果所述候选序列的支持度小于最小支持度阈值,则将所述长度为2的候选序列保存为长度为2的非频繁序列。本步骤更加优选和具体的实施方法如下:
[0047]本步骤在内存中完成,可以先将GPU的全局内存中的长度为2的候选序列及其支持度复制到内存中,根据该数据计算得到长度为2的频繁序列。具体过程如下:使用CUDA提供的API函数cudaMemcpyO将长度为2的候选序列及其支持度复制到内存中,然后将候选序列的支持度和预设的支持度阈值比较,如果候选序列的支持度大于预设值,则该长度为2的候选序列为频繁的,将其保存在内存中,成为长度为2的频繁序列,如果候选序列的支持度小于预设值,则该长度为2的候选序列为非频繁序列。在本实施例中,预设的支持度阈值为相对支持度0.01,即所有的序列记录中有I %包含当前候选序列,则该候选序列为频繁的。
[0048]步骤107:根据所述输入序列数据库计算得到垂直格式数据库。
[0049]作为一种优选方案,本步骤可采用如下方法:扫描输入序列数据库中的一条记录,如果所述记录中包含长度为I的频繁序列,则将该记录的序列编号和所述长度为I的频繁序列在所述记录中的事件编号保存;迭代扫描所述输入序列数据库中的所有记录,计算所有所述长度为I的频繁序列出现的序列编号和事件编号,并将所述长度为I的频繁序列、所述序列编号和事件编号保存为所述输入序列数据库的垂直格式数据库。本步骤更加优选和具体的方法如下:
[0050]如图2-3所示,本操作在内存中进行,开辟一个二维数组VerticalDatabase存储转换后的垂直数据库,其中,VerticalDatabase的第一维大小等于长度为I的频繁序列个数,第二维大小需要保证能够保存所有包含长度为I的频繁序列的序列编号,在本实施例中,预设为输入序列数据库中的序列总数。读入一条序列数据库记录,将该序列的序列编号添加到序列中包含的所有长度为I的频繁序列对应的垂直数据库中,并将每个长度为I的频繁序列在序列中出现的项集编号添加到垂直数据库中。例如,在本实施例的输入序列数据库中,预设最小支持度阈值为2,可以得到长度为I的频繁序列包括项1、2、5,其中项I的支持度为3,项2的支持度为2,项5的支持度为3。读入序列数据库中序列编号为I及项集编号为I的记录(1,2,6)时,包含长度为I的频繁序列I和2,故将序列编号I和项集编号I添加到长度为I的频繁序列I和2对应的垂直数据库VerticalDatabase中,读入序列编号为I及项集编号为2的记录(1,7)时,包含长度为I的频繁序列I,故将序列编号I和项集编号2添加到长度为I的频繁序列I对应的垂直数据库VerticalDatabase中,按照上述方式,迭代的扫描输入序列数据库中的所有记录,计算得到每个频繁序列对应的垂直数据库。
[0051]步骤108:将所述长度为I的频繁序列、长度为2的频繁序列和所述垂直格式数据库拷贝到GPU的显存中,在GPU中并行计算得到其余长度的频繁序列。
[0052]在优选的方案中,本步骤可采用如下方法:在GPU的全局内存中开辟存储空间,将所述长度为I的频繁序列、长度为2的频繁序列和所述垂直格式数据库拷贝到所述全局内存中的存储空间;在所述GPU中开辟多线程,每一个所述线程负责计算以一个长度为I的频繁序列为前缀的所有长度为3的频繁序列,获得所述长度为3的频繁序列后,根据长度为2的频繁序列的个数开辟多个线程,每一个所述线程负责计算以一个长度为2的频繁序列为前缀的所有长度为4的频繁序列,迭代执行直至得到所有长度的频繁序列为止;计算长度为k+Ι的候选序列的支持度时,将生成所述长度为k+Ι的候选序列的两个长度为k的频繁序列在所述垂直数据库中的记录分块,在GPU中开辟多个线程对所述记录块并行处理,得到所述长度为k+Ι的候选序列的支持度。
[0053]使用CUDA提供的函数在GPU的全局内存中开辟存储空间,并将长度为I的频繁序列、长度为2的频繁序列和垂直格式数据库复制到GPU的全局内存中,本实施例中,使用CUDA提供的全局内存分配函数cudaMal 1c O在GPU的全局内存中开辟存储空间,使用内存拷贝函数cudaMemcpyO将上述各项数据从内存拷贝到GPU的全局内存中。
[0054]计算其余长度频繁序列的过程可以划分为计算以各个长度为I的频繁序列为前缀的频繁序列的子过程,各个子过程之间是相互独立的,一个子过程中计算的所有频繁序列仅通过该过程中生成的其它频繁序列计算得到,而不需要另一个子过程中的频繁序列信息,各个子过程之间不具有依赖关系,因此计算以各个长度为I的频繁序列为前缀的频繁序列的过程可以并行执行。本实施例中,采用CUDA在GPU端启动一个kernel函数,该kernel函数可以在GPU中开辟并行执行的线程,线程数目为长度为I的频繁序列的个数,可以使用CUDA提供的内置变量threadldx和blockldx确定每个线程的索引号,并与对应的子过程建立关联,每个线程负责一个子过程的执行。一个子过程在执行的过程中,可以动态的启动额外的kernel函数,将当前的子过程进一步分解为更小的子过程,提高计算过程的并发度,最大限度的利用GPU的并行处理能力,可以使用CUDA提供的动态并行技术在子过程中启动额外的kernel函数。
[0055]候选序列的支持度可以通过计算两个母序列的垂直格式数据库的join操作实现,例如,在本实施例中,如果要计算长度为2的候选序列(1,2)的支持度,项I和项2要出现在一个序列的同一个项集当中,可以搜索项I的垂直数据库记录,找到与项2的垂直数据库记录中序列编号和项集编号相同的记录,作为候选序列(1,2)的垂直格式数据库,并计算该垂直格式数据库中序列编号的取值数,作为该候选序列的支持度。计算母序列垂直格式数据库的join操作可以在GPU中并行执行,将垂直数据库记录中的序列编号按照一定间距划分为子部分,每个线程负责一个子部分的计算,并在所有线程计算结束时将结果归约合并,组成完整的垂直格式数据库。
[0056]将在GPU中并行计算得到的其余长度的频繁序列拷贝到内存中,与长度为I的频繁序列和长度为2的频繁序列合并生成完整的频繁序列文件,并输出到硬盘中。
[0057]本发明实施例提供的上述方法,采用GPU并行优化加速长度大于I的频繁序列的计算过程以及通过垂直数据库计算候选序列支持度的过程,计算过程主要在GPU的显存中利用CUDA技术完成,其计算速度比现有的利用CPU进行计算的速度要快很多,解决了现有技术中计算频繁序列算法速度很慢的问题,提高了时间序列挖掘的效率,实现了快速的时间序列挖掘。GPU兼有高性能和灵活性,可以等效成为一个超大规模并行处理器,具有强大的浮点运算能力和很高的存储带宽,其大规模并行计算带来的高性能和不断增强的可编程性,而且价格低廉,使得本发明实例提供的技术方案具有较强的实用性、易用性和灵活性。
[0058]以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属【技术领域】的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。
【权利要求】
1.一种基于GPU的并行时间序列挖掘方法,其特征在于,包括以下步骤: 步骤101:扫描输入序列数据库中的记录到CPU的内存缓冲区中; 步骤102:根据所述序列数据库中的记录,计算长度为I的候选序列以及所述长度为I的候选序列的支持度; 步骤103:根据所述长度为I的候选序列的支持度,计算得到长度为I的频繁序列;步骤104:扫描所述输入序列数据库中的记录,计算候选序列信息矩阵和候选事件信息矩阵; 步骤105:将所述候选序列信息矩阵和候选事件信息矩阵拷贝到GPU的显存中,采用CUDA在所述GPU上并行计算长度为2的候选序列以及所述长度为2的候选序列的支持度,并将结果保存在GPU的显存中; 步骤106:将所述长度为2的候选序列和长度为2的候选序列的支持度拷贝到CPU的内存缓冲区中,计算得到长度为2的频繁序列; 步骤107:根据所述输入序列数据库计算得到垂直格式数据库; 步骤108:将所述长度为I的频繁序列、长度为2的频繁序列和所述垂直格式数据库拷贝到GPU的显存中,在GPU中并行计算得到其余长度的频繁序列。
2.根据权利要求1所述的方法,其特征在于,所述步骤101包括: 将存储设备中的输入序列数据库中的记录分块读入到CPU的内存缓冲区中,所述内存缓冲区的容量大于预设的最小缓冲区阈值,小于系统的最大可用内存,当所述内存缓冲区中的记录被处理完毕时,从存储设备中的输入序列数据库中读取下一块数据到所述内存缓冲区进行处理,直至所述序列数据库中的所有记录被扫描完毕。
3.根据权利要求2所述的方法,其特征在于,所述步骤102包括: 扫描一条内存缓冲区中的序列数据库记录,当所述序列数据库记录中第一次出现某项时,如果在之前的序列数据库记录中未出现过所述项,则将所述项保存作为一个长度为I的候选序列,并将所述项的支持度增加I; 如果在所述序列数据库记录中多次出现所述项,则仅在第一次出现所述项时保存并增加其支持度,在所述序列数据库记录中再次出现所述项时不作任何处理,如果在其它任一序列数据库记录中首次出现所述项时,则将所述项的支持度增加I。
4.根据权利要求1所述的方法,其特征在于,所述步骤103包括: 将每一个长度为I的候选序列的支持度与预设的最小支持度阈值进行比较,如果所述支持度大于等于所述最小支持度阈值,则将该长度为I的候选序列保存为一个长度为I的频繁序列,如果所述支持度小于所述最小支持度阈值,则将该长度为I的候选序列保存为一个长度为I的非频繁序列。
5.根据权利要求1所述的方法,其特征在于,所述步骤104包括: 将所述输入序列数据库中的记录读入CPU的内存缓冲区中,采用迭代算法依次处理所述内存缓冲区中的每一条记录,得到候选序列信息矩阵和候选事件信息矩阵; 对所述内存缓冲区中的记录逐一进行遍历,将所述记录中长度为I的频繁序列第一次出现的位置和最后一次出现的位置保存在所述候选序列信息矩阵中,将所述记录中长度为I的频繁序列之后出现的长度为I的频繁序列的位置保存在所述候选事件信息矩阵中。
6.根据权利要求1所述的方法,其特征在于,所述步骤105包括:在GPU的全局内存中开辟存储空间,将候选序列信息矩阵和候选事件信息矩阵从内存中拷贝到所述GPU的全局内存中;对每一个长度为I的频繁序列,在GPU中开辟一个独立的线程计算以所述长度为I的频繁序列为前缀的长度为2的候选序列以及所述长度为2的候选序列的支持度,将所述长度为2的候选序列及其支持度保存在GPU的全局内存空间中。
7.根据权利要求1所述的方法,其特征在于,所述步骤106包括: 将所述长度为2的候选序列和长度为2的候选序列的支持度从GPU的全局内存中拷贝到CPU的内存缓冲区中,采用所述CPU计算长度为2的频繁序列;将每一个所述长度为2的候选序列的支持度和预设的最小支持度阈值比较,如果所述候选序列的支持度大于等于最小支持度阈值,则将所述长度为2的候选序列保存为长度为2的频繁序列,如果所述候选序列的支持度小于最小支持度阈值, 则将所述长度为2的候选序列保存为长度为2的非频繁序列。
8.根据权利要求1所述的方法,其特征在于,所述步骤107包括: 扫描输入序列数据库中的一条记录,如果所述记录中包含长度为I的频繁序列,则将该记录的序列编号和所述长度为I的频繁序列在所述记录中的事件编号保存; 迭代扫描所述输入序列数据库中的所有记录,计算所有所述长度为I的频繁序列出现的序列编号和事件编号,并将所述长度为I的频繁序列、所述序列编号和事件编号保存为所述输入序列数据库的垂直格式数据库。
9.根据权利要求1所述的方法,其特征在于,所述步骤108包括: 在GPU的全局内存中开辟存储空间,将所述长度为I的频繁序列、长度为2的频繁序列和所述垂直格式数据库拷贝到所述全局内存中的存储空间; 在所述GPU中开辟多线程,每一个所述线程负责计算以一个长度为I的频繁序列为前缀的所有长度为3的频繁序列,获得所述长度为3的频繁序列后,根据长度为2的频繁序列的个数开辟多个线程,每一个所述线程负责计算以一个长度为2的频繁序列为前缀的所有长度为4的频繁序列,迭代执行直至得到所有长度的频繁序列为止; 计算长度为k+Ι的候选序列的支持度时,将生成所述长度为k+Ι的候选序列的两个长度为k的频繁序列在所述垂直数据库中的记录分块,在GPU中开辟多个线程对所述记录块并行处理,得到所述长度为k+Ι的候选序列的支持度。
【文档编号】G06F9/38GK103995690SQ201410172991
【公开日】2014年8月20日 申请日期:2014年4月25日 优先权日:2014年4月25日
【发明者】杨世权, 袁博 申请人:清华大学深圳研究生院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1