对硬件编程的一点理解---vitis使用

硬件的核心是并行编程,它主要包括两大部分:多流水并行、流水内部打拍。

1 多流水并行编程是在硬件内部形成多条流水,和cpu多个核心 类似,但是数量可以远远超过cpu核数,一般实现方案有两种:fifo和ram

1) fifo:将执行流程拆解成多个模块,模块间通过fifo连接起来,每个模块独立一个流水,模块的运行受控于fifo是有数据和控制命令。这块有点像软件的多线程通过无锁队列传输数据的方式。

2) ram:是一个模块将数据写入, 另外一个模块读出处理,这个方式的优势是可以一个生产者、多个消费者处理数据。难点在于通知机制和模块间同步,一般可以用fifo传递信号。

总体来说fifo的方式一般够用,ram的方式用的场景比较少

2 流水内部打拍是指在一个模块内部运行流程周期是M周期,如果需要执行N次,那么总时延是M*N,但是如果流水内部运行流程拆解成多个步骤,每个步骤1拍完成(既拆成M个步骤),然后设计的时候能保证第X步骤生成的中间值在后续步骤使用是不被破坏,就可以每拍启动一次,这样的好处是执行N次的时间是 M+N-1次。

流水打拍严格被循环条件控制,循环不能提前break;而且运行过程中循环条件不能在执行过程中修改;也就是说一但启动流水打拍,只能在流水打拍外部控制是否可以结束,内部无法通过beark或修改循环条件方式控制提前结束(这个是个很苦恼的问题,也是在使用流水打拍不很爽的地方)

流水内部打拍设计有两个难点:如何将步骤拆解成1拍完成,产生的中间值后面使用不被后续打拍破坏

1) 步骤拆解成1拍,主要遇到的问题是原子操作的拆解,比如:128b*128b的乘法,如果是组合电路,1拍很难满足。所以需要设计算法拆解。当然也可以2拍来打拍,但是时延将会变成M+2N-2,成倍数上升。

2)产生的中间值后面使用不被后续打拍破坏,一般做法有两种,将中间变量做成数组(数组的长度不小于步骤数),通过多次寄存器赋值实现。例子如下:

int a,b,c,d;

step1: b=a;

step2: c=b;

step3: d=b+c;

上述例子,如果流水打拍会出现以下场景(按照a=1、2、3、4):

初始状态:a=1,b=0,c=0,d=0

一拍后:    a=2,b=1,c=0,d=0

二拍后:    a=3,b=2,c=1,d=0

三拍后:    a=4,b=3,c=2,d=2+1

四拍后:    a=5,b=4,c=3,d=3+2

而我们想要的是第一个结果是 d=1+1,第二个是d=2+2....

改造方案1(待验证)

int a,b,c,d; int b1;

step1: b=a;

step2: c=b; b1=b;

step3: d=b1+c;

初始状态:a=1,b=0,c=0,d=0,    b1=0

一拍后:    a=2,b=1,c=0,d=0,    b1=0

二拍后:    a=3,b=2,c=1,d=0,    b1=1

三拍后:    a=4,b=3,c=2,d=1+1,b1=2

四拍后:    a=5,b=4,c=3,d=2+2,b1=3

这样就做到我们想要的结果了

改造方案2:

int a[3],b[3],c[3],d;

step1: b[i%3]=a[i%3];

step2: c[i%3]=b[i%3];

step3: d=b[i%3]+c[i%3];

初始状态:a[0]=1,b[0]=0,c[0]=0,d=0

                  a[1]=0,b[1]=0,c[1]=0,d=0

                  a[2]=0,b[2]=0,c[2]=0,d=0

一拍后:    a[0]=1,b[0]=1,c[0]=0,d=0

                  a[1]=2,b[1]=0,c[1]=0,d=0

                  a[2]=0,b[2]=0,c[2]=0,d=0

二拍后:    a[0]=1,b[0]=1,c[0]=1,d=0

                  a[1]=2,b[1]=2,c[1]=0,d=0

                  a[2]=3,b[2]=0,c[2]=0,d=0

