一种基于fpga的脉动结构矩阵乘法器及其实现方法

文档序号:9826077阅读:619来源:国知局
一种基于fpga的脉动结构矩阵乘法器及其实现方法
【技术领域】
[0001] 本发明涉及FPGA技术及高性能计算技术领域,具体来说是一种基于FPGA的脉动 结构矩阵乘法器及其实现方法。
【背景技术】
[0002] 矩阵乘法运算作为科学计算、数字信号处理等方面的一个基本运算而得到广泛应 用,并且其计算性能直接影响到系统的整体性能,随着计算数据量日益庞大与要求精度水 平的不断提高,矩阵乘法逐渐成为系统计算性能的瓶颈。
[0003] 以前的矩阵乘法运算通常采用硬件为通用处理器,软件实现矩阵乘法的方法或者 是采用硬件为专用的数字信号处理器(Digital Signal Process, DSP)实现。该类处理方 法技术较为成熟,实现工具完善,编程简单的特点,但是由于其内部结构和平台的限制,不 适合对实时性可靠性要求比较高的场合,也不适合应用在小型的嵌入式系统中。采用通用 处理器或DSP技术通常受器件的主频等因素影响,无法达到很高的计算性能。
[0004] 近年来FPGA技术及其工艺水平的不断提高,FPGA已能够应用在复杂密集型的计 算的场合,而且FPGA特有的可编程性使其能灵活应对各种不同需求的场合,实现各种不同 逻辑功能,使系统具有良好的可扩展性。FPGA固有的细粒度并行能力,高性能低功耗比,使 其成为嵌入式系统性能加速的最好的选择之一。
[0005] 如图1所示的脉动结构是一种本身就具备流水线功能的线性结构,不同方向数量 不等的线性结构并行操作,可以得到相当高的系统数据吞吐量和时钟频率,而且脉动结构 具有简单、规整、模块性好的特点,只有少量的节点与外部有10操作,这能使系统保持较好 的处理速度,同时也可与外部10带宽之间的平衡,非常适合FPGA实现。
[0006] 目前使用FPGA实现并行矩阵乘法方面,大部分将一行和一列的一个数据输出到N 个节点,出现输入模块扇出过大,布线延迟增加,不具备流水线结构,容易出现错误的问题, 导致整体矩阵乘法器难以达到较高性能且不可靠,难以满足计算实时性的要求。除此之外 还出现数据输入控制复杂,计算后的结果读取困难,而且整体不具有模块性,移植后需要大 部分修改的缺点。

【发明内容】

