CN104020983A - 一种基于OpenCL的KNN-GPU加速方法 - Google Patents
一种基于OpenCL的KNN-GPU加速方法 Download PDFInfo
- Publication number
- CN104020983A CN104020983A CN201410267295.9A CN201410267295A CN104020983A CN 104020983 A CN104020983 A CN 104020983A CN 201410267295 A CN201410267295 A CN 201410267295A CN 104020983 A CN104020983 A CN 104020983A
- Authority
- CN
- China
- Prior art keywords
- data
- gpu
- distance
- test
- index
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Abstract
本发明涉及一种基于OpenCL的KNN-GPU加速方法。本发明主要完成KNN算法的并行化实现,首先是CPU端的准备工作,包括OpenCL平台的初始化、设备端的存储配置,然后在GPU上的计算过程,包括设备端的测试数据及训练数据在索引空间表示、距离计算及排序等步骤,最后将GPU端所得到的分类结果输出到CPU端显示。本发明还对GPU端的内存访问进行了优化,采用了局部存储器的存储和读取数据,进一步提高了并行化效率。通过实验证明,本发明能够有效提高KNN分类算法的效率,且分类精度保持不变,能够广泛应用于文本及图像等分类计算中。
Description
技术领域
本发明涉及基于OpenCL平台的GPU并行加速领域,具体涉及一种基于OpenCL的KNN分类的GPU加速新方法。
背景技术
K最近邻(K-Nearest Neighbor,简称KNN)算法最初由Cover和Hart于1968年提出,随后得到广泛深入的分析和研究,该算法是一种基于类比学习的算法,对于未知的或者符合正态分布的样本可以获得较高的分类精度,并且具有鲁棒性、方法简单等优点。
KNN算法的基本思想是:假设每一个类包含多个样本数据,而且每个数据都有一个唯一的类标记表示这些样本类别,分别计算每个样本数据到待分类数据的距离,取和待分类数据最近的k各样本数据,根据这k个近邻的类别确定待分类样本归属。
KNN 分类是一种基于要求的或懒惰的学习方法,它存放所有的训练样本,直到测试样本需要分类时才建立分类。如果数据量比较小,KNN算法还是有客观的速度的。而当与测试样本比较的训练样本较大时,会招致很高的计算开销。在大型的分类系统中,训练文本集的规模是非常庞大的,倘若与其中的每个文本都进行相似度计算,其耗时代价是令人无法接受的。因此如何提高KNN算法的效率也成为了研究的重点,本发明就是为解决计算耗时的问题而提出的。
OpenCL(Open
Computing Language)是一个基于异构平台上编程的开放性行业标准。OpenCL所支持的平台可由CPU、GPU或其他类型的处理器组成,同时OpenCL提供了基于任务和基于数据两种并行计算机制,极大扩展到了GPU的应用范围。
发明内容
本发明的目的是针对已有的KNN算法存在的运算速度不快等问题提供一种基于OpenCL的KNN-GPU加速方法,利用KNN算法的可并行化特性,运用OpenCL异构平台,实现KNN算法的GPU并行化,在保证分类精度的基础上,有效地提高了KNN分类算法的计算速度。
本发明解决其技术问题采用的技术方案为:首先进行OpenCL平台的初始化,完成平台和设备的准备工作后,通过设备端的存储配置操作,数据由主机端传送到设备端,在设备端配置相关的内核参数,便可以在GPU上并行地执行KNN算法的距离计算和距离排序过程,最后需要把设备内存中的内容传送到主机端,完成数据的读取并输出分类结果。
本发明解决其技术问题采用的技术方案还可以进一步完善。针对上述在GPU上并行地执行KNN算法的距离计算和距离排序过程,具体步骤如下:
1) 全局索引设置,参数初始化:全局索引id = y*get_global_size(0)
+ x,其中x返回零维工作项索引,y返回一维工作项索引,get_global_size(0) 返回零维中工作项总数。全局索引中每一个索引id对应一个计算任务,众多任务会在同一时间被计算完毕,以此来实现KNN算法的并行化加速。
2)
测试数据和训练数据索引空间表示:将测试数据和训练数据在GPU端的索引空间中表示:测试数据为test[i+dims*y],训练数据为train[x+get_global_size(0)*i],其中dims表示数据维度,0≤i<dims。
3)
测试点距离计算:每个索引对应的任务用于计算一个测试点到所有训练数据的欧氏距离,所以不同测试点到训练数据的距离计算是并行的。设n为数据维度,𝐴𝑖、𝐵𝑖则代表𝐴、𝐵中的第i个元素,欧氏距离计算公式如下:
4) 输出数据索引空间表示:确定计算出的距离结果在索引空间的表示,每个距离结果会有一个索引。
5)
测试点所有距离排序,取前k个距离内的样本点:根据距离的大小按升序排序,在排序时考虑索引的变化。这里采用的是冒泡排序法,每个测试点按距离排序的过程是相互独立的、并行执行的。
6)
测试点距离所属分类:统计出前k个邻近距离内,训练数据所属的最多分类,这k个距离对应着训练样本中的k个样本点,即:统计这k个样本点所属的最多分类,该分类即为测试数据的分类标签。
本发明有益的效果是:针对KNN分类算法计算量大、耗时长的问题,利用GPU可并行化处理计算的特点,将需要分类的测试数据和训练数据在索引空间中表示,合理设置内核参数,并且最大效率的进行并行任务分配,使KNN分类算法中最耗时的距离计算和距离排序过程可以在GPU上实现并行处理,在不降低分类精度的条件下,极大降低分类所需的时间,以实现进行大数据分类的实时计算。
附图说明
图1是一种基于OpenCL的KNN-GPU加速方法主流程图。
图2是基于OpenCL的KNN-GPU加速方法的内核函数编写流程图。
图3是利用局部内存优化后内核函数结构图。
图4是基于OpenCL的KNN-GPU加速方法与一般KNN分类方法的实验结果对比图。
具体实施方式
本发明的优选实施例结合附图详述如下:
实施例一:基于OpenCL的KNN-GPU加速方法的一个优选实施例结合附图说明如下,本实施例中,以维度是4,测试点数为100,训练数据数目15为例作说明,共分为6个步骤:
步骤1:初始化OpenCL平台:首先获取OpenCL平台信息,接着获取设备ID,最后创建设备运行环境的上下文。
步骤2:设备端的存储配置操作:CPU端配置三个存储器:1是用于存储输入训练数据,2是用于存储输入测试数据,3是用于存储输出分类数据;GPU端则从对应的存储器中读取数据。
步骤3:配置GPU设备端的测试数据和训练数据:按照GPU设备端分配线程数,设置工作组的大小,工作项的大小和数据维度的大小,据此建立测试数据和训练数据的索引空间,用于之后的计算。
步骤4:GPU端的KNN算法:在设置完KNN算法内核函数参数后, 内核函数将被调度在GPU上并行计算,得到测试数据的距离和所属的分类。
步骤5:CPU端的存储配置操作:GPU端的计算处理完成后,需要把设备内存中的分类计算的结果传回到CPU,完成数据的输出。
步骤6:确定测试点的类别。根据GPU端的计算结果,判定测试的所属的类别。
其中步骤4中KNN算法的距离计算和距离排序过程需要考虑以下两方面因素:全局/局部索引空间的任务分配和内核参数设置:
1) 索引空间的分配;
分别将输入测试数据和训练数据在索引空间用二维矩阵表示,横坐标为数据数目,纵坐标为数据维度。这里将训练数据矩阵进行转置,以方便和测试数据进行矩阵混合运算得出输出分类数据对象。输出对象内容包括测试点到训练数据集距离以及所属分类。在对数据分析完成后,可得到全局索引空间,大小为测试数据和训练数据的乘积。
2)
内核参数设置;
GPU端的内核函数有两个输入数据对象,分别是测试数据和训练数据。它们必须是全局对象,这样所有工作节点都能访问这两个输入对象。因此,同理输出分类数据也需要是全局对象。除此之外,内核函数还要传递数据维度大小。内核函数的功能内容主要包括两部分:测试数据到训练数据集距离的计算和排序,具体步骤如下:
a) 全局索引设置,参数初始化:全局索引id = y*get_global_size(0)
+ x,其中x返回零维工作项索引,y返回一维工作项索引,get_global_size(0) 返回零维中工作项总数。全局索引中每一个索引id对应一个计算任务,众多任务会在同一时间被计算完毕,以此来实现KNN算法的并行化加速。
b)
测试数据和训练数据索引空间表示:将测试数据和训练数据在GPU端的索引空间中表示:测试数据为test[i+dims*y],训练数据为train[x+get_global_size(0)*i],其中dims表示数据维度,0≤i<dims。
c)
测试点距离计算:每个索引对应的任务用于计算一个测试点到所有训练数据的欧氏距离,所以不同测试点到训练数据的距离计算是并行的。设n为数据维度,𝐴𝑖、𝐵𝑖则代表𝐴、𝐵中的第i个元素,欧氏距离计算公式如下:
d)
e) 输出数据索引空间表示:确定计算出的距离结果在索引空间的表示,每个距离结果会有一个索引。
f)
测试点所有距离排序,取前k个距离内的样本点:根据距离的大小按升序排序,在排序时考虑索引的变化。这里采用的是冒泡排序法,每个测试点按距离排序的过程是相互独立的、并行执行的。
g)
测试点距离所属分类:统计出前k个邻近距离内,训练数据所属的最多分类,这k个距离对应着训练样本中的k个样本点,即:统计这k个样本点所属的最多分类,该分类即为测试数据的分类标签。
h)
数据输出到CPU端:将GPU端计算所得到的所有测试点的距离和所属的分类输出到CPU端。
OpenCL 默认的存储设备为全局内存,对应为GPU物理结构中的设备内存,即通常说的显存。存取全局内存的时间是非常长的,一般需要400至600个时钟周期。而OpenCL还定义了局部内存与私有内存。其中 局部内存是位于GPU核心上的类似于缓存的结构,为每个工作组分配了可共享的固定的数10KB容量,可以提供高于全局内存的访问速度。利用局部内存的内存优化后内核函数构成如图3所示。
在所请求的维度为4的情况下,确定工作组的大小,以及在所请求的维度上确定当前工作项在工作组中的索引。本实施例中,设置工作组大小为256,全局索引空间划分为N/256个工作组,N=100×15=1500为测试数据点数乘以训练数据点数。
测试的结果为:在分类效果相同的情况之下,用以往的KNN分类方法在CPU上的运算时间为0.102秒,而用本发明提出的基于OpenCL的KNN-GPU加速方法,其运算时间只需要0.05秒,分类速度大大加快。
实施例二:本实施例中,以维度是8,测试点数为4000个为例作说明,步骤与实施例一相同,这里不再重述。
本实施例中,设置工作组大小为256,全局索引空间划分为N/256个工作组,测试的结果为:在分类效果相同的情况之下,用以往的KNN分类方法在CPU上的运算时间为7.641秒,而用本发明提出的基于OpenCL的KNN-GPU加速方法,其运算时间只需要0.923秒,速度提高到8.28倍。可见数据维度的增长,GPU的性能优势会得到更大的发挥。
实验结果:
本发明进行了基于OpenCL1.0平台的实验,实验环境为CPU选用Intel CORE i5处理器,内存是4GB,显卡使用NVIDIA Geforce605。
KNN算法采取的实验数据格式为特征值加类别标识,数据点均为单浮点类型,设置工作组大小为256,全局索引空间划分为N/256个工作组,N为测试数据点数乘以训练数据点数。测试数据和训练数据在局部索引空间的表示:测试数据为test_l[i+dims*y],训练数据为train_l[x+get_global_size(0)*i],其中dims表示数据维度,0≤i<dims。
本实验数据维度分别为4和8,测试数据点数从100到4000间取值。实验结果如图4所示:展示了数据维度分别为4和8时,针对不同数目的测试点CPU与GPU运行时间的对比。其中红色的虚线表示数据维度为4时CPU运行时间,黑色的虚线表示数据维度为4时GPU运行时间,蓝色实线表示数据维度为8时CPU运行时间,绿色实线表示数据维度为8时GPU运行时间。
实验结果表明:通过GPU并行化处理后,KNN算法的分类效率有了较大的提高,数据维数为4时比仅用CPU处理效率提高了5倍;而数据维数为8时则比仅用CPU处理效率提高了8倍。
本发明一种基于OpenCL的KNN-GPU加速方法与传统在CPU上运行的方法相比,其特点是该方法运用了OpenCL异构化平台,将KNN算法中部分运算有效地分解到GPU上运行,并利用了GPU特殊的并行化结构,从而实现了分类算法效率的大幅提高,为大数据分类算法的实时计算提供了可能。
Claims (2)
1.一种基于OpenCL的KNN-GPU加速方法,如图1所示,其特征在于基于OpenCL平台的并行化处理,具体步骤如下:
步骤1:初始化OpenCL平台:首先获取OpenCL平台信息,接着获取设备ID,最后创建设备运行环境的上下文;
步骤2:设备端的存储配置操作:CPU端配置三个存储器:1是用于存储输入训练数据,2是用于存储输入测试数据,3是用于存储输出分类数据;GPU端则从对应的存储器中读取数据;
步骤3:配置GPU设备端的测试数据和训练数据:按照GPU设备端分配线程数,设置工作组的大小,工作项的大小和数据维度的大小,据此建立测试数据和训练数据的索引空间,用于之后的计算;
步骤4:GPU端的KNN算法:在设置完KNN算法内核函数参数后, 内核函数将被调度在GPU上并行计算,得到测试数据的距离和所属的分类;
步骤5:CPU端的存储配置操作:GPU端的计算处理完成后,需要把设备内存中的分类计算的结果传回到CPU,完成数据的输出;
步骤6:确定测试点的类别;根据GPU端的计算结果,判定测试的所属的类别。
2.根据权利要求1所述的基于OpenCL的KNN-GPU加速方法,其特征在于步骤4中GPU端的KNN算法,如图2所示,具体步骤如下:
1) 全局索引设置,参数初始化:全局索引id = y*get_global_size(0) + x,其中x返回零维工作项索引,y返回一维工作项索引,get_global_size(0) 返回零维中工作项总数;全局索引中每一个索引id对应一个计算任务,众多任务会在同一时间被计算完毕,以此来实现KNN算法的并行化加速;
2) 测试数据和训练数据索引空间表示:将测试数据和训练数据在GPU端的索引空间中表示:测试数据为test[i+dims*y],训练数据为train[x+get_global_size(0)*i],其中dims表示数据维度,0≤i<dims;
3) 测试点距离计算:每个索引对应的任务用于计算一个测试点到所有训练数据的欧氏距离,所以不同测试点到训练数据的距离计算是并行的;设n为数据维度,𝐴𝑖、𝐵𝑖则代表𝐴、𝐵中的第i个元素,欧氏距离计算公式如下:
4) 输出数据索引空间表示:确定计算出的距离结果在索引空间的表示,每个距离结果会有一个索引;
5) 测试点所有距离排序,取前k个距离内的样本点:根据距离的大小按升序排序,在排序时考虑索引的变化;这里采用的是冒泡排序法,每个测试点按距离排序的过程是相互独立的、并行执行的;
6) 测试点距离所属分类:统计出前k个邻近距离内,训练数据所属的最多分类,这k个距离对应着训练样本中的k个样本点,即:统计这k个样本点所属的最多分类,该分类即为测试数据的分类标签;
7) 数据输出到CPU端:将GPU端计算所得到的所有测试点的距离和所属的分类输出到CPU端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410267295.9A CN104020983A (zh) | 2014-06-16 | 2014-06-16 | 一种基于OpenCL的KNN-GPU加速方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410267295.9A CN104020983A (zh) | 2014-06-16 | 2014-06-16 | 一种基于OpenCL的KNN-GPU加速方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104020983A true CN104020983A (zh) | 2014-09-03 |
Family
ID=51437760
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410267295.9A Pending CN104020983A (zh) | 2014-06-16 | 2014-06-16 | 一种基于OpenCL的KNN-GPU加速方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104020983A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104850866A (zh) * | 2015-06-08 | 2015-08-19 | 电子科技大学 | 基于SoC-FPGA的自重构K-means聚类技术实现方法 |
CN104866286A (zh) * | 2015-06-02 | 2015-08-26 | 电子科技大学 | 一种基于OpenCL与SoC-FPGA的K近邻分类加速方法 |
CN105959175A (zh) * | 2016-04-21 | 2016-09-21 | 南开大学 | 基于GPU加速的kNN算法的网络流量分类方法 |
CN108510429A (zh) * | 2018-03-20 | 2018-09-07 | 华南师范大学 | 一种基于gpu的多变量密码算法并行化加速方法 |
CN110781819A (zh) * | 2019-10-25 | 2020-02-11 | 浪潮电子信息产业股份有限公司 | 一种图像目标检测方法、系统、电子设备及存储介质 |
CN110928875A (zh) * | 2019-10-16 | 2020-03-27 | 中科驭数(北京)科技有限公司 | 关系型数据库管理系统中的元组排序方法、查询方法及装置 |
CN110929627A (zh) * | 2019-11-18 | 2020-03-27 | 北京大学 | 基于宽模型稀疏数据集的高效gpu训练模型的图像识别方法 |
CN112784989A (zh) * | 2019-11-08 | 2021-05-11 | 阿里巴巴集团控股有限公司 | 推理系统、推理方法、电子设备及计算机存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100079452A1 (en) * | 2008-09-30 | 2010-04-01 | Microsoft Corporation | Photon mapping on graphics hardware using kd-trees |
CN103618744A (zh) * | 2013-12-10 | 2014-03-05 | 华东理工大学 | 一种基于快速knn算法的入侵检测方法 |
-
2014
- 2014-06-16 CN CN201410267295.9A patent/CN104020983A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100079452A1 (en) * | 2008-09-30 | 2010-04-01 | Microsoft Corporation | Photon mapping on graphics hardware using kd-trees |
CN103618744A (zh) * | 2013-12-10 | 2014-03-05 | 华东理工大学 | 一种基于快速knn算法的入侵检测方法 |
Non-Patent Citations (1)
Title |
---|
韩敬涛: "基于GPU的文本分类算法研究", 《万方数据库》, 25 February 2014 (2014-02-25) * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866286A (zh) * | 2015-06-02 | 2015-08-26 | 电子科技大学 | 一种基于OpenCL与SoC-FPGA的K近邻分类加速方法 |
CN104866286B (zh) * | 2015-06-02 | 2018-05-01 | 电子科技大学 | 一种基于OpenCL与SoC-FPGA的K近邻分类加速方法 |
CN104850866A (zh) * | 2015-06-08 | 2015-08-19 | 电子科技大学 | 基于SoC-FPGA的自重构K-means聚类技术实现方法 |
CN104850866B (zh) * | 2015-06-08 | 2018-05-01 | 电子科技大学 | 基于SoC-FPGA的自重构K-means聚类技术实现方法 |
CN105959175A (zh) * | 2016-04-21 | 2016-09-21 | 南开大学 | 基于GPU加速的kNN算法的网络流量分类方法 |
CN108510429A (zh) * | 2018-03-20 | 2018-09-07 | 华南师范大学 | 一种基于gpu的多变量密码算法并行化加速方法 |
CN110928875B (zh) * | 2019-10-16 | 2021-04-16 | 中科驭数(北京)科技有限公司 | 关系型数据库管理系统中的元组排序方法、查询方法及装置 |
CN110928875A (zh) * | 2019-10-16 | 2020-03-27 | 中科驭数(北京)科技有限公司 | 关系型数据库管理系统中的元组排序方法、查询方法及装置 |
CN110781819A (zh) * | 2019-10-25 | 2020-02-11 | 浪潮电子信息产业股份有限公司 | 一种图像目标检测方法、系统、电子设备及存储介质 |
WO2021077743A1 (zh) * | 2019-10-25 | 2021-04-29 | 浪潮电子信息产业股份有限公司 | 一种图像目标检测方法、系统、电子设备及存储介质 |
CN112784989A (zh) * | 2019-11-08 | 2021-05-11 | 阿里巴巴集团控股有限公司 | 推理系统、推理方法、电子设备及计算机存储介质 |
CN112784989B (zh) * | 2019-11-08 | 2024-05-03 | 阿里巴巴集团控股有限公司 | 推理系统、推理方法、电子设备及计算机存储介质 |
CN110929627A (zh) * | 2019-11-18 | 2020-03-27 | 北京大学 | 基于宽模型稀疏数据集的高效gpu训练模型的图像识别方法 |
CN110929627B (zh) * | 2019-11-18 | 2021-12-28 | 北京大学 | 基于宽模型稀疏数据集的高效gpu训练模型的图像识别方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104020983A (zh) | 一种基于OpenCL的KNN-GPU加速方法 | |
CN106383695B (zh) | 基于fpga的聚类算法的加速系统及其设计方法 | |
Markonis et al. | Using MapReduce for large-scale medical image analysis | |
Wen et al. | Exploiting GPUs for efficient gradient boosting decision tree training | |
CN104699772A (zh) | 一种基于云计算的大数据文本分类方法 | |
CN103744935A (zh) | 一种计算机快速海量数据聚类处理方法 | |
US11144291B1 (en) | Loop-oriented neural network compilation | |
Ahmad | 40 Algorithms Every Programmer Should Know: Hone your problem-solving skills by learning different algorithms and their implementation in Python | |
CN102147813A (zh) | 一种电力云环境下基于k最近邻算法的文档自动分类方法 | |
Gabryel | A bag-of-features algorithm for applications using a NoSQL database | |
Do et al. | Parallel multiclass logistic regression for classifying large scale image datasets | |
CN103955443A (zh) | 一种基于gpu加速的蚁群算法优化方法 | |
Fakhi et al. | New optimized GPU version of the k-means algorithm for large-sized image segmentation | |
Ge et al. | Efficient parallel implementation of a density peaks clustering algorithm on graphics processing unit | |
Nikam et al. | Parallel kNN on GPU architecture using OpenCL | |
Sinha et al. | C orrfunc: Blazing Fast Correlation Functions with AVX512F SIMD Intrinsics | |
Tegegne et al. | Parallel nonlinear dimensionality reduction using GPU Acceleration | |
Minch et al. | GPU-embedding of kNN-graph representing large and high-dimensional data | |
Lu et al. | Implementation of the KNN algorithm based on Hadoop | |
WO2016179755A1 (en) | Mixed proposal based model training system | |
Li et al. | Application and performance optimization of MapReduce model in image segmentation | |
CN110532384A (zh) | 一种多任务字典单分类方法、系统、装置及存储介质 | |
Xu et al. | GPU accelerated image matching with cascade hashing | |
Shobanadevi et al. | Studying the performance of clustering techniques for biomedical data using spark | |
Kozawa et al. | Parallel canopy clustering on GPUs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140903 |
|
WD01 | Invention patent application deemed withdrawn after publication |