用FPGA处理矩阵加法,何时能比CPU快

设备:
alter cyclone EP1C3T144C8 ;
串口RS232 ;
PC机 ;
利用RS232 实现 PC 和 FPGA 通信

实验目标

对于5000x5000的矩阵A、B,进行相加。保证每位数据均为七位宽(即数据范围0-127)(即保证数据和低于八位宽(0-255))。

比较PC机和FPGA处理速度


实验过程


Step 1 利用PC进行处理(c++)

把矩阵定义为short类型(因为不知道更短的类型)

跑一个矩阵求和,大概25_000_000次short型计算

跑出来的时间51ms(计算一下,我的电脑大概一秒能做600_000_000次整型运算)

结论 PC能在50ms给出答案(不包括IO时间)

优点:足够快且简单

缺点:时延不固定


Step 2 利用RAM缓存处理数据

按照CPU的处理思路,第一想法是把数据加载进入RAM,然后读出,处理,输出;然后再加载进入RAM,再读出处理输出……

看一下我EP1C3T144C8的RAM,RAM只有59904个bit,也就是能存7488个字节,然而我有25_000_000个字节,这样得重复处理大概2500次。

但好在FPGA对于片上RAM的读写非常快(读写速度是由时钟频率决定的),再加上RAM可以实现边读边写,那我们何必去使用RAM,直接使用FIFO即时处理不就好了。(所以RAM和FIFO本质上没有什么不同吧)



Step 3 即时处理每帧数据

处理框图如下,利用同一个时钟sys_clk进行驱动,在uart_rx 模块收入矩阵A一帧数据(一个完整的数)之后,传入数据处理模块利用寄存器暂存,这时候等待uart_rx 模块传来矩阵B同一个坐标下的数据,传入数据处理模块后,相加结果传入uart_tx模块输出。

整个处理过程用一个例子阐述就是

eg:

A B

[1,2,3] [1,2,3]

[4,5,6] [4,5,6]

[7,8,9] [7,8,9]

矩阵A的数据1传入数据处理模块暂存,等待B传入数据1,传入之后相加再输出。

整个处理时间是在时钟频率内就可以完成的

但是串口的波特率只有9600,大量的时间花费在IO上

结论 处理时间能够在固定时延内完成(几个时钟周期),但是IO时间成本高

优点 时延固定,并且处理时间能够在几个时钟内解决

缺点 IO成本高

