一种应用于K-Mean聚类算法中的加速方法及其装置与流程

文档序号:14389857阅读:202来源:国知局
一种应用于K-Mean聚类算法中的加速方法及其装置与流程

本发明涉及计算机体系结构设计和数据挖掘领域,具体而言,涉及一种聚类加速方法及其装置。



背景技术:

互联网技术的发展促进了全球数据的融合。如何从这些汪洋般的数据中发掘出有用的信息成为现代社会生产管理亟待解决的问题。聚类是应用最成熟最广泛的数据挖掘技术之一。目前,聚类在心理学、地理学、天文学等多种学术领域都发挥了巨大的作用。

在聚类问题的计算过程中,需要对全部的数据对象进行多次迭代,带来了非常巨大的运算量和访存量。面对这样的问题,如何对算法进行有效的加速,从而大大缩短整个算法的运行周期,对整体生产效率的提高具有重大的意义。

当前,产业界工作主要集中在计算机集群框架优化和处理方法的层次上,比如hadoop、spark等通用并行框架,zak、chend,王康等给出了在mapreduce上的执行机制,但是这些框架并没有从底层硬件架构等方面提出真正适用于大数据应用的处理器,一般只是对数据集进行划分,之后将分块的数据和任务分配给不同的pc节点,每个节点处理完自己的任务之后将结果传回到宿主机。这种方式受限于网络带宽,并且成本也相对较高。学术界针对聚类应用问题的硬件加速研究主要集中在两个平台:gpu平台,然而通用加速器往往强调计算性能,并没有特殊性设计,不能挖掘算法内在的特性,造成了功耗的浪费和性能的瓶颈;另一部分是针对fpga平台的研究,这类加速器和数据领域耦合性很高,硬件加速结构都限制了聚类个数,大多数采用了曼哈顿距离,此方式节省了片上资源,但使得聚类正确率大大折中。比如dlavenier、gokhalem将图像存储在主机端,之后将每一个像素依次流过k个处理节点,每个节点计算数据对象与中心点对象的距离,并记录最小距离编号,在最后的计算节点得到距离当前数据对象最近的类,并将结果传回主机。该类结构存在的问题主要是主从机数据传递时的io开销,以及计算节点必须要和聚类个数保持一致,严重限制了聚类的灵活性。并且几乎所有的加速结构只观察到了一个普通数据对象和多个中心点之间的并行性,并没有发掘聚类计算过程中普通数据之间的并行性。



技术实现要素:

本发明提供一种应用于k-mean聚类算法中的加速方法及其装置,以发掘聚类计算过程中普通数据之间的并行性,提高聚类计算的效率。

为达到上述目的,本发明提供了一种应用于k-mean聚类算法中的加速方法,其包括以下步骤:

s1:将聚类计算所需的中心点和普通点分别预取至一第一缓存区和一第二缓存区;

s2:依次从第一缓存区和第二缓存区读取中心点和普通点并计算每一普通点与所有中心点之间的距离;

s3:根据上一步骤的计算结果确定每一普通点距离最近的中心点,并将每一普通点对应的中心点进行更新;

s4:判断是否存在多个普通点同时更新同一个中心点的情况,如果存在,则进行冲突整合;

s5:判断中心点的更新是否过快,如果是,则将每一普通点更新后的中心点信息进行缓冲;

s6:检测是否满足终止条件,如果是,则终止聚类计算过程,若为否,则重复进行上述过程。

在本发明的一实施例中,所述第一缓存区为cram,所述第二缓存区为pram,并且所述第一缓存区和所述第二缓存区均为乒乓缓存区。

在本发明的一实施例中,步骤s3中确定每一普通点距离最近的中心点是通过树形比较器进行。

在本发明的一实施例中,计算每一普通点与所有中心点之间的距离是通过pe_num个计算单元进行,pe_num为大于1的整数,其中,每个计算单元计算完其中一个普通点与所有中心点之间的距离之后再针对下一个普通点进行计算,每个计算单元的并行度为c_num,c_num为大于1的整数。

在本发明的一实施例中,于一轮计算完成后,pe_num个计算单元共计算出pe_num个普通点对应的距离最近的中心点,得到pe_num个普通点对应的中心点索引tag1~tagpe_num以及相对应的更新内容m1~mpe_num,之后步骤s4中进行冲突整合的计算过程如下:

m1=m1+(tag1&tag2)×m2+(tag1&tag3)×m3+…+(tag1&tagpe_num)×mpe_num对于2≤n≤pe_num-1,

对于n=pe_num,

其中,上述“&”的含义如下:对于任意“u”和“v”,若u=v,则u&v=1以及若u≠v,则u&v=0以及

