[发明专利]一种基于KNN算法的网络入侵检测并行化加速方法有效
申请号: | 201810418164.4 | 申请日: | 2018-05-04 |
公开(公告)号: | CN108600246B | 公开(公告)日: | 2020-08-21 |
发明(设计)人: | 刘端阳;郑江帆;沈国江;刘志;朱李楠;杨曦;阮中远 | 申请(专利权)人: | 浙江工业大学 |
主分类号: | H04L29/06 | 分类号: | H04L29/06;G06K9/62 |
代理公司: | 杭州天正专利事务所有限公司 33201 | 代理人: | 王兵;黄美娟 |
地址: | 310014 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 一种基于KNN算法的网络入侵检测并行化加速方法。方法采用了CUDA并行计算模型,首先针对基于KNN算法的网络入侵检测进行了并行化分析,在计算网络入侵检测数据点到训练数据集的距离时,采用了CUDA提供的通用矩阵乘函数进行加速,提高了运算速度;然后,在距离排序阶段,提供了两种并行化排序策略的选择机制,可以根据少量数据的排序结果,灵活选择排序时间少的排序算法进行距离排序;最后,在入侵检测数据点的分类阶段,采用基于CUDA的原子加法操作进行统计。实验结果表明,本发明提出的加速方法是有效的,在保证检测率的情况下,有效地提高了网络入侵检测的并行化加速性能。 | ||
搜索关键词: | 一种 基于 knn 算法 网络 入侵 检测 并行 加速 方法 | ||
【主权项】:
1.一种基于KNN算法的网络入侵检测并行化加速方法,包括如下步骤:(1)在CPU端和GPU端进行算法的初始化;在CPU端初始化m个待检测的网络入侵检测数据点,n个带有分类标号的网络入侵检测训练数据点,每个数据点的维度为d,最近邻的个数为k(k≤n);在GPU端分配待检测的网络入侵检测数据点集和训练数据点集的内存空间,将数据从CPU端拷贝至GPU端;(2)并行化计算m个入侵检测数据点至n个训练数据点的距离,获得维度为m*n的距离矩阵;在GPU端,开启m个线程计算入侵检测数据点矩阵x的平方x2,每个线程计算一个入侵检测数据点在d个维度上的平方和;接着,开启n个线程计算训练数据点矩阵y的平方y2,每个线程计算一个训练数据点在d个维度上的平方和;然后,计算x2+y2;最后,在GPU端调用CUDA提供的通用矩阵乘函数cublasSgemm()进行距离计算,得到一个维度为m*n的距离矩阵Z,每一行代表一个入侵检测数据点与n个训练数据点的距离;(3)采用两种并行化排序算法对距离矩阵的任意一行数据进行排序,选择排序时间较小的算法来进行下一步的计算;在GPU端,从距离矩阵Z中随机抽取一行数据,对这一行的n个距离值进行两次并行化排序来计算k个最近邻,即k个距离最近的训练数据点;第一次排序采用基于k次最小值查找的最近邻选择算法,第二次排序采用基于双调排序的最近邻选择算法,如果第一次排序所需时间小于第二次排序所需时间,则继续下一步;否则,跳转至步骤(5);(4)采用基于k次最小值查找的最近邻选择算法,对距离矩阵的每一行数据进行并行化排序,计算每个入侵检测数据点的k个最近邻;在GPU端,首先,将全局存储器中的距离矩阵Z拷贝至共享内存;然后,开启m个线程块,每个线程块负责一行数据(即一个入侵检测数据点的距离数据)的排序,每个线程块内开启
(说明:此处为向上取整)个线程进行比较和循环迭代,经过k次查找得到属于该入侵检测数据点的k个近邻,即k个距离最近的训练数据点;最后,每个线程块分别输出自己的k个最近邻,跳转至步骤(6);(5)采用基于双调排序的最近邻选择算法,对距离矩阵的每一行数据进行并行化排序,计算每个入侵检测数据点的k个最近邻;在GPU端,首先,检查是否需要补充元素;如果n≠2a(a>0),则需要补足最少个数的元素使n=2a,补足的元素统一为能够表示的最大数;接着,将距离矩阵Z拷贝至共享内存,开启m个线程块,每个线程块负责一行数据(即一个入侵检测数据点的距离数据)的排序,每个线程块内总共进行a轮迭代,前a‑1轮迭代进行相邻两个单调性相反的序列合并,并分别按相反单调性递归进行双调排序;直至第a轮迭代时,合并前面两个长度为n/2的单调序列为一个长度为n的双调序列;然后,每个线程块内开启n/2个线程做两两元素的比较,得到两个长度为n/2的子双调序列,按此方式循环迭代a轮,每轮都会开启n/2个线程参与计算,直至最后一轮迭代时是长度为2的序列相比较,即可得出单调递增的距离序列;最后,每个线程块分别输出自己的k个最近邻,即k个距离最近的训练数据点,并继续下一步;(6)根据k个最近邻的计算结果,采用并行化的方式对每个入侵检测数据点进行分类;在GPU端,首先,开启m个线程块,每个线程块负责一个待检测的入侵检测数据点分类标号的统计,每个线程块在共享内存上开辟一个数组,数组长度为训练数据点的类别个数;接着,每个线程块内开启k个线程,每个线程统计自己对应位置上数据(即对应的最近邻训练数据点)的类别标号,采用CUDA内部的原子加法操作统计,即atomicAdd()操作;最后,同步线程块内线程,得到数组的最终值,数组中数字最大的类别即为该入侵检测数据点的分类;(7)将步骤(6)的计算结果从GPU端拷贝至CPU端,输出m个待检测的入侵检测数据点的分类标号,如果该分类标号属于网络入侵分类标号,则判断该入侵检测数据点为入侵,否则为正常。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江工业大学,未经浙江工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201810418164.4/,转载请声明来源钻瓜专利网。