三拍后:    a[0]=4,b[0]=1,c[0]=1,d=1+1

                  a[1]=2,b[1]=2,c[1]=2,d=1+1

                  a[2]=3,b[2]=3,c[2]=0,d=1+1

四拍后:    a[0]=4,b[0]=4,c[0]=1,d=2+2

                  a[1]=5,b[1]=2,c[1]=2,d=2+2

                  a[2]=3,b[2]=3,c[2]=3,d=2+2

五拍后:    a[0]=4,b[0]=4,c[0]=4,d=3+3

                  a[1]=5,b[1]=5,c[1]=2,d=3+3

                  a[2]=6,b[2]=3,c[2]=3,d=3+3

这样分别在第3拍、4拍、5拍获取到正确的值

方案1

优点:消耗资源少,对于每个步骤少并且明确是几拍的非常有效

缺点:对于步骤多复杂的场景影响大,而且一旦步骤变化需要重新计算;大于一拍打拍比较难处理

方案2

优点:是结构简单;对于步骤变化不敏感(只要数组的长度不小于步骤数);支持大于1拍打拍;缺点:浪费资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker实战之二

一、前言 前一篇 Docker实战之一 我们介绍了Dokcer 镜像和容器基本概念,这一节我们来具体制作一个镜像文件并进行快速部署,这个镜像文件是我们的测试环境,主要包含JDK1.8、Nginx、Git、Node、Gradle,基础镜像为CentOS&#xff0c…

并查集学习心得

int find(int x)//并查集找父亲 {if(x!fa[x]) fa[x]find(fa[x]);return fa[x]; } void add(int x,int y)//合并 {int fxfind(x);int fyfind(y);if(x!y) fa[fx]fy; } P1197 [JSOI2008] 星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 洛谷p1197星球大战 :并查集逆向…

Java练习题2020-3

统计从1到N的整数中,所有立方值的平方根为整数的数的个数 输入说明&#xff1a;整数 N(N<10000)&#xff1b; 输出说明&#xff1a;符合条件的数的个数&#xff0c;如4^3648^2 输入样例&#xff1a;10 输出样例&#xff1a;3 (说明&#xff1a;样例中符合条件的3个数是1、4、…

用低代码平台代替Excel搭建进销存管理系统

目录 一、用低代码平台搭建系统 1.需求调研 2.基于痛点梳理业务流程 3.低代码实现 &#xff08;1&#xff09;基础资料模块 &#xff08;2&#xff09;采购管理模块 &#xff08;3&#xff09;销售管理模块 &#xff08;4&#xff09;库存管理模块 &#xff08;5&…

