《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于IP核的数选式浮点矩阵相乘设计
基于IP核的数选式浮点矩阵相乘设计
来源:电子技术应用2011年第6期
肖 宇,王建业,张 伟
(空军工程大学 导弹学院,陕西 三原713800)
摘要: 本文根据数选式矩阵运算特点,结合低阶矩阵运算IP核,采用将IP核嵌入到数选矩阵中,同时添加浮点加法运算的方法,实现浮点矩阵相乘。在节省资源消耗的同时提升了系统性能,并将改进的浮点矩阵运算在FPGA中实现。仿真结果表明该设计可行,具有一定的实际意义和应用前景。
中图分类号: TN47
文献标识码: A
文章编号: 0258-7998(2011)06-0052-04
Floating-point matrix multiplication design based on IP core
Xiao Yu,Wang Jianye,Zhang Wei
Missile Institute, Air Force Engineering University, Sanyuan 713800,China
Abstract: Based on the characteristics of a few selected matrix operations, matrix operations with low-level IP cores, using the number of the IP core embedded in a matrix selection, while floating-point addition operation to add the method to achieve floating-point matrix multiplication. Saving resource consumption while improving system performance, and improved floating-point matrix operations in the FPGA. Simulation results show that the design is feasible, and it has some practical significance and applications.
Key words : floating-point matrix multiplication;embedded;IP core;field programmable gate arrays


 嵌入式计算作为新一代计算系统的高效运行方式,应用于多个高性能领域,如阵列信号处理、核武器模拟、计算流体动力学和海洋环境模拟等。在这些科学计算中,需要大量的矩阵运算,而矩阵运算中乘法运算是其他运算的基础,如能提高嵌入式系统中浮点矩阵乘法运算的速度,则可加快其他类型的矩阵运算速度。
    目前实现浮点矩阵运算的方法,有直接使用VHDL语言编写的浮点矩阵相乘处理单元[1],关键技术是乘累加单元的设计,通常依据设计者的编程水平决定硬件性能。同样,FPGA厂商也推出了一定规模的浮点矩阵运算IP核[2],其应用针对本厂家器件,且经过专业调试和硬件实测,性能稳定且优于手写代码,但还有一些可改进的地方。
    本文基于Altera的算法IP核,采用数选方式对矩阵运算中的单精度浮点矩阵相乘进行改进,可推广到阶数更高的矩阵运算和双精度浮点、复数单精度浮点运算中。
1 浮点矩阵相乘的IP核原理
    Altera公司推出的浮点矩阵相乘IP核ALTFP_MATRIX_MULT,适用于Quartus10.1版本以上的软件环境,能够进行一定规模的浮点矩阵计算,原理图如图1所示。

    图1的矩阵相乘结合流水线方式控制数据流动,关键部分为核心PE(Processing Element)单元实现两浮点数的相乘。输入数据在控制器的引导下分为AA矩阵和BB矩阵,分别存于M144K或M9K存储器中,在计算指令的控制下做浮点相乘运算,接着并行地浮点相加完成输出。分析整个计算结构,要达到较好的性能就需要耗费多个存储器和多个浮点相乘单元。列出矩阵相乘的基本时序图如图2所示。

 

 

    从时序图可见,整个IP核有7个输入、4个输出,分为数据加载、数据处理、数据输出三个阶段。在系统同步时钟sysclk的驱动下,loadaa、loadbb对数据loaddata进行乘数矩阵、被乘数矩阵使能,将数据加载到存储器中。当calcimatrix上升沿到来时,进行矩阵乘法运算并输出数据outdata,且在outvalid为高电平时有效。在整个数据输出有效阶段,完成信号done处于低电平,其余阶段为高电平。
    浮点矩阵运算IP核的运算方式分为单精度、双精度、复数单精度三种方式,矩阵运算阶数有8、16、32、64、96、128阶6种,并不能实现任意阶矩阵的相乘,随着矩阵阶数的增大,最高时钟频率在下降,同时占用器件资源在增加,耗用最多的是存储器资源,呈几何倍数增长。
