基于FPGA的粒子群算法加速方法与流程

文档序号:16404321发布日期:2018-12-25 20:19阅读:561来源:国知局
基于FPGA的粒子群算法加速方法与流程

本发明涉及高性能计算技术领域,具体的说是一种基于fpga的粒子群算法加速方法。

背景技术

粒子群算法,也称粒子群优化算法或鸟群觅食算法(particleswarmoptimization),缩写为pso,是近年来由j.kennedy和r.c.eberhart等开发的一种进化算法(evolutionaryalgorithm-ea)。pso算法属于进化算法的一种,从随机解出发,通过迭代寻找最优解,通过适应度来评价解的品质,通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。

粒子群算法在优化问题(如旅行商问题、背包问题等)求解,地图路径搜索,机器人路径规划,图像处理,神经网络训练等问题上应用广泛。尤其是随着目前无人驾驶、工业机器人等研究和应用领域的兴起,粒子群算法的重要性日趋突出。

粒子群算法是一种并行算法,算法流程图如图1、2所示。各个粒子在初始化之后,分别进行适应度评估,然后集中进行信息交互得出本轮新的全局最优位置,再根据这个全局最优位置和各粒子当前的位置更新粒子位置,也就是试探新的问题的最优解。从图1、2中可知,粒子群算法的计算密度很高(每个粒子都要计算,适应度函数模型复杂,为了得到最优解要进行多次迭代),但算法逻辑并不复杂,目前主流的cpu处理器的优势在于处理算法逻辑,因此,现有的基于cpu的粒子群算法器并不能充分利用cpu的资源,从而也就达不到好的加速效果。

粒子群算法如此好的解决优化问题的能力是通过大量的迭代和复杂的评估计算完成的,是一种计算密集型算法,虽然能够比较好的解决问题,但是付出的代价是需要大量的计算资源,如果使用普通的计算机来完成,虽然能够求解,但是求解时间过长,无法满足无人驾驶、机器人路径规划等实时性要求较高的问题的需要。因此,需要为粒子群算法提供更好的计算平台,以实现算法加速。



技术实现要素:

针对现有技术中存在的上述不足之处,本发明要解决的技术问题是提供一种基于fpga的粒子群算法加速方法。

本发明为实现上述目的所采用的技术方案是:一种基于fpga的粒子群算法加速方法,包括以下步骤:

将所要求解的粒子群数据分成若干个可并行计算的数据组;

在每次迭代过程中,各数据组的数据独立并行计算,得到每个数据组的组内最优位置;再根据各个数据组的组内最优位置得到本次迭代的粒子群的全局最优解;

进行下一次迭代,直到满足预定的迭代终止条件,获得预设满足要求的最优解。

所述每个数据组存放在fpga中的一个bram中。

所述各数据组的数据独立并行计算,得到每个数据组的组内最优位置,包括以下步骤:

对各个粒子进行初始化;

根据上次迭代得到的组内最优位置和各粒子当前的位置更新粒子位置;

计算各个粒子的适应度;

对各个粒子间进行信息交互,得到本次迭代过程中的组内最优位置。

所述对各个粒子进行初始化,具体为:

根据实际应用场景和需要求解的适应度函数决定的解空间,对各粒子进行随机初始化,得到各个粒子在求解空间内的随机位置。

所述根据上次迭代得到的组内最优位置和各粒子当前的位置更新粒子位置,具体为:

使用位置更新函数和前一轮位置更新得到的全局最优位置信息,计算得到本轮迭代中粒子新的位置。

所述计算各个粒子的适应度,具体为:

将更新后的新的粒子位置信息带入适应度函数,获得粒子的本轮的适应度值,然后与上一轮获得的适应度值进行比较,将二者中更优的作为本轮粒子更新的最终适应度值,传递到下一轮迭代;并且,将更优的适应度对应的粒子位置作为本轮迭代的粒子的最优位置保存并传递到下一轮迭代。

所述对各个粒子间进行信息交互,得到本次迭代过程中的组内最优位置,具体为:

将本组的各粒子的适应度值进行比较,适应度最优的粒子的位置作为本轮迭代的组内最优位置。

