基于脉动阵列的矩阵乘法加速(FPGA)

这篇具有很好参考价值的文章主要介绍了基于脉动阵列的矩阵乘法加速(FPGA)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于脉动阵列的矩阵乘法加速(FPGA)

​ 原本准备做FADDEV求逆矩阵算法的FPGA实现,其中有一个概念挺吸引人,就是:脉动阵列。

1、脉动阵列

​ 先来讲讲脉动阵列的概念,脉动阵列其实是一种处理单元的结构。数据同步流过,能够减小降低重复访问,调高处理效率和资源消耗。

​ 其实这是个比较旧的概念了,1982就有学者提出了。18年谷歌提出的TPU(Tensor Processing Unit)让这个概念回到大众视野,通过脉动阵列可以设计完成矩阵乘法和卷积的操作。今天先讲讲矩阵乘法的实现。

2、脉动阵列结构

​ 我们直接上图来讲解脉动阵列的结构。图源来自(§4脉动阵列处理机 - 百度文库 (baidu.com))

​ 先设两个进行叉乘的矩阵

基于脉动阵列的矩阵乘法加速(FPGA)

这里就不讲矩阵的乘法怎么运算了,基本的线性代数知识。

基于脉动阵列的矩阵乘法加速(FPGA)

​ 上图即为脉动阵列进行矩阵乘法时的布局。这里讲一下,图中每一个处理单元(后文简称为PE)。每个PE的结构都是有一个乘法器和累加器构成。两个输入端,分别接收两矩阵的行与列,输出乘法再累加结果,并延不同方向输出矩阵值。

基于脉动阵列的矩阵乘法加速(FPGA)
基于脉动阵列的矩阵乘法加速(FPGA)
基于脉动阵列的矩阵乘法加速(FPGA)
基于脉动阵列的矩阵乘法加速(FPGA)

​ 经过上图的流动就可以完成矩阵乘法。并且只花费了2n+1个时钟。

3、PE单元设计

​ 我们了解了脉动阵列进行矩阵乘法的流程之后,就可以开始动手设计了。首先我们知道需要设计PE单元。在这个例子里PE单元可以看作下图

基于脉动阵列的矩阵乘法加速(FPGA)

​ 其中data_tmp忽略。也就是PE单元中需要两个输入端,三个输出端,并且完成乘法和累加的功能。那么我们可以根据这个需求建立模块。

​ 直接上源码:

