用FPGA处理矩阵加法
用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处理矩阵加法相关推荐
- python【蓝桥杯vip练习题库】ALGO-55 矩阵加法
试题 算法训练 矩阵加法 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定两个N×M的矩阵,计算其和.其中: N和M大于等于1且小于等于100,矩阵元素的绝对值不超过1000. ...
- 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )
文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...
- 1.8 编程基础之多维数组 08 矩阵加法 python
http://noi.openjudge.cn/ch0108/08/ """ 1.8 编程基础之多维数组 08 矩阵加法 http://noi.openjudge.cn/ ...
- 信息学奥赛一本通 1124:矩阵加法 | OpenJudge NOI 1.8 08:矩阵加法
[题目链接] ybt 1124:矩阵加法 OpenJudge NOI 1.8 08:矩阵加法 [题目考点] 1. 二维数组遍历 [题解代码] 解法1: #include<bits/stdc++. ...
- 信息学奥赛一本通(1124:矩阵加法)
1124:矩阵加法 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 25211 通过数: 16193 [题目描述] 输入两个nn行mm列的矩阵AA和BB,输 ...
- 三元组法矩阵加法java_C语言实现矩阵加法、减法、乘法和数乘运算
一.知识储备 • 矩阵与矩阵之间可以进行加法.减法和乘法运算(矩阵的"除法",被特别地定义出了逆矩阵,通过一个矩阵与另一个的逆矩阵的乘法来实现),矩阵和数之间可以进行数乘运算: • ...
- C语言矩阵运算器,实现矩阵加法、减法、乘法、转置和退出。
C语言矩阵运算器,实现矩阵加法.减法.乘法.转置和退出. C语言矩阵运算器,实现矩阵加法.减法.乘法.转置和退出.-C文档类资源-CSDN下载C语言矩阵运算器,实现矩阵加法.减法.乘法.转置和退出.更 ...
- UESTC--ICODING数组与广义表-----矩阵加法
UESTC--ICODING数组与广义表-----矩阵加法 题目: 相关定义如下: 代码: 文章供学习交流参考 题目: 实现三元组表示的两个稀疏矩阵的加法. 相关定义如下: ElemType elem ...
- 矩阵加法 矩阵乘法 Python123题解 不使用numpy
矩阵加法 新建两个矩阵A和B,两个矩阵的数据为 ...
最新文章
- 关于object references an unsaved transient instance - save the transient instance before flushing的解决方法
- 浏览器左上角的网站图标
- 缓存-分布式锁-Redisson-lock锁测试
- TAPI 电话应用程序接口
- SAP Spartacus cost center list class的赋值逻辑
- 三星关闭shell提示_啄木鸟家庭维修|三星滚筒洗衣机4c故障代码
- 根因分析初探:一种报警聚类算法在业务系统的落地实施 1
- 药盒识别/垃圾分类—高精度AI模型训练及边缘部署分享
- 最新综述!深度神经网络视觉识别!共计329篇文献!西安交大、清华等合作出品!...
- Python基础_列表与元组
- jQuery淡入淡出
- 易语言 word类excel类 的 源码和模块
- Java 移位操作符
- 健康驿站房间线上预约系统网站分析
- ubuntu20.04显卡驱动3分钟安装方法
- 【手撕算法】PatchMatch图像修复算法C++实现
- Allegro 中Flow Planning讲解
- 固态和机械硬盘组raid_SSD+机械硬盘Raid 0成最佳搭配?_浦科特 PX-M5Pro_固态硬盘评测-中关村在线...
- abp构建Web API服务
- 设计模式 - 六大设计原则之OCP(开闭原则)
热门文章
- STM32单片机基础19——使用SDMMC接口读写SD卡数据
- 【R语言】第二章上机实验记录
- 如何用视频编辑软件给同轨道素材添加转场
- 信息技术教育与计算机技术的区别,信息技术=计算机技术?!
- 计算机毕业论文java毕业设计选题源代码javaweb火车车辆购票管理系统[包运行成功]
- RS485远程无线抄表系统方案及工作原理Wireless Infrared Meter Reading controller
- compare和comparaTo的区别
- spark通过实现FileFormat方式读取自定义文件格式
- 最强大脑——数字华容道(BFS)
- linux could not open input file:,PHP命令行提示“Could not open input file”解决方法