当前位置: 首页 > 专利查询>上海大学专利>正文

一种基于OpenCL的KNN-GPU加速方法技术

技术编号:10397219 阅读:184 留言:0更新日期:2014-09-07 17:51
本发明专利技术涉及一种基于OpenCL的KNN-GPU加速方法。本发明专利技术主要完成KNN算法的并行化实现,首先是CPU端的准备工作,包括OpenCL平台的初始化、设备端的存储配置,然后在GPU上的计算过程,包括设备端的测试数据及训练数据在索引空间表示、距离计算及排序等步骤,最后将GPU端所得到的分类结果输出到CPU端显示。本发明专利技术还对GPU端的内存访问进行了优化,采用了局部存储器的存储和读取数据,进一步提高了并行化效率。通过实验证明,本发明专利技术能够有效提高KNN分类算法的效率,且分类精度保持不变,能够广泛应用于文本及图像等分类计算中。

【技术实现步骤摘要】
—种基于OpenCL的KNN-GPU加速方法
本专利技术涉及基于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算法存在的运算速度不快等问题提供,利用KNN算法的可并行化特性,运用OpenCL异构平台,实现KNN算法的GPU并行化,在保证分类精度的基础上,有效地提高了 KNN分类算法的计算速度。本专利技术解决其技术问题采用的技术方案为:首先进行OpenCL平台的初始化,完成平台和设备的准备工作后,通过设备端的存储配置操作,数据由主机端传送到设备端,在设备端配置相关的内核参数,便可以在GPU上并行地执行KNN算法的距离计算和距离排序过程,最后需要把设备内存中的内容传送到主机端,完成数据的读取并输出分类结果。本专利技术解决其技术问题采用的技术方案还可以进一步完善。针对上述在GPU上并行地执行KNN算法的距离计算和距离排序过程,具体步骤如下: I)全局索引设置,参数初始化:全局索引id = y*get_global_size (O) +x,其中x返回零维工作项索引,y返回一维工作项索引,get_global_size (O)返回零维中工作项总数。全局索引中每一个索引id对应一个计算任务,众多任务会在同一时间被计算完毕,以此来实现KNN算法的并行化加速。2)测试数据和训练数据索引空间表示:将测试数据和训练数据在GPU端的索引空间中表示:测试数据为 test[i+dims*y],训练数据为 train [x+get_global_size (O) *i],其中dims表示数据维度,O ^ i〈dims。3)测试点距离计算:每个索引对应的任务用于计算一个测试点到所有训练数据的欧氏距离,所以不同测试点到训练数据的距离计算是并行的。设η为数据维度,□口、□口则代表□、□中的第i个元素,欧氏距离计算公式如下:本文档来自技高网...

【技术保护点】
一种基于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端的计算结果,判定测试的所属的类别。

【技术特征摘要】
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端的计算结果,判定测试的所...

【专利技术属性】
技术研发人员:余小清周艺圆万旺根叶轩楠
申请(专利权)人:上海大学
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1