`timescale 1ns/1ns

module pe(
    input clk,
    input rstn,
    input [3:0] a_curr,
    input [3:0] b_curr,
    output reg [3:0] a_last,
    output reg [3:0] b_last,
    output reg [7:0] data_out
);
    wire [7:0] data_tmp;
    always@(posedge clk or negedge rstn)
        begin
            if(!rstn)
                begin
                    a_last<='d0;
                    b_last<='d0;
                end
            else
                begin
                    a_last<=a_curr;
                    b_last<=b_curr;
                end
        end
    always@(posedge clk or negedge rstn)
        begin
            if(!rstn)
                data_out<='d0;
            else
                begin
                    data_out<=data_out+data_tmp;
                end
        end
    
    multi_pipe u_multi_pipe(
        .clk	(clk),
        .rst_n	(rstn),
        .mul_a	(a_curr),
        .mul_b	(b_curr),
        .mul_out (data_tmp)
    );
endmodule

单元模块中直接调用了预先写好了的乘法器使用。编译通过后进行仿真。

4、搭建矩阵乘法用脉冲阵列

​ 我们完成了PE单元的设计之后,就可以通过例化来搭建脉冲阵列,然后需要注意各行各列头一个脉冲阵列的输入序列需要延后一定的clk以实现流水线,具体可以看前面的图片。

​ 具体例化很简单就不展示了,然后编写testbench进行仿真。

基于脉动阵列的矩阵乘法加速(FPGA)

计算的矩阵是:

基于脉动阵列的矩阵乘法加速(FPGA)

(第三行数据最后一位由于溢出导致数据不正常)

根据仿真可以看见从复位开始,经过9个周期完成矩阵乘法运算。由于乘法器使得产生了额外的时钟开销,笔者没有仔细考虑优化,后续会考虑优化,并且完善ip的通用性并降低资源开销与时钟开销。

5、总结

​ 脉动阵列是一个比较旧但是在近几年焕发活力的结构,流水线的数据流入使得能够切合FPGA实现,后续会更新使用脉动阵列搭建矩阵卷积的实现。可以考虑优化,并且完善ip的通用性并降低资源开销与时钟开销。

5、总结

​ 脉动阵列是一个比较旧但是在近几年焕发活力的算法,流水线的数据流入使得能够切合FPGA实现,写的这个也只是探究一下结构,摸索一下,后续会更新使用脉动阵列搭建矩阵卷积的实现。
基于脉动阵列的矩阵乘法加速(FPGA)文章来源地址https://www.toymoban.com/news/detail-428526.html

到了这里,关于基于脉动阵列的矩阵乘法加速(FPGA)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高性能计算实验——矩阵乘法基于MPI的并行实现及优化

    熟练掌握MPI编程方法,并将通用矩阵乘法转为MPI并行实现,进一步加深MPI的使用与理解。 进一步熟悉MPI矩阵乘法的实现,学习MPI点对点通信与集合通信的异同点和各自的优缺点,学会比较二者的性能以及各自使用的情形。 学习如何将自己编写的代码改造为标准库函数,供其

    2024年02月03日
    浏览(38)
  • 基于FPGA的64bit算术乘法器设计Verilog代码Quartus仿真

    名称:基于FPGA的64bit算术乘法器设计Verilog代码Quartus仿真(文末获取) 软件:Quartus 语言:Verilog 代码功能: Verilog HDL设计64bits算术乘法器 基本功能 1.用 Veriloghdl设计实现64bit二进制整数乘法器,底层乘法器使用16*168*88*328*16小位宽乘法器来实现底层乘法器可以使用FPGA内部P实现

    2024年02月19日
    浏览(33)
  • 基于FPGA的3位二进制的乘法器VHDL代码Quartus 开发板

    名称:基于FPGA的3位二进制的乘法器VHDL代码Quartus  开发板(文末获取) 软件:Quartus 语言:VHDL 代码功能: 3位二进制的乘法器 该乘法器实现两个三位二进制的乘法,二极管LED2~LED0显示输入的被乘数,LED5~LED3显示乘数,数码管显示相应的十进制输入值和输出结果 本代码已在开

    2024年02月21日
    浏览(35)
  • 基于紫光同创FPGA的图像采集及AI加速

    本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL50H开发平台(盘古50K开发板) 本篇优秀作品:2023集创赛全国总决赛紫光同创杯赛一等奖获奖作品,来自东莞理工+BugMaker的内容分享。 获奖作品:

    2024年04月14日
    浏览(26)
  • 基于FPGA的卷积神经网络加速器研究

    摘 要   卷积神经网络(Convolution Neural Network,CNN)是在计算机视觉,图像识别和 分类等领域应用最成功的人工神经网络数学模型。高性能神经网络结构规模庞大,一次 完整推理过程需要进行大量乘法加法计算。训练出一个高性能卷积神经网络模型需要的 计算量是推理过程的数

    2024年02月16日
    浏览(24)
  • 基于FPGA的YOLO加速器设计与实现

       特此申明:鉴于白嫖和剽窃等不堪其扰,故将所有博客暂停关闭和更新。        去年空闲之余基于FPGA实现了类YOLO的轻量化的CNN加速器。为了方便,直接基于Ultra96平台进行了验证,整个加速器资源消耗还算客观,帧率基本在200FPS左右。 FPGA实现架构 硬件资源消耗:   

    2024年02月12日
    浏览(33)
  • m基于FPGA的半带滤波器verilog设计,对比普通结构以及乘法器复用结构

    目录 1.算法描述 2.仿真效果预览 3.verilog核心程序 4.完整FPGA         HBF模块由半带滤波器(HBF)和抽取模块组成。该模块的任务是实现2倍抽取进一步降低信号采样速率。由于HBF的冲激响应h(k)除零点外其余偶数点均为零,所以用HBF实现2倍抽取可以节省一半的运算量,对增强软

    2023年04月08日
    浏览(64)
  • 基于FPGA的VGG16卷积神经网络加速器

    文章搬运自本人知乎 VGG在2014年由牛津大学Visual GeometryGroup提出,获得该年lmageNet竞赛中Localization Task(定位任务)第一名和 Classification Task (分类任务)第二名。与AlexNet相比,VGG使用了3个3x3卷积核来代替7x7卷积核,使用了2个3x3卷积核来代替5x5卷积核,从而在保证具有相同感知野的

    2024年02月06日
    浏览(23)
  • Achronix推出基于FPGA的加速自动语音识别解决方案

    提供超低延迟和 极低 错误率 ( WER )的 实时流式语音 转 文本解决方案,可同时运行超过 1000 个并发语音流 2023 年 11 月 ——高性能FPGA芯片和嵌入式FPGA(eFPGA IP)领域的领先企业Achronix半导体公司日前自豪地宣布:正式推出Achronix与Myrtle.ai合作的最新创新——基于Speedster7t

    2024年01月17日
    浏览(30)
  • 基于FPGA的一维卷积神经网络算法实现(1D-CNN、BNN的FPGA加速实现)

    本文介绍一种基于FPGA的1维卷积神经网络算法加速实现的方案,其中为了进一步提升运算速度,除了第一层卷积采用的是普通卷积运算(CONV),其余卷积层和池化层采用的是二值化运算,即二值化的卷积与池化。 运算过程包含了卷积层、池化层、批标准化层、全局池化、二值

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包