PS:我们依然用利用PC进行预处理,因为要AB两个矩阵轮流发送数据(这样就显得FPGA画蛇添足了,但这只是开始吧!


Step 4提高串口bps,换用高速接口

不过显然这个问题可以得到改善,我们只需要提高接口协议的速率即可。

两个矩阵2x5000x5000x8一共200_000_000bit的数据

USB3.0的bps在Gbps(1_000_000_000 bit/s)这个级别,所以理论上可以在200_000_000/1_000_000_000 == 0.2秒之内完成操作,但是这时候时钟频率也要达到Ghz,显然对于FPGA来说无法达到(目前旗舰FPGA主频在几百Mhz,即使倍频成Ghz,也是无法稳定工作,甚至利用PLL无法输出Ghz的时钟频率)

结论 FPGA的主频无法支持这个想法


Step 5多个IO口提高速率

优化到Step 4 的时候,我脑子里都是FPGA是一个并行化处理见长,那么我们怎么进行并行化处理呢?

一个最直观的想法就是提高IO口数目

这样的话,似乎并行口越多,处理速度越快,要是有一万个IO口我们就能提升一万倍了

显然,没有电脑有几万个IO口


Step 6 多时钟域处理问题

直到我在知乎上看到这样一句话(历史记录找不到了,大概是这个意思

FPGA从来不是靠极快的时钟频率解决问题,而是靠多个时钟域并行处理

这句话顿时让我醒悟,之前Step 4遗留下来的问题,我们并不需要提高时钟频率啊!而是采用多个时钟,时钟之间有相位差就可以了啊!

cyclone I 系列的PLL是1个,每个锁相环可以产生5路时钟信号

也就是说,我们可以将时间缩小5倍

当锁相环数量增多,两个PLL我们就能实现一个数量级的时间优化

对于1Gbps传入的数据,如果在10个异步时钟域处理问题,那么时钟需要的频率就是1_000_000_000/10 == 100MHZ的频率,这就是我们完全能够达到的。

如果我们再增加PLL数量呢?情况当然会更好了。

总结

一个简单的矩阵的加法的例子,就能充分体现(我认为的)FPGA的并行优势。

这是建立在我们的一次操作,仅仅是一次加法的基础上,CPU占尽了优势,因为CPU处理一次加法的时间远快于FPGA的一个时钟周期。

但是如果我们的一次操作不仅仅是一个加法呢?

如果我们一次操作CPU要O(N)的时间(例如对N个数据求和

但是FPGA能在一个时钟周期内完成

显然,不用任何优化,FPGA就占据了一个数量级的优势了

从C语言到硬件描述语言,我们又迈出了一步!

但是作者只是初学者,如果有错误,请不啬赐教!

用FPGA处理矩阵加法相关推荐

  1. python【蓝桥杯vip练习题库】ALGO-55 矩阵加法

    试题 算法训练 矩阵加法 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定两个N×M的矩阵,计算其和.其中: N和M大于等于1且小于等于100,矩阵元素的绝对值不超过1000. ...

  2. 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )

    文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...

  3. 1.8 编程基础之多维数组 08 矩阵加法 python

    http://noi.openjudge.cn/ch0108/08/ """ 1.8 编程基础之多维数组 08 矩阵加法 http://noi.openjudge.cn/ ...

  4. 信息学奥赛一本通 1124:矩阵加法 | OpenJudge NOI 1.8 08:矩阵加法

    [题目链接] ybt 1124:矩阵加法 OpenJudge NOI 1.8 08:矩阵加法 [题目考点] 1. 二维数组遍历 [题解代码] 解法1: #include<bits/stdc++. ...

  5. 信息学奥赛一本通(1124:矩阵加法)

    1124:矩阵加法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 25211     通过数: 16193 [题目描述] 输入两个nn行mm列的矩阵AA和BB,输 ...

  6. 三元组法矩阵加法java_C语言实现矩阵加法、减法、乘法和数乘运算

    一.知识储备 • 矩阵与矩阵之间可以进行加法.减法和乘法运算(矩阵的"除法",被特别地定义出了逆矩阵,通过一个矩阵与另一个的逆矩阵的乘法来实现),矩阵和数之间可以进行数乘运算: • ...

  7. C语言矩阵运算器,实现矩阵加法、减法、乘法、转置和退出。

    C语言矩阵运算器,实现矩阵加法.减法.乘法.转置和退出. C语言矩阵运算器,实现矩阵加法.减法.乘法.转置和退出.-C文档类资源-CSDN下载C语言矩阵运算器,实现矩阵加法.减法.乘法.转置和退出.更 ...

  8. UESTC--ICODING数组与广义表-----矩阵加法

    UESTC--ICODING数组与广义表-----矩阵加法 题目: 相关定义如下: 代码: 文章供学习交流参考 题目: 实现三元组表示的两个稀疏矩阵的加法. 相关定义如下: ElemType elem ...

  9. 矩阵加法 矩阵乘法 Python123题解 不使用numpy

    矩阵加法 新建两个矩阵A和B,两个矩阵的数据为‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭ ...

最新文章

  1. 关于object references an unsaved transient instance - save the transient instance before flushing的解决方法
  2. 浏览器左上角的网站图标
  3. 缓存-分布式锁-Redisson-lock锁测试
  4. TAPI 电话应用程序接口
  5. SAP Spartacus cost center list class的赋值逻辑
  6. 三星关闭shell提示_啄木鸟家庭维修|三星滚筒洗衣机4c故障代码
  7. 根因分析初探:一种报警聚类算法在业务系统的落地实施 1
  8. 药盒识别/垃圾分类—高精度AI模型训练及边缘部署分享
  9. 最新综述!深度神经网络视觉识别!共计329篇文献!西安交大、清华等合作出品!...
  10. Python基础_列表与元组
  11. jQuery淡入淡出
  12. 易语言 word类excel类 的 源码和模块
  13. Java 移位操作符
  14. 健康驿站房间线上预约系统网站分析
  15. ubuntu20.04显卡驱动3分钟安装方法
  16. 【手撕算法】PatchMatch图像修复算法C++实现
  17. Allegro 中Flow Planning讲解
  18. 固态和机械硬盘组raid_SSD+机械硬盘Raid 0成最佳搭配?_浦科特 PX-M5Pro_固态硬盘评测-中关村在线...
  19. abp构建Web API服务
  20. 设计模式 - 六大设计原则之OCP(开闭原则)

热门文章

  1. STM32单片机基础19——使用SDMMC接口读写SD卡数据
  2. 【R语言】第二章上机实验记录
  3. 如何用视频编辑软件给同轨道素材添加转场
  4. 信息技术教育与计算机技术的区别,信息技术=计算机技术?!
  5. 计算机毕业论文java毕业设计选题源代码javaweb火车车辆购票管理系统[包运行成功]
  6. RS485远程无线抄表系统方案及工作原理Wireless Infrared Meter Reading controller
  7. compare和comparaTo的区别
  8. spark通过实现FileFormat方式读取自定义文件格式
  9. 最强大脑——数字华容道(BFS)
  10. linux could not open input file:,PHP命令行提示“Could not open input file”解决方法