冲突整合后的m1~mpe_num分别存储至一规约寄存器中,每一规约寄存器均具有一tag位和一内容位,其中,tag位中存储的是中心点索引tag1~tagpe_num,内容位存储的是冲突整合后的m1~mpe_num。

在本发明的一实施例中,步骤s5中,判断聚类个数k是否大于2×pe_num×c_num,若为是,则通过一更新调度单元将规约寄存器中的数据读取至pe_num个缓存器中,pe_num个缓存器分别具有一tag位和一内容位,tag位分别为tag1′~tagpe_num′,tag位tag1′~tagpe_num′通过依次读取每一规约寄存器的tag位而更新,内容位x1~xpe_num的更新方式如下:

xn=(tag1&tag1′)×m1+(tag2&tag2′)×m2+……+(tagpe_num&tagpe_num′)×mpe_num。

在本发明的一实施例中,对内容位x1~xpe_num进行更新是通过pe_num个分别与更新调度单元连接的加法器进行。

本发明还提供了一种应用于k-mean聚类算法中的加速装置,其包括:

数据预取装置,用于将聚类计算所需的中心点和普通点分别预取至一第一缓存区和一第二缓存区;

距离计算单元,依次从第一缓存区和第二缓存区读取中心点和普通点并计算每一普通点与所有中心点之间的距离;

最小距离计算及更新单元,根据所述距离计算单元的计算结果确定每一普通点距离最近的中心点,并将每一普通点对应的中心点进行更新;

冲突整合单元,用于判断是否存在多个普通点同时更新同一个中心点的情况,如果存在,则进行冲突整合;

临时暂存单元,用于当中心点更新过快时对每一普通点更新后的中心点信息进行缓冲;

终止检测单元,用于检测是否满足终止条件,如果是,则终止聚类计算过程。

本发明提供的应用于k-mean聚类算法中的加速方法及其装置能够发掘聚类计算过程中普通数据之间的并行性,从而大大提高聚类计算的效率,并且克服了现有技术中计算节点与聚类个数需要保持一致的问题,从而提高了聚类的灵活性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的应用于k-mean聚类算法中的加速装置的组成示意图;

图2为本发明提供的应用于k-mean聚类算法中的加速装置的架构示意图;

图3为本发明中距离计算单元和最小距离发现单元的示意图;

图4为本发明提供的应用于k-mean聚类算法中的加速装置的整体结构图;

图5为本发明中的冲突整合示意图;

图6为内容位更新示意图;

图7为终止检测的逻辑示意图。

附图标记说明:1-数据预取装置;2-距离计算单元;3-最小距离计算及更新单元;4-冲突整合单元;5-临时暂存单元;6-终止检测单元。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明提供的应用于k-mean聚类算法中的加速装置的组成示意图,如图1所示,本发明提供的应用于k-mean聚类算法中的加速装置,其包括:

数据预取装置1,用于将聚类计算所需的中心点和普通点分别预取至一第一缓存区和一第二缓存区;

其中,第一缓存区为cram,第二缓存区为pram,并且第一缓存区和第二缓存区均为乒乓缓存区。下面以第一缓冲区为例进行说明乒乓缓存区的工作方式:

第一缓存区cram中包括两个存储空间相等的地址空间pram_a和pram_b,pram_a和pram_b二者功能相同并且交替工作,是一种双buffer的形式。具体的工作流程如下:一部分中心点首先被预取至cram中的pram_a中进行缓存,当pram_a被填充满之后,距离计算单元2开始利用pram_a上的数据进行计算。此时剩余的中心点被预取至pram_b中进行缓存。当pram_a中的数据被计算完成之后,距离计算单元2则利用pram_b中的数据进行计算,而pram_a则再次用来进行数据缓存。这样pram_a和pram_b进行交替的工作,可以有效的掩盖访存延迟。

距离计算单元2,依次从第一缓存区和第二缓存区读取中心点和普通点并计算每一普通点与所有中心点之间的距离;

最小距离计算及更新单元3,根据距离计算单元2的计算结果确定每一普通点距离最近的中心点,并将每一普通点对应的中心点进行更新;

冲突整合单元4,用于判断是否存在多个普通点同时更新同一个中心点的情况,如果存在,则进行冲突整合;

临时暂存单元5,用于当中心点更新过快时对每一普通点更新后的中心点信息进行缓冲;

终止检测单元6,用于检测是否满足终止条件,如果是,则终止聚类计算过程。

