雷达信号分选中利用GPU加速决策树训练的方法

    专利查询2022-08-25  75

    雷达信号分选中利用gpu加速决策树训练的方法
    技术领域
    :1.本发明属于雷达侦察信号处理
    技术领域
    :,主要涉及利用cuda架构加速决策树实现雷达信号分选,具体是一种雷达信号分选中利用gpu加速决策树训练的方法,主要用于缩短雷达信号分选中决策树算法的训练时间。
    背景技术
    ::2.雷达设备的大量应用,使得雷达侦察设备面临的电磁威胁环境信号密度达到数百万个数量级;同时,现代雷达为了提高其性能和抗干扰的需要,经常采用各种复杂的波形设计来最小化信号分选和识别中使用的信号特征规律性,再加上低截获概率(lpi)技术,这些都对雷达信号分选的准确性,可靠性,实时性提出了更高的要求。3.gpu的单指令多数据流(singleinstructionmultipledata,缩写为simd)处理模式可并行地对大规模数据进行同样的操作。由于市场驱动,gpu的发展速度大大超过了cpu的发展速度,近年发展的可编程功能为通用计算提供了高性价比运算平台,使得基于gpu的通用计算成为近年来研究热点之一;同时,cuda所支持的语言是c/c ,所编写的程序在支持cuda架构的gpu上以高性能运行。4.决策树是一种树形结构,利用树形结构进行决策判定。相较于传统的雷达信号分选算法(cdif,sdif,pri变换等),决策树采用了多维度雷达特征,这可以建立一个更加完善的分选模型,使雷达信号分选准确性得到提升。5.电子科技大学的朱旦奇2017年在其硕士论文“基于cuda平台的机器学习算法gpu并行化的研究与实现”中,针对sprint决策树中性能消耗模块进行cuda加速。该论文中存在树节点寻找“最佳”分割属性时消耗过多内存空间、线程之间通信频繁、影响训练时间以及大数据量下,决策树的加速比是否可以得到有效提升等技术问题。6.现有技术中,针对雷达侦察信号处理中大数据量情况,雷达信号分选中对决策树采用gpu并行处理;上述论文验证了并行决策树是可行的,但在决策树构建过程中,gpu端中线程通信会消耗过多时间,属性列表的创建、拆分会消耗过多内存,属性列表没有根据属性值优化排序以及训练过程没有程序指令优化;上述问题会导致决策树的训练时间过长,进而影响雷达信号分选的时间和实时性。技术实现要素:7.本发明的目的是针对现有技术存在的问题和不足,提出一种缩短训练时间,提高实时性的雷达信号分选中利用gpu加速决策树训练的方法。8.本发明是一种雷达信号分选中利用gpu加速决策树训练的方法,其特征在于,包括有如下步骤:9.步骤1,获取雷达信号特征数据:在cpu端首先从雷达侦察系统中获取雷达的信号特征向量数据,每个特征向量包含p个特征,分为雷达的训练集和测试集,训练集共有n条数据,测试集共有n1条数据,并初始化gpu端环境;10.步骤2,配置决策树参数:在cpu端设置决策树的深度,基尼系数限定值参数;在gpu端根据训练集特征向量的个数和训练集数据精度开辟相应的显存,将雷达信号分选的训练集逐一拷贝到开辟好的gpu显存中;11.步骤3,配置gpu,训练加速决策树:在gpu端使用一维线程索引分配cuda线程的网格grid和线程块block的大小;在gpu端用雷达信号训练集训练决策树,在训练过程中循环迭代执行创建雷达分类的属性列表,寻找“最佳”分割属性和分割点,拆分雷达分类的属性列表,树节点生成操作,并对循环迭代操作中的核函数采用最佳线程调度,全局内存与共享内存合理运用,代码指令优化进行加速;在较短时间内生成加速决策树,并将加速决策树逐一传送至cpu内存中;12.步骤4,测试加速决策树,验证分选准确率及加速比:将已读取的测试集数据依次输入到加速决策树中,验证雷达测试集信号分选准确率,若大于预定准确率,则保留整棵加速决策树,用于雷达信号分选;若小于预定准确率,则对加速决策树进行后剪枝优化操作,使其得到优化后的最优加速决策树,用于雷达信号分选;并验证加速决策树与原决策树的加速比;13.步骤5,利用加速决策树进行雷达信号分选:在cpu端将训练完成的整棵加速决策树或优化后的最优加速决策树传送至雷达侦察设备中,利用加速决策树进行雷达信号分选。14.本发明解决了现有技术中雷达信号分选中决策树训练时间过长的问题:15.本发明与现有技术相比有以下优点:16.采取多维度雷达特征:本发明相较于传统的雷达信号分选方法,加速决策树可以采用多维度的雷达特征,进而得到更加完善的训练模型,提高雷达信号分选的准确性。17.相比现有并行决策树,进一步缩短加速决策树训练时间:本发明相较于雷达信号分选中串行决策树方法,对加速决策树中可以并行计算以及消耗时间过长的操作放在gpu端进行;本发明并对在gpu端运行的核函数采取合理的全局内存和共享内存的使用,根据数据量大小进行线程调度,减少线程通信时间,对所有的核函数进行指令优化。18.易于扩展和移植:本发明基于cuda体系和vs平台开发,利用c 语言进行模块化设计,易于扩展和移植。附图说明19.图1是本发明的基于cuda架构加速决策树训练的方法流程图;20.图2是本发明的加速决策树树节点生成示意图;21.图3是本发明的拆分属性列表示意图;22.图4是本发明的加速决策树进行雷达信号分选混淆矩阵仿真图;23.图5是本发明的优化后加速决策树与cpu串行决策树的加速比曲线。具体实施方式24.实施例125.下面将结合附图和实施例对本发明详细描述,对本发明实施例中的技术方案进行清楚、完整地描述。26.现有技术中,雷达侦察信号处理领域利用决策树进行信号分选,在大规模数据量的情况下,决策树训练时间过长,不能满足现有需要,需要缩短决策树训练时间,提高雷达信号分选的实时性。27.本发明是一种雷达信号分选中利用gpu加速决策树训练的方法,参见图1,图1是本发明基于cuda架构加速决策树训练的方法流程图,包括有以下步骤:28.步骤1,获取雷达的信号特征向量数据:获取雷达信号特征数据:在cpu端首先从雷达侦察系统中获取雷达的信号特征向量数据,每个特征向量包含p个雷达侦察信号特征,分为雷达的训练集和测试集,训练集共有n条数据,测试集共有n1条数据,并初始化gpu端环境;29.步骤2,配置决策树参数:在cpu端设置决策树的深度d,基尼系数限定值参数gini;在gpu端根据训练集特征向量的个数和训练集数据精度开辟相应的显存,将雷达信号分选的训练集逐一拷贝到开辟好的gpu显存中;加速决策树是在cpu端进行构造,将可以并行计算,运算量大且能缩短时间的步骤,如步骤3中的操作放在gpu端进行。30.步骤3,配置gpu,训练加速决策树:在gpu端使用一维线程索引分配cuda线程的网格grid和线程块block的大小;在gpu端用雷达信号训练集训练决策树,在训练过程中循环迭代执行创建雷达分类的属性列表,寻找“最佳”分割属性和分割点,拆分雷达分类的属性列表,树节点生成操作,并对循环迭代操作中的核函数采用最佳线程调度,全局内存与共享内存合理运用,代码指令优化进行加速;在较短时间内生成加速决策树,并将加速决策树逐一传送至cpu内存中;在寻找“最佳”分割点中的scan、reduce、compact操作,在拆分属性列表中的scan、partition操作,相较于在cpu中串行执行,在gpu端采用多线程技术,全局内存与共享内存的相互配合,可以大幅度缩小运算时间,进而提高加速决策树的训练速度。31.步骤4,测试加速决策树,验证分选准确率及加速比:将步骤1中已读取的测试集数据依次输入到加速决策树中,验证雷达测试集信号分选准确率,若大于预定准确率,则保留整棵加速决策树,用于雷达信号分选;若小于预定准确率,则对加速决策树进行后剪枝优化操作,使其得到优化后的最优加速决策树,用于雷达信号分选;并验证加速决策树与原决策树的加速比。32.步骤5,利用加速决策树进行雷达信号分选:在cpu端将训练完成的整棵加速决策树或优化后的最优加速决策树传送至雷达侦察设备中,利用加速决策树进行雷达信号分选。33.本发明给出了一种雷达信号分选中利用gpu加速决策树训练方法的整体技术方案。34.本发明的技术方案具体就是,结合现有的雷达信号分选中的决策树算法,依托cuda平台,实行cpu gpu的异构并行计算,来提高决策树的训练速度;整体包括cpu端执行的逻辑控制以及数据管理,具体包括设置决策树的深度d,基尼系数的限定参数gini,数据集的读取拷贝,gpu线程层次的配置,开辟和释放存储单元,训练完成决策树的保存,以及核函数的调用;gpu端在训练决策树中,创建属性列表,计算基尼系数,寻找“最佳”分割点,拆分属性列表以及cuda库函数的调用。35.本发明利用gpu的并行计算能力以及cuda架构编程,来保证在雷达信号分选中利用决策树算法训练大量雷达信号特征向量数据的实时性,且易于平台移植。36.实施例237.雷达信号分选中利用gpu加速决策树训练的方法同实施例1,步骤2所述的配置决策树参数,包括有以下步骤:38.2.1设置决策树参数:在cpu中设置决策树的深度d,基尼系数限定值gini;设置决策树的深度防止决策树过渡生长,限定基尼系数是对属性列表的划分以及树节点是否还可以继续生成子节点的限制;对从雷达信号训练集中读取到的n×p维数据和n个雷达标签,使用cudamalloc函数开辟相应的gpu显存空间。39.2.2训练集数据拷贝,使用cudamemcpyhosttodevice函数和cudamemcpy函数,将n×p维的雷达的信号特征向量数据从cpu端拷贝至gpu端。40.从雷达侦察设备中读取雷达信号的特征数据,本发明采用了网口、串口和usb多种方式,保证短距离,远距离传输速率和准确性,也是加速决策树训练的前提条件,以至于加速决策树可以顺利训练完成。41.本发明的基于cuda异构并行加速的决策树雷达信号分选实现方法中,雷达的信号特征向量数据集包含了各式各样的体制雷达,共n×p维数据,其中参数p代表了p-1维的特征向量以及1维的雷达类别标签。首先将n×p维雷达的信号特征向量数据集存储在cpu端,再开辟gpu显存空间,将雷达的信号特征向量数据集由cpu端拷贝到gpu端,同时根据雷达的信号特征向量数据集在gpu端开辟显存配置属性列表,采用一维索引方式分配cuda线程模型;接着,在cpu端配置根节点,由cpu负责控制决策树的生成,在gpu端计算构造树节点所需要的参数,运行核函数,如划分属性列表,寻找“最佳”分割属性,计算基尼系数,属性值排序,前缀和计算等核函数。在gpu端生成的决策树,由内存拷贝函数拷贝至cpu端,在cpu端进行准确性测试。42.实施例343.雷达信号分选中利用gpu加速决策树训练的方法同实施例1-2,步骤3配置gpu,训练加速决策树,包括有以下步骤:44.3.1初始化属性列表显存:根据步骤2读取的p个特征,使用cudamalloc函数初始化决策树的属性列表显存,属性列表包括有属性值列表,类标签列表和划分值列表;本发明数据存储方式采用了gpu下的矩阵存储方式,利用矩阵存储方式,可以借助cuda架构中特有的运算方式,加快数据存储,拆分的速度。45.3.2创建属性列表:在gpu端,根据雷达训练数据集的大小,划分线程组织的网格grid和线程块block的大小,每一个线程完成一组雷达信号分选训练集属性列表的创建;并调用cudathreadsynchronize函数保持线程块内线程同步;46.3.3雷达训练集属性列表排序:调用thrust库中的stable_sort_by_key函数,根据雷达训练集属性列表中的属性值对属性列表进行排序;47.3.4生成加速决策树:主要包括初始化树根节点,在根节点处根据属性列表寻找分裂点,以及拆分属性列表,填充树节点,递归迭代直至生成加速决策树,并在生成加速决策树过程中对所有代码指令进行整体优化。48.3.5保存加速决策树:调用cudamemcpydevicetohost函数将步骤3.4生成的加速决策树数据从gpu端传送至cpu端,并且调用cudafree函数清除gpu端显存。49.上述步骤3.1至3.5:对训练加速决策的过程中可以并行计算以及消耗时间过长的操作都放在gpu端进行,同时对其做整体优化,其目的都是为了缩短训练时间;且上述操作在gpu端都是基于cuda体系和vs平台开发,利用c 语言进行模块化设计,易于扩展和移植;步骤3.5清理gpu端显存,方便加速决策树的再次训练。50.实施例451.雷达信号分选中利用gpu加速决策树训练的方法同实施例1-3,步骤3.4生成加速决策树,参见图2,图2是本发明加速决策树树节点生成示意图,包括有以下步骤:52.3.4.1初始化树根节点:树节点保存有:左子树节点、右子树节点、叶子节点标记、树节点的基尼系数准则以及此树节点指向属性列表的指针;其中指向属性列表的指针是为了生成子节点时,利用gpu内存结构,不重复复制属性列表,节省内存空间。53.3.4.2寻找分裂点:属性列表中的值是排序的,所以在给定索引处拆分属性值列表;在gpu端利用索引号、属性列表的大小和scan函数扫描类标签列表的最终索引,来提供足够的信息计算用于拆分每个值的gini索引,寻找拆分的属性以及拆分的节点;进而执行compact操作删除重复的属性值,确保没有重复属性值进入决策树的不同侧;图2的加速决策树树节点生成示意图中,对于一组属性列表,系统在开始进行判断是否都属于叶子节点?若全部属于叶子节点,则分类结束,若不都属于叶子节点,则会寻找分裂点。54.3.4.3拆分属性列表:在gpu端将属性列表中的属性值列表,类标签列表和划分值列表都一分为二,使左右子节点分别对应一份属性列表;根据属性列表的构造方式,在gpu端调用stable_partition函数进行分区,使进入左子树的值位于数组的开头,进入右子树的值位于数组的末尾;即可以在树节点中保存属性列表的指针指向左子树和右子树数据,不需要复制数据或者在每个节点处保留额外的索引列表;图2的加速决策树树节点生成示意图中,在寻找分裂点时,判断候选属性是否为空,若不为空,则可以继续进行拆分,在此就可以生成一个内部节点;若候选属性是空的,则可以生成一个叶子节点;叶子节点表示的是分类的结果,如果数据在分类时停止在该处迭代,则该数据将被划分为该叶子节点的类;当找到一个候选的拆分点时,则需要拆分属性列表并生成一个内部节点;内部节点包含分类规则,决定数据分类的路走向。55.参见图3拆分属性列表示意图,将1节点分裂成2节点和3节点,1节点本身对应rf属性列表和type属性列表,根据步骤3.4.1,3.4.2和3.4.3中的操作将1节点进行分裂,同时将其对应的属性列表也进行分裂,1节点的rf属性列表拆分成2节点的rf属性列表1和3节点的rf属性列表2;1节点的type属性列表拆分成2节点的type属性列表1和3节点的type属性列表2;分裂完成后,2节点和3节点继续上述步骤执行操作,直至最后不再进行分裂,成为叶子节点。56.本发明在步骤3.4.3和3.4.4中进行compact操作、scan操作和排序操作中对全局内存与共享内存都采取合理用时的方案,以及对循环迭代操作中的核函数采用最佳线程调度,使加速决策树整体训练时间更少。57.本发明在线程调度,内存使用,避免共享内存bank冲突以及程序指令优化上,都对上述所有步骤进行了详细优化,使得优化后的加速决策树在缩短训练时间上更进一步,具体操作如下所示:58.最佳线程调度:本发明在设置的线程块数量是32的整数倍,对于int型数据,线程块设置为256个线程;对于float型数据,线程块设置为128个线程;在并行归约操作中,第一次迭代,只有偶数线程被调度,在第二次迭代中,只有四分之一线程是活跃的,但是所有的线程仍然被调度。本发明通过重新组织每个线程的数组索引来强制id相邻的线程执行最小值操作,解决线程束分化问题。59.合并全局内存访问:gpu端在在全局内存中创建属性列表,本发明中gpu的每个线程束32个线程访问的是一个连续的内存空间,并使得线程束从对其内存地址开始,有利于吞吐量的最大化。60.避免共享内存bank冲突:在并行前缀和计算中,一个线程束中的不同线程访问同一块内存会发生bank冲突,本发明在使用二叉树扫描前缀和时,将树的每一级内存访问之间的步幅加倍,同时使访问同一组的线程数加倍,利用补充地址使得线程找到对应bank,避免bank冲突。61.程序指令优化:本发明在前缀和优化共享内存中,采用每个线程加载各个float4元素而不是两个float元素来处理每个线程的8个元素而不是2个;每个线程通过将来自共享内存的相应扫描元素添加到寻出在寄存器中每个部分和来构造两个float4值,最后将float4值写入全局内存。62.3.4.4节点生成其子节点:拆分属性列表完成后,则生成此树节点;同时若左子节点为终端,则生成右子节点,进入步骤3.4.2;若右子节点为终端,则生成左子节点,进入步骤3.4.2;若左右子节点都不是终端,则同时分别进入步骤3.4.2;上述步骤不断循环迭代,直至生成加速决策树。63.实施例564.雷达信号分选中利用gpu加速决策树训练的方法同实施例1-4,步骤4测试加速决策树,验证分选准确率及加速比,包括有以下步骤:65.4.1优化决策树:将步骤2中读取好的训练集n1×p维测试数据依次输入到加速决策树中,验证测试集信号分选准确率,若大于预定准确率,则保留整棵加速决策树;若小于预定准确率,则对加速决策树进行后剪枝优化操作。后剪枝是利用测试集自底向上地对加速决策树的非叶节点进行逐一考察,泛化性能更好。66.对于一个具有k类别的数据集合,类别“i”到节点“t”的概率为:[0067][0068]ni(t)表示类别“i”到达节点“t”的样本数,n(t)表示到节点“t”的样本总条数,m表示先验概率对后验概率的pi(t)的影响大小的参数。[0069]当对到达t的测试数据进行分类时:[0070][0071]当m=k,pai=1/k时,有:[0072][0073]其中,e(t)为错误样本数目,且e(t)=n(t)-ni(t)。[0074]剪枝过程即:首先计算该节点的误差eer(t),然后计算该节点分支的误差eer(tt),并带权值求和,其中权值取每个分支的测试样本比例,若eer(t)>eer(tt),则保留该子树,否则,删掉该子树。[0075]在加速决策树模型雷达信号分选准确率没有达到预定值的情况下,使用后剪枝操作,可以有效提高雷达信号分选准确率,扩展其泛化性能,使其在实际雷达信号分选中可以适应不同测试集,以及可以达到比较高的准确率。[0076]4.2验证加速比:对加速决策树在不同数据量下做加速比性能验证,验证加速方案可行性,加速比公式如下:[0077][0078]式中:[0079]speed:并行化算法相对于串行算法的加速比。[0080]timecpu:在cpu上,串行算法运行时间。[0081]timegpu:在gpu上,并行算法运行时间。[0082]经过步骤3.4程序优化以及步骤4.1后剪枝操作,加速决策树模型性能会有很大提升;加速决策树也是基于cuda架构下完成,所以其最重要的性能指标就是验证其与cpu下串行决策树下的加速比;本发明在一定数据量下,有效地提高加速比,在后续的仿真说明中,也证实优化后的加速决策树模型具有很高的加速比,有效地提升了雷达信号分选的实时性。[0083]实施例6[0084]雷达信号分选中利用gpu加速决策树训练的方法同实施例1-5,步骤5利用加速决策树进行雷达信号分选,包括有以下步骤:[0085]5.1加速决策树保存至雷达侦察设备:将整棵加速决策树拷贝至雷达侦察设备中,使雷达侦察设备在较短时间内完成雷达信号分选。[0086]5.2释放内存资源:在cpu端调用free函数,释放cpu端资源。[0087]将加速决策树模型保存至雷达侦察设备中,针对雷达侦察设备中的雷达信号分选数据直接进行分选,也因为加速决策树是一种树形结构,根据雷达信号分选数据的p个特征,利用树形结构的深度搜索操作,可以迅速找到此雷达的信号特征向量数据的分类情况,完成信号分选,这也保证了雷达信号分选数据在大数据量下的实时性;最后清理cpu内存空间,保证下次进行加速决策树训练处于大数据量情况下,cpu有足够的内存空间来存储雷达训练集和测试集。[0088]本发明属于雷达信号分选
    技术领域
    :,提供一种雷达信号分选中利用gpu加速决策树训练的方法。该方法包括如下步骤:在cpu端从雷达侦察系统中获取雷达的信号分选数据,分为雷达训练集和雷达测试集,并设置决策树的深度,基尼系数限定值参数;在gpu端根据训练集维度和训练集数据精度开辟显存空间;划分核函数的线程组织,在gpu端执行训练决策树,循环迭代执行创建雷达分类的属性列表,寻找“最佳”分割属性和分割点,拆分雷达分类的属性列表,树节点生成操作;得到加速决策树,将加速决策树拷贝至cpu端,根据其分选准确率决定对其是否进行后剪枝优化操作;利用cuda代码优化策略对训练加速决策树的核函数进行优化;绘制加速决策树的优化后的加速比曲线。本发明优化后的加速决策树在仿真条件下加速比达到170.1倍,能够很好的提高雷达信号分选的实时性,且基于cuda软件体系和visualstudio平台开发,便于扩展和移植。[0089]下面将结合附图对本发明做进一步的描述,对本发明实施例中的技术方案进行清楚、完整地描述。[0090]实施例7[0091]雷达信号分选中利用gpu加速决策树训练的方法同实施例1-6,本发明的雷达信号分选中利用gpu加速决策树训练的方法流程图,如图1所示。具体的,包括以下步骤:[0092]步骤1,在cpu中读取雷达训练数据集n×p,将其作为加速决策树的初始数据集并逐一拷贝到开辟好的gpu显存中。[0093]具体的,步骤1中包括以下2个子步骤:[0094]1.a,在cpu端设置决策树的最大深度d,划分准则基尼系数限定值gini,并使用cudamalloc函数为雷达训练集n×p开辟gpu显存空间。[0095]1.b,使用cudamemcpy函数和cudamemcpyhosttodevice函数,将n维的雷达的信号特征向量数据和n个雷达标签从cpu端拷贝至gpu端。[0096]步骤2,在gpu端使用一维线程索引分配cuda线程的网格grid和线程块block的大小,在gpu端执行加速决策树中的核函数,输出训练完成的加速决策树,并且将数据逐一传送至cpu内存中。[0097]具体的,步骤2中包括以下8个子步骤:[0098]2.a,根据步骤1读取的p个特征,创建属性列表,使用cudamalloc函数初始化属性列表的显存,属性列表包括属性值列表,类标签列表和划分值列表。[0099]2.b,在gpu端,将显存中雷达训练数据的大小,划分线程组织的网格grid和线程块block的大小:[0100]线程块:((n) (threadsperblock)-1)/threadsperblock;[0101]线程索引:idx=blockidx.x*blockdim.x threadidx.x;[0102]每一个线程完成一组属性列表的创建。调用cudathreadsynchronize函数保持线程块内线程同步。[0103]2.c,属性列表创建好后,调用thrust库中的sort函数对属性列表中三个表根据属性值进行排序。[0104]2.d,初始化树节点,树节点主要包括:左子树节点、右子树节点、叶子节点标记、该子节点的分裂准则以及属性列表的指针。[0105]2.e,进入树节点的构造,gpu端根据属性列表的大小划分线程组织的网格grid和线程块block的大小:[0106]线程块:((n) (threadsperblock)-1)/threadsperblock;[0107]线程索引:idx=blockidx.x*blockdim.x threadidx.x;[0108]每一个线程,寻找“最佳”分裂点,根据基尼系数划分准则,在属性列表中扫描属性列表,生成类直方图,利用类直方图的信息来计算基尼系数,选择基尼系数最小的点作为属性列表的拆分点。[0109]假定集合t分成了t1和t2两个部分,每一部分分别包含了n1和n2条数据,那么集合t分割之后的基尼系数是:[0110][0111]加速决策树的树节点生成示意图如附图2所示。[0112]对于一组属性列表,系统在开始进行判断是否都属于叶子节点?若全部属于叶子节点,则分类结束,若不都属于叶子节点,则会寻找分裂点,判断候选属性是否为空,若不为空,则可以继续进行拆分,在此就可以生成一个内部节点;若候选属性是空的,则可以生成一个叶子节点;叶子节点表示的是分类的结果,如果数据在分类时停止在该处迭代,则该数据将被划分为该叶子节点的类;当找到一个候选的拆分点时,则需要拆分属性列表并生成一个内部节点。内部节点包含分类规则,决定数据分类的路走向。[0113]2.f,在gpu端拆分属性列表,根据属性列表的大小划分线程组织的网格grid和线程块block的大小:[0114]线程块:((n) (threadsperblock)-1)/threadsperblock;[0115]线程索引:idx=blockidx.x*blockdim.x threadidx.x;[0116]由于每个树节点对应的属性列表构造方式是一样的,所以对其进行分区操作,将进入左子树的值位于数组的开头,进入右子树的值位于数组的末尾,即在树节点中保存指针来指向左子树和右子树的数据,不必复制数据或在每个节点上保留额外的索引列表,这样处理效果既节省内存空间又缩短时间;属性列表分割示意图如图3所示,将1节点对应的属性列表进行拆分,在树节点中保存指针指向左子树的数据和右子树的数据。[0117]2.g,步骤2.a至2.f循环进行,直至该子节点保存的属性列表的大小为1,或者其最佳基尼系数达到设定值,那么停止子节点生长,该节点即为叶子节点。[0118]步骤2.h,加速决策树训练,调用cudamemcpydevicetohost函数将整棵加速决策树从gpu端传送至cpu端,并且调用cudafree函数清除gpu端显存。[0119]步骤3,将步骤1中已经读取的训练集数据进行加速决策树测试,验证雷达信号分选的准确性,验证完成后调用free函数清除cpu端资源。[0120]步骤4,采用最佳线程调度,全局内存与共享内存合理运用,代码指令优化等策略,对第2,3步骤中加速决策树生成的核函数进行优化,计算优化后cuda异构并行算法与cpu串行算法的加速比。[0121]本发明基于cuda体系和vs平台开发,利用c 语言进行模块化设计,易于扩展和移植。[0122]下面结合仿真实验对本发明的效果作进一步说明。[0123]实施例8[0124]雷达信号分选中利用gpu加速决策树训练的方法同实施例1-7,[0125]仿真条件:[0126]本发明的仿真参数如表1所示:[0127]表1雷达信号参数表[0128][0129]仿真内容:[0130]此项发明的实验要求只要在满足cuda11.1的编程环境下即可顺利开展,计算机的软硬件环境配置如下:cpu是intel(r)core(tm)i5-7500处理器;gpu是nvidiageforcegtx1050ti;操作系统是win10专业版64位;异构并行计算平台是cuda11.1;cuda编程平台microsoftvisualstudio2017;算法串行验证平台是pytorch;准确性验证平台是matlab2021b。[0131]图4是利用加速决策树进行雷达信号分选的混淆验证矩阵仿真图。[0132]图5是优化后加速决策树与cpu串行决策树的加速比曲线。[0133]仿真结果分析:[0134]对表1雷达信号参数表中4种雷达,分别以相同数量创建雷达训练集,即是雷达1,雷达2,雷达3,雷达4分别以200个雷达的信号特征向量数据组成800维具有5个特征的雷达训练集,测试集则是在训练集中随意抽取20%生成,仿真结果即是图4利用加速决策树进行雷达信号分选的混淆验证矩阵仿真图。[0135]图4验证了加速决策树的准确性,在雷达1至雷达4的数量都是200个的前提下,计算出混淆矩阵准确性是100%,说明加速决策树模型在cpu和gpu下的准确性是一致的,且性能优良。[0136]根据本发明的仿真参数,分别组成a:数据量为2000(4×500)的雷达训练集;b:数据量为4000(4×1000)的雷达训练集;c:数据量为6000(4×1500)的雷达训练集;d:数据量为8000(4×2000)的雷达训练集;e:数据量为10000(4×2500)的雷达训练集;f:数据量为12000(4×3000)的雷达训练集。[0137]对上述训练集a-f分别进行cpu串行决策树训练以及本发明的优化后的加速决策树训练,得到图5优化后加速决策树与cpu串行决策树的加速比曲线;从图5可以看出,当数据量在不断增加时,加速比也在不断提升,在本测试f中,达到170.1倍的加速,极大减少了决策树训练时间,提高雷达信号分选的实时性,本发明基于cuda体系和vs平台开发,利用c 语言进行模块化设计,易于扩展和移植。[0138]综上所述:本发明属于雷达信号分选
    技术领域
    :,提供一种雷达信号分选中利用gpu加速决策树训练的方法,解决了雷达信号分选中决策树训练时间过长,实时性差问题。该方法包括以下步骤:获取雷达的信号特征向量数据;配置决策树参数;配置gpu,训练加速决策树;测试加速决策树,验证分选准确率及加速比;将训练完成并优化后的整棵加速决策树模型送入雷达设备中,进行雷达信号分选。本发明相比于传统雷达信号分选算法,采用了多维度的雷达特征,可以得到更加完善的训练模型,提高雷达信号分选准确性;相比于现有并行决策树,本发明对在gpu端运行的核函数采取合理的全局内存和共享内存的使用,根据数据量大小进行线程调度减少线程通信时间,对所有的核函数进行指令优化,进一步缩短加速决策树训练时间,提高实时性;本发明基于cuda体系和vs平台开发,利用c 语言进行模块化设计,易于扩展和移植。当前第1页12当前第1页12
    技术特征:
    1.一种雷达信号分选中利用gpu加速决策树训练的方法,其特征在于,包括有如下步骤:步骤1,获取雷达信号特征数据:在cpu端首先从雷达侦察系统中获取雷达的信号特征向量数据,每个特征向量包含p个特征,分为雷达的训练集和测试集,训练集共有n条数据,测试集共有n1条数据,并初始化gpu端环境;步骤2,配置决策树参数:在cpu端设置决策树的深度,基尼系数限定值参数;在gpu端根据训练集特征向量的个数和训练集数据精度开辟相应的显存,将雷达信号分选的训练集逐一拷贝到开辟好的gpu显存中;步骤3,配置gpu,训练加速决策树:在gpu端使用一维线程索引分配cuda线程的网格grid和线程块block的大小;在gpu端用雷达信号训练集训练决策树,在训练过程中循环迭代执行创建雷达分类的属性列表,寻找“最佳”分割属性和分割点,拆分雷达分类的属性列表,树节点生成操作,并对循环迭代操作中的核函数采用最佳线程调度,全局内存与共享内存合理运用,代码指令优化进行加速;在较短时间内生成加速决策树,并将加速决策树逐一传送至cpu内存中;步骤4,测试加速决策树,验证分选准确率及加速比:将已读取的测试集数据依次输入到加速决策树中,验证雷达测试集信号分选准确率,若大于预定准确率,则保留整棵加速决策树,用于雷达信号分选;若小于预定准确率,则对加速决策树进行后剪枝优化操作,使其得到优化后的最优加速决策树,用于雷达信号分选;并验证加速决策树与原决策树的加速比;步骤5,利用加速决策树进行雷达信号分选:在cpu端将训练完成的整棵加速决策树或优化后的最优加速决策树传送至雷达侦察设备中,利用加速决策树进行雷达信号分选。2.根据权利要求1所述的雷达信号分选中利用gpu加速决策树训练的方法,其特征在于,步骤2所述的配置决策树参数包括有以下步骤:2.1设置决策树参数:在cpu中设置决策树的深度d、基尼系数限定值gini;对从雷达信号训练集中读取到的n
    ×
    p维数据和n个雷达标签,使用cudamalloc函数开辟相应的gpu显存空间;2.2训练集数据拷贝,使用cudamemcpyhosttodevice函数和cudamemcpy函数,将n
    ×
    p维的雷达信号特征向量数据从cpu端拷贝至gpu端。3.根据权利要求1所述的雷达信号分选中利用gpu加速决策树训练的方法,其特征在于,步骤3配置gpu,训练加速决策树包括有以下步骤:3.1初始化属性列表显存:根据步骤2读取的p个雷达特征,使用cudamalloc函数初始化决策树的属性列表显存,属性列表包括有属性值列表,类标签列表和划分值列表;3.2创建属性列表:在gpu端,根据雷达训练数据集的大小,划分线程组织的网格grid和线程块block的大小,每一个线程完成一组雷达信号分选训练集属性列表的创建;调用cudathreadsynchronize函数保持线程块内线程同步;3.3雷达训练集属性列表排序:调用thrust库中的stable_sort_by_key函数根据雷达训练集属性列表中的属性值对属性列表进行排序;3.4生成加速决策树:主要包括初始化树根节点,在根节点处根据属性列表寻找分裂点,以及拆分属性列表,填充树节点,递归迭代直至生成加速决策树,并在生成加速决策树
    过程中对所有代码指令都进行整体优化;3.5保存加速决策树:调用cudamemcpydevicetohost函数将步骤3.4生成的加速决策树数据从gpu端传送至cpu端,并且调用cudafree函数清除gpu端显存。4.根据权利要求3所述的雷达信号分选中利用gpu加速决策树训练的方法,其特征在于,步骤3.4生成加速决策树包括有以下步骤:3.4.1初始化树根节点:树节点主要包括:左子树节点、右子树节点、叶子节点标记、该子节点的分裂准则以及此树节点指向属性列表的指针;3.4.2寻找分裂点:属性列表中的值是排序的,所以在给定索引处拆分属性值列表;在gpu端利用索引号、属性列表的大小和scan函数扫描类标签列表的最终索引,来提供足够的信息来计算用于拆分每个值的gini索引;执行compact操作删除重复的属性值,确保没有重复属性值进入决策树的不同侧;3.4.3拆分属性列表:在gpu端将属性列表中的属性值列表,类标签列表和划分值列表都一分为二,使左右子节点分别对应一份属性列表;根据属性列表的构造方式,在gpu端调用stable_partition函数进行分区,使进入左子树的值位于数组的开头,进入右子树的值位于数组的末尾;即可以在树节点中保存属性列表的指针指向左子树和右子树数据,不需要复制数据或者在每个节点处保留额外的索引列表;本发明在步骤3.4.3和3.4.4中进行compact操作、并行前缀和操作和排序操作中对全局内存与共享内存都采取用时更短的方案,以及对循环迭代操作中的核函数采用最佳线程调度,使加速决策树整体训练时间更少;3.4.4节点生成其子节点:拆分属性列表完成后,则生成此树节点;若左子节点为终端,则生成右子节点,进入步骤3.4.2;若右子节点为终端,则生成左子节点,进入步骤3.4.2;若左右子节点都不是终端,则同时分别进入步骤3.4.2;上述步骤不断循环迭代,直至生成加速决策树。5.根据权利要求1所述的雷达信号分选中利用gpu加速决策树训练的方法,其特征在于,步骤4测试加速决策树,验证分选准确率及加速比包括有以下步骤:4.1优化决策树:将步骤2中读取好的训练集n1×
    p维测试数据依次输入到加速决策树中,验证测试集信号分选准确率,若大于预定准确率,则保留整棵加速决策树;若小于预定准确率,则对加速决策树进行后剪枝优化操作。4.2验证加速比:对加速决策树在不同数据量下做加速比性能验证,验证加速方案可行性。6.根据权利要求1所述的雷达信号分选中利用gpu加速决策树训练的方法,其特征在于,步骤5利用加速决策树进行雷达信号分选包括有以下步骤:5.1加速决策树保存至雷达侦察设备:将整棵加速决策树拷贝至雷达侦察设备中,使雷达侦察设备在较短时间内完成雷达信号分选。5.2释放内存资源:在cpu端调用free函数,释放cpu端资源。

    技术总结
    本发明提供了一种雷达信号分选中利用GPU加速决策树训练的方法,解决了雷达信号分选中决策树训练时间过长,实时性差问题。包括以下步骤:获取雷达信号特征向量数据;配置决策树参数;配置GPU,训练加速决策树;测试加速决策树,验证分选准确率及加速比;将训练完成并优化后的整棵加速决策树模型送入雷达侦察设备中,进行雷达信号分选。本发明采用了多维度的雷达特征,得到更加完善的训练模型,提高雷达信号分选准确性;相比于现有并行决策树,本发明在GPU端采取合理的内存分配,线程调度,并对核函数进行指令优化,缩短运行时间,提高实时性;本发明基于CUDA体系和VS平台开发,利用C 语言进行模块化设计,易于扩展和移植。易于扩展和移植。易于扩展和移植。


    技术研发人员:汤建龙 张傲 斯海飞 薛成均 解佳龙
    受保护的技术使用者:西安电子科技大学
    技术研发日:2022.02.17
    技术公布日:2022/5/25
    转载请注明原文地址:https://tc.8miu.com/read-11338.html

    最新回复(0)