0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于pipeline 以及 unroll 指令的介绍

电子设计 来源:电子设计 作者:电子设计 2022-02-09 09:53 次阅读

本文转载自: 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 指令放置的循环层次越高,循环展开的层次也越高,最终会导致使用更大面积的资源去实现,同时并行性也更高。

pIYBAGAJe8GAUqsaAAOfRydUAUE307.png

这里如果循环的边界是变量的话,则无法展开。这将组织函数被流水线化,可以通过添加tripcount 等指令,指定循环在综合时大概的最大最小边界。

在循环流水线优化的过程中,有一个完美循环,半完美循环和非完美循环的代码风格概念,只有当流水线循环完美或半完美时,才可以将嵌套循环彻底并行展开。

完美循环:只有最里面的循环才具有主体内容,在循环语句之间没有指定逻辑,循环界限是恒定的。

半完美循环:只有最里面的循环才具有主体 (内容), 在循环语句之间没有指定逻辑,只有最外面的循环边界可以是可变的。

非完美循环:循环的主体内容分布在循环的各个层次或内层循环的边界是变量。

pIYBAGAJfAOAJQTrAAO0fO_yjLU263.png

当我们要争去最大流水线循环的成功执行,就需要将非完美循环手动修改成完美或半完美循环。 以下代码例子给出了完美循环(左边)和非完美循环(右边)在Vitis HLS 中的执行结果。

o4YBAGAJfEGAEP37AABWikWhzdc769.png

o4YBAGAJfIGAGbXPAAKaN1p2Ycs520.png

综合完毕后,我们可以在分析窗口和综合报告中都很清晰的看出,完美循环在执行的时候,工具自动将内层循环LOOP_J和外层循环LOOP_I合并为一整个大循环,并实现了整个大循环的流水线操作,延迟的周期数为: (400-1) *1+8-1 =406个周期数,延迟大约为 408*2.5 = 1,020 ns

非完美循环中,内层和外层循环没有合并,只有内层循环LOOP_J 实现了流水线执行,进出内循环的浪费的时钟周期增加了整个循环的时钟周期,同时还有一些命令行没有办法跨越循环的层级实现调度上的优化,这些因素都导致了设计的延迟的增加。

本文关于pipeline 以及 unroll 指令的介绍到此结束,下篇文章我们将着重介绍 daraflow 指令。

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指令
    +关注

    关注

    1

    文章

    607

    浏览量

    35710
收藏 人收藏

    评论

    相关推荐

    plc基本指令的应用有哪些

    控制、数据类型转换、算术运算、比较操作、程序控制以及基本的输入输出操作等多个方面。 一、逻辑运算指令 逻辑运算指令是PLC编程中最常用的指令之一,它们用于实现基本的逻辑运算功能,包括逻
    的头像 发表于 10-21 17:16 750次阅读

    微处理器的指令集架构介绍

    微处理器的指令集架构(Instruction Set Architecture,ISA)是计算机体系结构中至关重要的部分,它定义了微处理器能够执行的操作和指令的集合,以及这些指令如何被
    的头像 发表于 08-22 10:53 1194次阅读

    lyrat-mini-v1.2使用例程pipeline_wav_amr_sdcard录音没有声音怎么解决?

    lyrat-mini-v1.2使用例程pipeline_wav_amr_sdcard录音没有声音,SD卡中有文件,但是没有声音怎么解决啊
    发表于 06-28 06:43

    三菱plc累加指令怎么用

    中,累加指令通常使用ADD指令来实现。以下是关于三菱PLC累加指令的详细介绍。 累加指令的基本概
    的头像 发表于 06-20 11:34 3738次阅读

    三菱plc trd指令详解介绍

    为“Transfer Data”。本文将详细介绍TRD指令的基本概念、语法结构、功能特点以及应用实例。 一、TRD指令的基本概念 1.1 TRD指令
    的头像 发表于 06-20 11:29 3198次阅读

    西门子S7-1200 PLC的指令介绍

    了最新的技术,为用户提供了更为高效、灵活的控制方案。本文将详细介绍S7-1200 PLC的指令系统,包括其指令分类、具体指令功能以及在实际应
    的头像 发表于 06-18 14:52 2776次阅读

    三菱PLC数据传送指令介绍

    等功能的基础。本文将详细介绍三菱PLC的数据传送指令,包括其功能、格式、应用示例及注意事项等方面,以帮助读者更好地掌握其使用方法。
    的头像 发表于 06-18 09:53 3794次阅读

    plc控制伺服电机的指令有哪些

    PLC(可编程逻辑控制器)是一种广泛应用于工业自动化领域的控制设备。伺服电机作为执行元件,可以通过PLC进行精确控制。以下是关于PLC控制伺服电机的指令的详细介绍。 概述 PLC控制伺服电机
    的头像 发表于 06-12 11:39 2345次阅读

    部分TIA集成指令处理的方法介绍

    对于优化的DB块,可使用FILL_BLK指令或创建相同的UDT结构类型的DB块,使用MOVE指令清零DB块数据。
    发表于 04-15 09:34 1201次阅读
    部分TIA集成<b class='flag-5'>指令</b>处理的方法<b class='flag-5'>介绍</b>

    蓝牙双模音频模块支持串口AT指令控制介绍

    蓝牙音频模块支持串口AT指令控制介绍,这里推荐BT401蓝牙模块,功能简介如下: BT401模块是一款支持蓝牙、U盘、TF卡播放的5合1的解决方案。模组的亮点在支持无损音乐的播放,以及简单明了的串口控制功能,支持BLE透传,
    的头像 发表于 03-28 11:27 757次阅读
    蓝牙双模音频模块支持串口AT<b class='flag-5'>指令</b>控制<b class='flag-5'>介绍</b>

    浅析SpinalHDL中Pipeline中的复位定制

    之前有系列文章介绍了SpinalHDL中Pipeline的使用,最近在一个功能模块中真实的使用了这个lib。
    的头像 发表于 03-17 17:31 1047次阅读
    浅析SpinalHDL中<b class='flag-5'>Pipeline</b>中的复位定制

    什么是pipeline?Go中构建流数据pipeline的技术

    本文介绍了在 Go 中构建流数据pipeline的技术。 处理此类pipeline中的故障很棘手,因为pipeline中的每个阶段可能会阻止尝试向下游发送值,并且下游阶段可能不再关心传
    的头像 发表于 03-11 10:16 613次阅读

    三菱plc基本指令介绍

    PLS(上升沿微分指令) 在输入信号上升沿产生一个扫描周期的脉冲输出 (2)PLF(下降沿微分指令) 在输入信号下降沿产生一个扫描周期的脉冲输出。
    发表于 01-23 09:38 1552次阅读
    三菱plc基本<b class='flag-5'>指令</b><b class='flag-5'>介绍</b>

    AMD-Xilinx的Vitis-HLS编译指示小结

    流水线指令 pragma HLS pipeline 通过流水线提高性能是计算机架构设计的8个伟大思想之一,不管是硬件设计还是软件设计,流水线设计(pipeline)都能够用更多的资源来实现高速
    发表于 12-31 21:20

    如何在zcu102板卡上创建pipeline呢?

    DisplayPort 1.4 Tx Subsystem core的最简pipeline就是如它的linux driver wiki page里的figure-4那样,framebuffer_read+DP+video_phy。
    的头像 发表于 12-29 10:09 538次阅读