资料介绍
本文转载自: XILINX开发者社区微信公众号
HLS 优化设计的最关键指令有两个:一个是流水线 (pipeline) 指令,一个是数据流(dataflow) 指令。正确地使用好这两个指令能够增强算法地并行性,提升吞吐量,降低延迟但是需要遵循一定的代码风格。展开 (unroll) 指令是只针对 for 循环的展开指令,和流水线指令关系密切,所以我们放在一起首先我们来看一下这三个指令在 Xilinx 官方指南中的定义:
Unroll: Unroll for-loops to create multiple instances of the loop body and its instructions that can then be scheduled independently.
Pipeline:Reduces the initiation interval by allowing the overlapped execution of operations within a loop or function.
Dataflow:Enables task level pipelining, allowing functions and loops to execute concurrently. Used to optimize through output and/or latency.
Unroll 指令在 for 循环的代码区域进行优化,这个指令不包含流水线执行的概念,单纯地将循环体展开使用更多地硬件资源实现,保证并行循环体在调度地过程中是彼此独立的。
Pipeline 指令在循环和函数两个层级都可以使用,通过增加重复的操作指令(如增加资源使用量等等)来减小初始化间隔。
Dataflow 指令是一个任务级别的流水线指令,从更高的任务层次使得循环或函数可以并行执行,目的在于减小延迟增加吞吐量。
Unroll 和 Pipeline 指令相互重合的关系在于,当对函数进行流水线处理时,以下层次结构中的所有循环都会自动展开,而使用展开指令的循环并没有给定对II的约束。在最新版本的 Vitis HLS 工具中,工具会自动分析数据之间的流水线操作关系,以II=1为目标优化,但是还是会受限于设计本身的算法和代码风格。下图非常清晰地阐明了Unroll 和 Pipeline 指令的关系,Pipeline 指令放置的循环层次越高,循环展开的层次也越高,最终会导致使用更大面积的资源去实现,同时并行性也更高。
这里如果循环的边界是变量的话,则无法展开。这将组织函数被流水线化,可以通过添加tripcount 等指令,指定循环在综合时大概的最大最小边界。
在循环流水线优化的过程中,有一个完美循环,半完美循环和非完美循环的代码风格概念,只有当流水线循环完美或半完美时,才可以将嵌套循环彻底并行展开。
完美循环:只有最里面的循环才具有主体内容,在循环语句之间没有指定逻辑,循环界限是恒定的。
半完美循环:只有最里面的循环才具有主体 (内容), 在循环语句之间没有指定逻辑,只有最外面的循环边界可以是可变的。
非完美循环:循环的主体内容分布在循环的各个层次或内层循环的边界是变量。
当我们要争去最大流水线循环的成功执行,就需要将非完美循环手动修改成完美或半完美循环。 以下代码例子给出了完美循环(左边)和非完美循环(右边)在Vitis HLS 中的执行结果。
综合完毕后,我们可以在分析窗口和综合报告中都很清晰的看出,完美循环在执行的时候,工具自动将内层循环LOOP_J和外层循环LOOP_I合并为一整个大循环,并实现了整个大循环的流水线操作,延迟的周期数为: (400-1) *1+8-1 =406个周期数,延迟大约为 408*2.5 = 1,020 ns
非完美循环中,内层和外层循环没有合并,只有内层循环LOOP_J 实现了流水线执行,进出内循环的浪费的时钟周期增加了整个循环的时钟周期,同时还有一些命令行没有办法跨越循环的层级实现调度上的优化,这些因素都导致了设计的延迟的增加。
本文关于pipeline 以及 unroll 指令的介绍到此结束,下篇文章我们将着重介绍 daraflow 指令。
- 基于BiLSTM-CRF的细粒度知识图谱问答模型 4次下载
- 基于文本的细粒度美妆图谱视觉推理问题 1次下载
- 结合非局部和多区域注意力机制的细粒度识别方法 3次下载
- 基于卷积神经网络多层面二阶特征融合模型 4次下载
- 基于深度图注意力卷积CNN的三维模型识别方法 6次下载
- 关于类脑和神经计算 10次下载
- 基于LSTM模型的多时间尺度融合预测方法 19次下载
- 一种利用GPU并行计算提升杂波生成实时性的方法 12次下载
- 使用深度模型迁移进行细粒度图像分类的方法说明 5次下载
- 基于ABS细粒度隐私隔绝的身份追溯研究 0次下载
- 一种细粒度云存储数据完整性检测 0次下载
- 具有细粒度访问控制的密码学的云存储系统 0次下载
- 一种细粒度的面向产品属性的用户情感模型 0次下载
- 基于AOP的细粒度RBAC模型研究 20次下载
- 面向多客体的细粒度RBAC模型及应用
- 浅析SpinalHDL中Pipeline中的复位定制 828次阅读
- 什么是pipeline?Go中构建流数据pipeline的技术 431次阅读
- 数仓中搭建细粒度容灾应用的主要步骤 321次阅读
- ICLR 2024 清华/新国大/澳门大学提出一模通吃的多粒度图文组合检索MUG:通过不确定性建模,两行代码完成部署 471次阅读
- 一种面向标识公共递归解析节点的数据安全加固策略 488次阅读
- Kubernetes RBAC:掌握权限管理的精髓 358次阅读
- 基于PyTorch的模型并行分布式训练Megatron解析 2291次阅读
- Pipeline中throwIt的用法 413次阅读
- CVPR2023 I BUFFER:点云配准中卓越精度、高效性和泛化性的完美平衡 756次阅读
- 论文插图也能自动生成了!用到了扩散模型,还被ICLR 2023接收! 454次阅读
- 基于实体和动作时空建模的视频文本预训练 653次阅读
- Leptos利用细粒度的响应式来构建声明性用户界面 1038次阅读
- 通过对比学习的角度来解决细粒度分类的特征质量问题 2122次阅读
- 细粒度图像分析任务在发展过程中面临着独特的挑战 4700次阅读
- 一个能通过空间条件坐标和隐变量生成图像片、并合成完整图片的网络模型 4123次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1491次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 95次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 11次下载 | 免费
- 6100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 7基于单片机和 SG3525的程控开关电源设计
- 0.23 MB | 4次下载 | 免费
- 8基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537793次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多