2 数选实矩阵相乘设计
    在矩阵相乘运算中最基础的是2阶矩阵的相乘,核心部分为乘累加器[3],通过适当数选控制,可使整个矩阵运算具有高时钟频率。如图3为2阶矩阵相乘电路。
    整个矩阵相乘模块的设计,结合数据选择的控制方式,分为流水线数据输入、数据相乘、数据输出三部分。在流水线数据输入模块,采用流水线的方式输入乘矩阵数据KA、KB,被乘数矩阵数据A、B,以同步系统时钟启动两个数据选择器,由cntr0控制两个数选器选择数据输出到乘法器两端;将乘法器的输入数据相乘并存于寄存器中;最后在数据输出部分cntr1模块的控制下,累加输出矩阵数据X、Y,完成矩阵运算。以Altera器件EP2C35F672C6为映射器件,其时钟频率为250 MHz。在Quartus7.2软件编程下,运行此2阶乘法器,可获得248.69 MHz的最高时钟频率。占用资源为172个逻辑单元、152个寄存器、2个9位乘法器,且在输入数据之后2个时钟输出运算结果,如图4所示。设计具有较高的计算性能,关键点在于数据选择器在电路运算过程中的作用,取代了存储器单一存储的目的,可进行乒乓式实时数据流动,提高系统运算效率,节省了一半存储器。
    图4中乘矩阵[KA KB]在Matlab中的表示为[5 3;2 4],被乘矩阵[A B]表示为[2 2;3 4],得到的输出结果为[16 27;12 22],可见FPGA运算结果与Matlab结果一致。


3 浮点矩阵相乘运算的改进
    本文以16×16阶浮点矩阵相乘为例,采用单精度浮点计算方式,结合2阶高速矩阵运算电路对16阶矩阵运算进行改进,其他高阶矩阵运算可采用类推的方式完成。
3.1 高阶矩阵运算分解
    高阶矩阵分解运算是通过分解大规模矩阵为许多子矩阵进行计算的方式,所以可将16×16阶矩阵划分为4个8×8阶矩阵,实现2阶矩阵相乘。16×16阶矩阵相乘运算,可表达为式(1):

    从式(1)的16阶矩阵相乘运算,可知其需要8次8阶浮点矩阵相乘和4次8阶浮点矩阵相加运算。分析可得,在数据并行输入输出的情况下,相比较于16阶矩阵IP核的运行方式,此种分解方式性能要高。主要由于IP核运行方式跨度长,在数据输入时,需要经过16×16级存储器,而本文设计的方式只需要8×8级存储和4次并行的浮点相加运算,同时相比较于16阶IP耗用存储资源和浮点乘法单元数较少。
3.2 矩阵相乘硬件实现
    采用Quartus10.1软件设计16阶单精度浮点矩阵相乘电路,使用VHDL语言[4]编写,模块由流水线数据输入、矩阵相乘、锁存器、浮点加法数选模块4部分组成,设计框图如图5所示。
    在流水线数据输入部分,对数据data进行分割,当信号load为高电平时使能,同时进行数据的缓存和生成控制位,输出的三位控制位(calcimatrix、loadaa、loadbb)控制着下一步矩阵相乘的运算,在loadaa与loadbb高电平交互之间的数据值取0,具有数据缓存和分割的作用。最后一个模块需要进行8×8阶矩阵的32位浮点加法运算,同时输出数据有效电平,使用Altera altfp_add_sub IP 核实现单精度浮点加法器,可根据用户的定制完成。对图5的模块加入几个输出结果,使用modelsim6.5进行仿真,可得16阶矩阵运算仿真结果如图6所示。

    从图6可见loadaa、loadbb、calcimatrix三者的时序满足浮点矩阵运算的时序图,在前两者数据加载后,即可获得calcimatrix上升沿,进行矩阵相乘。输出结果分为4个大组,各大组有8小组,每一小组由8个数据组成,具有较好的计算结果。