所述根据各个数据组的组内最优位置得到粒子群的全局最优解,具体为:

将各组的最优位置所对应的适应度值进行比较,适应度最优的粒子的位置作为本轮迭代的全局最优位置。

本发明具有以下优点及有益效果:

1、本发明选择了fpga作为粒子群算法加速器的计算平台,基于粒子群算法的数据流特点和fpga器件的结构特征,不仅能够达到预期的加速效果,同时降低处理器功耗,进而满足无人驾驶、机器人路径规划等便携场景。

2、本发明保证一个粒子群模型的求解过程在1s之内,完全能够满足无人驾驶,机器人路径规划等高实时性操作的要求。

附图说明

图1为现有技术中的粒子群算法流程图;

图2为现有技术中的粒子群数据流示意图;

图3为根据本发明方法设计的加速器的硬件结构图;

图4为采用本发明方法的粒子群数据流示意图;

图5为在fpga上实现本发明方法的“并行+流水”加速器实现结构图;

图6为满足本发明并行运算带宽需要和存储器容量需要的bram向量图;

图7为实现单周期流水间隔的所设计的流水线缓冲器结构及操作说明图。

具体实施方式

下面结合附图及实施例对本发明做进一步的详细说明。

fpga(field-programmablegatearray),即现场可编程门阵列。它是作为专用集成电路(asic)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。fpga采用了逻辑单元阵列lca(logiccellarray)这样一个概念,内部包括可配置逻辑模块clb(configurablelogicblock)、输入输出模块iob(inputoutputblock)和内部连线(interconnect)三个部分。现场可编程门阵列(fpga)是可编程器件,利用小型查找表(16×1ram)来实现组合逻辑,每个查找表连接到一个d触发器的输入端,触发器再来驱动其他逻辑电路或驱动i/o,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到i/o模块。fpga的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与i/o间的联接方式,并最终决定了fpga所能实现的功能,允许无限次的编程。fpga以硬件描述语言(verilog或vhdl)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至fpga上进行测试。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如and、or、xor、not)或者更复杂一些的组合功能比如解码器或数学方程式。fpga不属于冯诺依曼体系,不需要取指、译码、执行等步骤来完成计算,而是通过根据算法固化好的电路直接完成数据计算。fpga的上述结构特点使它可以具有低延时、计算核可定制、计算资源可以定制分配等特点,十分适合粒子群算法加速。

本发明采用高性能的fpga器件和外围电路,构成独立的fpga加速器,如图3所示,通过专用的数据通道(串口、usb或pcie)与主处理器cpu所在pc通信。pc通过数据通道向fpga加速器发送粒子群数据和启动加速指令,所有粒子群算法求解过程在加速器上完成,然后加速器通过数据通道将数据发送回pc。

本发明的实施例中可以采用xilinx公司的zynq架构fpga芯片,特别适合用于机器人路径规划等嵌入式场景。zynq架构在单片fpga芯片上集成了2个arma9硬核,专门用于处理逻辑计算,arm核和fpga之间通过axi4高速总线进行通信。zynq架构体积小,功耗低,可以满足一般嵌入式场景需要。

fpga器件的优势在于逻辑结构可定制,能够在算法的并行度和计算密度方面进行灵活调整。fpga器件的另外一个优势是可变长流水结构,即可以根据算法的实际需求对实现算法的流水线结构进行深度定制,以实现更大的流水线长度,从而提高算法总体的数据吞吐率。

针对fpga的上述结构特点,本发明首先对粒子群算法的单次迭代的数据流进行了重新规划,如图4所示,整理后的数据流将粒子间的通信部分放在每次迭代的最后,这样数据流在整个算法中只汇聚一次,但算法总体精度不变,这样的数据流更便于fpga实现长的流水线结构。