【点云】有序/无序点云区别(详细详解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Windows server部署filebeat到kafka

需求&#xff1a;Windows dhcp日志需要实时传输到elk或者其他告警平台。 1、filebeat下载地址&#xff1a;https://www.elastic.co/cn/downloads/beats/filebeat 2、下载后解压后配置filebeat.yml文件&#xff0c; 3、README.md文件中有运行的操作方法&#xff1a;cmd上进入f…

Redis学习笔记5:基于springboot的lettuce redis客户端断线重连ConnectionWatchdog

lettuce默认采用共享本地连接的模式和redis服务器端交互&#xff0c;如果连接断开如何及时发现并且重新建立连接呢&#xff1f;通过翻阅源码发现有两种方案&#xff0c;方案一&#xff1a;开启连接有效性检测&#xff1b;方案二&#xff1a;通过ConnectionWatchdog监视器 一个对…

为什么网上的流量卡都有禁发地区呢?流量卡管控地区整理!

在网上购买过流量卡的朋友应该都知道&#xff0c;但凡是运营商推出的大流量优惠套餐&#xff0c;在套餐详情中都是有禁发地区&#xff0c;只不过每张卡的禁发地区不同而已。 设置禁发地区的主要目的还是为了防止一些电信诈骗案件的发生&#xff0c;或者违法违规利用电话卡的情…

C语言数据结构之数据结构入门

目录 数据结构介绍 数据结构发展史 何为算法 数据结构基础 基本概念和术语 四大逻辑结构&#xff08;Logic Structure&#xff09; 数据类型 理解复杂度概念 时间空间复杂度定义 度量时间复杂度的方法 程序运行时的内存与地址 编程预备 数据结构介绍 数据结构发展…

CVPR2023新作:基于组合空时位移的视频修复

Title: A Simple Baseline for Video Restoration With Grouped Spatial-Temporal Shift (视频修复的简单基准&#xff1a;组合空时位移) Affiliation: CUHK MMLab (香港中文大学多媒体实验室) Authors: Dasong Li, Xiaoyu Shi, Yi Zhang, Ka Chun Cheung, Simon See, Xiaoga…

苏宁一面复盘

技术问题&#xff08;顺序有错乱&#xff09;&#xff1a; 1.抽象类与接口&#xff0c;什么时候用抽象类&#xff0c;什么时候用接口&#xff0c;区别是什么。 答&#xff1a;抽象类内可以有非抽象方法&#xff0c;方法的具体实现&#xff0c;接口内只能有抽象方法&#xff0…

python:多波段遥感影像分离成单波段影像

作者:CSDN @ _养乐多_ 在遥感图像处理中,我们经常需要将多波段遥感影像拆分成多个单波段图像,以便进行各种分析和后续处理。本篇博客将介绍一个用Python编写的程序,该程序可以读取多波段遥感影像,将其拆分为单波段图像,并保存为单独的文件。本程序使用GDAL库来处理遥感影…

一个简单的注册页面,如有错误请指正(2.css)

这段CSS代码定义了页面的样式&#xff0c;让我逐个解释其功能&#xff1a; 1. * {}&#xff1a;通配符选择器&#xff0c;用于将页面中的所有元素设置统一的样式。这里将margins和paddings设置为0&#xff0c;以去除默认的边距。 2. div img {}&#xff1a;选择页面中所有div…

LMFLOSS:专治解决不平衡医学图像分类的新型混合损失函数 (附代码)

论文地址&#xff1a;https://arxiv.org/pdf/2212.12741.pdf 代码地址&#xff1a;https://github.com/SanaNazari/LMFLoss 1.是什么&#xff1f; LMFLOSS是一种用于不平衡医学图像分类的混合损失函数。它是由Focal Loss和LDAM Loss的线性组合构成的&#xff0c;旨在更好地处…

c语言 判断两个文件是否相同

使用strcmp比较&#xff1a; #include <stdio.h> #include <string.h>int Compare(const char * file1, const char* file2) {FILE* f1, * f2;int size1, size2;unsigned char buffer1[1024], buffer2[1024];f1 fopen(file1, "rb");f2 fopen(file2, &…

SpringSecurity 认证实战

一. 项目数据准备 1.1 添加依赖 <dependencies><!--spring security--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!--web起步依赖-…

语雀故障事件——P0级别事故启示录 发生肾么事了? 怎么回事?

前言 最近&#xff0c;阿里系的语雀出了一个大瓜&#xff0c;知名在线文档编辑与协同工具语雀发生故障&#xff0c;崩溃近10小时。。。。最后&#xff0c;官方发布了一则公告&#xff0c;我们一起来看看这篇公告&#xff0c;能不能有所启发。 目录 前言引出一、语雀P0故障回顾…

Centos 7 安装 Docker Enginee

文章目录 Centos 安装 Docker Enginee系统要求卸载旧版本使用 RPM 仓库设置 Docker 仓库安装 Docker Enginee升级 Docker Enginee 卸载 Docker Centos 安装 Docker Enginee 要在 Centos 安装 Docker Enginee&#xff0c;需要满足以下要求&#xff1a; 系统要求 CentOS 7Cent…

重复控制器的性能优化

前言 重复控制器在控制系统中是比较优秀的控制器&#xff0c;在整流逆变等周期性输入信号时&#xff0c;会有很好的跟随行&#xff0c;通常可以单独使用&#xff0c;也可以与其他补偿器串联并联使用。 这里我来分析一下重复控制器的重复控制器的应用工况以及其的优缺点。 分析…