图2为本发明提供的应用于k-mean聚类算法中的加速装置的架构示意图,如图2所示,101为数据预取装置,其中上方为将聚类计算所需的中心点预取至第一缓存区的装置,下方为将聚类计算所需的普通点预取至第二缓存区的装置,102为距离计算单元2和最小距离计算及更新单元3的集合,于实际实施时可以通过计算单元(pe)来实现其功能,103为冲突整合单元4、临时暂存单元5和终止检测单元6的集合。

如图1、图2所示,本发明提供的应用于k-mean聚类算法中的加速方法,其包括以下步骤:

s1:将聚类计算所需的中心点和普通点分别预取至一第一缓存区和一第二缓存区;

s2:依次从第一缓存区和第二缓存区读取中心点和普通点并计算每一普通点与所有中心点之间的距离;

其中,计算每一普通点与所有中心点之间的距离是通过pe_num个计算单元进行,pe_num为大于1的整数,其中,每个计算单元计算完其中一个普通点与所有中心点之间的距离之后再针对下一个普通点进行计算,每个计算单元的并行度为c_num,c_num为大于1的整数。

s3:根据上一步骤的计算结果确定每一普通点距离最近的中心点,并将每一普通点对应的中心点进行更新;

如图3所示为本发明中距离计算单元和最小距离发现单元的示意图,p为普通点,o1~o4为一部分中心点,sub为减法单元,mul为乘法单元,acc为累加器,多个cmp构成树形比较器,tcr为结果临时比较器,tmr为最小值寄存器,rsr为结果暂存寄存器,以计算普通点p(xp、yp)与中心点o1(xo1、yo1)的距离为例,减法单元用于计算“xp-xo1”和“yp-yo1”的值,乘法单元用于对上述计算后的值再计算其平方即计算(xp-xo1)2以及(yp-yo1)2的值,累加器用于计算(xp-xo1)2和(yp-yo1)2的和。当完成普通点p与中心点o1~o4的上述计算之后,多个树形比较器cmp对上述多个计算结果进行比较,得到距离当前普通点最近的中心点及其距离值a。这个值a被保存在结果临时比较器tcr中,并且和最小值寄存器tmr中的值进行比较(tmr中的值在初始时被设置为无限大的数值),如果a的值小于tmr值,说明a是当前最小的值,那么将a的值更新到结果暂存寄存器rsr中,同时a的值也更新到tmr中,所以tmr和rsr中的值都是此时距离当前中心点最近的点与该中心点的距离。当对所有中心点计算完成上述计算之后,rsr中就保存了距离当前普通点p最近的中心点的值。

s4:判断是否存在多个普通点同时更新同一个中心点的情况,如果存在,则进行冲突整合;

s5:判断中心点的更新是否过快,如果是,则将每一普通点更新后的中心点信息进行缓冲;

s6:检测是否满足终止条件,如果是,则终止聚类计算过程,若为否,则重复进行上述过程。

按照上述步骤,于一轮计算完成后,pe_num个计算单元共计算出pe_num个普通点对应的距离最近的中心点,得到pe_num个普通点对应的中心点索引tag1~tagpe_num以及相对应的更新内容m1~mpe_num,之后步骤s4中进行冲突整合的计算过程如下:

m1=m1+(tag1&tag2)×m2+(tag1&tag3)×m3+…+(tag1&tagpe_num)×mpe_num对于2≤n≤pe_num-1,

对于n=pe_num,

其中,上述“&”的含义如下:对于任意“u”和“v”,若u=v,则u&v=1以及若u≠v,则u&v=0以及

如图5所示为本发明中的冲突整合示意图,根据“向左规约,向左优先”的原则,右边的tag都往左“看”。首先检测tag1和tag2是否相等,如果相等,那么m1=m1+m2;否则m1=m1。同理依次检测tag1和tag3、tag1和tag4是否相等,相等则累加,不等则保持不变。tag2则是首先检测是否和tag1相等,如果相等则m2置0;否则,执行与tag1相似的操作,即分别检测tag2和tag3、tag4是否相等,相等则累加,不等则保持不变。如果四个普通点需要更新的数据为(tag1=16,m1=5),(tag2=3,m2=8),(tag3=16,m3=2),(tag4=3,m4=10),则结果为m1=7,m2=18,m3=0,m4=0;如果四个普通点需要更新的数据为(tag1=16,m1=5),(tag2=16,m2=8),(tag3=16,m3=2),(tag4=16,m4=10),则结果为m1=25,m2=0,m3=0,m4=0;如果四个普通点需要更新的数据为(tag1=16,m1=5),(tag2=15,m2=8),(tag3=1,m3=2),(tag4=7,m4=10),则结果为m1=5,m2=8,m3=2,m4=10。通过上述数据整合后,四个寄存器中存放的为无冲突的数据,确保了普通点更新的是不同的中心点,避免了读写冲突,此外,以上逻辑的计算只需一个周期。