本发明设计了一套适合于fpga的能够高效加速粒子群算法的“并行+流水”结构,如图5所示,首先,将所要计算的粒子群数据进行了按组划分,组内粒子数据可以并行计算,组间粒子数据则流水计算;其次,对重新规划后的算法数据流进行了进一步的划分,将算法的单次迭代分为“dimensionmap”,“particlemap”,“combine”和“reduce”四个阶段,“dimensionmap”阶段负责粒子的位置更新,“particlemap”负责粒子的适应度计算,“combine”阶段负责计算组内的最优解,“reduce”阶段则负责用“combine”阶段输出的组内最优解求得全局最优解,以供下一次迭代更新使用,这种“combine”+“reduce”两次收敛的方式有利于降低fpga单个存储单元的扇出度,从而提高算法整体的吞吐率,但同时也给算法的流水线设计带来了一定的难度。

根据上次迭代得到的组内最优位置和各粒子当前的位置更新粒子位置,具体为:使用位置更新函数和前一轮位置更新得到的全局最优位置信息,计算得到本轮迭代中粒子新的位置。不同版本的粒子群算法的位置更新函数有所不同,例如,基于经典运动学定律更新粒子位置的;基于量子物理学量子位置变化规律更新粒子位置的。不同的位置更新函数适合于不同的应用问题,但更新的目的都是获得基于上一轮迭代信息的新的优化解。

为了提高fpga的资源利用率,进一步提升fpga加速器的数据处理规模,本加速器将所有的粒子数据存放于fpga上的bram中,如图5中所示。bram是fpga提供的一种以块(block)为大小的分散的存储单元,访问bram时与访问ram采用一样的方式,即先向ram发送地址,然后再向ram写入数据或者从ram读出数据,但是bram的优势在于它是每块bram单独拥有自己的总线,因此,可以通过设置bram的并行度来获得更大的数据读写带宽。在bram的带宽设计上,本加速器设计了一种“向量bram”模型,来满足并行粒子群算法的需要。如图6所示。根据图5中所示的“dimensionmap”阶段,所有并行计算的粒子的所有维度是同时进行计算的,即此时的并行度为:

p=ngхnd

其中,ng为每组并行的粒子数量,nd为每个粒子的维度。如果在bram中存储粒子数据时以传统的每个粒子的所有维度都放入一块bram的方式,那么一个粒子数据的全部读入需要d个时钟周期,这样就无法实现高效流水,所以本加速器把粒子数据按维度展开,每个维度的数据放入一块bram中,这样单个粒子的数据存储需要d块bram,但bram的带宽扩展为原来的d倍,这样就能够满足加速器并行计算粒子对并行带宽的要求。同时,还将bram以向量模型进行设计,单块bram的每个存储单元存储一组粒子的一个维度,这样对于每个bram每个时钟进行一次读写就可以读出一组数据,从而满足了高并发流水的ram带宽需求。

为了最大限度提升fpga流水线结构的效率,本加速器通过fpga结构设计的深度优化,实现了“1clockinitiationinterval”,如图7所示,即每一轮中每隔一个时钟周期,可以输出一个粒子位置更新结果。但是这个粒子更新结果并不是最终的本次迭代的计算结果,按照图4所示,每次迭代的最终输出为全局最优解,也即每个粒子的更新位置输出之后会参与后面的求全局最优解的过程,但这个过程的基本运算是浮点数加法和浮点数乘法,在fpga中,完成一次浮点数加法或者浮点数乘法最少要需要4个时钟周期(由于fpga主频设置的不同,实际设计中这个值为n≥4),因此将不能保证整个迭代过程都能每个时钟周期输出一个结果,从而导致整个流水线的“initiationinterval”至少为n。为了改善这一点,本加速器设计了一个“流水线缓存器(pipelinebuffer)”结构,其本质上为一个循环队列,大小为n,其中的每个元素存取一个全局最优解,这样每个周期新产生的粒子的最新位置就可以和当前队列位置中的全局最优解进行运算,到队列中的最后一个粒子参与运算,队列中第一个元素参与的运算刚好结束,并且参与下一个新来的粒子更新位置运算。由于粒子群算法符合分治思想,因此“流水线缓存器”中的每个元素都是最优解的一部分,等到本次迭代所有粒子位置更新完毕之后,在用加法树结构对“流水线缓存器”中的所有元素求和,从而实现单次迭代的“1clockinitiationinterval”。

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