[0007] 针对现有技术中存在的上述不足之处,本发明要解决的技术问题是提供一种能够 解决现有矩阵乘法器输入模块扇出过高,难以达到较高整体性能,数据输入控制复杂,计 算后的结果读取困难,而且整体不具有模块性,移植后需要大部分修改等问题的一种基于 FPGA的脉动结构矩阵乘法器及其实现方法。
[0008] 本发明为实现上述目的所采用的技术方案是:一种基于FPGA的脉动结构矩阵乘 法器及其实现方法,包括:乘法器阵列、时钟控制模块、数据输入控制模块、数据输出控制模 块;
[0009] 所述乘法器阵列为Μ行R列的二维网孔阵列结构,由MXR个节点单元构成,并且 相邻节点单元之间互联,用于实现输入矩阵A和矩阵B的乘积运算;
[0010] 所述时钟控制模块,用于输出两路时钟,分别提供给数据输入控制模块和数据输 出控制模块;
[0011] 所述数据输入控制模块,用于在时钟控制模块的控制下并行输入矩阵A和矩阵B, 其中矩阵A为Μ行N歹(J,矩阵B为N行R列;
[0012] 所述数据输出控制模块,用于输出矩阵C,其中矩阵C为Μ行R列。
[0013] 所述节点单元由一个乘法器,一个加法器和一个用于存储计算结果的寄存器组 成;所述乘法器接收该节点单元的输入数据,将乘积结果发送给加法器;所述寄存器用于 存储上一时钟周期的数据累加和;所述加法器用于将乘法器的乘积结果和寄存器中上一时 钟周期的的数据累加和做加法运算,并将加法运算的结果发送给寄存器更新存储。
[0014] 所述节点单元内部的乘法器采用FPGA内部的专用乘法硬核。
[0015] 所述数据输入控制模块在时钟控制模块的控制下按行输入矩阵Α、按列输入矩阵 Β,直至矩阵Α、矩阵Β所有数据穿越乘法器阵列的全部节点单元的整行和整列。
[0016] 所述数据输出控制模块在时钟控制模块的控制下按行或列进行输出。
[0017] -种基于FPGA的脉动结构矩阵乘法器的实现方法,包括以下步骤:
[0018] 数据输入控制模块将Μ行Ν列的矩阵Α和Ν行R列的矩阵Β,在时钟控制模块的控 制下并行输入到乘法器阵列中;
[0019] 输入数据在乘法器阵列中的各个节点单元中进行乘法运算并累加,在时钟控制模 块的控制下,完成所有节点单元计算,直到没有数据输入;
[0020] 数据输出控制模块在时钟控制模块的控制下输出Μ行R列的矩阵C作为矩阵乘法 结果。
[0021 ] 所述数据输入控制模块将Μ行Ν列的矩阵Α和Ν行R列的矩阵Β,在时钟控制模块 的控制下并行输入到乘法器阵列中,使用如下规则:
[0022] 矩阵A为Μ行N列,Alik是矩阵A的元素 ,i = 1,2,……M,k=l,2……N ;矩阵B 为N行R列,Bt j是矩阵B的元素,k= 1,2……N;j = 1,2,……R。
[0023] 矩阵A的行向量按行号从小到大的顺序依次进入到乘法器阵列对应的行,并且相 邻行向量进入乘法器阵列在时间上相差1个时钟周期,即矩阵A的第i行k列的数据\,与 矩阵A的第i-Ι行k-Ι列的数据~ lik i同时进入乘法器阵列;
[0024] 矩阵B的列向量按列号从小到大的顺序依次进入到乘法器阵列对应的列,并且相 邻列向量进入乘法器阵列在时间上相差1个时钟周期,即矩阵B的第k行j列的数据\ ,与 矩阵B的第k-Ι行j-Ι列的数据Bk i, i同时进入乘法器阵列;
[0025] 并且,矩阵A按行进入到乘法器阵列与矩阵B按列进入到乘法器阵列在时间上并 行,即A lik和\ ,是在同一时钟周期下进入乘法器阵列,直至矩阵A和矩阵B的所有元素全 部穿越MXR个节点单元组成的乘法器阵列的整行和整列,使数据到达各个节点单元的输 入控制满足时间对准的输入规则。
[0026] 所述输入数据在乘法器阵列中的各个节点单元中进行乘法运算并累加,在单个节 点单元中,执行以下步骤:
[0027] 1)接收脉动方向的行和列的上一个节点的数据;
[0028] 2)计算两个数据的乘积,并与原来寄存的结果进行累加;
[0029] 3)保存累加后的值,将接受的行输入数据输出到下一个行节点,接受的列输入数 据输出到下一个列节点。
[0030] 与现有技术相比,本发明的有益效果是:
[0031] 1.本发明采用脉动结构的矩阵阵列结构,具有完全的流水线特点,对输入方的扇 出要求很低,能达到很高的计算性能,经测试,使用Altera DE2开发板实现可以达到将近 200M的最大时钟频率,而且在矩阵规模变大时,仍然能保持较高的时钟频率。
[0032] 2.本发明采用双时钟控制整个矩阵乘法器的方法,使输入计算过程和输出过程使 用独立的时钟,易操作性好,能避免误操作,而且能适用计算方与读取方时钟不同的场合。
[0033] 3.本发明具有很好的模块性,特别适合作为一个模块应用在嵌入式系统中,对于 不同的计算规模,因为阵列中的节点都是相同的,只要将阵列重新排列即可,方便重配置。
[0034] 4.本发明具有良好的低功耗性能,使用了双时钟控制计算过程,在没有计算工作 的情况下,关闭时钟,大大降低了矩阵乘法器的总体功耗,适合在嵌入式系统中使用。
【附图说明】
[0035] 图1为本发明方法中脉动阵列原理图;
[0036] 图2为本发明方法中矩阵乘法器的内部结构示意图;
[0037] 图3为本发明方法中矩阵乘法器时钟控制模块示意图;
[0038] 图4为本发明方法中节点单元内部结构图;
[0039] 图5为本发明方法中矩阵乘法器输入实例图;
[0040] 图6为本发明方法中矩阵乘法器在不同输入计算时钟下的数据输入计算状态图。
【具体实施方式】
[0041] 下面结合附图及实施例对本发明做进一步的详细说明。
[0042] 如图2所示,一种基于FPGA的脉动结构矩阵乘法器包括:乘法器阵列、时钟控制模 块、数据输入控制模块、数据输出控制模块;所述乘法器阵列为Μ行R列的二维网孔阵列结 构,由MXR个节点单元构成,并且相邻节点单元之间互联,用于实现输入矩阵Α和矩阵Β的 乘积运算;所述时钟控制模块,用于输出两路时钟,分别提供给数据输入控制模块和数据输 出控制模块;所述数据输入控制模块,用于在时钟控制模块的控制下并行输入矩阵A和矩 阵B,其中矩阵A为Μ行N列,矩阵B为N行R列;所述数据输出控制模块,用于输出矩阵C, 其中矩阵C为Μ行R列。所述数据输入控制模块在时钟控制模块的控制下按行输入矩阵Α、 按列输入矩阵Β,直至矩阵Α、矩阵Β所有数据穿越乘法器阵列的全部节点单元的整行和整 列。所述数据输出控制模块在时钟控制模块的控制下按行或列进行输出。其中C矩阵为Μ 行R列,并且C = ΑΧΒ。
[0043] 如图3所示,为本发明方法中矩阵乘法器时钟控制模块示意图,矩阵乘法器使用 输入计算时钟CLK1和输出时钟CLK2两个时钟,输入计算时钟来自计算方,图中用黑线表 示;输出时钟来自读取方,图中用虚线表示。输入计算时钟主要用作输入控制模块和节点 的CLK1时钟;输出时钟主要用作数据输出模块的时钟和节点的CLK2时钟。时钟控制模块 控制整个矩阵计算流程,计算方使用Reql请求计算,模块根据自身状态以Ackl回复给计算 方;读取方,使用Req2请求读取结果,模块根据自身状态以Ack2回复给读取方。输入和计 算状态时,输入计算时钟CLK1使能,输出时钟CLK2关闭;当处于输出状态时,输入计算时钟 CLK1关闭,输出时钟CLK2使能。
[0044] 如图4所示,节点单元是构成乘法器阵列的基本单元,由一个乘法器,一个加法器 和一个用于存储计算结果的寄存器构成。所述乘法器接收该节点单元的输入数据,将乘积 结果发送给加法器;所述寄存器用于存储上一时钟周期的数据累加和;所述加法器用于将 乘法器的乘积结果和寄存器中上一时钟周期的的数据累加和做加法
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1