冲突整合后的m1~mpe_num分别存储至一规约寄存器中,每一规约寄存器均具有一tag位和一内容位,其中,tag位中存储的是中心点索引tag1~tagpe_num,内容位存储的是冲突整合后的m1~mpe_num。

步骤s5中,判断聚类个数k是否大于2×pe_num×c_num,若为是,则通过一更新调度单元将规约寄存器中的数据读取至pe_num个缓存器中,pe_num个缓存器分别具有一tag位和一内容位,tag位分别为tag1′~tagpe_num′,tag位tag1′~tagpe_num′通过依次读取每一规约寄存器的tag位而更新,内容位x1~xpe_num的更新方式如下:

xn=(tag1&tag1′)×m1+(tag2&tag2′)×m2+……+(tagpe_num&tagpe_num′)×mpe_num。

对内容位x1~xpe_num进行更新是通过pe_num个分别与更新调度单元连接的加法器进行。

图6为内容位更新示意图,如图6所示,经过冲突整合规约之后形成无冲突的更新数据,首先判断聚类个数k是否大于2×pe_num×c_num,若为是,则采用顺序流水的累加更新片上存储。否则,无冲突的数据被传送给临时暂存单元,解决当聚类个数k较小时,更新速度过快的情况。503为临时暂存单元,临时暂存单元有4个,冲突整合单元将普通点规约后,将m1-m4存储在四个规约寄存器中,这四个规约寄存器通过tag定位自己需要更新的临时暂存单元。规约寄存器和临时暂存单元全相连,临时暂存单元主动“看”规约寄存器中的内容即tag位和m值来确定自己的更新值,通过更新调度单元进行更新的调度。

每一临时暂存单元比较自身的tagn与tagn′的值,如果二者不等,那么直接为0;如果相等则相与为1,进行位数扩展,扩展到mn所表示的位宽。通过更新调度单元处理后,临时暂存单元就获得了其需要的更新值,临时暂存单元和该更新值直接被输入到图6中的加法器(add)中,之后将这个更新值更新到相应的临时暂存单元中,即完成了更新过程。

图4为本发明提供的应用于k-mean聚类算法中的加速装置的整体结构图,如图4所示,地址范围addc-offsetc中存储的是中心点o1~on,地址范围addp-offsetp中存储的是普通点p1~pm。wr的作用是写数据和更新。在前面的距离计算单元2完成一个普通点的计算(即计算出了当前普通点距离最近的中心点)之后,需要将这个普通点数据的信息写入到ram特定的位置,之后将不断的迭代,不断的有普通点的数据会更新到ram中。最后需要将同一个位置的普通点的各个属性值累加起来,然后求平均值,作为新的中心点,继续计算,直至收敛。所以wr的作用就是将这些普通点的数据写到用于更新的ram中,完成中心点的更新操作。

如图4所示,每个距离计算单元2从cram中读取4个中心点数据,从pram中读取一个普通点数据,每个距离计算单元2一次可以完成一个普通点和4个中心点的距离计算,并发现当前距离此普通点最近的中心点,然后距离计算单元2从cram读取后续4个中心点数据,完成下一轮的距离计算,当距离计算单元2完成n/4次迭代之后(n为中心点的总个数),就完成了一个普通点和所有n个中心点的距离计算,最小距离计算及更新单元3计算出与当前普通点距离最近的中心点,完成一个普通点聚类标记,距离计算单元2的个数为4,所以此时一共完成了4个普通点距离的标记。然后最小距离计算及更新单元3将这4个标记信息进行更新,并从pram中读取后续4个普通点继续完成相同的计算,直到m个普通点均完成上述计算。

图7为终止检测的逻辑示意图,当计算单元完成所有的普通点标记之后,终止检测单元开始工作,终止检测单元首先检测是否满足终止条件,如图6所示,601为uram,其中存储的是中心点累加值,602为nram,其中存储的是中心点累加次数,603为第一缓存区(cram),604为浮点除法器,605位浮点比较器。浮点除法器604流水的读取601和602中的值,并完成中心点平均值的计算之后然后读取第一缓存区的值比较,假如比较的结果不同,说明没有达到终止条件,此时转步骤6,否则终止聚类计算过程。

本发明提供的应用于k-mean聚类算法中的加速方法及其装置能够发掘聚类计算过程中普通数据之间的并行性,从而大大提高聚类计算的效率,并且克服了现有技术中计算节点与聚类个数需要保持一致的问题,从而提高了聚类的灵活性。

本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1