4 性能比较分析
4.1 性能比较

    将第3节设计的16阶矩阵相乘电路与Altera自身提供的IP核进行比较。同时以8阶矩阵相乘为基,以第2节的方式设计4×4阶数选实矩阵电路,套用于32×32阶矩阵运算中,与Altera的IP核比较。IP核使用最高性能运行,同时以资源消耗、浮点操作数[5]、最高时钟频率、吞吐量作为比较准则,其中浮点操作数的计算表达式为:

    依据以上浮点操作数计算方式,使用Quartus10.1软件进行编程,映射到Stratix III系列的器件中,可获得相应的对比表如表1所示。


    从表1结果可见改进的浮点运算电路在ALM的资源占用减少了许多。原因为在矩阵规模增大时,只使用了8阶浮点矩阵运算,浮点IP核中的乘加核数量不变,所以消耗的浮点相乘单元不变,同样增添的浮点加法器也只消耗了不多的ALM资源。而对于改进的两类矩阵相乘都只使用8阶矩阵乘法,所以在乘法器和M9K存储器这两类逻辑单元的消耗不变。为了达到较好的性能,需要少量外围存储器处理数据的流动和浮点相加运算,但整体存储器消耗降低。观察吞吐量可知,套用的数选式矩阵相乘模块,当阶数增大时吞吐量降低,幅度明显,而选择2阶数选矩阵具有乒乓结构,性能有所提升。同理适用于浮点操作数的情况。最后整个运算电路的最高时钟频率始终是提升的。与Altera公司的IP核比较,改进的16阶浮点矩阵运算电路性能较好,而32阶运算电路性能却未达到要求。
    对高阶矩阵进一步分析,在32阶运算电路的设计中,使用16阶浮点矩阵为乘法运算部分,以2×2实矩阵运算电路为核心,能够提升32阶电路的运算性能。
4.2 精度分析
    以16阶矩阵的运算进行精度分析,取乘矩阵与被乘矩阵各16个数据进行计算分析,列出表2数据,其中B矩阵为现有数据的转置,以Matlab和FPGA运算结果进行对比。

          从Matlab与FPGA计算结果可见,计算输出近乎完全相同,相差的数据值也是由于Matlab在计算中需要先转化为双精度运算后才转化为单精度数,从而得出FPGA计算具有较高的精度。
    本文利用IP核性能稳定、使用方便等特点,对现有的单精度浮点矩阵运算进行改进,采用矩阵嵌入式的形式,将浮点运算IP核嵌入到2阶数选实矩阵模块中,降低存储器和计算资源消耗,提升了系统吞吐量、浮点运算性能和运行最高时钟频率。这种改进的浮点矩阵乘法器对降低资源消耗、提升系统性能具有重大意义。同时,利用VHDL语言编写,具有模块化设计思想,使得本设计可移植性强、通用性好,只需要在现有IP核的基础上进行小规模改进,即可拥有较高性能,具有一定的工程实际意义和应用前景。
参考文献
[1] 田翔,周凡,陈耀武,等.基于FPGA的实时双精度浮点矩阵乘法器设计[J].浙江大学学报(工学版),2008(9).
[2] Altera Corp.Floating-Point megafunctions user guide.2010.
[3] 蔡敏,闵言灿.全流水线结构双精度浮点乘加单元的设计[J].微电子学与计算机,2010(1).
[4] 江思敏.VHDL数字电路及系统设计[M].北京:机械工业出版社,2006.
[5] 余江洪,肖燕成,朱宗柏,等.基于Linpack的高性能计算机集群的并行性能测试[J].船电技术,2009(5).

此内容为AET网站原创,未经授权禁止转载。