一种基于cuda实现聚类的方法及装置制造方法
【专利摘要】本申请公开了一种基于CUDA实现聚类的方法及装置,包括:将确定的计算统一设备架构(CUDA)类数组和CUDA点数组划分为至少一个16*16的大小的矩阵;对不足16乘16的矩阵,赋值标志位为0,其他位为1;对各划分的矩阵,按照类似于矩阵乘法的形式进行矩阵运算;对不足16*16的矩阵,在结果累加时,乘上标志位,以获得GPU矩阵运算结果;统计GPU矩阵运算结果,当矩阵运算结果中改变的点数不小于预先设置的阈值时,根据矩阵运算结果更新CUDA类数组,直至聚类完成。本发明通过划分确定的CUDA类数组和CUDA点数组为16*16的矩阵;对不足16*16的矩阵,赋值标志位为0,其他位为1,在结果累加时,乘上标志位,以获得GPU矩阵运算结果。实现了对不规则的矩阵的聚类在CUDA下实现高效运行。
【专利说明】-种基于CUDA实现聚类的方法及装置
【技术领域】
[0001] 本申请涉及数据处理技术,尤指一种基于计算统一设备架构(CUDA)实现聚类的 方法及装置。
【背景技术】
[0002] 聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法,同 时也是数据挖掘的一个重要算法。聚类分析以相似性为基础,在一个聚类中的模式之间比 不在同一聚类中的模式之间具有更多的相似性。
[0003] K-means算法是聚类分析中的一种硬聚类算法,是典型的基于原型的目标函数聚 类方法,K-means算法以数据点到原型的某种距离作为优化的目标函数,利用函数求极值的 方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,是求对应某一初 始聚类中心向量最优分类,使得评价指标最小;采用误差平方和准则函数作为聚类准则函 数。
[0004] 计算统一设备架构(Compute Unified Device Architecture,简称 CUDA)是英伟 达(NVIDIA)公司推出的并行计算架构,该架构通过利用图形处理器(GPU)的处理能力,能 够大幅提升计算性能。其中程序代码通常采用C语言的超集CUDA C编写。该技术封装了 使用GPU的细节,使用类似C语言的方式为使用者提供较简单利用GPU的编程体验。该技 术可以利用GPU的众核特性,大幅加速并行化的应用。
[0005] 目前,已经出现一些使用K-means聚类方法对CUDA进行优化的方法,并取得了不 错的效果。这些方法大致是将中央处理器(CPU)的点数组经过转置处理后赋值给CUDA点 数组,CPU类数组直接赋值给CUDA类数组,通过对K-means方法进行修改,对矩阵维度为2 的幂的矩阵,尤其常见的维度为32、64、128等矩阵,使用类似于矩阵乘法的形式(按照矩阵 相乘的方式进行矩阵运算,只是将矩阵元素的乘操作改为求差的平方)进行矩阵运算,通 过统计GPU矩阵运算结果,当GPU矩阵运算结果中改变的点数大于或等于预先设置的阈值 时,根据GPU矩阵运算结果更新CUDA类数组,否则,完成聚类。但是,现有使用K-means聚 类方法对CUDA进行优化的方法中,仅针对规则矩阵(指矩阵维度为2的幂的矩阵,尤其常 见的维度为32、64、128等矩阵)进行优化处理,对于维度不规则的矩阵,无法利用CUDA进 行优化处理,使K-means聚类方法在CUDA下实现高效运行。
【发明内容】
[0006] 为了解决上述问题,本发明提供一种基于CUDA实现聚类的方法及装置,能够支持 不规则矩阵的聚类,实现K-means聚类方法在CUDA下的高效运行。
[0007] 为了达到本发明的目的,本申请提供一种基于CUDA实现聚类的方法包括:
[0008] 将确定的计算统一设备架构CUDA类数组和CUDA点数组划分为一个或一个以上16 乘16的大小的矩阵;对不足16乘16的矩阵,标志位赋值为0,除标志位以外的其他位赋值 为1 ;
[0009] 对各划分的矩阵,按照类似于矩阵乘法的形式进行矩阵运算,对不足16乘16的矩 阵,在结果累加时,乘上标志位,以获得图形处理器GPU矩阵运算结果;
[0010] 统计GPU矩阵运算结果,当GPU矩阵运算结果中改变的点数大于或等于预先设置 的阈值时,根据GPU矩阵运算结果更新CUDA类数组,直至聚类完成。
[0011] 进一步地,该方法之前还包括:
[0012] 从输入文件中获取每行一组浮点数的二进制或文本形式的信息,根据获取的二进 制或文本形式的信息,建立中央处理器CPU内存相应的CPU点数组和CPU类数组;
[0013] 根据CPU点数组和CPU类数组,确定CUDA点数组、CUDA类数组。
[0014] 进一步地,根据CPU内存相应的数组,确定的GPU端CUDA点数组、CUDA类数组具 体包括:将CPU点数组转置变化后赋值给CUDA点数组,将CPU类数组直接赋值给CUDA类数 组。
[0015] 进一步地,统计GPU矩阵运算结果通过聚类结果数组实现统计。
[0016] 进一步地,该方法之前还包括:预先设置元素个数与CUDA点数组相同的聚类结果 数组,并初始化聚类结果数组各元素为-1。
[0017] 另一方面,本申请还提供一种基于CUDA实现聚类的装置,包括:划分单元、计算单 元和统计处理单元;其中,
[0018] 划分单元,用于将确定的计算统一设备架构CUDA类数组和CUDA点数组划分为一 个或一个以上16乘16的大小的矩阵;对不足16乘16的矩阵,标志位赋值为0,除标志位 以外的其他位赋值为1 ;
[0019] 计算单元,用于对各划分的矩阵,按照类似于矩阵乘法的形式进行矩阵运算,对不 足16乘16的矩阵,在结果累加时,乘上标志位,以获得图形处理器GPU矩阵运算结果;
[0020] 统计处理单元,用于统计GPU矩阵运算结果,当GPU矩阵运算结果中改变的点数大 于或等于预先设置的阈值时,根据GPU矩阵运算结果更新CUDA类数组,直至聚类完成。
[0021] 进一步地,该装置还包括接收单元和确定单元,
[0022] 接收单元,用于接收CPU处理的点数组和类数组;
[0023] 确定单元,用于将CPU点数组转置变化后赋值给CUDA点数组,将CPU类数组直接 赋值给CUDA类数组。
[0024] 与现有技术相比,本发明提供的技术方案,包括:将确定的计算统一设备架构 (CUDA)类数组和CUDA点数组划分为一个或一个以上16乘16的大小的矩阵;对不足16乘 16的矩阵,标志位赋值为0,除标志位以外的其他位赋值为1 ;对各划分的矩阵,按照类似于 矩阵乘法的形式进行矩阵运算,对不足16乘16的矩阵,在结果累加时,乘上标志位,以获得 图形处理器(GPU)矩阵运算结果;统计GPU矩阵运算结果,当GPU矩阵运算结果中改变的 点数大于或等于预先设置的阈值时,根据GPU矩阵运算结果更新CUDA类数组,直至聚类完 成。本发明通过划分确定的CUDA类数组和CUDA点数组为16乘16的大小的矩阵;对不足 16乘16的矩阵,标志位赋值为0,除标志位以外的其他位赋值为1 ;对不足16乘16的矩阵, 在结果累加时,乘上标志位,以获得GPU矩阵运算结果。实现了对不规则的矩阵的聚类,使 K-means聚类方法在CUDA下实现了高效运行。
【专利附图】
【附图说明】
[0025] 附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本 申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
[0026] 图1为本发明基于CUDA实现聚类的方法的流程图;
[0027] 图2为本发明基于CUDA实现聚类的装置的结构框图。
【具体实施方式】
[0028] 为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请 的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中 的特征可以相互任意组合。
[0029] 图1为本发明基于CUDA实现聚类的方法的流程图,如图1所示,包括:
[0030] 步骤100、将确定的计算统一设备架构(CUDA)类数组和CUDA点数组划分为一个或 一个以上16乘16的大小的矩阵;对不足16乘16的矩阵,标志位赋值为0,除标志位以外 的其他位赋值为1 ;
[0031] 需要说明的是,CUDA类数组和CUDA点数组是在GPU内存中完成的数组,只有在 GPU上实现聚类时,才需要确定CUDA类数组和CUDA点数组。
[0032] 步骤101、对各划分的矩阵,按照类似于矩阵乘法的形式进行矩阵运算,对不足16 乘16的矩阵,在结果累加时,乘上标志位,以获得图形处理器(GPU)矩阵运算结果。这里, CUDA类数组和CUDA点数组划分为16乘16的矩阵,CUDA类数组的矩阵中行的元素与CUDA 点数组列的元素按照矩阵乘法会进行相乘,这里类似于矩阵乘法的形式,是指将该部分相 乘部分替换为求差的平方。
[0033] 以下以矩阵
【权利要求】
1. 一种基于CUDA实现聚类的方法,其特征在于,包括: 将确定的计算统一设备架构CUDA类数组和CUDA点数组划分为一个或一个以上16乘 16的大小的矩阵;对不足16乘16的矩阵,标志位赋值为0,除标志位以外的其他位赋值为 1 ; 对各划分的矩阵,按照类似于矩阵乘法的形式进行矩阵运算,对不足16乘16的矩阵, 在结果累加时,乘上标志位,以获得图形处理器GPU矩阵运算结果; 统计GPU矩阵运算结果,当GPU矩阵运算结果中改变的点数大于或等于预先设置的阈 值时,根据GPU矩阵运算结果更新CUDA类数组,直至聚类完成。
2. 根据权利要求1所述的方法,其特征在于,该方法之前还包括: 从输入文件中获取每行一组浮点数的二进制或文本形式的信息,根据获取的二进制或 文本形式的信息,建立中央处理器CPU内存相应的CPU点数组和CPU类数组; 根据CPU点数组和CPU类数组,确定CUDA点数组、CUDA类数组。
3. 根据权利要求2所述的方法,其特征在于,所述根据CPU内存相应的数组,确定的 GPU端CUDA点数组、CUDA类数组具体包括:将CPU点数组转置变化后赋值给CUDA点数组, 将CPU类数组直接赋值给CUDA类数组。
4. 根据权利要求1?3任一项所述的方法,其特征在于,所述统计GPU矩阵运算结果通 过聚类结果数组实现统计。
5. 根据权利要求4所述的方法,其特征在于,该方法之前还包括:预先设置元素个数与 CUDA点数组相同的聚类结果数组,并初始化聚类结果数组各元素为-1。
6. -种基于CUDA实现聚类的装置,其特征在于,包括:划分单元、计算单元和统计处理 单元;其中, 划分单元,用于将确定的计算统一设备架构CUDA类数组和CUDA点数组划分为一个或 一个以上16乘16的大小的矩阵;对不足16乘16的矩阵,标志位赋值为0,除标志位以外 的其他位赋值为1 ; 计算单元,用于对各划分的矩阵,按照类似于矩阵乘法的形式进行矩阵运算,对不足16 乘16的矩阵,在结果累加时,乘上标志位,以获得图形处理器GPU矩阵运算结果; 统计处理单元,用于统计GPU矩阵运算结果,当GPU矩阵运算结果中改变的点数大于或 等于预先设置的阈值时,根据GPU矩阵运算结果更新CUDA类数组,直至聚类完成。
7. 根据权利要求6所述的装置,其特征在于,该装置还包括接收单元和确定单元, 接收单元,用于接收CPU处理的点数组和类数组; 确定单元,用于将CPU点数组转置变化后赋值给CUDA点数组,将CPU类数组直接赋值 给⑶DA类数组。
【文档编号】G06F17/30GK104123372SQ201410360455
【公开日】2014年10月29日 申请日期:2014年7月25日 优先权日:2014年7月25日
【发明者】沈铂, 张刚, 邱学侃, 胡金辉, 王娅娟, 张清 申请人:浪潮(北京)电子信息产业有限公司